arnaucube
arnaucube/poulpyPublic Self-hosted repository
Update doc & readme (#122)

* update poulpy_arch.svg

* update main readme

* update lib_diagram.png & main readme

* update poulpy-core readme

* update backend readmes

* update poulpy-hal readme

* update poulpy-schemes readme

* update CHANGELOG.md
Jean-Philippe Bossuat jeanphilippe.bossuat@gmail.com
Wed, 19 Nov 2025 17:08:11 +0100
commit

8a039e1c3aeb1cecf7267d3a076bc8f1066fa6f1

parent

ad837c8fa8587e9681cbb993a9781d40faddab3f

M CHANGELOG.md → CHANGELOG.md

@@ -1,6 +1,37 @@

# CHANGELOG -## [0.3.2] - 2025-10-27 +## [0.4.0] - 2025-10-27 + +### Summary +- Full support for base2k operations. +- Many improvments to BDD arithmetic. +- Removal of **poulpy-backend** & spqlios backend. +- Addition of individual crates for each specific backend. +- Some minor bug fixes. + +### `poulpy-hal` +- Add cross-base2k normalization + +### `poulpy-core` +- Add full support for automatic cross-base2k operations & updated tests accordingly. +- Updated noise helper API. +- Fixed many tests that didn't assess noise correctly. +- Fixed decoding function to use arithmetic rounded division instead of arithmetic right shift. +- Fixed packing to clean values correctly. + +### `poulpy-schemes` +- Renamed `tfhe` crate to `bin_fhe`. +- Improved support & API for BDD arithmetic, including multi-thread acceleration. +- Updated crate to support cross-base2k operations. +- Add additional operations, such as splice_u8, splice_u16 and sign extension. +- Add `GLWEBlindRetriever` and `GLWEBlindRetrieval`: a `GGSW`-based blind reversible retrieval (enables to instantiate encrypted ROM/RAM like object). +- Improved Cmux speed + +### `poulpy-cpu-ref` +- A new crate that provides the refernce CPU implementation of **poulpy-hal**. This replaces the previous **poulpy-backend/cpu_ref**. + +### `poulpy-cpu-avx` +- A new crate that provides an AVX/FMA accelerated CPU implementation of **poulpy-hal**. This replaces the previous **poulpy-backend/cpu_avx**. ### `poulpy-schemes` - Added `sign` argument to GGSW-based blind rotation, which enables to choose the rotation direction of the test vector.
M README.md → README.md

@@ -17,8 +17,9 @@ ## Library Crates

- **`poulpy-hal`**: a crate providing layouts and a trait-based hardware acceleration layer with open extension points, matching the API and types of spqlios-arithmetic. This crate does not provide concrete implementations other than the layouts (e.g. `VecZnx`, `VmpPmat`). - **`poulpy-core`**: a backend agnostic crate implementing scheme agnostic RLWE arithmetic for LWE, GLWE, GGLWE and GGSW ciphertexts using **`poulpy-hal`**. Can be instantiated with any backend provided by **`poulpy-backend`**. -- **`poulpy-schemes`**: a backend agnostic crate implementing mainstream FHE schemes using **`poulpy-core`** and **`poulpy-hal`**. The crate can be instantiated with any backend provided by **`poulpy-backend`**. -- **`poulpy-backend`**: a crate providing concrete implementations of **`poulpy-hal`** for various representations and hardwares. +- **`poulpy-schemes`**: a backend agnostic crate implementing mainstream FHE schemes using **`poulpy-core`** and **`poulpy-hal`**. +- **`poulpy-cpu-ref`**: the reference CPU implementatin of **`poulpy-hal`**. +- **`poulpy-cpu-ref`**: an AVX accelerated CPU implementation of **`poulpy-hal`**. ## Bivariate Polynomial Representation

@@ -43,7 +44,8 @@

- **`poulpy-hal`**: https://crates.io/crates/poulpy-hal - **`poulpy-core`**: https://crates.io/crates/poulpy-core - **`poulpy-schemes`**: https://crates.io/crates/poulpy-schemes -- **`poulpy-backend`**: https://crates.io/crates/poulpy-backend +- **`poulpy-cpu-ref`**: https://crates.io/crates/poulpy-cpu-ref +- **`poulpy-cpu-avx`**: https://crates.io/crates/poulpy-cpu-avx ## Documentation

@@ -70,9 +72,9 @@ ## Citing

Please use the following BibTex entry for citing Poulpy @misc{poulpy, - title = {Poulpy v0.3.0}, + title = {Poulpy v0.4.0}, howpublished = {Online: \url{https://github.com/phantomzone-org/poulpy}}, - month = Oct, + month = Nov, year = 2025, note = {Phantom Zone} }
M docs/poulpy_arch.svg → docs/poulpy_arch.svg

@@ -28,15 +28,15 @@ inkscape:pagecheckerboard="1"

inkscape:deskcolor="#d1d1d1" inkscape:document-units="mm" inkscape:connector-spacing="0" - inkscape:zoom="1.4702523" - inkscape:cx="387.0084" - inkscape:cy="179.56101" + inkscape:zoom="1.0396254" + inkscape:cx="409.76299" + inkscape:cy="148.13028" inkscape:window-width="1781" inkscape:window-height="1214" - inkscape:window-x="1623" - inkscape:window-y="25" + inkscape:window-x="238" + inkscape:window-y="48" inkscape:window-maximized="0" - inkscape:current-layer="layer2" /><defs + inkscape:current-layer="layer1" /><defs id="defs1"><marker style="overflow:visible" id="ArrowTriangleStylized"

@@ -262,13 +262,6 @@ ry="0" /></g><g

inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1"><rect - style="fill:#a8aaff;fill-opacity:0.53046596;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:0.2, 0.4;stroke-dashoffset:0;paint-order:stroke fill markers" - id="rect1-5-5" - width="15.565245" - height="19.146524" - x="84.023781" - y="84.629219" - ry="0.93935418" /><rect style="fill:#fea891;fill-opacity:0.988235;fill-rule:evenodd;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers" id="rect1-6" width="34.694923"

@@ -307,19 +300,6 @@ style="font-size:3.52778px;line-height:8.23147px;fill:#303030;fill-opacity:1;stroke:none;stroke-width:0.2;stroke-dasharray:none;stroke-opacity:1"

x="115.69688" y="40.44392">LATTICE ARITHMETIC</tspan></text><text xml:space="preserve" - style="font-size:3.52778px;line-height:3.78648px;font-family:Akrobat;-inkscape-font-specification:Akrobat;text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;white-space:pre;inline-size:36.8671;display:inline;fill:#2d2d2d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers" - x="63.255154" - y="111.84376" - id="text1-1-1" - transform="translate(28.534147,-13.244033)"><tspan - x="63.255154" - y="111.84376" - id="tspan4">spqlios- -</tspan><tspan - x="63.255154" - y="115.63023" - id="tspan12">arithmetic</tspan></text><text - xml:space="preserve" style="font-size:4.23333px;line-height:4.23333px;font-family:Akrobat;-inkscape-font-specification:Akrobat;text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;white-space:pre;inline-size:35.1767;display:inline;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers" x="63.255154" y="111.84376"

@@ -327,19 +307,19 @@ id="text1-8-9-6"

transform="translate(51.948454,-100.41339)"><tspan x="63.255154" y="111.84376" - id="tspan13">Backend Agnostic<tspan + id="tspan4">Backend Agnostic<tspan y="111.84376" - id="tspan14"> </tspan></tspan><tspan + id="tspan5"> </tspan></tspan><tspan x="63.255154" y="116.07709" - id="tspan15">Applications</tspan></text><image + id="tspan6">Applications</tspan></text><image width="8.6626749" height="8.6626749" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABHNCSVQICAgIfAhkiAAAIABJREFU&#10;eJzs3Xd8FHX+x/HXlvSeEEIoSShp1JBEitgVsZ/niQW7nv3siPo7ewfx7AXLWbGgnuXsHBYsCCSQ&#10;0NKAQEJN203PJtnd3x8rSknbme9mE/bzfDx4+DCZ7+x7srMzn535zvdrQGgRD1wOHAJkA3Yg5/d/&#10;LwEV3oumlAm4GDgC13YOBfJwbeciYLnXkqk3DTgT13aOB8pwbeePwJuAw3vRlBoIXMGf+y64tnMl&#10;B9e+awQuBI7EtZ0JwBpc2/oh8Iv3oik3GTgL13ZmANtwbedS4HVcx6eDwZ59N/v3fyb+3HdfBnZ6&#10;L5rwFRcBNYCzk3+VuD6M/d0YYAWdb6cd+BcQ5K2AioQAz+I6wXe2rb8Cqd4KqNC5QBWdb2fV78v0&#10;d6m43rPOttOB6z0P8VZARYJwfQbtdL6tK3B9lvu7s3AdWzvbzhpcx2YhPGYune+A+/+7w0sZVZgM&#10;2OjZduYAft6JqVsAkE/PtrMZmOidmErcR8/33fu8lFGFibjeq55sZz6ufaA/8sP12evJdtpwfab7&#10;qzvo+b4710sZxUFuKl1X2h196MZ6Jak+AcAGer6dTuBuryTV72Hc2858+mexkwm00fPtbPu9TX/j&#10;R88Luj3/HvZKUv3uxr3t3ED/LHbG0vMvI05cx+ipXkkqDmrunhSduC5D9jfuHlicQCswyhthdRgN&#10;tOP+ts7xRlidVuH+dq7ySlJ95uD+drbj2hf6k1G4PnPubmt/LNS7upXTVbEjhDKJuL8TOnHda4z0&#10;Ql49lqFtW6/0RlgdbkDbdn7vjbA6xKFtO52/t+1Pvkfbdt7gjbA6XIm27VzmjbA6RNJ135yu/iV6&#10;IW+/Y/R2gH4iu/tFOmQAslQG8TAzrl7EWmj9G3mL1ryZuN7X/kLP+9Kf3lMD2m9b9KftBO15M3B9&#10;xvuLLLR/1vrbe+oVUgD0zHgvte1tyUCgxrb9aTtBe95wIElhDk/zlX03Cdd7o0V/2k7QnjcQ12e8&#10;v/CVfddrpADoGT2dZ/pTxxtf2U7wnW2V7fRsW2/wlW31le30GikAhBBCCB8kBYAQQgjhg6QAEEII&#10;IXyQFABCCCGED5ICQAghhPBBUgAIIYQQPkgKACGEEMIHSQEghBBC+CApAIQQQggfJAWAEEII4YOk&#10;ABBCCCF8kBQAQgghhA+SAkAIIYTwQVIACCGEED5ICgAhhBDCB0kBIIQQQvggKQCEEEIIHyQFgBBC&#10;COGDpAAQQgghfJAUAEIIIYQPMng7gGJGYAqQDsQDg3//755/ARrXGwqEaGzbADRqbNvbzECMxrbt&#10;QLXCLJ42ADBpbFsF2BVm8SQ9+24jrv23PzDhek+1sON6T/uLGFyfVS2qcX1W+4MQXPuvFnr2XRuw&#10;c69/O37/bwHwG+DQuN4+52AoAIKA6cDpwClArHfjCCGEOEhVAp8DnwCLgWbvxtGnPxcAU4DbgBm4&#10;igAhhBCitzQD3wBzcV0Z6Hf6YwGQDDwMnOntIEIIIQTwIfB/QIm3g7ijPxUAscA9wBWAn5ezCCGE&#10;EHtrA14C7sN1q6DP6y8FwGnAW0C4t4MIIYQQXagDLgA+83aQ7mjtBd2bbsdVVQV6O4gQQgjRjQDg&#10;bKAV+NnLWbrUl68ABAKvAOd5O4gQQgihwULg70CLt4N0pK8WAANxXT6Z7O0gQgghhA7Lcd3GrvB2&#10;kP31xQIgEPgBOfkLIYQ4OCwHjqKPXQnoi0MBv4Kc/IUQQhw8JuM6t/Upfa0T4O3ATd4OIYQQQig2&#10;Htcww32mY2BfugVwGvAxffOqhBBCCKGXA/grfeQRwb5SAMQCG5Hn/IUQQhzc6oBR9IHBgvrKLYB5&#10;wOHeDiGEEEJ4WAAQDHzp7SB94QpAMrAehcP7GgxGokdPIn7qSYQnpBIYHUdA1ECMZn9VLyGEEEKx&#10;uvpm6uu921He2d5GW10lbbUVNO/YiDV/CQ0bV4FT6SzAbcAYvDx3QF8oAD5A0cQ+poBgUmZex8jT&#10;ryIgQuvU4EIIIbzBWttEXV3fm2G3vb6G3f97nV3fvIyjVVm+D4GZqlamhbcLgCnAMhUrGnb0TMZf&#10;+RCBMfEqVieEEKKX9dUCYI82627K3n+ImuXK+vBNxYtTCXu7D8AzQJqeFRiMJsZf8RDjr3wYc3CY&#10;olhCCCF6W4utDZut3dsxOmUKDCU6+0RMgaHUF/wCTqfeVQ4A3lcQTRNvXgEIAqp//68mBqOJKfcs&#10;ZPChJ6tLJYQQwiv6+hWAvVlXL2bjc1fhdNj1rKYZiPn9v73Om8/cT0fHyR9g3OUPyMlfCCFEr4uc&#10;OJ2hM+/Qu5ogXOdCr/BmAXC6nsbDjp5J8pnXqcoihBBCuGXQjL8TPfk0vavRdS7Uw1sFgBE4RWtj&#10;U0Aw4698SGEcIYQQwn0JZ/8To7+ui9mn4KVzsbcKgCm4Rv/TJGXmddLbXwghhNf5RcYxaMblelYR&#10;i+uc2Ou8VQCka21oMBgZefpVKrMIIYQQmsUddzEYdJ1ONZ8T9fBWAaD563v06EkyyI8QQog+wxwW&#10;TeioTD2r8MolbW+NA3AOcIiWhiP/cgUDxk5VGqa5agdV+T/RsK0Ec1AIfl4aT6CtoZaaDSuoKViJ&#10;0WzGPzwKg6H3n9R0tNmwbsynMv8nHO2tBIRHYzCZez2H0+mgobyYilU/0FpXjX9YFCb/gF7PAdBc&#10;uZ3K/J9o2L4Zv+BQzEGhXsnR2mClev1vWIpyMZr98Q+LAi/sI3ZbM9aSPCrX/IzT3o5/RDQGY+8f&#10;TpwOO/Vbi6hY/QNtDVb8w6Ix+nlnyO+minIq85bSuHML5uAw7+0j9Raq1y3DUrIao38A/qGRXtpH&#10;mrAUr6Z67S84HXb8w7vfRzwxDoDTYadlRwn1Bb9ib67DHBqJwQPDwrfXV1O34RetzYuALxTG6ZHe&#10;P6q7aK52whNSlQRwtNnY8NYjbP3mbVpqdu/zu8DoOBJnnM/oC+7A6Of5E87WbxdSsHAujTtK9/m5&#10;OTiUQdnTmXDtPAKjB3k8R03BSvKfn4N1Yz6O9rY/fm40+xGVmsmEq+cSlZrl8RzNVTvIf+5Wducu&#10;ob258c9fGAyEDh5B+gW3k3DsOR7PYW9tYcPrD7J18TvYrPtO3BUYPYjhJ11M2nlzMJqVTWPRqdIv&#10;XqPo/X/RuHPLPj/3Cw5j0OQTmHDNXAIiNXer6bGqtb+w5sX/w7ppDU77nwdqo9mf6PRsJlwzj8hR&#10;Ezyeo2l3GXnP3Url6h9ob2n64+cGg5GwhBTGXHI3g6ed6vEcdlsT6169j/LvFmGrrdrnd0EDBjPi&#10;lMtIPedmzxfQTieb/vsyxYueoml32T6/8gsJZ/ChpzD+qkfwD4/2bA6gYvUPrH3pTmo3r9vnGXmj&#10;XwAxoycx4drHiBg+xuM5bJVlbF14D/WFy3C07jW/gMFI0OBkhp45h8gJxyp7vaDBo/Q098oVAG8N&#10;BPQbMFlLw2Oe/UH3SchSspqceVdSt6Wgy+XCk9LJnrOAqOSJul6vMzZLBbn/+gc7f/uqy+X8w6LI&#10;+Md8hh1zlkdyONpb2fDGQxQveqrLQS0MRhMpZ9/I6Av/z2MTK239diH5z8+hrbGuy+UGH3oymTc+&#10;TUDUQI/kqClYSc5jV1Jf3vVcHREjxnHIbQuIGDHOIzlaqneS8/i17F65uMvlAiJiyLj+CYYe8VeP&#10;5LDbmln36r1s/OSFLkc/M5r9SD13NunnzfHYSa/0y9dZs+AO2psaulxu2NEzybjucddVEg+oWreM&#10;3MeuomHH5i6Xi0qeSPacBYQneeY2b1NFObnzr6Fi9Q9dLhcQNZDMG55i8DTND2B1qb2libUv/ZPN&#10;n7/azT7iT/oFt7sKo/2uCKgaCKjiuzcp/+BRHLamLpcbMO1vJMy6F1OQ/qu+jaX5bHjgL1qbL8cL&#10;HQG9dQvgLiBCS8O08+bgF6KpKeD6sHx/3VE0V+7odlmbtYry7z8g4dizdb1mR5z2dn6cfRJVa37u&#10;dll7awvbf/6MyJHjCUtIUZoDIP+F2yn58Jnuh7V0Oqlet4z2pgYGHaJ+7Iry7z9k5dzLcbTZul22&#10;vryEyryfSDrhAgxGtV1ZGneU8v31xxxwZagjNksF2374iMTjZym/5Otos/HDTTOo2bC822Xttma2&#10;L/2Y6LRsQoeMVJoDYNUT11H6xb+7Xc7pcFC15mccba0MzDxaeY6t3y4k9/FrcbS1drts3ZYNWApz&#10;SJw+S/kl8PryYn68cfoBV4Y60lKzi+1LPyZxxvmYA4OV5rDbmvnxpulYilZ1v2xLI9t+/A+x46YR&#10;MihRaQ6AlXMvZ+u3C7tdzumwU5n3IxgMxE7YdxZ4FbcAKn5YyNa37sJpb+t22abyAprKNxAzVUHh&#10;7HCwe/GrmlsDT+oP4R5vdQLUfF1d7zfP3Mev7fabw97amxrIffxaXa/ZkYK352ItyXOrzaqnbqC1&#10;rkZpjsq8H9n06QK32mz85AWq1mq+19Uhm6WCvGdvcauNpWQ1Re/9S2kOnE5y5l+FvZtvDntrbbCy&#10;6gn1g1Ktf+NB6rZscKvNqieuo62hVmmOnb993aMD+96KP3iamsIcpTmaK7eT//wct9pU5v/Eps9e&#10;UprD6bCTM+9K7K09n7bWVlvF6qduVJoDYN2r93R7lWofTic586/e99aaAtuXfsK2Hz5yq03Ru/Ox&#10;bsxXmsNWtY3y9x92q03t2h+pXPqe7tc26LsV6JXOTd4cCbDXlX//ARWrvne7XcWq7yn//gNlORp2&#10;bKbw3flut7NZKlj/2n3KcgDkzL/G/QktnE7lJ7y1r9ytqbgpeHvuAfc89djy7UKq1v7qdrudv33N&#10;jl/+qyxH3ZYCShY97Xa75qodbHjTvQNgV5wOO6uevF5buyfcb9eVNQv+r9tbQx1Z98rd2GqrleUo&#10;/eI1TcXN9p8+ZdeKb5XlsJbksfGTF91u17S7jMKFc5XlcLS3svrpmzS0a1NeFJW9ex8Om/vFTfn7&#10;D2JvrleapT/wqQJAy8lfRdv9VeX/vE8HKvdy/KAsR+OOUs0nz/ryEpqrur+N0lPd3b/sjKO9lap1&#10;SmaUduXoI/tI5ZqfcDod2nJo/Ft2pL6smJbqnZra1m5eq/SKlda/b3tLEzUFK7yeA9S+N5X5SzXP&#10;Rlex+kdlOWpL1x/QAbKnLEWr3Loi2yWnk/pCbccCe3MDjZvduyJ7MPCpAqCmMNcrbfdnKVmtuW3D&#10;zlJN34JU5wDcvoXRGZu1kubK7V7PAWDRcdla5T5iLdb+3tSXFbl1C6MrevcRve33aNxRSmu9RXN7&#10;lbcjaoq0v8969q8D1lWsfb+vLV2/z5M+elh15HA6HVg3qbkN0LJ7C/Zm7cVEQ6na2xH9gc8UAE57&#10;O/VlRZrb15cVaf7Wvj937+vuw+ns9umFXskB1Ops39dy2G1N3fbo7jJH6XoV84O71qXjPXY67NSX&#10;FSvJofe9qStV897Ulq7T136zvvZ7tDZYdRWrqnKAvvfG0WajYfsmJTn0fv5qFe0jzdu1H98BmssL&#10;leToT3ymADCYzATFDtHcPih2iLLHmoIHJuhrHzesb+QY2DdyhCjKYQoI1vVYYcigBGW9zfW+x8Fx&#10;+v6mqtajLIfOXushg5KU5PAPicAvVPsTQcGKcoC+fcRgMBIcO1RJjhCd+2qIon3EP0b78R0gIFbN&#10;caQ/8ZkCACAqVftQjXraHrgu7eMKBEbHETRgsNdzAESlqPmbhAweruugGqkoB0C0nn0kRd0gSXrG&#10;ngiOS1A24IveMTCiUtSMoRGRNBpTgPYZ15R9fg0GXfu9nv1rf5E63pvQoaMwB6t5bFVPDlf7DCU5&#10;goem6eqJHzJ8vJIc/YlPFQAxozWNPaS77f6i0zSNggygdCS+8MR0zc8l+4VGEDpU3fPm0anZ2tum&#10;qfubxIzWPhZHzBiF+0i69n0kOk3733J/ESPGah4NMyBqoLIrAAaTWfuJ12BQ+vnVs67oMerGeonp&#10;I/tIZHKG5tEwgwcOIzA6TkkOg9mP4GGjNTY2EjLCMwO+9WU+VQCMOOVSQgYPd7tdyODhjDjlUmU5&#10;otMPYcjh7o8YZTT7M+aSu5XlMJjMjP37/Zrajr3sfgz6Zr/ax5jL7tF0i2XY0WcqHXp25F+u1HRr&#10;I2xYCokzzleWI3bC4QyaPMPtdib/QEZfdKeyHKaAIEZf9E9Nbcdp3Lc6M/bv2va5ESdfSkh8krIc&#10;o/52rabpyCNGjCXh2LOV5YjLPk7TYEvmwGDSL7hDWQ6/4DDSZt2qqe24yx9QlgNg2Mw7NN2Gizvu&#10;YvyjPD/cel/jUwWAKSCY7NkvunUQMRiMZM9+EVOA2hG8Jt7wlNtjt6dfcLvyMbRHnnYFAyce5Vab&#10;gVnHKC2IwHWpOfWcm91qExA1kIx/PK40hzk4lKxbnnOrjcFoInvOS5j8A5Vmybr5ObeHsR1zyV2E&#10;DUtWmiNl5vVuf2OMn3ICicefpzRHzOhJJJ/p3vgTwXEJjLviIaU5/EMjybrpGbfaGM1+ZM9ZoHbe&#10;CIOB7NnP4xcS7lazsZc/oLQgAkibdavbhfiQI05n6FF/U5ojLG0KA4+50K02gYOGM/Rv7g0wdbDw&#10;1lDAswFNN6BSZl6va8jV4LhhBEQNpHL1D9326jf5BzLhH49p+rbeHXNgMNGjJ1GRu4T2pu4HoEg6&#10;8ULGXXaf8mFvMRiIyzyamg3Le9S7OWbMZCbf8W/MHpgxccDYqTRXbKN289pulw2KHcLkO98kbJj6&#10;oZFD4ofjHxZJZd5PXc6NAK6icuINTxI/5QTlOcxBoUSnZh04KVInRpz6d0ZffJfyGSQNBiMDM4+m&#10;at2vtNTs6nb52PGHcchtL2MOClGaA2DAuENp3Fnaox7wIfFJTL37bWW3IfYWOnQU5sAQqtb8hNPR&#10;9XgN5qAQMm9+hrgsdRPP7OEXEk5kcga7V/6v+0c/DQZGnXEt6efNUT40ssFoZODEI6la8zM2S0W3&#10;yw+ceBSHzFlwQL8OFUMBh6dNoWXnZlp2bux22cBBwxl59Qv4K5hszWFrYtc3L2tt3gi4PzqcTj5X&#10;AICr89qQI06npjC300FOolKzOOzRTzwy5v0ewQOHkXjCBTRXbOv0gBYYHcfkf75Byszr1Z/8f2cO&#10;DiNxxvkY/QOoXvtrhwc0o18AYy69h6xbnsMv2L1vHD1lMJoYPO1UIkeOpzJvKfaWjg9oCcedy7QH&#10;FhE2VNfsW12KTj+EIdNOoaZgZadzAsSMmcxhj37q9hUUd4QMSiRpxvk07izt9DHWoAGDmXL3W4z6&#10;69Uemz7aPzSSpBkXYDAYqF7/G3QwSJHJP5Bxlz9A5g1PeWwqXKPJzJDDTyc8Mc21j9g6njhmxCmX&#10;MfW+95Q9MdORmDFTiJ96IjXrl3c6J8CAcdM47NFPiR1/mMdyhA4eQeLx51G/rYSGbR0PCxwcl8DU&#10;e95hxKmXeWxqYP/waJJOvBCnvZ2aDSs6fCTWFBDMhKsfIeMf8zF10P9IRQFgMPkRPekUAuOSqCv4&#10;FWdHc4sYDMQddzGjrnlRyckf+mcB4K3ZAHcBmnp+nPz+RmWdRpwOO7Wl67EW5/0xYElU8kQiUzKI&#10;GD6mV+c3b9ixGWvxaiwb87BZKokcOY7IlEyikicov/3QFZu1EkvxKizFeTRs20jYsGQikzOISs0i&#10;ICKm13K0tzRhLVmNpXg1tZvXERg1kMiUiUQlT1R++bIrToed2s3rsJTkYS1ejcFo+j1HBuHDRyvt&#10;B9Gdhu2bsBSvxlqSh622ishRE4hKmUjkqAm6esi7y2apoKZoFdaS1TRs30xYYipRyRlEpWT2ynSz&#10;e7Q3N2IpWY21eBW1m9cTOCCeqOSJRKVmKntEtSec9nasm9f+cRwxmv2JSplIVMpEwhPTPXbC7Uh9&#10;eYnrc1OSR1u9hcjkDCKTJxI5arzyW1RdaanZhaVoFZbi1TTu2kp4YhpRyRlEpmbiHxrZaTtVswHu&#10;YW9ppHHLGpq2rKV5WxH+0fEEJ40jZPh4/KPUzsDbVltJ3k2aO2buBnq9E4JPFwBCCCH6DtUFQG/q&#10;jwVAZ92uE4FsYDyemaXIM9cHhRBCiP4nFHjUA+u1AWuAHGDr/r/cvwCYCrwKpHsgiBKeuscphBBC&#10;eEkIcJuHX6MAuAz4Y8akvW9gzgV+pg+f/AGcisZaF0IIIXxIOq5z/B9zQe8pAC4C5uBj4wIIIYQQ&#10;PsSI61x/0Z7/iQee8GYiIYQQQvSaJ4B4I3A54N5wY14kfQCEEEIIXaKAy42A9hklvED6AAghhBC6&#10;HWLE9bifEEIIIXxHthHoerBzIYQQQhxs7EZcAwQIIYQQwnfkSAEghBBC+J4cI/ASUOXtJEIIIYTo&#10;FVXAS0agArjWy2GEEEII0TuuBSr2jPy3CPg/oNV7eYQQQgjhQa24zvWLYN+hfx8BsnBNFNBnH7aX&#10;gYCEEEIItzhxnduzcJ3rgQNnA1wHHApE/r6gp6YD/icapwSWgYCEEEIcZBqAhzyw3j3TAecC1v1/&#10;uX8BsIcVWPL7P0+4EY0FgBBCCHGQaQQe7e0X7awA8AmO9jYsxauxFOVQU5gLQHRaFlGp2USlTMRo&#10;9uu1LLWl67EUrcJSlEOLpYKo5IlEpWYSPXoyfsFhvZajuXI71QUrsBTlUl9WTFhCCtGp2USPnkTQ&#10;gMG9lqOtsY6aDcupKcrFWpJHYEw8UalZRKdmEZ7UezNWO9pbsRStoqYwB0vRKgxGk2sfScsmKjkD&#10;g6n3PkK1m9dSU7QKS1EuNmsVUSkTiU7NIjp9Eubg3qunmyrKqdmwgpqiXBq2bSQ8KZ2o1CxiRk8i&#10;MHpQr+VobbC69pHCXGo3rSFowBCi0rKISZ9E6NBRvZbD0WZzvS+FOdQU5WLyCyAqNfP340gGBqOp&#10;17JYN63BUpiLpSiX1noLUSmZRKX9vo8EBvdajqbdZVT//t407thMxPAxf+wjAVEDey1He6OVho25&#10;NJauoalsAwEDhhAyfAKhIycSMDCp13L0Vd66ob4LiNPS8OT3NxIYranpPqwb88l57CpqN6/r8PcR&#10;I8aSfeuLRI6aoPu1umKzVLDqyevZ8esXHf4+ICKGjOv+xdAjz/BoDkd7KwVvPkLR+0/gdBw4OKTB&#10;ZCbt3NmknTfH44VR2ZL3yH/2VlobDrhiBcCQw//CxBueJCBigEdzWIpyyXnsKuq2Fnb4+8jkDLJv&#10;fZGI4WM8mqOleie5/7qOXSu+6fD3AZGxZN74FIOnnerRHPbWFta/9gAbP3oWp9NxwO+NZn/Sz7+N&#10;1HNu9nhhtOWbt1nzwm20NdZ1+PvE6bOYcM08/EIjPJqjesMKch67koZtGzv8fXRaFtm3LiAsIdWj&#10;OZort5Hz+LVU5H7X4e8DoweRedMzxE85waM57LYm1r16Lxs/eRE6uF1r9Atg9EX/JGXm9R0WRtba&#10;JurqmpVkqfzxHcrffwh7S2OHv489/GyGnXMXpiA1xXNbbSV5N2meWmc30HvV8+98sgAofv9J1r9+&#10;P472ti6XM5r9GHPx3aScfaOu1+vM7twlrHzkMmy11d0uO/SIv3LIHa9gNPsrz9G4ayvL7jmn02Jo&#10;bxEjxjH1vncJGZSoPIfd1syKhy/ptBjaW0BEDIfc8SpxWccqzwFQ8PZcCt56pMNiaG9Gsz/jLr+f&#10;UWd45knanb99Tc7cyzsthvaWcOzZZN/6okdOvvVlRSy791zqy0u6XTYqeSJT73uHoNihynO0Nzey&#10;/MGLOi2G9hYYE8/kO99gwNipynMArH/tforefbzDYmhvJv9Axl/1CCNO/btHcmz/+TNy51/daTG0&#10;t6QZ55N587MeuSpRW7qe3+6dRcOOzd0uG52WzdT73j3gipGKAsDeXM/G56+hbv1P3S7rHx3PqGte&#10;IGREhq7XhP5ZAPTetal9zUZjH4CUmddj1lGx7c5dQs68K3E6uv7QAjgdDipWfU/MmMmEDh6h+TU7&#10;0lK9k59mn0xrvaVHy9dtLcTpsDNw4lFKczgddn69ayaW4tU9Wt5mqcBasprEGecpfyJj3St3s/Xb&#10;hT1a1m5rZtfyb0icPkvX/tCRncu+ZNWT13f4DWZ/Toed3blLiJ1wOCFxCUpzNO0u4+fbTu3RgR1c&#10;B2CDyUzs+MOU5nC0t/Hz7adTt7WgR8u31OzCumkdidPPBcX7SP4Lt1H+/Qc9Wra9uYHdOf9j+AkX&#10;YvIPVJpj24//If+5W+nJA1NOezu7VyxmYNaxBMcOUZqjYcdmfrn9L7Q3N/RoeeumNZgDQ4gZO0Vp&#10;DkebjZ/mnNrplZD9NVftoL6smIRjz9rn5y22Nmy2dl1Ztr51J5bcr3q0rL25gdr1PxF7xDm6v1w5&#10;bE3s+uZlrc0bgfm6Amhg7H6Rg0dbYx25j//D7Xa5j/+jxwfhnsp5/NoefavbW/H7T2IpylWao/iD&#10;p6lev9ytNlXrlrHxP88rzaFlna31FteJWiFN63Q6yX3sKtpbmtQFcTrJmX81bU31bjUrXDiP2s1r&#10;1eXQuM7KvB/Z/PmrSnNUrP7B7XW2VO8k//k5SnPYrJXkPXOzW22cTge586/CblNzeXvPOnPmXeH2&#10;frf+jQepLytSlkPrOnet+IYt37ytNEftmu+p+rlnBeIerdXbKX/fEx3w+z6fKgBKP/83zZXb3G7X&#10;XLmN0s//rSxH1dpf2b1ysdvtnA47G958pPsFe8h13/9hTW03vPlQt5fH3VrfGw91eym1IzuXfam0&#10;KNr06QJaana73a5x11a2fPWGshwVq76nMm+p2+0c7W0UvKWuM3F7SxNF7z2uqe361x9QlgNgw+sP&#10;9OiqzP62Ln6nx99Me6LkP8/16Lbd/urLSyj733vKcuxa/o3bxTu4vq0XLJynLEdbQy0lHzyjqe36&#10;1+5XlgNg28fa9tXKH9+htXq70iz9gU8VANUFK7zSdn+WIu3zL6k82dWWrsfe2qKpbXtTA/VlxWqC&#10;OJ1Yi1dpbl6j8G9SU7DSK20PWJeObVL596jdtKbbvjKdaa2roXFHqZKWZWz4AAAgAElEQVQcjvZW&#10;LCX5mtur/Pzq20cU5ijUcRzR0faAdZWs1vxloKV6J81VO5TkcLTZaC7vuMNuTzRs7tlt0IOJTxUA&#10;ek6eKk+8luI8zW1ttVU0VZQryWHVkQNcH3wVGrZvcvtS996sPey/0BN63ucaHYXdATl0bFNz5XZs&#10;1kqv5wB1+0jt5nU42mzacxSq+fw6nQ4sfaRYtZZo//w27CxVdltT73FEz3bsrXlbIU6H9v4DjZu1&#10;F5j9lc8UAE57Oy2WCs3tWywVOO36Oqfsobfiba7a2SdytPSRHKr+HnZbE7a6Gs3tW6p2arpE3eG6&#10;qvX+TdR8q2ruKzkq9eZQc3m3vbGe9qaedbjrMEelusvMuv62Tict1Yo+v31kH2m17NLZXs3foz/x&#10;mQLAYDITnqh9AJnwxHRlj1dFjBirua3BYCQiabTXc6ho39dymAKCCdMxgEzEiLHKer1HDNexj5jM&#10;yp4715MD1L03kaPG68sxUl/7PfxCIwjW8bRHpKIcoO+9MQUEETpkpNdzgLp9JHhomr72CZ4dz6Mv&#10;8pkCAFyDcnij7f6iUiZqbhs6dKSyUd/05ADXQDgq+IdH6zqo6t2OfdaVmq29bZr2tvuL1LFNEUmj&#10;lT32pvdvG5Ws5r0JjkvQNfCTys9vdKr2dUUpPY5o//xFjBir7AtNpI4cBqNJWXEWMDARU3C45vYh&#10;wz076Ftf5FMFwKBJx3ul7f5iJxyO0U/bHEtx2ccpyxEcl0DYsGRNbSNGjFUyIuMecdnaBvQxBQQR&#10;o3Cgl0GTpmtve4j2tvsbmHGk5hEXB2YfoyxH6NBRmouz6LQspSPxaf0M+oWEEz16srIccXqOIyr3&#10;kcyjNQ/oo3IArYik0ZqHCY8ZM0XpEMURY47Q1M4cEknoCCkADmqDp51K/NST3G4XP/UkpcOsBscl&#10;MOaiO91uFxQ7lNEX36UsB0DW7BfdPogYjCaybn5WaY6xl92nqaAYc8ndSucoGHb0TE1F1tAjz1Ba&#10;JIYOHUXaee4/vx4Sn0T6+Xcoy2EwGMme/bzbtzaMZj8yb9L2aFhnxl3xIAERMW63G3/1XPxDI5Xl&#10;SDr+PGInHO52u8Tps4jNOFJZjvCk0ZpGKQ0blkzqubcoy2Ewmcm86Wm32xn9Asi88SllOQASzr1L&#10;01WAxPPvxxgQojRLf+BTBQBA5o1P4x8W1ePl/cOiyLzR/Z27O8lnXU/MGPdG48q65VnlEwPFjJ5E&#10;ylk3uNUm9eybiNJxGbQjWv7OA8ZOZdQZ1yjNAZB187P4hfT8IBIQGUvGdf9SniPt3NlEpWT2vIHB&#10;QNbsF5RP+hKbcSQj3RzGNu2824gYMU5pjoDIWDKuf8KtNoMmzSBpxvlKc2j5OwfGxDPhGnXP3u8x&#10;+sL/c+seusFgJPvWBcpHRhw0aQZJJ1zgVpsxF9+lfI4Ev8g4Emfd61abqKwTiJ58mtIc/YXPDQVs&#10;Dgpl8KEnYyla1W3v0+i0bA598AOPjHtvMBgYcthfaK7e2e0Y/IEx8Uz+5+tKLx/uLTbjCEyBwVSt&#10;/bXL53mNfgGMvfRe0s67FYNBfe0YNiyZyJHjqcz/qdMJPPZIPP48DpnzEqaAIOU5/ELCiZ9yIpbC&#10;XFpquu5ZHDNmCoc++IHyIV4BDEYjQw7/C00V5dRt6XoY3qDYoUy5603lQ0XvMTDrGAxGI9Xrf4Mu&#10;BmwyBQQx/ooHSTnrBuVDRYOrM254UjpV+Uu7HlXPYGDEqX8n86ZnMPqpnz/DPzSSQZNnULNhJbZu&#10;ni6KnXA4h97/vtJbZnsYjCaGHHE6jTtKux2JLzgugan3LGTAuEOV5wDX7TOnw07NhhVdPg1jDgxm&#10;/NWPkvzXaw64sqRiKODgYekExiVRX/gbjrYuxjkxGIibfimJ59+PwaR/grP+OBSwzxUA4JpIJumE&#10;CzAHhtBUUb7vePwGA6FDR5F61k1k3fIcAZGxul6rKyb/QIYcdiqRI8fTsH0TrXXV+8xREBgdx7Cj&#10;ZzL1vneV9ZTtiMFgZMDYqQyZdgqNO0qxWSv2GfzFHBzKwIlHMfXedxg87RSPnPz3CEtIIWnGBbTW&#10;VtFcs2ufQsBo9idy1AQyb3ya1LNvVP4tZm8BkbEknXABRr8AmjvYR8KGpZA2azaZNz1NQHi0x3KY&#10;AoIYesTphCem0bh9M7a66n1OwIEx8SQcdw5T732H8ER9vaC7YjCaiJ1wOPFTTqRxx+YD9hG/kHDi&#10;so5m6r3vMmjyCR45+e8RnphO4vHnYbNW0lK9E7vtz6FwjX4Bv8/A9yKjTr/KIyf/PQKj40g68UIM&#10;RiPNVdtpq/9zaG+DwUhYQgqjL7iDidf9C/8wdbcg9mcODGboUX8jdMhIGneU0lpbvc8JOCh2CInH&#10;n8fUexZq7vPTEwajiYETj2LQpOk0bN+EzVqF077XPhIawaBDpjP1vvdcfX462EdUFADgeiJgwLQz&#10;aKutoM1aiaP1z2LR6BdAyMiJjLj8SQYeNUvJyR/6ZwHgk7MB7q+tofaPAWCiUtV2XHKHvbWF2k1r&#10;abFUEJWcQZAHvlX2hNPpoL6smPryYsKGpRCWkOLRk35XmirKsZbkExgTT+TIsZo7T+rV2mDFUpSL&#10;wWgiKiXTrVsEKtltzVg3raW1torI5Ayl/R/c4XTYqdtaSMP2TYQnprsen/TgSb8rTbvLsG5cQ1Ds&#10;YCJGjPXIjJk90VpXg6UoF6NfAJEpE5Xfruspu60J68Y1tNZbiEqZeMCMe73F6bBTt2UDDTtKiRg+&#10;xjWhWjf7iMrpgPdmqyqnqWwDATFDCBqa5pEZM/vjbIBSAAghhOgTPFUA9Ib+WAD4XCdAIYQQQkgB&#10;IIQQQvgkKQCEEEIIHyQFgBBCCOGDpAAQQgghfJAUAEIIIYQPkgJACCGE8EFSAAghhBA+SAoAIYQQ&#10;wgdJASCEEEL4ICkAhBBCCB8kBYAQQgjhg6QAEEIIIXyQFABCCCGED1I/KbI4KDjt7VSt/ZWagpU0&#10;V++kpWYXNksFjvY2b0cTQnTCaPYjIGoggdGDCIqJJzr9EAaMOxSDSQ714kCyV4h9VK75mS1fvsGu&#10;5V/T2mD1dhwhhE7+oZEMmnwCSSddROz4w7wdR/QhUgAIAOq2FrLulbvY+dvX3o4ihFCotcFK2ZL3&#10;KFvyHvFTTmDs3x8gPDHN27FEH+DTBYCjzUb1hhVYS1ZjKc4DIColg8jkicSMnoTRL6DXsliKV2Ep&#10;zsO6MQ+bpYKIkeOJSskkZsxk/MOiPPfCTicFbz9KwdtzcTrsnnsdIYTX7fzta3atWEz6+beRfv7t&#10;YDB45HXqy0uoKVyJtSSPxp1bCE9MIzJlIjHphxAUO9Qjr9mRtroqGjbm0rRlLU3bivCPjickaRwh&#10;wycQNCSl13L0VT5bANQU5pAz70rqy4v3+Xn59x8AEDYshew5C4hOy/ZojuaqHeQ+fi27c/63z893&#10;/PoFAH6hEUy4Zh6J02cpf227rYmceVexbenHytcthOibnA47G958mLotBWTPeRFTQLCydbc3NbDm&#10;pf+j9IvX9vn5zt++Alx9FNJm3UrarFs92y/B6WT3ktfZ9uE8HK3NHS4SM+V0Es67F3NIpOdy9HGe&#10;Kf+6twuI09Lw5Pc3EhitqekfCt5+lIK3Hu32G6/BaCL9gttdlbIH7Pzta1bO/TttDbXdLhs/5UQm&#10;3/UmJv9AJa9ttzWxdPbJ1BTmKFmfEKL/iU7L5oj5XygpAqwleSy77zyadpd1u2zkqAkcev/7BMUO&#10;2XcdtU3U1XV8wu6p9sZaNj5zOfXFK7pd1i9iIKOueY7Q5EN0vSZAW20leTdpXs9uYJDuEG7yuccA&#10;dy3/hg1vPNSjy91Oh50NbzzEruXfKM/RXLmNlY9e1qOTP7gq6A2vP6jmxZ1OcuZdJSd/IXyc60ro&#10;VeB06lqP3dbM8ocv6dHJH8C6MZ+cx6/R9ZqdKXvn3h6d/AHaaivY9OL12JvrPZKlr/OpAqC1wUru&#10;E9e53S73ievU9oh3Osl57GraGuvcalby4TNUr1+u++UL3n5ULvsLIQDYtvRjCt5+VNc61v37Phq2&#10;bXSrTUXud2z+/N+6Xnd/1tWLqV7m3rGt1bKTsnfuU5qjv/CpAqD083/TUr3T7XYt1TspVbijVq79&#10;hYrVP7jdzul0ULBwrq7XrttaSMHb+tYhhDi4FLw9l7qthZrattZb2PTxC9pe962HNbXrzPZPn9DU&#10;ruqXD7FVlSvN0h901QvDDCQDnugK75XOhzWFK73Sdn+WolzNba3Fq3S99rpX7pLe/kKIfTgddta9&#10;cheHPvCB222tJXk4nQ5Nr9tSs5vmyu0H9AXQwtFmo3lbcfcLdqJxcz4BA4bpzqGRGcjwwHptQAnQ&#10;3tmL7i0AuA048fcwanqcKWTQ8diKpUj7yVNP2/1ZS/I1t7XVVtNUUU7wQPd31Mo1P8tz/kKIDu38&#10;7Wsq1/zs9mBBeo5n4OoPoKIAaN5WiNPR4XmuRxpL84medIruHBrFAKs9tO4WIA/4CpiLqygA9r0F&#10;MPn3APcBU+iDJ38Ap8bOKk57Oy2WCs2v22KpwGnXvnPtrblqh8727t/GANjy5Ru6XlcIcXDTcoxo&#10;rtZ7PNPXfo9Wyy6d7bUdV/uBQFzn9PtwneMn7/nFngJgDLAUSO/1aL3EYDITnqh988IT05U9txox&#10;YqzmtgaDkYik0W63c9rb2bVcvv0LITq3a/nXbn/RiRiu/XgG+o6Hewseqm90w+CEMUpy9HHpuM71&#10;Y8BVAJiA1wB/L4bqFdFpWV5pu7+olIma24YOHYk5ONTtdlVrf5Wx/YUQXWptsFK19le32kSmaL91&#10;bTCaiBg5XnP7vQUMTMQUHK65fcjwCUpy9AP+uM75JiNwMaB/FIReoqcPwKBJx3ul7f5iJxyueZjh&#10;uOzjNLWrKVDXiVEIcfBy91gRkTSaoAGDNb1WzJgpmAPVjUQYMeYITe3MIZGEjvCZAgBc5/yLzYC2&#10;v5iXaO0DADB42qnETz2Jncu+dKtd/NSTGDztVM2vu7/guATGXHQna1+5y612QbFDGX2xe232aNbw&#10;+OMeJpOJGSefypnnzCIyyoPzEgjRh1Vbamnt49Nh19fW8vVnH7N0yf9waHzax91jhcFkJvOmp/nl&#10;n2e61c7oF0DmjU+51aY7CefeRe36pdib3BtjJfH8+zEGhCjN0g8cYQY8O9h9H5N549MsXreM1npL&#10;j5b3D4si88anledIPut6diz7gur1v/W4TdYtz+IXHKbp9VpqtHeQmXHyqTz3ymvdLyjEQaymto66&#10;hkZvx+jW5MOO4L45N/HDYm0jmGo5VgyaNIOkEy5gy9dv9bjNmIvvIiwh1e3X6opfZByJs+5l8ys3&#10;97hNVNYJRE8+TWmOfiLbCPTe1Ex9QGB0HEc99b8eTfITnZbNUU/9T/fcAx0xGIxMe/BDEo47t9tl&#10;A2Pimfbgh8RlHav59Ww6noA48xz1ExEJ0d/4+/WfudNOOO2vmttqPVZMvOFJUs+9BYPR1OVy5sBg&#10;Mq57nJSZ12t6ne7EHHoGI654svtJfgwG4qZfyojLtQ0edBAYasb1fGC/ug2gV9iwFI566n+UfPAM&#10;W755k4Ztm/4YyMJgMBI6dCRJMy4keeZ13e7MeviFRnDIbS8x5LDTKFw4j9rS9TjaW//4fdCAwQya&#10;dDxjL38A/1B9M1Y5dFy6lMv+Qujrf9TbwiIiNLfVeqwwmv0Ze+m9DJl2KmtfuRtLUS7tzX9eMfEP&#10;i2LA+GmMv/IRQuKTNOfriZgppxOefijl7z9E3Yafaaur/jOnfyDBieMY+rdbCUuZ5NEcfVyeGcjB&#10;xwoAcPU+TTn7RlLOvpH2pgasm1yDWUSOnKCpl70eg6edwuBpp+Bob6NuywZslgoiRo73yJUHIYTw&#10;pKjULI547AucTgcN5SU07tpCeGI6wXEJvZrDL2IgI65w9TFoteykeVsR/tHxBMaP8ugXu34kxwws&#10;Am6kn8wL4Ikq3BwcyoBx05Sv111Gsx+Ro3yqJ6oQ4iBlMBgJS0hVfp9fC/+oePyj4r0doy9xAIuM&#10;wHJAbVdMD9LzFIAQQggheApYvudb/z8B7TPUCCGEEKI/yMV1zv/jsn8zMBW4B+jbD7oKIYQQwl1t&#10;uM7xU3Gd8/eZDbANuB94BzgW1/gA4/HMdMBj0DglcH/qiSuEEEL0QDuw3gPrtQFrcHX2XwJs3PuX&#10;HZ2EN/7+b4EHwuyxC9DUxV36AAghhDjIVAPaJ1XQqF/0/BdCCCGEWlIACCGEED5ICgAhhBDCB0kB&#10;IIQQQvggKQCEEEIIHyQFgBBCCOGDpAAQQgghfJAUAEIIIYQPkgJACCGE8EFSAAghhBA+SAoAIYQQ&#10;wgdJAfA7p9OB0+nwdgwAnPZ2b0cQQgglHO19Y4JZOa4eSNOMfAcLa0keWxe/i7VkNdZNawCIHDme&#10;yJRMEo87h8jk3pmboaV6J5s+exlLSR7Wkjxa6y2EJ6YTlTqRQZNmMOSw03olhxBC6NXe0sTmT1+i&#10;umAF1pI8miu3Ezp0JJHJExkwbhrDT7oIg9Hk+SBOJ9XLPqZuwy80bl1Ly85N+EXEEpw4jpARE4g7&#10;5kJMweGez9GH+WQB4GhvpeDtuRS9968DqsKqdcuoWreMTZ8uIPWcm0k//zaMZn+PZSn/bhF5z9xC&#10;a4N1n5/Xbl5L7ea1bPnqTQZPO5XMG54kIGqgx3IIIYRelWt+Jvexq2jctXWfn9eXl1BfXkL5d4vY&#10;8tUbZM9ZQHhimsdy2Kq2seW1OdQV/LrPz1stu2i17MKat5jK798m6eJHiRh3lMdy9HU+dwvA0d7G&#10;jzefQOHCeV1eEnLa2ylcOI8fbz7BY5ew1rx4ByseueyAk//+dvzyXxZfPumAD5UQQvQVpV+8xtLZ&#10;J3V7nLIUr2LJ1YdRsep7j+Ro2rqOdXfNOODkv79Wyy6Kn7iYXV97cub7vs3nCoDChfOoKVjZ4+Vr&#10;ClZSuHCe8hy7c5dQ8tGzPV7eVltN7vyrwelUnkUIIfRo3FFK/gu39/j45GizkTP/Gtqa6pXmcLa3&#10;sfnV2ThsjT1us+2jx2gqL1Cao7/wqQLAumkNhe/Od7td4bvz/+gjoEJbUz25j1/rdrvK/J/Y9N+X&#10;leUQQggVcuZfhd3W5Fab5sptrH3xDqU5dvz3aZq3FbrVxmlvp/TVW3A67Eqz9Ac+VQCUL1mkqSeo&#10;095O+ZJFynJUrv6B5srtmtqWLX5HWQ4hhNCrcddWqtZ2fbm9M2XfLVJ64q369SNN7ZrKNtBUtkFZ&#10;jv7CpwqAmsIcr7Tdn6V4tea2tZvXy+MsQog+w6rjeGa3NVNfVqQkR3t9Da3VOzS3byzNV5KjP/GZ&#10;AsDpdGDdmKe5vXVjnrJxAiwl2nPYW1uo2+qb96uEEH2PpUR7AQD6vhDtrXHrOn3tpQA4eBkwYDBo&#10;31yDwYgBg5osOnK4VuAzb5sQoo/TezwzGNUczwwGfcfnXhmboI/xnTOJwUBkykTNzSNTJoLOHWyP&#10;qBTtAwyZAoI8+vysEEK4Q89xFSAyWV/7PYKTxulqHzJ8vJIc/YnvFABAVGqmV9ruT88OHzFirE9W&#10;qkKIvilKx4ip5sBgwhJSlOQwh0QSMGCo5vYhwycoydGf+FQBkHjcuZpG9TOa/Uk87lxlOQZOPIrg&#10;uARNbZNmXKAshxBC6BUcl0BsxhGa2iZMn6X/luheBhw2U1O7kKTxBA31vSurPlUAhCeNJv2C291u&#10;l37B7YQnjVaWwxwUQvbsF9y+pTAw6xiGn3yJshxCCKFC9uwXMAeFuNUmOC6BcZc/qDRH/MnXEpww&#10;xq02BrM/wy+b75NXVn2qAABIPfsmBoyb1uPlB4ybRurZNynPEZtxBKnn3Nzj5QOj48i6uecjBwoh&#10;RG8Jjksg4x+P9/jbvCkgiOw5C9wuGrpjMJkZftnjPZ/kx2Bg2MzbCRqi5jZEf+NzBYDBZOaIxz5n&#10;zCV3d3k7wGj2Z8wld3PEY59jMHlmzqSxl97LlLvfJiBiQJfLDTt6JtNfXkHwwGEeySGEEHolHn8e&#10;Rz65mLBhyV0uFzNmCsctWEbs+MM8kiN4WBpjH/i220l+AgYMJXX2QuKmX+qRHP2BT84GaDCZSZt1&#10;K4MPPZmy/733xzS8AJHJGUSlTCTh2LOVXvbvzJDD/8KAcYdS+sVrWEpWYy3Jx1ZbRcTwMUSlZDJo&#10;8vEMmjTD4zmEEEKvmNGTOPaFXyj98nVqClZiKVlN064ywhJSiUrJYMC4aSRMP1fpff+O+EcNIuWm&#10;16lZ+QV1G36haetamrYV4R8dT8jv0wEPPGoWxgC1VyD6G58sAPYITxrN2L/f7+0YBETGknbenD9/&#10;4HQqe+RQCCF6kykgiFF/vRr+erXrB148nkUfcjLRh5zs9Rx9lc/dAugXZCcVQhws+srxrK/k6EOk&#10;ABBCCCF8kBQAQgghhA+SAkAIIYTwQVIACCGEED5ICgAhhBDCB0kBIIQQQvggKQCEEEIIHyQFgBBC&#10;COGDpAAQQgghfJAUAEIIIYQPkgJACCGE8EFSAAghhBA+qKPZAEcD04FsYDwQ4IHXHaC1oUEmdBBC&#10;CHFwGQAUemC9NmANkAMsBjbs/cu9C4AA4B5gDmDyQBAlnE6ntyMIIYQQKpmAVA+tezxwPmAH5gH3&#10;4SoM/rgFEAKsAO6gD5/8hRBCCKGJCdc5fgWuc/4fBcBcXFWCEEIIIQ5e43Gd8zEC04BrvBrHDZ7q&#10;A+Bob8PR3uaRdbvF6cRua/Z2CiGEUMJua/J2BAAcrXJc3cs1wDQzcCbQb3rWqewDYC3JY+vid6gp&#10;zKF201oAIkaOIzotm8Tps4hMzlD2Wl1pqd7Jpk9foqZ4FZaiXNob6wlLTCUqJZP4qScx5LDTeiWH&#10;EELo1d7SxKZPF1C9/jcsRbm01OwmJD6JqNQsYiccwfCTLsJg7IU7zU4n1cs+pnbdUhq35NOyewvm&#10;0ChCh2cQMnIiccdehCk43PM5+iYDcKYZV29/n+Job6Xg7bkUvfcvnPb2fX5XU7CSmoKVbPrsZVLP&#10;uZn082/DaPb3WJby7xaR98wttDZY9/l53ZYC6rYUsPXbhQyediqZNzxJQNRAj+UQQgi9Ktf8TO5j&#10;V9G4a+s+P2/cuYXGnVvY9sNHbPnqDbLnLCA8Mc1jOWxV29jy2hzqCn7d5+ft9TVY13yHdc13VP6w&#10;kKSLHyVi3FEey9HHZRvxsXv/jvY2frz5BAoXzjvg5L83p72dwoXz+PHmEzx2a2DNi3ew4pHLDjj5&#10;72/HL/9l8eWTDvhQCSFEX1H6xWssnX1St8cpS/Eqllx9GBWrvvdIjqat61h314wDTv77a7XsoviJ&#10;i9n19QKP5OgHxhuBMm+n6E2FC+dRU7Cyx8vXFKykcOE85Tl25y6h5KNne7y8rbaa3PlXgzwGKYTo&#10;Yxp3lJL/wu09Pj452mzkzL+GtqZ6pTmc7W1sfnU2Dltjj9ts++gxmsoLlOboJ8qMuAYI8AnWTWso&#10;fHe+2+0K352PddMaZTnamurJffxat9tV5v/Epv++rCyHEEKokDP/Krc7+zVXbmPti3cozbHjv0/T&#10;vM298XSc9nZKX70Fp8OuNEs/kGMEfvR2CnfoeQqgfMmiLi/7d8Zpb6d8ySLNr7u/ytU/0Fy5XVPb&#10;ssXvKMshhBB6Ne7aStXari+3d6bsu0VKT7xVv36kqV1T2QaayjZ0v+DB5Ucj8CawzNtJekrPUwA1&#10;hdovduhpuz9L8WrNbWs3r9dUxAghhCdYdRzP7LZm6suKlORor6+htXqH5vaNpflKcvQTy4A3jYAD&#10;uARo8W4ez3I6HVg35mlub92Yh9PpUJLFUqI9h721hbqtPnm/SgjRB1lKtBcAoO8L0d4at67T1953&#10;CoAWXOd8x56RAIuAQ3FNGnBQMmDAYNA++aHBYMSgaLgEg1HfJIy98gytEEL0gN7jkcGk5ngmx9Ue&#10;WYPrXF8E+04HvBrXmAC3AT8Adb2drCc09wEwGIhMydT8upEpmaBoFMKo5Ima25oCgghL8NScEUII&#10;4Z6oFO3HM9B3PNxbcOJYXe1Dhk9QkqMPqsN1Tr8N1zn+j0su+08H3IZrtqB5uEYKSsIz0wH/hMYp&#10;gfX0AYhOy6IyT1ufx+i0LM2vuz89H5jIkeN8pVIVQvQDekZMNQeFEDosWUkOc0gkAQOGYasq19Q+&#10;ZETvjPzaiSrgcA+s1wZsATo8ce5fAOzNCZR6IBC4piXsdYnTZ1Hy0XM42mxutTP6BZA4fZayHLET&#10;jyIkPonGnVvcbpt00iXKcgghhF7BA4cRl3Usu3OXuN026YQLdd2a3V/skeey7SP3x20JHTmR4KFe&#10;vbJqB9x7flEBdX/5fiAsIZUxF93pdrsxF92p9LK7OTCY7Dkvub3jD5p0PEkzzleWQwghVMi65Vn8&#10;gsPcahM6eARjL7tXaY5BJ17p9qV8o18Awy97HBQWIv2Fz21x8szrGJh5dI+XH5h5NMkzr1OeY8DY&#10;qaRfcHuPlw+KHULmTc8ozyGEEHoFxQ4l4/onMJi6uqj8J3NQCNlzFmAKCFaaw2A0Mfyy+ZhDo3ra&#10;gGHn3k3goBFKc/QXPlcAGIwmDnv0E8Zf+RAm/8BOlzP5BzL+yoc47NFPPHbPPf2CO5j24IcERg/q&#10;crmkGecz/eUVBA0Y7JEcQgihV8KxZ3PMM98TnjS6y+ViM45k+ssriBkzxSM5ggYnM/bBxURlzuhy&#10;ucC44aTfvoiBR53nkRz9Qc/KtYOMwWAk+czrGTT5RMq/W0RNUS6WolwAolKziE7NYtgxZxGmqHNK&#10;VwZNnsH0V1aw5as3sRTlUlOUi81aSeSoCUSlZjF46onEZhzp8RxCCKFXZHIGx77wE1u+fpuaDcup&#10;KcyhcddWwpPSiU7NJHbCEQw98gxlT1R1xi98AKP+sQBr3v9c0wGX5tNUXkBAzBBChk8gdOREBhx+&#10;NsYuvgT6Ap8sAPYIG5bM6Iv+6e0Y+IdFkXLWDX/+wOn0+AdECMKqn8IAACAASURBVCE8wWj2Z8Qp&#10;lzLilEtdP/Di8Swy4zgiM47zeo6+yuduAfQLspMKIQ4WfeV41ldy9CFSAAghhBA+yKdvAYiDn9Pp&#10;ZMvmTazNz2fL5k3U1dVSV/v7v7pa7HY7YeHhhIdHEB7h+hcVFU1q+mjGjp9AeESEV3LnLP+NJd9+&#10;w+aNJVRW7O7pNOtu8Q/wd23zXtseHz+YMeMnkJqejr+/J8YA61zZ1i0s/upLNpYUU1mxm/q6OmJi&#10;BhAbF0dGZhbHTJ9BRGRkr2YCsFosLPn2a3JXrmT79u1YLTWEhoURPSCWpBEjOfTIo4kfMrTXcwmh&#10;lxQA4qCzNm81//3kY/JX57J+7RoaGxo0rcdgMJCQNJxxEzLIyMzipFP/QvyQIYrT7qu5uZnrrriU&#10;Jd987dHX6Y7Zz4/klFTGjp/AjJNO4ahjj8Nk9szhYse2bdx07ZWsWNb5lLJvvvoyJrOZM8+Zxb0P&#10;zyUw0POdt5qbm7n7ttl8/MH72O2dj1327GOPMD4zm38+NJeBg+I9nksIVaQAEAeFit27+fiD9/jo&#10;/XcpKVIzvajT6WRr6Wa2lm7m80/+w8P33sWUaYdxxlnncOIppxEcEqLkdfY2+7prvH7yB2hva6Ng&#10;/ToK1q/jg3cXMiB2IH+deRZnnnseKalpyl5nW3kZpx13NBZLTbfL2tvbef/tN9mwdg2ffvud9nlB&#10;esDpdHL2aSexNr9nM3euWZXD5ef8jRcXLpKrAaLfkD4Aol9ramzkgbv+j0MzxvDo/fcqO/l3xOFw&#10;8OtPS5l93TVkj07m4XvvpqG+Xtn6rRYLX/33U2XrU6mqsoKXn3+WGYdP5ZpLL6Ji924l6/3sPx/1&#10;6OS/t7X5eeQs/03J63dmdW5Oj0/+e9TVWln85X89lEgI9aQAEP3Wd4u/ZfrhU/j3ghe6vETrCc3N&#10;zbz8/DMcNTmL9956A4fDoXudxYUFuia76i1fff4Zx02bxMI3XtOdN2f5Mk3tfvvlZ12v2x2tufJy&#10;VihOIoTnSAEg+p32tjZuuuZKLjvvbHZs2+bVLNVVldxxy42cNv1oysu26lqXiiKit9TX1XHnrTcz&#10;64zTdF0Fsdu1bbPd4dmCT2suh8Z2QniDFACiX2lva+Pav1/CJx8u8naUfaxfu4a/nXQ869eu8XaU&#10;XvXbLz9z8Tln0tTY6O0oQgg3SQEg+g17ezvXXXEZ3371hbejdKiyooKz/3Iyv/z0o7ej9KrclSu4&#10;ZNZZNDc3ezuKEMINUgCIfuPmf1zF11/07U5WjQ0NXHLuWT53JWDFsl+59rKLvB1DCOEGKQBEv7Dk&#10;m6/57D8feTtGj7S1tnLj1ZfT0tLi7Si96vv/LeabLz/3dgwhRA9JASD6vNZWG/ffeYe3Y7hlY3Ex&#10;j9x7l7dj9LqH77mL1labt2MIIXpABgISfd5Lzz5D2dYtStcZEhpK0vARDBk6jIaGeqoqKqisrMRS&#10;U63sNd789yucesaZZE+arGydHTEajZx02ulutWlqbGBLaSnlZVtpa21VlqVs6xZeffEFrr7+RmXr&#10;FEJ4hhQAok+rqa7i+af+pXs9wSEhXHPDzUyZdhhJw4cTMyC2w+V2bt/O4m++4tsvPlfSmW/h6696&#10;vAAwm/145qVXNbW12+3s2L6NraWb+ej9d/nkww9053nuyce59MqrCQjo3bkEhBDukVsAok9b/NWX&#10;unuXn/rXM1jy60quvfFmsg6Z1OnJHyB+yBAuvPTvvP3RJ7z90SeMSknR9dpff/5f6mprda3Dk0wm&#10;E8MSEjnsyKN54vmXeO+Tz0lJS9e1zsaGBn5Z6ltPQgjRH0kBIPo0PY/8hYWHs/CjT3l6wasMind/&#10;kpZphx/JZ4t/IOuQSZoztLS08Ol/PtTcvrdNPnQaX363lJvm6OtzseRb789nIITomhQAQHPVDnYu&#10;+5Kdy76kuWqH13K0NdRSmbeU8u8/pL68GKfTt0cVa2pq0vxN0mg08uTzL3Ho4UfoyhAUFMS/31mk&#10;qYDY44cli3Vl6G0ms5nrZ8/hgksu07yO76QA8Hl2WxPVG1ZQ/t0irJvW4Ghv80oOp8NO8/YiapZ/&#10;RkPJShw2GbRqD5/tA+Bob6XgzUfY8s1btNTsO7FJYHQcSTMuIP3COzCa/T2eZevidyh4+1Ead5Tu&#10;83NzcCiDDjmejGsfIyBqoMdz9DVLv1+CzaatR/kZZ53DMcfPUJIjPCKCiy+/kkfvv1dT++3l5Upy&#10;9La7H3yE7xZ/y/Zt7ufftXMn69bkM3b8BA8kE31ZZd5S1iz4P2o3r8O515DNRr8AYkZPIuMfjxOe&#10;pO82U0/YqrZR9vbd1BX+iqN1r0dyDUaCBiczbObtRIw/2uM5+jKfvAJQu3kd3117JIXvzj/g5A/Q&#10;UrObwnfn8921R1K7eZ3Hcthqq/ntvvPImXflASd/gPamBrb9+B8WXz6J7Us/8ViOvuqXH3/Q1M5g&#10;MHDlP25QmuXcCy7WPP2vlhNoX2D28+MqHb3581evUphG9HV2WzP5z9/G0jmnYN2Yv8/JH8DRZqMy&#10;/yeWXHM4xYue8ugVzsql77H+7hlY13y378kfwOmgeXsRxU9ewpbXb8fe4rtXBHyuAGiu2sGPt5zQ&#10;oxN77eZ1/HjLCR65LeB02Pn1zr+x/efPul3WVlvNbw9cwK7l3yjP0Zft3rVLU7u00WN0d97bX3hE&#10;BGeefa6mtg319dTX1SnN01tO++vfNLetqqhQmET0daueuJ6NHz8P3cwQ6WizsfblOyl693GP5Kj8&#10;6f0en9grl77H5pfUflnoT3yuAFj1xHW0NfS8V3ZbQy2rnrhOeY6i9/5FTWGuW21yn7iO1gar8ix9&#10;VXVVpaZ2I5PVnvz3mJitvTOgnhnzvCk8IoIBsdpuP1VVSgHgK3b8+gVlS95zq03BW//P3n3HN1Xv&#10;fxx/JU2b7ibdLaUL2kILpS2VPQRBcP6uet0Dtyiiooh7c0UF3HtcxKsi4rwOREQURAUKLXsUWkYZ&#10;pSPpbtom+f1R8bJKk5NvmoR8n4+Hj4cPcj7nvCnp+X7POd/z/T5DTekmoTlaqg+w95On7KoxFv1E&#10;5e+eMcuoaF7VAShb9iUHV/1od93BVT9StuxLYTkaDuxiy39m2F3XXHWAzXOeFJbD3VVVViqqS+3Z&#10;U3CSdimpqYrqNL6+RMfGCk7TdZT+PJX++0mexdLWSuFL9l9FW9paFNWdzJ55T2Buqre/7mNldZ7O&#10;qzoA5QU/uaT2WBXrf1M8IrZ87VJhOdxdpcI7AKk90gQnaZfSoydqtf2/MgndE/Hx8XFCoq6R2lPZ&#10;z7NC3gHwCrW7Np9wLJUtqjevpq1J0DN4q5XazSsUlZoba2koLRKTw4N4VQfAsE35oCRHao9l3F6o&#10;uLZ+305aG+2/newfofwKNDZW+StwSplMJhrqlfXIe6Q5pwMQGhZGTl5/u+uU1LiTHgo7APIOgOtE&#10;RsUorrX3XGEoVt5wWq0WjDvFrJxpqtiNuUn5o7aGUu9awRO8qANgNbdRu2uL4vraXVuwmtuEZHHo&#10;uZfVqujvoeuZo+hwEZFRxHXrpqjWEXW1ymfPi3Fih+Wq625ApVLZvH2YTscDj3n2YxulP0+Lxbvn&#10;sXCl6NhYdOHhimrtPVfUOvgc39H6wxrLtjlWv2ezkByexGs6ACofDf4RyhsG/4g4VD5ipk0IjE5w&#10;rD7K/gZZn6asA9AvN1dRnaM6GUjsMhdcfCmvvTuH6JjOr7DSM3rx8lvv2rStO1O6ul9ERITgJJI9&#10;emX1VVRn77kiQMH56Oh6x86Hh/mFO9bx94vo+gsdV/OqiYDCe/VnX0WZ4lpRdGk57FkyX1GtVhel&#10;6BcuJv8M9Gm5GIptf/ygVqu59c677T7Wqe6s8/6P8eeez9qC1fzx23KqKv+3imBkVDSRUVH0zcll&#10;6PCRLk4qxq7SEkV1J1tzQXK+K6+/iZUrlmO1406MPi2XmPwz7DqOPs2xiwR9urKLk2MFJvRC5aNR&#10;fKc2ONX7Jq3yrg5A79PYt/xrxbXCcvTKd6BWWUdE5aMhf9pbLLltOJZW267obph4m9NXsvNUKpWK&#10;/qcNcGidAE9RsmOHorqIKNkBcKU+OXlcfOUEPv3PHJu2V/tqyZ/2lt13OnVpOYob3oCobviHi3lD&#10;RqXxI7B7Jg27FDzLV6kISnXN3U5X8ppHAACp595IYEyi3XWBMYmknnujsBwRWYOIG3SW3XUqHw2Z&#10;Ex5WfNzQ5N6cdt/b+AaFdrrt/130T+55QPmxpFNHyY5iRXWRsgPgcjfcfgdnnHVup9v5BoVy2n1v&#10;K5qi1zcolIxLpyiJR58bHldU15GEi+5VVBc96mqHHyF4Iq/qAGgCgsif+jrYMYgLlYr8qa+jCVA2&#10;DWxH+t/9Ktow+56R9rriXnQ9HbtNlTDyQsa+u5rYgeNO+HOIiY3lzff/w4tvvCPXc5ewWq3sKtmp&#10;qDZSPgJwOT8/LQ8//RxPzn6ZiBNN6KRSETtwHGPfXU3CyAsVH6f31fcTlpJlV038kHNIPOMyxcc8&#10;kdCs4USdfoVdNdqoRLpffL/QHJ7Cqx4BAETljKTfrc+w4Z1HO70VrvbV0vemJ4nKEf8sV6uPZuDD&#10;H7BqxvU2vUObOOZyel2hrHd7rIDIeIZO/4zWxjqMxUVoy9ZzfmYU2bl5JCYlCzmGdGrYsX07zc3N&#10;nW94Ar0y7WsQJOcZPnoMw0eP4UDZXrZu2sj68kaqu/VHl5aDb2CIw/tXa/wY+PBc/njiSur2dD4a&#10;P7LvUPKmvOLwcU8k8dKHaDUewljU+dwt2qhEet72OmptoFOyuDuv6wAA9LzgNqJzR1EwcyKG7Sd+&#10;v1+fnkf+vW86ddWqqJwRjH1nFYWv3E3ZLyeeitI/PIa8u14mbvDZwo/vGxhCVL/h9Bo2jHNTzZ0X&#10;SF7n3TdeVVSn0+vJHzhIcBrJUXEJ3YlL6I6uNZIVNQFC9x2SmMGYN1ewae50ihe8ctxiQAA+2kD6&#10;3PAYPf9xq313Yu2g1gaRdse7VP7+efsMf40nWIdDpSJ61NV0v/h+r238wUs7AND+PHzUKz9TU7oJ&#10;4/aiv0fH69Ny0aXnEJaShUrt/Nnb/ELDGfjQ+2Rd9yjG7YUYdhRhMlSg69EXXXoe+rR++HjxF1Ry&#10;ne1bt/D5p/bN737YqDFnevTsh5Iyal8tfW98irQLJ2HYthbD9kIaDu4mNKkX+rQcdBl5+AXruiRL&#10;5JCL0OeNp2HXehp3baCpbBt+4XEEJvclKCUbP733PfM/ltd2AABUah90PbLR9cgm+axrXJolOD6V&#10;4PhUEk5XvvqaJIlSYzRy84SrMLcpe6Vq7Hj7B7lKpw7/8FjiBp/tlDuX9vDxDyK012BCew12aQ53&#10;5VWDACVJ6tzvy5fxz3PHsVvh+/9+flpGjh4jOJUkSaJ1dAcgBsgHsgFnDAUPdsI+JUlywP6yMqY/&#10;9jALv1E2V8Zh199yK4FBYt+akaRTXDDwuBP2awLWAwXAcaPNj+0A5AHvAm47I4I987BLkreoOGTf&#10;ynuNDfXsKi1ld2kJpSU72V1awp8rfqOpqcmhHLFxcUy+e6pD+5AkLxQEPObkYxQCNwJ/j3w/sgPw&#10;BPAgbj4uwOquk8RLkou0tJgY0CfD1TEAePDx6fLqX5LcUy6wEniavzobh8cAXA48ips3/pIkua8h&#10;w0dw3gXKJ5ORJMnpNLS39ZdDewcgGnDOjAySJHmFrL7ZvPbu+66OIUmSbV4BotXAzYDHrNspxwBI&#10;knvJ6pvNh599hU6vd3UUSZJsEwHcrAbELXPXBeQYAElyH32y+8nGX5I802lq2l/3kyRJspmvnx+3&#10;T7mHz75bJBt/SfJM+XLQnyRJdhkweAj/mvkCPdPTXR1FkiQHaGifIOB8VweRJMl9+fj4MGLUaC6+&#10;4irOOleeLiTpFFCgAVbjQR0AOQhQkrqGSqUio3cmF15yKf/456VERZ9gPXlJkjzVag3wNnAXHvIm&#10;gBwEKEniqFQqAoOCCAkJQacPp1dmFn2y+5HVN5usvtmEhIa6OqIkSeJVAW9rgEPAZOBj1+aRJEkJ&#10;Xz8/fv5jtV01Go0vwcHBBAUHy7tqkuR9JgOHDg8CnAf0wgOmApYkd9NQX4/RaMDHR0NkZCQaX98u&#10;Pb4KFQndE7v0mJIkeaQ22qcCngdHN/aPAV8jFwOSpJMyt7WxYN5HLPr+W/74bTkmk+moz8N0Ovqf&#10;NoDrJ97G0OEjXZRSkiTpKCddDIi/PsjD+csBT6V99SO7yTEAkivVGI3cdsMEfl++7KTb/Lz4R35e&#10;/CMXX34lz730ahcmlCTJAzUAs5ywX7uWAz6sHPjur/+cYSIKOwDO0FS5H2NxEQC6tBwCIuNdkqO1&#10;vgbjjnU0Gw6h65lNcEJPVCp154VSl3n+2adP2vgfa8G8jxgz/izOPOscJ6aSJPdjNjVi3LmRxoO7&#10;CEnqRWhSb9Sarn08BmC1mGk+sIOmsm34hccRmJiJWus2zc9h9cDjXX1Qr33eb2k1sfk/M9i96EOa&#10;q4/uGPmHx5A07ioyr34Ata8zboAcbfePH7Hlo2dp2F961J9rAoOJzR9Lv0nP4R8e6/Qc7kSrVf5z&#10;b6ivc8oraxaLhYXffG133duvviw7AB3w9/dXVFdfVyc4ybH7r1VU58j39lRxqPAXNrz9MDUlG7Fa&#10;zH//udpXS0TmAPpNmklYSpbTc5gq9rD7o8eo2/oHlpbm/32gUhMQn0bCP6eh63eG03O4M6+8vDQU&#10;F7LktuFsmzf7uMYfoLm6nG3zZrPktuEYigudlsNkOMTvj1xCwcyJxzX+AG2N9ZQt+5LFNw5g78+f&#10;Oi2HOwoNC8PXz09RbcmOHYLTtNu7ZzcVhw7ZXber9Ph/W6ldpMKO2s7i7YKTHLv/YkV1+ohIwUk8&#10;R1tzI4UvT2H5fedj3LHuqMYf2i+6KtYt5+fbRrD145nHfS7SoZ8/YOOj46lZv/Toxh/AaqFp3zaK&#10;X7qB0vfuwdzk3M6kO/O6DkDjob0sm3o2tbu2dLpt7a4tLJt6No2H9grPYTW38dtDF3Hgz4WdbttS&#10;Z2DVjBvYv+Jb4TncWUSEsqkpdu5wTuOwZ5eyhryqsoKG+nrBaU4NSu/U7Nju3A7AjuJtiurCI723&#10;A7Bm9m2UfPMudDJOy9LWwqY5T7Llw2edkuPQLx+x+8NHsZgaO922csXn7Hzzdqfk8ARe1wFYM3sS&#10;bY22n4zbGutZM3uS8BxbPnz273EHtlr70p201FYLy9DaWEfFuuWs+uR1vv3qC/bs3iVs3yJERim8&#10;OnTSHYA9u3crrq0xGgUmOXUo/TfeV7aXpqYmwWnatbW2Kr5row937/nUDpTtZemihSyb9xYV65bT&#10;2ijm6nffsq8o++Vzu2q2zZuFccc6Icc/zFRZxt75T9tVU7PhVyqWfSI0h6fwqjEAe5cu4NDapXbX&#10;HVq7lL1LF9B91MVCctTvL2HrPPsHfJoMh9g05wly73zJoeM3Ve5n7Yt3cHDVj3/31hf/9VlMbCxP&#10;PDOTcWef69AxRIhQeDVVskPZ7dvObN64QVGdWq0mOiZGcJpTg9I7AFarlZIdxWT1zRacqP2Rjbmt&#10;TVGtu94BWP7zT7z0zHSqKo55hKVSETvgTPLuelnx4GdLWwuFL09RUNdK4Ut3MeoV+8/JHdkz7wks&#10;pga76/bOn074aefgExAiLIsn8Ko7AEoafxG1x6pc9xtWs7ITzKG1vzh07LJfv2DxjadxcOWiE96q&#10;Kz94kInXXs1dt9503PvtXS0iMkpR3eaNG4QPEmuor+frzxcoqo2Kju7yyYE8hdI7AIBdb2PYtd/f&#10;lO83PNy9OgAtLSamPziNR++54/jGH8Bq5eDKRSy+8TTKfv1C0TFqSjdhqqlUVGvYttauO7InZbVS&#10;t/UPRaXmpnoaSuy7I3sq8KoOQPXWNS6pPZYjAwvrD5TS2qBshHLtri2sfvZmm+q//vwzZs+Yrug4&#10;ovTLzVNU11Bfz3/mvCc0y2effKz4OX5cfILQLKeS3ll9FI+cf/u1V4Q/BmhpMfHGyy8oqtVoNKT1&#10;zhSax1HvvfoySxZ2PnaotaGW1c/ebNPYqGMZtytvOK1WC8adYh4DNJfvwtykvDNRXyr2cYQn8JoO&#10;gNXcRt0eZQN7AOr2bFN81X6s2l2blRdbrYp+Sa3mNgqeuwVLq+1X9e+9+ToFq1bafSxRzhg3XnHt&#10;26+9zL4yMYM3LRYLc997R3F9UkqykBynosDAQIaOUDZbYmXFIeGd1JdmPsvB/fsV1ebkDyA4xH1u&#10;IW8sWsuCj+bavL2l1UTBc7fYfZ6rceR8BtSUOlZ/WNM+5ed3gKa9W4Xk8CRe0wFQ+WgcmuAnIDIe&#10;lY+YIROB0Y7N2x4Y093umvKCJXbfebBYLLzx0vN2H0uUbgnd6ZWp7H1ho8HALROuorHB/ueBx3ri&#10;ofsp3al8YOFZ5/2fwxlOZWPGnaW49r03X+ejuXOE5Pjsk495/SVlV/8Aw0aPEZJDlI/+/Q5Wi8Wu&#10;GkNxIeUFS+yqCVJwPjq6Xsw6Fn4R3Ryq10Z63506r+kAAOgzlN1SdrT2uH2l5yiu1eqjFXVkDHa+&#10;cXDYukLnzYNgizHjlTcOmzas54whp/HVZ8qe3Tc1NfH4g/fxgQNX/3p9OKPHnKm43hucMe4sh9b4&#10;ePjeu7nx6ssVd9J2l5Yw8dqrufcO5W/7qFQqhp0+WnG9M2zdpGzQqr3nCl2aY0vH6NKUnw+PFJjQ&#10;y6GLtKAU8QNK3Z1XdQDCe5/mktpj6TP6K8+hsCNi3KGsA1BVWcGBffsU1Ypw5vizHao/eOAAU267&#10;mX+eM44NRbZ1ZmpravhywXzOHDaIue++7dDxz7vwIsUTGnmL6JgYcvKU/04ALFn0A2eOGMJTjzyI&#10;0WCwqcZoMDD90YcYM2wQi753bI6N3n2yiXBgQKNohw4exFit7JVhe88Vup79FDe8AVHd8A8X84aM&#10;SuNLYHeFYzBUKoJS3XYNPKfxqtcAU8+9kZ1fv01j+R676gJjEkk990ZhOSKyBhE36CybJgE6kspH&#10;Q+aEhxUds7nqoKI6gIMHDxDXzbHba0r1zcll9Ngz+Xnxjw7tZ83qVZx/5mh0ej3JKT1ITk0lOSWV&#10;pJRUWltbqDh0iIpD5WzfuoWVf/yu+DWwI/n4+HDFNdc6vB9vMOW+B7jmkosc2kdbayv/fusN3n/n&#10;LWLj40lOSSU5tQfJKSnExMZTfnA/u0pL2VWyk12lJRzcvx+LnbfIO3Ldre41mUxlxfEznNrK3nOF&#10;b1AoGZdOYevHM+0+Vp8bHre75mQSLrqXbbOvtrsuetTV+IXHCc3iCbyqA6AJCCJ/6ussm3Zep7NV&#10;/U2lIn/q62gCxC4e0f/uV1l80wBMNVU21/S64l50PfsJzeEJHp0+g+W//kJrS4vD+zIaDBQZCiha&#10;WyAg2cndesddZLjZqHB3Nfz00Yw/5zx++O4bh/dlsVjYX1bG/rIyp70qeKThZ4wlf/BQpx/HnfW+&#10;+n4O/PE9NaWbbK6JH3IOiWdcJjRHaNZwok6/gopfPra5RhuVSPeL7xeaw1N41SMAgKickfS79Rmb&#10;FvlR+2rpd+szROWIX9Ndq49m4MMf2Hz7K3HM5fS64l7hOTxBUkoqN9xym6tj2KV3Vh/uuGeaq2N4&#10;lEeeepqAgABXx7CL1t+f26d6Z+NxJLXGj4EPzyUkMcOm7SP7DiVvyitOyZJ46UPocmwbkKmNSqTn&#10;ba+j1gY6JYu787oOAEDPC27jjNeXo0/v+Hm6Pj2PM15fTs8LnNfwROWMYOw7q0g4veNbn/7hMQx5&#10;cj6n3fe2S5bSdBeT755KbLxrlmm2l6+fH7NffUM++7dTfEICkz2s03TNzbcSHet9t45PJCQxgzFv&#10;riD90rtQqX1OuI2PNpB+tz3LyNkL0eqUTfTVGbU2iLQ73iXlxtn4BIaeeCOViujR19DnyR8ITOrj&#10;lByewKseARwpNLk3o175mZrSTRi3F/39ipw+LRddeg5hKVkdfolF8gsNZ+BD75N13aMYtxdi2FGE&#10;yVCBrkdfdOl56NP64eOlvdMjBQYF8Z9Pv+TyC86j8kQzmrmJwMBA3pr7Ib2zvPek4oiJk+/k4IH9&#10;Dr150VUuuOxKLr9W3NigU4HaV0vfG58i7cJJGLatxbC9kIaDuwlN6oU+LQddRh5+wbouyRI55CL0&#10;eeNp2LWexl0baCrbhl94HIHJfQlKycZPLztuXtsBAFCpfdD1yEbXI5vks65xaZbg+FSC41NPejfA&#10;2/VMT+fjL/7L5RecR1VlhavjHEevD2fOvE/p5+CIdm+mUql4YsZz+Pr68t6br7s6TocuvmoCt91z&#10;n6tjuC3/8FjiBp9N3GDH3uJxlI9/EKG9BhPaa7BLc7grr3wEIHmutIwMPv7ia8LdbN31xKRkPv1m&#10;oWz8BXn4yX9xy+13ujrGCV127Q2y8ZdOCbIDIHmc9F69WbRsBeddcKGro+Dr58ftd09l0fI/6Jme&#10;7tC+QsPCurTO3d3/6OPMmbeAxKRkV0cBIDE5mWdfe5tb7rzH1VEkSQjZAZA8UmRUNC+/9R5z5i0g&#10;obuYqUTtNWzkKBb9uoJ77n8If39/h/fXO6sP8Qn2T0d61rnnOXxsd3X6GWP48bc/uWPqNPz8lC0a&#10;5CitVsuUaQ/w1eJfGDBkmEsySJIzyA6A5NEONxCPP/0smX36Ov14wSEhXHb1BL5YuJj/LPiClB49&#10;he1bpVLx1DOz7FpQpndWHyZOvktYBnd0uAFevOJPJk6+q8veBolPSGDSXXfz0++r/uqAyLc6pFOL&#10;Vw8ClE4NAQEBTLjxZibceDObNqzn048/5LuvvxI2UDBMpyO3fz7/d9HFjD/3fCFX+x0ZfeY4vl60&#10;hBdnPsOSRT/Q2Nh4wu3iExL4x0UXM/meaU7N404Sk5K575HHuPehR/hzxW988eknLPnxB5un/rWF&#10;Xh/O2LPO5oKLL2XgkKEOrVEgSe5OdgCkU0pW32yemPEcIaQ10wAAIABJREFUT8x4jgP79rFhfREb&#10;1hWxcV0Re/fspr6ujrq6uqNWCVSpVASHhBAaGkZoWBjh4RH07tOH7Jw8snNySEpJ7dK/Q2rPNF5+&#10;6z0aGxtZu3ol5QcPUnGoHK3Wn6joaJKSU+jTL8drGye1Ws2Q4SMYMnwEAPvK9rJ54wY2b9jApg3r&#10;2V1aQl19HQ319TTU12M2m/+u9fHxISg4mKDgYEKCQ0hKSSWrbzZZfbPJ7NNX0SMYSfJUsgMgnbLi&#10;unUjrls3zjzrnOM+s1gs1NfVAe239dVq93saFhgYyLCRo1wdw+11S+hOt4TujO1g4aimpiaamxrx&#10;Dwj0uJkGJcmZZAdA8kpqtfqUHT0vHS0gIEA2/JJ0Au532SNJkiRJktPJDoAkSZIkeSHZAZAkSZIk&#10;LyQ7AJIkSZLkhWQHQJIkSZK8kOwASJIkSZIXkh0ASZIkSfJCsgMgSZIkSV5IdgAkSZIkyQt59UyA&#10;lrZWjMVFGIoLMW4vBECXnos+LRddWg5qjW+XZandtRnD9kKMO9bRbDiErkc2+vRc9L3y8Q20fXU4&#10;SZIkV2ss30P11gIMxYU0HthNSFIv9Om5hGf0R6uP7rIcbQ1GGkqKaNi1gaaybfiFxxGU3JeglGy0&#10;0cldlsNdeW0HwLhjHQUzJ1JTsvHoDxZ9CEBYah/y730TXc9+Ts1hMhxi7Yt3sP/3747687JfPgdA&#10;GxZBzuTnSRh5oVNzSJIkOcpsamTje4+z46s3wWo97nO1r5bMCQ+RfvEdqNQ+Ts1S8evH7J3/L8zN&#10;DSf8PGr4pXS/7BF8AoKdmsOdeeUjgO3zX2Tp5FHHN/5HqCnZyNLJo9g+/0Wn5Shfs4TFNw04rvE/&#10;kqmmipXTJ7DyqWuwtLU4LYskSZIjako38dPNg9nx5RsnbPwBLK0mNr77KL/cOYbm6oNOyWFuqmPb&#10;7KvZNffBDht/gIrl89n4yFgaSoqcksMTeF0HoHzNEja8+wiWttZOt7W0tbLh3UcoX7NEeI7mqgOs&#10;mn4tppoqm7YvW/Ylmz94WngOSZIkR1laTaycPoH6/SU2bV+9tYA1s293SpY9856kdtNym7ZtqT7A&#10;jjcmnbSjcCrzqg5Aa0Otoi/dmtm309pQKzRLwexJtNQb7arZPv9FDNvWCM0hSZLkqE1zp1O3Z5td&#10;NQdXLWLXX49cRalZv5TK3xbYVdNStY+98/8lNIen8KoOQOm3/6aposzuuqaKMkq//bewHJUbfqd8&#10;9WK766wWM5s/mCEshyRJkqNa62soXvCKotpNc54UmqXsy9mK6ip+/ZiWqn1Cs3gCr+oAVG1Z5ZLa&#10;Yxm2FThQK+8ASJLkPgzFhVgtZkW1zVUHaKrcLySHpdVE096tiuvrSwqF5PAkJ3sLQAUkA1onHNe5&#10;wz874EjjKbLhNWxXPujEVFNJ46G9BEZ3F5ZHkiRJKaMD5zMAY3ERAZHxDudoKtuK1dKmuL6hZB3h&#10;p53rcA6FfIBeTtivCdgFnHBU5rEdAF9gCnAWkAeEOiGQQ1QqlaI6q7mN5upyxcdtri7Ham5D5eP4&#10;m5OO9nibKg/IDoAkSW6hqcrR85mYOwAtBsfeKmgxHBCSQ6FIYIuT9l0LrAUWAi8Af4+AP/IRQC5Q&#10;ADwLnI4bNv4A1g5eL+mMykdDaHKm4uOGJmcKafyhfY4BxVQqwhz4e0iSJIkUluLA+QwHz4dHCExw&#10;7AI6MDFLSA43FEp7m/4s7W187uEPDncAMoDfgeyuTtaVwjPyXFJ7LF1ajuLa4G490AR678QVkiS5&#10;F12a8snSVCo1YT3ENDvaqER8ApTPmhqUfEo3f4dl097WZ0B7B0ANzAH8XRiqS0Tnn+GS2mNFZQ9T&#10;PM1wTN4oYTkkSZIcFZqciX94jKLa8MzT0PgHigmiUhGaOVRRqU9gKEEpzp311Y34097mq9XANcBg&#10;1+axndIxAAAJIy4gduA4u+tiB44jYcQFio97rKC4ZDKvecjuuoDIeLKue0xYDkmSJEepNb7kTbH/&#10;NUC1r5a8u5S9PtiRxCseU3QXIOnKJ7xtSuDBwDVqYKSrk9hD6RiAw/rf/Sp+IXqbt/cL0dP/7lcd&#10;OuaJpF96FxFZA+2q6X/Pa/gGhwnPIkmS5Ii4QWeRPO4qu2qyJjxMaHJvoTn89HEkXvm4XTX6vHFE&#10;DBZ3gedBRqqBfFen6Er+4bGc/uJi9OmdP9PXp+dx+ouL8Q+PFZ5DpfZh6PTP6T76kk639Q+PYchT&#10;C4jJHyM8hyRJkgi5d71ExqVTUKlOPr2MjzaQnEkzSb/kTqfkiBxyEak3vYBPYCfj2FUqos+YQOrN&#10;zlvvxc3lq4FEV6foaiGJGYx6eQmZEx4mMOb4v35gTCKZEx5m1MtLCEnMcFoO3+AwBjzwHgMfnkto&#10;cu/jVsfyCw0naewVjH1nFXGDxjsthyRJkqPUGj/63PgkI1/4kYjMAah9j55CRhMQRMxpYxnz5gp6&#10;/GMiOPA4tzMRgy+gz1OL0Pc/67hHAiofDUHJ2WTc8yFJVz6B2i/AaTncXKIGWA8Mc3WSrqby0dD7&#10;qvvofdV9tNRWYyhunwVKn5aLX2h4l2ZJGHkhCSMvxGxqxLhzIybDIXQ9s0/YOZEkSXJnEVkDOf2l&#10;JVjaWqndtZmGg7sJTepFcELPTu8OiOSnj6PnpPaVCU0Vu2ks24ZfeByBCb1Qafy6LIcbW6+h/b1A&#10;r+sAHMkvNJyY/uJG+Svlow0kInOAq2NIkiQ5TK3xRdezH7qeLh5dr1KhjU5GG53s2hzup0ANfEYH&#10;0wS6I0feApAkSZIkCSvwmRpYAbzu4jA2c/QtAEmSJEnycq8DKw4/kLmP9rEAkiRJkiSdutbT3ub/&#10;PRVwAzAAmAEoW9dRkiRJkiR3Zaa9jR9Ae5t/1GqAJuBB4ENgLO3zA2TjnOWAe6JwSWA5BkCSJOnk&#10;HHpUKs+xrmAGdjhhvybar/gLgMXA5iM/PNHydpuP3cgJDgKKJo+WYwAkSXIFi8Vzzj379u5RXGvP&#10;TKmSMJWAY8sZKtB1L2VKkiR5MLPZc56Obtu0UXGtvz5aYBLJnckOgCRJkg3aPKQDYLGYWbPyD8X1&#10;zpj6XHJPsgMgSZJkgyZTi6sj2GTe+++xu2Sn4nqlS/tKnkd2ACRJkjphamn1iEcAO7ZtZe5bjk3r&#10;EtYjW1Aayd3JDoAkSVIn6hsbXR2hUyXF25g68QZaW5TfqdCGRRLRZ5DAVJI7O9FbAJIkSdJf2sxm&#10;6hubXB3jpHZu38bdN19HbY3Rof3EDRrfpQv2SK4l/6UlSZJOwlhb59avHxdv3cKUm691uPEHiB96&#10;noBEkqeQHQBJkqQO1Dc2ufXVf/GWzdxzy3XU1dQ4vK+AyHhi8l2/KqrUdWQHQJIk6QRMLS1UGR1v&#10;WJ1l2+aN3DPxeupqa4XsL/Oah1D7OmPiV8ldyTEAkiRJx2hpbaW8yuC2t/63btrIvbfeQH1dnZD9&#10;hSRmkDTuSiH7kjyHvAMgSZJ0BFNLKwcrq7FYLK6OckJbNqxn6kRxjT9An+sfR6VWtDyL5MG8+g6A&#10;pa0Vw/ZCDNsKqN66BoDwXv3RZ+SjT89FrfHtsiw1pZswbFuLYVsBzYZD6NNy0WfkEZ45EN/AkC7L&#10;IUnezNTSSnmV+zb+mzes495bb6KxoV7YPpPOvJL4oecK2x9AY/keqjavpHrrGhr2lxCWkoU+oz8R&#10;mQPQduFUw20NRup3rKGhdD2NezajjexGUEo/gnvkoo1O7rIc7sprOwDGHesomDmRmpKj58ze+/On&#10;AISl9iH/3jfR9ezn1BwmwyHWvngH+3//7qg/37/iWwC0YRHkTH6ehJEXOjWHJHm79sa/ym0X/dm0&#10;rpBpk24R2vhHZA4g766XhO3PbGpk43uPs+OrN+GIxycH/lwIgNpXS+aEh0i/+A6n33Go+PVj9s7/&#10;F+bmhhN+HjX8Urpf9gg+AcFOzeHOvPIRwPb5L7J08qjjGv8j1ZRsZOnkUWyf/6LTcpSvWcLimwYc&#10;1/gfyVRTxcrpE1j51DVY2jxjKlJJ8jSmllbKK9238d9YtJZpk24W2vgHRHVj0GMfCxv4V1O6iZ9u&#10;HsyOL984qvE/kqXVxMZ3H+WXO8fQXH1QyHGPZW6qY9vsq9k198EOG3+AiuXz2fjIWBpKipySwxN4&#10;XQegfM0SNrz7CJa21k63tbS1suHdRyhfs0R4juaqA6yafi2mmiqbti9b9iWbP3haeA5J8namlpb2&#10;xt9NB/ytX7vmr8a/48bMXn4heoY89amwef8trSZWTp9A/f4Sm7av3lrAmtm3Czn2sfbMe5LaTctt&#10;2ral+gA73ph00o7CqcyrOgCtDbWKvnRrZt9Oa4OYV20OK5g9iZZ6+ybu2D7/RQzb1gjNIUnerL3x&#10;r3bjxr+A+26/mSaBUxH7hYYzfOa36ATO+b9p7nTq9myzq+bgqkXsWvShsAwANeuXUvnbArtqWqr2&#10;sXf+v4Tm8BRe1QEo/fbfNFWU2V3XVFFG6bf/FpajcsPvlK9ebHed1WJm8wczhOWQJG/W7OaNf1HB&#10;Ku67/Raam8RNRKQNi2CE4Ma/tb6G4gWvKKrdNOdJYTkAyr6craiu4tePaanaJzSLJ/CqDkDVllUu&#10;qT2WYVuBA7XyDoAkOarZ5N6Nf+Hqldw/eaLgxj+S4TO/Iyy1r7B9AhiKC7FalK2U2Fx1gKbK/UJy&#10;WFpNNO3dqri+vqRQSA5P4lUdAEcaT5ENr2G78kEnpppKGg/tFZZFkrxNs6mF8qpqt53kZ+2qP3lg&#10;8q2YmpuF7VOri2LErO8IS8kSts/DjA6czwCMxWIG4TWVbcVqaVNc31CyTkgOT+I1HQCruY1mwyHF&#10;9c2GQ1jNyr9cR3K0x9tUeUBIDknyNu7e+Bf8+TsP3nEbJpPgxn/md4QmZwrb55Gaqhw9n4m5A9Bi&#10;cOytghaD951XvaYDoPLREJrUW3F9aFJvVD5ipk0IS+2juFalUhPmpF9kSTqVNZtM7t34/7GCh+6c&#10;JLbx10czcvZCQpOVn/s6E5ai/HwGjp0PjxSY0Mux+kTxd0fcndd0AKB9lj9X1B5Ln56ruDY4oQea&#10;QO+duEKSlGgymdx6bv9Vv//GQ3fdTkuLSdg+/cNjGDl7ISGJGcL2eSK69BzFtSq1D2GCBiRqo5Pw&#10;CQxVXB+U4txJ39yRV3UAYgec6ZLaY0X1G6548o2Y/DHCckiSN2gymTjkxo3/yt+W8fAU0Y1/LCNm&#10;LSSke7qwfXYkLDmTgMh4RbURWYPQ+AeKy5I1QlGdJkhHcKrsAJzS4oeeR9zgs+2uixt8NvFDzxOW&#10;IzAmkawJD9tdFxCVQOa1jwjLIUmnuqZm9278/1z+K4/ccwetLeJm+fSPiGu/8u+eJmyfJ6Py0ZA3&#10;5WW769S+WqHTEAMkXv6IorsASVc9iVobJDSLJ/CqDgBA3l0v4xeit3l7vxA9eXfZ/+XuTNoldxCR&#10;Nciumv73vCoXBpIkGzU1mzhU7b6N/++/LhXe+AdExjPy+R8ITugpbJ+2iB0wjuTxV9tVk3XtI8If&#10;T/jqYki64nG7avT9xxM+8HyhOTyF13UA/MNjOP2lnwjvld/ptuG98jn9pZ+ETZd5JJVKzdDpn5E4&#10;5vJOt/WPiGPo9M+I6X+G8BySdCpy98Z/xS8/89i9d9HW2vmU5LYKiEpg5OwfCI5PFbZPe+Te+SIZ&#10;l9/T6SI/Gv9AcibPJv3iO5ySI2LIhaTe/CKaIN3JN1SpiBl7Pak3veCUHJ7AK1cDDOmezukv/UTx&#10;glco/WEu9ft2/m/xCpWK4G49SBk/gbSLJzt1xSrf4DBOu+9tug07ny0fPUtt6aaj1ijwD48hbtBZ&#10;9LnpKfyCO/kyS5IEQGNzMxXVRrdt/Jf//BNP3nc3bW1iXisGCIzuzohZ3xMUlyxsn/ZSa/zoc/3j&#10;dBt6HhveeYTqrWswm/43hbFvcBhR/YaTfcsMp+eMGPQPQnsPYe/8f1GzcTlt9dX/y+mrJTC5LwkX&#10;TSMkfYBTc7g7lYuOexBQdFl9zvwdwq/IW+tr/p7oR5/RH9/gMKH7t5W5pZmanRtoNhxCn5ZDQFQ3&#10;YfteOnkU1VuVzUD4xcLF5Pbv/I6JJLlae+Nv6GgxOpdbvmQxT95/j9jGPyaxvfGPTRK2TxGsFjO1&#10;uzZTv7+UsJSs9jsTqpM3OcaaRmprxc1+eJipci+NezajjehGQEIvYa90H6m1poKiKacpLS8HYgXG&#10;sYlX3gE4lm9wGNH9R7s6Bj5+/oT3VvwFkiSv1tjUTIXBfRv/X3/6kafuvwezWdm0uScSGJPIyNkL&#10;CYxJFLZPUVRqH8JS+wqfelgJbWR3tJHdXR3D7XjdGABJkk497t74//LjD8Ib/6DYJLdt/CXPIO8A&#10;SJLk0RqamqmsNuCmbT8/L/qefz14HxaFC+acSFBcMiNmfU9gtLyqlZSTdwAkSfJY7t74L1n4rfjG&#10;Pz6FkbN/kI2/5DB5B0CSJI/U0NRERbXR1TE6tPi7b3jm0QeFNv7B8amMmL1Q8cx7knQkeQdAkiSP&#10;09Do3o3/j99+zYxHHxDb+Cf0ZOTzP8jGXxJG3gGQJMmj1Dc2UWlw38Z/0Tdf8ezjD2O1WITtM6R7&#10;GiNmfY9/eJe/KSadwmQHQJIkj+Hujf/Cr79k5pOPCG780/9q/MXPSCp5N9kBkCTJI7h74//9V58z&#10;68lHhc5AGJKYwchZ36PVRwvbpyQdJjsAkiS5vbqGRqqMNa6O0aFvv1jA89MfF9r4hyb3ZsTM79Dq&#10;ooTtU5KOJDsAkiS5LStQbayhrqGx021d5ZvPPuWFp58Q3PhnMmLWd2jDIoXtU5KOJTsAkiS5pTaz&#10;mUqDkWaTuOVyRft6wSe8NOMpoY1/WEoWw2d+Kxt/yelkB0CSJLditlioqaunrqHRbVf0A/hq/se8&#10;9Mx0ofsMS+3L8Oe+QRsWIXS/knQisgMgSZLLWa1WmkwmGptMNDY1YXHjhh/gi3kf8spzTwvdp65H&#10;NsOf+wa/0HCh+5WkjpyoA9ATOAPIB7IBrROOq7h7q+pkOUlJvPLKasqrqvHT+Ha2mqck2cxssWA2&#10;WzBbzLS0trn11f6RPvvoA16b9YzQfep69mtv/EP0QvcreYwIoMgJ+zUB64ECYAmw48gPj+wA+AIP&#10;AA//9f9uyVNOEqcSi9VCU7OJJkyujiJJLrXgP+/z+vPPCd2nPi2XYc/9F79gndD9Sh5FA/Rz0r4H&#10;ADcCrcB0YMZf///3VMABwB/AE7hx4y9JkuQq8z+YI77xT89rv/KXjb/kfL60t/F/0N7m/90B+BfQ&#10;30Wh3ILVasFqFTd7lyOs5jZXR5Ak6QifvP8eb74wU+g+w3v1Z/hz3+AbHCZ0v+7G0tbq6giAPK8e&#10;oT/tbT4aYCBwp0vj2EHkGABjcRG7F8/DWFyIced6oH0gji49j6Qxl6FLyxF2rJNprjrAzv++g6G4&#10;CGNxES11BkKTeqPPyCV2wDi6DTu/S3JIknS8j+e8wzsvvyB0n+G98hn2zNf4BoUK3a87aGtupOTr&#10;t6nasgpjcRFNFfsITuiBLi2XyL5DSTl7Aiq1j/ODWK1U/fEltZtX0LB7A80HduIbFkVgUl+CUvsR&#10;M/oafAJPvZ+/je4E5quA2cDdLg5js3Pm73B4TmxLWwtbPnyWbZ8832GvUOWjIeOyu+l91X2oNX4O&#10;He9k9v78KUWv3ENLfcdTnMYPPY+8O190aDrQpZNHUb21QFHtax/MI7Ovsx5PSZL7+ui9t3n31ReF&#10;7jMicwBDZ3yFb2CI0P26g4r1v7Fm5kQaDu7ucBt9eh75094iNKnXcZ8ZaxqprW1yOIepsoxdc6ZR&#10;u+X3Drfx08eSfO0zhPU93eHjAbTWVFA05TQh++oiz6tpH+3vNSxtrfx693i2fvTcSW8JWc1tbP3o&#10;OX69e7zTbmGtf/MBVs244aSNP8D+Fd+w+KYBJ/2lkiRJrA/eeUN84581kGEzvj4lG//S7+awbOrZ&#10;nZ6nDNvXsuTWYRxau9QpORp3b2TjI+NO2vgDtBgOsv2Fazn4w1tOyeEB8tVA19zndhNbP3qO6i2r&#10;bd6+estqtn4kduAPQPmaJRR//qrN25tqqlgz61ZQ+BaEWqN8bGddjfvOwS5JzvD+m68x5/VXhO4z&#10;ss9ghs34Gk1gsND9uoOG/aWse+N+m89PllYTBbNuo7WxTmgOa1srJe9NxWJqsLmm7POZNO7dIjSH&#10;h8hRA2WuTtFVjDvXs3XeLLvrts6b9fcYARFaG+tYM3uS3XUV65az85t3FB3TkccHP/z3S8W1kuRJ&#10;yg/s595bb2TuW68J3W9k3yEMffpLNAFBQvfrLgpmTcRssm+9hqaKMja8+YDQHPu/eZmmsq121VjN&#10;bZS+dw9Wi1loFg9QpqF9goBMVyfpCnuXfKpoJKjV3MbeJZ+i65EtJEdF4S80VexTVLtn8cf0OP9m&#10;u+v8w2MVHQ9g2ZKfeGLaFMaffwEhYaf2iGXJ+5iamykp3k7x1i0s/3kxjQ22Xz3aIip7GEP+9Tka&#10;/0Ch+3UXDQd3U7nh5LfbO7Ln50/JveslYYMCK3//XFFd457NNO7ZTFByXyE5PESBBlgGXOPqJLZy&#10;5C0ApYPgHK09lmF7oeLampJNWM1tqHzsm8U5ICJO8TEtFjO/LF7EL4sXKd6HJHmjqH7DGfqvz/DR&#10;npqNP4DRgfOZ2dRE3Z5thCY7fg3aVldNS9V+xfUNpeu8rQOwTA28D9j+UNzFlM4EaLVaMO5QPtOi&#10;cUeRsHkCDMXKc5hbmqndbf/zqvDeHjU6VZI8XlTOyFO+8QcwFCvvAIBjF0RHati90bH60nVCcniI&#10;1cD7asAMXAe475qbAqhQoVKpO9+wo3qVGhVi5iBwJEf7Duyvj+w7RM42JkldJDpvFEOnLzjlG39w&#10;/HymUjt4Pvw7h2Pn5y6Zm8A9tNDe5psP/+Q3ASOAU3copEqFLj1XcbkuPRdRK+Ho05W/eOGjDTjh&#10;+7OdUfloiB04XvFxJUmyTXT/0Qx5cj4+2gBXR+kSjpxXAXRpjtUfFujg7fugFDFjvNzcFtrb+k3w&#10;v6mAAVYCucBjwJ9Ac5dHs4EjvTx9Rp5Lao/lyBc+LLWP4p5q8tkTFB9XkqTOxeSP8arGH0DvwIyp&#10;Gv9AQhLTheTQBOnQRiYorg9KOWUnO2umvU1/jPY2fuXhD44dSWYCnvzrPw2QhnOWA/4JhUsCO7Ia&#10;YNKYy9nx+etY2ux72qHW+JE05nLFxz1WdO7pBMYk0li+x+7a5HFXKz5uVPYw4gaN58CfPyjehyRJ&#10;JxY74EwGP/4xal9nnDLdV2BMIlE5I6goWmZ3beLYKxx/JHqEyGEXs+8r+6dtDkrOJiDB/jurAlUB&#10;Y5ywXxNQDJzw9beTDSVvw3mPBFyyKkNocia9r76fTXOetKuu99X3CxmlepgmIIj8qW+wbNq5dk3s&#10;E91/NCnnXOfQsfvc+BQHVy32xndeJclpYgeMY/DjH3ld439Y/tQ3WHzTANqabH+FMjAmkb43TRea&#10;I+6cSRjW/kjjnk0216g0fqTcMMvVYwDaAOWjwxUS1/XyEBmXTiGy71Cbt4/sO5SMS6cIzxGVM4KM&#10;y2xfgsE/PIb+d9s+c2BHQpN60fuq+xzejyRJ7eIGjWfwE9535X+kwJhEcm6fbfPVvI82gPxpbwmf&#10;GEnloyHlhtm2L/KjUtH94vsJ6CbmMYSn8boOgMpHw4iZ35J13aMnXeRHrfEj67pHGTHzW7vfubdV&#10;n+sfZ9CjH6INizzpdt1HXczYd1YRGN1dyHF7X3U/CSMuELIvSfJmCSMuYNBjHzl1wTBPkXTmlYx8&#10;cTEh3dNOul1E1iDGvPUHUdnDnJIjsHsv+jz1Y6eL/GgjE8iY+hExY693Sg5PIG5tXfscBBQt6Sdi&#10;NcDDandtZs9Pn/y9DC+ALi0HfXouiWdcKvS2/8mYjBWUfjcHQ3EhxuJ1mGoqCUvJQp+eR+zAM4kd&#10;ME74Mc2mRpZNPUfoBEeS5DVUKjKveZDeV94n7O2gU4XZ1ETp9+9TvWU1huJCGg/uISQxA316DpF9&#10;h5I49vIO7xSIWg3wsOrV31G7eQWNuzfQWLYNv/A4gv5aDjj69CtQa8XdgXBwNcByQPl0rQp5dQfA&#10;bVmtXXJSMZsaKXhuImXL5Fz/kmQrjX8g+fe9Q7dh57s6imew43wmugOgNIcSntgB8LpHAB6hi64o&#10;fLSBDHx4LpnXPOjqATCS5BHih57H6Nd/k42/PdzlDom75HAjznm4LXkOlYreVz9AtxEXsPHdR+Qr&#10;gpJ0AtH9R9PnukfRZ/R3dRRJEkZ2ACSg/e2AIU8toGL9b+z6fi4HV/5AS73R1bEkyWXCUvsQN/hs&#10;4oeei17QbHWS5E5kB0A6SlT2MKKyh2E1t1G54Xeqt6ymqeoAzdUHMRkOYWlrdXVESRJKrfFFq4/G&#10;Xx+Df3gMAVHdiOo3nMCYRFdHkySnkh0A6YRUPhqickYQlTPC1VEkSZIkJ5CDACVJkiTJC8kOgCRJ&#10;kiR5IdkBkCRJkiQvJDsAkiRJkuSFZAdAkiRJkryQ7ABIkiRJkheSHQBJkiRJ8kKyAyBJkiRJXkh2&#10;ACRJkiTJC8kOgCRJkiR5IdkBkCRJkiQvJDsAkiRJkuSFZAfgL1arBavV4uoYAFjNba6OAOA2K/+5&#10;y89DfkeO5y7fEXfJYbWYwWp1dQxAfkeO5S4/D3fi1asBGouL2L14HsbiQow71wOg65GNLj2PpDGX&#10;oUvL6ZIczVUH2PnfdzAUF2EsLqKlzkBoUm/0GbnEDhhHt2Hnd0kOS6uJkm/epWrTSgzFhTQc3E1Q&#10;XDL6tFwi+wwm5dzrUWv8uiRL2bIvKV/1I4biImp3b8UvNBx9Wi769Bx6nH8zWn10l+So3rqGvT/P&#10;x7C9kJqd60GtRtejH/r0XJLOvIKw1L5dkqOpooySb9776ztSSGtDLaHJmejTcogbfDZxg8/ukhxm&#10;UxMl37xD1eZVGLYX0nhoL8HxqejTc4noM4SUs69f9Q4FAAAgAElEQVRFrfHtkix7ly6gvGAJhu2F&#10;1O3ZhlYXhT49B31GPj3+72b8QvRdkqNq00r2Ll3w13lkA2ofDbqe/dCl55E87ipCk3t3SY7G8j2U&#10;fPve3+eRtsZ6wlKy0KXnED/kHGIHjOuSHG3NjZR8/TZVW1ZhLC6iqWIfwQk90KXlEtl3KClnT0Cl&#10;9nF+EKuVqj++pHbzChp2b6D5wE58w6IITOpLUGo/YkZfg09gqPNzuDGVi457EIhRUnjO/B34hysq&#10;/ZulrYUtHz7Ltk+e77BXqPLRkHHZ3fS+6j6nNnp7f/6UolfuoaXe2OE28UPPI+/OF53a6BmKCyl4&#10;9mZqd2/tcJvQ5ExOm/aWUztGzdUHWfvCZA78+UOH2/iFhpNz+2y6j/qn03JYWk1smjud4gWvtF/V&#10;nYBa40uvK6fR6/KpqHyc15fe/eNHrHt9Gq0NtR1ukzDyQnImP482LMJpOao2/UnBzInU79vZ4Ta6&#10;HtnkT3uLsNQ+TsvRVLGPNc/fTnnBTx1u4x8eQ95dLzu1Y2Q2NbFpzpPs+OL1Du8MqTV+ZF7zIOmX&#10;3uXURq/0+/dZ/9YDtDXWd7hN4hmX0u/2WfgF65yWo2L9b6yZOZGGg7s73Eafnkf+tLcITep13GfG&#10;mkZqa5sczmGqLGPXnGnUbvm9w2389LEkX/sMYX1Pd/h4AK01FRRNOU1peTkQKySIHbyuA2Bpa+XX&#10;u8dRvWW1TduH9z6Nkc8vcspVzfo3H6D481dt2lYbFsGoV38lKDZJeI59v/2XldMn2HSLTOWjYdAj&#10;HxA/9DzhOerLdrB08qiTdoaOlPbPyWTf8rTwHJZWE0vvHIOxuMim7SP7DmXErO+ccoIvfHkKJd+8&#10;a9O2Wn00Z7y2jICobsJz7P7xI9bMus2mRyBqjS+DH59H7EDxV5y1uzbzy11jT9oZOlLmhIfpfdV9&#10;wnOYTY0snTyamtJNNm0fnTeKYc98hUol/qnrmlm3smvRhzZtGxAZz+jXljl8EXUipd/NYe1Ld9r0&#10;CETtq2Xo9AVE54066s9FdAAad29kyzOXYjE12LR990seIHb8LQ4dEzyzA+B1YwC2fvSczY0/QPWW&#10;1Wz96DnhOcrXLLG58Qcw1VSxZtatwp8vNleXs/aFyTY/H7Oa21j7wmRMxgqhOaxWCwUzb7G58Qco&#10;/vxVKop+FZoDYNPc6TY3/gCVG1awff6LwnMc+HOhzY0/gMlwiDXP3y48R+OhvRS9NtXm8Q+WtlbW&#10;PD+JljqD0BxWcxsFz020ufEH2PKfGRi2rRGaA2Dje4/b3PgDHFq7lB1fvC48R9myL21u/AGaKvez&#10;9sU7hOdo2F/Kujfut/n8ZGk1UTDrNlob64TmsLa1UvLeVJsbf4Cyz2fSuHeL0Byewqs6AMad69k6&#10;b5bddVvnzfp7jIAIrY11rJk9ye66inXL2fnNO8JyAKx9YTIttdV21Zhqqih85W6hOXZ8/ipVm1fZ&#10;V2S1UjDrNtqaG4XlqN66huIFr9hdt/mDp0/6+MReLXUGRY15ecFP7Fr4gbAcAGtmTzrpreUTaa4u&#10;Z91r04Tm2Db/BQzFhXbVWC1mCmZOxNLWIixH5Ybf2fHVm3bXbZrzJPX7S4TlMBkrKHzpLrvrDvzx&#10;PXuWzBeWA6Bg1kTMJvt+D5sqytjw5gNCc+z/5mWayuz7PbSa2yh9754OH/WdyryqA7B3yaeKRoJa&#10;zW3sXfKpsBwVhb/QVLFPUe2exR8Ly9FSZ+DAnwsV1e5f/l/ammzvZXdm9+J5iuoay/dQuf43YTn2&#10;/DRP0YnA0tbC3qULhOUoL/gJk+GQotrdAr8jzdUHObR2qaLasl8/x9JqEpZltx1Xukeq3b0Vw7a1&#10;wnLsWfyxojtxZlMTZb98LizHgZWL7O68H7ZH4e/biTQc3E3lho6ftZ80x8+fCm14K39X9vNt3LOZ&#10;xj2bheXwFF7VAajeWuCS2mMZttt3FXOkmpJNwl5nsec297GsVouwuyJmU5NDV8+O/D2OZdim/N/Z&#10;sFXcrWbDduV/J+POdcJeV3Qkh6Wt1a7b5CfTUm906OpZ5O9vtQOPFETmMDpwHrH3ToqzcphNTdTt&#10;2SYkR1tdNS1V+xXXN5SuE5LDk3hNB8BqtWDc4cBJdUeRuJOqAw2WuaWZ2t1inlc5kgPAKOgkUlPq&#10;WKdG1MnM0taCcedG5Tm2i7vKdORn29ZYT31ZxyP1uyoHONaBOGo/Dj7HF3UHwGxqpHaX8t8/kXci&#10;HPnet9RW01i+x+U5wLELoiM17Fb+uwuyA3BKU6FyaASuSqVGJeilCYdHAgsaSexoDlEjmlUqx36u&#10;4nKoHcqiUgv8dXL030ZUFjfJ4egbFsLe0FCpwZHviI+4N0Uc/dkK+7dxl++Io+eRrpibwM14TQcA&#10;lQpdeq7icl16rkO/+EfSpyt/j95HG3DC92e7OgeALk35z/NIYal9HHrN0pF/1yOpfDToemYrrtdn&#10;9BeSAxz7t/ENDCE4PtXlOQD0guaM0KfnOfT7p8/IE5LDx8+fsJQs5TnSxeQAx37/tGGRBEQliMnh&#10;4O+fqPNIYLJjk3IFpSj/3fdU3tMBwLGTgKgTCDj2hQ9L7SOsp6rrqfzkrFL7oOspZhY8ta+W0CTl&#10;s6WJamTAsUZc5Mld78B3RJeWI66z6kAOtcaP0JRMITl8g0IJ7tZDcb3QzpkD54JwkTkc+N6L6jQ7&#10;mkPjH0hIYrqQHJogHdpI5Z2aoJR+QnJ4Eq/qACSNuVzRrH5qjR9JYy4XliM693QCYxIV1SaPu1pY&#10;Dt/gMMXTDCeMvBAfbaCwLEnjrlJUFxSfQmTfIeJyjL1C0ax+Pn7+dB99ibAcMflj8I+IU1Sr9Gd5&#10;Ilp9NLEDzlRUm3jGJUJn0UwZP0FRXVhqH/QCG7ykM69SdNtb4x9IgsDZK2MHjkeri1JUmyzwOxIY&#10;k0hUzghFtYljrxA6OVLksIsV1QUlZxOQIObOqifxqg5AaHImva++3+663lffT2iymCsZAE1AEPlT&#10;37D7Ki26/2hSzrlOWA6A3LtesvskotVHk3O7/fMpnEzPf0wksu9Q+4pUKvKnvim0I6JLyyHjMvvn&#10;OMi67hFCuqcJy+EbHEb+Pa/ZXRc3aDxJY68QlgMgb8or+AbZN2d6QGQ82bc+KzRH2sWTCe+Vb1eN&#10;WuNL/r1vCp3JMyJzAGn/nGx3XZ+bnhI6k6c2LIK8KfbPWdFtxD9IGHmhsBwA+VPfQBMQZFdNYEwi&#10;fW+aLjRH3DmTCEy07xGNSuNHyg2z5BgAb5Bx6RS7GprIvkPJuHSK8BxROSPsamj8w2Pof7ftMwfa&#10;ShsWSf97XrP5Sk2t8aP/3a/hFxouNohKRf7UN9CGRdpcknHZ3UKv/g/rfdV9hPe2fUrP6LxR9LxI&#10;/Ax8MaeNJc2O/QZExitqEGzZb+6dL9p8Z8THz5/+U1+3u9PQGZXah/xpb9m1yE/WtY+i6yn+1m7m&#10;tQ/btSZG7MBx9DjvJuE54oecQ+p5N9q8fWBMIrl3vCA8R2BMIjm3z7b5at5HG0D+tLfs7jR0RuWj&#10;IeWG2bYv8qNS0f3i+wnoJuYxhKdxVZdnKhCspDD94jvQBCgqBdpHnCaNuQy1r5aqjX+cZKEXPzIn&#10;PET/Ka84baGX6NzTCUvJoqJo2Uln0eo+6mKGTl+Af7hzpooOSUgjfui5VG9eRbOhvMPtdGk5DJvx&#10;BZF9Bjslh1+InqRxV9FwYNdJ3w3W6qMZcP879Pg/x+fvPhGV2qf9UYBKRdWmP6GjhV58tfS5/nFy&#10;73jeaVcPMfljCOme3v4daWnucLuksVcw5KlP7epA2SMsJYvYAWdStelPTDWVHW4X3iufYTO+JLyX&#10;4jnRT0obFkHS2Cuo37eD+rLiDrcLiEpg0KMfCL8bcpjaR0PyuKuwWsxUb17V4cRAPtoA+t70FP0m&#10;PeeUdQAA4gaOJzg+hYp1y7C0dDzxUvJZ1zD4iU+ctkqirkc20f3PoGrTHyedoCgiaxDDZnx1wrED&#10;zaZWTCbH5jnxDYskYvAFNB/YgenQrg6300Ym0HPSm0QMFLPaqsXUyMFFimdqbQDE3la1gdctBnSk&#10;2l2b2fPTJ38vnwntjZw+PZfEMy4Vetv/ZEzGCkq/m4OhuBBj8TpMNZWEpWShT88jduCZXbaMp6Wt&#10;lV0/fEDVppUYiwup37eT4ISe6NNyiegzmORxVzl11bsjHfhzIQdX/YixuJCakk1o9dHo03LQpeeS&#10;es714u9AdMC4c337Uq/bizAUF6JS+6BPy0WXnkPSmMsJSczokhzN1eWUfv8+xuJCDMVFtNQa0PXo&#10;gy4tl7jBZxHT/4wuyWFpNVG6cC7Vfy0H3HBgFyHd09Cl5RDZdyhJZ17RZbdS96/4hvKCnzBsL6Km&#10;dBMBEbHo0nMJz8gn5ZzrhN+B6IihuJCypZ//9ftbhFrjhy49F31aDkljryA4oWeX5Giq3M+uhXMx&#10;bG//jrQ11BDWIxt9ei7xQ84hKmdkl+Qwm5oo/f59qresxlBcSOPBPYQkZqBPb/+OJI69vMPOkKjV&#10;AA+rXv0dtZtX0Lh7A41l2/ALjyPor+WAo0+/ArVW3B0IT1wMyKs7AG7LahU2ilvmOEW5y89E5nDP&#10;HOA+WezIIboDoDSHEp7YAfC6MQAewR1+aUHmcGfu8jOROY7mLjnAfbLIHG5LdgAkSZIkyQt19EBX&#10;B/QHsgGtE44rduinJEmSJHmuIMD+d9Q7ZwLWA2sA47EfHtsB6AO8DQzCdeMDTsrR+Z4lSZIkyc0E&#10;AzOcuH8r8CdwM/D3qklHPgJ4gPZewmDctPEHsCpYh1uSJEmSvJiK9rZ9De1tPfC/DsAlwNOAuHk7&#10;JUmSJElyJ360t/WXQHsHIBqwf85RSZIkSRJI3uHtMq8B0Wranwk4Z/owSZIkSbKR2Sw7AF0kErhZ&#10;Ddi3uoYkSZIkOYHZfOJptyWnyJcdAEmSJMktyA5Al8pX47oFgSRJkiTpb7ID0KV81ECBq1NIkiRJ&#10;3s3U0iYHAXatAjWw2tUp7CEnApIkSTr1NDW1uDqCt1mtBt4BDK5OYivZQ5QkSTr1yA5AlzIA76iB&#10;A8AUF4eRJEmSvFRbm5nWVrOrY3iTKcCBwzMBzgWeA+QIDEmSJKlL1dY1uzqCt7DQ3tbPhaPXArgP&#10;GAZscUEom8kxAJIkSaeOtjYz9fWyA9AFttDext93+A+OXQ3wDyATSKJ9fgBnLQd8OwqXBHbGGICm&#10;yv0Yi4sA0KXlEBAZL/wYtmitr8G4Yx3NhkPoemYTnNATlUrdeaFgllYTNSUbqSvbQUj3NMJSslD7&#10;OuNrcHJWq4X6vcUYd27APzwGXc9++AaFdnkOgKaKfRiKi1CpfdCn5+AfHuuSHC31RozFRbTUVKHr&#10;2Y/gbj3ABZ1is6mJmpKN1O8vITQxg9CUTNSarl9KxGoxU7dnOzWlGwmIjEfXox+awOAuzwHQeGgv&#10;xuIi1Bo/dGk5+IfHuCRHS50B4/ZCWuqN6NJyCI5LcdF3pBHjzo00HtxFSFIvQpN6o9b4HredsabR&#10;qTmsFjPNB3bQVLYNv/A4AhMzUWvdbkX6BuBVJ+z38HLABcDuYz88tgNw2O6//vvcCYEArkVhB0AU&#10;S1sLWz6Ywa5F/6G5uvyoz/zDY0gedzW9r3mgS05quxd/zJYPn6Fhf+lRf64JDCb2tDPJmTQTrT7a&#10;6Tmqt65h3WtTMe5Yh6Wt9e8/V2t80Wfk0W/STPRpuU7P0Vx1gKJXp1K+ZgltTQ3/+0ClIjg+lcxr&#10;HqT76EucnsPSamLT+0+x+8ePMRkrjvrMPzyWlHOuo/eV01D5dPRrJE7pwrlsmzeLhgO7jvpz38AQ&#10;YgedRb/bnkMbFuH0HJUb/2D9G/dj3Lkeq7nt7z9Xa/wI751Pzu2zCEvt6/QcTRVlFL5yDxWFv9DW&#10;/L8GRKVSE5KYTtb1jxM/5Byn5zCbmtj47yfYu2Q+pprKoz4LiIwn9bwbybjsblRq50+3UvLNu2yb&#10;/wKN5XuO+nPfoFDih5xL9q3P4Pf/7d17fBTlvcfxz+4mu9lcSEJISEggFyCkcguIYFW8FS+96KEq&#10;xdZK0VOsBcVqFa2+7EurtaDivZ626PFSPdUj51h77PFQoCpWBQkQIEBCuCSESxIg5LZJNpvsnj8m&#10;1IC57Mw8m8myv/frlVf+mWfzfTLPzPPszDPPJCSHPMfR4nVs+/39NOwrIeD/8r6+PdpFylnTKbxt&#10;OUNyvgaA19tBS0toJv95jx3kwBu/pLH0M/zt3a4w2Oy4R4xl5Jz7SJx0SUj+tgHNwH0D/Uetup5e&#10;DRgaHn/77T2mR9YN+0rYuGwBDftK+twuMW8C59y7gsS8Cab+Xm+8DcfZ8sxiDv3jL31u50pMYcri&#10;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&#10;" id="image1" - x="87.495079" - y="85.822609" /><image + x="87.604019" + y="86.295723" /><image width="8.6626749" height="8.6626749" preserveAspectRatio="none"

@@ -390,9 +370,9 @@ sodipodi:role="line"

id="tspan2" style="stroke-width:0.9" x="122.01137" - y="30.592821"></tspan></text><path + y="30.592821" /></text><path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#ArrowTriangleStylized)" - d="m 114.75405,50.175384 0.10588,12.066228" + d="m 114.75405,48.587883 0.10588,12.066228" id="path14" inkscape:connector-type="polyline" inkscape:connector-curvature="0"

@@ -407,13 +387,6 @@ ry="0.93935418" /></g><g

inkscape:groupmode="layer" id="layer2" inkscape:label="Layer 2"><rect - style="fill:#9affd2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:0.2, 0.4;stroke-dashoffset:0;paint-order:stroke fill markers" - id="rect1-5-3" - width="36.559639" - height="15.809674" - x="96.366692" - y="64.703583" - ry="0" /><rect style="fill:#9affd2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:0.2, 0.4;stroke-dashoffset:0;paint-order:stroke fill markers" id="rect1-5" width="36.604614"

@@ -421,22 +394,6 @@ height="15.877158"

x="35.467823" y="64.703583" ry="0" /><rect - style="fill:#91e6fe;fill-opacity:0.988235;fill-rule:evenodd;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers" - id="rect1-2" - width="34.694912" - height="8.3827906" - x="97.396133" - y="65.948601" - ry="0" /><text - xml:space="preserve" - style="font-size:5.29167px;line-height:12.3472px;font-family:Akrobat;-inkscape-font-specification:Akrobat;text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;white-space:pre;inline-size:37.1169;display:inline;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke fill markers" - x="63.255154" - y="111.84376" - id="text1-7" - transform="translate(51.780571,-40.099091)"><tspan - x="63.255154" - y="111.84376" - id="tspan16">poulpy-backend</tspan></text><rect style="fill:#9affd2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:0.2, 0.4;stroke-dashoffset:0;paint-order:stroke fill markers" id="rect1-5-1" width="36.582123"

@@ -498,7 +455,46 @@ id="text1"

transform="translate(-9.6712543,-39.845796)"><tspan x="63.255154" y="111.84376" - id="tspan17">poulpy-hal</tspan></text><text + id="tspan7">poulpy-hal</tspan></text><rect + style="fill:#9affd2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:0.2, 0.4;stroke-dashoffset:0;paint-order:stroke fill markers" + id="rect1-5-4" + width="27.517208" + height="19.046377" + x="100.74423" + y="61.080173" + ry="0" /><rect + style="fill:#92e6ff;fill-opacity:0.969231;fill-rule:evenodd;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers" + id="rect1-20-2" + width="24.20676" + height="5.5814385" + x="102.5332" + y="62.53595" + ry="0" /><text + xml:space="preserve" + style="font-size:4.23333px;line-height:9.87776px;font-family:Akrobat;-inkscape-font-specification:Akrobat;text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;white-space:pre;inline-size:23.1195;display:inline;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers" + x="63.255154" + y="111.84376" + id="text1-3" + transform="translate(51.289597,-45.340271)"><tspan + x="63.255154" + y="111.84376" + id="tspan8">poulpy-cpu-ref</tspan></text><rect + style="fill:#92e6ff;fill-opacity:0.969231;fill-rule:evenodd;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers" + id="rect1-20-2-6" + width="24.20676" + height="5.5814385" + x="102.5332" + y="69.17572" + ry="0" /><text + xml:space="preserve" + style="font-size:4.23333px;line-height:9.87776px;font-family:Akrobat;-inkscape-font-specification:Akrobat;text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;white-space:pre;inline-size:24.3904;display:inline;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers" + x="63.255154" + y="111.84376" + id="text1-3-8" + transform="translate(51.289586,-38.700499)"><tspan + x="63.255154" + y="111.84376" + id="tspan9">poulpy-cpu-avx</tspan></text><text xml:space="preserve" style="font-size:4.23333px;line-height:9.87776px;font-family:Akrobat;-inkscape-font-specification:Akrobat;text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;white-space:pre;inline-size:36.8671;display:inline;fill:#2d2d2d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers" x="63.255154"

@@ -507,18 +503,16 @@ id="text1-1"

transform="translate(-9.5719303,-32.862898)"><tspan x="63.255154" y="111.84376" - id="tspan18">ZNX API</tspan></text><text + id="tspan10">ZNX API DEF.</tspan></text><text xml:space="preserve" style="font-size:4.23333px;line-height:9.87776px;font-family:Akrobat;-inkscape-font-specification:Akrobat;text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;white-space:pre;inline-size:36.8671;display:inline;fill:#2d2d2d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers" x="63.255154" y="111.84376" - id="text1-1-0" - transform="translate(51.679143,-32.882948)" - inkscape:transform-center-x="0.6362468" - inkscape:transform-center-y="1.1452442"><tspan + id="text1-1-89" + transform="translate(51.648897,-32.807355)"><tspan x="63.255154" y="111.84376" - id="tspan19">ZNX API</tspan></text><text + id="tspan11">ZNX API IMPL.</tspan></text><text xml:space="preserve" style="font-size:4.23333px;line-height:9.87776px;font-family:Akrobat;-inkscape-font-specification:Akrobat;text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;white-space:pre;inline-size:36.8671;display:inline;fill:#2d2d2d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers" x="63.255154"

@@ -527,7 +521,7 @@ id="text1-1-8"

transform="translate(-10.163182,-54.843723)"><tspan x="63.255154" y="111.84376" - id="tspan20">RLWE API</tspan></text><text + id="tspan12">RLWE API IMPL.</tspan></text><text xml:space="preserve" style="font-size:4.23333px;line-height:9.87776px;font-family:Akrobat;-inkscape-font-specification:Akrobat;text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;white-space:pre;inline-size:36.8671;display:inline;fill:#2d2d2d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers" x="63.255154"

@@ -536,7 +530,7 @@ id="text1-1-8-4"

transform="translate(-9.6181503,-75.873115)"><tspan x="63.255154" y="111.84376" - id="tspan21">SCHEME API</tspan></text><text + id="tspan13">SCHEME API IMPL.</tspan></text><text xml:space="preserve" style="font-size:5.29167px;line-height:12.3472px;font-family:Akrobat;-inkscape-font-specification:Akrobat;text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;white-space:pre;inline-size:23.1195;display:inline;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke fill markers" x="63.255154"

@@ -545,7 +539,7 @@ id="text1-8"

transform="translate(-10.03551,-62.138412)"><tspan x="63.255154" y="111.84376" - id="tspan22">poulpy-core</tspan></text><text + id="tspan14">poulpy-core</tspan></text><text xml:space="preserve" style="font-size:5.29167px;line-height:12.3472px;font-family:Akrobat;-inkscape-font-specification:Akrobat;text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;white-space:pre;inline-size:35.1767;display:inline;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke fill markers" x="63.255154"

@@ -554,7 +548,7 @@ id="text1-8-9"

transform="translate(-9.3743876,-83.103301)"><tspan x="63.255154" y="111.84376" - id="tspan23">poulpy-schemes</tspan></text><path + id="tspan15">poulpy-schemes</tspan></text><path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.264583, 0.264583;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Triangle-1-1-8)" d="M 53.646411,64.703584 V 58.682749" id="path2-3-7-9"
M poulpy-core/README.md → poulpy-core/README.md

@@ -5,14 +5,14 @@

## Getting Started ```rust -use poulpy_backend::cpu_spqlios::FFT64; use poulpy_core::{ - GLWEOperations, SIGMA, + GLWESub, SIGMA, layouts::{ - GLWECiphertext, GLWEPlaintext, GLWESecret, Infos, - prepared::{GLWESecretPrepared, PrepareAlloc}, + Base2K, Degree, GLWE, GLWELayout, GLWEPlaintext, GLWEPlaintextLayout, GLWESecret, LWEInfos, Rank, TorusPrecision, + prepared::GLWESecretPrepared, }, }; +use poulpy_cpu_ref::FFT64Ref; use poulpy_hal::{ api::{ModuleNew, ScratchOwnedAlloc, ScratchOwnedBorrow, VecZnxFillUniform}, layouts::{Module, ScratchOwned},

@@ -23,27 +23,36 @@ fn main() {

// Ring degree let log_n: usize = 10; - let n: usize = 1<<log_n; + let n: Degree = Degree(1 << log_n); // Base-2-k (implicit digit decomposition) - let base2k: usize = 14; + let base2k: Base2K = Base2K(14); // Ciphertext Torus precision (equivalent to ciphertext modulus) - let k_ct: usize = 27; + let k_ct: TorusPrecision = TorusPrecision(27); // Plaintext Torus precision (equivament to plaintext modulus) - let k_pt: usize = base2k; + let k_pt: TorusPrecision = TorusPrecision(base2k.into()); // GLWE rank - let rank: usize = 1; + let rank: Rank = Rank(1); // Instantiate Module (DFT Tables) - let module: Module<FFT64> = Module::<FFT64>::new(n as u64); + let module: Module<FFT64Ref> = Module::<FFT64Ref>::new(n.0 as u64); + + let glwe_ct_infos: GLWELayout = GLWELayout { + n, + base2k, + k: k_ct, + rank, + }; + + let glwe_pt_infos: GLWEPlaintextLayout = GLWEPlaintextLayout { n, base2k, k: k_pt }; // Allocates ciphertext & plaintexts - let mut ct: GLWECiphertext<Vec<u8>> = GLWECiphertext::alloc(n, base2k, k_ct, rank); - let mut pt_want: GLWEPlaintext<Vec<u8>> = GLWEPlaintext::alloc(n, base2k, k_pt); - let mut pt_have: GLWEPlaintext<Vec<u8>> = GLWEPlaintext::alloc(n, base2k, k_pt); + let mut ct: GLWE<Vec<u8>> = GLWE::alloc_from_infos(&glwe_ct_infos); + let mut pt_want: GLWEPlaintext<Vec<u8>> = GLWEPlaintext::alloc_from_infos(&glwe_pt_infos); + let mut pt_have: GLWEPlaintext<Vec<u8>> = GLWEPlaintext::alloc_from_infos(&glwe_pt_infos); // CPRNG let mut source_xs: Source = Source::new([0u8; 32]);

@@ -51,20 +60,20 @@ let mut source_xe: Source = Source::new([1u8; 32]);

let mut source_xa: Source = Source::new([2u8; 32]); // Scratch space - let mut scratch: ScratchOwned<FFT64> = ScratchOwned::alloc( - GLWECiphertext::encrypt_sk_tmp_bytes(&module, n, base2k, ct.k()) - | GLWECiphertext::decrypt_tmp_bytes(&module, n, base2k, ct.k()), + let mut scratch: ScratchOwned<FFT64Ref> = ScratchOwned::alloc( + GLWE::encrypt_sk_tmp_bytes(&module, &glwe_ct_infos) | GLWE::decrypt_tmp_bytes(&module, &glwe_ct_infos), ); // Generate secret-key - let mut sk: GLWESecret<Vec<u8>> = GLWESecret::alloc(n, rank); + let mut sk: GLWESecret<Vec<u8>> = GLWESecret::alloc_from_infos(&glwe_ct_infos); sk.fill_ternary_prob(0.5, &mut source_xs); // Backend-prepared secret - let sk_prepared: GLWESecretPrepared<Vec<u8>, FFT64> = sk.prepare_alloc(&module, scratch.borrow()); + let mut sk_prepared: GLWESecretPrepared<Vec<u8>, FFT64Ref> = GLWESecretPrepared::alloc(&module, rank); + sk_prepared.prepare(&module, &sk); // Uniform plaintext - module.vec_znx_fill_uniform(base2k, &mut pt_want.data, 0, k_pt, &mut source_xa); + module.vec_znx_fill_uniform(base2k.into(), &mut pt_want.data, 0, &mut source_xa); // Encryption ct.encrypt_sk(

@@ -80,10 +89,10 @@ // Decryption

ct.decrypt(&module, &mut pt_have, &sk_prepared, scratch.borrow()); // Diff between pt - Dec(Enc(pt)) - pt_want.sub_inplace_ab(&module, &pt_have); + module.glwe_sub_inplace(&mut pt_want, &pt_have); // Ideal vs. actual noise - let noise_have: f64 = pt_want.data.std(base2k, 0) * (ct.k() as f64).exp2(); + let noise_have: f64 = pt_want.data.stats(base2k.into(), 0).std() * (ct.k().as_u32() as f64).exp2(); let noise_want: f64 = SIGMA; // Check

@@ -169,4 +178,4 @@ ---

## Tests -A fully generic test suite is available in [`src/tests/generics`](./src/tests/generics).+A fully generic test suite is available in [`src/tests/test_suite`](./src/tests/test_suite).
M poulpy-cpu-avx/README.md → poulpy-cpu-avx/README.md

@@ -1,6 +1,6 @@

-# 🐙 Poulpy-Backend +# 🐙 Poulpy-CPU-REF -**Poulpy-Backend-CPU-AVX** is a Rust crate that provides concrete implementations of **`poulpy-hal`**. This crate is used to instantiate projects implemented with **`poulpy-hal`**, **`poulpy-core`** and/or **`poulpy-schemes`**. +**Poulpy-Backend-CPU-AVX** is a Rust crate that provides an AVX accelerated CPU implementation of **`poulpy-hal`**. This crate is used to instantiate projects implemented with **`poulpy-hal`**, **`poulpy-core`** and/or **`poulpy-schemes`**. ## Example

@@ -14,5 +14,5 @@ ```

## Contributors -To add a backend, implement the open extension traits from **`poulpy-hal/oep`** for a struct that implements the `Backend` trait. +To add your own backend, implement the open extension traits from **`poulpy-hal/oep`** for a struct that implements the `Backend` trait. This will automatically make your backend compatible with the API of **`poulpy-hal`**, **`poulpy-core`** and **`poulpy-schemes`**.
M poulpy-cpu-ref/README.md → poulpy-cpu-ref/README.md

@@ -1,38 +1,18 @@

-# 🐙 Poulpy-Backend - -**Poulpy-Backend** is a Rust crate that provides concrete implementations of **`poulpy-hal`**. This crate is used to instantiate projects implemented with **`poulpy-hal`**, **`poulpy-core`** and/or **`poulpy-schemes`**. - -## Backends - -### cpu-spqlios - -This module provides a CPU AVX2 accelerated backend through C bindings over [**spqlios-arithmetic**](https://github.com/tfhe/spqlios-arithmetic). - -- Currently supported: `FFT64` backend -- Planned: `NTT120` backend - -### Build Notes - -This backend is built and compiled automatically and has been tested on wsl/ubuntu. - -- `cmake` is invoked automatically by the build script (`build.rs`) when compiling the crate. -- No manual setup is required beyond having a standard Rust toolchain. -- Build options can be changed in `/build/cpu_spqlios.rs` -- Automatic build of cpu-spqlios/spqlios-arithmetic can be disabled in `build.rs`. +# 🐙 Poulpy-CPU-AVX -Spqlios-arithmetic is windows/mac compatible but building for those platforms is slightly different (see [spqlios-arithmetic/wiki/build](https://github.com/tfhe/spqlios-arithmetic/wiki/build)) and has not been tested in Poulpy. +**Poulpy-Backend-CPU-AVX** is a Rust crate that provides the reference CPU implementation of **`poulpy-hal`**. This crate is used to instantiate projects implemented with **`poulpy-hal`**, **`poulpy-core`** and/or **`poulpy-schemes`**. -### Example +## Example ```rust -use poulpy_backend::cpu_spqlios::FFT64; +use poulpy_backend_cpu_ref::FFT64Ref; use poulpy_hal::{api::ModuleNew, layouts::Module}; let log_n: usize = 10; -let module = Module<FFT64> = Module<FFT64>::new(1<<log_n); +let module = Module<FFT64Ref> = Module<FFT64Ref>::new(1<<log_n); ``` ## Contributors -To add a backend, implement the open extension traits from **`poulpy-hal/oep`** for a struct that implements the `Backend` trait. +To add your own backend, implement the open extension traits from **`poulpy-hal/oep`** for a struct that implements the `Backend` trait. This will automatically make your backend compatible with the API of **`poulpy-hal`**, **`poulpy-core`** and **`poulpy-schemes`**.
M poulpy-hal/README.md → poulpy-hal/README.md

@@ -82,6 +82,6 @@ C[ScalarZnx] -->|prepare|D[SvpPPol]-->E

E{SvpApply}-->VecZnxDft-->|IDFT|VecZnxBig-->|Normalize|VecZnx ``` -## Testing +## Tests -A full generic and backend agnostic testing suit for the layouts and public API is planned. This will allow to test the correctness of any backend easily.+A fully generic cross-backend test suite is available in [`src/test_suite`](./src/test_suite).
M poulpy-schemes/README.md → poulpy-schemes/README.md

@@ -8,5 +8,8 @@ See [./examples/circuit_bootstrapping.rs](./examples/circuit_bootstrapping.rs)

## Available Schemes -- TFHE/FHEW: under construction. Blind rotation & circuit bootstrapping implemented. -- CKKS: planned+- **BIN FHE**: + - **bdd_arithmetic**: high level API for u32 arithmetic (u8 to u256 planned) using binary decision circuits. Also provides API for blind retrieval, blind rotation (using encpypted integers) and blind selection. + - **blind_rotation**: API for blind rotation (LWE(m) -> GLWE(X^m)) + - **circuit_bootstrapping**: API for circuit bootstrapping (LWE(m) -> GGSW(m) or GGSW(X^m)). +- **CKKS**: planned