Merge pull request #47 from ruphy/mpcdocs

Preparing the release of MPC: Add doc to website
diff --git a/docs/mpc-api-0.1.md b/docs/mpc-api-0.1.md
new file mode 100644
index 0000000..b5ecd45
--- /dev/null
+++ b/docs/mpc-api-0.1.md
@@ -0,0 +1,44 @@
+---
+id: mpc-api-0.1
+title: Multi-Party Computation (MPC) Library 0.1 (libmpc)
+sidebar_label: Multi-Party Computation Library 0.1
+---
+Apache Milagro's Multi-Party Computation library (libmpc) is the latest addition to the project (as of June 2022), and uses the [Apache Milagro C Library](amcl-c-api-2.0.0) to implement Multi-Party Computation. It offers and API to allow for customs computations to be perfomed.
+
+## Building and running libmpc
+
+The preferred way to get libmpc built and tested is through the use of docker.
+
+Once your docker installation is correctly set-up, simply run:
+```
+ git clone https://github.com/apache/incubator-milagro-MPC.git && cd incubator-milagro-MPC
+```
+```
+ docker build -t libmpc .
+```
+
+If you want to run tests and ensure all routines perform as expected, run:
+```
+docker run --cap-add SYS_PTRACE --rm libmpc
+```
+
+This procedure has been tested on all major platforms (Linux, Mac OS, Windows) on arm64 and x86_64 platforms. If your build or execution fails, please open a bug.
+
+You can also build and run libmpc natively, and you can build the docker image for multiple platforms. To know more, check out [the readme in the GitHub repository](https://github.com/apache/incubator-milagro-MPC).
+
+## API Documentation
+
+Doxygen support is available for Apache Milagro Multi-Party Computation (MPC) Library.
+
+If you build libmpc, you can generate the documentation by running
+```
+make doc
+```
+in the build directory. If you use Docker, and you want the build to generate the documentation, make sure `build_doc` is set to `true`.
+
+An online version of the Doxygen output is available for viewing in a web browser <a href="/mpcdocs/index.html" target="_blank">here</a>.
+
+
+<!--
+Supported admonition types are: caution, note, important, tip, warning.
+-->
diff --git a/website/sidebars.json b/website/sidebars.json
index 719adcd..6e62cf7 100644
--- a/website/sidebars.json
+++ b/website/sidebars.json
@@ -65,6 +65,9 @@
 		"dta-details/plugins-overview",
 		"dta-details/authentication"
     ],  
+	"MPC Library": [
+		"mpc-api-0.1"
+	],
     "ZKP-MFA Clients/Servers": [
       "zkp-mfa-overview",
       "zkp-mfa-api"
diff --git a/website/siteConfig.js b/website/siteConfig.js
index 98dc2e7..761b720 100644
--- a/website/siteConfig.js
+++ b/website/siteConfig.js
@@ -42,7 +42,7 @@
     {doc: 'milagro-intro', label: 'Docs'},
     {doc: 'support', label: 'Support'},
     {doc: 'contributor-guide', label: 'Contributing'},
-	{doc: 'downloads', label: 'Downloads'},
+	  {doc: 'downloads', label: 'Downloads'},
     {blog: true, label: 'Status'},
   ],
 
diff --git a/website/static/mpcdocs/annotated.html b/website/static/mpcdocs/annotated.html
new file mode 100644
index 0000000..cfd8f1e
--- /dev/null
+++ b/website/static/mpcdocs/annotated.html
@@ -0,0 +1,95 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: Data Structures</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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Data Structures</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures 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="structCOMMITMENTS__BC__priv__modulus.html" target="_self">COMMITMENTS_BC_priv_modulus</a></td><td class="desc">RSA modulus for Bit Commitment </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="structCOMMITMENTS__BC__pub__modulus.html" target="_self">COMMITMENTS_BC_pub_modulus</a></td><td class="desc">Public RSA modulus for Bit Commitment </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="structFACTORING__ZK__modulus.html" target="_self">FACTORING_ZK_modulus</a></td><td class="desc">Modulus to prove knowledge of factoring </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="structMTA__RP__commitment.html" target="_self">MTA_RP_commitment</a></td><td class="desc">Public commitment for the Range Proof </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="structMTA__RP__commitment__rv.html" target="_self">MTA_RP_commitment_rv</a></td><td class="desc">Secret random values for the Range Proof commitment </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="structMTA__RP__proof.html" target="_self">MTA_RP_proof</a></td><td class="desc">Range Proof </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="structMTA__ZK__commitment.html" target="_self">MTA_ZK_commitment</a></td><td class="desc">Public commitment for the Receiver ZKP </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="structMTA__ZK__commitment__rv.html" target="_self">MTA_ZK_commitment_rv</a></td><td class="desc">Secret random values for the receiver ZKP commitment </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="structMTA__ZK__proof.html" target="_self">MTA_ZK_proof</a></td><td class="desc">Range Proof for the Receiver ZKP </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="structMTA__ZKWC__commitment.html" target="_self">MTA_ZKWC_commitment</a></td><td class="desc">Public commitment for the Receiver ZKP with check </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/bc_s.png b/website/static/mpcdocs/bc_s.png
new file mode 100644
index 0000000..224b29a
--- /dev/null
+++ b/website/static/mpcdocs/bc_s.png
Binary files differ
diff --git a/website/static/mpcdocs/bdwn.png b/website/static/mpcdocs/bdwn.png
new file mode 100644
index 0000000..940a0b9
--- /dev/null
+++ b/website/static/mpcdocs/bdwn.png
Binary files differ
diff --git a/website/static/mpcdocs/classes.html b/website/static/mpcdocs/classes.html
new file mode 100644
index 0000000..9e7c2b4
--- /dev/null
+++ b/website/static/mpcdocs/classes.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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: Data Structure 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Data Structure Index</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a></div>
+<div class="classindex">
+<dl class="classindex even">
+<dt class="alphachar"><a name="letter_C">C</a></dt>
+<dd><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a></dd><dd><a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a></dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a name="letter_F">F</a></dt>
+<dd><a class="el" href="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a></dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a name="letter_M">M</a></dt>
+<dd><a class="el" href="structMTA__RP__commitment.html">MTA_RP_commitment</a></dd><dd><a class="el" href="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a></dd><dd><a class="el" href="structMTA__RP__proof.html">MTA_RP_proof</a></dd><dd><a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a></dd><dd><a class="el" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a></dd><dd><a class="el" href="structMTA__ZK__proof.html">MTA_ZK_proof</a></dd><dd><a class="el" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a></dd></dl>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/closed.png b/website/static/mpcdocs/closed.png
new file mode 100644
index 0000000..98cc2c9
--- /dev/null
+++ b/website/static/mpcdocs/closed.png
Binary files differ
diff --git a/website/static/mpcdocs/commitments_8h.html b/website/static/mpcdocs/commitments_8h.html
new file mode 100644
index 0000000..1407289
--- /dev/null
+++ b/website/static/mpcdocs/commitments_8h.html
@@ -0,0 +1,412 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: commitments.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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_a166689341c37329f24f96bdba87a08b.html">amcl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">commitments.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Commitment schemes declarations.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;amcl/amcl.h&quot;</code><br />
+<code>#include &quot;amcl/ff_2048.h&quot;</code><br />
+</div>
+<p><a href="commitments_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>
+Data Structures</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="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">RSA modulus for Bit Commitment.  <a href="structCOMMITMENTS__BC__priv__modulus.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Public RSA modulus for Bit Commitment.  <a href="structCOMMITMENTS__BC__pub__modulus.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="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a296158654474a636d999781ddcb9f9d8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="commitments_8h.html#a296158654474a636d999781ddcb9f9d8">COMMITMENTS_OK</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a296158654474a636d999781ddcb9f9d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0280d7c876b77a0bae100933dc61c9bb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="commitments_8h.html#a0280d7c876b77a0bae100933dc61c9bb">COMMITMENTS_FAIL</a>&#160;&#160;&#160;81</td></tr>
+<tr class="separator:a0280d7c876b77a0bae100933dc61c9bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3ce9abc99cec679346a7d38bed96d9b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="commitments_8h.html#ae3ce9abc99cec679346a7d38bed96d9b">FS_2048</a>&#160;&#160;&#160;MODBYTES_1024_58 * FFLEN_2048</td></tr>
+<tr class="separator:ae3ce9abc99cec679346a7d38bed96d9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af12daa3ccdbe8c973ca455b53f58f13b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="commitments_8h.html#af12daa3ccdbe8c973ca455b53f58f13b">HFS_2048</a>&#160;&#160;&#160;MODBYTES_1024_58 * HFLEN_2048</td></tr>
+<tr class="separator:af12daa3ccdbe8c973ca455b53f58f13b"><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:a03557be3cbf16370e9113fff93bc8169"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="commitments_8h.html#a03557be3cbf16370e9113fff93bc8169">COMMITMENTS_NM_commit</a> (csprng *RNG, const octet *X, octet *R, octet *C)</td></tr>
+<tr class="memdesc:a03557be3cbf16370e9113fff93bc8169"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate a commitment for the value X.  <a href="commitments_8h.html#a03557be3cbf16370e9113fff93bc8169">More...</a><br /></td></tr>
+<tr class="separator:a03557be3cbf16370e9113fff93bc8169"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a224adcc226ada8b5b999db0ff00f0986"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="commitments_8h.html#a224adcc226ada8b5b999db0ff00f0986">COMMITMENTS_NM_decommit</a> (const octet *X, const octet *R, octet *C)</td></tr>
+<tr class="memdesc:a224adcc226ada8b5b999db0ff00f0986"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decommit the value X.  <a href="commitments_8h.html#a224adcc226ada8b5b999db0ff00f0986">More...</a><br /></td></tr>
+<tr class="separator:a224adcc226ada8b5b999db0ff00f0986"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a522d6f485494a7a2297007121529db4a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="commitments_8h.html#a522d6f485494a7a2297007121529db4a">COMMITMENTS_BC_setup</a> (csprng *RNG, <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *m, octet *P, octet *Q, octet *B0, octet *ALPHA)</td></tr>
+<tr class="memdesc:a522d6f485494a7a2297007121529db4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set up an RSA modulus and the necessary values.  <a href="commitments_8h.html#a522d6f485494a7a2297007121529db4a">More...</a><br /></td></tr>
+<tr class="separator:a522d6f485494a7a2297007121529db4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a347b682fd4742fff73a9c924c88254ce"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="commitments_8h.html#a347b682fd4742fff73a9c924c88254ce">COMMITMENTS_BC_kill_priv_modulus</a> (<a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *m)</td></tr>
+<tr class="memdesc:a347b682fd4742fff73a9c924c88254ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clean secret values from the modulus.  <a href="commitments_8h.html#a347b682fd4742fff73a9c924c88254ce">More...</a><br /></td></tr>
+<tr class="separator:a347b682fd4742fff73a9c924c88254ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1c607c0e295be5b496475c3c4959fad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="commitments_8h.html#ad1c607c0e295be5b496475c3c4959fad">COMMITMENTS_BC_export_public_modulus</a> (<a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *pub, <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *priv)</td></tr>
+<tr class="memdesc:ad1c607c0e295be5b496475c3c4959fad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Export the public part of the modulus.  <a href="commitments_8h.html#ad1c607c0e295be5b496475c3c4959fad">More...</a><br /></td></tr>
+<tr class="separator:ad1c607c0e295be5b496475c3c4959fad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a0280d7c876b77a0bae100933dc61c9bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0280d7c876b77a0bae100933dc61c9bb">&#9670;&nbsp;</a></span>COMMITMENTS_FAIL</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COMMITMENTS_FAIL&#160;&#160;&#160;81</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Invalid Commitment </p>
+
+</div>
+</div>
+<a id="a296158654474a636d999781ddcb9f9d8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a296158654474a636d999781ddcb9f9d8">&#9670;&nbsp;</a></span>COMMITMENTS_OK</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COMMITMENTS_OK&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Success </p>
+
+</div>
+</div>
+<a id="ae3ce9abc99cec679346a7d38bed96d9b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae3ce9abc99cec679346a7d38bed96d9b">&#9670;&nbsp;</a></span>FS_2048</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FS_2048&#160;&#160;&#160;MODBYTES_1024_58 * FFLEN_2048</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>2048 field size in bytes </p>
+
+</div>
+</div>
+<a id="af12daa3ccdbe8c973ca455b53f58f13b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af12daa3ccdbe8c973ca455b53f58f13b">&#9670;&nbsp;</a></span>HFS_2048</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define HFS_2048&#160;&#160;&#160;MODBYTES_1024_58 * HFLEN_2048</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Half 2048 field size in bytes </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ad1c607c0e295be5b496475c3c4959fad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad1c607c0e295be5b496475c3c4959fad">&#9670;&nbsp;</a></span>COMMITMENTS_BC_export_public_modulus()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void COMMITMENTS_BC_export_public_modulus </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *&#160;</td>
+          <td class="paramname"><em>pub</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *&#160;</td>
+          <td class="paramname"><em>priv</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">pub</td><td>The destination public modulus </td></tr>
+    <tr><td class="paramname">priv</td><td>The source private modulus </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a347b682fd4742fff73a9c924c88254ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a347b682fd4742fff73a9c924c88254ce">&#9670;&nbsp;</a></span>COMMITMENTS_BC_kill_priv_modulus()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void COMMITMENTS_BC_kill_priv_modulus </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *&#160;</td>
+          <td class="paramname"><em>m</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">m</td><td>The modulus to clean </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a522d6f485494a7a2297007121529db4a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a522d6f485494a7a2297007121529db4a">&#9670;&nbsp;</a></span>COMMITMENTS_BC_setup()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void COMMITMENTS_BC_setup </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *&#160;</td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>P</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Q</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>B0</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>ALPHA</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>RNG is only used to generate the values not explicitly specified. This allows using safe primes P and Q generated externally while still randomly generating B0 and ALPHA. In turn, this allows the user to generate P and Q with ad hoc libraries for the generation of primes instead of the (slow) safe prime generation utility included here.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>CSPRNG to generate P, Q, B0 and ALPHA </td></tr>
+    <tr><td class="paramname">m</td><td>Private modulus to populate </td></tr>
+    <tr><td class="paramname">P</td><td>Safe prime 2p+1. Generated if NULL </td></tr>
+    <tr><td class="paramname">Q</td><td>Safe prime 2q+1. Generated if NULL </td></tr>
+    <tr><td class="paramname">B0</td><td>Generator of G_pq as subgroup of Z/PQZ. Generated if NULL </td></tr>
+    <tr><td class="paramname">ALPHA</td><td>DLOG exponent for B1 = B0^ALPHA. Generated if NULL </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a03557be3cbf16370e9113fff93bc8169"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a03557be3cbf16370e9113fff93bc8169">&#9670;&nbsp;</a></span>COMMITMENTS_NM_commit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void COMMITMENTS_NM_commit </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>C</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>CSPRNG to use for commitment </td></tr>
+    <tr><td class="paramname">X</td><td>Value to commit to </td></tr>
+    <tr><td class="paramname">R</td><td>Decommitment value. If RNG is null then this value is read and must be 256 bit long </td></tr>
+    <tr><td class="paramname">C</td><td>Commitment value </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a224adcc226ada8b5b999db0ff00f0986"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a224adcc226ada8b5b999db0ff00f0986">&#9670;&nbsp;</a></span>COMMITMENTS_NM_decommit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int COMMITMENTS_NM_decommit </td>
+          <td>(</td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>C</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">X</td><td>Committed value </td></tr>
+    <tr><td class="paramname">R</td><td>Decommitment value. Must be 256 bit long </td></tr>
+    <tr><td class="paramname">C</td><td>Commitment value </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns 1 for a valid decommitment, 0 otherwise </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/commitments_8h_source.html b/website/static/mpcdocs/commitments_8h_source.html
new file mode 100644
index 0000000..c155586
--- /dev/null
+++ b/website/static/mpcdocs/commitments_8h_source.html
@@ -0,0 +1,170 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: commitments.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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_a166689341c37329f24f96bdba87a08b.html">amcl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">commitments.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="commitments_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="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">&quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">  http://www.apache.org/licenses/LICENSE-2.0</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;<span class="comment">Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">&quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#ifndef COMMITMENTS_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#define COMMITMENTS_H</span></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;<span class="preprocessor">#include &quot;amcl/amcl.h&quot;</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &quot;amcl/ff_2048.h&quot;</span></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;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span></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="preprocessor">#endif</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="commitments_8h.html#a296158654474a636d999781ddcb9f9d8">   37</a></span>&#160;<span class="preprocessor">#define COMMITMENTS_OK   0   </span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="commitments_8h.html#a0280d7c876b77a0bae100933dc61c9bb">   38</a></span>&#160;<span class="preprocessor">#define COMMITMENTS_FAIL 81  </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">/* NM Commitment Scheme API */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160; </div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="commitments_8h.html#a03557be3cbf16370e9113fff93bc8169">   49</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="commitments_8h.html#a03557be3cbf16370e9113fff93bc8169">COMMITMENTS_NM_commit</a>(csprng *RNG, <span class="keyword">const</span> octet *X, octet *R, octet *C);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160; </div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="commitments_8h.html#a224adcc226ada8b5b999db0ff00f0986">   58</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="commitments_8h.html#a224adcc226ada8b5b999db0ff00f0986">COMMITMENTS_NM_decommit</a>(<span class="keyword">const</span> octet* X, <span class="keyword">const</span> octet* R, octet* C);</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="comment">/* Bit Commitment Setup API */</span></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="preprocessor">#ifndef FS_2048</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="commitments_8h.html#ae3ce9abc99cec679346a7d38bed96d9b">   63</a></span>&#160;<span class="preprocessor">#define FS_2048 MODBYTES_1024_58 * FFLEN_2048  </span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">#ifndef HFS_2048</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="commitments_8h.html#af12daa3ccdbe8c973ca455b53f58f13b">   66</a></span>&#160;<span class="preprocessor">#define HFS_2048 MODBYTES_1024_58 * HFLEN_2048 </span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160; </div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="structCOMMITMENTS__BC__priv__modulus.html">   70</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</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"><a class="line" href="structCOMMITMENTS__BC__priv__modulus.html#adf198e18dddecfc16a1575d340597f08">   72</a></span>&#160;    BIG_1024_58 P[HFLEN_2048];      </div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="structCOMMITMENTS__BC__priv__modulus.html#ad85ce137db71ea1fc185c2ca320c1f07">   73</a></span>&#160;    BIG_1024_58 Q[HFLEN_2048];      </div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="structCOMMITMENTS__BC__priv__modulus.html#a50bb8437f9bd452e123decb02fa91aaa">   74</a></span>&#160;    BIG_1024_58 invPQ[HFLEN_2048];  </div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="structCOMMITMENTS__BC__priv__modulus.html#a68de71c8f0e75e7f2085dc213a3c3214">   75</a></span>&#160;    BIG_1024_58 pq[FFLEN_2048];     </div>
+<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="structCOMMITMENTS__BC__priv__modulus.html#ae70b46cbe352068e8b8071f0e046d464">   76</a></span>&#160;    BIG_1024_58 N[FFLEN_2048];      </div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="structCOMMITMENTS__BC__priv__modulus.html#af4ddfbbfc46a62addce247732f82748c">   77</a></span>&#160;    BIG_1024_58 alpha[FFLEN_2048];  </div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="structCOMMITMENTS__BC__priv__modulus.html#ac2e85b032336fcc302312016986f92e0">   78</a></span>&#160;    BIG_1024_58 ialpha[FFLEN_2048]; </div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="structCOMMITMENTS__BC__priv__modulus.html#ad21b260d4a4ea65d15d1bac83d738caa">   79</a></span>&#160;    BIG_1024_58 b0[FFLEN_2048];     </div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="structCOMMITMENTS__BC__priv__modulus.html#a4c83fb166445c451b0e7bcd2419fb032">   80</a></span>&#160;    BIG_1024_58 b1[FFLEN_2048];     </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;} <a class="code" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160; </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="structCOMMITMENTS__BC__pub__modulus.html">   84</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</span></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"><a class="line" href="structCOMMITMENTS__BC__pub__modulus.html#a55b541b8cd4e0dcdc63c0786b32d4beb">   86</a></span>&#160;    BIG_1024_58 N[FFLEN_2048];      </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="structCOMMITMENTS__BC__pub__modulus.html#a762d49ff299040ad437c6b970e063e1f">   87</a></span>&#160;    BIG_1024_58 b0[FFLEN_2048];     </div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="structCOMMITMENTS__BC__pub__modulus.html#a750b04eab3d90c2b79e20ec7cc638ffe">   88</a></span>&#160;    BIG_1024_58 b1[FFLEN_2048];     </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;} <a class="code" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a>;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160; </div>
+<div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="commitments_8h.html#a522d6f485494a7a2297007121529db4a">  107</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="commitments_8h.html#a522d6f485494a7a2297007121529db4a">COMMITMENTS_BC_setup</a>(csprng *RNG, <a class="code" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *m, octet *P, octet *Q, octet *B0, octet *ALPHA);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
+<div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="commitments_8h.html#a347b682fd4742fff73a9c924c88254ce">  113</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="commitments_8h.html#a347b682fd4742fff73a9c924c88254ce">COMMITMENTS_BC_kill_priv_modulus</a>(<a class="code" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *m);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160; </div>
+<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="commitments_8h.html#ad1c607c0e295be5b496475c3c4959fad">  120</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="commitments_8h.html#ad1c607c0e295be5b496475c3c4959fad">COMMITMENTS_BC_export_public_modulus</a>(<a class="code" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *pub, <a class="code" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *priv);</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;<span class="preprocessor">#ifdef __cplusplus</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160; </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="acommitments_8h_html_a03557be3cbf16370e9113fff93bc8169"><div class="ttname"><a href="commitments_8h.html#a03557be3cbf16370e9113fff93bc8169">COMMITMENTS_NM_commit</a></div><div class="ttdeci">void COMMITMENTS_NM_commit(csprng *RNG, const octet *X, octet *R, octet *C)</div><div class="ttdoc">Generate a commitment for the value X.</div></div>
+<div class="ttc" id="acommitments_8h_html_a224adcc226ada8b5b999db0ff00f0986"><div class="ttname"><a href="commitments_8h.html#a224adcc226ada8b5b999db0ff00f0986">COMMITMENTS_NM_decommit</a></div><div class="ttdeci">int COMMITMENTS_NM_decommit(const octet *X, const octet *R, octet *C)</div><div class="ttdoc">Decommit the value X.</div></div>
+<div class="ttc" id="acommitments_8h_html_a347b682fd4742fff73a9c924c88254ce"><div class="ttname"><a href="commitments_8h.html#a347b682fd4742fff73a9c924c88254ce">COMMITMENTS_BC_kill_priv_modulus</a></div><div class="ttdeci">void COMMITMENTS_BC_kill_priv_modulus(COMMITMENTS_BC_priv_modulus *m)</div><div class="ttdoc">Clean secret values from the modulus.</div></div>
+<div class="ttc" id="acommitments_8h_html_a522d6f485494a7a2297007121529db4a"><div class="ttname"><a href="commitments_8h.html#a522d6f485494a7a2297007121529db4a">COMMITMENTS_BC_setup</a></div><div class="ttdeci">void COMMITMENTS_BC_setup(csprng *RNG, COMMITMENTS_BC_priv_modulus *m, octet *P, octet *Q, octet *B0, octet *ALPHA)</div><div class="ttdoc">Set up an RSA modulus and the necessary values.</div></div>
+<div class="ttc" id="acommitments_8h_html_ad1c607c0e295be5b496475c3c4959fad"><div class="ttname"><a href="commitments_8h.html#ad1c607c0e295be5b496475c3c4959fad">COMMITMENTS_BC_export_public_modulus</a></div><div class="ttdeci">void COMMITMENTS_BC_export_public_modulus(COMMITMENTS_BC_pub_modulus *pub, COMMITMENTS_BC_priv_modulus *priv)</div><div class="ttdoc">Export the public part of the modulus.</div></div>
+<div class="ttc" id="astructCOMMITMENTS__BC__priv__modulus_html"><div class="ttname"><a href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a></div><div class="ttdoc">RSA modulus for Bit Commitment.</div><div class="ttdef"><b>Definition:</b> commitments.h:71</div></div>
+<div class="ttc" id="astructCOMMITMENTS__BC__pub__modulus_html"><div class="ttname"><a href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a></div><div class="ttdoc">Public RSA modulus for Bit Commitment.</div><div class="ttdef"><b>Definition:</b> commitments.h:85</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/dir_4e8d938e9ddb5a617c200d5739d1f41a.html b/website/static/mpcdocs/dir_4e8d938e9ddb5a617c200d5739d1f41a.html
new file mode 100644
index 0000000..72197fd
--- /dev/null
+++ b/website/static/mpcdocs/dir_4e8d938e9ddb5a617c200d5739d1f41a.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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: doxygen Directory 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_4e8d938e9ddb5a617c200d5739d1f41a.html">doxygen</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">doxygen Directory 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="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/dir_a166689341c37329f24f96bdba87a08b.html b/website/static/mpcdocs/dir_a166689341c37329f24f96bdba87a08b.html
new file mode 100644
index 0000000..587769f
--- /dev/null
+++ b/website/static/mpcdocs/dir_a166689341c37329f24f96bdba87a08b.html
@@ -0,0 +1,104 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: amcl Directory 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_a166689341c37329f24f96bdba87a08b.html">amcl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">amcl Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:commitments_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="commitments_8h.html">commitments.h</a> <a href="commitments_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:commitments_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Commitment schemes declarations. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:factoring__zk_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="factoring__zk_8h.html">factoring_zk.h</a> <a href="factoring__zk_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:factoring__zk_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">ZK proof of knowledge of factoring declarations. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:mpc_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html">mpc.h</a> <a href="mpc_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:mpc_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">MPC declarations. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:mta_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html">mta.h</a> <a href="mta_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:mta_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">MTA declarations. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:schnorr_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html">schnorr.h</a> <a href="schnorr_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:schnorr_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Schnorr's proofs declarations. <br /></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="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/dir_d44c64559bbebec7f509842c48db8b23.html b/website/static/mpcdocs/dir_d44c64559bbebec7f509842c48db8b23.html
new file mode 100644
index 0000000..2f5333d
--- /dev/null
+++ b/website/static/mpcdocs/dir_d44c64559bbebec7f509842c48db8b23.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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: include Directory 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">include Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/doc.png b/website/static/mpcdocs/doc.png
new file mode 100644
index 0000000..17edabf
--- /dev/null
+++ b/website/static/mpcdocs/doc.png
Binary files differ
diff --git a/website/static/mpcdocs/doxygen.css b/website/static/mpcdocs/doxygen.css
new file mode 100644
index 0000000..ffbff02
--- /dev/null
+++ b/website/static/mpcdocs/doxygen.css
@@ -0,0 +1,1793 @@
+/* The standard CSS for doxygen 1.9.1 */
+
+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, th p.intertd, th 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.navtab {
+	border-right: 1px solid #A3B4D7;
+	padding-right: 15px;
+	text-align: right;
+	line-height: 110%;
+}
+
+div.navtab table {
+	border-spacing: 0;
+}
+
+td.navtab {
+	padding-right: 6px;
+	padding-left: 6px;
+}
+td.navtabHL {
+	background-image: url('tab_a.png');
+	background-repeat:repeat-x;
+	padding-right: 6px;
+	padding-left: 6px;
+}
+
+td.navtabHL a, td.navtabHL a:visited {
+	color: #fff;
+	text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+a.navtab {
+	font-weight: bold;
+}
+
+div.qindex{
+	text-align: center;
+	width: 100%;
+	line-height: 140%;
+	font-size: 130%;
+	color: #A0A0A0;
+}
+
+dt.alphachar{
+	font-size: 180%;
+	font-weight: bold;
+}
+
+.alphachar a{
+	color: black;
+}
+
+.alphachar a:hover, .alphachar a:visited{
+	text-decoration: none;
+}
+
+.classindex dl {
+	padding: 25px;
+	column-count:1
+}
+
+.classindex dd {
+	display:inline-block;
+	margin-left: 50px;
+	width: 90%;
+	line-height: 1.15em;
+}
+
+.classindex dl.odd {
+	background-color: #F8F9FC;
+}
+
+@media(min-width: 1120px) {
+	.classindex dl {
+		column-count:2
+	}
+}
+
+@media(min-width: 1320px) {
+	.classindex dl {
+		column-count:3
+	}
+}
+
+
+/* @group Link Styling */
+
+a {
+	color: #3D578C;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: #4665A2;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+.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;
+        text-align:right;
+        width:52px;
+}
+
+dl.citelist dd {
+        margin:2px 0 2px 72px;
+        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;
+}
+
+span.emoji {
+        /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html
+         * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort;
+         */
+}
+
+.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/website/static/mpcdocs/doxygen.svg b/website/static/mpcdocs/doxygen.svg
new file mode 100644
index 0000000..d42dad5
--- /dev/null
+++ b/website/static/mpcdocs/doxygen.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 104 31" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+  <linearGradient id="a">
+   <stop stop-color="#5373B4" offset="0"/>
+   <stop stop-color="#7C95C6" offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="c" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientTransform="matrix(.6816 0 0 1.0248 72.391 -.91809)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="b" x1="56.295" x2="56.295" y1="24.622" y2="26.574" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="e" x1="49.067" x2="48.956" y1="19.719" y2="9.5227" gradientTransform="matrix(.97968 0 0 1.0207 -.25579 -.25579)" gradientUnits="userSpaceOnUse">
+   <stop stop-color="#C0CCE3" offset="0"/>
+   <stop stop-color="#EEF1F7" offset="1"/>
+  </linearGradient>
+  <filter id="f" x="-.010676" y="-.045304" width="1.0214" height="1.0906" color-interpolation-filters="sRGB">
+   <feGaussianBlur stdDeviation="0.45293203"/>
+  </filter>
+ </defs>
+ <g>
+  <path transform="translate(-2.5759 -27.848)" d="m13.609 32.203v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23645 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88018-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35277 3.7988-1.0566 1.0471-0.70387 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.92299-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.4611 0.28066 1.7988 0.84375 0.33777 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5976v-8.3926c0-0.84464-0.0765-1.6106-0.22851-2.2969-0.13511-0.70387-0.37971-1.2925-0.73438-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.063 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07028-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06051 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3438h-0.05078l-2.9648-9.3438zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914 0.38844 0.24635 0.6991 0.57184 0.93555 0.97656 0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13253 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10134 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88814-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70105 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.4927-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89025 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74023 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" filter="url(#f)" opacity=".3" stroke="#969696" xlink:href="#path141"/>
+  <path d="m0.97202 24.161 43.605-0.0019 0.0508 3.3061-43.6 0.04174z" fill="url(#d)" stroke="#000" stroke-width=".5"/>
+  <path d="m10.283 3.5547v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23644 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88017-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35278 3.7988-1.0566 1.0471-0.70386 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.923-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.461 0.28066 1.7988 0.84375 0.33778 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5977v-8.3926c0-0.84464-0.0765-1.6106-0.22852-2.2969-0.13511-0.70387-0.3797-1.2925-0.73437-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.062 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07027-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06052 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3437h-0.05078l-2.9648-9.3437zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914s0.6991 0.57184 0.93555 0.97656c0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13254 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10133 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88813-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70106 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.49271-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89026 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74024 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" fill="url(#e)" stroke="#4665A2" stroke-width=".7"/>
+  <path d="m52.988 27.291c0.99602-1.0359 1.3944-1.8725 1.7928-3.1076l3.8247-0.03984c0.3113 1.6096 0.82413 2.5137 1.6335 3.1474z" fill="url(#b)" stroke="#000" stroke-width=".5"/>
+  <path d="m73.89 24.04 28.885-0.2011-0.12476 3.3879-31.033 0.16229c1.2621-1.0234 1.9665-2.2859 2.2724-3.3491z" fill="url(#c)" stroke="#000" stroke-width=".41788"/>
+ </g>
+</svg>
diff --git a/website/static/mpcdocs/dynsections.js b/website/static/mpcdocs/dynsections.js
new file mode 100644
index 0000000..3174bd7
--- /dev/null
+++ b/website/static/mpcdocs/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/website/static/mpcdocs/factoring__zk_8h.html b/website/static/mpcdocs/factoring__zk_8h.html
new file mode 100644
index 0000000..2e83bbb
--- /dev/null
+++ b/website/static/mpcdocs/factoring__zk_8h.html
@@ -0,0 +1,437 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: factoring_zk.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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_a166689341c37329f24f96bdba87a08b.html">amcl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">factoring_zk.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>ZK proof of knowledge of factoring declarations.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;amcl/amcl.h&quot;</code><br />
+<code>#include &quot;amcl/big_1024_58.h&quot;</code><br />
+<code>#include &quot;amcl/ff_2048.h&quot;</code><br />
+</div>
+<p><a href="factoring__zk_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>
+Data Structures</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="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Modulus to prove knowledge of factoring.  <a href="structFACTORING__ZK__modulus.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="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ae3ce9abc99cec679346a7d38bed96d9b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="factoring__zk_8h.html#ae3ce9abc99cec679346a7d38bed96d9b">FS_2048</a>&#160;&#160;&#160;MODBYTES_1024_58 * FFLEN_2048</td></tr>
+<tr class="separator:ae3ce9abc99cec679346a7d38bed96d9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af12daa3ccdbe8c973ca455b53f58f13b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="factoring__zk_8h.html#af12daa3ccdbe8c973ca455b53f58f13b">HFS_2048</a>&#160;&#160;&#160;MODBYTES_1024_58 * HFLEN_2048</td></tr>
+<tr class="separator:af12daa3ccdbe8c973ca455b53f58f13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6882d3f80db9156ee393363643dbaeb5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="factoring__zk_8h.html#a6882d3f80db9156ee393363643dbaeb5">FACTORING_ZK_A</a>&#160;&#160;&#160;<a class="el" href="factoring__zk_8h.html#ae3ce9abc99cec679346a7d38bed96d9b">FS_2048</a></td></tr>
+<tr class="separator:a6882d3f80db9156ee393363643dbaeb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f229a79cea7ffb93931b5af6a05c373"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="factoring__zk_8h.html#a2f229a79cea7ffb93931b5af6a05c373">FACTORING_ZK_B</a>&#160;&#160;&#160;16</td></tr>
+<tr class="separator:a2f229a79cea7ffb93931b5af6a05c373"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c4e961cde47625be283dc1c59cec7c0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="factoring__zk_8h.html#a1c4e961cde47625be283dc1c59cec7c0">FACTORING_ZK_OK</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a1c4e961cde47625be283dc1c59cec7c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a48af2c32b3215046f4b708877c34b11d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="factoring__zk_8h.html#a48af2c32b3215046f4b708877c34b11d">FACTORING_ZK_FAIL</a>&#160;&#160;&#160;91</td></tr>
+<tr class="separator:a48af2c32b3215046f4b708877c34b11d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad78ee9209748e3f16fb0bb48a622a0c6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="factoring__zk_8h.html#ad78ee9209748e3f16fb0bb48a622a0c6">FACTORING_ZK_OUT_OF_BOUNDS</a>&#160;&#160;&#160;92</td></tr>
+<tr class="separator:ad78ee9209748e3f16fb0bb48a622a0c6"><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:aff201c3031798a0f0027dadf929190d7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="factoring__zk_8h.html#aff201c3031798a0f0027dadf929190d7">FACTORING_ZK_prove</a> (csprng *RNG, <a class="el" href="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a> *m, const octet *ID, const octet *AD, octet *R, octet *E, octet *Y)</td></tr>
+<tr class="memdesc:aff201c3031798a0f0027dadf929190d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prove knowledge of the modulus m in ZK.  <a href="factoring__zk_8h.html#aff201c3031798a0f0027dadf929190d7">More...</a><br /></td></tr>
+<tr class="separator:aff201c3031798a0f0027dadf929190d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc6d5b3c3df4c98b36d7f3abe8f69a03"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="factoring__zk_8h.html#abc6d5b3c3df4c98b36d7f3abe8f69a03">FACTORING_ZK_verify</a> (octet *N, octet *E, octet *Y, const octet *ID, const octet *AD)</td></tr>
+<tr class="memdesc:abc6d5b3c3df4c98b36d7f3abe8f69a03"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify ZK proof of knowledge of factoring of N.  <a href="factoring__zk_8h.html#abc6d5b3c3df4c98b36d7f3abe8f69a03">More...</a><br /></td></tr>
+<tr class="separator:abc6d5b3c3df4c98b36d7f3abe8f69a03"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afba5dd5398192722440f724c3ce6c37a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="factoring__zk_8h.html#afba5dd5398192722440f724c3ce6c37a">FACTORING_ZK_modulus_fromOctets</a> (<a class="el" href="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a> *m, octet *P, octet *Q)</td></tr>
+<tr class="memdesc:afba5dd5398192722440f724c3ce6c37a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a modulus from octets.  <a href="factoring__zk_8h.html#afba5dd5398192722440f724c3ce6c37a">More...</a><br /></td></tr>
+<tr class="separator:afba5dd5398192722440f724c3ce6c37a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a40183656099267b7b20980fd5c2e8dcd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="factoring__zk_8h.html#a40183656099267b7b20980fd5c2e8dcd">FACTORING_ZK_modulus_kill</a> (<a class="el" href="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a> *m)</td></tr>
+<tr class="memdesc:a40183656099267b7b20980fd5c2e8dcd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clean memory associated to a modulus.  <a href="factoring__zk_8h.html#a40183656099267b7b20980fd5c2e8dcd">More...</a><br /></td></tr>
+<tr class="separator:a40183656099267b7b20980fd5c2e8dcd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a6882d3f80db9156ee393363643dbaeb5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6882d3f80db9156ee393363643dbaeb5">&#9670;&nbsp;</a></span>FACTORING_ZK_A</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FACTORING_ZK_A&#160;&#160;&#160;<a class="el" href="factoring__zk_8h.html#ae3ce9abc99cec679346a7d38bed96d9b">FS_2048</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Proof, length in bytes </p>
+
+</div>
+</div>
+<a id="a2f229a79cea7ffb93931b5af6a05c373"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2f229a79cea7ffb93931b5af6a05c373">&#9670;&nbsp;</a></span>FACTORING_ZK_B</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FACTORING_ZK_B&#160;&#160;&#160;16</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Security parameter, length in bytes </p>
+
+</div>
+</div>
+<a id="a48af2c32b3215046f4b708877c34b11d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a48af2c32b3215046f4b708877c34b11d">&#9670;&nbsp;</a></span>FACTORING_ZK_FAIL</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FACTORING_ZK_FAIL&#160;&#160;&#160;91</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Invalid proof </p>
+
+</div>
+</div>
+<a id="a1c4e961cde47625be283dc1c59cec7c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1c4e961cde47625be283dc1c59cec7c0">&#9670;&nbsp;</a></span>FACTORING_ZK_OK</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FACTORING_ZK_OK&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Proof successfully verified </p>
+
+</div>
+</div>
+<a id="ad78ee9209748e3f16fb0bb48a622a0c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad78ee9209748e3f16fb0bb48a622a0c6">&#9670;&nbsp;</a></span>FACTORING_ZK_OUT_OF_BOUNDS</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FACTORING_ZK_OUT_OF_BOUNDS&#160;&#160;&#160;92</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Invalid proof bounds </p>
+
+</div>
+</div>
+<a id="ae3ce9abc99cec679346a7d38bed96d9b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae3ce9abc99cec679346a7d38bed96d9b">&#9670;&nbsp;</a></span>FS_2048</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FS_2048&#160;&#160;&#160;MODBYTES_1024_58 * FFLEN_2048</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>2048 field size in bytes </p>
+
+</div>
+</div>
+<a id="af12daa3ccdbe8c973ca455b53f58f13b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af12daa3ccdbe8c973ca455b53f58f13b">&#9670;&nbsp;</a></span>HFS_2048</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define HFS_2048&#160;&#160;&#160;MODBYTES_1024_58 * HFLEN_2048</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Half 2048 field size in bytes </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="afba5dd5398192722440f724c3ce6c37a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afba5dd5398192722440f724c3ce6c37a">&#9670;&nbsp;</a></span>FACTORING_ZK_modulus_fromOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void FACTORING_ZK_modulus_fromOctets </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a> *&#160;</td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>P</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Q</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">m</td><td>The destination modulus </td></tr>
+    <tr><td class="paramname">P</td><td>The first factor of the modulus </td></tr>
+    <tr><td class="paramname">Q</td><td>The second factor of the modulus </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a40183656099267b7b20980fd5c2e8dcd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a40183656099267b7b20980fd5c2e8dcd">&#9670;&nbsp;</a></span>FACTORING_ZK_modulus_kill()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void FACTORING_ZK_modulus_kill </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a> *&#160;</td>
+          <td class="paramname"><em>m</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">m</td><td>The modulus to clean </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="aff201c3031798a0f0027dadf929190d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aff201c3031798a0f0027dadf929190d7">&#9670;&nbsp;</a></span>FACTORING_ZK_prove()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void FACTORING_ZK_prove </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a> *&#160;</td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>ID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>AD</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Y</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>Cryptographically secure PRNG </td></tr>
+    <tr><td class="paramname">m</td><td>Modulus to prove knowldege of factoring </td></tr>
+    <tr><td class="paramname">ID</td><td>Prover unique identifier </td></tr>
+    <tr><td class="paramname">AD</td><td>Additional data to bind in the proof - Optional </td></tr>
+    <tr><td class="paramname">R</td><td>Random value used in the proof. If RNG is NULL this is read </td></tr>
+    <tr><td class="paramname">E</td><td>First component of the ZK proof </td></tr>
+    <tr><td class="paramname">Y</td><td>Second component of the ZK proof </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="abc6d5b3c3df4c98b36d7f3abe8f69a03"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc6d5b3c3df4c98b36d7f3abe8f69a03">&#9670;&nbsp;</a></span>FACTORING_ZK_verify()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int FACTORING_ZK_verify </td>
+          <td>(</td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>N</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>ID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>AD</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Verify that (E, Y) is a valid proof of knowledge of factoring of N</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">N</td><td>Public integer, the RSA modulus </td></tr>
+    <tr><td class="paramname">E</td><td>Fisrt component of the ZK proof </td></tr>
+    <tr><td class="paramname">Y</td><td>Second component of the ZK proof </td></tr>
+    <tr><td class="paramname">ID</td><td>Prover unique identifier </td></tr>
+    <tr><td class="paramname">AD</td><td>Additional data to bind in the proof - Optional </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>1 if the proof is valid, 0 otherwise </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/factoring__zk_8h_source.html b/website/static/mpcdocs/factoring__zk_8h_source.html
new file mode 100644
index 0000000..2165322
--- /dev/null
+++ b/website/static/mpcdocs/factoring__zk_8h_source.html
@@ -0,0 +1,155 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: factoring_zk.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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_a166689341c37329f24f96bdba87a08b.html">amcl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">factoring_zk.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="factoring__zk_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="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">&quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">  http://www.apache.org/licenses/LICENSE-2.0</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;<span class="comment">Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">&quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#ifndef FACTORING_ZK_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#define FACTORING_ZK_H</span></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;<span class="preprocessor">#include &quot;amcl/amcl.h&quot;</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &quot;amcl/big_1024_58.h&quot;</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &quot;amcl/ff_2048.h&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;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span></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;<span class="preprocessor">#endif</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;<span class="preprocessor">#ifndef FS_2048</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="factoring__zk_8h.html#ae3ce9abc99cec679346a7d38bed96d9b">   39</a></span>&#160;<span class="preprocessor">#define FS_2048 MODBYTES_1024_58 * FFLEN_2048  </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#endif</span></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;<span class="preprocessor">#ifndef HFS_2048</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="factoring__zk_8h.html#af12daa3ccdbe8c973ca455b53f58f13b">   43</a></span>&#160;<span class="preprocessor">#define HFS_2048 MODBYTES_1024_58 * HFLEN_2048 </span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#endif</span></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="factoring__zk_8h.html#a6882d3f80db9156ee393363643dbaeb5">   46</a></span>&#160;<span class="preprocessor">#define FACTORING_ZK_A FS_2048  </span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="factoring__zk_8h.html#a2f229a79cea7ffb93931b5af6a05c373">   47</a></span>&#160;<span class="preprocessor">#define FACTORING_ZK_B 16       </span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="factoring__zk_8h.html#a1c4e961cde47625be283dc1c59cec7c0">   49</a></span>&#160;<span class="preprocessor">#define FACTORING_ZK_OK   0           </span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="factoring__zk_8h.html#a48af2c32b3215046f4b708877c34b11d">   50</a></span>&#160;<span class="preprocessor">#define FACTORING_ZK_FAIL 91          </span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="factoring__zk_8h.html#ad78ee9209748e3f16fb0bb48a622a0c6">   51</a></span>&#160;<span class="preprocessor">#define FACTORING_ZK_OUT_OF_BOUNDS 92 </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="structFACTORING__ZK__modulus.html">   54</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</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"><a class="line" href="structFACTORING__ZK__modulus.html#aad32cef305e6df7e87e076d510a1dbff">   56</a></span>&#160;    BIG_1024_58 p[HFLEN_2048];     </div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="structFACTORING__ZK__modulus.html#a56447221f4bc3cb0258874dd7619cbe5">   57</a></span>&#160;    BIG_1024_58 q[HFLEN_2048];     </div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="structFACTORING__ZK__modulus.html#a85ff6e5ed1ce3c5822a31aa9d6de2107">   58</a></span>&#160;    BIG_1024_58 invpq[HFLEN_2048]; </div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="structFACTORING__ZK__modulus.html#ae95c609b5d7ffe3ca5514c00f990a297">   59</a></span>&#160;    BIG_1024_58 n[FFLEN_2048];     </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;} <a class="code" href="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160; </div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="factoring__zk_8h.html#aff201c3031798a0f0027dadf929190d7">   72</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="factoring__zk_8h.html#aff201c3031798a0f0027dadf929190d7">FACTORING_ZK_prove</a>(csprng *RNG, <a class="code" href="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a> *m, <span class="keyword">const</span> octet *ID, <span class="keyword">const</span> octet *AD, octet *R, octet *E, octet *Y);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160; </div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="factoring__zk_8h.html#abc6d5b3c3df4c98b36d7f3abe8f69a03">   85</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="factoring__zk_8h.html#abc6d5b3c3df4c98b36d7f3abe8f69a03">FACTORING_ZK_verify</a>(octet *N, octet *E, octet *Y, <span class="keyword">const</span> octet *ID, <span class="keyword">const</span> octet *AD);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160; </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="factoring__zk_8h.html#afba5dd5398192722440f724c3ce6c37a">   93</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="factoring__zk_8h.html#afba5dd5398192722440f724c3ce6c37a">FACTORING_ZK_modulus_fromOctets</a>(<a class="code" href="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a> *m, octet *P, octet *Q);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160; </div>
+<div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="factoring__zk_8h.html#a40183656099267b7b20980fd5c2e8dcd">   99</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="factoring__zk_8h.html#a40183656099267b7b20980fd5c2e8dcd">FACTORING_ZK_modulus_kill</a>(<a class="code" href="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a> *m);</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;<span class="preprocessor">#ifdef __cplusplus</span></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="preprocessor">#endif</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="preprocessor">#endif</span></div>
+<div class="ttc" id="afactoring__zk_8h_html_a40183656099267b7b20980fd5c2e8dcd"><div class="ttname"><a href="factoring__zk_8h.html#a40183656099267b7b20980fd5c2e8dcd">FACTORING_ZK_modulus_kill</a></div><div class="ttdeci">void FACTORING_ZK_modulus_kill(FACTORING_ZK_modulus *m)</div><div class="ttdoc">Clean memory associated to a modulus.</div></div>
+<div class="ttc" id="afactoring__zk_8h_html_abc6d5b3c3df4c98b36d7f3abe8f69a03"><div class="ttname"><a href="factoring__zk_8h.html#abc6d5b3c3df4c98b36d7f3abe8f69a03">FACTORING_ZK_verify</a></div><div class="ttdeci">int FACTORING_ZK_verify(octet *N, octet *E, octet *Y, const octet *ID, const octet *AD)</div><div class="ttdoc">Verify ZK proof of knowledge of factoring of N.</div></div>
+<div class="ttc" id="afactoring__zk_8h_html_afba5dd5398192722440f724c3ce6c37a"><div class="ttname"><a href="factoring__zk_8h.html#afba5dd5398192722440f724c3ce6c37a">FACTORING_ZK_modulus_fromOctets</a></div><div class="ttdeci">void FACTORING_ZK_modulus_fromOctets(FACTORING_ZK_modulus *m, octet *P, octet *Q)</div><div class="ttdoc">Read a modulus from octets.</div></div>
+<div class="ttc" id="afactoring__zk_8h_html_aff201c3031798a0f0027dadf929190d7"><div class="ttname"><a href="factoring__zk_8h.html#aff201c3031798a0f0027dadf929190d7">FACTORING_ZK_prove</a></div><div class="ttdeci">void FACTORING_ZK_prove(csprng *RNG, FACTORING_ZK_modulus *m, const octet *ID, const octet *AD, octet *R, octet *E, octet *Y)</div><div class="ttdoc">Prove knowledge of the modulus m in ZK.</div></div>
+<div class="ttc" id="astructFACTORING__ZK__modulus_html"><div class="ttname"><a href="structFACTORING__ZK__modulus.html">FACTORING_ZK_modulus</a></div><div class="ttdoc">Modulus to prove knowledge of factoring.</div><div class="ttdef"><b>Definition:</b> factoring_zk.h:55</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/files.html b/website/static/mpcdocs/files.html
new file mode 100644
index 0000000..a436b1b
--- /dev/null
+++ b/website/static/mpcdocs/files.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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 documented 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="commitments_8h_source.html"><span class="icondoc"></span></a><a class="el" href="commitments_8h.html" target="_self">commitments.h</a></td><td class="desc">Commitment schemes declarations </td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="factoring__zk_8h_source.html"><span class="icondoc"></span></a><a class="el" href="factoring__zk_8h.html" target="_self">factoring_zk.h</a></td><td class="desc">ZK proof of knowledge of factoring declarations </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="mpc_8h_source.html"><span class="icondoc"></span></a><a class="el" href="mpc_8h.html" target="_self">mpc.h</a></td><td class="desc">MPC declarations </td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="mta_8h_source.html"><span class="icondoc"></span></a><a class="el" href="mta_8h.html" target="_self">mta.h</a></td><td class="desc">MTA declarations </td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="schnorr_8h_source.html"><span class="icondoc"></span></a><a class="el" href="schnorr_8h.html" target="_self">schnorr.h</a></td><td class="desc">Schnorr's proofs declarations </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/folderclosed.png b/website/static/mpcdocs/folderclosed.png
new file mode 100644
index 0000000..bb8ab35
--- /dev/null
+++ b/website/static/mpcdocs/folderclosed.png
Binary files differ
diff --git a/website/static/mpcdocs/folderopen.png b/website/static/mpcdocs/folderopen.png
new file mode 100644
index 0000000..d6c7f67
--- /dev/null
+++ b/website/static/mpcdocs/folderopen.png
Binary files differ
diff --git a/website/static/mpcdocs/functions.html b/website/static/mpcdocs/functions.html
new file mode 100644
index 0000000..bbd0d80
--- /dev/null
+++ b/website/static/mpcdocs/functions.html
@@ -0,0 +1,242 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: Data Fields</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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 documented struct and union fields with links to the struct/union documentation for each field:</div>
+
+<h3><a id="index_a"></a>- a -</h3><ul>
+<li>alpha
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#af4ddfbbfc46a62addce247732f82748c">COMMITMENTS_BC_priv_modulus</a>
+, <a class="el" href="structMTA__RP__commitment__rv.html#aecbdb8eaf2ced92b569f664d53ee0517">MTA_RP_commitment_rv</a>
+, <a class="el" href="structMTA__ZK__commitment__rv.html#a050280552a71f496ea2b53985b236563">MTA_ZK_commitment_rv</a>
+</li>
+</ul>
+
+
+<h3><a id="index_b"></a>- b -</h3><ul>
+<li>b0
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#ad21b260d4a4ea65d15d1bac83d738caa">COMMITMENTS_BC_priv_modulus</a>
+, <a class="el" href="structCOMMITMENTS__BC__pub__modulus.html#a762d49ff299040ad437c6b970e063e1f">COMMITMENTS_BC_pub_modulus</a>
+</li>
+<li>b1
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#a4c83fb166445c451b0e7bcd2419fb032">COMMITMENTS_BC_priv_modulus</a>
+, <a class="el" href="structCOMMITMENTS__BC__pub__modulus.html#a750b04eab3d90c2b79e20ec7cc638ffe">COMMITMENTS_BC_pub_modulus</a>
+</li>
+<li>beta
+: <a class="el" href="structMTA__RP__commitment__rv.html#af6f441b304a8b2c8997860c2bbeaa6b1">MTA_RP_commitment_rv</a>
+, <a class="el" href="structMTA__ZK__commitment__rv.html#a577c79735265327e7636ba9e8fdc8df5">MTA_ZK_commitment_rv</a>
+</li>
+</ul>
+
+
+<h3><a id="index_g"></a>- g -</h3><ul>
+<li>gamma
+: <a class="el" href="structMTA__RP__commitment__rv.html#adacad4216d4e48675f9e0e1c8af3a7b6">MTA_RP_commitment_rv</a>
+, <a class="el" href="structMTA__ZK__commitment__rv.html#aaa9ee388eaa9eb9a8ff9601a774cdcfd">MTA_ZK_commitment_rv</a>
+</li>
+</ul>
+
+
+<h3><a id="index_i"></a>- i -</h3><ul>
+<li>ialpha
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#ac2e85b032336fcc302312016986f92e0">COMMITMENTS_BC_priv_modulus</a>
+</li>
+<li>invPQ
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#a50bb8437f9bd452e123decb02fa91aaa">COMMITMENTS_BC_priv_modulus</a>
+</li>
+<li>invpq
+: <a class="el" href="structFACTORING__ZK__modulus.html#a85ff6e5ed1ce3c5822a31aa9d6de2107">FACTORING_ZK_modulus</a>
+</li>
+</ul>
+
+
+<h3><a id="index_n"></a>- n -</h3><ul>
+<li>N
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#ae70b46cbe352068e8b8071f0e046d464">COMMITMENTS_BC_priv_modulus</a>
+, <a class="el" href="structCOMMITMENTS__BC__pub__modulus.html#a55b541b8cd4e0dcdc63c0786b32d4beb">COMMITMENTS_BC_pub_modulus</a>
+</li>
+<li>n
+: <a class="el" href="structFACTORING__ZK__modulus.html#ae95c609b5d7ffe3ca5514c00f990a297">FACTORING_ZK_modulus</a>
+</li>
+</ul>
+
+
+<h3><a id="index_p"></a>- p -</h3><ul>
+<li>P
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#adf198e18dddecfc16a1575d340597f08">COMMITMENTS_BC_priv_modulus</a>
+</li>
+<li>p
+: <a class="el" href="structFACTORING__ZK__modulus.html#aad32cef305e6df7e87e076d510a1dbff">FACTORING_ZK_modulus</a>
+</li>
+<li>pq
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#a68de71c8f0e75e7f2085dc213a3c3214">COMMITMENTS_BC_priv_modulus</a>
+</li>
+</ul>
+
+
+<h3><a id="index_q"></a>- q -</h3><ul>
+<li>Q
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#ad85ce137db71ea1fc185c2ca320c1f07">COMMITMENTS_BC_priv_modulus</a>
+</li>
+<li>q
+: <a class="el" href="structFACTORING__ZK__modulus.html#a56447221f4bc3cb0258874dd7619cbe5">FACTORING_ZK_modulus</a>
+</li>
+</ul>
+
+
+<h3><a id="index_r"></a>- r -</h3><ul>
+<li>rho
+: <a class="el" href="structMTA__RP__commitment__rv.html#a0ed6c0f9febc1b4cf7888de348296b46">MTA_RP_commitment_rv</a>
+, <a class="el" href="structMTA__ZK__commitment__rv.html#a73b42958ba972918f43b9d6f9df7f31e">MTA_ZK_commitment_rv</a>
+</li>
+<li>rho1
+: <a class="el" href="structMTA__ZK__commitment__rv.html#aefa9426a3a4ad48490520c99c311c486">MTA_ZK_commitment_rv</a>
+</li>
+</ul>
+
+
+<h3><a id="index_s"></a>- s -</h3><ul>
+<li>s
+: <a class="el" href="structMTA__RP__proof.html#a8040777a4b2f46d78a7f113e924b76d0">MTA_RP_proof</a>
+, <a class="el" href="structMTA__ZK__proof.html#a34c86cae80dc0f8688cd1f7d5f1801ab">MTA_ZK_proof</a>
+</li>
+<li>s1
+: <a class="el" href="structMTA__RP__proof.html#aa0e204527ce83ab95daa7b6a9977e473">MTA_RP_proof</a>
+, <a class="el" href="structMTA__ZK__proof.html#a44224d752605c42e4ec583442eb6a61a">MTA_ZK_proof</a>
+</li>
+<li>s2
+: <a class="el" href="structMTA__RP__proof.html#a22e41915856f9e6c60fbde988a81870c">MTA_RP_proof</a>
+, <a class="el" href="structMTA__ZK__proof.html#a4141b24bb3ad79318884ac0facb65800">MTA_ZK_proof</a>
+</li>
+<li>sigma
+: <a class="el" href="structMTA__ZK__commitment__rv.html#ab26f42619df65db7f6dcdde009067ae9">MTA_ZK_commitment_rv</a>
+</li>
+</ul>
+
+
+<h3><a id="index_t"></a>- t -</h3><ul>
+<li>t
+: <a class="el" href="structMTA__ZK__commitment.html#ab7f5f3c057c0c12ccae9e1b1667a6cfc">MTA_ZK_commitment</a>
+</li>
+<li>t1
+: <a class="el" href="structMTA__ZK__proof.html#a2555d0e4789621eff8dc79cf96276860">MTA_ZK_proof</a>
+</li>
+<li>t2
+: <a class="el" href="structMTA__ZK__proof.html#affd6b54dc1a58cdc23ac27746c5eb31b">MTA_ZK_proof</a>
+</li>
+<li>tau
+: <a class="el" href="structMTA__ZK__commitment__rv.html#aa306d5c97d2df585d8ec3948bdf95b16">MTA_ZK_commitment_rv</a>
+</li>
+</ul>
+
+
+<h3><a id="index_u"></a>- u -</h3><ul>
+<li>u
+: <a class="el" href="structMTA__RP__commitment.html#a201fa0a955e4cc4b8f0bfed810a58b77">MTA_RP_commitment</a>
+</li>
+<li>U
+: <a class="el" href="structMTA__ZKWC__commitment.html#a6906ba960255cecf7cf29848dc40b9cc">MTA_ZKWC_commitment</a>
+</li>
+</ul>
+
+
+<h3><a id="index_v"></a>- v -</h3><ul>
+<li>v
+: <a class="el" href="structMTA__ZK__commitment.html#a8c05e4faf0896ddb85501e02a80953ca">MTA_ZK_commitment</a>
+</li>
+</ul>
+
+
+<h3><a id="index_w"></a>- w -</h3><ul>
+<li>w
+: <a class="el" href="structMTA__RP__commitment.html#a19d9074f354d2362f090db5cd6f34212">MTA_RP_commitment</a>
+, <a class="el" href="structMTA__ZK__commitment.html#a9ff382fe3ce3795f79bb29c8f2ed738a">MTA_ZK_commitment</a>
+</li>
+</ul>
+
+
+<h3><a id="index_z"></a>- z -</h3><ul>
+<li>z
+: <a class="el" href="structMTA__RP__commitment.html#aee20ad37a8cde2e2b6381055fff1c649">MTA_RP_commitment</a>
+, <a class="el" href="structMTA__ZK__commitment.html#a21736668dad1cf7aba4dd40f059703e0">MTA_ZK_commitment</a>
+</li>
+<li>z1
+: <a class="el" href="structMTA__ZK__commitment.html#a63a83d96029b8e935c16b11c07d0b69a">MTA_ZK_commitment</a>
+</li>
+<li>zkc
+: <a class="el" href="structMTA__ZKWC__commitment.html#a7025ae8eb9f30ddb6b6d601fd49a1da6">MTA_ZKWC_commitment</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/functions_vars.html b/website/static/mpcdocs/functions_vars.html
new file mode 100644
index 0000000..dee9f45
--- /dev/null
+++ b/website/static/mpcdocs/functions_vars.html
@@ -0,0 +1,242 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: Data Fields - 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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>alpha
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#af4ddfbbfc46a62addce247732f82748c">COMMITMENTS_BC_priv_modulus</a>
+, <a class="el" href="structMTA__RP__commitment__rv.html#aecbdb8eaf2ced92b569f664d53ee0517">MTA_RP_commitment_rv</a>
+, <a class="el" href="structMTA__ZK__commitment__rv.html#a050280552a71f496ea2b53985b236563">MTA_ZK_commitment_rv</a>
+</li>
+</ul>
+
+
+<h3><a id="index_b"></a>- b -</h3><ul>
+<li>b0
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#ad21b260d4a4ea65d15d1bac83d738caa">COMMITMENTS_BC_priv_modulus</a>
+, <a class="el" href="structCOMMITMENTS__BC__pub__modulus.html#a762d49ff299040ad437c6b970e063e1f">COMMITMENTS_BC_pub_modulus</a>
+</li>
+<li>b1
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#a4c83fb166445c451b0e7bcd2419fb032">COMMITMENTS_BC_priv_modulus</a>
+, <a class="el" href="structCOMMITMENTS__BC__pub__modulus.html#a750b04eab3d90c2b79e20ec7cc638ffe">COMMITMENTS_BC_pub_modulus</a>
+</li>
+<li>beta
+: <a class="el" href="structMTA__RP__commitment__rv.html#af6f441b304a8b2c8997860c2bbeaa6b1">MTA_RP_commitment_rv</a>
+, <a class="el" href="structMTA__ZK__commitment__rv.html#a577c79735265327e7636ba9e8fdc8df5">MTA_ZK_commitment_rv</a>
+</li>
+</ul>
+
+
+<h3><a id="index_g"></a>- g -</h3><ul>
+<li>gamma
+: <a class="el" href="structMTA__RP__commitment__rv.html#adacad4216d4e48675f9e0e1c8af3a7b6">MTA_RP_commitment_rv</a>
+, <a class="el" href="structMTA__ZK__commitment__rv.html#aaa9ee388eaa9eb9a8ff9601a774cdcfd">MTA_ZK_commitment_rv</a>
+</li>
+</ul>
+
+
+<h3><a id="index_i"></a>- i -</h3><ul>
+<li>ialpha
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#ac2e85b032336fcc302312016986f92e0">COMMITMENTS_BC_priv_modulus</a>
+</li>
+<li>invPQ
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#a50bb8437f9bd452e123decb02fa91aaa">COMMITMENTS_BC_priv_modulus</a>
+</li>
+<li>invpq
+: <a class="el" href="structFACTORING__ZK__modulus.html#a85ff6e5ed1ce3c5822a31aa9d6de2107">FACTORING_ZK_modulus</a>
+</li>
+</ul>
+
+
+<h3><a id="index_n"></a>- n -</h3><ul>
+<li>N
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#ae70b46cbe352068e8b8071f0e046d464">COMMITMENTS_BC_priv_modulus</a>
+, <a class="el" href="structCOMMITMENTS__BC__pub__modulus.html#a55b541b8cd4e0dcdc63c0786b32d4beb">COMMITMENTS_BC_pub_modulus</a>
+</li>
+<li>n
+: <a class="el" href="structFACTORING__ZK__modulus.html#ae95c609b5d7ffe3ca5514c00f990a297">FACTORING_ZK_modulus</a>
+</li>
+</ul>
+
+
+<h3><a id="index_p"></a>- p -</h3><ul>
+<li>P
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#adf198e18dddecfc16a1575d340597f08">COMMITMENTS_BC_priv_modulus</a>
+</li>
+<li>p
+: <a class="el" href="structFACTORING__ZK__modulus.html#aad32cef305e6df7e87e076d510a1dbff">FACTORING_ZK_modulus</a>
+</li>
+<li>pq
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#a68de71c8f0e75e7f2085dc213a3c3214">COMMITMENTS_BC_priv_modulus</a>
+</li>
+</ul>
+
+
+<h3><a id="index_q"></a>- q -</h3><ul>
+<li>Q
+: <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#ad85ce137db71ea1fc185c2ca320c1f07">COMMITMENTS_BC_priv_modulus</a>
+</li>
+<li>q
+: <a class="el" href="structFACTORING__ZK__modulus.html#a56447221f4bc3cb0258874dd7619cbe5">FACTORING_ZK_modulus</a>
+</li>
+</ul>
+
+
+<h3><a id="index_r"></a>- r -</h3><ul>
+<li>rho
+: <a class="el" href="structMTA__RP__commitment__rv.html#a0ed6c0f9febc1b4cf7888de348296b46">MTA_RP_commitment_rv</a>
+, <a class="el" href="structMTA__ZK__commitment__rv.html#a73b42958ba972918f43b9d6f9df7f31e">MTA_ZK_commitment_rv</a>
+</li>
+<li>rho1
+: <a class="el" href="structMTA__ZK__commitment__rv.html#aefa9426a3a4ad48490520c99c311c486">MTA_ZK_commitment_rv</a>
+</li>
+</ul>
+
+
+<h3><a id="index_s"></a>- s -</h3><ul>
+<li>s
+: <a class="el" href="structMTA__RP__proof.html#a8040777a4b2f46d78a7f113e924b76d0">MTA_RP_proof</a>
+, <a class="el" href="structMTA__ZK__proof.html#a34c86cae80dc0f8688cd1f7d5f1801ab">MTA_ZK_proof</a>
+</li>
+<li>s1
+: <a class="el" href="structMTA__RP__proof.html#aa0e204527ce83ab95daa7b6a9977e473">MTA_RP_proof</a>
+, <a class="el" href="structMTA__ZK__proof.html#a44224d752605c42e4ec583442eb6a61a">MTA_ZK_proof</a>
+</li>
+<li>s2
+: <a class="el" href="structMTA__RP__proof.html#a22e41915856f9e6c60fbde988a81870c">MTA_RP_proof</a>
+, <a class="el" href="structMTA__ZK__proof.html#a4141b24bb3ad79318884ac0facb65800">MTA_ZK_proof</a>
+</li>
+<li>sigma
+: <a class="el" href="structMTA__ZK__commitment__rv.html#ab26f42619df65db7f6dcdde009067ae9">MTA_ZK_commitment_rv</a>
+</li>
+</ul>
+
+
+<h3><a id="index_t"></a>- t -</h3><ul>
+<li>t
+: <a class="el" href="structMTA__ZK__commitment.html#ab7f5f3c057c0c12ccae9e1b1667a6cfc">MTA_ZK_commitment</a>
+</li>
+<li>t1
+: <a class="el" href="structMTA__ZK__proof.html#a2555d0e4789621eff8dc79cf96276860">MTA_ZK_proof</a>
+</li>
+<li>t2
+: <a class="el" href="structMTA__ZK__proof.html#affd6b54dc1a58cdc23ac27746c5eb31b">MTA_ZK_proof</a>
+</li>
+<li>tau
+: <a class="el" href="structMTA__ZK__commitment__rv.html#aa306d5c97d2df585d8ec3948bdf95b16">MTA_ZK_commitment_rv</a>
+</li>
+</ul>
+
+
+<h3><a id="index_u"></a>- u -</h3><ul>
+<li>u
+: <a class="el" href="structMTA__RP__commitment.html#a201fa0a955e4cc4b8f0bfed810a58b77">MTA_RP_commitment</a>
+</li>
+<li>U
+: <a class="el" href="structMTA__ZKWC__commitment.html#a6906ba960255cecf7cf29848dc40b9cc">MTA_ZKWC_commitment</a>
+</li>
+</ul>
+
+
+<h3><a id="index_v"></a>- v -</h3><ul>
+<li>v
+: <a class="el" href="structMTA__ZK__commitment.html#a8c05e4faf0896ddb85501e02a80953ca">MTA_ZK_commitment</a>
+</li>
+</ul>
+
+
+<h3><a id="index_w"></a>- w -</h3><ul>
+<li>w
+: <a class="el" href="structMTA__RP__commitment.html#a19d9074f354d2362f090db5cd6f34212">MTA_RP_commitment</a>
+, <a class="el" href="structMTA__ZK__commitment.html#a9ff382fe3ce3795f79bb29c8f2ed738a">MTA_ZK_commitment</a>
+</li>
+</ul>
+
+
+<h3><a id="index_z"></a>- z -</h3><ul>
+<li>z
+: <a class="el" href="structMTA__RP__commitment.html#aee20ad37a8cde2e2b6381055fff1c649">MTA_RP_commitment</a>
+, <a class="el" href="structMTA__ZK__commitment.html#a21736668dad1cf7aba4dd40f059703e0">MTA_ZK_commitment</a>
+</li>
+<li>z1
+: <a class="el" href="structMTA__ZK__commitment.html#a63a83d96029b8e935c16b11c07d0b69a">MTA_ZK_commitment</a>
+</li>
+<li>zkc
+: <a class="el" href="structMTA__ZKWC__commitment.html#a7025ae8eb9f30ddb6b6d601fd49a1da6">MTA_ZKWC_commitment</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/globals.html b/website/static/mpcdocs/globals.html
new file mode 100644
index 0000000..f61ffb5
--- /dev/null
+++ b/website/static/mpcdocs/globals.html
@@ -0,0 +1,357 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: Globals</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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
+
+<h3><a id="index_c"></a>- c -</h3><ul>
+<li>COMMITMENTS_BC_export_public_modulus()
+: <a class="el" href="commitments_8h.html#ad1c607c0e295be5b496475c3c4959fad">commitments.h</a>
+</li>
+<li>COMMITMENTS_BC_kill_priv_modulus()
+: <a class="el" href="commitments_8h.html#a347b682fd4742fff73a9c924c88254ce">commitments.h</a>
+</li>
+<li>COMMITMENTS_BC_setup()
+: <a class="el" href="commitments_8h.html#a522d6f485494a7a2297007121529db4a">commitments.h</a>
+</li>
+<li>COMMITMENTS_FAIL
+: <a class="el" href="commitments_8h.html#a0280d7c876b77a0bae100933dc61c9bb">commitments.h</a>
+</li>
+<li>COMMITMENTS_NM_commit()
+: <a class="el" href="commitments_8h.html#a03557be3cbf16370e9113fff93bc8169">commitments.h</a>
+</li>
+<li>COMMITMENTS_NM_decommit()
+: <a class="el" href="commitments_8h.html#a224adcc226ada8b5b999db0ff00f0986">commitments.h</a>
+</li>
+<li>COMMITMENTS_OK
+: <a class="el" href="commitments_8h.html#a296158654474a636d999781ddcb9f9d8">commitments.h</a>
+</li>
+</ul>
+
+
+<h3><a id="index_f"></a>- f -</h3><ul>
+<li>FACTORING_ZK_A
+: <a class="el" href="factoring__zk_8h.html#a6882d3f80db9156ee393363643dbaeb5">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_B
+: <a class="el" href="factoring__zk_8h.html#a2f229a79cea7ffb93931b5af6a05c373">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_FAIL
+: <a class="el" href="factoring__zk_8h.html#a48af2c32b3215046f4b708877c34b11d">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_modulus_fromOctets()
+: <a class="el" href="factoring__zk_8h.html#afba5dd5398192722440f724c3ce6c37a">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_modulus_kill()
+: <a class="el" href="factoring__zk_8h.html#a40183656099267b7b20980fd5c2e8dcd">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_OK
+: <a class="el" href="factoring__zk_8h.html#a1c4e961cde47625be283dc1c59cec7c0">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_OUT_OF_BOUNDS
+: <a class="el" href="factoring__zk_8h.html#ad78ee9209748e3f16fb0bb48a622a0c6">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_prove()
+: <a class="el" href="factoring__zk_8h.html#aff201c3031798a0f0027dadf929190d7">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_verify()
+: <a class="el" href="factoring__zk_8h.html#abc6d5b3c3df4c98b36d7f3abe8f69a03">factoring_zk.h</a>
+</li>
+<li>FS_2048
+: <a class="el" href="commitments_8h.html#ae3ce9abc99cec679346a7d38bed96d9b">commitments.h</a>
+, <a class="el" href="factoring__zk_8h.html#ae3ce9abc99cec679346a7d38bed96d9b">factoring_zk.h</a>
+</li>
+</ul>
+
+
+<h3><a id="index_h"></a>- h -</h3><ul>
+<li>HFS_2048
+: <a class="el" href="commitments_8h.html#af12daa3ccdbe8c973ca455b53f58f13b">commitments.h</a>
+, <a class="el" href="factoring__zk_8h.html#af12daa3ccdbe8c973ca455b53f58f13b">factoring_zk.h</a>
+</li>
+</ul>
+
+
+<h3><a id="index_m"></a>- m -</h3><ul>
+<li>MPC_DUMP_PAILLIER_SK()
+: <a class="el" href="mpc_8h.html#af1096af9d7fa21d31bfcc538201ef976">mpc.h</a>
+</li>
+<li>MPC_ECDSA_KEY_PAIR_GENERATE()
+: <a class="el" href="mpc_8h.html#ad26837e4fd74e8d6aabc6b3bfaf9a7be">mpc.h</a>
+</li>
+<li>MPC_ECDSA_SIGN()
+: <a class="el" href="mpc_8h.html#a5a6fb00e1b95a507e89865051e1fb54a">mpc.h</a>
+</li>
+<li>MPC_ECDSA_VERIFY()
+: <a class="el" href="mpc_8h.html#a4502a62e9dfbd1ebe51a9b287196766f">mpc.h</a>
+</li>
+<li>MPC_FAIL
+: <a class="el" href="mpc_8h.html#a0a76c82492c2feb97c072c17dbf4151d">mpc.h</a>
+</li>
+<li>MPC_HASH()
+: <a class="el" href="mpc_8h.html#a0e70e4308d7a75c852bb2bfd6a57b5a9">mpc.h</a>
+</li>
+<li>MPC_INVALID_ECP
+: <a class="el" href="mpc_8h.html#aab0897c8d775eb4331e21ad4003d08d2">mpc.h</a>
+</li>
+<li>MPC_INVKGAMMA()
+: <a class="el" href="mpc_8h.html#a7b14475ef026b509e974468fb473231c">mpc.h</a>
+</li>
+<li>MPC_K_GENERATE()
+: <a class="el" href="mpc_8h.html#a605a8cc66cd1e9a5513ef270934d10a2">mpc.h</a>
+</li>
+<li>MPC_MTA_CLIENT1()
+: <a class="el" href="mta_8h.html#a7bbc83a1d90c466061839c88375576a3">mta.h</a>
+</li>
+<li>MPC_MTA_CLIENT2()
+: <a class="el" href="mta_8h.html#a673e46de79006b3d5e349a0eec6bd5c5">mta.h</a>
+</li>
+<li>MPC_MTA_SERVER()
+: <a class="el" href="mta_8h.html#af6150f97b1d2df1d70ec419211d37592">mta.h</a>
+</li>
+<li>MPC_OK
+: <a class="el" href="mpc_8h.html#a530efe0885cea4e5b99df50b80bae294">mpc.h</a>
+</li>
+<li>MPC_PHASE5_commit()
+: <a class="el" href="mpc_8h.html#a007621069a3d86c06c3cdc113d0177ac">mpc.h</a>
+</li>
+<li>MPC_PHASE5_prove()
+: <a class="el" href="mpc_8h.html#a3f1907b745524b7f991a821e0bf831d1">mpc.h</a>
+</li>
+<li>MPC_PHASE5_verify()
+: <a class="el" href="mpc_8h.html#aba1ebc625244ce42e60a17f5edd2f71f">mpc.h</a>
+</li>
+<li>MPC_R()
+: <a class="el" href="mpc_8h.html#a4b2ad033889c2765aba63f84c6465471">mpc.h</a>
+</li>
+<li>MPC_S()
+: <a class="el" href="mpc_8h.html#acfb7f28581a6a2100047aaba6d03f6dc">mpc.h</a>
+</li>
+<li>MPC_SUM_MTA()
+: <a class="el" href="mta_8h.html#a585141482d0be764359316dc4aa9a345">mta.h</a>
+</li>
+<li>MPC_SUM_PK()
+: <a class="el" href="mpc_8h.html#a25cdf08efa8377c4521728600b3001b4">mpc.h</a>
+</li>
+<li>MPC_SUM_S()
+: <a class="el" href="mpc_8h.html#a1cca737dad0e9351f8c4d993b90e71f4">mpc.h</a>
+</li>
+<li>MTA_FAIL
+: <a class="el" href="mta_8h.html#a9cffabde5e58757768c87f8b96bed9be">mta.h</a>
+</li>
+<li>MTA_INVALID_ECP
+: <a class="el" href="mta_8h.html#ac83dee7822a61403334298331d63171c">mta.h</a>
+</li>
+<li>MTA_OK
+: <a class="el" href="mta_8h.html#a38835fd15b3c165ca0acce5ba7f45dd6">mta.h</a>
+</li>
+<li>MTA_RP_challenge()
+: <a class="el" href="mta_8h.html#aae8035b9c2d5b29f3ad9df3c44466e1d">mta.h</a>
+</li>
+<li>MTA_RP_commit()
+: <a class="el" href="mta_8h.html#a9ae812a8b7fa69ae98d8eec9db51cc83">mta.h</a>
+</li>
+<li>MTA_RP_commitment_fromOctets()
+: <a class="el" href="mta_8h.html#a5f42fb5d017f34db268c112f7c8d056e">mta.h</a>
+</li>
+<li>MTA_RP_commitment_rv_kill()
+: <a class="el" href="mta_8h.html#a83d69dbe4b86adcf814bf17593066b5d">mta.h</a>
+</li>
+<li>MTA_RP_commitment_toOctets()
+: <a class="el" href="mta_8h.html#aa60c3b4a80719d29f0ebb747f3fc31a1">mta.h</a>
+</li>
+<li>MTA_RP_proof_fromOctets()
+: <a class="el" href="mta_8h.html#ad60da72de670c62131bc57f9e1070c84">mta.h</a>
+</li>
+<li>MTA_RP_proof_toOctets()
+: <a class="el" href="mta_8h.html#a4c516e4898f3fbcdd55ed70ea0e336ef">mta.h</a>
+</li>
+<li>MTA_RP_prove()
+: <a class="el" href="mta_8h.html#a840590c8db0b435bece74978adf0748d">mta.h</a>
+</li>
+<li>MTA_RP_verify()
+: <a class="el" href="mta_8h.html#aaa4c5afa267be00e1819becd53805795">mta.h</a>
+</li>
+<li>MTA_ZK_challenge()
+: <a class="el" href="mta_8h.html#a437965ad4a0dd602a0c1a4339afb0cb6">mta.h</a>
+</li>
+<li>MTA_ZK_commit()
+: <a class="el" href="mta_8h.html#a882f4c5922a453293eaaa7e3ec876bdf">mta.h</a>
+</li>
+<li>MTA_ZK_commitment_fromOctets()
+: <a class="el" href="mta_8h.html#ad9cb35ed95b1ad3367fd78437e98aad5">mta.h</a>
+</li>
+<li>MTA_ZK_commitment_rv_kill()
+: <a class="el" href="mta_8h.html#a50085c31f3df46ac6814c46064ed2826">mta.h</a>
+</li>
+<li>MTA_ZK_commitment_toOctets()
+: <a class="el" href="mta_8h.html#afa9bc2f3876442f8519c67c011d4b0c5">mta.h</a>
+</li>
+<li>MTA_ZK_proof_fromOctets()
+: <a class="el" href="mta_8h.html#a4d280db3b810c0d69603a8ee97222565">mta.h</a>
+</li>
+<li>MTA_ZK_proof_toOctets()
+: <a class="el" href="mta_8h.html#ae4cc541c94044beaf3a46cd5415da370">mta.h</a>
+</li>
+<li>MTA_ZK_prove()
+: <a class="el" href="mta_8h.html#a275057a0134ee0cbef05e1c719f3f94b">mta.h</a>
+</li>
+<li>MTA_ZK_random_challenge()
+: <a class="el" href="mta_8h.html#ae4971990b60c103d7cb596c9a0d1d205">mta.h</a>
+</li>
+<li>MTA_ZK_verify()
+: <a class="el" href="mta_8h.html#a34fa2c06ff8a165243621fe6d32a4b64">mta.h</a>
+</li>
+<li>MTA_ZKWC_challenge()
+: <a class="el" href="mta_8h.html#a4dd5d4b2d4fc3e530632fb61b56c3f25">mta.h</a>
+</li>
+<li>MTA_ZKWC_commit()
+: <a class="el" href="mta_8h.html#a61bd2519a246c273ce42da382732c489">mta.h</a>
+</li>
+<li>MTA_ZKWC_commitment_fromOctets()
+: <a class="el" href="mta_8h.html#a051196472aca3ad711f8c8f9f39280ce">mta.h</a>
+</li>
+<li>MTA_ZKWC_commitment_rv
+: <a class="el" href="mta_8h.html#a520066c511d8661c3ebfe4c2a612a046">mta.h</a>
+</li>
+<li>MTA_ZKWC_commitment_rv_kill()
+: <a class="el" href="mta_8h.html#adc4cbeae2c13b0e005c70532d2f96e46">mta.h</a>
+</li>
+<li>MTA_ZKWC_commitment_toOctets()
+: <a class="el" href="mta_8h.html#ab2611cfca7b4350f0921d56a3aed3185">mta.h</a>
+</li>
+<li>MTA_ZKWC_proof
+: <a class="el" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">mta.h</a>
+</li>
+<li>MTA_ZKWC_proof_fromOctets()
+: <a class="el" href="mta_8h.html#afdc55dcddd98123e60590190425edab3">mta.h</a>
+</li>
+<li>MTA_ZKWC_proof_toOctets()
+: <a class="el" href="mta_8h.html#a127a8be76fdcde455e6d8645fcc93362">mta.h</a>
+</li>
+<li>MTA_ZKWC_prove()
+: <a class="el" href="mta_8h.html#aec434d125d9f299a78388524ef5f0c51">mta.h</a>
+</li>
+<li>MTA_ZKWC_verify()
+: <a class="el" href="mta_8h.html#aec8c96b0b4983b7e16bdcf7f24b16c08">mta.h</a>
+</li>
+</ul>
+
+
+<h3><a id="index_s"></a>- s -</h3><ul>
+<li>SCHNORR_challenge()
+: <a class="el" href="schnorr_8h.html#a743028db55e66f4d30699e72a1b0bf1f">schnorr.h</a>
+</li>
+<li>SCHNORR_commit()
+: <a class="el" href="schnorr_8h.html#aa8b82a3a089695a803f100b4a861c59b">schnorr.h</a>
+</li>
+<li>SCHNORR_D_challenge()
+: <a class="el" href="schnorr_8h.html#ad72917e4d1d2e9167c47062b4939dffb">schnorr.h</a>
+</li>
+<li>SCHNORR_D_commit()
+: <a class="el" href="schnorr_8h.html#a20d267a63789b45faaf9b82018116268">schnorr.h</a>
+</li>
+<li>SCHNORR_D_prove()
+: <a class="el" href="schnorr_8h.html#a726141bddf04f630fe06e2f13a3d28e5">schnorr.h</a>
+</li>
+<li>SCHNORR_D_verify()
+: <a class="el" href="schnorr_8h.html#ab1c768caccc24700b28050962b603898">schnorr.h</a>
+</li>
+<li>SCHNORR_FAIL
+: <a class="el" href="schnorr_8h.html#a4a5402fd8a88039b3f9cad0f508eec31">schnorr.h</a>
+</li>
+<li>SCHNORR_INVALID_ECP
+: <a class="el" href="schnorr_8h.html#aacf81adc639d9529432d969dca09eb71">schnorr.h</a>
+</li>
+<li>SCHNORR_OK
+: <a class="el" href="schnorr_8h.html#a88f5f29dd2b59260b70ffcbc5f44c326">schnorr.h</a>
+</li>
+<li>SCHNORR_prove()
+: <a class="el" href="schnorr_8h.html#a874b17623254bc1701d1f25459770200">schnorr.h</a>
+</li>
+<li>SCHNORR_random_challenge()
+: <a class="el" href="schnorr_8h.html#ab8e7127fb5812f3592da6ebf08b57512">schnorr.h</a>
+</li>
+<li>SCHNORR_verify()
+: <a class="el" href="schnorr_8h.html#a5f6c493e5b3acdc97acb0af7a0389723">schnorr.h</a>
+</li>
+<li>SFS_SECP256K1
+: <a class="el" href="schnorr_8h.html#a9d25d694a29331ea767179901f8ae601">schnorr.h</a>
+</li>
+<li>SGS_SECP256K1
+: <a class="el" href="schnorr_8h.html#ab5bcf782e8f2fcd1404d5de3b85707fd">schnorr.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/globals_defs.html b/website/static/mpcdocs/globals_defs.html
new file mode 100644
index 0000000..8f19daa
--- /dev/null
+++ b/website/static/mpcdocs/globals_defs.html
@@ -0,0 +1,141 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: Globals</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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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>COMMITMENTS_FAIL
+: <a class="el" href="commitments_8h.html#a0280d7c876b77a0bae100933dc61c9bb">commitments.h</a>
+</li>
+<li>COMMITMENTS_OK
+: <a class="el" href="commitments_8h.html#a296158654474a636d999781ddcb9f9d8">commitments.h</a>
+</li>
+<li>FACTORING_ZK_A
+: <a class="el" href="factoring__zk_8h.html#a6882d3f80db9156ee393363643dbaeb5">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_B
+: <a class="el" href="factoring__zk_8h.html#a2f229a79cea7ffb93931b5af6a05c373">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_FAIL
+: <a class="el" href="factoring__zk_8h.html#a48af2c32b3215046f4b708877c34b11d">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_OK
+: <a class="el" href="factoring__zk_8h.html#a1c4e961cde47625be283dc1c59cec7c0">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_OUT_OF_BOUNDS
+: <a class="el" href="factoring__zk_8h.html#ad78ee9209748e3f16fb0bb48a622a0c6">factoring_zk.h</a>
+</li>
+<li>FS_2048
+: <a class="el" href="commitments_8h.html#ae3ce9abc99cec679346a7d38bed96d9b">commitments.h</a>
+, <a class="el" href="factoring__zk_8h.html#ae3ce9abc99cec679346a7d38bed96d9b">factoring_zk.h</a>
+</li>
+<li>HFS_2048
+: <a class="el" href="commitments_8h.html#af12daa3ccdbe8c973ca455b53f58f13b">commitments.h</a>
+, <a class="el" href="factoring__zk_8h.html#af12daa3ccdbe8c973ca455b53f58f13b">factoring_zk.h</a>
+</li>
+<li>MPC_FAIL
+: <a class="el" href="mpc_8h.html#a0a76c82492c2feb97c072c17dbf4151d">mpc.h</a>
+</li>
+<li>MPC_INVALID_ECP
+: <a class="el" href="mpc_8h.html#aab0897c8d775eb4331e21ad4003d08d2">mpc.h</a>
+</li>
+<li>MPC_OK
+: <a class="el" href="mpc_8h.html#a530efe0885cea4e5b99df50b80bae294">mpc.h</a>
+</li>
+<li>MTA_FAIL
+: <a class="el" href="mta_8h.html#a9cffabde5e58757768c87f8b96bed9be">mta.h</a>
+</li>
+<li>MTA_INVALID_ECP
+: <a class="el" href="mta_8h.html#ac83dee7822a61403334298331d63171c">mta.h</a>
+</li>
+<li>MTA_OK
+: <a class="el" href="mta_8h.html#a38835fd15b3c165ca0acce5ba7f45dd6">mta.h</a>
+</li>
+<li>SCHNORR_FAIL
+: <a class="el" href="schnorr_8h.html#a4a5402fd8a88039b3f9cad0f508eec31">schnorr.h</a>
+</li>
+<li>SCHNORR_INVALID_ECP
+: <a class="el" href="schnorr_8h.html#aacf81adc639d9529432d969dca09eb71">schnorr.h</a>
+</li>
+<li>SCHNORR_OK
+: <a class="el" href="schnorr_8h.html#a88f5f29dd2b59260b70ffcbc5f44c326">schnorr.h</a>
+</li>
+<li>SFS_SECP256K1
+: <a class="el" href="schnorr_8h.html#a9d25d694a29331ea767179901f8ae601">schnorr.h</a>
+</li>
+<li>SGS_SECP256K1
+: <a class="el" href="schnorr_8h.html#ab5bcf782e8f2fcd1404d5de3b85707fd">schnorr.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/globals_func.html b/website/static/mpcdocs/globals_func.html
new file mode 100644
index 0000000..44d3ed0
--- /dev/null
+++ b/website/static/mpcdocs/globals_func.html
@@ -0,0 +1,285 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: Globals</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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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_c"></a>- c -</h3><ul>
+<li>COMMITMENTS_BC_export_public_modulus()
+: <a class="el" href="commitments_8h.html#ad1c607c0e295be5b496475c3c4959fad">commitments.h</a>
+</li>
+<li>COMMITMENTS_BC_kill_priv_modulus()
+: <a class="el" href="commitments_8h.html#a347b682fd4742fff73a9c924c88254ce">commitments.h</a>
+</li>
+<li>COMMITMENTS_BC_setup()
+: <a class="el" href="commitments_8h.html#a522d6f485494a7a2297007121529db4a">commitments.h</a>
+</li>
+<li>COMMITMENTS_NM_commit()
+: <a class="el" href="commitments_8h.html#a03557be3cbf16370e9113fff93bc8169">commitments.h</a>
+</li>
+<li>COMMITMENTS_NM_decommit()
+: <a class="el" href="commitments_8h.html#a224adcc226ada8b5b999db0ff00f0986">commitments.h</a>
+</li>
+</ul>
+
+
+<h3><a id="index_f"></a>- f -</h3><ul>
+<li>FACTORING_ZK_modulus_fromOctets()
+: <a class="el" href="factoring__zk_8h.html#afba5dd5398192722440f724c3ce6c37a">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_modulus_kill()
+: <a class="el" href="factoring__zk_8h.html#a40183656099267b7b20980fd5c2e8dcd">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_prove()
+: <a class="el" href="factoring__zk_8h.html#aff201c3031798a0f0027dadf929190d7">factoring_zk.h</a>
+</li>
+<li>FACTORING_ZK_verify()
+: <a class="el" href="factoring__zk_8h.html#abc6d5b3c3df4c98b36d7f3abe8f69a03">factoring_zk.h</a>
+</li>
+</ul>
+
+
+<h3><a id="index_m"></a>- m -</h3><ul>
+<li>MPC_DUMP_PAILLIER_SK()
+: <a class="el" href="mpc_8h.html#af1096af9d7fa21d31bfcc538201ef976">mpc.h</a>
+</li>
+<li>MPC_ECDSA_KEY_PAIR_GENERATE()
+: <a class="el" href="mpc_8h.html#ad26837e4fd74e8d6aabc6b3bfaf9a7be">mpc.h</a>
+</li>
+<li>MPC_ECDSA_SIGN()
+: <a class="el" href="mpc_8h.html#a5a6fb00e1b95a507e89865051e1fb54a">mpc.h</a>
+</li>
+<li>MPC_ECDSA_VERIFY()
+: <a class="el" href="mpc_8h.html#a4502a62e9dfbd1ebe51a9b287196766f">mpc.h</a>
+</li>
+<li>MPC_HASH()
+: <a class="el" href="mpc_8h.html#a0e70e4308d7a75c852bb2bfd6a57b5a9">mpc.h</a>
+</li>
+<li>MPC_INVKGAMMA()
+: <a class="el" href="mpc_8h.html#a7b14475ef026b509e974468fb473231c">mpc.h</a>
+</li>
+<li>MPC_K_GENERATE()
+: <a class="el" href="mpc_8h.html#a605a8cc66cd1e9a5513ef270934d10a2">mpc.h</a>
+</li>
+<li>MPC_MTA_CLIENT1()
+: <a class="el" href="mta_8h.html#a7bbc83a1d90c466061839c88375576a3">mta.h</a>
+</li>
+<li>MPC_MTA_CLIENT2()
+: <a class="el" href="mta_8h.html#a673e46de79006b3d5e349a0eec6bd5c5">mta.h</a>
+</li>
+<li>MPC_MTA_SERVER()
+: <a class="el" href="mta_8h.html#af6150f97b1d2df1d70ec419211d37592">mta.h</a>
+</li>
+<li>MPC_PHASE5_commit()
+: <a class="el" href="mpc_8h.html#a007621069a3d86c06c3cdc113d0177ac">mpc.h</a>
+</li>
+<li>MPC_PHASE5_prove()
+: <a class="el" href="mpc_8h.html#a3f1907b745524b7f991a821e0bf831d1">mpc.h</a>
+</li>
+<li>MPC_PHASE5_verify()
+: <a class="el" href="mpc_8h.html#aba1ebc625244ce42e60a17f5edd2f71f">mpc.h</a>
+</li>
+<li>MPC_R()
+: <a class="el" href="mpc_8h.html#a4b2ad033889c2765aba63f84c6465471">mpc.h</a>
+</li>
+<li>MPC_S()
+: <a class="el" href="mpc_8h.html#acfb7f28581a6a2100047aaba6d03f6dc">mpc.h</a>
+</li>
+<li>MPC_SUM_MTA()
+: <a class="el" href="mta_8h.html#a585141482d0be764359316dc4aa9a345">mta.h</a>
+</li>
+<li>MPC_SUM_PK()
+: <a class="el" href="mpc_8h.html#a25cdf08efa8377c4521728600b3001b4">mpc.h</a>
+</li>
+<li>MPC_SUM_S()
+: <a class="el" href="mpc_8h.html#a1cca737dad0e9351f8c4d993b90e71f4">mpc.h</a>
+</li>
+<li>MTA_RP_challenge()
+: <a class="el" href="mta_8h.html#aae8035b9c2d5b29f3ad9df3c44466e1d">mta.h</a>
+</li>
+<li>MTA_RP_commit()
+: <a class="el" href="mta_8h.html#a9ae812a8b7fa69ae98d8eec9db51cc83">mta.h</a>
+</li>
+<li>MTA_RP_commitment_fromOctets()
+: <a class="el" href="mta_8h.html#a5f42fb5d017f34db268c112f7c8d056e">mta.h</a>
+</li>
+<li>MTA_RP_commitment_rv_kill()
+: <a class="el" href="mta_8h.html#a83d69dbe4b86adcf814bf17593066b5d">mta.h</a>
+</li>
+<li>MTA_RP_commitment_toOctets()
+: <a class="el" href="mta_8h.html#aa60c3b4a80719d29f0ebb747f3fc31a1">mta.h</a>
+</li>
+<li>MTA_RP_proof_fromOctets()
+: <a class="el" href="mta_8h.html#ad60da72de670c62131bc57f9e1070c84">mta.h</a>
+</li>
+<li>MTA_RP_proof_toOctets()
+: <a class="el" href="mta_8h.html#a4c516e4898f3fbcdd55ed70ea0e336ef">mta.h</a>
+</li>
+<li>MTA_RP_prove()
+: <a class="el" href="mta_8h.html#a840590c8db0b435bece74978adf0748d">mta.h</a>
+</li>
+<li>MTA_RP_verify()
+: <a class="el" href="mta_8h.html#aaa4c5afa267be00e1819becd53805795">mta.h</a>
+</li>
+<li>MTA_ZK_challenge()
+: <a class="el" href="mta_8h.html#a437965ad4a0dd602a0c1a4339afb0cb6">mta.h</a>
+</li>
+<li>MTA_ZK_commit()
+: <a class="el" href="mta_8h.html#a882f4c5922a453293eaaa7e3ec876bdf">mta.h</a>
+</li>
+<li>MTA_ZK_commitment_fromOctets()
+: <a class="el" href="mta_8h.html#ad9cb35ed95b1ad3367fd78437e98aad5">mta.h</a>
+</li>
+<li>MTA_ZK_commitment_rv_kill()
+: <a class="el" href="mta_8h.html#a50085c31f3df46ac6814c46064ed2826">mta.h</a>
+</li>
+<li>MTA_ZK_commitment_toOctets()
+: <a class="el" href="mta_8h.html#afa9bc2f3876442f8519c67c011d4b0c5">mta.h</a>
+</li>
+<li>MTA_ZK_proof_fromOctets()
+: <a class="el" href="mta_8h.html#a4d280db3b810c0d69603a8ee97222565">mta.h</a>
+</li>
+<li>MTA_ZK_proof_toOctets()
+: <a class="el" href="mta_8h.html#ae4cc541c94044beaf3a46cd5415da370">mta.h</a>
+</li>
+<li>MTA_ZK_prove()
+: <a class="el" href="mta_8h.html#a275057a0134ee0cbef05e1c719f3f94b">mta.h</a>
+</li>
+<li>MTA_ZK_random_challenge()
+: <a class="el" href="mta_8h.html#ae4971990b60c103d7cb596c9a0d1d205">mta.h</a>
+</li>
+<li>MTA_ZK_verify()
+: <a class="el" href="mta_8h.html#a34fa2c06ff8a165243621fe6d32a4b64">mta.h</a>
+</li>
+<li>MTA_ZKWC_challenge()
+: <a class="el" href="mta_8h.html#a4dd5d4b2d4fc3e530632fb61b56c3f25">mta.h</a>
+</li>
+<li>MTA_ZKWC_commit()
+: <a class="el" href="mta_8h.html#a61bd2519a246c273ce42da382732c489">mta.h</a>
+</li>
+<li>MTA_ZKWC_commitment_fromOctets()
+: <a class="el" href="mta_8h.html#a051196472aca3ad711f8c8f9f39280ce">mta.h</a>
+</li>
+<li>MTA_ZKWC_commitment_rv_kill()
+: <a class="el" href="mta_8h.html#adc4cbeae2c13b0e005c70532d2f96e46">mta.h</a>
+</li>
+<li>MTA_ZKWC_commitment_toOctets()
+: <a class="el" href="mta_8h.html#ab2611cfca7b4350f0921d56a3aed3185">mta.h</a>
+</li>
+<li>MTA_ZKWC_proof_fromOctets()
+: <a class="el" href="mta_8h.html#afdc55dcddd98123e60590190425edab3">mta.h</a>
+</li>
+<li>MTA_ZKWC_proof_toOctets()
+: <a class="el" href="mta_8h.html#a127a8be76fdcde455e6d8645fcc93362">mta.h</a>
+</li>
+<li>MTA_ZKWC_prove()
+: <a class="el" href="mta_8h.html#aec434d125d9f299a78388524ef5f0c51">mta.h</a>
+</li>
+<li>MTA_ZKWC_verify()
+: <a class="el" href="mta_8h.html#aec8c96b0b4983b7e16bdcf7f24b16c08">mta.h</a>
+</li>
+</ul>
+
+
+<h3><a id="index_s"></a>- s -</h3><ul>
+<li>SCHNORR_challenge()
+: <a class="el" href="schnorr_8h.html#a743028db55e66f4d30699e72a1b0bf1f">schnorr.h</a>
+</li>
+<li>SCHNORR_commit()
+: <a class="el" href="schnorr_8h.html#aa8b82a3a089695a803f100b4a861c59b">schnorr.h</a>
+</li>
+<li>SCHNORR_D_challenge()
+: <a class="el" href="schnorr_8h.html#ad72917e4d1d2e9167c47062b4939dffb">schnorr.h</a>
+</li>
+<li>SCHNORR_D_commit()
+: <a class="el" href="schnorr_8h.html#a20d267a63789b45faaf9b82018116268">schnorr.h</a>
+</li>
+<li>SCHNORR_D_prove()
+: <a class="el" href="schnorr_8h.html#a726141bddf04f630fe06e2f13a3d28e5">schnorr.h</a>
+</li>
+<li>SCHNORR_D_verify()
+: <a class="el" href="schnorr_8h.html#ab1c768caccc24700b28050962b603898">schnorr.h</a>
+</li>
+<li>SCHNORR_prove()
+: <a class="el" href="schnorr_8h.html#a874b17623254bc1701d1f25459770200">schnorr.h</a>
+</li>
+<li>SCHNORR_random_challenge()
+: <a class="el" href="schnorr_8h.html#ab8e7127fb5812f3592da6ebf08b57512">schnorr.h</a>
+</li>
+<li>SCHNORR_verify()
+: <a class="el" href="schnorr_8h.html#a5f6c493e5b3acdc97acb0af7a0389723">schnorr.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/globals_type.html b/website/static/mpcdocs/globals_type.html
new file mode 100644
index 0000000..dcbf620
--- /dev/null
+++ b/website/static/mpcdocs/globals_type.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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: Globals</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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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>MTA_ZKWC_commitment_rv
+: <a class="el" href="mta_8h.html#a520066c511d8661c3ebfe4c2a612a046">mta.h</a>
+</li>
+<li>MTA_ZKWC_proof
+: <a class="el" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">mta.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/index.html b/website/static/mpcdocs/index.html
new file mode 100644
index 0000000..a6d3073
--- /dev/null
+++ b/website/static/mpcdocs/index.html
@@ -0,0 +1,105 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: Apache Milagro Multi-Party Computation</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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Apache Milagro Multi-Party Computation </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>libmpc uses the <a href="https://github.com/apache/incubator-milagro-crypto-c">AMCL</a> library</p>
+<h1><a class="anchor" id="homepage"></a>
+Project page</h1>
+<p>The official project page is hosted at <a href="http://milagro.apache.org/docs/milagro-intro/">Apache Milagro (incubating)</a></p>
+<h1><a class="anchor" id="license"></a>
+License</h1>
+<p>Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at</p>
+<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.</p>
+<h1><a class="anchor" id="platforms"></a>
+Platforms</h1>
+<p>The software can be compiled and installed for these operating systems;</p>
+<ul type="disc">
+<li>
+<a class="el" href="linux.html">Linux</a> </li>
+</ul>
+<h1><a class="anchor" id="downloads"></a>
+Downloads</h1>
+<p>The source code is available from here;</p>
+<p>git clone <a href="#" onclick="location.href='mai'+'lto:'+'git'+'@g'+'ith'+'ub'+'.co'+'m'; return false;">git@g<span style="display: none;">.nosp@m.</span>ithu<span style="display: none;">.nosp@m.</span>b.com</a>:apache/incubator-milagro-MPC.git</p>
+<h1><a class="anchor" id="installonmainpage"></a>
+Installation</h1>
+<p>These are the instructions for building on <a class="el" href="linux.html">Linux</a> </p>
+</div></div><!-- PageDoc -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/jquery.js b/website/static/mpcdocs/jquery.js
new file mode 100644
index 0000000..103c32d
--- /dev/null
+++ b/website/static/mpcdocs/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/website/static/mpcdocs/linux.html b/website/static/mpcdocs/linux.html
new file mode 100644
index 0000000..603f230
--- /dev/null
+++ b/website/static/mpcdocs/linux.html
@@ -0,0 +1,149 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: Linux</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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Linux </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h2>Software dependencies</h2>
+<p>CMake is required to build the library and can usually be installed from the operating system package manager.</p>
+<ul type="disc">
+<li>
+sudo apt install cmake </li>
+</ul>
+<p>If not, then you can download it from www.cmake.org</p>
+<p>In order to build the documentation <a href="http://www.doxygen.nl/">doxygen</a> is required.</p>
+<h3>AMCL</h3>
+<p><a href="https://github.com/apache/incubator-milagro-crypto-c">AMCL</a> is used to provide the large finite field functionality.</p>
+<p>Build and install the AMCL library</p>
+<ul type="disc">
+<li>
+git clone <a href="#" onclick="location.href='mai'+'lto:'+'git'+'@g'+'ith'+'ub'+'.co'+'m'; return false;">git@g<span style="display: none;">.nosp@m.</span>ithu<span style="display: none;">.nosp@m.</span>b.com</a>:apache/incubator-milagro-crypto-c.git </li>
+<li>
+cd incubator-milagro-crypto-c </li>
+<li>
+mkdir target </li>
+<li>
+cd target </li>
+<li>
+cmake -D CMAKE_BUILD_TYPE=Debug -D BUILD_SHARED_LIBS=ON -D AMCL_CHUNK=64 -D AMCL_CURVE="BLS381,SECP256K1" -D AMCL_RSA="" -D BUILD_PAILLIER=ON -D BUILD_PYTHON=OFF -D BUILD_BLS=ON -D BUILD_WCC=OFF -D BUILD_MPIN=OFF -D BUILD_X509=OFF -D CMAKE_INSTALL_PREFIX=/usr/local .. </li>
+<li>
+make </li>
+<li>
+make test </li>
+<li>
+sudo make install </li>
+</ul>
+<h2>Compiling</h2>
+<ul type="disc">
+<li>
+mkdir build </li>
+<li>
+cd build </li>
+<li>
+cmake .. </li>
+<li>
+make </li>
+<li>
+make test </li>
+<li>
+make doc </li>
+<li>
+sudo make install </li>
+</ul>
+<p>The build can be configured by setting flags on the command line i.e.</p>
+<ul type="disc">
+<li>
+cmake -D CMAKE_INSTALL_PREFIX=/usr/local </li>
+</ul>
+<p>list available CMake options</p>
+<ul type="disc">
+<li>
+cmake -LH </li>
+</ul>
+<h2>Uninstall software</h2>
+<ul type="disc">
+<li>
+sudo make uninstall </li>
+</ul>
+<h2>Building an installer</h2>
+<p>After having built the libraries you can build a binary installer and a source distribution by running this command</p>
+<ul type="disc">
+<li>
+make package </li>
+</ul>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/menu.js b/website/static/mpcdocs/menu.js
new file mode 100644
index 0000000..2fe2214
--- /dev/null
+++ b/website/static/mpcdocs/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.svg" 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.svg" 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.svg" alt=""/></a></span></div></li>');
+    }
+  }
+  $('#main-menu').smartmenus();
+}
+/* @license-end */
diff --git a/website/static/mpcdocs/menudata.js b/website/static/mpcdocs/menudata.js
new file mode 100644
index 0000000..fee2376
--- /dev/null
+++ b/website/static/mpcdocs/menudata.js
@@ -0,0 +1,77 @@
+/*
+ @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:"Data Structures",url:"annotated.html",children:[
+{text:"Data Structures",url:"annotated.html"},
+{text:"Data Structure Index",url:"classes.html"},
+{text:"Data Fields",url:"functions.html",children:[
+{text:"All",url:"functions.html",children:[
+{text:"a",url:"functions.html#index_a"},
+{text:"b",url:"functions.html#index_b"},
+{text:"g",url:"functions.html#index_g"},
+{text:"i",url:"functions.html#index_i"},
+{text:"n",url:"functions.html#index_n"},
+{text:"p",url:"functions.html#index_p"},
+{text:"q",url:"functions.html#index_q"},
+{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:"w",url:"functions.html#index_w"},
+{text:"z",url:"functions.html#index_z"}]},
+{text:"Variables",url:"functions_vars.html",children:[
+{text:"a",url:"functions_vars.html#index_a"},
+{text:"b",url:"functions_vars.html#index_b"},
+{text:"g",url:"functions_vars.html#index_g"},
+{text:"i",url:"functions_vars.html#index_i"},
+{text:"n",url:"functions_vars.html#index_n"},
+{text:"p",url:"functions_vars.html#index_p"},
+{text:"q",url:"functions_vars.html#index_q"},
+{text:"r",url:"functions_vars.html#index_r"},
+{text:"s",url:"functions_vars.html#index_s"},
+{text:"t",url:"functions_vars.html#index_t"},
+{text:"u",url:"functions_vars.html#index_u"},
+{text:"v",url:"functions_vars.html#index_v"},
+{text:"w",url:"functions_vars.html#index_w"},
+{text:"z",url:"functions_vars.html#index_z"}]}]}]},
+{text:"Files",url:"files.html",children:[
+{text:"File List",url:"files.html"},
+{text:"Globals",url:"globals.html",children:[
+{text:"All",url:"globals.html",children:[
+{text:"c",url:"globals.html#index_c"},
+{text:"f",url:"globals.html#index_f"},
+{text:"h",url:"globals.html#index_h"},
+{text:"m",url:"globals.html#index_m"},
+{text:"s",url:"globals.html#index_s"}]},
+{text:"Functions",url:"globals_func.html",children:[
+{text:"c",url:"globals_func.html#index_c"},
+{text:"f",url:"globals_func.html#index_f"},
+{text:"m",url:"globals_func.html#index_m"},
+{text:"s",url:"globals_func.html#index_s"}]},
+{text:"Typedefs",url:"globals_type.html"},
+{text:"Macros",url:"globals_defs.html"}]}]}]}
diff --git a/website/static/mpcdocs/mpc_8h.html b/website/static/mpcdocs/mpc_8h.html
new file mode 100644
index 0000000..17edbaa
--- /dev/null
+++ b/website/static/mpcdocs/mpc_8h.html
@@ -0,0 +1,986 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: mpc.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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_a166689341c37329f24f96bdba87a08b.html">amcl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">mpc.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>MPC declarations.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;amcl/amcl.h&gt;</code><br />
+<code>#include &lt;amcl/paillier.h&gt;</code><br />
+</div>
+<p><a href="mpc_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="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a530efe0885cea4e5b99df50b80bae294"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#a530efe0885cea4e5b99df50b80bae294">MPC_OK</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a530efe0885cea4e5b99df50b80bae294"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a76c82492c2feb97c072c17dbf4151d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#a0a76c82492c2feb97c072c17dbf4151d">MPC_FAIL</a>&#160;&#160;&#160;71</td></tr>
+<tr class="separator:a0a76c82492c2feb97c072c17dbf4151d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab0897c8d775eb4331e21ad4003d08d2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#aab0897c8d775eb4331e21ad4003d08d2">MPC_INVALID_ECP</a>&#160;&#160;&#160;72</td></tr>
+<tr class="separator:aab0897c8d775eb4331e21ad4003d08d2"><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:ad26837e4fd74e8d6aabc6b3bfaf9a7be"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#ad26837e4fd74e8d6aabc6b3bfaf9a7be">MPC_ECDSA_KEY_PAIR_GENERATE</a> (csprng *RNG, octet *S, octet *W)</td></tr>
+<tr class="memdesc:ad26837e4fd74e8d6aabc6b3bfaf9a7be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate an ECC public/private key pair.  <a href="mpc_8h.html#ad26837e4fd74e8d6aabc6b3bfaf9a7be">More...</a><br /></td></tr>
+<tr class="separator:ad26837e4fd74e8d6aabc6b3bfaf9a7be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a6fb00e1b95a507e89865051e1fb54a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#a5a6fb00e1b95a507e89865051e1fb54a">MPC_ECDSA_SIGN</a> (int sha, const octet *K, const octet *SK, octet *M, octet *R, octet *S)</td></tr>
+<tr class="memdesc:a5a6fb00e1b95a507e89865051e1fb54a"><td class="mdescLeft">&#160;</td><td class="mdescRight">ECDSA Sign message.  <a href="mpc_8h.html#a5a6fb00e1b95a507e89865051e1fb54a">More...</a><br /></td></tr>
+<tr class="separator:a5a6fb00e1b95a507e89865051e1fb54a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4502a62e9dfbd1ebe51a9b287196766f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#a4502a62e9dfbd1ebe51a9b287196766f">MPC_ECDSA_VERIFY</a> (const octet *HM, octet *PK, octet *R, octet *S)</td></tr>
+<tr class="memdesc:a4502a62e9dfbd1ebe51a9b287196766f"><td class="mdescLeft">&#160;</td><td class="mdescRight">ECDSA Verify signature.  <a href="mpc_8h.html#a4502a62e9dfbd1ebe51a9b287196766f">More...</a><br /></td></tr>
+<tr class="separator:a4502a62e9dfbd1ebe51a9b287196766f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a605a8cc66cd1e9a5513ef270934d10a2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#a605a8cc66cd1e9a5513ef270934d10a2">MPC_K_GENERATE</a> (csprng *RNG, octet *K)</td></tr>
+<tr class="memdesc:a605a8cc66cd1e9a5513ef270934d10a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate a random K for and ECDSA signature.  <a href="mpc_8h.html#a605a8cc66cd1e9a5513ef270934d10a2">More...</a><br /></td></tr>
+<tr class="separator:a605a8cc66cd1e9a5513ef270934d10a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b14475ef026b509e974468fb473231c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#a7b14475ef026b509e974468fb473231c">MPC_INVKGAMMA</a> (const octet *KGAMMA1, const octet *KGAMMA2, octet *INVKGAMMA)</td></tr>
+<tr class="memdesc:a7b14475ef026b509e974468fb473231c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate the inverse of the sum of kgamma values.  <a href="mpc_8h.html#a7b14475ef026b509e974468fb473231c">More...</a><br /></td></tr>
+<tr class="separator:a7b14475ef026b509e974468fb473231c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b2ad033889c2765aba63f84c6465471"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#a4b2ad033889c2765aba63f84c6465471">MPC_R</a> (const octet *INVKGAMMA, octet *GAMMAPT1, octet *GAMMAPT2, octet *R, octet *RP)</td></tr>
+<tr class="memdesc:a4b2ad033889c2765aba63f84c6465471"><td class="mdescLeft">&#160;</td><td class="mdescRight">R component.  <a href="mpc_8h.html#a4b2ad033889c2765aba63f84c6465471">More...</a><br /></td></tr>
+<tr class="separator:a4b2ad033889c2765aba63f84c6465471"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e70e4308d7a75c852bb2bfd6a57b5a9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#a0e70e4308d7a75c852bb2bfd6a57b5a9">MPC_HASH</a> (int sha, octet *M, octet *HM)</td></tr>
+<tr class="memdesc:a0e70e4308d7a75c852bb2bfd6a57b5a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hash the message value.  <a href="mpc_8h.html#a0e70e4308d7a75c852bb2bfd6a57b5a9">More...</a><br /></td></tr>
+<tr class="separator:a0e70e4308d7a75c852bb2bfd6a57b5a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acfb7f28581a6a2100047aaba6d03f6dc"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#acfb7f28581a6a2100047aaba6d03f6dc">MPC_S</a> (const octet *HM, const octet *R, const octet *K, const octet *SIGMA, octet *S)</td></tr>
+<tr class="memdesc:acfb7f28581a6a2100047aaba6d03f6dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">S component.  <a href="mpc_8h.html#acfb7f28581a6a2100047aaba6d03f6dc">More...</a><br /></td></tr>
+<tr class="separator:acfb7f28581a6a2100047aaba6d03f6dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1cca737dad0e9351f8c4d993b90e71f4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#a1cca737dad0e9351f8c4d993b90e71f4">MPC_SUM_S</a> (const octet *S1, const octet *S2, octet *S)</td></tr>
+<tr class="memdesc:a1cca737dad0e9351f8c4d993b90e71f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sum of ECDSA s components.  <a href="mpc_8h.html#a1cca737dad0e9351f8c4d993b90e71f4">More...</a><br /></td></tr>
+<tr class="separator:a1cca737dad0e9351f8c4d993b90e71f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25cdf08efa8377c4521728600b3001b4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#a25cdf08efa8377c4521728600b3001b4">MPC_SUM_PK</a> (octet *PK1, octet *PK2, octet *PK)</td></tr>
+<tr class="memdesc:a25cdf08efa8377c4521728600b3001b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sum of ECDSA public key shares.  <a href="mpc_8h.html#a25cdf08efa8377c4521728600b3001b4">More...</a><br /></td></tr>
+<tr class="separator:a25cdf08efa8377c4521728600b3001b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a007621069a3d86c06c3cdc113d0177ac"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#a007621069a3d86c06c3cdc113d0177ac">MPC_PHASE5_commit</a> (csprng *RNG, octet *R, const octet *S, octet *PHI, octet *RHO, octet *V, octet *A)</td></tr>
+<tr class="memdesc:a007621069a3d86c06c3cdc113d0177ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate Commitment for the MPC Phase 5.  <a href="mpc_8h.html#a007621069a3d86c06c3cdc113d0177ac">More...</a><br /></td></tr>
+<tr class="separator:a007621069a3d86c06c3cdc113d0177ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f1907b745524b7f991a821e0bf831d1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#a3f1907b745524b7f991a821e0bf831d1">MPC_PHASE5_prove</a> (const octet *PHI, const octet *RHO, octet *V[2], octet *A[2], octet *PK, const octet *HM, const octet *RX, octet *U, octet *T)</td></tr>
+<tr class="memdesc:a3f1907b745524b7f991a821e0bf831d1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate Proof for the MPC Phase 5.  <a href="mpc_8h.html#a3f1907b745524b7f991a821e0bf831d1">More...</a><br /></td></tr>
+<tr class="separator:a3f1907b745524b7f991a821e0bf831d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba1ebc625244ce42e60a17f5edd2f71f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#aba1ebc625244ce42e60a17f5edd2f71f">MPC_PHASE5_verify</a> (octet *U[2], octet *T[2])</td></tr>
+<tr class="memdesc:aba1ebc625244ce42e60a17f5edd2f71f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify Proof for the MPC Phase 5.  <a href="mpc_8h.html#aba1ebc625244ce42e60a17f5edd2f71f">More...</a><br /></td></tr>
+<tr class="separator:aba1ebc625244ce42e60a17f5edd2f71f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1096af9d7fa21d31bfcc538201ef976"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mpc_8h.html#af1096af9d7fa21d31bfcc538201ef976">MPC_DUMP_PAILLIER_SK</a> (PAILLIER_private_key *PRIV, octet *P, octet *Q)</td></tr>
+<tr class="memdesc:af1096af9d7fa21d31bfcc538201ef976"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write Paillier keys to octets.  <a href="mpc_8h.html#af1096af9d7fa21d31bfcc538201ef976">More...</a><br /></td></tr>
+<tr class="separator:af1096af9d7fa21d31bfcc538201ef976"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a0a76c82492c2feb97c072c17dbf4151d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0a76c82492c2feb97c072c17dbf4151d">&#9670;&nbsp;</a></span>MPC_FAIL</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MPC_FAIL&#160;&#160;&#160;71</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Failure </p>
+
+</div>
+</div>
+<a id="aab0897c8d775eb4331e21ad4003d08d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aab0897c8d775eb4331e21ad4003d08d2">&#9670;&nbsp;</a></span>MPC_INVALID_ECP</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MPC_INVALID_ECP&#160;&#160;&#160;72</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Input is not a valid point on the curve </p>
+
+</div>
+</div>
+<a id="a530efe0885cea4e5b99df50b80bae294"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a530efe0885cea4e5b99df50b80bae294">&#9670;&nbsp;</a></span>MPC_OK</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MPC_OK&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Execution Successful </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="af1096af9d7fa21d31bfcc538201ef976"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af1096af9d7fa21d31bfcc538201ef976">&#9670;&nbsp;</a></span>MPC_DUMP_PAILLIER_SK()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MPC_DUMP_PAILLIER_SK </td>
+          <td>(</td>
+          <td class="paramtype">PAILLIER_private_key *&#160;</td>
+          <td class="paramname"><em>PRIV</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>P</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Q</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">PRIV</td><td>Paillier secret key </td></tr>
+    <tr><td class="paramname">P</td><td>Secret prime number </td></tr>
+    <tr><td class="paramname">Q</td><td>Secret prime number </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ad26837e4fd74e8d6aabc6b3bfaf9a7be"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad26837e4fd74e8d6aabc6b3bfaf9a7be">&#9670;&nbsp;</a></span>MPC_ECDSA_KEY_PAIR_GENERATE()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MPC_ECDSA_KEY_PAIR_GENERATE </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>W</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generat an ECC public/private key pair W = s.G, where G is a fixed public generator</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>is a pointer to a cryptographically secure random number generator </td></tr>
+    <tr><td class="paramname">S</td><td>the private key, an output internally randomly generated if R!=NULL, otherwise must be provided as an input </td></tr>
+    <tr><td class="paramname">W</td><td>the output public key, which is s.G, where G is a fixed generator </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5a6fb00e1b95a507e89865051e1fb54a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5a6fb00e1b95a507e89865051e1fb54a">&#9670;&nbsp;</a></span>MPC_ECDSA_SIGN()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int MPC_ECDSA_SIGN </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>sha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>K</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>SK</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate the ECDSA signature on message, M, with outputs (R,S)</p>
+<ol>
+<li>
+Choose a random non-zero value \( k \in F_q \) where \(q\) is the curve order </li>
+<li>
+\( r_x, r_y = k^{-1}G \) where G is the group generator </li>
+<li>
+\( r = rx \text{ }\mathrm{mod}\text{ }q \) </li>
+<li>
+\( z = hash(message) \) </li>
+<li>
+\( s = k.(z + r.sk) \text{ }\mathrm{mod}\text{ }q \) where \( sk \) is the ECDSA secret key </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">sha</td><td>is the hash type </td></tr>
+    <tr><td class="paramname">K</td><td>Ephemeral key. </td></tr>
+    <tr><td class="paramname">SK</td><td>the input private signing key </td></tr>
+    <tr><td class="paramname">M</td><td>the input message to be signed </td></tr>
+    <tr><td class="paramname">R</td><td>component of the signature </td></tr>
+    <tr><td class="paramname">S</td><td>component of the signature </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a4502a62e9dfbd1ebe51a9b287196766f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4502a62e9dfbd1ebe51a9b287196766f">&#9670;&nbsp;</a></span>MPC_ECDSA_VERIFY()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int MPC_ECDSA_VERIFY </td>
+          <td>(</td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>HM</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>PK</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Verify the ECDSA signature (R,S) on a message</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">HM</td><td>Hash of the message </td></tr>
+    <tr><td class="paramname">PK</td><td>ECDSA public key </td></tr>
+    <tr><td class="paramname">R</td><td>R component of signature </td></tr>
+    <tr><td class="paramname">S</td><td>S component of signature </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns 0 or else error code </dd></dl>
+
+</div>
+</div>
+<a id="a0e70e4308d7a75c852bb2bfd6a57b5a9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0e70e4308d7a75c852bb2bfd6a57b5a9">&#9670;&nbsp;</a></span>MPC_HASH()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MPC_HASH </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>sha</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>HM</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Hash the message value</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">sha</td><td>Hash type </td></tr>
+    <tr><td class="paramname">M</td><td>Message to be hashed </td></tr>
+    <tr><td class="paramname">HM</td><td>Hash value </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns 0 or else error code </dd></dl>
+
+</div>
+</div>
+<a id="a7b14475ef026b509e974468fb473231c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b14475ef026b509e974468fb473231c">&#9670;&nbsp;</a></span>MPC_INVKGAMMA()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MPC_INVKGAMMA </td>
+          <td>(</td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>KGAMMA1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>KGAMMA2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>INVKGAMMA</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Calculate the inverse of the sum of kgamma values</p>
+<ol>
+<li>
+\( invkgamma = (kgamma1 + kgamma2)^{-1} \text{ }\mathrm{mod}\text{ }q \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">KGAMMA1</td><td>Actor 1 additive share </td></tr>
+    <tr><td class="paramname">KGAMMA2</td><td>Actor 2 additive share </td></tr>
+    <tr><td class="paramname">INVKGAMMA</td><td>Inverse of the sum of the additive shares </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a605a8cc66cd1e9a5513ef270934d10a2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a605a8cc66cd1e9a5513ef270934d10a2">&#9670;&nbsp;</a></span>MPC_K_GENERATE()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MPC_K_GENERATE </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>K</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a random K modulo the curve order</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>Pointer to a cryptographically secure PRNG </td></tr>
+    <tr><td class="paramname">K</td><td>Destination octet for the randomly generated value </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a007621069a3d86c06c3cdc113d0177ac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a007621069a3d86c06c3cdc113d0177ac">&#9670;&nbsp;</a></span>MPC_PHASE5_commit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int MPC_PHASE5_commit </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>S</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>PHI</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>RHO</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>V</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>A</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Calculate player Commitment (A, V) for MPC Phase 5</p>
+<ol>
+<li>
+\( \phi \in_R [0, \ldots, q] \) </li>
+<li>
+\( \rho \in_R [0, \ldots, q] \) </li>
+<li>
+\( V = \phi.G + s.R \) </li>
+<li>
+\( A = \rho.G \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>csprng for random values generation </td></tr>
+    <tr><td class="paramname">R</td><td>Reconciled R for the signature </td></tr>
+    <tr><td class="paramname">S</td><td>Player signature share </td></tr>
+    <tr><td class="paramname">PHI</td><td>Random value for the commitment. If RNG is null this is read </td></tr>
+    <tr><td class="paramname">RHO</td><td>Random value for the commitment. If RNG is null this is read </td></tr>
+    <tr><td class="paramname">V</td><td>First component of the player commitment. An ECP in compressed form </td></tr>
+    <tr><td class="paramname">A</td><td>Second component of the player commitment. An ECP in compressed form </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns MPC_OK or an error code </dd></dl>
+
+</div>
+</div>
+<a id="a3f1907b745524b7f991a821e0bf831d1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f1907b745524b7f991a821e0bf831d1">&#9670;&nbsp;</a></span>MPC_PHASE5_prove()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int MPC_PHASE5_prove </td>
+          <td>(</td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>PHI</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>RHO</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>V</em>[2], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>A</em>[2], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>PK</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>HM</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>RX</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Calculate player Proof (U, T) for MPC Phase 5</p>
+<ol>
+<li>
+\( m = H(M) \) </li>
+<li>
+\( A = A1 + A2 \) </li>
+<li>
+\( V = V1 + V2 \) </li>
+<li>
+\( U = \rho.(V - m.G - r.PK) \) </li>
+<li>
+\( T = \phi.A \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">PHI</td><td>Random value used in the commitment </td></tr>
+    <tr><td class="paramname">RHO</td><td>Random value used in the commitment </td></tr>
+    <tr><td class="paramname">V</td><td>Array with the commitments V from both players. ECPs in compressed form </td></tr>
+    <tr><td class="paramname">A</td><td>Array with the commitments A from both players. ECPs in compressed form </td></tr>
+    <tr><td class="paramname">PK</td><td>Shared public key for MPC </td></tr>
+    <tr><td class="paramname">HM</td><td>Hash of the message being signed </td></tr>
+    <tr><td class="paramname">RX</td><td>x component of the reconciled R for the signature </td></tr>
+    <tr><td class="paramname">U</td><td>First component of the player proof. An ECP in compressed form </td></tr>
+    <tr><td class="paramname">T</td><td>Second component of the player proof. An ECP in compressed form </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns MPC_OK or an error code </dd></dl>
+
+</div>
+</div>
+<a id="aba1ebc625244ce42e60a17f5edd2f71f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba1ebc625244ce42e60a17f5edd2f71f">&#9670;&nbsp;</a></span>MPC_PHASE5_verify()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int MPC_PHASE5_verify </td>
+          <td>(</td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>U</em>[2], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T</em>[2]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Combine player Proofs and verify the consistency of the signature shares This does NOT prove that the signature is valid. It only verifies that all players know the secret quantities used to generate their shares.</p>
+<ol>
+<li>
+\( U = U1 + U2 \) </li>
+<li>
+\( T = T1 + T2 \) </li>
+<li>
+\( U \stackrel{?}{=} T \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">U</td><td>Array with the proofs U from both players. ECPs in compressed form </td></tr>
+    <tr><td class="paramname">T</td><td>Array with the proofs T from both players. ECPs in compressed form </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns MPC_OK or an error code </dd></dl>
+
+</div>
+</div>
+<a id="a4b2ad033889c2765aba63f84c6465471"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4b2ad033889c2765aba63f84c6465471">&#9670;&nbsp;</a></span>MPC_R()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int MPC_R </td>
+          <td>(</td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>INVKGAMMA</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>GAMMAPT1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>GAMMAPT2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>RP</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate the ECDSA signature R component. It also outputs the ECP associate to the R component if specified</p>
+<ol>
+<li>
+\( r_x, r_y = k^{-1}G \) where G is the group generator </li>
+<li>
+\( r = rx \text{ }\mathrm{mod}\text{ }q \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">INVKGAMMA</td><td>Inverse of k times gamma </td></tr>
+    <tr><td class="paramname">GAMMAPT1</td><td>Actor 1 gamma point </td></tr>
+    <tr><td class="paramname">GAMMAPT2</td><td>Actor 2 gamma point </td></tr>
+    <tr><td class="paramname">R</td><td>R component of the signature </td></tr>
+    <tr><td class="paramname">RP</td><td>ECP associated to the R component of the signature. Optional </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns 0 or else error code </dd></dl>
+
+</div>
+</div>
+<a id="acfb7f28581a6a2100047aaba6d03f6dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acfb7f28581a6a2100047aaba6d03f6dc">&#9670;&nbsp;</a></span>MPC_S()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int MPC_S </td>
+          <td>(</td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>HM</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>K</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>SIGMA</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate the ECDSA signature S component</p>
+<ol>
+<li>
+\( s = k * (h(m) + sk * r) \text{ }\mathrm{mod}\text{ }q \) where h() means hash </li>
+<li>
+\( s = (k * h(m)) + (k * sk * r) \text{ }\mathrm{mod}\text{ }q \) </li>
+<li>
+\( s = (k * h(m)) + sigma * r) \text{ }\mathrm{mod}\text{ }q \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">HM</td><td>Hash of the message to be signed </td></tr>
+    <tr><td class="paramname">R</td><td>R component input </td></tr>
+    <tr><td class="paramname">K</td><td>Nonce value </td></tr>
+    <tr><td class="paramname">SIGMA</td><td>Additive share of k.w </td></tr>
+    <tr><td class="paramname">S</td><td>S component output </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns 0 or else error code </dd></dl>
+
+</div>
+</div>
+<a id="a25cdf08efa8377c4521728600b3001b4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a25cdf08efa8377c4521728600b3001b4">&#9670;&nbsp;</a></span>MPC_SUM_PK()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int MPC_SUM_PK </td>
+          <td>(</td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>PK1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>PK2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>PK</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Calculate the sum of the ECDSA public key shares</p>
+<ol>
+<li>
+\( pk = pk1 + pk2 \text{ }\mathrm{mod}\text{ }q \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">PK1</td><td>Actor 1 ECDSA public key share </td></tr>
+    <tr><td class="paramname">PK2</td><td>Actor 2 ECDSA public key share </td></tr>
+    <tr><td class="paramname">PK</td><td>ECDSA public key </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns 0 or else error code </dd></dl>
+
+</div>
+</div>
+<a id="a1cca737dad0e9351f8c4d993b90e71f4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1cca737dad0e9351f8c4d993b90e71f4">&#9670;&nbsp;</a></span>MPC_SUM_S()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MPC_SUM_S </td>
+          <td>(</td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>S1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>S2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Calculate the sum of the s components of the ECDSA signature</p>
+<ol>
+<li>
+\( s = s1 + s2 \text{ }\mathrm{mod}\text{ }q \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">S1</td><td>Actor 1 ECDSA s component </td></tr>
+    <tr><td class="paramname">S2</td><td>Actor 2 ECDSA s component </td></tr>
+    <tr><td class="paramname">S</td><td>S component sum </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/mpc_8h_source.html b/website/static/mpcdocs/mpc_8h_source.html
new file mode 100644
index 0000000..87c4948
--- /dev/null
+++ b/website/static/mpcdocs/mpc_8h_source.html
@@ -0,0 +1,169 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: mpc.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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_a166689341c37329f24f96bdba87a08b.html">amcl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">mpc.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="mpc_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="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">&quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">  http://www.apache.org/licenses/LICENSE-2.0</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;<span class="comment">Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">&quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#ifndef MPC_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#define MPC_H</span></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;<span class="preprocessor">#include &lt;amcl/amcl.h&gt;</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;amcl/paillier.h&gt;</span></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;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#endif</span></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"><a class="line" href="mpc_8h.html#a530efe0885cea4e5b99df50b80bae294">   36</a></span>&#160;<span class="preprocessor">#define MPC_OK          0    </span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="mpc_8h.html#a0a76c82492c2feb97c072c17dbf4151d">   37</a></span>&#160;<span class="preprocessor">#define MPC_FAIL        71   </span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="mpc_8h.html#aab0897c8d775eb4331e21ad4003d08d2">   38</a></span>&#160;<span class="preprocessor">#define MPC_INVALID_ECP 72   </span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="mpc_8h.html#ad26837e4fd74e8d6aabc6b3bfaf9a7be">   49</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="mpc_8h.html#ad26837e4fd74e8d6aabc6b3bfaf9a7be">MPC_ECDSA_KEY_PAIR_GENERATE</a>(csprng *RNG, octet* S, octet *W);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160; </div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="mpc_8h.html#a5a6fb00e1b95a507e89865051e1fb54a">   70</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="mpc_8h.html#a5a6fb00e1b95a507e89865051e1fb54a">MPC_ECDSA_SIGN</a>(<span class="keywordtype">int</span> sha, <span class="keyword">const</span> octet *K, <span class="keyword">const</span> octet *SK, octet *M, octet *R, octet *S);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="mpc_8h.html#a4502a62e9dfbd1ebe51a9b287196766f">   82</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="mpc_8h.html#a4502a62e9dfbd1ebe51a9b287196766f">MPC_ECDSA_VERIFY</a>(<span class="keyword">const</span> octet *HM,octet *PK, octet *R,octet *S);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160; </div>
+<div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="mpc_8h.html#a605a8cc66cd1e9a5513ef270934d10a2">   91</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="mpc_8h.html#a605a8cc66cd1e9a5513ef270934d10a2">MPC_K_GENERATE</a>(csprng *RNG, octet *K);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160; </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="keywordtype">void</span> <a class="code" href="mpc_8h.html#a605a8cc66cd1e9a5513ef270934d10a2">MPC_K_GENERATE</a>(csprng *RNG, octet *K);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160; </div>
+<div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="mpc_8h.html#a7b14475ef026b509e974468fb473231c">  114</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="mpc_8h.html#a7b14475ef026b509e974468fb473231c">MPC_INVKGAMMA</a>(<span class="keyword">const</span> octet *KGAMMA1, <span class="keyword">const</span> octet *KGAMMA2, octet *INVKGAMMA);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160; </div>
+<div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="mpc_8h.html#a4b2ad033889c2765aba63f84c6465471">  133</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="mpc_8h.html#a4b2ad033889c2765aba63f84c6465471">MPC_R</a>(<span class="keyword">const</span> octet *INVKGAMMA, octet *GAMMAPT1, octet *GAMMAPT2, octet *R, octet *RP);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160; </div>
+<div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="mpc_8h.html#a0e70e4308d7a75c852bb2bfd6a57b5a9">  144</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="mpc_8h.html#a0e70e4308d7a75c852bb2bfd6a57b5a9">MPC_HASH</a>(<span class="keywordtype">int</span> sha, octet *M, octet *HM);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160; </div>
+<div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="mpc_8h.html#acfb7f28581a6a2100047aaba6d03f6dc">  163</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="mpc_8h.html#acfb7f28581a6a2100047aaba6d03f6dc">MPC_S</a>(<span class="keyword">const</span> octet *HM, <span class="keyword">const</span> octet *R, <span class="keyword">const</span> octet *K, <span class="keyword">const</span> octet *SIGMA, octet *S);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160; </div>
+<div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="mpc_8h.html#a1cca737dad0e9351f8c4d993b90e71f4">  177</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="mpc_8h.html#a1cca737dad0e9351f8c4d993b90e71f4">MPC_SUM_S</a>(<span class="keyword">const</span> octet *S1, <span class="keyword">const</span> octet *S2, octet *S);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160; </div>
+<div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="mpc_8h.html#a25cdf08efa8377c4521728600b3001b4">  192</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="mpc_8h.html#a25cdf08efa8377c4521728600b3001b4">MPC_SUM_PK</a>(octet *PK1, octet *PK2, octet *PK);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160; </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;<span class="comment">/* MPC Phase 5 API */</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160; </div>
+<div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="mpc_8h.html#a007621069a3d86c06c3cdc113d0177ac">  216</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="mpc_8h.html#a007621069a3d86c06c3cdc113d0177ac">MPC_PHASE5_commit</a>(csprng *RNG, octet *R, <span class="keyword">const</span> octet *S, octet *PHI, octet *RHO, octet *V, octet *A);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160; </div>
+<div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="mpc_8h.html#a3f1907b745524b7f991a821e0bf831d1">  241</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="mpc_8h.html#a3f1907b745524b7f991a821e0bf831d1">MPC_PHASE5_prove</a>(<span class="keyword">const</span> octet *PHI, <span class="keyword">const</span> octet *RHO, octet *V[2], octet *A[2], octet *PK, <span class="keyword">const</span> octet *HM, <span class="keyword">const</span> octet *RX, octet *U, octet *T);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160; </div>
+<div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="mpc_8h.html#aba1ebc625244ce42e60a17f5edd2f71f">  259</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="mpc_8h.html#aba1ebc625244ce42e60a17f5edd2f71f">MPC_PHASE5_verify</a>(octet *U[2], octet *T[2]);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160; </div>
+<div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="mpc_8h.html#af1096af9d7fa21d31bfcc538201ef976">  267</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="mpc_8h.html#af1096af9d7fa21d31bfcc538201ef976">MPC_DUMP_PAILLIER_SK</a>(PAILLIER_private_key *PRIV, octet *P, octet *Q);</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">  270</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;}</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160; </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="ampc_8h_html_a007621069a3d86c06c3cdc113d0177ac"><div class="ttname"><a href="mpc_8h.html#a007621069a3d86c06c3cdc113d0177ac">MPC_PHASE5_commit</a></div><div class="ttdeci">int MPC_PHASE5_commit(csprng *RNG, octet *R, const octet *S, octet *PHI, octet *RHO, octet *V, octet *A)</div><div class="ttdoc">Generate Commitment for the MPC Phase 5.</div></div>
+<div class="ttc" id="ampc_8h_html_a0e70e4308d7a75c852bb2bfd6a57b5a9"><div class="ttname"><a href="mpc_8h.html#a0e70e4308d7a75c852bb2bfd6a57b5a9">MPC_HASH</a></div><div class="ttdeci">void MPC_HASH(int sha, octet *M, octet *HM)</div><div class="ttdoc">Hash the message value.</div></div>
+<div class="ttc" id="ampc_8h_html_a1cca737dad0e9351f8c4d993b90e71f4"><div class="ttname"><a href="mpc_8h.html#a1cca737dad0e9351f8c4d993b90e71f4">MPC_SUM_S</a></div><div class="ttdeci">void MPC_SUM_S(const octet *S1, const octet *S2, octet *S)</div><div class="ttdoc">Sum of ECDSA s components.</div></div>
+<div class="ttc" id="ampc_8h_html_a25cdf08efa8377c4521728600b3001b4"><div class="ttname"><a href="mpc_8h.html#a25cdf08efa8377c4521728600b3001b4">MPC_SUM_PK</a></div><div class="ttdeci">int MPC_SUM_PK(octet *PK1, octet *PK2, octet *PK)</div><div class="ttdoc">Sum of ECDSA public key shares.</div></div>
+<div class="ttc" id="ampc_8h_html_a3f1907b745524b7f991a821e0bf831d1"><div class="ttname"><a href="mpc_8h.html#a3f1907b745524b7f991a821e0bf831d1">MPC_PHASE5_prove</a></div><div class="ttdeci">int MPC_PHASE5_prove(const octet *PHI, const octet *RHO, octet *V[2], octet *A[2], octet *PK, const octet *HM, const octet *RX, octet *U, octet *T)</div><div class="ttdoc">Generate Proof for the MPC Phase 5.</div></div>
+<div class="ttc" id="ampc_8h_html_a4502a62e9dfbd1ebe51a9b287196766f"><div class="ttname"><a href="mpc_8h.html#a4502a62e9dfbd1ebe51a9b287196766f">MPC_ECDSA_VERIFY</a></div><div class="ttdeci">int MPC_ECDSA_VERIFY(const octet *HM, octet *PK, octet *R, octet *S)</div><div class="ttdoc">ECDSA Verify signature.</div></div>
+<div class="ttc" id="ampc_8h_html_a4b2ad033889c2765aba63f84c6465471"><div class="ttname"><a href="mpc_8h.html#a4b2ad033889c2765aba63f84c6465471">MPC_R</a></div><div class="ttdeci">int MPC_R(const octet *INVKGAMMA, octet *GAMMAPT1, octet *GAMMAPT2, octet *R, octet *RP)</div><div class="ttdoc">R component.</div></div>
+<div class="ttc" id="ampc_8h_html_a5a6fb00e1b95a507e89865051e1fb54a"><div class="ttname"><a href="mpc_8h.html#a5a6fb00e1b95a507e89865051e1fb54a">MPC_ECDSA_SIGN</a></div><div class="ttdeci">int MPC_ECDSA_SIGN(int sha, const octet *K, const octet *SK, octet *M, octet *R, octet *S)</div><div class="ttdoc">ECDSA Sign message.</div></div>
+<div class="ttc" id="ampc_8h_html_a605a8cc66cd1e9a5513ef270934d10a2"><div class="ttname"><a href="mpc_8h.html#a605a8cc66cd1e9a5513ef270934d10a2">MPC_K_GENERATE</a></div><div class="ttdeci">void MPC_K_GENERATE(csprng *RNG, octet *K)</div><div class="ttdoc">Generate a random K for and ECDSA signature.</div></div>
+<div class="ttc" id="ampc_8h_html_a7b14475ef026b509e974468fb473231c"><div class="ttname"><a href="mpc_8h.html#a7b14475ef026b509e974468fb473231c">MPC_INVKGAMMA</a></div><div class="ttdeci">void MPC_INVKGAMMA(const octet *KGAMMA1, const octet *KGAMMA2, octet *INVKGAMMA)</div><div class="ttdoc">Calculate the inverse of the sum of kgamma values.</div></div>
+<div class="ttc" id="ampc_8h_html_aba1ebc625244ce42e60a17f5edd2f71f"><div class="ttname"><a href="mpc_8h.html#aba1ebc625244ce42e60a17f5edd2f71f">MPC_PHASE5_verify</a></div><div class="ttdeci">int MPC_PHASE5_verify(octet *U[2], octet *T[2])</div><div class="ttdoc">Verify Proof for the MPC Phase 5.</div></div>
+<div class="ttc" id="ampc_8h_html_acfb7f28581a6a2100047aaba6d03f6dc"><div class="ttname"><a href="mpc_8h.html#acfb7f28581a6a2100047aaba6d03f6dc">MPC_S</a></div><div class="ttdeci">int MPC_S(const octet *HM, const octet *R, const octet *K, const octet *SIGMA, octet *S)</div><div class="ttdoc">S component.</div></div>
+<div class="ttc" id="ampc_8h_html_ad26837e4fd74e8d6aabc6b3bfaf9a7be"><div class="ttname"><a href="mpc_8h.html#ad26837e4fd74e8d6aabc6b3bfaf9a7be">MPC_ECDSA_KEY_PAIR_GENERATE</a></div><div class="ttdeci">void MPC_ECDSA_KEY_PAIR_GENERATE(csprng *RNG, octet *S, octet *W)</div><div class="ttdoc">Generate an ECC public/private key pair.</div></div>
+<div class="ttc" id="ampc_8h_html_af1096af9d7fa21d31bfcc538201ef976"><div class="ttname"><a href="mpc_8h.html#af1096af9d7fa21d31bfcc538201ef976">MPC_DUMP_PAILLIER_SK</a></div><div class="ttdeci">void MPC_DUMP_PAILLIER_SK(PAILLIER_private_key *PRIV, octet *P, octet *Q)</div><div class="ttdoc">Write Paillier keys to octets.</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/mta_8h.html b/website/static/mpcdocs/mta_8h.html
new file mode 100644
index 0000000..f7b34e1
--- /dev/null
+++ b/website/static/mpcdocs/mta_8h.html
@@ -0,0 +1,2349 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: mta.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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_a166689341c37329f24f96bdba87a08b.html">amcl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">mta.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>MTA declarations.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;amcl/amcl.h&quot;</code><br />
+<code>#include &quot;amcl/paillier.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="commitments_8h_source.html">amcl/commitments.h</a>&quot;</code><br />
+<code>#include &quot;amcl/ecp_SECP256K1.h&quot;</code><br />
+<code>#include &quot;amcl/ecdh_SECP256K1.h&quot;</code><br />
+</div>
+<p><a href="mta_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>
+Data Structures</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="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Secret random values for the Range Proof commitment.  <a href="structMTA__RP__commitment__rv.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__RP__commitment.html">MTA_RP_commitment</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Public commitment for the Range Proof.  <a href="structMTA__RP__commitment.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__RP__proof.html">MTA_RP_proof</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Range Proof.  <a href="structMTA__RP__proof.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Secret random values for the receiver ZKP commitment.  <a href="structMTA__ZK__commitment__rv.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Public commitment for the Receiver ZKP.  <a href="structMTA__ZK__commitment.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__proof.html">MTA_ZK_proof</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Range Proof for the Receiver ZKP.  <a href="structMTA__ZK__proof.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Public commitment for the Receiver ZKP with check.  <a href="structMTA__ZKWC__commitment.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="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a38835fd15b3c165ca0acce5ba7f45dd6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a38835fd15b3c165ca0acce5ba7f45dd6">MTA_OK</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a38835fd15b3c165ca0acce5ba7f45dd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cffabde5e58757768c87f8b96bed9be"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a9cffabde5e58757768c87f8b96bed9be">MTA_FAIL</a>&#160;&#160;&#160;61</td></tr>
+<tr class="separator:a9cffabde5e58757768c87f8b96bed9be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac83dee7822a61403334298331d63171c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#ac83dee7822a61403334298331d63171c">MTA_INVALID_ECP</a>&#160;&#160;&#160;62</td></tr>
+<tr class="separator:ac83dee7822a61403334298331d63171c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a520066c511d8661c3ebfe4c2a612a046"><td class="memItemLeft" align="right" valign="top"><a id="a520066c511d8661c3ebfe4c2a612a046"></a>
+typedef <a class="el" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a520066c511d8661c3ebfe4c2a612a046">MTA_ZKWC_commitment_rv</a></td></tr>
+<tr class="memdesc:a520066c511d8661c3ebfe4c2a612a046"><td class="mdescLeft">&#160;</td><td class="mdescRight">Secret random values for the receiver ZKP with check commitment. <br /></td></tr>
+<tr class="separator:a520066c511d8661c3ebfe4c2a612a046"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a96110337c3648cc19cc1bf60f085da14"><td class="memItemLeft" align="right" valign="top"><a id="a96110337c3648cc19cc1bf60f085da14"></a>
+typedef <a class="el" href="structMTA__ZK__proof.html">MTA_ZK_proof</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">MTA_ZKWC_proof</a></td></tr>
+<tr class="memdesc:a96110337c3648cc19cc1bf60f085da14"><td class="mdescLeft">&#160;</td><td class="mdescRight">Range Proof for the Receiver ZKP with check. <br /></td></tr>
+<tr class="separator:a96110337c3648cc19cc1bf60f085da14"><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:a7bbc83a1d90c466061839c88375576a3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a7bbc83a1d90c466061839c88375576a3">MPC_MTA_CLIENT1</a> (csprng *RNG, PAILLIER_public_key *PUB, octet *A, octet *CA, octet *R)</td></tr>
+<tr class="memdesc:a7bbc83a1d90c466061839c88375576a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Client MTA first pass.  <a href="mta_8h.html#a7bbc83a1d90c466061839c88375576a3">More...</a><br /></td></tr>
+<tr class="separator:a7bbc83a1d90c466061839c88375576a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a673e46de79006b3d5e349a0eec6bd5c5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a673e46de79006b3d5e349a0eec6bd5c5">MPC_MTA_CLIENT2</a> (PAILLIER_private_key *PRIV, octet *CB, octet *ALPHA)</td></tr>
+<tr class="memdesc:a673e46de79006b3d5e349a0eec6bd5c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Client MtA second pass.  <a href="mta_8h.html#a673e46de79006b3d5e349a0eec6bd5c5">More...</a><br /></td></tr>
+<tr class="separator:a673e46de79006b3d5e349a0eec6bd5c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6150f97b1d2df1d70ec419211d37592"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#af6150f97b1d2df1d70ec419211d37592">MPC_MTA_SERVER</a> (csprng *RNG, PAILLIER_public_key *PUB, octet *B, octet *CA, octet *Z, octet *R, octet *CB, octet *BETA)</td></tr>
+<tr class="memdesc:af6150f97b1d2df1d70ec419211d37592"><td class="mdescLeft">&#160;</td><td class="mdescRight">Server MtA.  <a href="mta_8h.html#af6150f97b1d2df1d70ec419211d37592">More...</a><br /></td></tr>
+<tr class="separator:af6150f97b1d2df1d70ec419211d37592"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a585141482d0be764359316dc4aa9a345"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a585141482d0be764359316dc4aa9a345">MPC_SUM_MTA</a> (const octet *A, const octet *B, const octet *ALPHA, const octet *BETA, octet *SUM)</td></tr>
+<tr class="memdesc:a585141482d0be764359316dc4aa9a345"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sum of secret shares.  <a href="mta_8h.html#a585141482d0be764359316dc4aa9a345">More...</a><br /></td></tr>
+<tr class="separator:a585141482d0be764359316dc4aa9a345"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4971990b60c103d7cb596c9a0d1d205"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#ae4971990b60c103d7cb596c9a0d1d205">MTA_ZK_random_challenge</a> (csprng *RNG, octet *E)</td></tr>
+<tr class="memdesc:ae4971990b60c103d7cb596c9a0d1d205"><td class="mdescLeft">&#160;</td><td class="mdescRight">Random challenge for any of the ZK Proofs.  <a href="mta_8h.html#ae4971990b60c103d7cb596c9a0d1d205">More...</a><br /></td></tr>
+<tr class="separator:ae4971990b60c103d7cb596c9a0d1d205"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ae812a8b7fa69ae98d8eec9db51cc83"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a9ae812a8b7fa69ae98d8eec9db51cc83">MTA_RP_commit</a> (csprng *RNG, PAILLIER_private_key *key, <a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *mod, octet *M, <a class="el" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *c, <a class="el" href="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a> *rv)</td></tr>
+<tr class="memdesc:a9ae812a8b7fa69ae98d8eec9db51cc83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Commitment Generation.  <a href="mta_8h.html#a9ae812a8b7fa69ae98d8eec9db51cc83">More...</a><br /></td></tr>
+<tr class="separator:a9ae812a8b7fa69ae98d8eec9db51cc83"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae8035b9c2d5b29f3ad9df3c44466e1d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#aae8035b9c2d5b29f3ad9df3c44466e1d">MTA_RP_challenge</a> (PAILLIER_public_key *key, <a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *mod, const octet *CT, <a class="el" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *c, octet *E)</td></tr>
+<tr class="memdesc:aae8035b9c2d5b29f3ad9df3c44466e1d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deterministic Challenge generations.  <a href="mta_8h.html#aae8035b9c2d5b29f3ad9df3c44466e1d">More...</a><br /></td></tr>
+<tr class="separator:aae8035b9c2d5b29f3ad9df3c44466e1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a840590c8db0b435bece74978adf0748d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a840590c8db0b435bece74978adf0748d">MTA_RP_prove</a> (PAILLIER_private_key *key, <a class="el" href="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a> *rv, octet *M, octet *R, octet *E, <a class="el" href="structMTA__RP__proof.html">MTA_RP_proof</a> *p)</td></tr>
+<tr class="memdesc:a840590c8db0b435bece74978adf0748d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Proof generation.  <a href="mta_8h.html#a840590c8db0b435bece74978adf0748d">More...</a><br /></td></tr>
+<tr class="separator:a840590c8db0b435bece74978adf0748d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa4c5afa267be00e1819becd53805795"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#aaa4c5afa267be00e1819becd53805795">MTA_RP_verify</a> (PAILLIER_public_key *key, <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *mod, octet *CT, octet *E, <a class="el" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *c, <a class="el" href="structMTA__RP__proof.html">MTA_RP_proof</a> *p)</td></tr>
+<tr class="memdesc:aaa4c5afa267be00e1819becd53805795"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify a Proof.  <a href="mta_8h.html#aaa4c5afa267be00e1819becd53805795">More...</a><br /></td></tr>
+<tr class="separator:aaa4c5afa267be00e1819becd53805795"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa60c3b4a80719d29f0ebb747f3fc31a1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#aa60c3b4a80719d29f0ebb747f3fc31a1">MTA_RP_commitment_toOctets</a> (octet *Z, octet *U, octet *W, <a class="el" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *c)</td></tr>
+<tr class="memdesc:aa60c3b4a80719d29f0ebb747f3fc31a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump the commitment to octets.  <a href="mta_8h.html#aa60c3b4a80719d29f0ebb747f3fc31a1">More...</a><br /></td></tr>
+<tr class="separator:aa60c3b4a80719d29f0ebb747f3fc31a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f42fb5d017f34db268c112f7c8d056e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a5f42fb5d017f34db268c112f7c8d056e">MTA_RP_commitment_fromOctets</a> (<a class="el" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *c, octet *Z, octet *U, octet *W)</td></tr>
+<tr class="memdesc:a5f42fb5d017f34db268c112f7c8d056e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read the commitments from octets.  <a href="mta_8h.html#a5f42fb5d017f34db268c112f7c8d056e">More...</a><br /></td></tr>
+<tr class="separator:a5f42fb5d017f34db268c112f7c8d056e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c516e4898f3fbcdd55ed70ea0e336ef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a4c516e4898f3fbcdd55ed70ea0e336ef">MTA_RP_proof_toOctets</a> (octet *S, octet *S1, octet *S2, <a class="el" href="structMTA__RP__proof.html">MTA_RP_proof</a> *p)</td></tr>
+<tr class="memdesc:a4c516e4898f3fbcdd55ed70ea0e336ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump the proof to octets.  <a href="mta_8h.html#a4c516e4898f3fbcdd55ed70ea0e336ef">More...</a><br /></td></tr>
+<tr class="separator:a4c516e4898f3fbcdd55ed70ea0e336ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad60da72de670c62131bc57f9e1070c84"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#ad60da72de670c62131bc57f9e1070c84">MTA_RP_proof_fromOctets</a> (<a class="el" href="structMTA__RP__proof.html">MTA_RP_proof</a> *p, octet *S, octet *S1, octet *S2)</td></tr>
+<tr class="memdesc:ad60da72de670c62131bc57f9e1070c84"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read the proof from octets.  <a href="mta_8h.html#ad60da72de670c62131bc57f9e1070c84">More...</a><br /></td></tr>
+<tr class="separator:ad60da72de670c62131bc57f9e1070c84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a83d69dbe4b86adcf814bf17593066b5d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a83d69dbe4b86adcf814bf17593066b5d">MTA_RP_commitment_rv_kill</a> (<a class="el" href="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a> *rv)</td></tr>
+<tr class="memdesc:a83d69dbe4b86adcf814bf17593066b5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clean the memory containing the random values.  <a href="mta_8h.html#a83d69dbe4b86adcf814bf17593066b5d">More...</a><br /></td></tr>
+<tr class="separator:a83d69dbe4b86adcf814bf17593066b5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a882f4c5922a453293eaaa7e3ec876bdf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a882f4c5922a453293eaaa7e3ec876bdf">MTA_ZK_commit</a> (csprng *RNG, PAILLIER_public_key *key, <a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *mod, octet *X, octet *Y, octet *C1, <a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *c, <a class="el" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a> *rv)</td></tr>
+<tr class="memdesc:a882f4c5922a453293eaaa7e3ec876bdf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Commitment Generation for Receiver ZKP.  <a href="mta_8h.html#a882f4c5922a453293eaaa7e3ec876bdf">More...</a><br /></td></tr>
+<tr class="separator:a882f4c5922a453293eaaa7e3ec876bdf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a437965ad4a0dd602a0c1a4339afb0cb6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a437965ad4a0dd602a0c1a4339afb0cb6">MTA_ZK_challenge</a> (PAILLIER_public_key *key, <a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *mod, const octet *C1, const octet *C2, <a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *c, octet *E)</td></tr>
+<tr class="memdesc:a437965ad4a0dd602a0c1a4339afb0cb6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deterministic Challenge generations for Receiver ZKP.  <a href="mta_8h.html#a437965ad4a0dd602a0c1a4339afb0cb6">More...</a><br /></td></tr>
+<tr class="separator:a437965ad4a0dd602a0c1a4339afb0cb6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a275057a0134ee0cbef05e1c719f3f94b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a275057a0134ee0cbef05e1c719f3f94b">MTA_ZK_prove</a> (PAILLIER_public_key *key, <a class="el" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a> *rv, octet *X, octet *Y, octet *R, octet *E, <a class="el" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> *p)</td></tr>
+<tr class="memdesc:a275057a0134ee0cbef05e1c719f3f94b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Proof generation for Receiver ZKP.  <a href="mta_8h.html#a275057a0134ee0cbef05e1c719f3f94b">More...</a><br /></td></tr>
+<tr class="separator:a275057a0134ee0cbef05e1c719f3f94b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a34fa2c06ff8a165243621fe6d32a4b64"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a34fa2c06ff8a165243621fe6d32a4b64">MTA_ZK_verify</a> (PAILLIER_private_key *key, <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *mod, octet *C1, octet *C2, octet *E, <a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *c, <a class="el" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> *p)</td></tr>
+<tr class="memdesc:a34fa2c06ff8a165243621fe6d32a4b64"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify a Proof for Receiver ZKP.  <a href="mta_8h.html#a34fa2c06ff8a165243621fe6d32a4b64">More...</a><br /></td></tr>
+<tr class="separator:a34fa2c06ff8a165243621fe6d32a4b64"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa9bc2f3876442f8519c67c011d4b0c5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#afa9bc2f3876442f8519c67c011d4b0c5">MTA_ZK_commitment_toOctets</a> (octet *Z, octet *Z1, octet *T, octet *V, octet *W, <a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *c)</td></tr>
+<tr class="memdesc:afa9bc2f3876442f8519c67c011d4b0c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump the commitment to octets.  <a href="mta_8h.html#afa9bc2f3876442f8519c67c011d4b0c5">More...</a><br /></td></tr>
+<tr class="separator:afa9bc2f3876442f8519c67c011d4b0c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad9cb35ed95b1ad3367fd78437e98aad5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#ad9cb35ed95b1ad3367fd78437e98aad5">MTA_ZK_commitment_fromOctets</a> (<a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *c, octet *Z, octet *Z1, octet *T, octet *V, octet *W)</td></tr>
+<tr class="memdesc:ad9cb35ed95b1ad3367fd78437e98aad5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read the commitments from octets.  <a href="mta_8h.html#ad9cb35ed95b1ad3367fd78437e98aad5">More...</a><br /></td></tr>
+<tr class="separator:ad9cb35ed95b1ad3367fd78437e98aad5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4cc541c94044beaf3a46cd5415da370"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#ae4cc541c94044beaf3a46cd5415da370">MTA_ZK_proof_toOctets</a> (octet *S, octet *S1, octet *S2, octet *T1, octet *T2, <a class="el" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> *p)</td></tr>
+<tr class="memdesc:ae4cc541c94044beaf3a46cd5415da370"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump the proof to octets.  <a href="mta_8h.html#ae4cc541c94044beaf3a46cd5415da370">More...</a><br /></td></tr>
+<tr class="separator:ae4cc541c94044beaf3a46cd5415da370"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4d280db3b810c0d69603a8ee97222565"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a4d280db3b810c0d69603a8ee97222565">MTA_ZK_proof_fromOctets</a> (<a class="el" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> *p, octet *S, octet *S1, octet *S2, octet *T1, octet *T2)</td></tr>
+<tr class="memdesc:a4d280db3b810c0d69603a8ee97222565"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read the proof from octets.  <a href="mta_8h.html#a4d280db3b810c0d69603a8ee97222565">More...</a><br /></td></tr>
+<tr class="separator:a4d280db3b810c0d69603a8ee97222565"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a50085c31f3df46ac6814c46064ed2826"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a50085c31f3df46ac6814c46064ed2826">MTA_ZK_commitment_rv_kill</a> (<a class="el" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a> *rv)</td></tr>
+<tr class="memdesc:a50085c31f3df46ac6814c46064ed2826"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clean the memory containing the random values.  <a href="mta_8h.html#a50085c31f3df46ac6814c46064ed2826">More...</a><br /></td></tr>
+<tr class="separator:a50085c31f3df46ac6814c46064ed2826"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61bd2519a246c273ce42da382732c489"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a61bd2519a246c273ce42da382732c489">MTA_ZKWC_commit</a> (csprng *RNG, PAILLIER_public_key *key, <a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *mod, octet *X, octet *Y, octet *C1, <a class="el" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *c, <a class="el" href="mta_8h.html#a520066c511d8661c3ebfe4c2a612a046">MTA_ZKWC_commitment_rv</a> *rv)</td></tr>
+<tr class="memdesc:a61bd2519a246c273ce42da382732c489"><td class="mdescLeft">&#160;</td><td class="mdescRight">Commitment Generation for Receiver ZKP with check.  <a href="mta_8h.html#a61bd2519a246c273ce42da382732c489">More...</a><br /></td></tr>
+<tr class="separator:a61bd2519a246c273ce42da382732c489"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4dd5d4b2d4fc3e530632fb61b56c3f25"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a4dd5d4b2d4fc3e530632fb61b56c3f25">MTA_ZKWC_challenge</a> (PAILLIER_public_key *key, <a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *mod, const octet *C1, const octet *C2, const octet *X, <a class="el" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *c, octet *E)</td></tr>
+<tr class="memdesc:a4dd5d4b2d4fc3e530632fb61b56c3f25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deterministic Challenge generations for Receiver ZKP with check.  <a href="mta_8h.html#a4dd5d4b2d4fc3e530632fb61b56c3f25">More...</a><br /></td></tr>
+<tr class="separator:a4dd5d4b2d4fc3e530632fb61b56c3f25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aec434d125d9f299a78388524ef5f0c51"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#aec434d125d9f299a78388524ef5f0c51">MTA_ZKWC_prove</a> (PAILLIER_public_key *key, <a class="el" href="mta_8h.html#a520066c511d8661c3ebfe4c2a612a046">MTA_ZKWC_commitment_rv</a> *rv, octet *X, octet *Y, octet *R, octet *E, <a class="el" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">MTA_ZKWC_proof</a> *p)</td></tr>
+<tr class="memdesc:aec434d125d9f299a78388524ef5f0c51"><td class="mdescLeft">&#160;</td><td class="mdescRight">Proof generation for Receiver ZKP with check.  <a href="mta_8h.html#aec434d125d9f299a78388524ef5f0c51">More...</a><br /></td></tr>
+<tr class="separator:aec434d125d9f299a78388524ef5f0c51"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aec8c96b0b4983b7e16bdcf7f24b16c08"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#aec8c96b0b4983b7e16bdcf7f24b16c08">MTA_ZKWC_verify</a> (PAILLIER_private_key *key, <a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *mod, octet *C1, octet *C2, octet *X, octet *E, <a class="el" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *c, <a class="el" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">MTA_ZKWC_proof</a> *p)</td></tr>
+<tr class="memdesc:aec8c96b0b4983b7e16bdcf7f24b16c08"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify a Proof for Receiver ZKP with check.  <a href="mta_8h.html#aec8c96b0b4983b7e16bdcf7f24b16c08">More...</a><br /></td></tr>
+<tr class="separator:aec8c96b0b4983b7e16bdcf7f24b16c08"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab2611cfca7b4350f0921d56a3aed3185"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#ab2611cfca7b4350f0921d56a3aed3185">MTA_ZKWC_commitment_toOctets</a> (octet *U, octet *Z, octet *Z1, octet *T, octet *V, octet *W, <a class="el" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *c)</td></tr>
+<tr class="memdesc:ab2611cfca7b4350f0921d56a3aed3185"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump the commitment to octets.  <a href="mta_8h.html#ab2611cfca7b4350f0921d56a3aed3185">More...</a><br /></td></tr>
+<tr class="separator:ab2611cfca7b4350f0921d56a3aed3185"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a051196472aca3ad711f8c8f9f39280ce"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a051196472aca3ad711f8c8f9f39280ce">MTA_ZKWC_commitment_fromOctets</a> (<a class="el" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *c, octet *U, octet *Z, octet *Z1, octet *T, octet *V, octet *W)</td></tr>
+<tr class="memdesc:a051196472aca3ad711f8c8f9f39280ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read the commitments from octets.  <a href="mta_8h.html#a051196472aca3ad711f8c8f9f39280ce">More...</a><br /></td></tr>
+<tr class="separator:a051196472aca3ad711f8c8f9f39280ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a127a8be76fdcde455e6d8645fcc93362"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#a127a8be76fdcde455e6d8645fcc93362">MTA_ZKWC_proof_toOctets</a> (octet *S, octet *S1, octet *S2, octet *T1, octet *T2, <a class="el" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">MTA_ZKWC_proof</a> *p)</td></tr>
+<tr class="memdesc:a127a8be76fdcde455e6d8645fcc93362"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump the proof to octets.  <a href="mta_8h.html#a127a8be76fdcde455e6d8645fcc93362">More...</a><br /></td></tr>
+<tr class="separator:a127a8be76fdcde455e6d8645fcc93362"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afdc55dcddd98123e60590190425edab3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#afdc55dcddd98123e60590190425edab3">MTA_ZKWC_proof_fromOctets</a> (<a class="el" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">MTA_ZKWC_proof</a> *p, octet *S, octet *S1, octet *S2, octet *T1, octet *T2)</td></tr>
+<tr class="memdesc:afdc55dcddd98123e60590190425edab3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read the proof from octets.  <a href="mta_8h.html#afdc55dcddd98123e60590190425edab3">More...</a><br /></td></tr>
+<tr class="separator:afdc55dcddd98123e60590190425edab3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc4cbeae2c13b0e005c70532d2f96e46"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="mta_8h.html#adc4cbeae2c13b0e005c70532d2f96e46">MTA_ZKWC_commitment_rv_kill</a> (<a class="el" href="mta_8h.html#a520066c511d8661c3ebfe4c2a612a046">MTA_ZKWC_commitment_rv</a> *rv)</td></tr>
+<tr class="memdesc:adc4cbeae2c13b0e005c70532d2f96e46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clean the memory containing the random values.  <a href="mta_8h.html#adc4cbeae2c13b0e005c70532d2f96e46">More...</a><br /></td></tr>
+<tr class="separator:adc4cbeae2c13b0e005c70532d2f96e46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a9cffabde5e58757768c87f8b96bed9be"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cffabde5e58757768c87f8b96bed9be">&#9670;&nbsp;</a></span>MTA_FAIL</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MTA_FAIL&#160;&#160;&#160;61</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Invalid proof </p>
+
+</div>
+</div>
+<a id="ac83dee7822a61403334298331d63171c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac83dee7822a61403334298331d63171c">&#9670;&nbsp;</a></span>MTA_INVALID_ECP</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MTA_INVALID_ECP&#160;&#160;&#160;62</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Invalid ECP </p>
+
+</div>
+</div>
+<a id="a38835fd15b3c165ca0acce5ba7f45dd6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a38835fd15b3c165ca0acce5ba7f45dd6">&#9670;&nbsp;</a></span>MTA_OK</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MTA_OK&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Proof successfully verified </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a7bbc83a1d90c466061839c88375576a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7bbc83a1d90c466061839c88375576a3">&#9670;&nbsp;</a></span>MPC_MTA_CLIENT1()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MPC_MTA_CLIENT1 </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">PAILLIER_public_key *&#160;</td>
+          <td class="paramname"><em>PUB</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>CA</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Encrypt multiplicative share, \( a \), of secret \( s = a.b \)</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>Pointer to a cryptographically secure random number generator </td></tr>
+    <tr><td class="paramname">PUB</td><td>Paillier Public key </td></tr>
+    <tr><td class="paramname">A</td><td>Multiplicative share of secret </td></tr>
+    <tr><td class="paramname">CA</td><td>Ciphertext </td></tr>
+    <tr><td class="paramname">R</td><td>R value for testing. If RNG is NULL then this value is read. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a673e46de79006b3d5e349a0eec6bd5c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a673e46de79006b3d5e349a0eec6bd5c5">&#9670;&nbsp;</a></span>MPC_MTA_CLIENT2()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MPC_MTA_CLIENT2 </td>
+          <td>(</td>
+          <td class="paramtype">PAILLIER_private_key *&#160;</td>
+          <td class="paramname"><em>PRIV</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>CB</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>ALPHA</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Calculate additive share, \( \alpha \), of secret \( s = a.b \)</p>
+<ol>
+<li>
+Choose a random non-zero value \( z \in F_q \) where \(q\) is the curve order </li>
+<li>
+\( \alpha = D_A(cb) = D_A(E_A(ab + z)) = ab + z \text{ }\mathrm{mod}\text{ }q \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">PRIV</td><td>Paillier Private key </td></tr>
+    <tr><td class="paramname">CB</td><td>Ciphertext </td></tr>
+    <tr><td class="paramname">ALPHA</td><td>Additive share of secret </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="af6150f97b1d2df1d70ec419211d37592"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af6150f97b1d2df1d70ec419211d37592">&#9670;&nbsp;</a></span>MPC_MTA_SERVER()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MPC_MTA_SERVER </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">PAILLIER_public_key *&#160;</td>
+          <td class="paramname"><em>PUB</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>CA</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Z</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>CB</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>BETA</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Calculate additive share, \( \beta \), of secret \( s = a.b \) and ciphertext allowing client to calculate their additive share.</p>
+<ol>
+<li>
+Choose a random non-zero value \( z \in F_q \) where \(q\) is the curve order </li>
+<li>
+\( \beta = -z\text{ }\mathrm{mod}\text{ }q \) </li>
+<li>
+\( cb = ca \otimes{} b \oplus{} z = E_A(ab + z) \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>Pointer to a cryptographically secure random number generator </td></tr>
+    <tr><td class="paramname">PUB</td><td>Paillier Public key </td></tr>
+    <tr><td class="paramname">B</td><td>Multiplicative share of secret </td></tr>
+    <tr><td class="paramname">CA</td><td>Ciphertext of client's additive share of secret </td></tr>
+    <tr><td class="paramname">Z</td><td>Plaintext z value (see above) </td></tr>
+    <tr><td class="paramname">R</td><td>R value for testing. If RNG is NULL then this value is read. </td></tr>
+    <tr><td class="paramname">CB</td><td>Ciphertext </td></tr>
+    <tr><td class="paramname">BETA</td><td>Additive share of secret (see above) </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a585141482d0be764359316dc4aa9a345"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a585141482d0be764359316dc4aa9a345">&#9670;&nbsp;</a></span>MPC_SUM_MTA()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MPC_SUM_MTA </td>
+          <td>(</td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>ALPHA</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>BETA</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>SUM</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Sum of secret shares generated by multiplicative to additive scheme</p>
+<ol>
+<li>
+\( sum = a.b + \alpha + \beta \text{ }\mathrm{mod}\text{ }q \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">A</td><td>A1 value </td></tr>
+    <tr><td class="paramname">B</td><td>B1 value </td></tr>
+    <tr><td class="paramname">ALPHA</td><td>Additive share of A1.B2 </td></tr>
+    <tr><td class="paramname">BETA</td><td>Additive share of A2.B1 </td></tr>
+    <tr><td class="paramname">SUM</td><td>The sum of all values </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="aae8035b9c2d5b29f3ad9df3c44466e1d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aae8035b9c2d5b29f3ad9df3c44466e1d">&#9670;&nbsp;</a></span>MTA_RP_challenge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_RP_challenge </td>
+          <td>(</td>
+          <td class="paramtype">PAILLIER_public_key *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *&#160;</td>
+          <td class="paramname"><em>mod</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>CT</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a challenge binding together public parameters and commitment</p>
+<ol>
+<li>
+\( e = H( g | \tilde{N} | h_1 | h_2 | q | CT | z | u | w ) \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key</td><td>Public Paillier key of the prover </td></tr>
+    <tr><td class="paramname">mod</td><td>Public BC modulus of the verifier </td></tr>
+    <tr><td class="paramname">CT</td><td>Encrypted Message to prove knowledge and range </td></tr>
+    <tr><td class="paramname">c</td><td>Commitment of the prover </td></tr>
+    <tr><td class="paramname">E</td><td>Destination challenge </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a9ae812a8b7fa69ae98d8eec9db51cc83"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ae812a8b7fa69ae98d8eec9db51cc83">&#9670;&nbsp;</a></span>MTA_RP_commit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_RP_commit </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">PAILLIER_private_key *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *&#160;</td>
+          <td class="paramname"><em>mod</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a> *&#160;</td>
+          <td class="paramname"><em>rv</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a commitment for the message M</p>
+<ol>
+<li>
+\( \alpha \in_R [0, \ldots, q^3]\) </li>
+<li>
+\( \beta \in_R [0, \ldots, N]\) </li>
+<li>
+\( \gamma \in_R [0, \ldots, q^{3}\tilde{N}]\) </li>
+<li>
+\( \rho \in_R [0, \ldots, q\tilde{N}]\) </li>
+<li>
+\( z = h_1^{m}h_2^{\rho} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( u = h_1^{\alpha}h_2^{\gamma} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( w = g^{\alpha}\beta^{N} \text{ }\mathrm{mod}\text{ }N^2 \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>csprng for random generation </td></tr>
+    <tr><td class="paramname">key</td><td>Paillier key used to encrypt M </td></tr>
+    <tr><td class="paramname">mod</td><td>Public BC modulus of the verifier </td></tr>
+    <tr><td class="paramname">M</td><td>Message to prove knowledge and range </td></tr>
+    <tr><td class="paramname">c</td><td>Destination commitment </td></tr>
+    <tr><td class="paramname">rv</td><td>Random values associated to the commitment. If RNG is NULL this is read </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a5f42fb5d017f34db268c112f7c8d056e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f42fb5d017f34db268c112f7c8d056e">&#9670;&nbsp;</a></span>MTA_RP_commitment_fromOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_RP_commitment_fromOctets </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Z</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>W</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">c</td><td>Destination commitment </td></tr>
+    <tr><td class="paramname">Z</td><td>Octet with the z component of the proof </td></tr>
+    <tr><td class="paramname">U</td><td>Octet with the u component of the proof </td></tr>
+    <tr><td class="paramname">W</td><td>Octet with the w component of the proof </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a83d69dbe4b86adcf814bf17593066b5d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a83d69dbe4b86adcf814bf17593066b5d">&#9670;&nbsp;</a></span>MTA_RP_commitment_rv_kill()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_RP_commitment_rv_kill </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a> *&#160;</td>
+          <td class="paramname"><em>rv</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">rv</td><td>Random values to clean </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="aa60c3b4a80719d29f0ebb747f3fc31a1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa60c3b4a80719d29f0ebb747f3fc31a1">&#9670;&nbsp;</a></span>MTA_RP_commitment_toOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_RP_commitment_toOctets </td>
+          <td>(</td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Z</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>W</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">Z</td><td>Destination Octet for the z component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">U</td><td>Destination Octet for the u component of the commitment. FS_4096 long </td></tr>
+    <tr><td class="paramname">W</td><td>Destination Octet for the w component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">c</td><td>Commitment to export </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ad60da72de670c62131bc57f9e1070c84"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad60da72de670c62131bc57f9e1070c84">&#9670;&nbsp;</a></span>MTA_RP_proof_fromOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_RP_proof_fromOctets </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structMTA__RP__proof.html">MTA_RP_proof</a> *&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Destination proof </td></tr>
+    <tr><td class="paramname">S</td><td>Octet with the s component of the proof </td></tr>
+    <tr><td class="paramname">S1</td><td>Octet with the s1 component of the proof </td></tr>
+    <tr><td class="paramname">S2</td><td>Octet with the s2 component of the proof </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a4c516e4898f3fbcdd55ed70ea0e336ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4c516e4898f3fbcdd55ed70ea0e336ef">&#9670;&nbsp;</a></span>MTA_RP_proof_toOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_RP_proof_toOctets </td>
+          <td>(</td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__RP__proof.html">MTA_RP_proof</a> *&#160;</td>
+          <td class="paramname"><em>p</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">S</td><td>Destination Octet for the s component of the proof. FS_2048 long </td></tr>
+    <tr><td class="paramname">S1</td><td>Destination Octet for the s1 component of the proof. HFS_2048 long </td></tr>
+    <tr><td class="paramname">S2</td><td>Destination Octet for the s2 component of the proof. FS_2048 + HFS_2048 long </td></tr>
+    <tr><td class="paramname">p</td><td>Proof to export </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a840590c8db0b435bece74978adf0748d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a840590c8db0b435bece74978adf0748d">&#9670;&nbsp;</a></span>MTA_RP_prove()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_RP_prove </td>
+          <td>(</td>
+          <td class="paramtype">PAILLIER_private_key *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a> *&#160;</td>
+          <td class="paramname"><em>rv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>M</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__RP__proof.html">MTA_RP_proof</a> *&#160;</td>
+          <td class="paramname"><em>p</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a proof of knowledge of m and of its range</p>
+<ol>
+<li>
+\( s = \beta r^e \text{ }\mathrm{mod}\text{ }N \) </li>
+<li>
+\( s_1 = em + \alpha \) </li>
+<li>
+\( s_2 = e\rho + \gamma \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key</td><td>Private Paillier key of the prover </td></tr>
+    <tr><td class="paramname">rv</td><td>Random values associated to the commitment </td></tr>
+    <tr><td class="paramname">M</td><td>Message to prove knowledge and range </td></tr>
+    <tr><td class="paramname">R</td><td>Random value used in the Paillier encryption of M </td></tr>
+    <tr><td class="paramname">E</td><td>Generated challenge </td></tr>
+    <tr><td class="paramname">p</td><td>Destination proof </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="aaa4c5afa267be00e1819becd53805795"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaa4c5afa267be00e1819becd53805795">&#9670;&nbsp;</a></span>MTA_RP_verify()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int MTA_RP_verify </td>
+          <td>(</td>
+          <td class="paramtype">PAILLIER_public_key *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *&#160;</td>
+          <td class="paramname"><em>mod</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>CT</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__RP__proof.html">MTA_RP_proof</a> *&#160;</td>
+          <td class="paramname"><em>p</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Verify the proof of knowledge of m associated to CT and of its range</p>
+<ol>
+<li>
+\( s1 \stackrel{?}{\leq} q^3 \) </li>
+<li>
+\( w \stackrel{?}{=} h_1^{s_1}h_2^{s_2}z^{-e} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( u \stackrel{?}{=} g^{s_1}s^{N}c^{-e} \text{ }\mathrm{mod}\text{ }N^2 \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key</td><td>Public Paillier key of the prover </td></tr>
+    <tr><td class="paramname">mod</td><td>Private BC modulus of the verifier </td></tr>
+    <tr><td class="paramname">CT</td><td>Encrypted Message to prove knowledge and range </td></tr>
+    <tr><td class="paramname">E</td><td>Generated challenge </td></tr>
+    <tr><td class="paramname">c</td><td>Received commitment </td></tr>
+    <tr><td class="paramname">p</td><td>Received proof </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>MTA_OK if the proof is valid, MTA_FAIL otherwise </dd></dl>
+
+</div>
+</div>
+<a id="a437965ad4a0dd602a0c1a4339afb0cb6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a437965ad4a0dd602a0c1a4339afb0cb6">&#9670;&nbsp;</a></span>MTA_ZK_challenge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZK_challenge </td>
+          <td>(</td>
+          <td class="paramtype">PAILLIER_public_key *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *&#160;</td>
+          <td class="paramname"><em>mod</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>C1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>C2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a challenge binding together public parameters and commitment</p>
+<ol>
+<li>
+\( e = H( g | \tilde{N} | h_1 | h_2 | q | c_1 | c_2 | z | z1 | t | v | w ) \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key</td><td>Public Paillier key of the prover </td></tr>
+    <tr><td class="paramname">mod</td><td>Public BC modulus of the verifier </td></tr>
+    <tr><td class="paramname">C1</td><td>Base Paillier Ciphertext </td></tr>
+    <tr><td class="paramname">C2</td><td>New Paillier Ciphertext to prove knowledge and range </td></tr>
+    <tr><td class="paramname">c</td><td>Commitment of the prover </td></tr>
+    <tr><td class="paramname">E</td><td>Destination challenge </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a882f4c5922a453293eaaa7e3ec876bdf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a882f4c5922a453293eaaa7e3ec876bdf">&#9670;&nbsp;</a></span>MTA_ZK_commit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZK_commit </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">PAILLIER_public_key *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *&#160;</td>
+          <td class="paramname"><em>mod</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>C1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a> *&#160;</td>
+          <td class="paramname"><em>rv</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a commitment for the values x, y and c1</p>
+<ol>
+<li>
+\( \alpha \in_R [0, \ldots, q^3]\) </li>
+<li>
+\( \beta \in_R [0, \ldots, N]\) </li>
+<li>
+\( \gamma \in_R [0, \ldots, N]\) </li>
+<li>
+\( \rho \in_R [0, \ldots, q\tilde{N}]\) </li>
+<li>
+\( \rho_1 \in_R [0, \ldots, q^{3}\tilde{N}]\) </li>
+<li>
+\( \sigma \in_R [0, \ldots, q\tilde{N}]\) </li>
+<li>
+\( \tau \in_R [0, \ldots, q\tilde{N}]\) </li>
+<li>
+\( z = h_1^{x}h_2^{\rho} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( z_1 = h_1^{\alpha}h_2^{\rho_1} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( t = h_1^{y}h_2^{\sigma} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( w = h_1^{\gamma}h_2^{\tau} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( v = c1^{\alpha}g^{\gamma}\beta^{N} \text{ }\mathrm{mod}\text{ }N^2 \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>csprng for random generation </td></tr>
+    <tr><td class="paramname">key</td><td>Paillier key used to encrypt C1 </td></tr>
+    <tr><td class="paramname">mod</td><td>Public BC modulus of the verifier </td></tr>
+    <tr><td class="paramname">X</td><td>Message to prove knowledge and range </td></tr>
+    <tr><td class="paramname">Y</td><td>Message to prove knowledge </td></tr>
+    <tr><td class="paramname">C1</td><td>Base Paillier Ciphertext </td></tr>
+    <tr><td class="paramname">c</td><td>Destination commitment </td></tr>
+    <tr><td class="paramname">rv</td><td>Random values associated to the commitment. If RNG is NULL this is read </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ad9cb35ed95b1ad3367fd78437e98aad5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad9cb35ed95b1ad3367fd78437e98aad5">&#9670;&nbsp;</a></span>MTA_ZK_commitment_fromOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZK_commitment_fromOctets </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Z</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Z1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>V</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>W</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">c</td><td>Destination commitment </td></tr>
+    <tr><td class="paramname">Z</td><td>Destination Octet for the z component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">Z1</td><td>Destination Octet for the z1 component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">T</td><td>Destination Octet for the t component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">V</td><td>Destination Octet for the v component of the commitment. FS_4096 long </td></tr>
+    <tr><td class="paramname">W</td><td>Destination Octet for the w component of the commitment. FS_2048 long </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a50085c31f3df46ac6814c46064ed2826"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50085c31f3df46ac6814c46064ed2826">&#9670;&nbsp;</a></span>MTA_ZK_commitment_rv_kill()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZK_commitment_rv_kill </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a> *&#160;</td>
+          <td class="paramname"><em>rv</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">rv</td><td>Random values to clean </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="afa9bc2f3876442f8519c67c011d4b0c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afa9bc2f3876442f8519c67c011d4b0c5">&#9670;&nbsp;</a></span>MTA_ZK_commitment_toOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZK_commitment_toOctets </td>
+          <td>(</td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Z</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Z1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>V</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>W</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">Z</td><td>Destination Octet for the z component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">Z1</td><td>Destination Octet for the z1 component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">T</td><td>Destination Octet for the t component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">V</td><td>Destination Octet for the v component of the commitment. FS_4096 long </td></tr>
+    <tr><td class="paramname">W</td><td>Destination Octet for the w component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">c</td><td>Commitment to export </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a4d280db3b810c0d69603a8ee97222565"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4d280db3b810c0d69603a8ee97222565">&#9670;&nbsp;</a></span>MTA_ZK_proof_fromOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZK_proof_fromOctets </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> *&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Destination proof </td></tr>
+    <tr><td class="paramname">S</td><td>Octet with the s component of the proof </td></tr>
+    <tr><td class="paramname">S1</td><td>Octet with the s1 component of the proof </td></tr>
+    <tr><td class="paramname">S2</td><td>Octet with the s2 component of the proof </td></tr>
+    <tr><td class="paramname">T1</td><td>Octet with the t1 component of the proof </td></tr>
+    <tr><td class="paramname">T2</td><td>Octet with the t2 component of the proof </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ae4cc541c94044beaf3a46cd5415da370"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae4cc541c94044beaf3a46cd5415da370">&#9670;&nbsp;</a></span>MTA_ZK_proof_toOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZK_proof_toOctets </td>
+          <td>(</td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> *&#160;</td>
+          <td class="paramname"><em>p</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">S</td><td>Destination Octet for the s component of the proof. FS_2048 long </td></tr>
+    <tr><td class="paramname">S1</td><td>Destination Octet for the s1 component of the proof. HFS_2048 long </td></tr>
+    <tr><td class="paramname">S2</td><td>Destination Octet for the s2 component of the proof. FS_2048 + HFS_2048 long </td></tr>
+    <tr><td class="paramname">T1</td><td>Destination Octet for the t1 component of the proof. FS_2048 long </td></tr>
+    <tr><td class="paramname">T2</td><td>Destination Octet for the t2 component of the proof. FS_2048 + HFS_2048 long </td></tr>
+    <tr><td class="paramname">p</td><td>Proof to export </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a275057a0134ee0cbef05e1c719f3f94b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a275057a0134ee0cbef05e1c719f3f94b">&#9670;&nbsp;</a></span>MTA_ZK_prove()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZK_prove </td>
+          <td>(</td>
+          <td class="paramtype">PAILLIER_public_key *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a> *&#160;</td>
+          <td class="paramname"><em>rv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> *&#160;</td>
+          <td class="paramname"><em>p</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a proof of knowledge of x, y and a range proof for x</p>
+<ol>
+<li>
+\( s = \beta r^e \text{ }\mathrm{mod}\text{ }N \) </li>
+<li>
+\( s_1 = ex + \alpha \) </li>
+<li>
+\( s_2 = e\rho + \rho_1 \) </li>
+<li>
+\( t_1 = ey + \gamma \) </li>
+<li>
+\( t_2 = e\sigma + \tau \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key</td><td>Private Paillier key of the prover </td></tr>
+    <tr><td class="paramname">rv</td><td>Random values associated to the commitment </td></tr>
+    <tr><td class="paramname">X</td><td>Message to prove knowledge and range </td></tr>
+    <tr><td class="paramname">Y</td><td>Message to prove knowledge </td></tr>
+    <tr><td class="paramname">R</td><td>Random value used in the Paillier addition </td></tr>
+    <tr><td class="paramname">E</td><td>Generated challenge </td></tr>
+    <tr><td class="paramname">p</td><td>Destination proof </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ae4971990b60c103d7cb596c9a0d1d205"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae4971990b60c103d7cb596c9a0d1d205">&#9670;&nbsp;</a></span>MTA_ZK_random_challenge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZK_random_challenge </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a random challenge for any of the ZK Proofs below. This can be used instead of the deterministic challenges produced for each specific proof to make any of the proofs interactive and be interoperable with other implementations.</p>
+<ol>
+<li>
+\( e \in_R [0, \ldots, q] \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>csprng for random generation </td></tr>
+    <tr><td class="paramname">E</td><td>Destination octet for the challenge. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a34fa2c06ff8a165243621fe6d32a4b64"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a34fa2c06ff8a165243621fe6d32a4b64">&#9670;&nbsp;</a></span>MTA_ZK_verify()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int MTA_ZK_verify </td>
+          <td>(</td>
+          <td class="paramtype">PAILLIER_private_key *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *&#160;</td>
+          <td class="paramname"><em>mod</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>C1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>C2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> *&#160;</td>
+          <td class="paramname"><em>p</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Verify the proof of knowledge of x, y associated to c1, c2 and of x range</p>
+<ol>
+<li>
+\( s_1 \stackrel{?}{\leq} q^3 \) </li>
+<li>
+\( z_1 \stackrel{?}{=} h_1^{s_1}h_2^{s_2}z^{-e} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( w \stackrel{?}{=} h_1^{t_1}h_2^{t_2}t^{-e} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( v \stackrel{?}{=} c1^{s_1}s^{N}g^{t_1}c2^{-e} \text{ }\mathrm{mod}\text{ }N^2 \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key</td><td>Public Paillier key of the prover </td></tr>
+    <tr><td class="paramname">mod</td><td>Private BC modulus of the verifier </td></tr>
+    <tr><td class="paramname">C1</td><td>Base Paillier Ciphertext </td></tr>
+    <tr><td class="paramname">C2</td><td>New Paillier Ciphertext to prove knowledge and range </td></tr>
+    <tr><td class="paramname">E</td><td>Generated challenge </td></tr>
+    <tr><td class="paramname">c</td><td>Received commitment </td></tr>
+    <tr><td class="paramname">p</td><td>Received proof </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>MTA_OK if the proof is valid, MTA_FAIL otherwise </dd></dl>
+
+</div>
+</div>
+<a id="a4dd5d4b2d4fc3e530632fb61b56c3f25"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4dd5d4b2d4fc3e530632fb61b56c3f25">&#9670;&nbsp;</a></span>MTA_ZKWC_challenge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZKWC_challenge </td>
+          <td>(</td>
+          <td class="paramtype">PAILLIER_public_key *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *&#160;</td>
+          <td class="paramname"><em>mod</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>C1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>C2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a challenge binding together public parameters and commitment</p>
+<ol>
+<li>
+\( e = H( g | \tilde{N} | h_1 | h_2 | q | c_1 | c_2 | U | z | z1 | t | v | w ) \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key</td><td>Public Paillier key of the prover </td></tr>
+    <tr><td class="paramname">mod</td><td>Public BC modulus of the verifier </td></tr>
+    <tr><td class="paramname">C1</td><td>Base Paillier Ciphertext </td></tr>
+    <tr><td class="paramname">C2</td><td>New Paillier Ciphertext to prove knowledge and range </td></tr>
+    <tr><td class="paramname">X</td><td>Public exponent of the associated DLOG to prove knowledge </td></tr>
+    <tr><td class="paramname">c</td><td>Commitment of the prover </td></tr>
+    <tr><td class="paramname">E</td><td>Destination challenge </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a61bd2519a246c273ce42da382732c489"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a61bd2519a246c273ce42da382732c489">&#9670;&nbsp;</a></span>MTA_ZKWC_commit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZKWC_commit </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">PAILLIER_public_key *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *&#160;</td>
+          <td class="paramname"><em>mod</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>C1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mta_8h.html#a520066c511d8661c3ebfe4c2a612a046">MTA_ZKWC_commitment_rv</a> *&#160;</td>
+          <td class="paramname"><em>rv</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a commitment for the values x, y and c1</p>
+<ol>
+<li>
+\( \alpha \in_R [0, \ldots, q^3]\) </li>
+<li>
+\( \beta \in_R [0, \ldots, N]\) </li>
+<li>
+\( \gamma \in_R [0, \ldots, N]\) </li>
+<li>
+\( \rho \in_R [0, \ldots, q\tilde{N}]\) </li>
+<li>
+\( \rho_1 \in_R [0, \ldots, q^{3}\tilde{N}]\) </li>
+<li>
+\( \sigma \in_R [0, \ldots, q\tilde{N}]\) </li>
+<li>
+\( \tau \in_R [0, \ldots, q\tilde{N}]\) </li>
+<li>
+\( z = h_1^{x}h_2^{\rho} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( z_1 = h_1^{\alpha}h_2^{\rho_1} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( t = h_1^{y}h_2^{\sigma} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( w = h_1^{\gamma}h_2^{\tau} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( v = c1^{\alpha}g^{\gamma}\beta^{N} \text{ }\mathrm{mod}\text{ }N^2 \) </li>
+<li>
+\( U = \alpha.G \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>csprng for random generation </td></tr>
+    <tr><td class="paramname">key</td><td>Paillier key used to encrypt C1 </td></tr>
+    <tr><td class="paramname">mod</td><td>Public BC modulus of the verifier </td></tr>
+    <tr><td class="paramname">X</td><td>Message to prove knowledge and range </td></tr>
+    <tr><td class="paramname">Y</td><td>Message to prove knowledge </td></tr>
+    <tr><td class="paramname">C1</td><td>Base Paillier Ciphertext </td></tr>
+    <tr><td class="paramname">c</td><td>Destination commitment </td></tr>
+    <tr><td class="paramname">rv</td><td>Random values associated to the commitment. If RNG is NULL this is read </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a051196472aca3ad711f8c8f9f39280ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a051196472aca3ad711f8c8f9f39280ce">&#9670;&nbsp;</a></span>MTA_ZKWC_commitment_fromOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int MTA_ZKWC_commitment_fromOctets </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Z</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Z1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>V</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>W</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">c</td><td>Destination commitment </td></tr>
+    <tr><td class="paramname">U</td><td>Octet with the commitment for the DLOG ZKP </td></tr>
+    <tr><td class="paramname">Z</td><td>Octet with the z component of the commitment </td></tr>
+    <tr><td class="paramname">Z1</td><td>Octet with the z1 component of the commitment </td></tr>
+    <tr><td class="paramname">T</td><td>Octet with the t component of the commitment </td></tr>
+    <tr><td class="paramname">V</td><td>Octet with the v component of the commitment </td></tr>
+    <tr><td class="paramname">W</td><td>Octet with the w component of the commitment </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>MTA_INVALID_ECP if U is not a valid ECP, MTA_OK otherwise </dd></dl>
+
+</div>
+</div>
+<a id="adc4cbeae2c13b0e005c70532d2f96e46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adc4cbeae2c13b0e005c70532d2f96e46">&#9670;&nbsp;</a></span>MTA_ZKWC_commitment_rv_kill()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZKWC_commitment_rv_kill </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="mta_8h.html#a520066c511d8661c3ebfe4c2a612a046">MTA_ZKWC_commitment_rv</a> *&#160;</td>
+          <td class="paramname"><em>rv</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">rv</td><td>Random values to clean </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ab2611cfca7b4350f0921d56a3aed3185"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab2611cfca7b4350f0921d56a3aed3185">&#9670;&nbsp;</a></span>MTA_ZKWC_commitment_toOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZKWC_commitment_toOctets </td>
+          <td>(</td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>U</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Z</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Z1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>V</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>W</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">U</td><td>Octet with the commitment for the DLOG ZKP. EGS_SECP256K1 + 1 long </td></tr>
+    <tr><td class="paramname">Z</td><td>Destination Octet for the z component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">Z1</td><td>Destination Octet for the z1 component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">T</td><td>Destination Octet for the t component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">V</td><td>Destination Octet for the v component of the commitment. FS_4096 long </td></tr>
+    <tr><td class="paramname">W</td><td>Destination Octet for the w component of the commitment. FS_2048 long </td></tr>
+    <tr><td class="paramname">c</td><td>Commitment to export </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="afdc55dcddd98123e60590190425edab3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afdc55dcddd98123e60590190425edab3">&#9670;&nbsp;</a></span>MTA_ZKWC_proof_fromOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZKWC_proof_fromOctets </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">MTA_ZKWC_proof</a> *&#160;</td>
+          <td class="paramname"><em>p</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">p</td><td>Destination proof </td></tr>
+    <tr><td class="paramname">S</td><td>Octet with the s component of the proof </td></tr>
+    <tr><td class="paramname">S1</td><td>Octet with the s1 component of the proof </td></tr>
+    <tr><td class="paramname">S2</td><td>Octet with the s2 component of the proof </td></tr>
+    <tr><td class="paramname">T1</td><td>Octet with the t1 component of the proof </td></tr>
+    <tr><td class="paramname">T2</td><td>Octet with the t2 component of the proof </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a127a8be76fdcde455e6d8645fcc93362"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a127a8be76fdcde455e6d8645fcc93362">&#9670;&nbsp;</a></span>MTA_ZKWC_proof_toOctets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZKWC_proof_toOctets </td>
+          <td>(</td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>S2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">MTA_ZKWC_proof</a> *&#160;</td>
+          <td class="paramname"><em>p</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">S</td><td>Destination Octet for the s component of the proof. FS_2048 long </td></tr>
+    <tr><td class="paramname">S1</td><td>Destination Octet for the s1 component of the proof. HFS_2048 long </td></tr>
+    <tr><td class="paramname">S2</td><td>Destination Octet for the s2 component of the proof. FS_2048 + HFS_2048 long </td></tr>
+    <tr><td class="paramname">T1</td><td>Destination Octet for the t1 component of the proof. FS_2048 long </td></tr>
+    <tr><td class="paramname">T2</td><td>Destination Octet for the t2 component of the proof. FS_2048 + HFS_2048 long </td></tr>
+    <tr><td class="paramname">p</td><td>Proof to export </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="aec434d125d9f299a78388524ef5f0c51"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aec434d125d9f299a78388524ef5f0c51">&#9670;&nbsp;</a></span>MTA_ZKWC_prove()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void MTA_ZKWC_prove </td>
+          <td>(</td>
+          <td class="paramtype">PAILLIER_public_key *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mta_8h.html#a520066c511d8661c3ebfe4c2a612a046">MTA_ZKWC_commitment_rv</a> *&#160;</td>
+          <td class="paramname"><em>rv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>Y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">MTA_ZKWC_proof</a> *&#160;</td>
+          <td class="paramname"><em>p</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a proof of knowledge of x, y and a range proof for x. These values are the same as for the ZKP without check. The knowledge of the DLOG can be verified using the value U in the commitment</p>
+<ol>
+<li>
+\( s = \beta r^e \text{ }\mathrm{mod}\text{ }N \) </li>
+<li>
+\( s_1 = ex + \alpha \) </li>
+<li>
+\( s_2 = e\rho + \rho_1 \) </li>
+<li>
+\( t_1 = ey + \gamma \) </li>
+<li>
+\( t_2 = e\sigma + \tau \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key</td><td>Private Paillier key of the prover </td></tr>
+    <tr><td class="paramname">rv</td><td>Random values associated to the commitment </td></tr>
+    <tr><td class="paramname">X</td><td>Message to prove knowledge and range </td></tr>
+    <tr><td class="paramname">Y</td><td>Message to prove knowledge </td></tr>
+    <tr><td class="paramname">R</td><td>Random value used in the Paillier addition </td></tr>
+    <tr><td class="paramname">E</td><td>Generated challenge </td></tr>
+    <tr><td class="paramname">p</td><td>Destination proof </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="aec8c96b0b4983b7e16bdcf7f24b16c08"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aec8c96b0b4983b7e16bdcf7f24b16c08">&#9670;&nbsp;</a></span>MTA_ZKWC_verify()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int MTA_ZKWC_verify </td>
+          <td>(</td>
+          <td class="paramtype">PAILLIER_private_key *&#160;</td>
+          <td class="paramname"><em>key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *&#160;</td>
+          <td class="paramname"><em>mod</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>C1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>C2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *&#160;</td>
+          <td class="paramname"><em>c</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">MTA_ZKWC_proof</a> *&#160;</td>
+          <td class="paramname"><em>p</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Verify the proof of knowledge of x, y associated to c1, c2 and of x range. Additionally verify the knowledge of X = x.G</p>
+<ol>
+<li>
+\( s_1 \stackrel{?}{\leq} q^3 \) </li>
+<li>
+\( z_1 \stackrel{?}{=} h_1^{s_1}h_2^{s_2}z^{-e} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( w \stackrel{?}{=} h_1^{t_1}h_2^{t_2}t^{-e} \text{ }\mathrm{mod}\text{ }\tilde{N} \) </li>
+<li>
+\( v \stackrel{?}{=} c1^{s_1}s^{N}g^{t_1}c2^{-e} \text{ }\mathrm{mod}\text{ }N^2 \) </li>
+<li>
+\( U \stackrel{?}{=} s_1.G - e.X \) </li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">key</td><td>Public Paillier key of the prover </td></tr>
+    <tr><td class="paramname">mod</td><td>Private BC modulus of the verifier </td></tr>
+    <tr><td class="paramname">C1</td><td>Base Paillier Ciphertext </td></tr>
+    <tr><td class="paramname">C2</td><td>New Paillier Ciphertext to prove knowledge and range </td></tr>
+    <tr><td class="paramname">X</td><td>Public ECP of the DLOG x.G </td></tr>
+    <tr><td class="paramname">E</td><td>Generated challenge </td></tr>
+    <tr><td class="paramname">c</td><td>Received commitment </td></tr>
+    <tr><td class="paramname">p</td><td>Received proof </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>MTA_OK if the proof is valid, MTA_FAIL otherwise </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/mta_8h_source.html b/website/static/mpcdocs/mta_8h_source.html
new file mode 100644
index 0000000..9711c40
--- /dev/null
+++ b/website/static/mpcdocs/mta_8h_source.html
@@ -0,0 +1,308 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: mta.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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_a166689341c37329f24f96bdba87a08b.html">amcl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">mta.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="mta_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="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">&quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">  http://www.apache.org/licenses/LICENSE-2.0</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;<span class="comment">Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">&quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#ifndef MTA_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#define MTA_H</span></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;<span class="preprocessor">#include &quot;amcl/amcl.h&quot;</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &quot;amcl/paillier.h&quot;</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="commitments_8h.html">amcl/commitments.h</a>&quot;</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#include &quot;amcl/ecp_SECP256K1.h&quot;</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#include &quot;amcl/ecdh_SECP256K1.h&quot;</span></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="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">#endif</span></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"><a class="line" href="mta_8h.html#a38835fd15b3c165ca0acce5ba7f45dd6">   39</a></span>&#160;<span class="preprocessor">#define MTA_OK 0             </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="mta_8h.html#a9cffabde5e58757768c87f8b96bed9be">   40</a></span>&#160;<span class="preprocessor">#define MTA_FAIL 61          </span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="mta_8h.html#ac83dee7822a61403334298331d63171c">   41</a></span>&#160;<span class="preprocessor">#define MTA_INVALID_ECP 62   </span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">/* MTA protocol API */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160; </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="mta_8h.html#a7bbc83a1d90c466061839c88375576a3">   55</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a7bbc83a1d90c466061839c88375576a3">MPC_MTA_CLIENT1</a>(csprng *RNG, PAILLIER_public_key* PUB, octet* A, octet* CA, octet* R);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160; </div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="mta_8h.html#a673e46de79006b3d5e349a0eec6bd5c5">   70</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a673e46de79006b3d5e349a0eec6bd5c5">MPC_MTA_CLIENT2</a>(PAILLIER_private_key *PRIV, octet* CB, octet *ALPHA);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div>
+<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="mta_8h.html#af6150f97b1d2df1d70ec419211d37592">   92</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="mta_8h.html#af6150f97b1d2df1d70ec419211d37592">MPC_MTA_SERVER</a>(csprng *RNG, PAILLIER_public_key *PUB, octet *B, octet *CA, octet *Z, octet *R, octet *CB, octet *BETA);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160; </div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="mta_8h.html#a585141482d0be764359316dc4aa9a345">  108</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a585141482d0be764359316dc4aa9a345">MPC_SUM_MTA</a>(<span class="keyword">const</span> octet *A, <span class="keyword">const</span> octet *B, <span class="keyword">const</span> octet *ALPHA, <span class="keyword">const</span> octet *BETA, octet *SUM);</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;<span class="comment">/* MTA Zero Knowledge Proofs API*/</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="comment">// The protocols require a BC modulus (Pt, Qt, Nt, h1, h2) and a Paillier PK (N, g)</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160; </div>
+<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="mta_8h.html#ae4971990b60c103d7cb596c9a0d1d205">  128</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="mta_8h.html#ae4971990b60c103d7cb596c9a0d1d205">MTA_ZK_random_challenge</a>(csprng *RNG, octet *E);</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;<span class="comment">/* Range Proof API */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160; </div>
+<div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="structMTA__RP__commitment__rv.html">  133</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;{</div>
+<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="structMTA__RP__commitment__rv.html#aecbdb8eaf2ced92b569f664d53ee0517">  135</a></span>&#160;    BIG_1024_58 alpha[FFLEN_2048];              </div>
+<div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="structMTA__RP__commitment__rv.html#af6f441b304a8b2c8997860c2bbeaa6b1">  136</a></span>&#160;    BIG_1024_58 beta[FFLEN_2048];               </div>
+<div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="structMTA__RP__commitment__rv.html#adacad4216d4e48675f9e0e1c8af3a7b6">  137</a></span>&#160;    BIG_1024_58 gamma[FFLEN_2048 + HFLEN_2048]; </div>
+<div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="structMTA__RP__commitment__rv.html#a0ed6c0f9febc1b4cf7888de348296b46">  138</a></span>&#160;    BIG_1024_58 rho[FFLEN_2048 + HFLEN_2048];   </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;} <a class="code" href="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160; </div>
+<div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="structMTA__RP__commitment.html">  142</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</span></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="structMTA__RP__commitment.html#aee20ad37a8cde2e2b6381055fff1c649">  144</a></span>&#160;    BIG_1024_58 z[FFLEN_2048];  </div>
+<div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="structMTA__RP__commitment.html#a201fa0a955e4cc4b8f0bfed810a58b77">  145</a></span>&#160;    BIG_512_60  u[FFLEN_4096];  </div>
+<div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="structMTA__RP__commitment.html#a19d9074f354d2362f090db5cd6f34212">  146</a></span>&#160;    BIG_1024_58 w[FFLEN_2048];  </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;} <a class="code" href="structMTA__RP__commitment.html">MTA_RP_commitment</a>;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160; </div>
+<div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="structMTA__RP__proof.html">  150</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</span></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="structMTA__RP__proof.html#a8040777a4b2f46d78a7f113e924b76d0">  152</a></span>&#160;    BIG_512_60  s[FFLEN_4096];                </div>
+<div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="structMTA__RP__proof.html#aa0e204527ce83ab95daa7b6a9977e473">  153</a></span>&#160;    BIG_1024_58 s1[FFLEN_2048];               </div>
+<div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="structMTA__RP__proof.html#a22e41915856f9e6c60fbde988a81870c">  154</a></span>&#160;    BIG_1024_58 s2[FFLEN_2048 + HFLEN_2048];  </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;} <a class="code" href="structMTA__RP__proof.html">MTA_RP_proof</a>;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160; </div>
+<div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="mta_8h.html#a9ae812a8b7fa69ae98d8eec9db51cc83">  178</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a9ae812a8b7fa69ae98d8eec9db51cc83">MTA_RP_commit</a>(csprng *RNG, PAILLIER_private_key *key, <a class="code" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *mod,  octet *M, <a class="code" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *c, <a class="code" href="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a> *rv);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160; </div>
+<div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="mta_8h.html#aae8035b9c2d5b29f3ad9df3c44466e1d">  194</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#aae8035b9c2d5b29f3ad9df3c44466e1d">MTA_RP_challenge</a>(PAILLIER_public_key *key, <a class="code" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *mod, <span class="keyword">const</span> octet *CT, <a class="code" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *c, octet *E);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160; </div>
+<div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="mta_8h.html#a840590c8db0b435bece74978adf0748d">  213</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a840590c8db0b435bece74978adf0748d">MTA_RP_prove</a>(PAILLIER_private_key *key, <a class="code" href="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a> *rv, octet *M, octet *R, octet *E, <a class="code" href="structMTA__RP__proof.html">MTA_RP_proof</a> *p);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160; </div>
+<div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="mta_8h.html#aaa4c5afa267be00e1819becd53805795">  233</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="mta_8h.html#aaa4c5afa267be00e1819becd53805795">MTA_RP_verify</a>(PAILLIER_public_key *key, <a class="code" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *mod, octet *CT, octet *E, <a class="code" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *c, <a class="code" href="structMTA__RP__proof.html">MTA_RP_proof</a> *p);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160; </div>
+<div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="mta_8h.html#aa60c3b4a80719d29f0ebb747f3fc31a1">  242</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#aa60c3b4a80719d29f0ebb747f3fc31a1">MTA_RP_commitment_toOctets</a>(octet *Z, octet *U, octet *W, <a class="code" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *c);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160; </div>
+<div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="mta_8h.html#a5f42fb5d017f34db268c112f7c8d056e">  251</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a5f42fb5d017f34db268c112f7c8d056e">MTA_RP_commitment_fromOctets</a>(<a class="code" href="structMTA__RP__commitment.html">MTA_RP_commitment</a> *c, octet *Z, octet *U, octet *W);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160; </div>
+<div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="mta_8h.html#a4c516e4898f3fbcdd55ed70ea0e336ef">  260</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a4c516e4898f3fbcdd55ed70ea0e336ef">MTA_RP_proof_toOctets</a>(octet *S, octet *S1, octet *S2, <a class="code" href="structMTA__RP__proof.html">MTA_RP_proof</a> *p);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160; </div>
+<div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="mta_8h.html#ad60da72de670c62131bc57f9e1070c84">  269</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#ad60da72de670c62131bc57f9e1070c84">MTA_RP_proof_fromOctets</a>(<a class="code" href="structMTA__RP__proof.html">MTA_RP_proof</a> *p, octet *S, octet *S1, octet *S2);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160; </div>
+<div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="mta_8h.html#a83d69dbe4b86adcf814bf17593066b5d">  275</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a83d69dbe4b86adcf814bf17593066b5d">MTA_RP_commitment_rv_kill</a>(<a class="code" href="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a> *rv);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160; </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;<span class="comment">/* Receiver Zero Knowledge Proof API */</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160; </div>
+<div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment__rv.html">  280</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;{</div>
+<div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment__rv.html#a050280552a71f496ea2b53985b236563">  282</a></span>&#160;    BIG_1024_58 alpha[FFLEN_2048];              </div>
+<div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment__rv.html#a577c79735265327e7636ba9e8fdc8df5">  283</a></span>&#160;    BIG_1024_58 beta[FFLEN_2048];               </div>
+<div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment__rv.html#aaa9ee388eaa9eb9a8ff9601a774cdcfd">  284</a></span>&#160;    BIG_1024_58 gamma[FFLEN_2048];              </div>
+<div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment__rv.html#a73b42958ba972918f43b9d6f9df7f31e">  285</a></span>&#160;    BIG_1024_58 rho[FFLEN_2048 + HFLEN_2048];   </div>
+<div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment__rv.html#aefa9426a3a4ad48490520c99c311c486">  286</a></span>&#160;    BIG_1024_58 rho1[FFLEN_2048 + HFLEN_2048];  </div>
+<div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment__rv.html#ab26f42619df65db7f6dcdde009067ae9">  287</a></span>&#160;    BIG_1024_58 sigma[FFLEN_2048 + HFLEN_2048]; </div>
+<div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment__rv.html#aa306d5c97d2df585d8ec3948bdf95b16">  288</a></span>&#160;    BIG_1024_58 tau[FFLEN_2048 + HFLEN_2048];   </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;} <a class="code" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a>;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160; </div>
+<div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment.html">  292</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</span></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"><a class="line" href="structMTA__ZK__commitment.html#a21736668dad1cf7aba4dd40f059703e0">  294</a></span>&#160;    BIG_1024_58 z[FFLEN_2048];      </div>
+<div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment.html#a63a83d96029b8e935c16b11c07d0b69a">  295</a></span>&#160;    BIG_1024_58 z1[FFLEN_2048];     </div>
+<div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment.html#ab7f5f3c057c0c12ccae9e1b1667a6cfc">  296</a></span>&#160;    BIG_1024_58 t[FFLEN_2048];      </div>
+<div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment.html#a8c05e4faf0896ddb85501e02a80953ca">  297</a></span>&#160;    BIG_1024_58 v[2 * FFLEN_2048];  </div>
+<div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="structMTA__ZK__commitment.html#a9ff382fe3ce3795f79bb29c8f2ed738a">  298</a></span>&#160;    BIG_1024_58 w[FFLEN_2048];      </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;} <a class="code" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a>;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160; </div>
+<div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="structMTA__ZK__proof.html">  302</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;{</div>
+<div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="structMTA__ZK__proof.html#a34c86cae80dc0f8688cd1f7d5f1801ab">  304</a></span>&#160;    BIG_1024_58 s[FFLEN_2048];                </div>
+<div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="structMTA__ZK__proof.html#a44224d752605c42e4ec583442eb6a61a">  305</a></span>&#160;    BIG_1024_58 s1[FFLEN_2048];               </div>
+<div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="structMTA__ZK__proof.html#a4141b24bb3ad79318884ac0facb65800">  306</a></span>&#160;    BIG_1024_58 s2[FFLEN_2048 + HFLEN_2048];  </div>
+<div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="structMTA__ZK__proof.html#a2555d0e4789621eff8dc79cf96276860">  307</a></span>&#160;    BIG_1024_58 t1[FFLEN_2048];               </div>
+<div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="structMTA__ZK__proof.html#affd6b54dc1a58cdc23ac27746c5eb31b">  308</a></span>&#160;    BIG_1024_58 t2[FFLEN_2048 + HFLEN_2048];  </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;} <a class="code" href="structMTA__ZK__proof.html">MTA_ZK_proof</a>;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160; </div>
+<div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="mta_8h.html#a882f4c5922a453293eaaa7e3ec876bdf">  339</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a882f4c5922a453293eaaa7e3ec876bdf">MTA_ZK_commit</a>(csprng *RNG, PAILLIER_public_key *key, <a class="code" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *mod,  octet *X, octet *Y, octet *C1, <a class="code" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *c, <a class="code" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a> *rv);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160; </div>
+<div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="mta_8h.html#a437965ad4a0dd602a0c1a4339afb0cb6">  356</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a437965ad4a0dd602a0c1a4339afb0cb6">MTA_ZK_challenge</a>(PAILLIER_public_key *key, <a class="code" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *mod, <span class="keyword">const</span> octet *C1, <span class="keyword">const</span> octet *C2, <a class="code" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *c, octet *E);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160; </div>
+<div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="mta_8h.html#a275057a0134ee0cbef05e1c719f3f94b">  378</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a275057a0134ee0cbef05e1c719f3f94b">MTA_ZK_prove</a>(PAILLIER_public_key *key, <a class="code" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a> *rv, octet *X, octet *Y, octet *R, octet *E, <a class="code" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> *p);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160; </div>
+<div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="mta_8h.html#a34fa2c06ff8a165243621fe6d32a4b64">  400</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="mta_8h.html#a34fa2c06ff8a165243621fe6d32a4b64">MTA_ZK_verify</a>(PAILLIER_private_key *key, <a class="code" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *mod, octet *C1, octet *C2, octet *E, <a class="code" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *c, <a class="code" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> *p);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160; </div>
+<div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="mta_8h.html#afa9bc2f3876442f8519c67c011d4b0c5">  411</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#afa9bc2f3876442f8519c67c011d4b0c5">MTA_ZK_commitment_toOctets</a>(octet *Z, octet *Z1, octet *T, octet *V, octet *W, <a class="code" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *c);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160; </div>
+<div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="mta_8h.html#ad9cb35ed95b1ad3367fd78437e98aad5">  422</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#ad9cb35ed95b1ad3367fd78437e98aad5">MTA_ZK_commitment_fromOctets</a>(<a class="code" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> *c, octet *Z, octet *Z1, octet *T, octet *V, octet *W);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160; </div>
+<div class="line"><a name="l00433"></a><span class="lineno"><a class="line" href="mta_8h.html#ae4cc541c94044beaf3a46cd5415da370">  433</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#ae4cc541c94044beaf3a46cd5415da370">MTA_ZK_proof_toOctets</a>(octet *S, octet *S1, octet *S2, octet *T1, octet *T2, <a class="code" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> *p);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160; </div>
+<div class="line"><a name="l00444"></a><span class="lineno"><a class="line" href="mta_8h.html#a4d280db3b810c0d69603a8ee97222565">  444</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a4d280db3b810c0d69603a8ee97222565">MTA_ZK_proof_fromOctets</a>(<a class="code" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> *p, octet *S, octet *S1, octet *S2, octet *T1, octet *T2);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160; </div>
+<div class="line"><a name="l00450"></a><span class="lineno"><a class="line" href="mta_8h.html#a50085c31f3df46ac6814c46064ed2826">  450</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a50085c31f3df46ac6814c46064ed2826">MTA_ZK_commitment_rv_kill</a>(<a class="code" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a> *rv);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160; </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;<span class="comment">/* Receiver Zero Knowledge Proof with Check API */</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160; </div>
+<div class="line"><a name="l00455"></a><span class="lineno"><a class="line" href="mta_8h.html#a520066c511d8661c3ebfe4c2a612a046">  455</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a> <a class="code" href="mta_8h.html#a520066c511d8661c3ebfe4c2a612a046">MTA_ZKWC_commitment_rv</a>;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160; </div>
+<div class="line"><a name="l00458"></a><span class="lineno"><a class="line" href="structMTA__ZKWC__commitment.html">  458</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;{</div>
+<div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="structMTA__ZKWC__commitment.html#a7025ae8eb9f30ddb6b6d601fd49a1da6">  460</a></span>&#160;    <a class="code" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> <a class="code" href="structMTA__ZKWC__commitment.html#a7025ae8eb9f30ddb6b6d601fd49a1da6">zkc</a>;    </div>
+<div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="structMTA__ZKWC__commitment.html#a6906ba960255cecf7cf29848dc40b9cc">  461</a></span>&#160;    ECP_SECP256K1 <a class="code" href="structMTA__ZKWC__commitment.html#a6906ba960255cecf7cf29848dc40b9cc">U</a>;          </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;} <a class="code" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a>;</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160; </div>
+<div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">  465</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="structMTA__ZK__proof.html">MTA_ZK_proof</a> <a class="code" href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">MTA_ZKWC_proof</a>;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160; </div>
+<div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="mta_8h.html#a61bd2519a246c273ce42da382732c489">  496</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a61bd2519a246c273ce42da382732c489">MTA_ZKWC_commit</a>(csprng *RNG, PAILLIER_public_key *key, <a class="code" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *mod,  octet *X, octet *Y, octet *C1, <a class="code" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *c, <a class="code" href="structMTA__ZK__commitment__rv.html">MTA_ZKWC_commitment_rv</a> *rv);</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160; </div>
+<div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="mta_8h.html#a4dd5d4b2d4fc3e530632fb61b56c3f25">  514</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a4dd5d4b2d4fc3e530632fb61b56c3f25">MTA_ZKWC_challenge</a>(PAILLIER_public_key *key, <a class="code" href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a> *mod, <span class="keyword">const</span> octet *C1, <span class="keyword">const</span> octet *C2, <span class="keyword">const</span> octet *X, <a class="code" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *c, octet *E);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160; </div>
+<div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="mta_8h.html#aec434d125d9f299a78388524ef5f0c51">  539</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#aec434d125d9f299a78388524ef5f0c51">MTA_ZKWC_prove</a>(PAILLIER_public_key *key, <a class="code" href="structMTA__ZK__commitment__rv.html">MTA_ZKWC_commitment_rv</a> *rv, octet *X, octet *Y, octet *R, octet *E, <a class="code" href="structMTA__ZK__proof.html">MTA_ZKWC_proof</a> *p);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160; </div>
+<div class="line"><a name="l00564"></a><span class="lineno"><a class="line" href="mta_8h.html#aec8c96b0b4983b7e16bdcf7f24b16c08">  564</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="mta_8h.html#aec8c96b0b4983b7e16bdcf7f24b16c08">MTA_ZKWC_verify</a>(PAILLIER_private_key *key, <a class="code" href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a> *mod, octet *C1, octet *C2, octet *X, octet *E, <a class="code" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *c, <a class="code" href="structMTA__ZK__proof.html">MTA_ZKWC_proof</a> *p);</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160; </div>
+<div class="line"><a name="l00576"></a><span class="lineno"><a class="line" href="mta_8h.html#ab2611cfca7b4350f0921d56a3aed3185">  576</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#ab2611cfca7b4350f0921d56a3aed3185">MTA_ZKWC_commitment_toOctets</a>(octet *U, octet *Z, octet *Z1, octet *T, octet *V, octet *W, <a class="code" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *c);</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160; </div>
+<div class="line"><a name="l00589"></a><span class="lineno"><a class="line" href="mta_8h.html#a051196472aca3ad711f8c8f9f39280ce">  589</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="mta_8h.html#a051196472aca3ad711f8c8f9f39280ce">MTA_ZKWC_commitment_fromOctets</a>(<a class="code" href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a> *c, octet *U, octet *Z, octet *Z1, octet *T, octet *V, octet *W);</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160; </div>
+<div class="line"><a name="l00600"></a><span class="lineno"><a class="line" href="mta_8h.html#a127a8be76fdcde455e6d8645fcc93362">  600</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#a127a8be76fdcde455e6d8645fcc93362">MTA_ZKWC_proof_toOctets</a>(octet *S, octet *S1, octet *S2, octet *T1, octet *T2, <a class="code" href="structMTA__ZK__proof.html">MTA_ZKWC_proof</a> *p);</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160; </div>
+<div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="mta_8h.html#afdc55dcddd98123e60590190425edab3">  611</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#afdc55dcddd98123e60590190425edab3">MTA_ZKWC_proof_fromOctets</a>(<a class="code" href="structMTA__ZK__proof.html">MTA_ZKWC_proof</a> *p, octet *S, octet *S1, octet *S2, octet *T1, octet *T2);</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160; </div>
+<div class="line"><a name="l00617"></a><span class="lineno"><a class="line" href="mta_8h.html#adc4cbeae2c13b0e005c70532d2f96e46">  617</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="mta_8h.html#adc4cbeae2c13b0e005c70532d2f96e46">MTA_ZKWC_commitment_rv_kill</a>(<a class="code" href="structMTA__ZK__commitment__rv.html">MTA_ZKWC_commitment_rv</a> *rv);</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160; </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;}</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160; </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="acommitments_8h_html"><div class="ttname"><a href="commitments_8h.html">commitments.h</a></div><div class="ttdoc">Commitment schemes declarations.</div></div>
+<div class="ttc" id="amta_8h_html_a051196472aca3ad711f8c8f9f39280ce"><div class="ttname"><a href="mta_8h.html#a051196472aca3ad711f8c8f9f39280ce">MTA_ZKWC_commitment_fromOctets</a></div><div class="ttdeci">int MTA_ZKWC_commitment_fromOctets(MTA_ZKWC_commitment *c, octet *U, octet *Z, octet *Z1, octet *T, octet *V, octet *W)</div><div class="ttdoc">Read the commitments from octets.</div></div>
+<div class="ttc" id="amta_8h_html_a127a8be76fdcde455e6d8645fcc93362"><div class="ttname"><a href="mta_8h.html#a127a8be76fdcde455e6d8645fcc93362">MTA_ZKWC_proof_toOctets</a></div><div class="ttdeci">void MTA_ZKWC_proof_toOctets(octet *S, octet *S1, octet *S2, octet *T1, octet *T2, MTA_ZKWC_proof *p)</div><div class="ttdoc">Dump the proof to octets.</div></div>
+<div class="ttc" id="amta_8h_html_a275057a0134ee0cbef05e1c719f3f94b"><div class="ttname"><a href="mta_8h.html#a275057a0134ee0cbef05e1c719f3f94b">MTA_ZK_prove</a></div><div class="ttdeci">void MTA_ZK_prove(PAILLIER_public_key *key, MTA_ZK_commitment_rv *rv, octet *X, octet *Y, octet *R, octet *E, MTA_ZK_proof *p)</div><div class="ttdoc">Proof generation for Receiver ZKP.</div></div>
+<div class="ttc" id="amta_8h_html_a34fa2c06ff8a165243621fe6d32a4b64"><div class="ttname"><a href="mta_8h.html#a34fa2c06ff8a165243621fe6d32a4b64">MTA_ZK_verify</a></div><div class="ttdeci">int MTA_ZK_verify(PAILLIER_private_key *key, COMMITMENTS_BC_priv_modulus *mod, octet *C1, octet *C2, octet *E, MTA_ZK_commitment *c, MTA_ZK_proof *p)</div><div class="ttdoc">Verify a Proof for Receiver ZKP.</div></div>
+<div class="ttc" id="amta_8h_html_a437965ad4a0dd602a0c1a4339afb0cb6"><div class="ttname"><a href="mta_8h.html#a437965ad4a0dd602a0c1a4339afb0cb6">MTA_ZK_challenge</a></div><div class="ttdeci">void MTA_ZK_challenge(PAILLIER_public_key *key, COMMITMENTS_BC_pub_modulus *mod, const octet *C1, const octet *C2, MTA_ZK_commitment *c, octet *E)</div><div class="ttdoc">Deterministic Challenge generations for Receiver ZKP.</div></div>
+<div class="ttc" id="amta_8h_html_a4c516e4898f3fbcdd55ed70ea0e336ef"><div class="ttname"><a href="mta_8h.html#a4c516e4898f3fbcdd55ed70ea0e336ef">MTA_RP_proof_toOctets</a></div><div class="ttdeci">void MTA_RP_proof_toOctets(octet *S, octet *S1, octet *S2, MTA_RP_proof *p)</div><div class="ttdoc">Dump the proof to octets.</div></div>
+<div class="ttc" id="amta_8h_html_a4d280db3b810c0d69603a8ee97222565"><div class="ttname"><a href="mta_8h.html#a4d280db3b810c0d69603a8ee97222565">MTA_ZK_proof_fromOctets</a></div><div class="ttdeci">void MTA_ZK_proof_fromOctets(MTA_ZK_proof *p, octet *S, octet *S1, octet *S2, octet *T1, octet *T2)</div><div class="ttdoc">Read the proof from octets.</div></div>
+<div class="ttc" id="amta_8h_html_a4dd5d4b2d4fc3e530632fb61b56c3f25"><div class="ttname"><a href="mta_8h.html#a4dd5d4b2d4fc3e530632fb61b56c3f25">MTA_ZKWC_challenge</a></div><div class="ttdeci">void MTA_ZKWC_challenge(PAILLIER_public_key *key, COMMITMENTS_BC_pub_modulus *mod, const octet *C1, const octet *C2, const octet *X, MTA_ZKWC_commitment *c, octet *E)</div><div class="ttdoc">Deterministic Challenge generations for Receiver ZKP with check.</div></div>
+<div class="ttc" id="amta_8h_html_a50085c31f3df46ac6814c46064ed2826"><div class="ttname"><a href="mta_8h.html#a50085c31f3df46ac6814c46064ed2826">MTA_ZK_commitment_rv_kill</a></div><div class="ttdeci">void MTA_ZK_commitment_rv_kill(MTA_ZK_commitment_rv *rv)</div><div class="ttdoc">Clean the memory containing the random values.</div></div>
+<div class="ttc" id="amta_8h_html_a520066c511d8661c3ebfe4c2a612a046"><div class="ttname"><a href="mta_8h.html#a520066c511d8661c3ebfe4c2a612a046">MTA_ZKWC_commitment_rv</a></div><div class="ttdeci">MTA_ZK_commitment_rv MTA_ZKWC_commitment_rv</div><div class="ttdoc">Secret random values for the receiver ZKP with check commitment.</div><div class="ttdef"><b>Definition:</b> mta.h:455</div></div>
+<div class="ttc" id="amta_8h_html_a585141482d0be764359316dc4aa9a345"><div class="ttname"><a href="mta_8h.html#a585141482d0be764359316dc4aa9a345">MPC_SUM_MTA</a></div><div class="ttdeci">void MPC_SUM_MTA(const octet *A, const octet *B, const octet *ALPHA, const octet *BETA, octet *SUM)</div><div class="ttdoc">Sum of secret shares.</div></div>
+<div class="ttc" id="amta_8h_html_a5f42fb5d017f34db268c112f7c8d056e"><div class="ttname"><a href="mta_8h.html#a5f42fb5d017f34db268c112f7c8d056e">MTA_RP_commitment_fromOctets</a></div><div class="ttdeci">void MTA_RP_commitment_fromOctets(MTA_RP_commitment *c, octet *Z, octet *U, octet *W)</div><div class="ttdoc">Read the commitments from octets.</div></div>
+<div class="ttc" id="amta_8h_html_a61bd2519a246c273ce42da382732c489"><div class="ttname"><a href="mta_8h.html#a61bd2519a246c273ce42da382732c489">MTA_ZKWC_commit</a></div><div class="ttdeci">void MTA_ZKWC_commit(csprng *RNG, PAILLIER_public_key *key, COMMITMENTS_BC_pub_modulus *mod, octet *X, octet *Y, octet *C1, MTA_ZKWC_commitment *c, MTA_ZKWC_commitment_rv *rv)</div><div class="ttdoc">Commitment Generation for Receiver ZKP with check.</div></div>
+<div class="ttc" id="amta_8h_html_a673e46de79006b3d5e349a0eec6bd5c5"><div class="ttname"><a href="mta_8h.html#a673e46de79006b3d5e349a0eec6bd5c5">MPC_MTA_CLIENT2</a></div><div class="ttdeci">void MPC_MTA_CLIENT2(PAILLIER_private_key *PRIV, octet *CB, octet *ALPHA)</div><div class="ttdoc">Client MtA second pass.</div></div>
+<div class="ttc" id="amta_8h_html_a7bbc83a1d90c466061839c88375576a3"><div class="ttname"><a href="mta_8h.html#a7bbc83a1d90c466061839c88375576a3">MPC_MTA_CLIENT1</a></div><div class="ttdeci">void MPC_MTA_CLIENT1(csprng *RNG, PAILLIER_public_key *PUB, octet *A, octet *CA, octet *R)</div><div class="ttdoc">Client MTA first pass.</div></div>
+<div class="ttc" id="amta_8h_html_a83d69dbe4b86adcf814bf17593066b5d"><div class="ttname"><a href="mta_8h.html#a83d69dbe4b86adcf814bf17593066b5d">MTA_RP_commitment_rv_kill</a></div><div class="ttdeci">void MTA_RP_commitment_rv_kill(MTA_RP_commitment_rv *rv)</div><div class="ttdoc">Clean the memory containing the random values.</div></div>
+<div class="ttc" id="amta_8h_html_a840590c8db0b435bece74978adf0748d"><div class="ttname"><a href="mta_8h.html#a840590c8db0b435bece74978adf0748d">MTA_RP_prove</a></div><div class="ttdeci">void MTA_RP_prove(PAILLIER_private_key *key, MTA_RP_commitment_rv *rv, octet *M, octet *R, octet *E, MTA_RP_proof *p)</div><div class="ttdoc">Proof generation.</div></div>
+<div class="ttc" id="amta_8h_html_a882f4c5922a453293eaaa7e3ec876bdf"><div class="ttname"><a href="mta_8h.html#a882f4c5922a453293eaaa7e3ec876bdf">MTA_ZK_commit</a></div><div class="ttdeci">void MTA_ZK_commit(csprng *RNG, PAILLIER_public_key *key, COMMITMENTS_BC_pub_modulus *mod, octet *X, octet *Y, octet *C1, MTA_ZK_commitment *c, MTA_ZK_commitment_rv *rv)</div><div class="ttdoc">Commitment Generation for Receiver ZKP.</div></div>
+<div class="ttc" id="amta_8h_html_a96110337c3648cc19cc1bf60f085da14"><div class="ttname"><a href="mta_8h.html#a96110337c3648cc19cc1bf60f085da14">MTA_ZKWC_proof</a></div><div class="ttdeci">MTA_ZK_proof MTA_ZKWC_proof</div><div class="ttdoc">Range Proof for the Receiver ZKP with check.</div><div class="ttdef"><b>Definition:</b> mta.h:465</div></div>
+<div class="ttc" id="amta_8h_html_a9ae812a8b7fa69ae98d8eec9db51cc83"><div class="ttname"><a href="mta_8h.html#a9ae812a8b7fa69ae98d8eec9db51cc83">MTA_RP_commit</a></div><div class="ttdeci">void MTA_RP_commit(csprng *RNG, PAILLIER_private_key *key, COMMITMENTS_BC_pub_modulus *mod, octet *M, MTA_RP_commitment *c, MTA_RP_commitment_rv *rv)</div><div class="ttdoc">Commitment Generation.</div></div>
+<div class="ttc" id="amta_8h_html_aa60c3b4a80719d29f0ebb747f3fc31a1"><div class="ttname"><a href="mta_8h.html#aa60c3b4a80719d29f0ebb747f3fc31a1">MTA_RP_commitment_toOctets</a></div><div class="ttdeci">void MTA_RP_commitment_toOctets(octet *Z, octet *U, octet *W, MTA_RP_commitment *c)</div><div class="ttdoc">Dump the commitment to octets.</div></div>
+<div class="ttc" id="amta_8h_html_aaa4c5afa267be00e1819becd53805795"><div class="ttname"><a href="mta_8h.html#aaa4c5afa267be00e1819becd53805795">MTA_RP_verify</a></div><div class="ttdeci">int MTA_RP_verify(PAILLIER_public_key *key, COMMITMENTS_BC_priv_modulus *mod, octet *CT, octet *E, MTA_RP_commitment *c, MTA_RP_proof *p)</div><div class="ttdoc">Verify a Proof.</div></div>
+<div class="ttc" id="amta_8h_html_aae8035b9c2d5b29f3ad9df3c44466e1d"><div class="ttname"><a href="mta_8h.html#aae8035b9c2d5b29f3ad9df3c44466e1d">MTA_RP_challenge</a></div><div class="ttdeci">void MTA_RP_challenge(PAILLIER_public_key *key, COMMITMENTS_BC_pub_modulus *mod, const octet *CT, MTA_RP_commitment *c, octet *E)</div><div class="ttdoc">Deterministic Challenge generations.</div></div>
+<div class="ttc" id="amta_8h_html_ab2611cfca7b4350f0921d56a3aed3185"><div class="ttname"><a href="mta_8h.html#ab2611cfca7b4350f0921d56a3aed3185">MTA_ZKWC_commitment_toOctets</a></div><div class="ttdeci">void MTA_ZKWC_commitment_toOctets(octet *U, octet *Z, octet *Z1, octet *T, octet *V, octet *W, MTA_ZKWC_commitment *c)</div><div class="ttdoc">Dump the commitment to octets.</div></div>
+<div class="ttc" id="amta_8h_html_ad60da72de670c62131bc57f9e1070c84"><div class="ttname"><a href="mta_8h.html#ad60da72de670c62131bc57f9e1070c84">MTA_RP_proof_fromOctets</a></div><div class="ttdeci">void MTA_RP_proof_fromOctets(MTA_RP_proof *p, octet *S, octet *S1, octet *S2)</div><div class="ttdoc">Read the proof from octets.</div></div>
+<div class="ttc" id="amta_8h_html_ad9cb35ed95b1ad3367fd78437e98aad5"><div class="ttname"><a href="mta_8h.html#ad9cb35ed95b1ad3367fd78437e98aad5">MTA_ZK_commitment_fromOctets</a></div><div class="ttdeci">void MTA_ZK_commitment_fromOctets(MTA_ZK_commitment *c, octet *Z, octet *Z1, octet *T, octet *V, octet *W)</div><div class="ttdoc">Read the commitments from octets.</div></div>
+<div class="ttc" id="amta_8h_html_adc4cbeae2c13b0e005c70532d2f96e46"><div class="ttname"><a href="mta_8h.html#adc4cbeae2c13b0e005c70532d2f96e46">MTA_ZKWC_commitment_rv_kill</a></div><div class="ttdeci">void MTA_ZKWC_commitment_rv_kill(MTA_ZKWC_commitment_rv *rv)</div><div class="ttdoc">Clean the memory containing the random values.</div></div>
+<div class="ttc" id="amta_8h_html_ae4971990b60c103d7cb596c9a0d1d205"><div class="ttname"><a href="mta_8h.html#ae4971990b60c103d7cb596c9a0d1d205">MTA_ZK_random_challenge</a></div><div class="ttdeci">void MTA_ZK_random_challenge(csprng *RNG, octet *E)</div><div class="ttdoc">Random challenge for any of the ZK Proofs.</div></div>
+<div class="ttc" id="amta_8h_html_ae4cc541c94044beaf3a46cd5415da370"><div class="ttname"><a href="mta_8h.html#ae4cc541c94044beaf3a46cd5415da370">MTA_ZK_proof_toOctets</a></div><div class="ttdeci">void MTA_ZK_proof_toOctets(octet *S, octet *S1, octet *S2, octet *T1, octet *T2, MTA_ZK_proof *p)</div><div class="ttdoc">Dump the proof to octets.</div></div>
+<div class="ttc" id="amta_8h_html_aec434d125d9f299a78388524ef5f0c51"><div class="ttname"><a href="mta_8h.html#aec434d125d9f299a78388524ef5f0c51">MTA_ZKWC_prove</a></div><div class="ttdeci">void MTA_ZKWC_prove(PAILLIER_public_key *key, MTA_ZKWC_commitment_rv *rv, octet *X, octet *Y, octet *R, octet *E, MTA_ZKWC_proof *p)</div><div class="ttdoc">Proof generation for Receiver ZKP with check.</div></div>
+<div class="ttc" id="amta_8h_html_aec8c96b0b4983b7e16bdcf7f24b16c08"><div class="ttname"><a href="mta_8h.html#aec8c96b0b4983b7e16bdcf7f24b16c08">MTA_ZKWC_verify</a></div><div class="ttdeci">int MTA_ZKWC_verify(PAILLIER_private_key *key, COMMITMENTS_BC_priv_modulus *mod, octet *C1, octet *C2, octet *X, octet *E, MTA_ZKWC_commitment *c, MTA_ZKWC_proof *p)</div><div class="ttdoc">Verify a Proof for Receiver ZKP with check.</div></div>
+<div class="ttc" id="amta_8h_html_af6150f97b1d2df1d70ec419211d37592"><div class="ttname"><a href="mta_8h.html#af6150f97b1d2df1d70ec419211d37592">MPC_MTA_SERVER</a></div><div class="ttdeci">void MPC_MTA_SERVER(csprng *RNG, PAILLIER_public_key *PUB, octet *B, octet *CA, octet *Z, octet *R, octet *CB, octet *BETA)</div><div class="ttdoc">Server MtA.</div></div>
+<div class="ttc" id="amta_8h_html_afa9bc2f3876442f8519c67c011d4b0c5"><div class="ttname"><a href="mta_8h.html#afa9bc2f3876442f8519c67c011d4b0c5">MTA_ZK_commitment_toOctets</a></div><div class="ttdeci">void MTA_ZK_commitment_toOctets(octet *Z, octet *Z1, octet *T, octet *V, octet *W, MTA_ZK_commitment *c)</div><div class="ttdoc">Dump the commitment to octets.</div></div>
+<div class="ttc" id="amta_8h_html_afdc55dcddd98123e60590190425edab3"><div class="ttname"><a href="mta_8h.html#afdc55dcddd98123e60590190425edab3">MTA_ZKWC_proof_fromOctets</a></div><div class="ttdeci">void MTA_ZKWC_proof_fromOctets(MTA_ZKWC_proof *p, octet *S, octet *S1, octet *S2, octet *T1, octet *T2)</div><div class="ttdoc">Read the proof from octets.</div></div>
+<div class="ttc" id="astructCOMMITMENTS__BC__priv__modulus_html"><div class="ttname"><a href="structCOMMITMENTS__BC__priv__modulus.html">COMMITMENTS_BC_priv_modulus</a></div><div class="ttdoc">RSA modulus for Bit Commitment.</div><div class="ttdef"><b>Definition:</b> commitments.h:71</div></div>
+<div class="ttc" id="astructCOMMITMENTS__BC__pub__modulus_html"><div class="ttname"><a href="structCOMMITMENTS__BC__pub__modulus.html">COMMITMENTS_BC_pub_modulus</a></div><div class="ttdoc">Public RSA modulus for Bit Commitment.</div><div class="ttdef"><b>Definition:</b> commitments.h:85</div></div>
+<div class="ttc" id="astructMTA__RP__commitment__rv_html"><div class="ttname"><a href="structMTA__RP__commitment__rv.html">MTA_RP_commitment_rv</a></div><div class="ttdoc">Secret random values for the Range Proof commitment.</div><div class="ttdef"><b>Definition:</b> mta.h:134</div></div>
+<div class="ttc" id="astructMTA__RP__commitment_html"><div class="ttname"><a href="structMTA__RP__commitment.html">MTA_RP_commitment</a></div><div class="ttdoc">Public commitment for the Range Proof.</div><div class="ttdef"><b>Definition:</b> mta.h:143</div></div>
+<div class="ttc" id="astructMTA__RP__proof_html"><div class="ttname"><a href="structMTA__RP__proof.html">MTA_RP_proof</a></div><div class="ttdoc">Range Proof.</div><div class="ttdef"><b>Definition:</b> mta.h:151</div></div>
+<div class="ttc" id="astructMTA__ZKWC__commitment_html"><div class="ttname"><a href="structMTA__ZKWC__commitment.html">MTA_ZKWC_commitment</a></div><div class="ttdoc">Public commitment for the Receiver ZKP with check.</div><div class="ttdef"><b>Definition:</b> mta.h:459</div></div>
+<div class="ttc" id="astructMTA__ZKWC__commitment_html_a6906ba960255cecf7cf29848dc40b9cc"><div class="ttname"><a href="structMTA__ZKWC__commitment.html#a6906ba960255cecf7cf29848dc40b9cc">MTA_ZKWC_commitment::U</a></div><div class="ttdeci">ECP_SECP256K1 U</div><div class="ttdef"><b>Definition:</b> mta.h:461</div></div>
+<div class="ttc" id="astructMTA__ZKWC__commitment_html_a7025ae8eb9f30ddb6b6d601fd49a1da6"><div class="ttname"><a href="structMTA__ZKWC__commitment.html#a7025ae8eb9f30ddb6b6d601fd49a1da6">MTA_ZKWC_commitment::zkc</a></div><div class="ttdeci">MTA_ZK_commitment zkc</div><div class="ttdef"><b>Definition:</b> mta.h:460</div></div>
+<div class="ttc" id="astructMTA__ZK__commitment__rv_html"><div class="ttname"><a href="structMTA__ZK__commitment__rv.html">MTA_ZK_commitment_rv</a></div><div class="ttdoc">Secret random values for the receiver ZKP commitment.</div><div class="ttdef"><b>Definition:</b> mta.h:281</div></div>
+<div class="ttc" id="astructMTA__ZK__commitment_html"><div class="ttname"><a href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a></div><div class="ttdoc">Public commitment for the Receiver ZKP.</div><div class="ttdef"><b>Definition:</b> mta.h:293</div></div>
+<div class="ttc" id="astructMTA__ZK__proof_html"><div class="ttname"><a href="structMTA__ZK__proof.html">MTA_ZK_proof</a></div><div class="ttdoc">Range Proof for the Receiver ZKP.</div><div class="ttdef"><b>Definition:</b> mta.h:303</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/nav_f.png b/website/static/mpcdocs/nav_f.png
new file mode 100644
index 0000000..72a58a5
--- /dev/null
+++ b/website/static/mpcdocs/nav_f.png
Binary files differ
diff --git a/website/static/mpcdocs/nav_g.png b/website/static/mpcdocs/nav_g.png
new file mode 100644
index 0000000..2093a23
--- /dev/null
+++ b/website/static/mpcdocs/nav_g.png
Binary files differ
diff --git a/website/static/mpcdocs/nav_h.png b/website/static/mpcdocs/nav_h.png
new file mode 100644
index 0000000..33389b1
--- /dev/null
+++ b/website/static/mpcdocs/nav_h.png
Binary files differ
diff --git a/website/static/mpcdocs/open.png b/website/static/mpcdocs/open.png
new file mode 100644
index 0000000..30f75c7
--- /dev/null
+++ b/website/static/mpcdocs/open.png
Binary files differ
diff --git a/website/static/mpcdocs/pages.html b/website/static/mpcdocs/pages.html
new file mode 100644
index 0000000..677403a
--- /dev/null
+++ b/website/static/mpcdocs/pages.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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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="linux.html" target="_self">Linux</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="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/schnorr_8h.html b/website/static/mpcdocs/schnorr_8h.html
new file mode 100644
index 0000000..ffc319a
--- /dev/null
+++ b/website/static/mpcdocs/schnorr_8h.html
@@ -0,0 +1,699 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: schnorr.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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_a166689341c37329f24f96bdba87a08b.html">amcl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">schnorr.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Schnorr's proofs declarations.  
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;amcl/amcl.h&quot;</code><br />
+<code>#include &quot;amcl/big_256_56.h&quot;</code><br />
+<code>#include &quot;amcl/ecp_SECP256K1.h&quot;</code><br />
+</div>
+<p><a href="schnorr_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="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ab5bcf782e8f2fcd1404d5de3b85707fd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#ab5bcf782e8f2fcd1404d5de3b85707fd">SGS_SECP256K1</a>&#160;&#160;&#160;MODBYTES_256_56</td></tr>
+<tr class="separator:ab5bcf782e8f2fcd1404d5de3b85707fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9d25d694a29331ea767179901f8ae601"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#a9d25d694a29331ea767179901f8ae601">SFS_SECP256K1</a>&#160;&#160;&#160;MODBYTES_256_56</td></tr>
+<tr class="separator:a9d25d694a29331ea767179901f8ae601"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a88f5f29dd2b59260b70ffcbc5f44c326"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#a88f5f29dd2b59260b70ffcbc5f44c326">SCHNORR_OK</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a88f5f29dd2b59260b70ffcbc5f44c326"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4a5402fd8a88039b3f9cad0f508eec31"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#a4a5402fd8a88039b3f9cad0f508eec31">SCHNORR_FAIL</a>&#160;&#160;&#160;51</td></tr>
+<tr class="separator:a4a5402fd8a88039b3f9cad0f508eec31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aacf81adc639d9529432d969dca09eb71"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#aacf81adc639d9529432d969dca09eb71">SCHNORR_INVALID_ECP</a>&#160;&#160;&#160;52</td></tr>
+<tr class="separator:aacf81adc639d9529432d969dca09eb71"><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:ab8e7127fb5812f3592da6ebf08b57512"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#ab8e7127fb5812f3592da6ebf08b57512">SCHNORR_random_challenge</a> (csprng *RNG, octet *E)</td></tr>
+<tr class="memdesc:ab8e7127fb5812f3592da6ebf08b57512"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate random challenge for any Schnorr Proof.  <a href="schnorr_8h.html#ab8e7127fb5812f3592da6ebf08b57512">More...</a><br /></td></tr>
+<tr class="separator:ab8e7127fb5812f3592da6ebf08b57512"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa8b82a3a089695a803f100b4a861c59b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#aa8b82a3a089695a803f100b4a861c59b">SCHNORR_commit</a> (csprng *RNG, octet *R, octet *C)</td></tr>
+<tr class="memdesc:aa8b82a3a089695a803f100b4a861c59b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate a commitment for the proof.  <a href="schnorr_8h.html#aa8b82a3a089695a803f100b4a861c59b">More...</a><br /></td></tr>
+<tr class="separator:aa8b82a3a089695a803f100b4a861c59b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a743028db55e66f4d30699e72a1b0bf1f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#a743028db55e66f4d30699e72a1b0bf1f">SCHNORR_challenge</a> (const octet *V, const octet *C, const octet *ID, const octet *AD, octet *E)</td></tr>
+<tr class="memdesc:a743028db55e66f4d30699e72a1b0bf1f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate the challenge for the proof.  <a href="schnorr_8h.html#a743028db55e66f4d30699e72a1b0bf1f">More...</a><br /></td></tr>
+<tr class="separator:a743028db55e66f4d30699e72a1b0bf1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a874b17623254bc1701d1f25459770200"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#a874b17623254bc1701d1f25459770200">SCHNORR_prove</a> (const octet *R, const octet *E, const octet *X, octet *P)</td></tr>
+<tr class="memdesc:a874b17623254bc1701d1f25459770200"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate the proof for the given commitment and challenge.  <a href="schnorr_8h.html#a874b17623254bc1701d1f25459770200">More...</a><br /></td></tr>
+<tr class="separator:a874b17623254bc1701d1f25459770200"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f6c493e5b3acdc97acb0af7a0389723"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#a5f6c493e5b3acdc97acb0af7a0389723">SCHNORR_verify</a> (octet *V, octet *C, const octet *E, const octet *P)</td></tr>
+<tr class="memdesc:a5f6c493e5b3acdc97acb0af7a0389723"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify the proof of knowledge for the DLOG.  <a href="schnorr_8h.html#a5f6c493e5b3acdc97acb0af7a0389723">More...</a><br /></td></tr>
+<tr class="separator:a5f6c493e5b3acdc97acb0af7a0389723"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a20d267a63789b45faaf9b82018116268"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#a20d267a63789b45faaf9b82018116268">SCHNORR_D_commit</a> (csprng *RNG, octet *R, octet *A, octet *B, octet *C)</td></tr>
+<tr class="memdesc:a20d267a63789b45faaf9b82018116268"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate a commitment for the proof.  <a href="schnorr_8h.html#a20d267a63789b45faaf9b82018116268">More...</a><br /></td></tr>
+<tr class="separator:a20d267a63789b45faaf9b82018116268"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad72917e4d1d2e9167c47062b4939dffb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#ad72917e4d1d2e9167c47062b4939dffb">SCHNORR_D_challenge</a> (const octet *R, const octet *V, const octet *C, const octet *ID, const octet *AD, octet *E)</td></tr>
+<tr class="memdesc:ad72917e4d1d2e9167c47062b4939dffb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate the challenge for the proof.  <a href="schnorr_8h.html#ad72917e4d1d2e9167c47062b4939dffb">More...</a><br /></td></tr>
+<tr class="separator:ad72917e4d1d2e9167c47062b4939dffb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a726141bddf04f630fe06e2f13a3d28e5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#a726141bddf04f630fe06e2f13a3d28e5">SCHNORR_D_prove</a> (const octet *A, const octet *B, const octet *E, const octet *S, const octet *L, octet *T, octet *U)</td></tr>
+<tr class="memdesc:a726141bddf04f630fe06e2f13a3d28e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate the proof for the given commitment and challenge.  <a href="schnorr_8h.html#a726141bddf04f630fe06e2f13a3d28e5">More...</a><br /></td></tr>
+<tr class="separator:a726141bddf04f630fe06e2f13a3d28e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab1c768caccc24700b28050962b603898"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="schnorr_8h.html#ab1c768caccc24700b28050962b603898">SCHNORR_D_verify</a> (octet *R, octet *V, octet *C, const octet *E, const octet *T, const octet *U)</td></tr>
+<tr class="memdesc:ab1c768caccc24700b28050962b603898"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify the proof of knowledge for the DLOG.  <a href="schnorr_8h.html#ab1c768caccc24700b28050962b603898">More...</a><br /></td></tr>
+<tr class="separator:ab1c768caccc24700b28050962b603898"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a4a5402fd8a88039b3f9cad0f508eec31"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a5402fd8a88039b3f9cad0f508eec31">&#9670;&nbsp;</a></span>SCHNORR_FAIL</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SCHNORR_FAIL&#160;&#160;&#160;51</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Invalid proof </p>
+
+</div>
+</div>
+<a id="aacf81adc639d9529432d969dca09eb71"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aacf81adc639d9529432d969dca09eb71">&#9670;&nbsp;</a></span>SCHNORR_INVALID_ECP</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SCHNORR_INVALID_ECP&#160;&#160;&#160;52</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Not a valid point on the curve </p>
+
+</div>
+</div>
+<a id="a88f5f29dd2b59260b70ffcbc5f44c326"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a88f5f29dd2b59260b70ffcbc5f44c326">&#9670;&nbsp;</a></span>SCHNORR_OK</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SCHNORR_OK&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Valid proof </p>
+
+</div>
+</div>
+<a id="a9d25d694a29331ea767179901f8ae601"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9d25d694a29331ea767179901f8ae601">&#9670;&nbsp;</a></span>SFS_SECP256K1</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SFS_SECP256K1&#160;&#160;&#160;MODBYTES_256_56</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Schnorr Field Size </p>
+
+</div>
+</div>
+<a id="ab5bcf782e8f2fcd1404d5de3b85707fd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab5bcf782e8f2fcd1404d5de3b85707fd">&#9670;&nbsp;</a></span>SGS_SECP256K1</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SGS_SECP256K1&#160;&#160;&#160;MODBYTES_256_56</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Schnorr Group Size </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a743028db55e66f4d30699e72a1b0bf1f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a743028db55e66f4d30699e72a1b0bf1f">&#9670;&nbsp;</a></span>SCHNORR_challenge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SCHNORR_challenge </td>
+          <td>(</td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>V</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>ID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>AD</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Compute the challenge for the proof as described in RFC8235::section-3.3</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">V</td><td>Public ECP of the DLOG. V = x.G. Compressed form </td></tr>
+    <tr><td class="paramname">C</td><td>Public commitment value. Compressed form </td></tr>
+    <tr><td class="paramname">ID</td><td>Prover unique identifier </td></tr>
+    <tr><td class="paramname">AD</td><td>Additional data to bind in the challenge - Optional </td></tr>
+    <tr><td class="paramname">E</td><td>Challenge generated </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="aa8b82a3a089695a803f100b4a861c59b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa8b82a3a089695a803f100b4a861c59b">&#9670;&nbsp;</a></span>SCHNORR_commit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SCHNORR_commit </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>C</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>CSPRNG to use for commitment </td></tr>
+    <tr><td class="paramname">R</td><td>Secret value used for the commitment. If RNG is NULL this is read </td></tr>
+    <tr><td class="paramname">C</td><td>Public commitment value. An ECP </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ad72917e4d1d2e9167c47062b4939dffb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad72917e4d1d2e9167c47062b4939dffb">&#9670;&nbsp;</a></span>SCHNORR_D_challenge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SCHNORR_D_challenge </td>
+          <td>(</td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>V</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>ID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>AD</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Compute the challenge for the proof. RFC8235::section-3.3 can not be applied here, but we try to follow closely by treating R like a secondary generator. Returns H(G, R, C, V, ID[, AD])</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">V</td><td>Public ECP result of the DLOG. V = s.R + l.G. Compressed form </td></tr>
+    <tr><td class="paramname">R</td><td>Public ECP base of the DLOG. Compressed form </td></tr>
+    <tr><td class="paramname">C</td><td>Public commitment value. Compressed form </td></tr>
+    <tr><td class="paramname">ID</td><td>Prover unique identifier </td></tr>
+    <tr><td class="paramname">AD</td><td>Additional data to bind in the challenge - Optional </td></tr>
+    <tr><td class="paramname">E</td><td>Challenge generated </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a20d267a63789b45faaf9b82018116268"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a20d267a63789b45faaf9b82018116268">&#9670;&nbsp;</a></span>SCHNORR_D_commit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int SCHNORR_D_commit </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>C</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">RNG</td><td>CSPRNG to use for commitment </td></tr>
+    <tr><td class="paramname">R</td><td>Public ECP base of the DLOG. Compressed form </td></tr>
+    <tr><td class="paramname">A</td><td>Secret value used for the commitment. If RNG is NULL this is read </td></tr>
+    <tr><td class="paramname">B</td><td>Secret value used for the commitment. If RNG is NULL this is read </td></tr>
+    <tr><td class="paramname">C</td><td>Public commitment value. An ECP in compressed form </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>SCHNORR_INVALID_ECP if R is not a valid ECP, SCHNORR_OK otherwise </dd></dl>
+
+</div>
+</div>
+<a id="a726141bddf04f630fe06e2f13a3d28e5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a726141bddf04f630fe06e2f13a3d28e5">&#9670;&nbsp;</a></span>SCHNORR_D_prove()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SCHNORR_D_prove </td>
+          <td>(</td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>A</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>B</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>E</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>S</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>L</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>T</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>U</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">A</td><td>Secret value used for the commitment </td></tr>
+    <tr><td class="paramname">B</td><td>Secret value used for the commitment </td></tr>
+    <tr><td class="paramname">E</td><td>Challenge received from the verifier </td></tr>
+    <tr><td class="paramname">S</td><td>Secret exponent of the DLOG. V = s.R + l.G </td></tr>
+    <tr><td class="paramname">L</td><td>Secret exponent of the DLOG. V = s.R + l.G </td></tr>
+    <tr><td class="paramname">T</td><td>First component of the proof of knowledge of the DLOG </td></tr>
+    <tr><td class="paramname">U</td><td>Second component of the proof of knowledge of the DLOG </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ab1c768caccc24700b28050962b603898"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab1c768caccc24700b28050962b603898">&#9670;&nbsp;</a></span>SCHNORR_D_verify()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int SCHNORR_D_verify </td>
+          <td>(</td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>V</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>E</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>T</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>U</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">R</td><td>Public ECP base of the DLOG. Compressed form </td></tr>
+    <tr><td class="paramname">V</td><td>Public ECP of the DLOG. V = s.R + l.G. Compressed form </td></tr>
+    <tr><td class="paramname">C</td><td>Commitment value received from the prover </td></tr>
+    <tr><td class="paramname">E</td><td>Challenge for the Schnorr Proof </td></tr>
+    <tr><td class="paramname">T</td><td>First component of the proof received </td></tr>
+    <tr><td class="paramname">U</td><td>Second component of the proof received </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>SCHNORR_OK if the prove is valid or an error code </dd></dl>
+
+</div>
+</div>
+<a id="a874b17623254bc1701d1f25459770200"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a874b17623254bc1701d1f25459770200">&#9670;&nbsp;</a></span>SCHNORR_prove()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SCHNORR_prove </td>
+          <td>(</td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>R</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>E</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>X</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>P</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">R</td><td>Secret value used for the commitment </td></tr>
+    <tr><td class="paramname">E</td><td>Challenge received from the verifier </td></tr>
+    <tr><td class="paramname">X</td><td>Secret exponent of the DLOG. V = x.G </td></tr>
+    <tr><td class="paramname">P</td><td>Proof of knowledge of the DLOG </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ab8e7127fb5812f3592da6ebf08b57512"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab8e7127fb5812f3592da6ebf08b57512">&#9670;&nbsp;</a></span>SCHNORR_random_challenge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void SCHNORR_random_challenge </td>
+          <td>(</td>
+          <td class="paramtype">csprng *&#160;</td>
+          <td class="paramname"><em>RNG</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>E</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generate a random challenge that can be used to make any of the following Schnorr Proofs interactive. This can be used to be interoperable with other implementations. </p>
+
+</div>
+</div>
+<a id="a5f6c493e5b3acdc97acb0af7a0389723"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f6c493e5b3acdc97acb0af7a0389723">&#9670;&nbsp;</a></span>SCHNORR_verify()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int SCHNORR_verify </td>
+          <td>(</td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>V</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">octet *&#160;</td>
+          <td class="paramname"><em>C</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>E</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const octet *&#160;</td>
+          <td class="paramname"><em>P</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">V</td><td>Public ECP of the DLOG. V = x.G </td></tr>
+    <tr><td class="paramname">C</td><td>Commitment value received from the prover </td></tr>
+    <tr><td class="paramname">E</td><td>Challenge for the Schnorr Proof </td></tr>
+    <tr><td class="paramname">P</td><td>Proof received from the prover </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>SCHNORR_OK if the prove is valid or an error code </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/schnorr_8h_source.html b/website/static/mpcdocs/schnorr_8h_source.html
new file mode 100644
index 0000000..958edce
--- /dev/null
+++ b/website/static/mpcdocs/schnorr_8h_source.html
@@ -0,0 +1,162 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: schnorr.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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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 id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_a166689341c37329f24f96bdba87a08b.html">amcl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">schnorr.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="schnorr_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="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">&quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">  http://www.apache.org/licenses/LICENSE-2.0</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;<span class="comment">Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">&quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#ifndef SCHNORR_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#define SCHNORR_H</span></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;<span class="preprocessor">#include &quot;amcl/amcl.h&quot;</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &quot;amcl/big_256_56.h&quot;</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &quot;amcl/ecp_SECP256K1.h&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;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span></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;<span class="preprocessor">#endif</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;<span class="comment">/* Field size is assumed to be greater than or equal to group size */</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="schnorr_8h.html#ab5bcf782e8f2fcd1404d5de3b85707fd">   40</a></span>&#160;<span class="preprocessor">#define SGS_SECP256K1 MODBYTES_256_56  </span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="schnorr_8h.html#a9d25d694a29331ea767179901f8ae601">   41</a></span>&#160;<span class="preprocessor">#define SFS_SECP256K1 MODBYTES_256_56  </span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="schnorr_8h.html#a88f5f29dd2b59260b70ffcbc5f44c326">   43</a></span>&#160;<span class="preprocessor">#define SCHNORR_OK          0   </span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="schnorr_8h.html#a4a5402fd8a88039b3f9cad0f508eec31">   44</a></span>&#160;<span class="preprocessor">#define SCHNORR_FAIL          51  </span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="schnorr_8h.html#aacf81adc639d9529432d969dca09eb71">   45</a></span>&#160;<span class="preprocessor">#define SCHNORR_INVALID_ECP 52  </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="schnorr_8h.html#ab8e7127fb5812f3592da6ebf08b57512">   53</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="schnorr_8h.html#ab8e7127fb5812f3592da6ebf08b57512">SCHNORR_random_challenge</a>(csprng *RNG, octet *E);</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="comment">/* Classic Schnorr&#39;s proofs API */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160; </div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="schnorr_8h.html#aa8b82a3a089695a803f100b4a861c59b">   63</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="schnorr_8h.html#aa8b82a3a089695a803f100b4a861c59b">SCHNORR_commit</a>(csprng *RNG, octet *R, octet *C);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160; </div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="schnorr_8h.html#a743028db55e66f4d30699e72a1b0bf1f">   75</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="schnorr_8h.html#a743028db55e66f4d30699e72a1b0bf1f">SCHNORR_challenge</a>(<span class="keyword">const</span> octet *V, <span class="keyword">const</span> octet *C, <span class="keyword">const</span> octet *ID, <span class="keyword">const</span> octet *AD, octet *E);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160; </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="schnorr_8h.html#a874b17623254bc1701d1f25459770200">   84</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="schnorr_8h.html#a874b17623254bc1701d1f25459770200">SCHNORR_prove</a>(<span class="keyword">const</span> octet *R, <span class="keyword">const</span> octet *E, <span class="keyword">const</span> octet *X, octet *P);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160; </div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="schnorr_8h.html#a5f6c493e5b3acdc97acb0af7a0389723">   94</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="schnorr_8h.html#a5f6c493e5b3acdc97acb0af7a0389723">SCHNORR_verify</a>(octet *V, octet *C, <span class="keyword">const</span> octet *E, <span class="keyword">const</span> octet *P);</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;<span class="comment">/* Double Schnorr&#39;s proofs API */</span></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;<span class="comment">// The double Schnorr Proof allows to prove knowledge of</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="comment">// s,l s.t. V = s.R + l.G for some R ECP</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160; </div>
+<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="schnorr_8h.html#a20d267a63789b45faaf9b82018116268">  110</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="schnorr_8h.html#a20d267a63789b45faaf9b82018116268">SCHNORR_D_commit</a>(csprng *RNG, octet *R, octet *A, octet *B, octet *C);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160; </div>
+<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="schnorr_8h.html#ad72917e4d1d2e9167c47062b4939dffb">  125</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="schnorr_8h.html#ad72917e4d1d2e9167c47062b4939dffb">SCHNORR_D_challenge</a>(<span class="keyword">const</span> octet *R, <span class="keyword">const</span> octet *V, <span class="keyword">const</span> octet *C, <span class="keyword">const</span> octet* ID, <span class="keyword">const</span> octet *AD, octet *E);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160; </div>
+<div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="schnorr_8h.html#a726141bddf04f630fe06e2f13a3d28e5">  137</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="schnorr_8h.html#a726141bddf04f630fe06e2f13a3d28e5">SCHNORR_D_prove</a>(<span class="keyword">const</span> octet *A, <span class="keyword">const</span> octet *B, <span class="keyword">const</span> octet *E, <span class="keyword">const</span> octet *S, <span class="keyword">const</span> octet *L, octet *T, octet *U);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160; </div>
+<div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="schnorr_8h.html#ab1c768caccc24700b28050962b603898">  149</a></span>&#160;<span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="schnorr_8h.html#ab1c768caccc24700b28050962b603898">SCHNORR_D_verify</a>(octet *R, octet *V, octet *C, <span class="keyword">const</span> octet *E, <span class="keyword">const</span> octet *T, <span class="keyword">const</span> octet *U);</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;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;}</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;<span class="preprocessor">#endif</span></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;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aschnorr_8h_html_a20d267a63789b45faaf9b82018116268"><div class="ttname"><a href="schnorr_8h.html#a20d267a63789b45faaf9b82018116268">SCHNORR_D_commit</a></div><div class="ttdeci">int SCHNORR_D_commit(csprng *RNG, octet *R, octet *A, octet *B, octet *C)</div><div class="ttdoc">Generate a commitment for the proof.</div></div>
+<div class="ttc" id="aschnorr_8h_html_a5f6c493e5b3acdc97acb0af7a0389723"><div class="ttname"><a href="schnorr_8h.html#a5f6c493e5b3acdc97acb0af7a0389723">SCHNORR_verify</a></div><div class="ttdeci">int SCHNORR_verify(octet *V, octet *C, const octet *E, const octet *P)</div><div class="ttdoc">Verify the proof of knowledge for the DLOG.</div></div>
+<div class="ttc" id="aschnorr_8h_html_a726141bddf04f630fe06e2f13a3d28e5"><div class="ttname"><a href="schnorr_8h.html#a726141bddf04f630fe06e2f13a3d28e5">SCHNORR_D_prove</a></div><div class="ttdeci">void SCHNORR_D_prove(const octet *A, const octet *B, const octet *E, const octet *S, const octet *L, octet *T, octet *U)</div><div class="ttdoc">Generate the proof for the given commitment and challenge.</div></div>
+<div class="ttc" id="aschnorr_8h_html_a743028db55e66f4d30699e72a1b0bf1f"><div class="ttname"><a href="schnorr_8h.html#a743028db55e66f4d30699e72a1b0bf1f">SCHNORR_challenge</a></div><div class="ttdeci">void SCHNORR_challenge(const octet *V, const octet *C, const octet *ID, const octet *AD, octet *E)</div><div class="ttdoc">Generate the challenge for the proof.</div></div>
+<div class="ttc" id="aschnorr_8h_html_a874b17623254bc1701d1f25459770200"><div class="ttname"><a href="schnorr_8h.html#a874b17623254bc1701d1f25459770200">SCHNORR_prove</a></div><div class="ttdeci">void SCHNORR_prove(const octet *R, const octet *E, const octet *X, octet *P)</div><div class="ttdoc">Generate the proof for the given commitment and challenge.</div></div>
+<div class="ttc" id="aschnorr_8h_html_aa8b82a3a089695a803f100b4a861c59b"><div class="ttname"><a href="schnorr_8h.html#aa8b82a3a089695a803f100b4a861c59b">SCHNORR_commit</a></div><div class="ttdeci">void SCHNORR_commit(csprng *RNG, octet *R, octet *C)</div><div class="ttdoc">Generate a commitment for the proof.</div></div>
+<div class="ttc" id="aschnorr_8h_html_ab1c768caccc24700b28050962b603898"><div class="ttname"><a href="schnorr_8h.html#ab1c768caccc24700b28050962b603898">SCHNORR_D_verify</a></div><div class="ttdeci">int SCHNORR_D_verify(octet *R, octet *V, octet *C, const octet *E, const octet *T, const octet *U)</div><div class="ttdoc">Verify the proof of knowledge for the DLOG.</div></div>
+<div class="ttc" id="aschnorr_8h_html_ab8e7127fb5812f3592da6ebf08b57512"><div class="ttname"><a href="schnorr_8h.html#ab8e7127fb5812f3592da6ebf08b57512">SCHNORR_random_challenge</a></div><div class="ttdeci">void SCHNORR_random_challenge(csprng *RNG, octet *E)</div><div class="ttdoc">Generate random challenge for any Schnorr Proof.</div></div>
+<div class="ttc" id="aschnorr_8h_html_ad72917e4d1d2e9167c47062b4939dffb"><div class="ttname"><a href="schnorr_8h.html#ad72917e4d1d2e9167c47062b4939dffb">SCHNORR_D_challenge</a></div><div class="ttdeci">void SCHNORR_D_challenge(const octet *R, const octet *V, const octet *C, const octet *ID, const octet *AD, octet *E)</div><div class="ttdoc">Generate the challenge for the proof.</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/search/all_0.html b/website/static/mpcdocs/search/all_0.html
new file mode 100644
index 0000000..1ec5b2d
--- /dev/null
+++ b/website/static/mpcdocs/search/all_0.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_0.js b/website/static/mpcdocs/search/all_0.js
new file mode 100644
index 0000000..e7dbd6a
--- /dev/null
+++ b/website/static/mpcdocs/search/all_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['alpha_0',['alpha',['../structCOMMITMENTS__BC__priv__modulus.html#af4ddfbbfc46a62addce247732f82748c',1,'COMMITMENTS_BC_priv_modulus::alpha()'],['../structMTA__RP__commitment__rv.html#aecbdb8eaf2ced92b569f664d53ee0517',1,'MTA_RP_commitment_rv::alpha()'],['../structMTA__ZK__commitment__rv.html#a050280552a71f496ea2b53985b236563',1,'MTA_ZK_commitment_rv::alpha()']]],
+  ['apache_20milagro_20multi_2dparty_20computation_1',['Apache Milagro Multi-Party Computation',['../index.html',1,'']]]
+];
diff --git a/website/static/mpcdocs/search/all_1.html b/website/static/mpcdocs/search/all_1.html
new file mode 100644
index 0000000..9f80e90
--- /dev/null
+++ b/website/static/mpcdocs/search/all_1.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_1.js b/website/static/mpcdocs/search/all_1.js
new file mode 100644
index 0000000..51a8c53
--- /dev/null
+++ b/website/static/mpcdocs/search/all_1.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['b0_2',['b0',['../structCOMMITMENTS__BC__priv__modulus.html#ad21b260d4a4ea65d15d1bac83d738caa',1,'COMMITMENTS_BC_priv_modulus::b0()'],['../structCOMMITMENTS__BC__pub__modulus.html#a762d49ff299040ad437c6b970e063e1f',1,'COMMITMENTS_BC_pub_modulus::b0()']]],
+  ['b1_3',['b1',['../structCOMMITMENTS__BC__priv__modulus.html#a4c83fb166445c451b0e7bcd2419fb032',1,'COMMITMENTS_BC_priv_modulus::b1()'],['../structCOMMITMENTS__BC__pub__modulus.html#a750b04eab3d90c2b79e20ec7cc638ffe',1,'COMMITMENTS_BC_pub_modulus::b1()']]],
+  ['beta_4',['beta',['../structMTA__RP__commitment__rv.html#af6f441b304a8b2c8997860c2bbeaa6b1',1,'MTA_RP_commitment_rv::beta()'],['../structMTA__ZK__commitment__rv.html#a577c79735265327e7636ba9e8fdc8df5',1,'MTA_ZK_commitment_rv::beta()']]]
+];
diff --git a/website/static/mpcdocs/search/all_10.html b/website/static/mpcdocs/search/all_10.html
new file mode 100644
index 0000000..3bf1196
--- /dev/null
+++ b/website/static/mpcdocs/search/all_10.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_10.js b/website/static/mpcdocs/search/all_10.js
new file mode 100644
index 0000000..a820531
--- /dev/null
+++ b/website/static/mpcdocs/search/all_10.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['v_130',['v',['../structMTA__ZK__commitment.html#a8c05e4faf0896ddb85501e02a80953ca',1,'MTA_ZK_commitment']]]
+];
diff --git a/website/static/mpcdocs/search/all_11.html b/website/static/mpcdocs/search/all_11.html
new file mode 100644
index 0000000..c9f79d2
--- /dev/null
+++ b/website/static/mpcdocs/search/all_11.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_11.js b/website/static/mpcdocs/search/all_11.js
new file mode 100644
index 0000000..f8899d0
--- /dev/null
+++ b/website/static/mpcdocs/search/all_11.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['w_131',['w',['../structMTA__RP__commitment.html#a19d9074f354d2362f090db5cd6f34212',1,'MTA_RP_commitment::w()'],['../structMTA__ZK__commitment.html#a9ff382fe3ce3795f79bb29c8f2ed738a',1,'MTA_ZK_commitment::w()']]]
+];
diff --git a/website/static/mpcdocs/search/all_12.html b/website/static/mpcdocs/search/all_12.html
new file mode 100644
index 0000000..ab93472
--- /dev/null
+++ b/website/static/mpcdocs/search/all_12.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_12.js b/website/static/mpcdocs/search/all_12.js
new file mode 100644
index 0000000..b15ff84
--- /dev/null
+++ b/website/static/mpcdocs/search/all_12.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['z_132',['z',['../structMTA__RP__commitment.html#aee20ad37a8cde2e2b6381055fff1c649',1,'MTA_RP_commitment::z()'],['../structMTA__ZK__commitment.html#a21736668dad1cf7aba4dd40f059703e0',1,'MTA_ZK_commitment::z()']]],
+  ['z1_133',['z1',['../structMTA__ZK__commitment.html#a63a83d96029b8e935c16b11c07d0b69a',1,'MTA_ZK_commitment']]],
+  ['zkc_134',['zkc',['../structMTA__ZKWC__commitment.html#a7025ae8eb9f30ddb6b6d601fd49a1da6',1,'MTA_ZKWC_commitment']]]
+];
diff --git a/website/static/mpcdocs/search/all_2.html b/website/static/mpcdocs/search/all_2.html
new file mode 100644
index 0000000..02cfffc
--- /dev/null
+++ b/website/static/mpcdocs/search/all_2.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_2.js b/website/static/mpcdocs/search/all_2.js
new file mode 100644
index 0000000..35fddea
--- /dev/null
+++ b/website/static/mpcdocs/search/all_2.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+  ['commitments_2eh_5',['commitments.h',['../commitments_8h.html',1,'']]],
+  ['commitments_5fbc_5fexport_5fpublic_5fmodulus_6',['COMMITMENTS_BC_export_public_modulus',['../commitments_8h.html#ad1c607c0e295be5b496475c3c4959fad',1,'commitments.h']]],
+  ['commitments_5fbc_5fkill_5fpriv_5fmodulus_7',['COMMITMENTS_BC_kill_priv_modulus',['../commitments_8h.html#a347b682fd4742fff73a9c924c88254ce',1,'commitments.h']]],
+  ['commitments_5fbc_5fpriv_5fmodulus_8',['COMMITMENTS_BC_priv_modulus',['../structCOMMITMENTS__BC__priv__modulus.html',1,'']]],
+  ['commitments_5fbc_5fpub_5fmodulus_9',['COMMITMENTS_BC_pub_modulus',['../structCOMMITMENTS__BC__pub__modulus.html',1,'']]],
+  ['commitments_5fbc_5fsetup_10',['COMMITMENTS_BC_setup',['../commitments_8h.html#a522d6f485494a7a2297007121529db4a',1,'commitments.h']]],
+  ['commitments_5ffail_11',['COMMITMENTS_FAIL',['../commitments_8h.html#a0280d7c876b77a0bae100933dc61c9bb',1,'commitments.h']]],
+  ['commitments_5fnm_5fcommit_12',['COMMITMENTS_NM_commit',['../commitments_8h.html#a03557be3cbf16370e9113fff93bc8169',1,'commitments.h']]],
+  ['commitments_5fnm_5fdecommit_13',['COMMITMENTS_NM_decommit',['../commitments_8h.html#a224adcc226ada8b5b999db0ff00f0986',1,'commitments.h']]],
+  ['commitments_5fok_14',['COMMITMENTS_OK',['../commitments_8h.html#a296158654474a636d999781ddcb9f9d8',1,'commitments.h']]]
+];
diff --git a/website/static/mpcdocs/search/all_3.html b/website/static/mpcdocs/search/all_3.html
new file mode 100644
index 0000000..39767b8
--- /dev/null
+++ b/website/static/mpcdocs/search/all_3.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_3.js b/website/static/mpcdocs/search/all_3.js
new file mode 100644
index 0000000..2c77e2b
--- /dev/null
+++ b/website/static/mpcdocs/search/all_3.js
@@ -0,0 +1,15 @@
+var searchData=
+[
+  ['factoring_5fzk_2eh_15',['factoring_zk.h',['../factoring__zk_8h.html',1,'']]],
+  ['factoring_5fzk_5fa_16',['FACTORING_ZK_A',['../factoring__zk_8h.html#a6882d3f80db9156ee393363643dbaeb5',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fb_17',['FACTORING_ZK_B',['../factoring__zk_8h.html#a2f229a79cea7ffb93931b5af6a05c373',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5ffail_18',['FACTORING_ZK_FAIL',['../factoring__zk_8h.html#a48af2c32b3215046f4b708877c34b11d',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fmodulus_19',['FACTORING_ZK_modulus',['../structFACTORING__ZK__modulus.html',1,'']]],
+  ['factoring_5fzk_5fmodulus_5ffromoctets_20',['FACTORING_ZK_modulus_fromOctets',['../factoring__zk_8h.html#afba5dd5398192722440f724c3ce6c37a',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fmodulus_5fkill_21',['FACTORING_ZK_modulus_kill',['../factoring__zk_8h.html#a40183656099267b7b20980fd5c2e8dcd',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fok_22',['FACTORING_ZK_OK',['../factoring__zk_8h.html#a1c4e961cde47625be283dc1c59cec7c0',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fout_5fof_5fbounds_23',['FACTORING_ZK_OUT_OF_BOUNDS',['../factoring__zk_8h.html#ad78ee9209748e3f16fb0bb48a622a0c6',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fprove_24',['FACTORING_ZK_prove',['../factoring__zk_8h.html#aff201c3031798a0f0027dadf929190d7',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fverify_25',['FACTORING_ZK_verify',['../factoring__zk_8h.html#abc6d5b3c3df4c98b36d7f3abe8f69a03',1,'factoring_zk.h']]],
+  ['fs_5f2048_26',['FS_2048',['../commitments_8h.html#ae3ce9abc99cec679346a7d38bed96d9b',1,'FS_2048():&#160;commitments.h'],['../factoring__zk_8h.html#ae3ce9abc99cec679346a7d38bed96d9b',1,'FS_2048():&#160;factoring_zk.h']]]
+];
diff --git a/website/static/mpcdocs/search/all_4.html b/website/static/mpcdocs/search/all_4.html
new file mode 100644
index 0000000..fc40463
--- /dev/null
+++ b/website/static/mpcdocs/search/all_4.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_4.js b/website/static/mpcdocs/search/all_4.js
new file mode 100644
index 0000000..9795c70
--- /dev/null
+++ b/website/static/mpcdocs/search/all_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['gamma_27',['gamma',['../structMTA__RP__commitment__rv.html#adacad4216d4e48675f9e0e1c8af3a7b6',1,'MTA_RP_commitment_rv::gamma()'],['../structMTA__ZK__commitment__rv.html#aaa9ee388eaa9eb9a8ff9601a774cdcfd',1,'MTA_ZK_commitment_rv::gamma()']]]
+];
diff --git a/website/static/mpcdocs/search/all_5.html b/website/static/mpcdocs/search/all_5.html
new file mode 100644
index 0000000..9dd9344
--- /dev/null
+++ b/website/static/mpcdocs/search/all_5.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_5.js b/website/static/mpcdocs/search/all_5.js
new file mode 100644
index 0000000..c65fbac
--- /dev/null
+++ b/website/static/mpcdocs/search/all_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['hfs_5f2048_28',['HFS_2048',['../commitments_8h.html#af12daa3ccdbe8c973ca455b53f58f13b',1,'HFS_2048():&#160;commitments.h'],['../factoring__zk_8h.html#af12daa3ccdbe8c973ca455b53f58f13b',1,'HFS_2048():&#160;factoring_zk.h']]]
+];
diff --git a/website/static/mpcdocs/search/all_6.html b/website/static/mpcdocs/search/all_6.html
new file mode 100644
index 0000000..f1e516d
--- /dev/null
+++ b/website/static/mpcdocs/search/all_6.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_6.js b/website/static/mpcdocs/search/all_6.js
new file mode 100644
index 0000000..53cd960
--- /dev/null
+++ b/website/static/mpcdocs/search/all_6.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['ialpha_29',['ialpha',['../structCOMMITMENTS__BC__priv__modulus.html#ac2e85b032336fcc302312016986f92e0',1,'COMMITMENTS_BC_priv_modulus']]],
+  ['invpq_30',['invPQ',['../structCOMMITMENTS__BC__priv__modulus.html#a50bb8437f9bd452e123decb02fa91aaa',1,'COMMITMENTS_BC_priv_modulus']]],
+  ['invpq_31',['invpq',['../structFACTORING__ZK__modulus.html#a85ff6e5ed1ce3c5822a31aa9d6de2107',1,'FACTORING_ZK_modulus']]]
+];
diff --git a/website/static/mpcdocs/search/all_7.html b/website/static/mpcdocs/search/all_7.html
new file mode 100644
index 0000000..8ddbf6c
--- /dev/null
+++ b/website/static/mpcdocs/search/all_7.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_7.js b/website/static/mpcdocs/search/all_7.js
new file mode 100644
index 0000000..b87319b
--- /dev/null
+++ b/website/static/mpcdocs/search/all_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['linux_32',['Linux',['../linux.html',1,'']]]
+];
diff --git a/website/static/mpcdocs/search/all_8.html b/website/static/mpcdocs/search/all_8.html
new file mode 100644
index 0000000..83c55ae
--- /dev/null
+++ b/website/static/mpcdocs/search/all_8.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_8.js b/website/static/mpcdocs/search/all_8.js
new file mode 100644
index 0000000..da0c5f5
--- /dev/null
+++ b/website/static/mpcdocs/search/all_8.js
@@ -0,0 +1,66 @@
+var searchData=
+[
+  ['mpc_2eh_33',['mpc.h',['../mpc_8h.html',1,'']]],
+  ['mpc_5fdump_5fpaillier_5fsk_34',['MPC_DUMP_PAILLIER_SK',['../mpc_8h.html#af1096af9d7fa21d31bfcc538201ef976',1,'mpc.h']]],
+  ['mpc_5fecdsa_5fkey_5fpair_5fgenerate_35',['MPC_ECDSA_KEY_PAIR_GENERATE',['../mpc_8h.html#ad26837e4fd74e8d6aabc6b3bfaf9a7be',1,'mpc.h']]],
+  ['mpc_5fecdsa_5fsign_36',['MPC_ECDSA_SIGN',['../mpc_8h.html#a5a6fb00e1b95a507e89865051e1fb54a',1,'mpc.h']]],
+  ['mpc_5fecdsa_5fverify_37',['MPC_ECDSA_VERIFY',['../mpc_8h.html#a4502a62e9dfbd1ebe51a9b287196766f',1,'mpc.h']]],
+  ['mpc_5ffail_38',['MPC_FAIL',['../mpc_8h.html#a0a76c82492c2feb97c072c17dbf4151d',1,'mpc.h']]],
+  ['mpc_5fhash_39',['MPC_HASH',['../mpc_8h.html#a0e70e4308d7a75c852bb2bfd6a57b5a9',1,'mpc.h']]],
+  ['mpc_5finvalid_5fecp_40',['MPC_INVALID_ECP',['../mpc_8h.html#aab0897c8d775eb4331e21ad4003d08d2',1,'mpc.h']]],
+  ['mpc_5finvkgamma_41',['MPC_INVKGAMMA',['../mpc_8h.html#a7b14475ef026b509e974468fb473231c',1,'mpc.h']]],
+  ['mpc_5fk_5fgenerate_42',['MPC_K_GENERATE',['../mpc_8h.html#a605a8cc66cd1e9a5513ef270934d10a2',1,'mpc.h']]],
+  ['mpc_5fmta_5fclient1_43',['MPC_MTA_CLIENT1',['../mta_8h.html#a7bbc83a1d90c466061839c88375576a3',1,'mta.h']]],
+  ['mpc_5fmta_5fclient2_44',['MPC_MTA_CLIENT2',['../mta_8h.html#a673e46de79006b3d5e349a0eec6bd5c5',1,'mta.h']]],
+  ['mpc_5fmta_5fserver_45',['MPC_MTA_SERVER',['../mta_8h.html#af6150f97b1d2df1d70ec419211d37592',1,'mta.h']]],
+  ['mpc_5fok_46',['MPC_OK',['../mpc_8h.html#a530efe0885cea4e5b99df50b80bae294',1,'mpc.h']]],
+  ['mpc_5fphase5_5fcommit_47',['MPC_PHASE5_commit',['../mpc_8h.html#a007621069a3d86c06c3cdc113d0177ac',1,'mpc.h']]],
+  ['mpc_5fphase5_5fprove_48',['MPC_PHASE5_prove',['../mpc_8h.html#a3f1907b745524b7f991a821e0bf831d1',1,'mpc.h']]],
+  ['mpc_5fphase5_5fverify_49',['MPC_PHASE5_verify',['../mpc_8h.html#aba1ebc625244ce42e60a17f5edd2f71f',1,'mpc.h']]],
+  ['mpc_5fr_50',['MPC_R',['../mpc_8h.html#a4b2ad033889c2765aba63f84c6465471',1,'mpc.h']]],
+  ['mpc_5fs_51',['MPC_S',['../mpc_8h.html#acfb7f28581a6a2100047aaba6d03f6dc',1,'mpc.h']]],
+  ['mpc_5fsum_5fmta_52',['MPC_SUM_MTA',['../mta_8h.html#a585141482d0be764359316dc4aa9a345',1,'mta.h']]],
+  ['mpc_5fsum_5fpk_53',['MPC_SUM_PK',['../mpc_8h.html#a25cdf08efa8377c4521728600b3001b4',1,'mpc.h']]],
+  ['mpc_5fsum_5fs_54',['MPC_SUM_S',['../mpc_8h.html#a1cca737dad0e9351f8c4d993b90e71f4',1,'mpc.h']]],
+  ['mta_2eh_55',['mta.h',['../mta_8h.html',1,'']]],
+  ['mta_5ffail_56',['MTA_FAIL',['../mta_8h.html#a9cffabde5e58757768c87f8b96bed9be',1,'mta.h']]],
+  ['mta_5finvalid_5fecp_57',['MTA_INVALID_ECP',['../mta_8h.html#ac83dee7822a61403334298331d63171c',1,'mta.h']]],
+  ['mta_5fok_58',['MTA_OK',['../mta_8h.html#a38835fd15b3c165ca0acce5ba7f45dd6',1,'mta.h']]],
+  ['mta_5frp_5fchallenge_59',['MTA_RP_challenge',['../mta_8h.html#aae8035b9c2d5b29f3ad9df3c44466e1d',1,'mta.h']]],
+  ['mta_5frp_5fcommit_60',['MTA_RP_commit',['../mta_8h.html#a9ae812a8b7fa69ae98d8eec9db51cc83',1,'mta.h']]],
+  ['mta_5frp_5fcommitment_61',['MTA_RP_commitment',['../structMTA__RP__commitment.html',1,'']]],
+  ['mta_5frp_5fcommitment_5ffromoctets_62',['MTA_RP_commitment_fromOctets',['../mta_8h.html#a5f42fb5d017f34db268c112f7c8d056e',1,'mta.h']]],
+  ['mta_5frp_5fcommitment_5frv_63',['MTA_RP_commitment_rv',['../structMTA__RP__commitment__rv.html',1,'']]],
+  ['mta_5frp_5fcommitment_5frv_5fkill_64',['MTA_RP_commitment_rv_kill',['../mta_8h.html#a83d69dbe4b86adcf814bf17593066b5d',1,'mta.h']]],
+  ['mta_5frp_5fcommitment_5ftooctets_65',['MTA_RP_commitment_toOctets',['../mta_8h.html#aa60c3b4a80719d29f0ebb747f3fc31a1',1,'mta.h']]],
+  ['mta_5frp_5fproof_66',['MTA_RP_proof',['../structMTA__RP__proof.html',1,'']]],
+  ['mta_5frp_5fproof_5ffromoctets_67',['MTA_RP_proof_fromOctets',['../mta_8h.html#ad60da72de670c62131bc57f9e1070c84',1,'mta.h']]],
+  ['mta_5frp_5fproof_5ftooctets_68',['MTA_RP_proof_toOctets',['../mta_8h.html#a4c516e4898f3fbcdd55ed70ea0e336ef',1,'mta.h']]],
+  ['mta_5frp_5fprove_69',['MTA_RP_prove',['../mta_8h.html#a840590c8db0b435bece74978adf0748d',1,'mta.h']]],
+  ['mta_5frp_5fverify_70',['MTA_RP_verify',['../mta_8h.html#aaa4c5afa267be00e1819becd53805795',1,'mta.h']]],
+  ['mta_5fzk_5fchallenge_71',['MTA_ZK_challenge',['../mta_8h.html#a437965ad4a0dd602a0c1a4339afb0cb6',1,'mta.h']]],
+  ['mta_5fzk_5fcommit_72',['MTA_ZK_commit',['../mta_8h.html#a882f4c5922a453293eaaa7e3ec876bdf',1,'mta.h']]],
+  ['mta_5fzk_5fcommitment_73',['MTA_ZK_commitment',['../structMTA__ZK__commitment.html',1,'']]],
+  ['mta_5fzk_5fcommitment_5ffromoctets_74',['MTA_ZK_commitment_fromOctets',['../mta_8h.html#ad9cb35ed95b1ad3367fd78437e98aad5',1,'mta.h']]],
+  ['mta_5fzk_5fcommitment_5frv_75',['MTA_ZK_commitment_rv',['../structMTA__ZK__commitment__rv.html',1,'']]],
+  ['mta_5fzk_5fcommitment_5frv_5fkill_76',['MTA_ZK_commitment_rv_kill',['../mta_8h.html#a50085c31f3df46ac6814c46064ed2826',1,'mta.h']]],
+  ['mta_5fzk_5fcommitment_5ftooctets_77',['MTA_ZK_commitment_toOctets',['../mta_8h.html#afa9bc2f3876442f8519c67c011d4b0c5',1,'mta.h']]],
+  ['mta_5fzk_5fproof_78',['MTA_ZK_proof',['../structMTA__ZK__proof.html',1,'']]],
+  ['mta_5fzk_5fproof_5ffromoctets_79',['MTA_ZK_proof_fromOctets',['../mta_8h.html#a4d280db3b810c0d69603a8ee97222565',1,'mta.h']]],
+  ['mta_5fzk_5fproof_5ftooctets_80',['MTA_ZK_proof_toOctets',['../mta_8h.html#ae4cc541c94044beaf3a46cd5415da370',1,'mta.h']]],
+  ['mta_5fzk_5fprove_81',['MTA_ZK_prove',['../mta_8h.html#a275057a0134ee0cbef05e1c719f3f94b',1,'mta.h']]],
+  ['mta_5fzk_5frandom_5fchallenge_82',['MTA_ZK_random_challenge',['../mta_8h.html#ae4971990b60c103d7cb596c9a0d1d205',1,'mta.h']]],
+  ['mta_5fzk_5fverify_83',['MTA_ZK_verify',['../mta_8h.html#a34fa2c06ff8a165243621fe6d32a4b64',1,'mta.h']]],
+  ['mta_5fzkwc_5fchallenge_84',['MTA_ZKWC_challenge',['../mta_8h.html#a4dd5d4b2d4fc3e530632fb61b56c3f25',1,'mta.h']]],
+  ['mta_5fzkwc_5fcommit_85',['MTA_ZKWC_commit',['../mta_8h.html#a61bd2519a246c273ce42da382732c489',1,'mta.h']]],
+  ['mta_5fzkwc_5fcommitment_86',['MTA_ZKWC_commitment',['../structMTA__ZKWC__commitment.html',1,'']]],
+  ['mta_5fzkwc_5fcommitment_5ffromoctets_87',['MTA_ZKWC_commitment_fromOctets',['../mta_8h.html#a051196472aca3ad711f8c8f9f39280ce',1,'mta.h']]],
+  ['mta_5fzkwc_5fcommitment_5frv_88',['MTA_ZKWC_commitment_rv',['../mta_8h.html#a520066c511d8661c3ebfe4c2a612a046',1,'mta.h']]],
+  ['mta_5fzkwc_5fcommitment_5frv_5fkill_89',['MTA_ZKWC_commitment_rv_kill',['../mta_8h.html#adc4cbeae2c13b0e005c70532d2f96e46',1,'mta.h']]],
+  ['mta_5fzkwc_5fcommitment_5ftooctets_90',['MTA_ZKWC_commitment_toOctets',['../mta_8h.html#ab2611cfca7b4350f0921d56a3aed3185',1,'mta.h']]],
+  ['mta_5fzkwc_5fproof_91',['MTA_ZKWC_proof',['../mta_8h.html#a96110337c3648cc19cc1bf60f085da14',1,'mta.h']]],
+  ['mta_5fzkwc_5fproof_5ffromoctets_92',['MTA_ZKWC_proof_fromOctets',['../mta_8h.html#afdc55dcddd98123e60590190425edab3',1,'mta.h']]],
+  ['mta_5fzkwc_5fproof_5ftooctets_93',['MTA_ZKWC_proof_toOctets',['../mta_8h.html#a127a8be76fdcde455e6d8645fcc93362',1,'mta.h']]],
+  ['mta_5fzkwc_5fprove_94',['MTA_ZKWC_prove',['../mta_8h.html#aec434d125d9f299a78388524ef5f0c51',1,'mta.h']]],
+  ['mta_5fzkwc_5fverify_95',['MTA_ZKWC_verify',['../mta_8h.html#aec8c96b0b4983b7e16bdcf7f24b16c08',1,'mta.h']]]
+];
diff --git a/website/static/mpcdocs/search/all_9.html b/website/static/mpcdocs/search/all_9.html
new file mode 100644
index 0000000..1e263c1
--- /dev/null
+++ b/website/static/mpcdocs/search/all_9.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_9.js b/website/static/mpcdocs/search/all_9.js
new file mode 100644
index 0000000..39e2d35
--- /dev/null
+++ b/website/static/mpcdocs/search/all_9.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['n_96',['N',['../structCOMMITMENTS__BC__priv__modulus.html#ae70b46cbe352068e8b8071f0e046d464',1,'COMMITMENTS_BC_priv_modulus::N()'],['../structCOMMITMENTS__BC__pub__modulus.html#a55b541b8cd4e0dcdc63c0786b32d4beb',1,'COMMITMENTS_BC_pub_modulus::N()']]],
+  ['n_97',['n',['../structFACTORING__ZK__modulus.html#ae95c609b5d7ffe3ca5514c00f990a297',1,'FACTORING_ZK_modulus']]]
+];
diff --git a/website/static/mpcdocs/search/all_a.html b/website/static/mpcdocs/search/all_a.html
new file mode 100644
index 0000000..3a6cac1
--- /dev/null
+++ b/website/static/mpcdocs/search/all_a.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_a.js b/website/static/mpcdocs/search/all_a.js
new file mode 100644
index 0000000..754621e
--- /dev/null
+++ b/website/static/mpcdocs/search/all_a.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['p_98',['P',['../structCOMMITMENTS__BC__priv__modulus.html#adf198e18dddecfc16a1575d340597f08',1,'COMMITMENTS_BC_priv_modulus']]],
+  ['p_99',['p',['../structFACTORING__ZK__modulus.html#aad32cef305e6df7e87e076d510a1dbff',1,'FACTORING_ZK_modulus']]],
+  ['pq_100',['pq',['../structCOMMITMENTS__BC__priv__modulus.html#a68de71c8f0e75e7f2085dc213a3c3214',1,'COMMITMENTS_BC_priv_modulus']]]
+];
diff --git a/website/static/mpcdocs/search/all_b.html b/website/static/mpcdocs/search/all_b.html
new file mode 100644
index 0000000..130deb4
--- /dev/null
+++ b/website/static/mpcdocs/search/all_b.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_b.js b/website/static/mpcdocs/search/all_b.js
new file mode 100644
index 0000000..822ef17
--- /dev/null
+++ b/website/static/mpcdocs/search/all_b.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['q_101',['Q',['../structCOMMITMENTS__BC__priv__modulus.html#ad85ce137db71ea1fc185c2ca320c1f07',1,'COMMITMENTS_BC_priv_modulus']]],
+  ['q_102',['q',['../structFACTORING__ZK__modulus.html#a56447221f4bc3cb0258874dd7619cbe5',1,'FACTORING_ZK_modulus']]]
+];
diff --git a/website/static/mpcdocs/search/all_c.html b/website/static/mpcdocs/search/all_c.html
new file mode 100644
index 0000000..3dd5af0
--- /dev/null
+++ b/website/static/mpcdocs/search/all_c.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_c.js b/website/static/mpcdocs/search/all_c.js
new file mode 100644
index 0000000..0197207
--- /dev/null
+++ b/website/static/mpcdocs/search/all_c.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['rho_103',['rho',['../structMTA__RP__commitment__rv.html#a0ed6c0f9febc1b4cf7888de348296b46',1,'MTA_RP_commitment_rv::rho()'],['../structMTA__ZK__commitment__rv.html#a73b42958ba972918f43b9d6f9df7f31e',1,'MTA_ZK_commitment_rv::rho()']]],
+  ['rho1_104',['rho1',['../structMTA__ZK__commitment__rv.html#aefa9426a3a4ad48490520c99c311c486',1,'MTA_ZK_commitment_rv']]]
+];
diff --git a/website/static/mpcdocs/search/all_d.html b/website/static/mpcdocs/search/all_d.html
new file mode 100644
index 0000000..af7f2f0
--- /dev/null
+++ b/website/static/mpcdocs/search/all_d.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_d.js b/website/static/mpcdocs/search/all_d.js
new file mode 100644
index 0000000..e1d05f1
--- /dev/null
+++ b/website/static/mpcdocs/search/all_d.js
@@ -0,0 +1,22 @@
+var searchData=
+[
+  ['s_105',['s',['../structMTA__RP__proof.html#a8040777a4b2f46d78a7f113e924b76d0',1,'MTA_RP_proof::s()'],['../structMTA__ZK__proof.html#a34c86cae80dc0f8688cd1f7d5f1801ab',1,'MTA_ZK_proof::s()']]],
+  ['s1_106',['s1',['../structMTA__RP__proof.html#aa0e204527ce83ab95daa7b6a9977e473',1,'MTA_RP_proof::s1()'],['../structMTA__ZK__proof.html#a44224d752605c42e4ec583442eb6a61a',1,'MTA_ZK_proof::s1()']]],
+  ['s2_107',['s2',['../structMTA__RP__proof.html#a22e41915856f9e6c60fbde988a81870c',1,'MTA_RP_proof::s2()'],['../structMTA__ZK__proof.html#a4141b24bb3ad79318884ac0facb65800',1,'MTA_ZK_proof::s2()']]],
+  ['schnorr_2eh_108',['schnorr.h',['../schnorr_8h.html',1,'']]],
+  ['schnorr_5fchallenge_109',['SCHNORR_challenge',['../schnorr_8h.html#a743028db55e66f4d30699e72a1b0bf1f',1,'schnorr.h']]],
+  ['schnorr_5fcommit_110',['SCHNORR_commit',['../schnorr_8h.html#aa8b82a3a089695a803f100b4a861c59b',1,'schnorr.h']]],
+  ['schnorr_5fd_5fchallenge_111',['SCHNORR_D_challenge',['../schnorr_8h.html#ad72917e4d1d2e9167c47062b4939dffb',1,'schnorr.h']]],
+  ['schnorr_5fd_5fcommit_112',['SCHNORR_D_commit',['../schnorr_8h.html#a20d267a63789b45faaf9b82018116268',1,'schnorr.h']]],
+  ['schnorr_5fd_5fprove_113',['SCHNORR_D_prove',['../schnorr_8h.html#a726141bddf04f630fe06e2f13a3d28e5',1,'schnorr.h']]],
+  ['schnorr_5fd_5fverify_114',['SCHNORR_D_verify',['../schnorr_8h.html#ab1c768caccc24700b28050962b603898',1,'schnorr.h']]],
+  ['schnorr_5ffail_115',['SCHNORR_FAIL',['../schnorr_8h.html#a4a5402fd8a88039b3f9cad0f508eec31',1,'schnorr.h']]],
+  ['schnorr_5finvalid_5fecp_116',['SCHNORR_INVALID_ECP',['../schnorr_8h.html#aacf81adc639d9529432d969dca09eb71',1,'schnorr.h']]],
+  ['schnorr_5fok_117',['SCHNORR_OK',['../schnorr_8h.html#a88f5f29dd2b59260b70ffcbc5f44c326',1,'schnorr.h']]],
+  ['schnorr_5fprove_118',['SCHNORR_prove',['../schnorr_8h.html#a874b17623254bc1701d1f25459770200',1,'schnorr.h']]],
+  ['schnorr_5frandom_5fchallenge_119',['SCHNORR_random_challenge',['../schnorr_8h.html#ab8e7127fb5812f3592da6ebf08b57512',1,'schnorr.h']]],
+  ['schnorr_5fverify_120',['SCHNORR_verify',['../schnorr_8h.html#a5f6c493e5b3acdc97acb0af7a0389723',1,'schnorr.h']]],
+  ['sfs_5fsecp256k1_121',['SFS_SECP256K1',['../schnorr_8h.html#a9d25d694a29331ea767179901f8ae601',1,'schnorr.h']]],
+  ['sgs_5fsecp256k1_122',['SGS_SECP256K1',['../schnorr_8h.html#ab5bcf782e8f2fcd1404d5de3b85707fd',1,'schnorr.h']]],
+  ['sigma_123',['sigma',['../structMTA__ZK__commitment__rv.html#ab26f42619df65db7f6dcdde009067ae9',1,'MTA_ZK_commitment_rv']]]
+];
diff --git a/website/static/mpcdocs/search/all_e.html b/website/static/mpcdocs/search/all_e.html
new file mode 100644
index 0000000..e25df42
--- /dev/null
+++ b/website/static/mpcdocs/search/all_e.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_e.js b/website/static/mpcdocs/search/all_e.js
new file mode 100644
index 0000000..9c65410
--- /dev/null
+++ b/website/static/mpcdocs/search/all_e.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['t_124',['t',['../structMTA__ZK__commitment.html#ab7f5f3c057c0c12ccae9e1b1667a6cfc',1,'MTA_ZK_commitment']]],
+  ['t1_125',['t1',['../structMTA__ZK__proof.html#a2555d0e4789621eff8dc79cf96276860',1,'MTA_ZK_proof']]],
+  ['t2_126',['t2',['../structMTA__ZK__proof.html#affd6b54dc1a58cdc23ac27746c5eb31b',1,'MTA_ZK_proof']]],
+  ['tau_127',['tau',['../structMTA__ZK__commitment__rv.html#aa306d5c97d2df585d8ec3948bdf95b16',1,'MTA_ZK_commitment_rv']]]
+];
diff --git a/website/static/mpcdocs/search/all_f.html b/website/static/mpcdocs/search/all_f.html
new file mode 100644
index 0000000..b23da6c
--- /dev/null
+++ b/website/static/mpcdocs/search/all_f.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/all_f.js b/website/static/mpcdocs/search/all_f.js
new file mode 100644
index 0000000..e2a8105
--- /dev/null
+++ b/website/static/mpcdocs/search/all_f.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['u_128',['U',['../structMTA__ZKWC__commitment.html#a6906ba960255cecf7cf29848dc40b9cc',1,'MTA_ZKWC_commitment']]],
+  ['u_129',['u',['../structMTA__RP__commitment.html#a201fa0a955e4cc4b8f0bfed810a58b77',1,'MTA_RP_commitment']]]
+];
diff --git a/website/static/mpcdocs/search/classes_0.html b/website/static/mpcdocs/search/classes_0.html
new file mode 100644
index 0000000..af8159e
--- /dev/null
+++ b/website/static/mpcdocs/search/classes_0.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/classes_0.js b/website/static/mpcdocs/search/classes_0.js
new file mode 100644
index 0000000..c3f7f23
--- /dev/null
+++ b/website/static/mpcdocs/search/classes_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['commitments_5fbc_5fpriv_5fmodulus_135',['COMMITMENTS_BC_priv_modulus',['../structCOMMITMENTS__BC__priv__modulus.html',1,'']]],
+  ['commitments_5fbc_5fpub_5fmodulus_136',['COMMITMENTS_BC_pub_modulus',['../structCOMMITMENTS__BC__pub__modulus.html',1,'']]]
+];
diff --git a/website/static/mpcdocs/search/classes_1.html b/website/static/mpcdocs/search/classes_1.html
new file mode 100644
index 0000000..576e916
--- /dev/null
+++ b/website/static/mpcdocs/search/classes_1.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/classes_1.js b/website/static/mpcdocs/search/classes_1.js
new file mode 100644
index 0000000..adb4688
--- /dev/null
+++ b/website/static/mpcdocs/search/classes_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['factoring_5fzk_5fmodulus_137',['FACTORING_ZK_modulus',['../structFACTORING__ZK__modulus.html',1,'']]]
+];
diff --git a/website/static/mpcdocs/search/classes_2.html b/website/static/mpcdocs/search/classes_2.html
new file mode 100644
index 0000000..956405e
--- /dev/null
+++ b/website/static/mpcdocs/search/classes_2.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/classes_2.js b/website/static/mpcdocs/search/classes_2.js
new file mode 100644
index 0000000..77ed9e1
--- /dev/null
+++ b/website/static/mpcdocs/search/classes_2.js
@@ -0,0 +1,10 @@
+var searchData=
+[
+  ['mta_5frp_5fcommitment_138',['MTA_RP_commitment',['../structMTA__RP__commitment.html',1,'']]],
+  ['mta_5frp_5fcommitment_5frv_139',['MTA_RP_commitment_rv',['../structMTA__RP__commitment__rv.html',1,'']]],
+  ['mta_5frp_5fproof_140',['MTA_RP_proof',['../structMTA__RP__proof.html',1,'']]],
+  ['mta_5fzk_5fcommitment_141',['MTA_ZK_commitment',['../structMTA__ZK__commitment.html',1,'']]],
+  ['mta_5fzk_5fcommitment_5frv_142',['MTA_ZK_commitment_rv',['../structMTA__ZK__commitment__rv.html',1,'']]],
+  ['mta_5fzk_5fproof_143',['MTA_ZK_proof',['../structMTA__ZK__proof.html',1,'']]],
+  ['mta_5fzkwc_5fcommitment_144',['MTA_ZKWC_commitment',['../structMTA__ZKWC__commitment.html',1,'']]]
+];
diff --git a/website/static/mpcdocs/search/close.svg b/website/static/mpcdocs/search/close.svg
new file mode 100644
index 0000000..a933eea
--- /dev/null
+++ b/website/static/mpcdocs/search/close.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   viewBox="0 0 11 11"
+   height="11"
+   width="11"
+   id="svg2"
+   version="1.1">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <path
+     id="path12"
+     d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z "
+     style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" />
+</svg>
diff --git a/website/static/mpcdocs/search/defines_0.html b/website/static/mpcdocs/search/defines_0.html
new file mode 100644
index 0000000..15cc3de
--- /dev/null
+++ b/website/static/mpcdocs/search/defines_0.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/defines_0.js b/website/static/mpcdocs/search/defines_0.js
new file mode 100644
index 0000000..8b45875
--- /dev/null
+++ b/website/static/mpcdocs/search/defines_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['commitments_5ffail_248',['COMMITMENTS_FAIL',['../commitments_8h.html#a0280d7c876b77a0bae100933dc61c9bb',1,'commitments.h']]],
+  ['commitments_5fok_249',['COMMITMENTS_OK',['../commitments_8h.html#a296158654474a636d999781ddcb9f9d8',1,'commitments.h']]]
+];
diff --git a/website/static/mpcdocs/search/defines_1.html b/website/static/mpcdocs/search/defines_1.html
new file mode 100644
index 0000000..c49009c
--- /dev/null
+++ b/website/static/mpcdocs/search/defines_1.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/defines_1.js b/website/static/mpcdocs/search/defines_1.js
new file mode 100644
index 0000000..ac848be
--- /dev/null
+++ b/website/static/mpcdocs/search/defines_1.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['factoring_5fzk_5fa_250',['FACTORING_ZK_A',['../factoring__zk_8h.html#a6882d3f80db9156ee393363643dbaeb5',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fb_251',['FACTORING_ZK_B',['../factoring__zk_8h.html#a2f229a79cea7ffb93931b5af6a05c373',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5ffail_252',['FACTORING_ZK_FAIL',['../factoring__zk_8h.html#a48af2c32b3215046f4b708877c34b11d',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fok_253',['FACTORING_ZK_OK',['../factoring__zk_8h.html#a1c4e961cde47625be283dc1c59cec7c0',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fout_5fof_5fbounds_254',['FACTORING_ZK_OUT_OF_BOUNDS',['../factoring__zk_8h.html#ad78ee9209748e3f16fb0bb48a622a0c6',1,'factoring_zk.h']]],
+  ['fs_5f2048_255',['FS_2048',['../commitments_8h.html#ae3ce9abc99cec679346a7d38bed96d9b',1,'FS_2048():&#160;commitments.h'],['../factoring__zk_8h.html#ae3ce9abc99cec679346a7d38bed96d9b',1,'FS_2048():&#160;factoring_zk.h']]]
+];
diff --git a/website/static/mpcdocs/search/defines_2.html b/website/static/mpcdocs/search/defines_2.html
new file mode 100644
index 0000000..c551011
--- /dev/null
+++ b/website/static/mpcdocs/search/defines_2.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_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/website/static/mpcdocs/search/defines_2.js b/website/static/mpcdocs/search/defines_2.js
new file mode 100644
index 0000000..872c36e
--- /dev/null
+++ b/website/static/mpcdocs/search/defines_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['hfs_5f2048_256',['HFS_2048',['../commitments_8h.html#af12daa3ccdbe8c973ca455b53f58f13b',1,'HFS_2048():&#160;commitments.h'],['../factoring__zk_8h.html#af12daa3ccdbe8c973ca455b53f58f13b',1,'HFS_2048():&#160;factoring_zk.h']]]
+];
diff --git a/website/static/mpcdocs/search/defines_3.html b/website/static/mpcdocs/search/defines_3.html
new file mode 100644
index 0000000..8c6d215
--- /dev/null
+++ b/website/static/mpcdocs/search/defines_3.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_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/website/static/mpcdocs/search/defines_3.js b/website/static/mpcdocs/search/defines_3.js
new file mode 100644
index 0000000..e3a7347
--- /dev/null
+++ b/website/static/mpcdocs/search/defines_3.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['mpc_5ffail_257',['MPC_FAIL',['../mpc_8h.html#a0a76c82492c2feb97c072c17dbf4151d',1,'mpc.h']]],
+  ['mpc_5finvalid_5fecp_258',['MPC_INVALID_ECP',['../mpc_8h.html#aab0897c8d775eb4331e21ad4003d08d2',1,'mpc.h']]],
+  ['mpc_5fok_259',['MPC_OK',['../mpc_8h.html#a530efe0885cea4e5b99df50b80bae294',1,'mpc.h']]],
+  ['mta_5ffail_260',['MTA_FAIL',['../mta_8h.html#a9cffabde5e58757768c87f8b96bed9be',1,'mta.h']]],
+  ['mta_5finvalid_5fecp_261',['MTA_INVALID_ECP',['../mta_8h.html#ac83dee7822a61403334298331d63171c',1,'mta.h']]],
+  ['mta_5fok_262',['MTA_OK',['../mta_8h.html#a38835fd15b3c165ca0acce5ba7f45dd6',1,'mta.h']]]
+];
diff --git a/website/static/mpcdocs/search/defines_4.html b/website/static/mpcdocs/search/defines_4.html
new file mode 100644
index 0000000..f4afac1
--- /dev/null
+++ b/website/static/mpcdocs/search/defines_4.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_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/website/static/mpcdocs/search/defines_4.js b/website/static/mpcdocs/search/defines_4.js
new file mode 100644
index 0000000..3b30ce6
--- /dev/null
+++ b/website/static/mpcdocs/search/defines_4.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+  ['schnorr_5ffail_263',['SCHNORR_FAIL',['../schnorr_8h.html#a4a5402fd8a88039b3f9cad0f508eec31',1,'schnorr.h']]],
+  ['schnorr_5finvalid_5fecp_264',['SCHNORR_INVALID_ECP',['../schnorr_8h.html#aacf81adc639d9529432d969dca09eb71',1,'schnorr.h']]],
+  ['schnorr_5fok_265',['SCHNORR_OK',['../schnorr_8h.html#a88f5f29dd2b59260b70ffcbc5f44c326',1,'schnorr.h']]],
+  ['sfs_5fsecp256k1_266',['SFS_SECP256K1',['../schnorr_8h.html#a9d25d694a29331ea767179901f8ae601',1,'schnorr.h']]],
+  ['sgs_5fsecp256k1_267',['SGS_SECP256K1',['../schnorr_8h.html#ab5bcf782e8f2fcd1404d5de3b85707fd',1,'schnorr.h']]]
+];
diff --git a/website/static/mpcdocs/search/files_0.html b/website/static/mpcdocs/search/files_0.html
new file mode 100644
index 0000000..9498842
--- /dev/null
+++ b/website/static/mpcdocs/search/files_0.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/files_0.js b/website/static/mpcdocs/search/files_0.js
new file mode 100644
index 0000000..f8be41e
--- /dev/null
+++ b/website/static/mpcdocs/search/files_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['commitments_2eh_145',['commitments.h',['../commitments_8h.html',1,'']]]
+];
diff --git a/website/static/mpcdocs/search/files_1.html b/website/static/mpcdocs/search/files_1.html
new file mode 100644
index 0000000..7050ef4
--- /dev/null
+++ b/website/static/mpcdocs/search/files_1.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/files_1.js b/website/static/mpcdocs/search/files_1.js
new file mode 100644
index 0000000..66825ed
--- /dev/null
+++ b/website/static/mpcdocs/search/files_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['factoring_5fzk_2eh_146',['factoring_zk.h',['../factoring__zk_8h.html',1,'']]]
+];
diff --git a/website/static/mpcdocs/search/files_2.html b/website/static/mpcdocs/search/files_2.html
new file mode 100644
index 0000000..497cdf5
--- /dev/null
+++ b/website/static/mpcdocs/search/files_2.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/files_2.js b/website/static/mpcdocs/search/files_2.js
new file mode 100644
index 0000000..b10ce77
--- /dev/null
+++ b/website/static/mpcdocs/search/files_2.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['mpc_2eh_147',['mpc.h',['../mpc_8h.html',1,'']]],
+  ['mta_2eh_148',['mta.h',['../mta_8h.html',1,'']]]
+];
diff --git a/website/static/mpcdocs/search/files_3.html b/website/static/mpcdocs/search/files_3.html
new file mode 100644
index 0000000..1ba106b
--- /dev/null
+++ b/website/static/mpcdocs/search/files_3.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/files_3.js b/website/static/mpcdocs/search/files_3.js
new file mode 100644
index 0000000..e34a66c
--- /dev/null
+++ b/website/static/mpcdocs/search/files_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['schnorr_2eh_149',['schnorr.h',['../schnorr_8h.html',1,'']]]
+];
diff --git a/website/static/mpcdocs/search/functions_0.html b/website/static/mpcdocs/search/functions_0.html
new file mode 100644
index 0000000..eb4c501
--- /dev/null
+++ b/website/static/mpcdocs/search/functions_0.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/functions_0.js b/website/static/mpcdocs/search/functions_0.js
new file mode 100644
index 0000000..a6082c8
--- /dev/null
+++ b/website/static/mpcdocs/search/functions_0.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+  ['commitments_5fbc_5fexport_5fpublic_5fmodulus_150',['COMMITMENTS_BC_export_public_modulus',['../commitments_8h.html#ad1c607c0e295be5b496475c3c4959fad',1,'commitments.h']]],
+  ['commitments_5fbc_5fkill_5fpriv_5fmodulus_151',['COMMITMENTS_BC_kill_priv_modulus',['../commitments_8h.html#a347b682fd4742fff73a9c924c88254ce',1,'commitments.h']]],
+  ['commitments_5fbc_5fsetup_152',['COMMITMENTS_BC_setup',['../commitments_8h.html#a522d6f485494a7a2297007121529db4a',1,'commitments.h']]],
+  ['commitments_5fnm_5fcommit_153',['COMMITMENTS_NM_commit',['../commitments_8h.html#a03557be3cbf16370e9113fff93bc8169',1,'commitments.h']]],
+  ['commitments_5fnm_5fdecommit_154',['COMMITMENTS_NM_decommit',['../commitments_8h.html#a224adcc226ada8b5b999db0ff00f0986',1,'commitments.h']]]
+];
diff --git a/website/static/mpcdocs/search/functions_1.html b/website/static/mpcdocs/search/functions_1.html
new file mode 100644
index 0000000..ef4088b
--- /dev/null
+++ b/website/static/mpcdocs/search/functions_1.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/functions_1.js b/website/static/mpcdocs/search/functions_1.js
new file mode 100644
index 0000000..e85ca03
--- /dev/null
+++ b/website/static/mpcdocs/search/functions_1.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['factoring_5fzk_5fmodulus_5ffromoctets_155',['FACTORING_ZK_modulus_fromOctets',['../factoring__zk_8h.html#afba5dd5398192722440f724c3ce6c37a',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fmodulus_5fkill_156',['FACTORING_ZK_modulus_kill',['../factoring__zk_8h.html#a40183656099267b7b20980fd5c2e8dcd',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fprove_157',['FACTORING_ZK_prove',['../factoring__zk_8h.html#aff201c3031798a0f0027dadf929190d7',1,'factoring_zk.h']]],
+  ['factoring_5fzk_5fverify_158',['FACTORING_ZK_verify',['../factoring__zk_8h.html#abc6d5b3c3df4c98b36d7f3abe8f69a03',1,'factoring_zk.h']]]
+];
diff --git a/website/static/mpcdocs/search/functions_2.html b/website/static/mpcdocs/search/functions_2.html
new file mode 100644
index 0000000..ca5aa10
--- /dev/null
+++ b/website/static/mpcdocs/search/functions_2.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/functions_2.js b/website/static/mpcdocs/search/functions_2.js
new file mode 100644
index 0000000..bd615ae
--- /dev/null
+++ b/website/static/mpcdocs/search/functions_2.js
@@ -0,0 +1,49 @@
+var searchData=
+[
+  ['mpc_5fdump_5fpaillier_5fsk_159',['MPC_DUMP_PAILLIER_SK',['../mpc_8h.html#af1096af9d7fa21d31bfcc538201ef976',1,'mpc.h']]],
+  ['mpc_5fecdsa_5fkey_5fpair_5fgenerate_160',['MPC_ECDSA_KEY_PAIR_GENERATE',['../mpc_8h.html#ad26837e4fd74e8d6aabc6b3bfaf9a7be',1,'mpc.h']]],
+  ['mpc_5fecdsa_5fsign_161',['MPC_ECDSA_SIGN',['../mpc_8h.html#a5a6fb00e1b95a507e89865051e1fb54a',1,'mpc.h']]],
+  ['mpc_5fecdsa_5fverify_162',['MPC_ECDSA_VERIFY',['../mpc_8h.html#a4502a62e9dfbd1ebe51a9b287196766f',1,'mpc.h']]],
+  ['mpc_5fhash_163',['MPC_HASH',['../mpc_8h.html#a0e70e4308d7a75c852bb2bfd6a57b5a9',1,'mpc.h']]],
+  ['mpc_5finvkgamma_164',['MPC_INVKGAMMA',['../mpc_8h.html#a7b14475ef026b509e974468fb473231c',1,'mpc.h']]],
+  ['mpc_5fk_5fgenerate_165',['MPC_K_GENERATE',['../mpc_8h.html#a605a8cc66cd1e9a5513ef270934d10a2',1,'mpc.h']]],
+  ['mpc_5fmta_5fclient1_166',['MPC_MTA_CLIENT1',['../mta_8h.html#a7bbc83a1d90c466061839c88375576a3',1,'mta.h']]],
+  ['mpc_5fmta_5fclient2_167',['MPC_MTA_CLIENT2',['../mta_8h.html#a673e46de79006b3d5e349a0eec6bd5c5',1,'mta.h']]],
+  ['mpc_5fmta_5fserver_168',['MPC_MTA_SERVER',['../mta_8h.html#af6150f97b1d2df1d70ec419211d37592',1,'mta.h']]],
+  ['mpc_5fphase5_5fcommit_169',['MPC_PHASE5_commit',['../mpc_8h.html#a007621069a3d86c06c3cdc113d0177ac',1,'mpc.h']]],
+  ['mpc_5fphase5_5fprove_170',['MPC_PHASE5_prove',['../mpc_8h.html#a3f1907b745524b7f991a821e0bf831d1',1,'mpc.h']]],
+  ['mpc_5fphase5_5fverify_171',['MPC_PHASE5_verify',['../mpc_8h.html#aba1ebc625244ce42e60a17f5edd2f71f',1,'mpc.h']]],
+  ['mpc_5fr_172',['MPC_R',['../mpc_8h.html#a4b2ad033889c2765aba63f84c6465471',1,'mpc.h']]],
+  ['mpc_5fs_173',['MPC_S',['../mpc_8h.html#acfb7f28581a6a2100047aaba6d03f6dc',1,'mpc.h']]],
+  ['mpc_5fsum_5fmta_174',['MPC_SUM_MTA',['../mta_8h.html#a585141482d0be764359316dc4aa9a345',1,'mta.h']]],
+  ['mpc_5fsum_5fpk_175',['MPC_SUM_PK',['../mpc_8h.html#a25cdf08efa8377c4521728600b3001b4',1,'mpc.h']]],
+  ['mpc_5fsum_5fs_176',['MPC_SUM_S',['../mpc_8h.html#a1cca737dad0e9351f8c4d993b90e71f4',1,'mpc.h']]],
+  ['mta_5frp_5fchallenge_177',['MTA_RP_challenge',['../mta_8h.html#aae8035b9c2d5b29f3ad9df3c44466e1d',1,'mta.h']]],
+  ['mta_5frp_5fcommit_178',['MTA_RP_commit',['../mta_8h.html#a9ae812a8b7fa69ae98d8eec9db51cc83',1,'mta.h']]],
+  ['mta_5frp_5fcommitment_5ffromoctets_179',['MTA_RP_commitment_fromOctets',['../mta_8h.html#a5f42fb5d017f34db268c112f7c8d056e',1,'mta.h']]],
+  ['mta_5frp_5fcommitment_5frv_5fkill_180',['MTA_RP_commitment_rv_kill',['../mta_8h.html#a83d69dbe4b86adcf814bf17593066b5d',1,'mta.h']]],
+  ['mta_5frp_5fcommitment_5ftooctets_181',['MTA_RP_commitment_toOctets',['../mta_8h.html#aa60c3b4a80719d29f0ebb747f3fc31a1',1,'mta.h']]],
+  ['mta_5frp_5fproof_5ffromoctets_182',['MTA_RP_proof_fromOctets',['../mta_8h.html#ad60da72de670c62131bc57f9e1070c84',1,'mta.h']]],
+  ['mta_5frp_5fproof_5ftooctets_183',['MTA_RP_proof_toOctets',['../mta_8h.html#a4c516e4898f3fbcdd55ed70ea0e336ef',1,'mta.h']]],
+  ['mta_5frp_5fprove_184',['MTA_RP_prove',['../mta_8h.html#a840590c8db0b435bece74978adf0748d',1,'mta.h']]],
+  ['mta_5frp_5fverify_185',['MTA_RP_verify',['../mta_8h.html#aaa4c5afa267be00e1819becd53805795',1,'mta.h']]],
+  ['mta_5fzk_5fchallenge_186',['MTA_ZK_challenge',['../mta_8h.html#a437965ad4a0dd602a0c1a4339afb0cb6',1,'mta.h']]],
+  ['mta_5fzk_5fcommit_187',['MTA_ZK_commit',['../mta_8h.html#a882f4c5922a453293eaaa7e3ec876bdf',1,'mta.h']]],
+  ['mta_5fzk_5fcommitment_5ffromoctets_188',['MTA_ZK_commitment_fromOctets',['../mta_8h.html#ad9cb35ed95b1ad3367fd78437e98aad5',1,'mta.h']]],
+  ['mta_5fzk_5fcommitment_5frv_5fkill_189',['MTA_ZK_commitment_rv_kill',['../mta_8h.html#a50085c31f3df46ac6814c46064ed2826',1,'mta.h']]],
+  ['mta_5fzk_5fcommitment_5ftooctets_190',['MTA_ZK_commitment_toOctets',['../mta_8h.html#afa9bc2f3876442f8519c67c011d4b0c5',1,'mta.h']]],
+  ['mta_5fzk_5fproof_5ffromoctets_191',['MTA_ZK_proof_fromOctets',['../mta_8h.html#a4d280db3b810c0d69603a8ee97222565',1,'mta.h']]],
+  ['mta_5fzk_5fproof_5ftooctets_192',['MTA_ZK_proof_toOctets',['../mta_8h.html#ae4cc541c94044beaf3a46cd5415da370',1,'mta.h']]],
+  ['mta_5fzk_5fprove_193',['MTA_ZK_prove',['../mta_8h.html#a275057a0134ee0cbef05e1c719f3f94b',1,'mta.h']]],
+  ['mta_5fzk_5frandom_5fchallenge_194',['MTA_ZK_random_challenge',['../mta_8h.html#ae4971990b60c103d7cb596c9a0d1d205',1,'mta.h']]],
+  ['mta_5fzk_5fverify_195',['MTA_ZK_verify',['../mta_8h.html#a34fa2c06ff8a165243621fe6d32a4b64',1,'mta.h']]],
+  ['mta_5fzkwc_5fchallenge_196',['MTA_ZKWC_challenge',['../mta_8h.html#a4dd5d4b2d4fc3e530632fb61b56c3f25',1,'mta.h']]],
+  ['mta_5fzkwc_5fcommit_197',['MTA_ZKWC_commit',['../mta_8h.html#a61bd2519a246c273ce42da382732c489',1,'mta.h']]],
+  ['mta_5fzkwc_5fcommitment_5ffromoctets_198',['MTA_ZKWC_commitment_fromOctets',['../mta_8h.html#a051196472aca3ad711f8c8f9f39280ce',1,'mta.h']]],
+  ['mta_5fzkwc_5fcommitment_5frv_5fkill_199',['MTA_ZKWC_commitment_rv_kill',['../mta_8h.html#adc4cbeae2c13b0e005c70532d2f96e46',1,'mta.h']]],
+  ['mta_5fzkwc_5fcommitment_5ftooctets_200',['MTA_ZKWC_commitment_toOctets',['../mta_8h.html#ab2611cfca7b4350f0921d56a3aed3185',1,'mta.h']]],
+  ['mta_5fzkwc_5fproof_5ffromoctets_201',['MTA_ZKWC_proof_fromOctets',['../mta_8h.html#afdc55dcddd98123e60590190425edab3',1,'mta.h']]],
+  ['mta_5fzkwc_5fproof_5ftooctets_202',['MTA_ZKWC_proof_toOctets',['../mta_8h.html#a127a8be76fdcde455e6d8645fcc93362',1,'mta.h']]],
+  ['mta_5fzkwc_5fprove_203',['MTA_ZKWC_prove',['../mta_8h.html#aec434d125d9f299a78388524ef5f0c51',1,'mta.h']]],
+  ['mta_5fzkwc_5fverify_204',['MTA_ZKWC_verify',['../mta_8h.html#aec8c96b0b4983b7e16bdcf7f24b16c08',1,'mta.h']]]
+];
diff --git a/website/static/mpcdocs/search/functions_3.html b/website/static/mpcdocs/search/functions_3.html
new file mode 100644
index 0000000..d79f55b
--- /dev/null
+++ b/website/static/mpcdocs/search/functions_3.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/functions_3.js b/website/static/mpcdocs/search/functions_3.js
new file mode 100644
index 0000000..0fda8de
--- /dev/null
+++ b/website/static/mpcdocs/search/functions_3.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+  ['schnorr_5fchallenge_205',['SCHNORR_challenge',['../schnorr_8h.html#a743028db55e66f4d30699e72a1b0bf1f',1,'schnorr.h']]],
+  ['schnorr_5fcommit_206',['SCHNORR_commit',['../schnorr_8h.html#aa8b82a3a089695a803f100b4a861c59b',1,'schnorr.h']]],
+  ['schnorr_5fd_5fchallenge_207',['SCHNORR_D_challenge',['../schnorr_8h.html#ad72917e4d1d2e9167c47062b4939dffb',1,'schnorr.h']]],
+  ['schnorr_5fd_5fcommit_208',['SCHNORR_D_commit',['../schnorr_8h.html#a20d267a63789b45faaf9b82018116268',1,'schnorr.h']]],
+  ['schnorr_5fd_5fprove_209',['SCHNORR_D_prove',['../schnorr_8h.html#a726141bddf04f630fe06e2f13a3d28e5',1,'schnorr.h']]],
+  ['schnorr_5fd_5fverify_210',['SCHNORR_D_verify',['../schnorr_8h.html#ab1c768caccc24700b28050962b603898',1,'schnorr.h']]],
+  ['schnorr_5fprove_211',['SCHNORR_prove',['../schnorr_8h.html#a874b17623254bc1701d1f25459770200',1,'schnorr.h']]],
+  ['schnorr_5frandom_5fchallenge_212',['SCHNORR_random_challenge',['../schnorr_8h.html#ab8e7127fb5812f3592da6ebf08b57512',1,'schnorr.h']]],
+  ['schnorr_5fverify_213',['SCHNORR_verify',['../schnorr_8h.html#a5f6c493e5b3acdc97acb0af7a0389723',1,'schnorr.h']]]
+];
diff --git a/website/static/mpcdocs/search/mag_sel.svg b/website/static/mpcdocs/search/mag_sel.svg
new file mode 100644
index 0000000..03626f6
--- /dev/null
+++ b/website/static/mpcdocs/search/mag_sel.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="svg2"
+   width="20"
+   height="19"
+   viewBox="0 0 20 19"
+   sodipodi:docname="mag_sel.svg"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="2096"
+     id="namedview4"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="32"
+     inkscape:cx="5.9792688"
+     inkscape:cy="1.1436277"
+     inkscape:window-x="1920"
+     inkscape:window-y="27"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <circle
+     style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+     id="path4611"
+     cx="5.5"
+     cy="8.5"
+     r="3.5" />
+  <path
+     style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 11,7 13.5,10 16,7 Z"
+     id="path4609"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccc" />
+  <path
+     style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 8.1085854,11.109059 2.7823556,2.782356"
+     id="path4630"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/website/static/mpcdocs/search/nomatches.html b/website/static/mpcdocs/search/nomatches.html
new file mode 100644
index 0000000..2b9360b
--- /dev/null
+++ b/website/static/mpcdocs/search/nomatches.html
@@ -0,0 +1,13 @@
+<!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><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/website/static/mpcdocs/search/pages_0.html b/website/static/mpcdocs/search/pages_0.html
new file mode 100644
index 0000000..8517b48
--- /dev/null
+++ b/website/static/mpcdocs/search/pages_0.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/pages_0.js b/website/static/mpcdocs/search/pages_0.js
new file mode 100644
index 0000000..8d6def0
--- /dev/null
+++ b/website/static/mpcdocs/search/pages_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['apache_20milagro_20multi_2dparty_20computation_268',['Apache Milagro Multi-Party Computation',['../index.html',1,'']]]
+];
diff --git a/website/static/mpcdocs/search/pages_1.html b/website/static/mpcdocs/search/pages_1.html
new file mode 100644
index 0000000..a0fb679
--- /dev/null
+++ b/website/static/mpcdocs/search/pages_1.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_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/website/static/mpcdocs/search/pages_1.js b/website/static/mpcdocs/search/pages_1.js
new file mode 100644
index 0000000..ea67e19
--- /dev/null
+++ b/website/static/mpcdocs/search/pages_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['linux_269',['Linux',['../linux.html',1,'']]]
+];
diff --git a/website/static/mpcdocs/search/search.css b/website/static/mpcdocs/search/search.css
new file mode 100644
index 0000000..9074198
--- /dev/null
+++ b/website/static/mpcdocs/search/search.css
@@ -0,0 +1,257 @@
+/*---------------- Search Box */
+
+#MSearchBox {
+    white-space : nowrap;
+    background: white;
+    border-radius: 0.65em;
+    box-shadow: inset 0.5px 0.5px 3px 0px #555;
+    z-index: 102;
+}
+
+#MSearchBox .left {
+    display: inline-block;
+    vertical-align: middle;
+    height: 1.4em;
+}
+
+#MSearchSelect {
+    display: inline-block;
+    vertical-align: middle;
+    height: 1.4em;
+    padding: 0 0 0 0.3em;
+    margin: 0;
+}
+
+#MSearchField {
+    display: inline-block;
+    vertical-align: middle;
+    width: 7.5em;
+    height: 1.1em;
+    margin: 0 0.15em;
+    padding: 0;
+    line-height: 1em;
+    border:none;
+    color: #909090;
+    outline: none;
+    font-family: Arial, Verdana, sans-serif;
+    -webkit-border-radius: 0px;
+    border-radius: 0px;
+    background: none;
+}
+
+
+#MSearchBox .right {
+    display: inline-block;
+    vertical-align: middle;
+    width: 1.4em;
+    height: 1.4em;
+}
+
+#MSearchClose {
+    display: none;
+    font-size: inherit;
+    background : none;
+    border: none;
+    margin: 0;
+    padding: 0;
+    outline: none;
+
+}
+
+#MSearchCloseImg {
+    height: 1.4em;
+    padding: 0.3em;
+    margin: 0;
+}
+
+.MSearchBoxActive #MSearchField {
+    color: #000000;
+}
+
+#main-menu > li:last-child {
+    /* This <li> object is the parent of the search bar */
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    height: 36px;
+    margin-right: 1em;
+}
+
+/*---------------- 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;
+    font-family: Arial, Verdana, sans-serif;
+}
+
+.SRPage .SRStatus {
+    padding: 2px 5px;
+    font-size: 8pt;
+    font-style: italic;
+    font-family: Arial, Verdana, sans-serif;
+}
+
+.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/website/static/mpcdocs/search/search.js b/website/static/mpcdocs/search/search.js
new file mode 100644
index 0000000..fb226f7
--- /dev/null
+++ b/website/static/mpcdocs/search/search.js
@@ -0,0 +1,816 @@
+/*
+ @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, extension)
+{
+  if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
+  if (!extension || extension == "") { extension = ".html"; }
+
+  // ---------- 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;
+  this.extension             = extension;
+
+  // ----------- 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 + this.extension;
+       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+       hasResultsPage = true;
+    }
+    else // nothing available for this search term
+    {
+       resultsPage = this.resultsPath + '/nomatches' + this.extension;
+       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-block';
+       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.toLowerCase() == 'div' && element.className == 'SRChildren')
+        {
+          return element;
+        }
+
+        if (element.nodeName.toLowerCase() == '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/website/static/mpcdocs/search/search_l.png b/website/static/mpcdocs/search/search_l.png
new file mode 100644
index 0000000..fd5f7da
--- /dev/null
+++ b/website/static/mpcdocs/search/search_l.png
Binary files differ
diff --git a/website/static/mpcdocs/search/search_m.png b/website/static/mpcdocs/search/search_m.png
new file mode 100644
index 0000000..b429a16
--- /dev/null
+++ b/website/static/mpcdocs/search/search_m.png
Binary files differ
diff --git a/website/static/mpcdocs/search/search_r.png b/website/static/mpcdocs/search/search_r.png
new file mode 100644
index 0000000..1af5d21
--- /dev/null
+++ b/website/static/mpcdocs/search/search_r.png
Binary files differ
diff --git a/website/static/mpcdocs/search/searchdata.js b/website/static/mpcdocs/search/searchdata.js
new file mode 100644
index 0000000..d9a2e76
--- /dev/null
+++ b/website/static/mpcdocs/search/searchdata.js
@@ -0,0 +1,36 @@
+var indexSectionsWithContent =
+{
+  0: "abcfghilmnpqrstuvwz",
+  1: "cfm",
+  2: "cfms",
+  3: "cfms",
+  4: "abginpqrstuvwz",
+  5: "m",
+  6: "cfhms",
+  7: "al"
+};
+
+var indexSectionNames =
+{
+  0: "all",
+  1: "classes",
+  2: "files",
+  3: "functions",
+  4: "variables",
+  5: "typedefs",
+  6: "defines",
+  7: "pages"
+};
+
+var indexSectionLabels =
+{
+  0: "All",
+  1: "Data Structures",
+  2: "Files",
+  3: "Functions",
+  4: "Variables",
+  5: "Typedefs",
+  6: "Macros",
+  7: "Pages"
+};
+
diff --git a/website/static/mpcdocs/search/typedefs_0.html b/website/static/mpcdocs/search/typedefs_0.html
new file mode 100644
index 0000000..a4684c4
--- /dev/null
+++ b/website/static/mpcdocs/search/typedefs_0.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="typedefs_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/website/static/mpcdocs/search/typedefs_0.js b/website/static/mpcdocs/search/typedefs_0.js
new file mode 100644
index 0000000..2b5fcd5
--- /dev/null
+++ b/website/static/mpcdocs/search/typedefs_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['mta_5fzkwc_5fcommitment_5frv_246',['MTA_ZKWC_commitment_rv',['../mta_8h.html#a520066c511d8661c3ebfe4c2a612a046',1,'mta.h']]],
+  ['mta_5fzkwc_5fproof_247',['MTA_ZKWC_proof',['../mta_8h.html#a96110337c3648cc19cc1bf60f085da14',1,'mta.h']]]
+];
diff --git a/website/static/mpcdocs/search/variables_0.html b/website/static/mpcdocs/search/variables_0.html
new file mode 100644
index 0000000..1e477c0
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_0.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/variables_0.js b/website/static/mpcdocs/search/variables_0.js
new file mode 100644
index 0000000..724a4e1
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['alpha_214',['alpha',['../structCOMMITMENTS__BC__priv__modulus.html#af4ddfbbfc46a62addce247732f82748c',1,'COMMITMENTS_BC_priv_modulus::alpha()'],['../structMTA__RP__commitment__rv.html#aecbdb8eaf2ced92b569f664d53ee0517',1,'MTA_RP_commitment_rv::alpha()'],['../structMTA__ZK__commitment__rv.html#a050280552a71f496ea2b53985b236563',1,'MTA_ZK_commitment_rv::alpha()']]]
+];
diff --git a/website/static/mpcdocs/search/variables_1.html b/website/static/mpcdocs/search/variables_1.html
new file mode 100644
index 0000000..ea73d9a
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_1.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/variables_1.js b/website/static/mpcdocs/search/variables_1.js
new file mode 100644
index 0000000..9cf95a5
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_1.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['b0_215',['b0',['../structCOMMITMENTS__BC__priv__modulus.html#ad21b260d4a4ea65d15d1bac83d738caa',1,'COMMITMENTS_BC_priv_modulus::b0()'],['../structCOMMITMENTS__BC__pub__modulus.html#a762d49ff299040ad437c6b970e063e1f',1,'COMMITMENTS_BC_pub_modulus::b0()']]],
+  ['b1_216',['b1',['../structCOMMITMENTS__BC__priv__modulus.html#a4c83fb166445c451b0e7bcd2419fb032',1,'COMMITMENTS_BC_priv_modulus::b1()'],['../structCOMMITMENTS__BC__pub__modulus.html#a750b04eab3d90c2b79e20ec7cc638ffe',1,'COMMITMENTS_BC_pub_modulus::b1()']]],
+  ['beta_217',['beta',['../structMTA__RP__commitment__rv.html#af6f441b304a8b2c8997860c2bbeaa6b1',1,'MTA_RP_commitment_rv::beta()'],['../structMTA__ZK__commitment__rv.html#a577c79735265327e7636ba9e8fdc8df5',1,'MTA_ZK_commitment_rv::beta()']]]
+];
diff --git a/website/static/mpcdocs/search/variables_2.html b/website/static/mpcdocs/search/variables_2.html
new file mode 100644
index 0000000..0580462
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_2.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/variables_2.js b/website/static/mpcdocs/search/variables_2.js
new file mode 100644
index 0000000..ac24cd6
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['gamma_218',['gamma',['../structMTA__RP__commitment__rv.html#adacad4216d4e48675f9e0e1c8af3a7b6',1,'MTA_RP_commitment_rv::gamma()'],['../structMTA__ZK__commitment__rv.html#aaa9ee388eaa9eb9a8ff9601a774cdcfd',1,'MTA_ZK_commitment_rv::gamma()']]]
+];
diff --git a/website/static/mpcdocs/search/variables_3.html b/website/static/mpcdocs/search/variables_3.html
new file mode 100644
index 0000000..0d69e76
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_3.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<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/website/static/mpcdocs/search/variables_3.js b/website/static/mpcdocs/search/variables_3.js
new file mode 100644
index 0000000..fe892e1
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_3.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['ialpha_219',['ialpha',['../structCOMMITMENTS__BC__priv__modulus.html#ac2e85b032336fcc302312016986f92e0',1,'COMMITMENTS_BC_priv_modulus']]],
+  ['invpq_220',['invPQ',['../structCOMMITMENTS__BC__priv__modulus.html#a50bb8437f9bd452e123decb02fa91aaa',1,'COMMITMENTS_BC_priv_modulus']]],
+  ['invpq_221',['invpq',['../structFACTORING__ZK__modulus.html#a85ff6e5ed1ce3c5822a31aa9d6de2107',1,'FACTORING_ZK_modulus']]]
+];
diff --git a/website/static/mpcdocs/search/variables_4.html b/website/static/mpcdocs/search/variables_4.html
new file mode 100644
index 0000000..a4b6506
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_4.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_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/website/static/mpcdocs/search/variables_4.js b/website/static/mpcdocs/search/variables_4.js
new file mode 100644
index 0000000..4d64c21
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_4.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['n_222',['N',['../structCOMMITMENTS__BC__priv__modulus.html#ae70b46cbe352068e8b8071f0e046d464',1,'COMMITMENTS_BC_priv_modulus::N()'],['../structCOMMITMENTS__BC__pub__modulus.html#a55b541b8cd4e0dcdc63c0786b32d4beb',1,'COMMITMENTS_BC_pub_modulus::N()']]],
+  ['n_223',['n',['../structFACTORING__ZK__modulus.html#ae95c609b5d7ffe3ca5514c00f990a297',1,'FACTORING_ZK_modulus']]]
+];
diff --git a/website/static/mpcdocs/search/variables_5.html b/website/static/mpcdocs/search/variables_5.html
new file mode 100644
index 0000000..7e345d1
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_5.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_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/website/static/mpcdocs/search/variables_5.js b/website/static/mpcdocs/search/variables_5.js
new file mode 100644
index 0000000..a732246
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_5.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['p_224',['P',['../structCOMMITMENTS__BC__priv__modulus.html#adf198e18dddecfc16a1575d340597f08',1,'COMMITMENTS_BC_priv_modulus']]],
+  ['p_225',['p',['../structFACTORING__ZK__modulus.html#aad32cef305e6df7e87e076d510a1dbff',1,'FACTORING_ZK_modulus']]],
+  ['pq_226',['pq',['../structCOMMITMENTS__BC__priv__modulus.html#a68de71c8f0e75e7f2085dc213a3c3214',1,'COMMITMENTS_BC_priv_modulus']]]
+];
diff --git a/website/static/mpcdocs/search/variables_6.html b/website/static/mpcdocs/search/variables_6.html
new file mode 100644
index 0000000..7d48e75
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_6.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_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/website/static/mpcdocs/search/variables_6.js b/website/static/mpcdocs/search/variables_6.js
new file mode 100644
index 0000000..3b18816
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_6.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['q_227',['Q',['../structCOMMITMENTS__BC__priv__modulus.html#ad85ce137db71ea1fc185c2ca320c1f07',1,'COMMITMENTS_BC_priv_modulus']]],
+  ['q_228',['q',['../structFACTORING__ZK__modulus.html#a56447221f4bc3cb0258874dd7619cbe5',1,'FACTORING_ZK_modulus']]]
+];
diff --git a/website/static/mpcdocs/search/variables_7.html b/website/static/mpcdocs/search/variables_7.html
new file mode 100644
index 0000000..5c26340
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_7.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_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/website/static/mpcdocs/search/variables_7.js b/website/static/mpcdocs/search/variables_7.js
new file mode 100644
index 0000000..029488f
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_7.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['rho_229',['rho',['../structMTA__RP__commitment__rv.html#a0ed6c0f9febc1b4cf7888de348296b46',1,'MTA_RP_commitment_rv::rho()'],['../structMTA__ZK__commitment__rv.html#a73b42958ba972918f43b9d6f9df7f31e',1,'MTA_ZK_commitment_rv::rho()']]],
+  ['rho1_230',['rho1',['../structMTA__ZK__commitment__rv.html#aefa9426a3a4ad48490520c99c311c486',1,'MTA_ZK_commitment_rv']]]
+];
diff --git a/website/static/mpcdocs/search/variables_8.html b/website/static/mpcdocs/search/variables_8.html
new file mode 100644
index 0000000..dc9ec54
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_8.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_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/website/static/mpcdocs/search/variables_8.js b/website/static/mpcdocs/search/variables_8.js
new file mode 100644
index 0000000..29d73e5
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_8.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['s_231',['s',['../structMTA__RP__proof.html#a8040777a4b2f46d78a7f113e924b76d0',1,'MTA_RP_proof::s()'],['../structMTA__ZK__proof.html#a34c86cae80dc0f8688cd1f7d5f1801ab',1,'MTA_ZK_proof::s()']]],
+  ['s1_232',['s1',['../structMTA__RP__proof.html#aa0e204527ce83ab95daa7b6a9977e473',1,'MTA_RP_proof::s1()'],['../structMTA__ZK__proof.html#a44224d752605c42e4ec583442eb6a61a',1,'MTA_ZK_proof::s1()']]],
+  ['s2_233',['s2',['../structMTA__RP__proof.html#a22e41915856f9e6c60fbde988a81870c',1,'MTA_RP_proof::s2()'],['../structMTA__ZK__proof.html#a4141b24bb3ad79318884ac0facb65800',1,'MTA_ZK_proof::s2()']]],
+  ['sigma_234',['sigma',['../structMTA__ZK__commitment__rv.html#ab26f42619df65db7f6dcdde009067ae9',1,'MTA_ZK_commitment_rv']]]
+];
diff --git a/website/static/mpcdocs/search/variables_9.html b/website/static/mpcdocs/search/variables_9.html
new file mode 100644
index 0000000..7b01475
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_9.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_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/website/static/mpcdocs/search/variables_9.js b/website/static/mpcdocs/search/variables_9.js
new file mode 100644
index 0000000..63aeea9
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_9.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+  ['t_235',['t',['../structMTA__ZK__commitment.html#ab7f5f3c057c0c12ccae9e1b1667a6cfc',1,'MTA_ZK_commitment']]],
+  ['t1_236',['t1',['../structMTA__ZK__proof.html#a2555d0e4789621eff8dc79cf96276860',1,'MTA_ZK_proof']]],
+  ['t2_237',['t2',['../structMTA__ZK__proof.html#affd6b54dc1a58cdc23ac27746c5eb31b',1,'MTA_ZK_proof']]],
+  ['tau_238',['tau',['../structMTA__ZK__commitment__rv.html#aa306d5c97d2df585d8ec3948bdf95b16',1,'MTA_ZK_commitment_rv']]]
+];
diff --git a/website/static/mpcdocs/search/variables_a.html b/website/static/mpcdocs/search/variables_a.html
new file mode 100644
index 0000000..52a724d
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_a.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_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/website/static/mpcdocs/search/variables_a.js b/website/static/mpcdocs/search/variables_a.js
new file mode 100644
index 0000000..41111b3
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_a.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['u_239',['U',['../structMTA__ZKWC__commitment.html#a6906ba960255cecf7cf29848dc40b9cc',1,'MTA_ZKWC_commitment']]],
+  ['u_240',['u',['../structMTA__RP__commitment.html#a201fa0a955e4cc4b8f0bfed810a58b77',1,'MTA_RP_commitment']]]
+];
diff --git a/website/static/mpcdocs/search/variables_b.html b/website/static/mpcdocs/search/variables_b.html
new file mode 100644
index 0000000..f376b27
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_b.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_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/website/static/mpcdocs/search/variables_b.js b/website/static/mpcdocs/search/variables_b.js
new file mode 100644
index 0000000..d9cbf78
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_b.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['v_241',['v',['../structMTA__ZK__commitment.html#a8c05e4faf0896ddb85501e02a80953ca',1,'MTA_ZK_commitment']]]
+];
diff --git a/website/static/mpcdocs/search/variables_c.html b/website/static/mpcdocs/search/variables_c.html
new file mode 100644
index 0000000..6019eba
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_c.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_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/website/static/mpcdocs/search/variables_c.js b/website/static/mpcdocs/search/variables_c.js
new file mode 100644
index 0000000..5684c7e
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_c.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['w_242',['w',['../structMTA__RP__commitment.html#a19d9074f354d2362f090db5cd6f34212',1,'MTA_RP_commitment::w()'],['../structMTA__ZK__commitment.html#a9ff382fe3ce3795f79bb29c8f2ed738a',1,'MTA_ZK_commitment::w()']]]
+];
diff --git a/website/static/mpcdocs/search/variables_d.html b/website/static/mpcdocs/search/variables_d.html
new file mode 100644
index 0000000..f61ae75
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_d.html
@@ -0,0 +1,37 @@
+<!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><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_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/website/static/mpcdocs/search/variables_d.js b/website/static/mpcdocs/search/variables_d.js
new file mode 100644
index 0000000..9faaf0e
--- /dev/null
+++ b/website/static/mpcdocs/search/variables_d.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['z_243',['z',['../structMTA__RP__commitment.html#aee20ad37a8cde2e2b6381055fff1c649',1,'MTA_RP_commitment::z()'],['../structMTA__ZK__commitment.html#a21736668dad1cf7aba4dd40f059703e0',1,'MTA_ZK_commitment::z()']]],
+  ['z1_244',['z1',['../structMTA__ZK__commitment.html#a63a83d96029b8e935c16b11c07d0b69a',1,'MTA_ZK_commitment']]],
+  ['zkc_245',['zkc',['../structMTA__ZKWC__commitment.html#a7025ae8eb9f30ddb6b6d601fd49a1da6',1,'MTA_ZKWC_commitment']]]
+];
diff --git a/website/static/mpcdocs/splitbar.png b/website/static/mpcdocs/splitbar.png
new file mode 100644
index 0000000..fe895f2
--- /dev/null
+++ b/website/static/mpcdocs/splitbar.png
Binary files differ
diff --git a/website/static/mpcdocs/structCOMMITMENTS__BC__priv__modulus.html b/website/static/mpcdocs/structCOMMITMENTS__BC__priv__modulus.html
new file mode 100644
index 0000000..96f41e7
--- /dev/null
+++ b/website/static/mpcdocs/structCOMMITMENTS__BC__priv__modulus.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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: COMMITMENTS_BC_priv_modulus 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">COMMITMENTS_BC_priv_modulus Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>RSA modulus for Bit Commitment.  
+</p>
+
+<p><code>#include &lt;<a class="el" href="commitments_8h_source.html">commitments.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:adf198e18dddecfc16a1575d340597f08"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#adf198e18dddecfc16a1575d340597f08">P</a> [HFLEN_2048]</td></tr>
+<tr class="separator:adf198e18dddecfc16a1575d340597f08"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad85ce137db71ea1fc185c2ca320c1f07"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#ad85ce137db71ea1fc185c2ca320c1f07">Q</a> [HFLEN_2048]</td></tr>
+<tr class="separator:ad85ce137db71ea1fc185c2ca320c1f07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a50bb8437f9bd452e123decb02fa91aaa"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#a50bb8437f9bd452e123decb02fa91aaa">invPQ</a> [HFLEN_2048]</td></tr>
+<tr class="separator:a50bb8437f9bd452e123decb02fa91aaa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68de71c8f0e75e7f2085dc213a3c3214"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#a68de71c8f0e75e7f2085dc213a3c3214">pq</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a68de71c8f0e75e7f2085dc213a3c3214"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae70b46cbe352068e8b8071f0e046d464"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#ae70b46cbe352068e8b8071f0e046d464">N</a> [FFLEN_2048]</td></tr>
+<tr class="separator:ae70b46cbe352068e8b8071f0e046d464"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af4ddfbbfc46a62addce247732f82748c"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#af4ddfbbfc46a62addce247732f82748c">alpha</a> [FFLEN_2048]</td></tr>
+<tr class="separator:af4ddfbbfc46a62addce247732f82748c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2e85b032336fcc302312016986f92e0"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#ac2e85b032336fcc302312016986f92e0">ialpha</a> [FFLEN_2048]</td></tr>
+<tr class="separator:ac2e85b032336fcc302312016986f92e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad21b260d4a4ea65d15d1bac83d738caa"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#ad21b260d4a4ea65d15d1bac83d738caa">b0</a> [FFLEN_2048]</td></tr>
+<tr class="separator:ad21b260d4a4ea65d15d1bac83d738caa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c83fb166445c451b0e7bcd2419fb032"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__priv__modulus.html#a4c83fb166445c451b0e7bcd2419fb032">b1</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a4c83fb166445c451b0e7bcd2419fb032"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="af4ddfbbfc46a62addce247732f82748c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af4ddfbbfc46a62addce247732f82748c">&#9670;&nbsp;</a></span>alpha</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 COMMITMENTS_BC_priv_modulus::alpha[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Secret exponent of the DLOG b1 = b0^alpha </p>
+
+</div>
+</div>
+<a id="ad21b260d4a4ea65d15d1bac83d738caa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad21b260d4a4ea65d15d1bac83d738caa">&#9670;&nbsp;</a></span>b0</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 COMMITMENTS_BC_priv_modulus::b0[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generator of G_pq as subgroup of Z/PQZ </p>
+
+</div>
+</div>
+<a id="a4c83fb166445c451b0e7bcd2419fb032"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4c83fb166445c451b0e7bcd2419fb032">&#9670;&nbsp;</a></span>b1</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 COMMITMENTS_BC_priv_modulus::b1[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generator of G_pq as subgroup of Z/PQZ </p>
+
+</div>
+</div>
+<a id="ac2e85b032336fcc302312016986f92e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2e85b032336fcc302312016986f92e0">&#9670;&nbsp;</a></span>ialpha</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 COMMITMENTS_BC_priv_modulus::ialpha[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Inverse of alpha mod pq. Secret exponent of the DLOG b0 = b1^ialpha </p>
+
+</div>
+</div>
+<a id="a50bb8437f9bd452e123decb02fa91aaa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50bb8437f9bd452e123decb02fa91aaa">&#9670;&nbsp;</a></span>invPQ</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 COMMITMENTS_BC_priv_modulus::invPQ[HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Precomputed P^(-1) mod Q </p>
+
+</div>
+</div>
+<a id="ae70b46cbe352068e8b8071f0e046d464"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae70b46cbe352068e8b8071f0e046d464">&#9670;&nbsp;</a></span>N</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 COMMITMENTS_BC_priv_modulus::N[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Public part of the modulus </p>
+
+</div>
+</div>
+<a id="adf198e18dddecfc16a1575d340597f08"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adf198e18dddecfc16a1575d340597f08">&#9670;&nbsp;</a></span>P</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 COMMITMENTS_BC_priv_modulus::P[HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Safe prime P = 2p+1 </p>
+
+</div>
+</div>
+<a id="a68de71c8f0e75e7f2085dc213a3c3214"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68de71c8f0e75e7f2085dc213a3c3214">&#9670;&nbsp;</a></span>pq</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 COMMITMENTS_BC_priv_modulus::pq[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Precomputed product of p and q </p>
+
+</div>
+</div>
+<a id="ad85ce137db71ea1fc185c2ca320c1f07"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad85ce137db71ea1fc185c2ca320c1f07">&#9670;&nbsp;</a></span>Q</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 COMMITMENTS_BC_priv_modulus::Q[HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Safe prime Q = 2q+1 </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="commitments_8h_source.html">commitments.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/structCOMMITMENTS__BC__pub__modulus.html b/website/static/mpcdocs/structCOMMITMENTS__BC__pub__modulus.html
new file mode 100644
index 0000000..8a8c6bc
--- /dev/null
+++ b/website/static/mpcdocs/structCOMMITMENTS__BC__pub__modulus.html
@@ -0,0 +1,147 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: COMMITMENTS_BC_pub_modulus 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">COMMITMENTS_BC_pub_modulus Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Public RSA modulus for Bit Commitment.  
+</p>
+
+<p><code>#include &lt;<a class="el" href="commitments_8h_source.html">commitments.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a55b541b8cd4e0dcdc63c0786b32d4beb"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__pub__modulus.html#a55b541b8cd4e0dcdc63c0786b32d4beb">N</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a55b541b8cd4e0dcdc63c0786b32d4beb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a762d49ff299040ad437c6b970e063e1f"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__pub__modulus.html#a762d49ff299040ad437c6b970e063e1f">b0</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a762d49ff299040ad437c6b970e063e1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a750b04eab3d90c2b79e20ec7cc638ffe"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCOMMITMENTS__BC__pub__modulus.html#a750b04eab3d90c2b79e20ec7cc638ffe">b1</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a750b04eab3d90c2b79e20ec7cc638ffe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a762d49ff299040ad437c6b970e063e1f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a762d49ff299040ad437c6b970e063e1f">&#9670;&nbsp;</a></span>b0</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 COMMITMENTS_BC_pub_modulus::b0[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generator of G_pq as subgroup of Z/PQZ </p>
+
+</div>
+</div>
+<a id="a750b04eab3d90c2b79e20ec7cc638ffe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a750b04eab3d90c2b79e20ec7cc638ffe">&#9670;&nbsp;</a></span>b1</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 COMMITMENTS_BC_pub_modulus::b1[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Generator of G_pq as subgroup of Z/PQZ </p>
+
+</div>
+</div>
+<a id="a55b541b8cd4e0dcdc63c0786b32d4beb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a55b541b8cd4e0dcdc63c0786b32d4beb">&#9670;&nbsp;</a></span>N</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 COMMITMENTS_BC_pub_modulus::N[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Modulus </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="commitments_8h_source.html">commitments.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/structFACTORING__ZK__modulus.html b/website/static/mpcdocs/structFACTORING__ZK__modulus.html
new file mode 100644
index 0000000..8240792
--- /dev/null
+++ b/website/static/mpcdocs/structFACTORING__ZK__modulus.html
@@ -0,0 +1,164 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: FACTORING_ZK_modulus 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">FACTORING_ZK_modulus Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Modulus to prove knowledge of factoring.  
+</p>
+
+<p><code>#include &lt;<a class="el" href="factoring__zk_8h_source.html">factoring_zk.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aad32cef305e6df7e87e076d510a1dbff"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFACTORING__ZK__modulus.html#aad32cef305e6df7e87e076d510a1dbff">p</a> [HFLEN_2048]</td></tr>
+<tr class="separator:aad32cef305e6df7e87e076d510a1dbff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a56447221f4bc3cb0258874dd7619cbe5"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFACTORING__ZK__modulus.html#a56447221f4bc3cb0258874dd7619cbe5">q</a> [HFLEN_2048]</td></tr>
+<tr class="separator:a56447221f4bc3cb0258874dd7619cbe5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85ff6e5ed1ce3c5822a31aa9d6de2107"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFACTORING__ZK__modulus.html#a85ff6e5ed1ce3c5822a31aa9d6de2107">invpq</a> [HFLEN_2048]</td></tr>
+<tr class="separator:a85ff6e5ed1ce3c5822a31aa9d6de2107"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae95c609b5d7ffe3ca5514c00f990a297"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structFACTORING__ZK__modulus.html#ae95c609b5d7ffe3ca5514c00f990a297">n</a> [FFLEN_2048]</td></tr>
+<tr class="separator:ae95c609b5d7ffe3ca5514c00f990a297"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a85ff6e5ed1ce3c5822a31aa9d6de2107"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a85ff6e5ed1ce3c5822a31aa9d6de2107">&#9670;&nbsp;</a></span>invpq</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 FACTORING_ZK_modulus::invpq[HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Precomputed inverse for CRT </p>
+
+</div>
+</div>
+<a id="ae95c609b5d7ffe3ca5514c00f990a297"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae95c609b5d7ffe3ca5514c00f990a297">&#9670;&nbsp;</a></span>n</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 FACTORING_ZK_modulus::n[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Modulus </p>
+
+</div>
+</div>
+<a id="aad32cef305e6df7e87e076d510a1dbff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad32cef305e6df7e87e076d510a1dbff">&#9670;&nbsp;</a></span>p</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 FACTORING_ZK_modulus::p[HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>First factor of the modulus </p>
+
+</div>
+</div>
+<a id="a56447221f4bc3cb0258874dd7619cbe5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a56447221f4bc3cb0258874dd7619cbe5">&#9670;&nbsp;</a></span>q</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 FACTORING_ZK_modulus::q[HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Second factor of the modulus </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="factoring__zk_8h_source.html">factoring_zk.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/structMTA__RP__commitment.html b/website/static/mpcdocs/structMTA__RP__commitment.html
new file mode 100644
index 0000000..c5c47f8
--- /dev/null
+++ b/website/static/mpcdocs/structMTA__RP__commitment.html
@@ -0,0 +1,147 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: MTA_RP_commitment 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">MTA_RP_commitment Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Public commitment for the Range Proof.  
+</p>
+
+<p><code>#include &lt;<a class="el" href="mta_8h_source.html">mta.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aee20ad37a8cde2e2b6381055fff1c649"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__RP__commitment.html#aee20ad37a8cde2e2b6381055fff1c649">z</a> [FFLEN_2048]</td></tr>
+<tr class="separator:aee20ad37a8cde2e2b6381055fff1c649"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a201fa0a955e4cc4b8f0bfed810a58b77"><td class="memItemLeft" align="right" valign="top">BIG_512_60&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__RP__commitment.html#a201fa0a955e4cc4b8f0bfed810a58b77">u</a> [FFLEN_4096]</td></tr>
+<tr class="separator:a201fa0a955e4cc4b8f0bfed810a58b77"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a19d9074f354d2362f090db5cd6f34212"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__RP__commitment.html#a19d9074f354d2362f090db5cd6f34212">w</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a19d9074f354d2362f090db5cd6f34212"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a201fa0a955e4cc4b8f0bfed810a58b77"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a201fa0a955e4cc4b8f0bfed810a58b77">&#9670;&nbsp;</a></span>u</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_512_60 MTA_RP_commitment::u[FFLEN_4096]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Commitment to paillier PK using alpha and beta </p>
+
+</div>
+</div>
+<a id="a19d9074f354d2362f090db5cd6f34212"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a19d9074f354d2362f090db5cd6f34212">&#9670;&nbsp;</a></span>w</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_RP_commitment::w[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Commitment to h1, h2, m using gamma </p>
+
+</div>
+</div>
+<a id="aee20ad37a8cde2e2b6381055fff1c649"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aee20ad37a8cde2e2b6381055fff1c649">&#9670;&nbsp;</a></span>z</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_RP_commitment::z[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Commitment to h1, h2, m using rho </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="mta_8h_source.html">mta.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/structMTA__RP__commitment__rv.html b/website/static/mpcdocs/structMTA__RP__commitment__rv.html
new file mode 100644
index 0000000..fc0783b
--- /dev/null
+++ b/website/static/mpcdocs/structMTA__RP__commitment__rv.html
@@ -0,0 +1,164 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: MTA_RP_commitment_rv 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">MTA_RP_commitment_rv Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Secret random values for the Range Proof commitment.  
+</p>
+
+<p><code>#include &lt;<a class="el" href="mta_8h_source.html">mta.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aecbdb8eaf2ced92b569f664d53ee0517"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__RP__commitment__rv.html#aecbdb8eaf2ced92b569f664d53ee0517">alpha</a> [FFLEN_2048]</td></tr>
+<tr class="separator:aecbdb8eaf2ced92b569f664d53ee0517"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6f441b304a8b2c8997860c2bbeaa6b1"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__RP__commitment__rv.html#af6f441b304a8b2c8997860c2bbeaa6b1">beta</a> [FFLEN_2048]</td></tr>
+<tr class="separator:af6f441b304a8b2c8997860c2bbeaa6b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adacad4216d4e48675f9e0e1c8af3a7b6"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__RP__commitment__rv.html#adacad4216d4e48675f9e0e1c8af3a7b6">gamma</a> [FFLEN_2048+HFLEN_2048]</td></tr>
+<tr class="separator:adacad4216d4e48675f9e0e1c8af3a7b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ed6c0f9febc1b4cf7888de348296b46"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__RP__commitment__rv.html#a0ed6c0f9febc1b4cf7888de348296b46">rho</a> [FFLEN_2048+HFLEN_2048]</td></tr>
+<tr class="separator:a0ed6c0f9febc1b4cf7888de348296b46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="aecbdb8eaf2ced92b569f664d53ee0517"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aecbdb8eaf2ced92b569f664d53ee0517">&#9670;&nbsp;</a></span>alpha</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_RP_commitment_rv::alpha[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Random value in \( [0, \ldots, q^3] \) </p>
+
+</div>
+</div>
+<a id="af6f441b304a8b2c8997860c2bbeaa6b1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af6f441b304a8b2c8997860c2bbeaa6b1">&#9670;&nbsp;</a></span>beta</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_RP_commitment_rv::beta[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Random value in \( [0, \ldots, N] \) </p>
+
+</div>
+</div>
+<a id="adacad4216d4e48675f9e0e1c8af3a7b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adacad4216d4e48675f9e0e1c8af3a7b6">&#9670;&nbsp;</a></span>gamma</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_RP_commitment_rv::gamma[FFLEN_2048+HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Random value in \( [0, \ldots, \tilde{N}q^3] \) </p>
+
+</div>
+</div>
+<a id="a0ed6c0f9febc1b4cf7888de348296b46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ed6c0f9febc1b4cf7888de348296b46">&#9670;&nbsp;</a></span>rho</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_RP_commitment_rv::rho[FFLEN_2048+HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Random value in \( [0, \ldots, \tilde{N}q] \) </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="mta_8h_source.html">mta.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/structMTA__RP__proof.html b/website/static/mpcdocs/structMTA__RP__proof.html
new file mode 100644
index 0000000..b47d08a
--- /dev/null
+++ b/website/static/mpcdocs/structMTA__RP__proof.html
@@ -0,0 +1,147 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: MTA_RP_proof 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">MTA_RP_proof Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Range Proof.  
+</p>
+
+<p><code>#include &lt;<a class="el" href="mta_8h_source.html">mta.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a8040777a4b2f46d78a7f113e924b76d0"><td class="memItemLeft" align="right" valign="top">BIG_512_60&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__RP__proof.html#a8040777a4b2f46d78a7f113e924b76d0">s</a> [FFLEN_4096]</td></tr>
+<tr class="separator:a8040777a4b2f46d78a7f113e924b76d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa0e204527ce83ab95daa7b6a9977e473"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__RP__proof.html#aa0e204527ce83ab95daa7b6a9977e473">s1</a> [FFLEN_2048]</td></tr>
+<tr class="separator:aa0e204527ce83ab95daa7b6a9977e473"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a22e41915856f9e6c60fbde988a81870c"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__RP__proof.html#a22e41915856f9e6c60fbde988a81870c">s2</a> [FFLEN_2048+HFLEN_2048]</td></tr>
+<tr class="separator:a22e41915856f9e6c60fbde988a81870c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a8040777a4b2f46d78a7f113e924b76d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8040777a4b2f46d78a7f113e924b76d0">&#9670;&nbsp;</a></span>s</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_512_60 MTA_RP_proof::s[FFLEN_4096]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Proof of knowledge of the Paillier r value </p>
+
+</div>
+</div>
+<a id="aa0e204527ce83ab95daa7b6a9977e473"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa0e204527ce83ab95daa7b6a9977e473">&#9670;&nbsp;</a></span>s1</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_RP_proof::s1[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Proof of knowledge of the message. It must be less than q^3 </p>
+
+</div>
+</div>
+<a id="a22e41915856f9e6c60fbde988a81870c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a22e41915856f9e6c60fbde988a81870c">&#9670;&nbsp;</a></span>s2</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_RP_proof::s2[FFLEN_2048+HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Auxiliary proof of knowledge for the message </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="mta_8h_source.html">mta.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/structMTA__ZKWC__commitment.html b/website/static/mpcdocs/structMTA__ZKWC__commitment.html
new file mode 100644
index 0000000..51ad9cb
--- /dev/null
+++ b/website/static/mpcdocs/structMTA__ZKWC__commitment.html
@@ -0,0 +1,130 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: MTA_ZKWC_commitment 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">MTA_ZKWC_commitment Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Public commitment for the Receiver ZKP with check.  
+</p>
+
+<p><code>#include &lt;<a class="el" href="mta_8h_source.html">mta.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a7025ae8eb9f30ddb6b6d601fd49a1da6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZKWC__commitment.html#a7025ae8eb9f30ddb6b6d601fd49a1da6">zkc</a></td></tr>
+<tr class="separator:a7025ae8eb9f30ddb6b6d601fd49a1da6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6906ba960255cecf7cf29848dc40b9cc"><td class="memItemLeft" align="right" valign="top">ECP_SECP256K1&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZKWC__commitment.html#a6906ba960255cecf7cf29848dc40b9cc">U</a></td></tr>
+<tr class="separator:a6906ba960255cecf7cf29848dc40b9cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a6906ba960255cecf7cf29848dc40b9cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6906ba960255cecf7cf29848dc40b9cc">&#9670;&nbsp;</a></span>U</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">ECP_SECP256K1 MTA_ZKWC_commitment::U</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Commitment for the DLOG knowledge proof </p>
+
+</div>
+</div>
+<a id="a7025ae8eb9f30ddb6b6d601fd49a1da6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7025ae8eb9f30ddb6b6d601fd49a1da6">&#9670;&nbsp;</a></span>zkc</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structMTA__ZK__commitment.html">MTA_ZK_commitment</a> MTA_ZKWC_commitment::zkc</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Commitment for the base Receiver ZKP </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="mta_8h_source.html">mta.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/structMTA__ZK__commitment.html b/website/static/mpcdocs/structMTA__ZK__commitment.html
new file mode 100644
index 0000000..b869063
--- /dev/null
+++ b/website/static/mpcdocs/structMTA__ZK__commitment.html
@@ -0,0 +1,181 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: MTA_ZK_commitment 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">MTA_ZK_commitment Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Public commitment for the Receiver ZKP.  
+</p>
+
+<p><code>#include &lt;<a class="el" href="mta_8h_source.html">mta.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a21736668dad1cf7aba4dd40f059703e0"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment.html#a21736668dad1cf7aba4dd40f059703e0">z</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a21736668dad1cf7aba4dd40f059703e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63a83d96029b8e935c16b11c07d0b69a"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment.html#a63a83d96029b8e935c16b11c07d0b69a">z1</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a63a83d96029b8e935c16b11c07d0b69a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab7f5f3c057c0c12ccae9e1b1667a6cfc"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment.html#ab7f5f3c057c0c12ccae9e1b1667a6cfc">t</a> [FFLEN_2048]</td></tr>
+<tr class="separator:ab7f5f3c057c0c12ccae9e1b1667a6cfc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c05e4faf0896ddb85501e02a80953ca"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment.html#a8c05e4faf0896ddb85501e02a80953ca">v</a> [2 *FFLEN_2048]</td></tr>
+<tr class="separator:a8c05e4faf0896ddb85501e02a80953ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ff382fe3ce3795f79bb29c8f2ed738a"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment.html#a9ff382fe3ce3795f79bb29c8f2ed738a">w</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a9ff382fe3ce3795f79bb29c8f2ed738a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="ab7f5f3c057c0c12ccae9e1b1667a6cfc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab7f5f3c057c0c12ccae9e1b1667a6cfc">&#9670;&nbsp;</a></span>t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_commitment::t[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Commitment to h1, h2, y using sigma </p>
+
+</div>
+</div>
+<a id="a8c05e4faf0896ddb85501e02a80953ca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c05e4faf0896ddb85501e02a80953ca">&#9670;&nbsp;</a></span>v</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_commitment::v[2 *FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Commitment to paillier PK and c1 using alpha and gamma </p>
+
+</div>
+</div>
+<a id="a9ff382fe3ce3795f79bb29c8f2ed738a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ff382fe3ce3795f79bb29c8f2ed738a">&#9670;&nbsp;</a></span>w</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_commitment::w[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Auxiliary Commitment to h1, h2, binding gamma and tau </p>
+
+</div>
+</div>
+<a id="a21736668dad1cf7aba4dd40f059703e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a21736668dad1cf7aba4dd40f059703e0">&#9670;&nbsp;</a></span>z</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_commitment::z[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Commitment to h1, h2, x using rho </p>
+
+</div>
+</div>
+<a id="a63a83d96029b8e935c16b11c07d0b69a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63a83d96029b8e935c16b11c07d0b69a">&#9670;&nbsp;</a></span>z1</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_commitment::z1[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Auxiliary Commitment to h1, h2, binding alpha and rho1 </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="mta_8h_source.html">mta.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/structMTA__ZK__commitment__rv.html b/website/static/mpcdocs/structMTA__ZK__commitment__rv.html
new file mode 100644
index 0000000..96dcda1
--- /dev/null
+++ b/website/static/mpcdocs/structMTA__ZK__commitment__rv.html
@@ -0,0 +1,215 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: MTA_ZK_commitment_rv 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">MTA_ZK_commitment_rv Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Secret random values for the receiver ZKP commitment.  
+</p>
+
+<p><code>#include &lt;<a class="el" href="mta_8h_source.html">mta.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a050280552a71f496ea2b53985b236563"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment__rv.html#a050280552a71f496ea2b53985b236563">alpha</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a050280552a71f496ea2b53985b236563"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a577c79735265327e7636ba9e8fdc8df5"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment__rv.html#a577c79735265327e7636ba9e8fdc8df5">beta</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a577c79735265327e7636ba9e8fdc8df5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa9ee388eaa9eb9a8ff9601a774cdcfd"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment__rv.html#aaa9ee388eaa9eb9a8ff9601a774cdcfd">gamma</a> [FFLEN_2048]</td></tr>
+<tr class="separator:aaa9ee388eaa9eb9a8ff9601a774cdcfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73b42958ba972918f43b9d6f9df7f31e"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment__rv.html#a73b42958ba972918f43b9d6f9df7f31e">rho</a> [FFLEN_2048+HFLEN_2048]</td></tr>
+<tr class="separator:a73b42958ba972918f43b9d6f9df7f31e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aefa9426a3a4ad48490520c99c311c486"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment__rv.html#aefa9426a3a4ad48490520c99c311c486">rho1</a> [FFLEN_2048+HFLEN_2048]</td></tr>
+<tr class="separator:aefa9426a3a4ad48490520c99c311c486"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab26f42619df65db7f6dcdde009067ae9"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment__rv.html#ab26f42619df65db7f6dcdde009067ae9">sigma</a> [FFLEN_2048+HFLEN_2048]</td></tr>
+<tr class="separator:ab26f42619df65db7f6dcdde009067ae9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa306d5c97d2df585d8ec3948bdf95b16"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__commitment__rv.html#aa306d5c97d2df585d8ec3948bdf95b16">tau</a> [FFLEN_2048+HFLEN_2048]</td></tr>
+<tr class="separator:aa306d5c97d2df585d8ec3948bdf95b16"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a050280552a71f496ea2b53985b236563"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a050280552a71f496ea2b53985b236563">&#9670;&nbsp;</a></span>alpha</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_commitment_rv::alpha[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Random value in \( [0, \ldots, q^3] \) </p>
+
+</div>
+</div>
+<a id="a577c79735265327e7636ba9e8fdc8df5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a577c79735265327e7636ba9e8fdc8df5">&#9670;&nbsp;</a></span>beta</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_commitment_rv::beta[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Random value in \( [0, \ldots, N] \) </p>
+
+</div>
+</div>
+<a id="aaa9ee388eaa9eb9a8ff9601a774cdcfd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaa9ee388eaa9eb9a8ff9601a774cdcfd">&#9670;&nbsp;</a></span>gamma</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_commitment_rv::gamma[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Random value in \( [0, \ldots, N] \) </p>
+
+</div>
+</div>
+<a id="a73b42958ba972918f43b9d6f9df7f31e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a73b42958ba972918f43b9d6f9df7f31e">&#9670;&nbsp;</a></span>rho</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_commitment_rv::rho[FFLEN_2048+HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Random value in \( [0, \ldots, \tilde{N}q] \) </p>
+
+</div>
+</div>
+<a id="aefa9426a3a4ad48490520c99c311c486"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aefa9426a3a4ad48490520c99c311c486">&#9670;&nbsp;</a></span>rho1</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_commitment_rv::rho1[FFLEN_2048+HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Random value in \( [0, \ldots, \tilde{N}q^3] \) </p>
+
+</div>
+</div>
+<a id="ab26f42619df65db7f6dcdde009067ae9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab26f42619df65db7f6dcdde009067ae9">&#9670;&nbsp;</a></span>sigma</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_commitment_rv::sigma[FFLEN_2048+HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Random value in \( [0, \ldots, \tilde{N}q] \) </p>
+
+</div>
+</div>
+<a id="aa306d5c97d2df585d8ec3948bdf95b16"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa306d5c97d2df585d8ec3948bdf95b16">&#9670;&nbsp;</a></span>tau</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_commitment_rv::tau[FFLEN_2048+HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Random value in \( [0, \ldots, \tilde{N}q] \) </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="mta_8h_source.html">mta.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/structMTA__ZK__proof.html b/website/static/mpcdocs/structMTA__ZK__proof.html
new file mode 100644
index 0000000..553f865
--- /dev/null
+++ b/website/static/mpcdocs/structMTA__ZK__proof.html
@@ -0,0 +1,181 @@
+<!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.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>libmpc: MTA_ZK_proof 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>
+<script type="text/x-mathjax-config">
+  MathJax.Hub.Config({
+    extensions: ["tex2jax.js"],
+    jax: ["input/TeX","output/HTML-CSS"],
+});
+</script>
+<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.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">libmpc
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<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','.html');
+/* @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">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">MTA_ZK_proof Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Range Proof for the Receiver ZKP.  
+</p>
+
+<p><code>#include &lt;<a class="el" href="mta_8h_source.html">mta.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a34c86cae80dc0f8688cd1f7d5f1801ab"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__proof.html#a34c86cae80dc0f8688cd1f7d5f1801ab">s</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a34c86cae80dc0f8688cd1f7d5f1801ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44224d752605c42e4ec583442eb6a61a"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__proof.html#a44224d752605c42e4ec583442eb6a61a">s1</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a44224d752605c42e4ec583442eb6a61a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4141b24bb3ad79318884ac0facb65800"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__proof.html#a4141b24bb3ad79318884ac0facb65800">s2</a> [FFLEN_2048+HFLEN_2048]</td></tr>
+<tr class="separator:a4141b24bb3ad79318884ac0facb65800"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2555d0e4789621eff8dc79cf96276860"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__proof.html#a2555d0e4789621eff8dc79cf96276860">t1</a> [FFLEN_2048]</td></tr>
+<tr class="separator:a2555d0e4789621eff8dc79cf96276860"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:affd6b54dc1a58cdc23ac27746c5eb31b"><td class="memItemLeft" align="right" valign="top">BIG_1024_58&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structMTA__ZK__proof.html#affd6b54dc1a58cdc23ac27746c5eb31b">t2</a> [FFLEN_2048+HFLEN_2048]</td></tr>
+<tr class="separator:affd6b54dc1a58cdc23ac27746c5eb31b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a34c86cae80dc0f8688cd1f7d5f1801ab"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a34c86cae80dc0f8688cd1f7d5f1801ab">&#9670;&nbsp;</a></span>s</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_proof::s[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Proof of knowledge of the Paillier r value </p>
+
+</div>
+</div>
+<a id="a44224d752605c42e4ec583442eb6a61a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44224d752605c42e4ec583442eb6a61a">&#9670;&nbsp;</a></span>s1</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_proof::s1[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Proof of knowledge of x. It must be less than q^3 </p>
+
+</div>
+</div>
+<a id="a4141b24bb3ad79318884ac0facb65800"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4141b24bb3ad79318884ac0facb65800">&#9670;&nbsp;</a></span>s2</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_proof::s2[FFLEN_2048+HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Auxiliary proof of knowledge for x </p>
+
+</div>
+</div>
+<a id="a2555d0e4789621eff8dc79cf96276860"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2555d0e4789621eff8dc79cf96276860">&#9670;&nbsp;</a></span>t1</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_proof::t1[FFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Proof of knowledge of y </p>
+
+</div>
+</div>
+<a id="affd6b54dc1a58cdc23ac27746c5eb31b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#affd6b54dc1a58cdc23ac27746c5eb31b">&#9670;&nbsp;</a></span>t2</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">BIG_1024_58 MTA_ZK_proof::t2[FFLEN_2048+HFLEN_2048]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Auxiliary proof of knowledge for y </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="mta_8h_source.html">mta.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/website/static/mpcdocs/sync_off.png b/website/static/mpcdocs/sync_off.png
new file mode 100644
index 0000000..3b443fc
--- /dev/null
+++ b/website/static/mpcdocs/sync_off.png
Binary files differ
diff --git a/website/static/mpcdocs/sync_on.png b/website/static/mpcdocs/sync_on.png
new file mode 100644
index 0000000..e08320f
--- /dev/null
+++ b/website/static/mpcdocs/sync_on.png
Binary files differ
diff --git a/website/static/mpcdocs/tab_a.png b/website/static/mpcdocs/tab_a.png
new file mode 100644
index 0000000..3b725c4
--- /dev/null
+++ b/website/static/mpcdocs/tab_a.png
Binary files differ
diff --git a/website/static/mpcdocs/tab_b.png b/website/static/mpcdocs/tab_b.png
new file mode 100644
index 0000000..e2b4a86
--- /dev/null
+++ b/website/static/mpcdocs/tab_b.png
Binary files differ
diff --git a/website/static/mpcdocs/tab_h.png b/website/static/mpcdocs/tab_h.png
new file mode 100644
index 0000000..fd5cb70
--- /dev/null
+++ b/website/static/mpcdocs/tab_h.png
Binary files differ
diff --git a/website/static/mpcdocs/tab_s.png b/website/static/mpcdocs/tab_s.png
new file mode 100644
index 0000000..ab478c9
--- /dev/null
+++ b/website/static/mpcdocs/tab_s.png
Binary files differ
diff --git a/website/static/mpcdocs/tabs.css b/website/static/mpcdocs/tabs.css
new file mode 100644
index 0000000..7d45d36
--- /dev/null
+++ b/website/static/mpcdocs/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:0px/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:0px 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:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.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);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{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{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{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:#fff;text-shadow:0px 1px 1px #000}.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;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff 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;border-radius:5px !important;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:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.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;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}}