From 35e46aca69450eba2f422d433a9ed9e70210e4c3 Mon Sep 17 00:00:00 2001 From: aquint-zama Date: Wed, 1 Jun 2022 15:41:37 +0200 Subject: [PATCH] docs: re-write documentation --- Makefile | 4 +- README.md | 101 +++---- concrete/numpy/compilation/server.py | 2 +- docs/README.md | 26 ++ docs/SUMMARY.md | 38 ++- .../forty_two_minus_x_plus_y_times_two.png | Bin 19960 -> 0 bytes .../compilation-pipeline/frontend_flow.svg | 4 - .../compilation-pipeline/two_x_plus_three.png | Bin 17631 -> 22946 bytes .../artifacts/auto/1.initial.graph.png | Bin 7054 -> 8607 bytes .../artifacts/auto/2.final.graph.png | Bin 7054 -> 8607 bytes .../artifacts/manual/1.initial.graph.png | Bin 33573 -> 43554 bytes .../manual/2.after-float-fuse-0.graph.png | Bin 17280 -> 0 bytes .../artifacts/manual/2.after-fusing.graph.png | Bin 0 -> 21778 bytes .../artifacts/manual/3.final.graph.png | Bin 17280 -> 21778 bytes .../table-lookup/1.initial.graph.png | Bin 36616 -> 34195 bytes .../tutorials/table-lookup/3.final.graph.png | Bin 16902 -> 22159 bytes docs/_static/zama_home_docs.jpeg | Bin 0 -> 85177 bytes docs/_static/zama_support_docs.jpeg | Bin 0 -> 77382 bytes docs/basics/compatibility.md | 192 +++++++++++++ docs/basics/compiling_and_executing.md | 103 ------- docs/basics/installing.md | 63 ++--- docs/basics/numpy_support.md | 148 ---------- docs/basics/quick_start.md | 86 ++++++ docs/dev/compilation.md | 221 ++------------- docs/dev/contributing.md | 56 ++-- docs/dev/docker.md | 51 ++-- docs/dev/float-fusing.md | 86 ------ docs/dev/fusing.md | 37 +++ docs/dev/mlir.md | 20 +- docs/dev/project_setup.md | 144 +++------- docs/dev/releasing.md | 18 +- docs/dev/terminology_and_structure.md | 40 ++- docs/explanation/fhe_and_framework_limits.md | 33 --- docs/explanation/future_features.md | 12 - docs/explanation/what_is_fhe.md | 12 - docs/howto/configure.md | 92 ++++++ docs/howto/debug.md | 266 ++++++++++++++++++ docs/howto/debug_support_submit_issues.md | 76 ----- docs/howto/deploy.md | 132 +++++++++ docs/howto/printing_and_drawing.md | 63 ----- docs/howto/reduce_needed_precision.md | 90 ------ docs/index.rst | 10 - docs/intro.md | 31 -- docs/tutorial/compilation_artifacts.md | 247 ---------------- docs/tutorial/decorator.md | 20 ++ docs/tutorial/extensions.md | 153 ++++++++++ docs/tutorial/floating_points.md | 79 ++++++ docs/tutorial/formatting_and_drawing.md | 64 +++++ docs/tutorial/indexing.md | 95 ------- docs/tutorial/table_lookup.md | 215 +++++++------- docs/tutorial/working_with_floating_points.md | 36 --- pyproject.toml | 2 +- script/doc_utils/gen_supported_ufuncs.py | 10 +- 53 files changed, 1505 insertions(+), 1673 deletions(-) create mode 100644 docs/README.md delete mode 100644 docs/_static/compilation-pipeline/forty_two_minus_x_plus_y_times_two.png delete mode 100644 docs/_static/compilation-pipeline/frontend_flow.svg delete mode 100644 docs/_static/tutorials/artifacts/manual/2.after-float-fuse-0.graph.png create mode 100644 docs/_static/tutorials/artifacts/manual/2.after-fusing.graph.png create mode 100644 docs/_static/zama_home_docs.jpeg create mode 100644 docs/_static/zama_support_docs.jpeg create mode 100644 docs/basics/compatibility.md delete mode 100644 docs/basics/compiling_and_executing.md delete mode 100644 docs/basics/numpy_support.md create mode 100644 docs/basics/quick_start.md delete mode 100644 docs/dev/float-fusing.md create mode 100644 docs/dev/fusing.md delete mode 100644 docs/explanation/fhe_and_framework_limits.md delete mode 100644 docs/explanation/future_features.md delete mode 100644 docs/explanation/what_is_fhe.md create mode 100644 docs/howto/configure.md create mode 100644 docs/howto/debug.md delete mode 100644 docs/howto/debug_support_submit_issues.md create mode 100644 docs/howto/deploy.md delete mode 100644 docs/howto/printing_and_drawing.md delete mode 100644 docs/howto/reduce_needed_precision.md delete mode 100644 docs/index.rst delete mode 100644 docs/intro.md delete mode 100644 docs/tutorial/compilation_artifacts.md create mode 100644 docs/tutorial/decorator.md create mode 100644 docs/tutorial/extensions.md create mode 100644 docs/tutorial/floating_points.md create mode 100644 docs/tutorial/formatting_and_drawing.md delete mode 100644 docs/tutorial/indexing.md delete mode 100644 docs/tutorial/working_with_floating_points.md diff --git a/Makefile b/Makefile index de76ba7ea..6f73b877f 100644 --- a/Makefile +++ b/Makefile @@ -267,11 +267,11 @@ todo: .PHONY: supported_functions # Update docs with supported functions supported_functions: - poetry run python script/doc_utils/gen_supported_ufuncs.py docs/basics/numpy_support.md + poetry run python script/doc_utils/gen_supported_ufuncs.py docs/basics/compatibility.md .PHONY: check_supported_functions # Check supported functions (for the doc) check_supported_functions: - poetry run python script/doc_utils/gen_supported_ufuncs.py docs/basics/numpy_support.md --check + poetry run python script/doc_utils/gen_supported_ufuncs.py docs/basics/compatibility.md --check .PHONY: licenses # Generate the list of licenses of dependencies licenses: diff --git a/README.md b/README.md index 919bc8875..a09642079 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,66 @@ -# Concrete Numpy +
+

Concrete Numpy

+
-An open-source set of tools which aims to simplify the use of fully homomorphic encryption (FHE) for data scientists. +

+ + + + + + + + + + + + + + + + + + + + + + + + +

-With Concrete Numpy, data scientists can implement machine learning models using a subset of numpy that compiles to FHE. They will be able to train models with popular machine learning libraries and then convert the prediction functions of these models to FHE with concrete-numpy. +## Quick tour - +- [Introduction](#Introduction) +- [Installation](#Installation) +- [Getting started](#getting-started) +- [License](#license) -- [concrete-numpy](#concrete-numpy) - - [Links](#links) - - [For end users](#for-end-users) - - [Installation](#Installation) - - [A simple example](#a-simple-example-numpy-addition-in-fhe) - - [For developers](#for-developers) - - [Project setup](#project-setup) - - [Documenting](#documenting) - - [Developing](#developing) - - [Contributing](#contributing) - - [License](#license) +## Introduction - -# Links +**Concrete Numpy** is an open-source library which simplifies the use of fully homomorphic encryption (FHE). -- [documentation](https://docs.zama.ai/concrete-numpy/main/) -- [community website](https://community.zama.ai/c/concrete-numpy/7) -- [machine learning examples](https://docs.zama.ai/concrete-numpy/main/user/advanced_examples/index.html) -# For end users +FHE is a powerful cryptographic tool, which allows computation to be performed directly on encrypted data without needing to decrypt it first. + +With FHE, you can build services that preserve the privacy of the users. FHE is also great against data breaches as everything is done on encrypted data. Even if the server is compromised, in the end no sensitive data is leaked. ## Installation -The preferred way to use concrete-numpy is through docker. You can get the concrete-numpy docker image by pulling the latest docker image: +The preferred way to install concrete-numpy is through PyPI. To install Concrete Numpy from PyPi, run the following: -`docker pull zamafhe/concrete-numpy:latest` +```shell +pip install concrete-numpy +``` -To install Concrete Numpy from PyPi, run the following: +You can get the concrete-numpy docker image by pulling the latest docker image: -`pip install concrete-numpy` +```shell +docker pull zamafhe/concrete-numpy:v0.6.0 +``` -You can find more detailed installation instructions in [installing.md](docs/user/basics/installing.md) +You can find more detailed installation instructions in [installing.md](docs/basics/installing.md) - -## A simple example +## Getting started ```python import concrete.numpy as cnp @@ -59,7 +80,7 @@ for example in examples: print(f"Evaluation of {' + '.join(map(str, example))} homomorphically = {result}") ``` -if you have a function object that you cannot decorate, you can use the explicit compiler API instead +if you have a function object that you cannot decorate, you can use the explicit `Compiler` API instead ```python import concrete.numpy as cnp @@ -79,26 +100,6 @@ for example in examples: print(f"Evaluation of {' + '.join(map(str, example))} homomorphically = {result}") ``` -# For developers - -### Project setup - -Installation steps are described in [project_setup.md](docs/dev/howto/project_setup.md). -Information about how to use Docker for development are available in [docker.md](docs/dev/howto/docker.md). - -### Documenting - -Some information about how to build the documentation of `concrete-numpy` are available in [documenting.md](docs/dev/howto/documenting.md). Notably, our documentation is pushed to [https://docs.zama.ai/concrete-numpy/](https://docs.zama.ai/concrete-numpy/). - -### Developing - -Some information about our terminology and the infrastructure of `concrete-numpy` are available in [terminology_and_structure.md](docs/dev/explanation/terminology_and_structure.md). An in-depth look at what is done in `concrete-numpy` is available in [compilation.md](docs/dev/explanation/compilation.md). - -### Contributing - -Information about how to contribute are available in [contributing.md](docs/dev/howto/contributing.md). - - -# License +## License This software is distributed under the BSD-3-Clause-Clear license. If you have any questions, please contact us at hello@zama.ai. diff --git a/concrete/numpy/compilation/server.py b/concrete/numpy/compilation/server.py index f9f7ca1cd..12dfcb9fa 100644 --- a/concrete/numpy/compilation/server.py +++ b/concrete/numpy/compilation/server.py @@ -27,7 +27,7 @@ from .specs import ClientSpecs class Server: """ - Client class, which can be used to perform homomorphic computation. + Server class, which can be used to perform homomorphic computation. """ client_specs: ClientSpecs diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..17e8c5985 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,26 @@ +# Introduction + +[⭐️ Star the repo on Github](https://github.com/zama-ai/concrete-numpy) | 🗣 [Community support forum](https://community.zama.ai/c/concrete-numpy) | 📁 [Contribute to the project](dev/contributing.md) + +## Welcome to Concrete Numpy! + +![](\_static/zama\_home\_docs.jpeg) + +**Concrete Numpy** is an open-source library which simplifies the use of fully homomorphic encryption (FHE). + +FHE is a powerful cryptographic tool, which allows computation to be performed directly on encrypted data without needing to decrypt it first. + +With FHE, you can build services that preserve privacy for all users. FHE is also great against data breaches as everything is done on encrypted data. Even if the server is compromised, in the end no sensitive data is leaked. + +## Organization of this documentation + +This documentation is split into several sections: + +* **Getting started** section to give you the basics +* **Tutorials** section to give you some essential examples on various features of the library +* **How to** section to help you perform specific tasks +* **Developer** section to explain the inner workings of the library and everything related to contributing to the project + +## Looking for support? Join our community! + +![](\_static/zama\_support\_docs.jpeg) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 0514c2811..45577f40b 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -1,39 +1,33 @@ -# User Guide +# Table of contents -* [What is Concrete Numpy?](intro.md) +* [Introduction](README.md) ## Getting Started * [Installation](basics/installing.md) -* [Compiling and Executing your first Numpy Function](basics/compiling_and_executing.md) -* [List of supported Numpy operations](basics/numpy_support.md) +* [Quick start](basics/quick\_start.md) +* [Compatibility](basics/compatibility.md) ## Tutorials -* [Table lookup](tutorial/table_lookup.md) -* [Working with floating points](tutorial/working_with_floating_points.md) -* [Indexing](tutorial/indexing.md) -* [Compilation artifacts](tutorial/compilation_artifacts.md) +* [Decorator](tutorial/decorator.md) +* [Extensions](tutorial/extensions.md) +* [Table Lookups](tutorial/table\_lookup.md) +* [Floating Points](tutorial/floating\_points.md) +* [Format and Draw](tutorial/formatting\_and\_drawing.md) ## How To -* [Printing and drawing](howto/printing_and_drawing.md) -* [Reduce needed precision](howto/reduce_needed_precision.md) -* [Debug](howto/debug_support_submit_issues.md) - -## Explanations - -* [What is FHE?](explanation/what_is_fhe.md) -* [Framework limits](explanation/fhe_and_framework_limits.md) -* [Future features](explanation/future_features.md) +* [Configure](howto/configure.md) +* [Debug](howto/debug.md) +* [Deploy](howto/deploy.md) ## Developer -* [Setup the project](dev/project_setup.md) -* [Use Docker](dev/docker.md) -* [Create a release](dev/releasing.md) +* [Project Setup](dev/project\_setup.md) +* [Docker Setup](dev/docker.md) * [Contribute](dev/contributing.md) +* [Terminology and Structure](dev/terminology\_and\_structure.md) * [Compilation](dev/compilation.md) -* [Terminology and structure](dev/terminology_and_structure.md) -* [Float fusing](dev/float-fusing.md) +* [Fusing](dev/fusing.md) * [MLIR](dev/mlir.md) diff --git a/docs/_static/compilation-pipeline/forty_two_minus_x_plus_y_times_two.png b/docs/_static/compilation-pipeline/forty_two_minus_x_plus_y_times_two.png deleted file mode 100644 index 2ec2a408e1bb91ee98fcff661142b77ad7468dbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19960 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 - - -
Input Program
NumPy function
Input Program...
Tracing
Tracing
Data
Data
Algorithm/Function/Transform
Algorithm/Function/Transform
Operator DAG:
"Base Graph"
Operator DAG:...
Topological transform
Topological transform
Operator DAG:
"Candidate Graph"
Operator DAG:...
Constraints check
Constraints check
Input/Intermediate/Output values: 7b unsigned int
Constants: 7+1 = 8b signless int
Input/Intermediate/Output values: 7b unsigned int...
UI/UX
UI/UX
Error Message + Debug Infos
Error Message + Debug Infos
Bounds Measurement
Bounds Measurement
Dataset + Evaluation
Dataset + Evaluation
Operator DAG + Width:
"Compilable Graph"
Operator DAG + Width:...
MLIR Lowering
MLIR Lowering
MLIR
MLIR
Compiler "Backend"
Compiler "Backend"
Input/Intermediate/Output values: unsigned int
Constants: signless int
Input/Intermediate/Output values: unsigned int...
Error Message + Debug Infos
Error Message + Debug Infos
Executable FHE program
Executable FHE program
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/docs/_static/compilation-pipeline/two_x_plus_three.png b/docs/_static/compilation-pipeline/two_x_plus_three.png index 0ccae9c4ef7b4752fa025eeff56036eedb09c3de..61dc8ad49adb2d7f9484f82625db256d3d9dd8b0 100644 GIT binary patch literal 22946 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 P%LH0#a9E{^b=dy^JSi9c literal 17631 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 IW&Gj)0a%L|V*mgE diff --git a/docs/_static/tutorials/artifacts/auto/1.initial.graph.png b/docs/_static/tutorials/artifacts/auto/1.initial.graph.png index 50495286b6ec941da79074e70988da1ac030105f..462f2093c3a7bcebb1363bc0fed6d85e3e85f06a 100644 GIT binary patch literal 8607 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 Hva&-dl7 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 literal 33573 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
EfU0da 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
EfU0da zRS}Mim~SB)3k%Iup*&5{HmLmU-c~0?&;|+v^yJ>~=1%-FlB+RTWFTEFNuxjtdKUo1 z0x0#$!z%zu01lJCFhAjX0|pkt3=W71pQJ`vvF_Y?4>~2%`obdTQSEl3&!pJf-$zCn zM718MVbL<74h{~>P-6`MZl^rXw+?Mks~)2kgvG{oK!=lKf(kNziP?Ar1lNR;dSMpr zvu8+$;0ZOg+8e$-5JN%GFt-UddjOiV^@5mku6irHG-o89QP#FJNnrc}KzRM^bfG(iat?Rkm7kyg2IK3v8O`(O!T)1=(3KQ|UiZHZfRLg) ziiAj$fPkPCuwfjUUW3~nY^Ech;VY!8%Wc0d0_*Y+Y|`Tn`6D3+I?$NN_&pN7eIq(N zg;|~K#9vEGOQIqoH-U)2wvEv|f35M01+@Sk3u$3IdzLxyJ(D}}E@XU7ZS5`?8C_l3 z+I%$~`pD&lhSbK!1~l=^p^vpSHAXWvT;P6&R3++AfM8i@yCQS+Z(7>UjupJ+?Eb%x zp@#vxSR57#2A8lwn#q9nvIJNegcVc)(pJYrDA1?-D_lr_pf`z{l2Xtec&qwD0v9gi zI{{eMX6yN3r+>hY9R}UCSJ32;YP^Dif`qhmHhX(YcJ_0qykPx+fb6ZEuR`%vKmO~d zaWiEKv9xT}D`%x`%sA5Ajav(aAivF$U!Tx|)dKvo~LNh!v zGHs?16B9Fk;yy^D&Y(xAm6{L$MzjqMDw=;_^`|pbY&K%GnQOWQRe;lW8S?xNQsbUB z=uP0#BP9MMxOQ4NBtc&q3F+AX;|*!)9q7*D#W={*xy^JD(UiU^zkW&N_Qd>;r5XEL zdH8Ct8zoWZ6WDexwd7zrCL|^z%e3Q+^HU19-nhAv2ksP&V;FotWF^fyd zKK+msYfEyPzXJeQj`94vlvyu$+o~l-_ksx-zxvJIHHtt(`u$*4^h8ign=yzgd;#AC zWH`wmuVb609cRr=x$xqQ@DcCM4%XbDbSAuV?6DBj;$lYg`ABL}@evv!U^+P2N-0mu z(j-R^0>)@CX#na<{g`^tO()RMK|mqOR>_B}eK9IxL&(`=R906PgI=N`ZEXZI6~DL2 zXM4(LJ+ePAe;vF1W&(kPQV>~Te_z)!w$NrKfJV~~4II?b7j z2tY9Fd0k6?;UE>sj*vr3MB**7{*5S*1$D=Buo(7`!4RP|a4jF3XictL+`I6h=)xN(F9N1rQ+`pn*W%1Bf6{N}5J&;>f^shknKfy04vP9R4x&FX{fA zpHUFV$wj!YBA|tEUkd1y6$@Wpae@E|4R%&oq`YoDrwD#S6TU1@BdCkR!yeT3&70%J zpyIMTSILX=s}G-(Lt_Ho0O$krIt8UsG|fm=7<4#i&`gP$-g)INNtgr*v!Ni6?a*Cv z9%#_T%@{KJBcWn}P`Nf%NQG3>_oOq~M9H$y5K=4+MHPOFo%e)x#`HqpGZCGDLTNB( zna-Jjf|MGda&*NSt8^em)GGT8e2e2v-jPL-M6Gcz!S6zDv z#aI_St;bAEatK{;39xe%6cot@K!n%*^X;WBh*+f_I-s_p-??+I*5we7CQ@>`4k{8# z0Mwr0jMvqA;A_G-gDT{`vh!=;D9EU0gljy(Zs@UAMLmHWx%mhhF!k(XcaWZM;Oc-7 z;O9PFWsi?EAYh~=Pk({{^8r0B^y3#GZVZzj10}|!^aVRV67Agzr#=?q9q5aiV3N|S zm;6%RK8J1_h5DP*Ga%kj8lZA35#ntHK{xTze*LYs>lT|u<dSsMtB2BusQ+%501 z5q}HY$*G`FBZbbkZAocqn5I#w5-Bk_GX;k?(YWL`K#mYl8;G|S=t&@<>;r^J1t2|O zmP;fz4h78zpju^(uj|H>qoNsitpb}Rsk+l;(y#PtLJ(QVJZ(f2x$I~qCr1s6H=Y9?&}m+KBTcJ3~>H%?J(6=y=`G5A z_9rNw+nx?db3yZgAsI;NA^f|Rh!j>-_}noVD=`R71TR^@Z>bIDGmw27h%i(5$M%>5B{T1jA19 zoUdL5gUUDb^N-64uTf>glxQeIu14h@UwQI*}AjZzvh_$^PtQWCBAxV-tu&D~uT zq!6UI0_tJDaBD<%>l~ihWoQ29Xu3>?@VAKst(M69|2G z?%s9yHgzPH77jHa955Q(ls&)sekVeE&nIe>6 zlBEOEdRAW<7f)yhKIgITJ7~#^cBB!;h~d2!eAyj97UZ0bhIFL~-_?np$JME!a*nE? zfB>=vY~F;IS;4{&f+#0Ofi(sD49y>4?o1|YVr7dp1R^oAL?GV+pjfp96|4pZ?xB4c zlT+*d-O~dK&r7U_+)*HUB4NP6AM1v;KU8(~5~D`2pzknTQ zLPht%;rk7xA6z9Sm`^GG$Q;PKpl^zDB%`TG1{=AU5u=?I#sX;BCzh4N1x6Wo`0s%+ z)j*Xs(e`GnJMo4TDK_YOpmstX{Wu;G9Tpkc48e-zgpi|p(0u}3*JF;&`HCn{M=56m zr9l+E5u&LP%mU;&3z$yfKo%m)x>FkHa*Inv0uvvbB4WallVy?WoP>m2bthfdgPeY& z%^zq5V0gpU3!%fli9&w_v;b7dWR4l9=8?T84xe*SG`)d5K*g;vqch7@HYNOT4hbBf zD!IVMcgPX6mKG6cN1&@HD-;UkrNU0Z0~_}D-cnaKuUPi*ged+ys1gJ=_tY^iAt#%| zD1|{GEb(KNq!J(zAeaKjw+5UPr7z!#V`v2IG2`Q2(;RKj$|8LmNGcM!==8!zdWd1r z%vb?8x>R)B4G1oLY|!4lK-fO`wjaHMNF6$>tT@qJxIuDUw4&Z+%WK3dxPmhg*V_Z* zYKBnF2ufhcnKdFYu^WbOD%O6)FRs_&Jx@n@>(6x?Yo)>JYwrj9rNu%yhsz|dM%6rC z2B~LKZlp3jzZQZ`38?x`wODw|51Nd?_WKyBR9e0=#6fo+zRCxaotDaM=@}tQl-fC{$qw!5C__h9O zTL~Riv1+dZ%d~!YF8%r7TX373!D2dv5()=LM0r=ESZ|RvBR)&Y9X!3i?GsTSC1iPW z``7p*2}Yc;Dk7KJY)UGPcdXuOMzpN{-o0VLjwXzKPPCQ#+W>&|%tQA`Hj zYx6o?rd`%cOhoT5uU`{j)EDEgCeB5U^2VOXJzM4TN~rrgf^#s6V)Gy+{qqk)L@IjF zU0T1|RUFzY#ma1*yCL|TpFY}}TAAGHF>iQwple^v#*lB?-CLie4|4gpZqSJ3(nGwK zXIUEz=};D&nG$Xb-yp&tJFVyc{d~;m@*b;|Foo(FpD%ltPt#Usvv&`iN&2X99qf6V zcA45*HO?P}NJhBPl8_?4F+t_9ki;B5ZpvU_RI;A?kQeS|FY*~rxx5BY12=`{0QQ+6QTmF|#; zYF(QgmVYY^+fwW+WsDbe^7?}CX!(A96P#nG{j5;M^t|$}1!}{&$4-^F@dL>?vLkau z>dn0op&6;)vzpG|M|DvDaXfcq2>qUNm^ZH}DtAE`Mdmv%ENAof+0Kv8&m%stH&QwA2)ZR?asV!t?yBV&aBU|20~ zQ9YXC1obPnzY~Nt+o<`~jg?x|Pnm=}X5}jIgK%hX)gAaM^t}jvkRa5M+1e_eZR5T} znS!Z+SwqZNQsrXA5?|CwEOgYmERIKn*ZA$Xf44ZXwJ;@jxTd}Rl|sVg*VvC5z610{ zL|=zXSsr;(E#}H&%?<3EYBp|Y@3>-2ZBh|>FLoAEp)x(=ugN*>oc_K3;%!~uZ1%-B zMt93y9k~kO%z+163RS&X!i2xx#vVR=aaCKkX=!k)`Nhj;)3F)WawM*WcWigxbBdQv zCy=PL-kkd6<(iI1QOSyK(&>L;uN41LT4l!_!>vt4Yd>O)t&9Wl-gjy#Y&U67_(iB9 z`UwwOo$TA1!Fb!~NAG4_XiqZEZfuj8Xgze;x+TM~aaBBqzf6{q3rEH}6y4-r24W1K z2ODV;u;8i6rm)SE#sXzqL?^x8KsA zqP{kXs3PrCZp**`nTVnT~-|-wm&r* z(yw}VmBkM{az)X<8s+|$b*Ny1ijp54;vF?cjctmc7JuZ-e1GfNPXU}6y+?oFP^Vgc zUzPo>mTq^h6!3YY!5!CWCXeS}ls({rCiK}GVx91M!N6wC3Ep4UXrYr0EAl&45Br`? zcAth76EX7@kVno9;d##}e%8{BVf~Eqt%&mS&F{ERE}!~WqfI;-vX>^}X)-1m_wh4K zJJqw86}ngMW%PCB{W=r9FWkufTMNy3gU+Fm`_sqkeW~bK=86tY#JG-7o7qOkYw~iT z--d)Mk0mw(&p5oi8Nv<<4ig&}XwXkJGpl@3d|^p?qzx$Bm1cwuQ_^6ryX6nI|8U4icwAZwVVcJe>o)Fu z3aRZa5u%<=r}qpl_o@&^SEU0Mw+*;W_aX^zpR2yDphdgK^oBTv%9tkr@3%JA8cSn_ zO3q6J;(k8z_X0$zmuY!2u<9tVs}~&HeDXzJ%;-jn&j%e^)W9d~X%^TiOc*`0+U&Q6 zbNNeDzGU^Ph{=O!TcuJSXAsBd@^_rxH;;r_|WqL~>JqK3( z%A-ZaNhAArc{7M02jQk}!t+43&W2Dgc<~VCnl~E_7nlZ>JYE z=~QSDU+6u%@aPrnVk_EtMTe5FaeZA}C)XC>#cZ5?8WDUuE;`eY{L>Og| zV85j};_;mC=E^p`>Eta>H|u0gzdzr1tHdj-HEiyt*Jj>C6%52Yc_W`hsu=YWH3Ds} zGY;_sE5I_pWQ#2i*Fl7M#k|v-Wx5m1|D^tAqwTtCQM!C&J$cV8_O~eV)RF2a{U@n6 zdk)^VVIq95(8!z3=!WlA6iwPJClobkH*6S0@+ka>BJkL@CaiWK;ed9F90mc9!UG&L z7+05BXy11*VwZJ(@j2`ujCo08;YRmz%)^)~fAa$_qEZfo?M$nhJFO(e#dQV`<3#q8 z6NJGH+2T`HKaXh`en|wQB}I7~X#~N!+`k|j#_(656q0Jy;WxVG?A5T!#9rR{%cm+S zbfYu%g`Yfo_=?2P48lg`YskUA>vuCV&k56C@-xer(VI+nJ7HoTbfq6#m=n}v(RpFA zT?3yC+*I?#xN0}QZTey7cQyX1MOn;MzA{OOZoy5td4=If*UM{h>-f9<6WIa%{#$gB z{sP3@3B_-n|BX;+Rz2(8A5}@h&{i-UvM^?{MY;b^A*mXhuIv13dC?}3=cJg`@z$g` zD3_p)z<3h!kakUN7xPF@92;h_T5QrqpD<2;ULy1D_rP2e`14yB#Xb`WLc>nS>nS61 z7Y6R1fHV(-+c59`MovzxrxA#M=&xV22;}^*!}bhz15jUL9w(;#mENaZY8@fCU|vI) zg*;*fs(osDx-SeLBd?24P*eny=Qi}KAkIfZ6AK2Q3+^yTj4%V(X2gp3;6Yo8ppOwW zS0Q%eH)kco_@o0-7W3o=0zNW-NMFn^nvHMoF6&=G4CSH8?Ww38YoDTVqZ-QyWFloWoc|>?_ASmptfZqG8N<2lTZF zaQ;BuU4>2$CYbZA>U@1~4s#+8yg*k6>TNpsL!U`G@{}h??k6S}rCflHQ1|!UaHj&xx+`G4g|nzWt+p% zyL(<^RrcA#M<6qz3%FgKt|(7>o~=DaLF$d+2?;qCveMG{Ag6%7Aq)@ouV|&*YPF9N z1sz1KaO5QVY^Ci_kdq=|f)8Rb7>3E!Yc1!R{BGbv!zfoyjD^+@Gm3CjrxpCToG-{< zNZ=b9DjQ-y?)zD`(?ju;&_1@vkMp~H8TFUq+&UVWEpU2PTwiHv`t*ELWuNcOXjYo& zkJe*;h93?+VJIy}$z0`1(n7d6d1j<3(x(m!E3zAfQ5xj%Ac%+s`W+D_GiqEQ=fC>? z-N5v88fIHf4n09}L;4%a?feIQ!f-BbBu^{bViJ5xFyj`IT>pJne7f<3u9s&Y3;dew z(mb?Q>YB|;YUz@Z+jfM-7}3|=lIscTZHP{Tz*3RZH%niW%hJ7zP>`2Fz6r*VKfwIg zXELq`(7l;-TLQRQ5Yja%JP)~Pe;{>Gl`%&y^|Bln>xe-7r#7&LU@D8lwq|5>lAwdp z3$AWvJDd7C>vP-s=-nZc=N?*LC;Y_}&tKvw)gq5? z!D-U7qpdEOR{h=GT{>ZzxfNCKk(S}6-MD8f`iGE^tkSNMSu#=K6)J80W@Ltmvd8y; zJxq62CeMrA+sHJAlW%wMX$oNQ6pXM6n9YdgbLR%HT`BZ%N3QL~;-YFkhZRU_Ci&J! zX05%BAd(@f92his#eXX9Eooq^z%rct^@%gARjaU~gaPvRVDIE;lz+kDJMkiB`M{*t zhNY>MJIb&*EG=1d4o&t9WaBgJzZDG$&~EdcekgfH=oO*OWe5g3`Y>}SL!de zZ*l5{V!EwmSnNtsowTBBOseg#G2fUkg)01VFX^dq}zR##%yDr+t#m5&q?|*D=X+^LQ$6256sEOFoi+0K!W$D_p@T~^*KM=g;dd6 zS0D4EnD;4-J7Y;|A2cm1W-I=^B6&r)gy3}AN%`H?h5WS;$X^z6541#pRT0%(WjOpZ z5#Xw%L;&;HO}d2vMMcbo7Sr7FZ{I#)Hye9|2!MGkH~~R<@Qqud#?nprKJN z|B0mn&x~3*Uz-7N65uKeIXK+1QeILL0ER7cf@K%Xl3&X%TgHu2ikG$p8-;Pv)m09Iy!r3c`@r(qiz%O)V=^ zrdKTxfMpAS0hM4-A%)=7XwcNuRKRZm&xIfyLCP3hL~Xf`impFv|=lJDT9MTM*1*9Jzqi z?h4lpfkT1d#omM;!^sPrS)_>wC)u8DdJWbdf#NSLER0%IRFsPM(GI5NLO}y=*f<1l z1Q%vL5nf>NfB*4=W_|_+S3tuP57~yw20Q6JyDbjtD7XYWe^`2bOB3KD3fQT910-(7 zfot@DQJZXp<^_9RMc)yI)pEQWzXyX=Yq6V-C!t1b^9@aB_JKc9Em0pay?z`D?2FYU z*Z8xg+4lOYJCIws!rrMyyRB!BtKpsBDJfTP1v;QlG z33>Jx{UpidGw{6t87qu$^Jo%Vu>s?s8Mz_m@(O}XeA@Wd#_uyhNU^c#r=r=Mjo*vx10azA%p9#R z<>Uu|iJLh20ibcM(LOBmhjQ`{1D7WN9P@yT@A7@%G|;4}|IYb_BS!>)GfRQ)|HWXK zl2JjZ1*p57z9NABqj9VGzHOJW)!b3Qor01f=km*fhdjWk0;+9*;SdCXrXR5sG{7B# zQ(gt!MKKtzBw-1jp?ANVsmpMG1;~Aa*`@wZf!gb}RA4KR_bwfPk|F2vOZ8gEvE37x zU52wOj5g2{p9a!34I$JF)ZGTO{$+3@l_V~{kATxR8I#{J7nt%2Cx57!f-nrt&N7`=_gS!VjE%kfwqN4C+Tp5{wJmfzyRRKufcB-3&~9 z8?a_*i^Cn%001E6PGEv820EO?rZ-^YV}R$kd~Zpi%CC2K@%{m5eAKjMcpi}bXQNT1 zWONd00?w@l+FmxUrQOT^fQpNzW8K$`cHxeBKwf2Bca)ArV$>Zt1e|@yQ1cZhFl8sh zg8hZEZA|O{816Z@iXkB#=M8Kk z;=U!OLy-&YZ7=`Kc{Kt*h3jlzoK;xrE zQip9aFnJq8KLA5QO&fsLEdY#dx=6mA?V*zwL23jEfbSEggST#_qgTg$3tPhJtA5}# z(C}@bOW%I2aMRcozmO(ioEaJc0091Kpy6Ji`$PRl0qOU#2fS|U`Huok6{i028unR? zAY?o&SBH^E*T1OgweLf?84SRD{)sF``;~O? zr9S}UfBFuiL;BtjfK5Lp{}o7@He92YT!f(&06Oh|=bnMU3FDgcI;w!WSpZO5@cfeP z$9m=qIP!tChWuX-t;L@5%rhXkrimucv z83dsgs`l-#b2C@Zs=SH|NWF&zJaii$00Jjz7PS7+$oT+(lu}^Q3r5*E$%tb31b|N9 z6nA~;+lh5tH!%$~`3~cn2=F0n-NFY_uS9IdF_-xUDR=ULRP53BNcusrzGKIm{2O;x zBEm5X08rQpF8u)@ZE0l4&R0e6{)L?|A^>1w&!p#NWM_mk`~pCy>o7MAMLCjYv*~EY zN^T_533=Fq@WRVL*SnFcjE==kLE^fFY09n}B1@S|0H}=DcfJF3{*x14kIDDMaWz-_ z^!wQIJxmDbI0Sfp75)En>$KNv0sEY>Wrqe%0o@;%j`t&TFw7`+uGlGeQLE}%)-BjT ze}MM|V@t1&qk!Fh<-|`Y;x7Pnx<3Fs&jA;9MK>66T+KZ4w52^(BG63es^p5)`3{>& z_GT*RC@z+tc3ea6wS6|jj!DxJI3_KCKs`6r1dj97_c1qS>FL+KqR@nL7jxn#-xi&b z7iwnqX4~I@j)RCa4-`6a$2|t5E`iM5NIXW40MJoeX-|5dr>fc$M?T}sX=Rap3Uovl z(Dffpy?vLHK)n!sUr&@IR;IDf;;Stiu;l=@DNJNa%Aq$q9*AxxPX!u)U_Cd|1naa( zf1H!v++n9L6g%MfBJFv1G1G9(W|mIKOCL?!E=B>&Nj?CDMA|Z7+!`64O>jn@00<+1 zj<}A`w1#o|vbso}|_VKrtBpM@F0GLoaSSP-17jp{qdU9qI7a!2%MLZmH(Qmnf zkcXiw-zR{-3h=v9AM9<4W2X|uus>{uR_1Jc;Gb9c~G15{{TYgd%4L% z!J4|1nS1(v4#}t?F$91awVfJ4+ipI%eK`OvsSFFczQhbP=Z%+`K%_G3E!e;#U{bk* zjno{%tF$*-JsvccXzjw5%_Av?=7?>wW}akST9iX=2fF`D)2RDBw&Mz(?fqWG&fJXD zd$dVEIkvx^WJHm80>F$2(yQI^7FV+F_j?Zy>Lg7AoD1kjaO5+0-G0^JatG8-3Ies& zFjGVqplXgx;RA$rU9lTxf?_p%3QCe`!VkvJpmLABuZoBNC{=sk5k$xKP1xtqluBMi z-+(1~5Mz)e5{WGUdZM<{Z_riARj&Jki?=LSY*d{c1#|$~a)G3&JZ!mub^P#*{Zdgo z*-Z9LsZ-+R$%ge%oHUJtbZs)w&3 zPvm)^juC)R^T7TFwrtH5x{>CP^Lm;`5(!4T0O$?jXXwmdMF*g-N^|}l=|6v9q+@ml zI`RQ~0Ue>zaVP1Au_plfLim|Ar>oV0&v*puwQHXl1x|(=#i2O?a}8}IDOWRB@_586 zM?sR%NC7Yqguib!UG3&800`BHPMBl=7MBq}w6cHQfgMT@!W_klIYmf+s)1G)f9%F3G6p-3%nf4^e|adZ0ZtaO^1ZQvjM(bqJj@vPfXRz65V@hcN z&wgRj_{L+a7m-BDl&qtWmV_I^_&ljx(N&ra@*)f$pAOSz0By_IPx$$JgwL-&FwK8= zyR5>1v;EE+iRAsKce(XU$X^t!jFu)BwH}7N-j6E6X+$uX5J7C3#3J<4<~~5vG4zpR zNFla2M}*h=*Ef5_d=~DIN0X8XPSdolNKA`W@$BAnBugucNos?3gM|A#>#Xy;^W70| zwqK2q_fU%^!IsC6!c(bhYNy3biFhjd^wNg? z_TsQLhLo?LD?bf^!+DYR4~96Z1Om9MFOoFA>y^;;ncABD9rei3TWo779$d;$@vBDU z2ux=iA*RXD~wiQeO;!^aN4Q-ERqsx?-JwMnLLO+*<5oh7y|Ryv9^U! zv!E&_3hL+H<#Ry3znE%ot@_2LB_9M4aLnRJZWT6?4+~3)%{LZlC?25zJ39Nm+A-*{ zN-5#Bg`AB>E~;~xn#$m{fDf!C)s={Y_cAZ!CqEAwMer?IEBwLKn+OVU((Mlk6dOZS zHb=K-Hdl;`IfBk)e0JmQ?&M@-BfSym*&?2d(U%t%BjTy7th_$` zQi?%B;^VJh_91ttN<>_y&!ey?nC()Kt7YJ=9xoiU<%fxZ4W2~=*I`TBm-%~m?f;0l zS_{n+cs<8$J&g13@^Eyy)w5iq;EliRMvkR8BufFnVh z&*5feO{e8Ttp)$?YTQfs%;aK zAb2TJu$lC9Xw9mundP@tp0{nW6H<>kRznFqA$NYP`qg783~JHw@x@Asl=O^@?-}Qt zoCiBe)qmW5B7`xnEqiCSQ;KefD9wX+J;}pwCtbhA@04~llM8u0ma8*g{vDpv%GY$; z@9%jm`%$jYY`5mkb{d2H%dK@5royD(2b~WPr=X$JPuGZfZkn{Xh23B3Dt9|KuPCOo z>MnfsW<$j?ZRWKZnJiMlzd}X2yD81l)TYV*MG7Bc&@Ihf|C@$q{`6)^~{k!T2TB;#$K{!w+*p{;oUABBUBkc+;RM zWB;?amro9e&qPnC7u0^?_d!smQqNXx$JElQSbpJKsz#aGXoq%!aVA zOg5D2z+V!kqz<6f3q8QWi&vh$1*%2to_?v8APrk`!B^|v77*cN63`{&o; z*we)X;oWnzsA#wf7A#23{`}IlYsI+LSV0ylen}E^^^sh^oEAet z$HLI#P@-I$kD^YF5H2ADY4Sn56hFaS_202U?5A)Uy*W@E-qfL??8Wc(3v%4PC7~Vu zXHJEP{`ON}EjQ_rFeBV4KM)WBNl#C$S2@9V1X8B1Th8U+W=*+n{8m5QNQ|)Cqqm-W z+s2i8T38(}CZ0BJx=(Llet5vc6?#pS#!Ry(=$uksKX1w>6(t>_{35-p*i^z_SM^Pv zY4B_y`NyBAW$vV*_Y8C0k(h(6TE#{Azu0OBRz=^GmvehEwm(XeOE~6Wqo+n_T&=n0 zIw8jELC7*2EF-EYy`HC#63~0@*0e)?R~>Sl5^^Na*FxAdgPGJx_TZt`16#Mpu{C`k z{*%`>w=6d0udlbpL=bxW6i6=)_8)luMxbvt8?=*zT=y(mkdmNGh{L%cRDMB`cMi(vEbUy=vixBo!fp& z)`g}fUPYU0-k5xjFwJ;-oWbXmefw_6yAwXKt-3a_7c0^EYL)Hv%>g_$^E^jSfu0^5 zTpC36z>6gByUs}9zp_IGa*_U>zFg$O)N)Y=ix~275)B=6)Y7u4&jeD;bA1l!KO}c0 z>JNg&w0~);KEKi~wPxH{7J0|t?x8Sv{6R2&bGg;~;&&rvtis?4gPQDY1+Q_LkuDL7 zziJAW@8;IOms_X??7YZSL>YhoY8LkAnZNv2{7p<0PXoX$pmF;k5|Cxcs1*Mn6!yRW z>yJdnTYSvLSz^ANYTbj$8+Obm=YpptEmG>?U8+7}PQ*3ze`TU%mEaOVvO6ZN6g? z4!B@0C@5f5+YbSbd>Zg$dYV)!L|nI0Z>J!N(&MY3*DsCDt*vZv|9X`l*|EStYwT_> z4|BwP6PlctEb9z%sukqrAtx)oYuPmK_W}4g4Y)j7L6>NXF^Xu5G`M#s|1s@$|Apo!>>P$3~~ z@Q=f61)*MLdhqR~&DW;T#}IHjhv|}d)RgSRr<0V*MxZVGt_9zn4pGS~DT$dhD8Who zozb?9wta$JL2ul*260J9hSj(_y!u#LT-PKeAFi#w`W&hPA-~9&BnMV-jSx>JVEO&M zz`=5BDw%-eWW9}=(HDD}tD}`{A=li+&Fn~1^!!s&T3T9RuU|MIkI({DihBRns0N^7 zfR_+RMKWT*vHX?hu7G>@E{cUze(l7qZCw}?z<=LK=wzkU4 zmrUH;CxarDvm*@?lA|r|TVpuWR+FP)0+b3v2^1P;_PtHtI(Xq}-7_&&39Xhu>f8lG3Yu@ZXCB zIYd0+%NPEUOsx6uza{SQ7-k#E0XYj|Ikc62ET{WQxagcon z>HL9C8me}PNl1P*h&;F=0Tks&ugX%PUo*ZxUCL)724va17Se{QW>x)Z=>*&7K@rR=OJYw!K$tdq{ntNYQ+#-gVY1R_KJ({DiV?GSn ztaY`JBWFbBqiGb86QD-qpLrZm9jqP?AS`#1{9-<-?DN4<9zCTPr(YC=#dg;@9ic{B~Csc5s@1$ncz3mmArE1}~=`n%_&Ju&CQ2y0cvqMp)`n zw?sM(RLGrj`(swa_00Bc>bp(w!DYUJly@_lM>yZIVIQMP2mD2ob|`A*auLgmGk|xH zX2)?}(mFqB#SA-Y`YaG|=c!i4-x5H;`G~5I)tfHob_40BO37`b9$t9$3jSlDO)Mc) z6_?^ee~ARKAALP*ktsfUpL#%wJLgUXb6%RChX2jL_M1kOv?_FlKi~8!IuBbq4JavL zqXgX{=Azu_JbMkF@Fvm9j%#(5$U;Ljn(T5Au&DJ0Ld^MiPd6s!O zY-ct-dv&1BGkP8)pb;=;sas&bgR$%5zZAlZkoHC3-{uXzCJQ@}+UiXzZS3v9M+w!(g;@tjwmKY+bhyc;jVuRcbM)s%*B~ z{-WwEacZ-*1hdwhGc7TzR?WA`y%8Bwq=6$mw*7yL2WwV!vioB4q&i=zSeLD0BHTvN z*7es3%|C2KK~2K!!o~^4zsRX{^P02PO7=A>uj6-D&ZibLcDGVd{}zijLVdSa-#KA~ zFw&I7QA8TfABETa4cj1MK4)leEuZ#u7-w=h%N0ky1=bW{3;H~CU3HfDqIzEE}XhZ&L4!Jn6aKf z)==o9bP%GCBitJG^gBwmv17L&#=8#b!Fo~_N+jK{qk5ek!Uy~=(%;-@o=!xgC#z@% z>`&(i!{UDD(TZc?S4I#U3_HoazN54X@%dmIxxE^UIE=4p3t~>oTXahDL%XPl>Mk$t zm=Es@TM6?Z|<9aHL|Bh%@bJ!c%j{->!gY zg-J%g#jrMV6`8y%q1?;9i)I!J#ON_MM~f(9`Iv*;_Q>Kn?E|drFwE^%jdyU~Pm)D{ z{TILRonhpoH)`4Ad#9Tm)iGT-40y(c%Tf4eNzoE!Rzi5)))R8KlqV(rn<(%0EJhpL z0$Sb2rAU5b5}$MDr}@`A7)Pn57WAx6;g#Eia>D*R{`u@~GC5(lY<{zI7x@Wa?%__C zt{`0lg+8uSw~;(cR&V)0?T!elJ|e2rX9=7mza=8?Qh;UfHcsRh9^vShzB0y2@ds!} zB4#Ypxz+1J?2>XH(0EtxDQ`}1MbBYF&bNfg#bXRB9Q|Q+wXf6MjVoxr+z`ngc{S6& z@0IpocM3#R9}^tcJwQ1m8r9%N21~r8m63!TLtKfYi+U3%#7OvTF&bab+umKD8m<De3S0^5RjY)F;LAn3{iWt(j?qWjlUC!8|3USAD7-uW){f=Zr{8J|hrdg_w` zgx`J=rjp9ost@ZT?w#96~L#NBpNxL zR*xNmd{Li+tiulHpI_Mwyk~MT@#%CKHlm4ZF-E+el-&@O5o*zCV;FOFo0C^ z7B>lml@iD`rS30M(Xg=eJ{vXiDn(xxs&aIFzy4TNR;uG++|+C*qI^w2N4bxW#@V2L zzWd$(S3%VEMiiCD=Vd$!itmBP9Ye#(bgnsnrV5dJdV21TLm#*Lu%)cWvUt>wNkzSw zI|6KSbCzo@;I&JhZ)`-N+h)IXU+;=ePkUnkpGPpvwAbD9a=o8?5gQ{6i;doR=55PX zf>@c}_rU4;nR4wYfXCL4T{nMcZZ@tzNSVv|M&G<3V!ofFqRmX6ZP#T~vEnYdBZJ2# z$aexK%hxPay!)$v974VFZhyl<*Rq0<7@>Y=cpXX_|yyO zL}(}!r_q=w4x)36*_i7ypv{|{lQY)te{Rt1La{fI$HdQ{c6;2Fr$iN;mQRf;NXlc0 zu+;2|`~;ye$c1rW<=UmZb_p2zv~+a-S1Y~^L4)8oS=<&-P%AJoGe?hq6gwZ|o3Q3B zDE##4`k-NAp(9X8A%>v9q|K-Oq!-=m&s_W${%_1TyB}OVfRve-mfMayN5fI^7g{}; z07PYAXO9Cw5x&-WNsx%$pc^o^8mhRIl;c1uIieYH>Z1T}^EmvV$D)#a4*aMgeO}$k ziG6D*@jn1HJp5$+E%uK#-(&V;Z&U`CsFONglbj3`WT{BoJkhn(DHfcP{#M-~Zx=N0 z?crqOk1#{`yK8q)*RTi#U7v`rgzk(G>VA?({R^ygIWDU;r6i5DaQoJAKZS|8SWwbZ z*o*UVzoOLoQ{dGRD?h)^iyUFi&xQ?(FS2Y#U4oU#NOe>Y?r5-Hc{JW5A zj#R)!nNg!-I&_9EQGD|Pl-PA>8o0Q)6$-ILjw5L-j*Im+zjrdt^oU{=R)Ej2iY&T` z9j|u0iUmJ@>{%L^d4ft3Us2 za;{{2@xDl}#`JTp-zMs8t%Y21n%3jZL}=Q8rDk6gwmzGFwGN-{n8u6u{F*d0G>(rC z_d>aczrHyAD0=4zUhhS{9TU!2i*?Giigo%TF?B(~H2cM2dIs#mRk$43s&W2fsj^>kB&y?nc zRQ#U%TnS1!SG^hIcN%BGx?Z#JL=huWuDaU#5;SU%zcr!vqx;L3hfBJHl2(7_K4%la zv{VO%hW5%Jpg5WRmdf<8y5ryPN;C}+rrX>(#l?-`9G9A$)vrPxZuZas8xtDJxTu!S zT3n@9scn^zn5h4%$w^a{MF8-80)8jvrB}vZy;Pp0dbHAJ$KqONIWUvWXXlYV{}2>A z@Cl1t*lo*LRW*iHw<67PwcVf5-()-iSCPrXA#<96iAtJ$@Kff8S4Qh()yAz)mAL&( z8E%8!#NY(i)n7kV7Dn});qwWpye{kHoBjuhfuz@ZEq7Kg4N&WY=Ht^?v?FiM_s;*+ zbgc^e?tS#Fx9E$6-rNZ~|J3LR@GkYd?4<;{L|i}F=zFS3LFfTw{P|kmtWzRgqvPx+ z8F)IEM!(a|FZNSV*j`?!Hm{BSTotL*<<(Uw z2-`X0+5Y559^|27`iY_@9%Svto(o*;hHhF~TE7+>m@F(Tf`F0wJKjMm^=lYeSz~~v zeiolCX3Cb*s+FMgSAMXXGZ7*#H|PqHC{&F91hR`xh0Z$=siuq7i2q&eYg6atO}#^3 z&Y~4}-wdCAt*0FYNQ{ZoW{oDN%Nx{6o$}tzfmlQE_9u#iMy7KQEa49P?8lEEyum&Z zXoMc=LWM!3s2CXZA|fKMT8$$^QLUup810zQyHDBL!f%+1Nx03Qin~_Nz18bdV?fE? z9<^}|U8!erhlSk#)2v8)P29ggyo#jV9Z%(CXyrVorjE*JBJJlVycYT>LCj@p4czQW z10bIK0B)h4CmFmY+2);|n|pNe@Mpee@A?K*&)MU^+Td}>*+;4k>MYgwC|Z3Ee_|q= zhbXJ7?^d@RZGL0QD{@+_7r$EeY(F0tdwR`O>SHIZnJ6Bp(lYs@a{&B&ON!SlY6y`T z#ukBNnXnObZ9hc<)w9*%&qe|k%kZy^3=DOEp>SIB1rczr+GG^q5M$0liF8{L{h$`J zq@smR4;;=r+JbJE3i*9GhG?X@9xNIi0j7VU z&Z;%!UKGUiV!0?Rp(cJ&I$Y`i8@bB+gR7^}8z`*nms0=QJha*Vd^Y?jaBPCEuj4bYQF|U%x#4kerpm)jB@~l!c_EmjTnY-N&AdfD3k4$)&btDqpTbqaC_Ly_q~GMuwFi$ zMO*Rd)o4E@yW&1X@jHqtL<0tT8#zz+{vhP42V70dcf~ssI%Ab6QG$d;UgkJcR&dmQ zu1-imP*kD!xuWy&A+U5pT}@5<@orB_*W5fG4HHur$Wt2tT0Nj@UBJlw4nwAFaX&s- zY|yo~E;>6u*Je;n(*TEa1ihT>hbE9~D*+5C&(EixZTI&Cv0i(&&Pr*vLYED(446VC zfI}?BafUG9X65>3!2(MD4FL~;LYx7q{%J{8%}?P^%RVg$A|~R^@ks7k9*->qD>QfC zqhuDgM$>pM&AV;ep?AFd#9D%|IdW!HsrQ-LXhvD81Mqs}Lw>-w!OiSMsh&L>1)`G5e?(wBL=W7&L9UR_&T>(n(3 z+}IOfC=gbjKw_-{yVK7v`-6W6q_qtMMI6wM@>B#SB?# zY5h}$O7CK03qgk0snm-H!EJ?P)Vyse;&oP|9rpk-0GVSZGCE`xG zv4$!l%S|p>>pu$>;&daU>B((mNw2^7=$PQ}`p3XJGWOsEd=3mUCD*2)C(N986*KMB zHyvY`XomKpK%R;S&?M}OZ^VwspiA8-<w&|8ch$~AOIEX7IVCxz!j zD3WGfBI*Y7+EnB#5Ees`Ji~^TS-M;Q*6v$uQ5m-je#wR_pfqVy_N=7O%~X)`NtBX) zJ72IL>KXK^35}YteD`&pN+|sG%P{5Nix|+7#Y-`ocQPxvly{qY3)e}w= z%alB2JkJ96U* zyx_DK)iZTX2}(ycd+XQEwUkf^Kh0Aont*PIiP3LBpi5*BJ{C<7P)+%^t3>r4wk^E( zdZ0q)d#6SqtSIgWfn>@SJ>l|cHt(M;l4FZH*&R*|->i$fX5~%-NH=9ZlleD(ceb?=DyyKaG7U{U&`NE}cpw6K<@|^$kL8 z;-}BUYd5a>C-W=cP!Xp-6e)=`GB@Z#aCBtSWQuQ#;`}reu44DqicBNWyLxW^{`kdZ zXG$3_0AXF>l51wg-fcT`HEm%*G`Ax>;f)l4;JjfD%XFI}yMZ#IIb3MN4Sm6nhp9-5 z@r8RZIJ`T1dmAX3WAew?bu~HVuRLyAVj9O5uhxqPl_X)zE3I3p z)dOeTHHnh-pWU90mLaYVuBuQtp0|QXS`~8fZ@H%tQjVN+-2un}8AJFcydyYWMswfrXyR2US{I?`QNSog&pN<=%*fg^wScZxQ#3 zN_~uIE2(a`_P2tFaYE(OWX4>7#10%z{B-)REY0GsgQy?1PKINweHp78weF}<)NUtC zo@!Y2cJO4_7@8px<{>#NuRJmYMeDP z`b?z_%RLaILC~l9BA`4Q-*z{8fYoY=c88i-hy5LG0gevVoto;hthvKJ%l#Xg{1(kk z*8Cz**X&c_o%)9IkL1YA$vgrwIj-O8218Wai%eg}g!QBUC`;uW4pDp=2^e}<8^6{Oq-!-m;WrE?GGWnYCu0*RL+Zy zaC|ooR{huwM_S|PDDL@xU(qu1V=SlAT2=%v>M+A%<^?le2co!WLP%90O^`0yzHs<% z+?l#XASYb5&(zbBJRf=n>pJRgi8DNej|wN5 zVQ)6q9v_7ALjJL6YHF%CBJfAVf?9bRz@gmG2miqYiq}oTlCkqFFfiN#Kv)kLzFB@1 zW0-1(hmY^D@>L)#EbQ)Vl#6p>wdxyXjWz_b(&o#=!txHlu=gA>jOe++mxe@~#=`*S zqoAYny&}&WbZU-OBjLBl0Y&cCuc^Y;wJLWubYjl!ry-l4UmU)k5<}ay;JglhrmLp2 z@&y0$YEYOGcDwkci3AWnm|;-{&ExMxN^di<;2^6(=Px=R{=HWJC>qffx)J^L%m&nU z_Vd*gphdfvDD~i00WIdiuK5Cyj)a?tCHTF|-%7&eQm>+Xk>J3lG7EGZ}FIlz%%P?5y7^QL5R^P0T8yc}?AVJ$7fO-_rl zb(WpP4*CnHMpO`Kb8~8N2Lv!qMJFNg!5V`s^K|Z&YhCcI55RbZ&q8SiDhVOVli%Lq zGl4?11MH6A^<0(3a*KNqDE;|emKVTX7uRRyAYy=60rW)#sI~V(8g?^8LLbCmd=O;d zp>GFuf@I+U{ExC6 zh~e?vecqsO8Za0~+6Ru;dv|lrVpv}UgyGS{L?8`FsHdjq4X}XIFx*6kySwv=_N&#v zI4Y@JvE#8<-bV4Q*WuU@bI@7lcmA0M_5yZj(Ijj-1gatXpI=x2mumr5v5hVKMkiSa zfxH)Ztq9=%HQ>m`hz2S(R8J@6ulZ0pG&+iXc&u zWdPtoWzcb6a_yRpUz0l(L3Eop@tp$Ib?3j|Y(Qf6jL);W!Fbp8<&rCl{y6?`>DTqW zdmwoOhs~A<6g)jWZC%U397?3J16)JS=OU9olLNGd) zdKe6*=JLVVR~!jXZ~PC3vxqYpz>Vu9(<;n>%G2fd{WC!)je%HVeZYKbKT+9$Rn`P# zggzJ+XjXmxoZZ|3ofzDHl8t68 zusLY0>slu?xvn-TDM=czj}FT%Jg!~$O~BC6aPo8^5O^ev^^tToP`}bo9Jhj@H4yj^ z5N$Ydoy{J|@bR_Hd5MrrgH9F3b0tOrr;LJv!u^W;1>EK|T0U?ipkD?v9yk^jmg}1v z8~^X7Fu?Y-N^i4ajC~MF1Q8+<)S}vjikJ-pQv}?SpCQt;@S*?qnG(oFQc7>t(wJpH zRLk&3tTyWk*`jn^2VxPwJ!p73Y7}L_FmQj)?ma?jz%iBUeI_#tz4y*N!bV32;p8KT ztkz$BKojKIm7ge}d7c~_4CS2lAX5P^7*x1!hk`kSt@6@bOTcFp6%}m97g@bWFdOQUS_H|F2hoSJIJ@k@*dx zwT3E7dPYXcQ_>*B!O0J~|EsSbv+tpvD_$-uD?5YE)$TT$R}3G9CS?S-V9?@LP;d14 zH<-6q;8}TXESq!yh_4b**kVwKrhzhdZ(jm%*W{8xS?lZO zWc>E9+24zF6`^-qRL?((rhk6btko5A|KTC0P$|*l_e?o^4PZW0Gm*LE?Ge|zU)OXD zg4ihnhB%u%?^j2_)_%=>eg^31b#Q$CSLE?vEUr5Yq~51N53uP0cx-X=CSjK?pf50b zGTjk)CH^wXu^s+1gcpaDRK?!DY+}3V<%<_PM{UQ9qN4Aemzw-v;G{CT`d#MFB0fb& zo6!vS%LBs(1$T5{%7Q?tRy}VJzn1xLYTW}Si28reR*HCRN6*`~Nq|(cv9Td9FJEik1AV$ETn}PcYd1mpp5LK267yMf zTpa(a94Hg8Ib=#d7+}|)G8jnVHciT8sgrUrc6;Dd97bPGe$H$>IXQ?|=9dSHU_-)S zLw)%&ZwSxua9jah5$p7*F%74E& zbBw4|y2WcB59|!&!7LDk0zZe!rTTtBOu_`Qu+;Z>HRxt1(>7L%nz`6-H``7_mB(rj zW93=^rUwz>wV$L0K>*~2S7Ssw8BarGfSa*AT5e6_cr^#SDgr?QVK}1X#fKlD1In=cogQiAoxuPLvCg(-w@{JB6FhHf`!HoFsf z6aDY-7r_;v!J5sBR9ak2h=vHdY7BJ2XhPbktp@zzNM)EIu>ArZ zegk}j&!RW{ndgpSF}l7gE)~_W%T!K_&mkEI{R|=^*??oL^*gl$?l}%Txf|#Q5aS(y zB>u6DeMmU+24Jdb&{BI=+*waYL(}sD&nCX(l&x4e@RA+4*KV>Br3E-u5MUAwu`v0` zl)z1)p`oE*^m_~pC}&vlJZ~WE1~PMHE(ddUfC@7JLxb@H&&gi6{1S$dN5{l`0vN%# z-7k4&X6E@ku)nNUSq*kKN@Ykj{5xs!B(yZRJ6MV|Za%vPZp*u}<)<02431G?ReUDs zC@A@W{bo0ANs5k+z6)&`w3|euCiXd4kO39}0xQ5#VkYQp&j#yqht^%!3Ec1;u5V~? z${d#*A(&xq`79cex6RJL1%`|f0XYfG5!f)Ph(}QZ+@v*_+447^UDowFp8x2zQw3qw zN^WT3_BFT3XP887!EX89!VlUwpvRJB#o|#ptNH{~I|3S;5cmy&&V3G$ccGPGCfp3c zXcMP7(;UStFWBpF;x1M%bKA)@2t=r&v+hEq$&-+bk+fi*By)W%>z16nv+@KoRArYs z0-z)C@$fU?A%P?CzMf+T4YiMnQpQ_qAao5o6irPa`Pg;d@pAFKQz=SDlGZTCnSTl9 z9S|?>*t$8*OAoz~Yq8w~#TWW0-zRzFO~7Cfb|UmACjk!zO_y{rDtVDZl;7SWINXs2 z2ls#hFZ{dX+(-A#H70Nf0RW8Yi|GqkS=oiQ21a92qyv|1nUJng4UmJdbHZ)d>0l5o zw}h9qMxXf|euOVJ*m(jAAdY)ZRx{Yl0ZZ?W>K??{i-lst1&1L+qO!XIn|}254<|5{ zw^}iOy3CksM9C(}wiv^mz{ z*EL-nV>GwKuIF&p2~I@0v1=@zQ3|K5!;TFg)38wL_(^pobMhbOV)gi0SnO|{>~0);f2zK2Jse*` ziN#1|`N}G7FS!$=M9_n3j=dSQj80D5AO&q1I;IR!y?qy;`-jJFpS<^j2udiH-?QtV z8y$M-T8u;@k*@LSUdUPUg9_Sb4XWIkc7~cB1^v*wETr<^2zVH(IP8koFjGh;)=P>SS9 z=!~_AJ`-~lyHv`_?K9#0JScZ!ipWj4PjSd+;|p0^cRJ#NUzL9oa1MyC*Q(eCj5;H-$Ku}%Y@d$-hZoe%~n=by?VCLxJO-E|+fV+4iseDo#rqr4v9 z$c30gHknS+ST16_3Hqn@NE8+zH@6fYL)U2Mq(2?D2-N1>-LmtWM)`K5p92Wu~Zy`+LztH$HVZcB{HUG__}ocY;yMJOO*BCg=(0VlsU?suDY&4N?v-9-_@~B*`AO~vqD!Y;NmPQ}dD5?}tI&B@ zA8TF}vjqi3F%QYhqlUm=G@HCa_mZ*IWTke;{R*pnx!x)V+b4^uZ?`A5&$oem>O_pN6(XvvL=i)>m?D$C_{=qq2%KTcI8n7BhX z8RA|yTzVkIu+bp6#_Ln!{rTO);d#$FJ4~3~LXjNrz>}Og;V$bLHRU7iF!>e5Vo+pF zDvVh<(6tLnN^2fy;;=NY2bOdBc#XTe0Z$ZU6mJ;3M|a@?}aw5ACOdgJ|EbxPKH${BfHQZ&odG=gTdI?1~*+ z)pan6=G4S9BfVHHd%KMU+20phx@@Bs!IaS|e%($qp#{18Vk(f_8kz(lZhM(8C7L18 zC4N|Y+!FVXX6b=OUc|l~Z$cBo#DnK03F9%bnFzG&A?b5GQxEKSg`S!GjDo`!UTz?b z&)gJ2Gq3Cm@r=4(bFTS|o2r*8RYjr=o9fnF3PFzwY--h|jemAZj##^5u~rQkH?Q)a zNMh1X#WoT-SPHx~aw}Z@rpIp@v&RhEYSKr?JAuc8I+Yd&4xF-*cZuElI?CWhz)n|Q z1I=kdGM#FQxl5|Y#f)qA^&Hw`xufpwqk?Z^x(zVaV1tz>IX}!V7an=B_Bcfjh~4}< z-f~2p)64lcq1(WF23OI9&5a!;>^7kI&o?A%b;8=2{_=5Am9b z=B<3Ta6NFx+EW!f5X+tS!_2jUTZlC<9^Et^JdX$mIr>L^ag;Dq^-t5c6yprS|9w$l znL(6if^FB9n{=ww4{jnY5nE_|=)B&Sh@E1;TxfKko3hA*!9-!J;U^wFc-vx~!=3K} zrcrx$uhQB2?Ov6jy>1jx6~}H(f=d8Mfq>OE|gxk;=J7f!mSMsfWa|argo&K670J zEuSWGKD4m!rn+ffKIhMa!`UEe++Tt#8dXTqrxc2zMq;v>UQYs;lw!!&wPY$zWgD|w zymi+V_Ee!0OvRVSS!z9|=3g*=LQgEg9bw4`@)qpy)d*hohmUbt)$iNg3A3!1xFU44 zpf^~F3zvZfeC+-_z#J)i!QgK1uhxSIb^_6l-XU2q+}lUmL0_@yja*6lc9IEIG_;i7 zk=znT5yhHWxH^cms>#Y9(>n14duy`4cz9=l7(7=KbZTKWaI;C}(jRTUy*_0}hZJG7 znEdwTu7X{0*CSxcPM~ZL;>1bk;gW>uQCWoRb|tvnnI`P9z#^rwmmaYC(IC;%zgOVy z;x$hdQ?p&eikt4mlK!Dlqv}2N43Ut&8gj-jor)tuPKYA6xh$#(?nu62U}#-$dJ2v1 zpdLU>YY%Vfc4iK=L*;mgARR~ut@`}&x2Mk$aT2m>sV#a6oo+86YRMTuKajtmHH2#}k6BI%cb#X#1Va&BI%FA$#dSbTJXuVFluCnB9w*IPU zPs&QH6Pe}S*-Yl4xe;?FbMNIJ@kIK!)3Ea!key1V(F}F`lArW@JrxPGG=caJk_=qo&B22 zbr!|_VYZ$kPa&X}ihNa@_>}mfKbrnRzKIUa`D0(J=rDJF{Gl-JyObPfG0r#a1xGQ1 zN~c)p-Rj;&SIzS%%TYQVbxiGL;m?WHhlYcFQBI$Ik*z{`x%INYXAxR>dJ9h%CP5Pa zSOgvwzK*4vE(BFG|7tNrnsvoxaG1gkw}r~@8H<~R%x*XKg6U!1(JSXG0i@1PZenQD z$)`bf^!z{TDqI8m&!vd0yt#?aivgoW@$`QI)}Ypou9=4|j3;c0%i)7|r`0qtI)~xj zf;z0dBk953gd4=GrK3?2CJmx@9DW$tifkAaXVjY~IdAJs*VMJwrJ}WJ@zF8*{QZwj zq8DrMgB?$7L7R`Wer~1ni~|SNhcv=7y})_+%Lc9W$Ye5WbmF>cQIxlS!ku;hd&5M( zeP28Gm&ofj^!jg1RElZ(a)fxGL3cQNYb0@`xbYKP_h=C7_*+ksx+7|dyVuIp$yS3O z8kEzPG5X81aHaZlT+sPts$wFS|K0hEZniH27KGOS2Cu%Qnc#$(w{1$euhF}^QkX6F zXSA%nZ!9m!z-t;1A6sg7xCBDCKeU)7QseOka9uR9)t;mf zUrG@?na(xFR8 zs>-hzNwkQ`_9MBVhrOToTUoRy?P9Xgo;Fte%gr{l?s3v}K5H8br^wfr&s(qPu)5p* z#__|Zqq9R-e8>~i_}SiK5UWx%`s?OUBrhhzw#AHNRbX5gD09vUkXeNJdC@w)=U0 zKcDY${QkQC_}#~GzuyfJ0@d8>C4$U3?ma%=zt$vcf7kdvrK6$k$?)c8DVtEvV0cB zGB>CMUJliv2u^HOHf3J^TZ zD>*@HQh3|0J>JJSJg>P;G7no)nH93hr$m?&BhUYs_HoS*vn0gij?1QdGS=Eupf|^^ zjlI4ftoX=oQcRR#GW4)LH}KhH*ItmED(Ti)3z1=1j5M)57MYHOy}C)rPicNCJayTJ z98O1g^+sFYjazqJv4+NJ=iS;aN3||&qst$@;M8HMRk6KUiss=8)~&GB2}V0`ez{cT zsu~`OzK@4>X8ny+sQB{3z*5xC#fIE?ofNv^x`Q8P9HCh%3E9Caw#=Ky_+p{0Jc1~3 zbrILYX5k4r`*k!Ar_(CO%J&eib&fTyQ8W*?!;YVsJWZA<1J-s(?tG*|-0}Jp_83}M zc{Ws4yX;KFK5-E9QTZHSfUk>aY-A{Boyf+?GrWnZ5nHjfT|&)g%LMkZ1?c5&THDLD zK3xqDVqLQj1dU9*nZ%#z<^Qg-lLPt@A$^=5K*^$B4AVu33+S$_5A zbhuV%hDAy7`TlKAl5CXbxIh=oK)fn5;e^6y>r*##g`5UiVtX7I2-Y*pt6U;~aRo1G z(hmIDSkeW^W3S@9xLRqUnJbyWf8&=SDcXH8F!x47SMu(319~=WcV5sAyLF+mc-Rk( zTk8tf*En9|vQ@dbbUOL(FUf}q(-1i$s;J&aVVpYg7dFh6>mOu|jRuqNe%T9J5&8T4 z?@CXe*lrNrm@KP3F_+|z7m>AwX>J@pW*D9S4%*p1=f>B1Bj0gc9`Ao7FuK1acK7q* z?nSUy|KpVLDng-RoV@ZfMYo??W7!Q~HCh*>`5iF7&!sz!P-3sWTgl%W*D1c6GXmde z{WC!8YP`c%+Bg|PH}+ZMN=oi(!$fXxFV--x^X}=IQ}|28>au=bvRd4)>cX-IVqvW|Cv>F@r8h{j<$E?rW!92WsFfS) zZ5Fc^Q$}0e2hR7XBkNS2=dH{=?*C0T%NX#f_;dmW^>*lT1C{hopUTheZ1yqV#pG#ENAG81`SACx7}U zgbKP^8T_v^uJuV$Wm#`cc=iV2gh&wU6s*TlHvJ=>@ZvHh~L-Wf{E5D(?*`_~G; z@#Xuna7H83`yu`po2a1ahpA{$k3=hlqUUsD(VAA@rN;y5JB?m!u_#-sJvJbZ+NyUo z-KT4HI_y=^^TV5L#lpAO5GZorWm+~s&-mV!8l&KKkf$NXePiC}d3VPPQ@-5HAi*scdCicC)m+reG*7x8MQWM6w!(My<)LRECn{kr3aOUgu~uCC6`!692ZZoV@3 z8Wl7-sh=hGl)%o;PQStZn%L7dOD$uujT3p^zw3iG(vuQdml=zK>d@AaJUMa3%Dzc> zVK0J%`F!?l9cSu@2|_VV1CFlMJi4WF|Ni#BAAuGV6~;7zwq)ODXVu=`4>R^6+chyB z^O(Ep0HdlpqD-IY=QeAsKgw%A##v_6KoLg5_&Mv&6JGBfOUEA{8BI(!iiUqRoC|2m z&1mxr-hAQdHbA8{QyCfTaNAO+>uceCx1${^$M5yz?^+J%eEw|?yk$bohi|0+o6ZoU zenrDP{UYN=<1Yg`gUh92YwPQp8X7?de`Xd#?ax90jfl1fU0R2g_1rSz_c~6 zR}gWW3~Fu`FEehU{`m3ZWQ(r|7Z(?==Z5~+c-2I$wn?w~9HAI)RZ%;Y23+O9|0?~Q zZEbN=n%&pNIA*C>nP6PAh0me&&;ByO-Ql4Q4`y5ze*Fp=8`Iv~oTa~?!p&F0!}xUN zYx=(fO=E+R$6U6(lmZIgcj%vmeZ)pV4WtsE_+<6Iv9Gr`J|Us)REnFMC?Fs}Sxqfe zc6&&YyP~3Eb*`nU#{+}-r2m&vEcBL3P=v8fPR9%OGwERAE_?QCkC_hP=~>3LMz?q{ zQ=-OwFBE&qNMWf&nFh@mR_p6p8rfc%h;|EbW)FI)bm`TPKb8hDwCHi!x&ViEUlP0r zLvfaRahG8AT4cSE7+@br^ly2+AI>wQeRg~$DfQmzUQ#9Dj)g(OHY{F?dY%Wa#)8Bs zba{o$6upCi?iVJgyPLO8s8Ov|i|v12r@{s4kS*QQzfI;rgpJ}PVVC=8b-OQ8U%FJG zr}=XKxj^C_O0z2)L+?39p&>52VtZ~)*Ar!3s2$x5Jh?x{Akp=nYt;R3FmbU&3IU4D za~=P~2gm$<>|&W)n9zZ1PF$ISUUm^(6POF$aTkW_B-gQG$a1157ZiPyynQ_^uHXKq zf`uHhJ*%>HY*^pv3Wi{`5@FZJ$c#@@IaeG6@t^OFGP4@jlB1x<&!3H6uOzIBsVFBo zW*AFk!7hB~|KjbRK$Pw3xlfrt)`KB~iA7v3!?3R%4jN}OrYO1>vL^JYZEj=IDX-F* z>^1HOlPOO)Dt2THs3we7w=bOkrYP+ee%F{1muT=;py`7fBjbFn9j*NKnSpL6$rzei zWr_6D!rY0ez`g2?7iS9}eaPk253CHP@@2I5OpCcXf-MyB|(sw`Fl z9zCsb%pD^^027>EMUM*V3vF*TL7MuPOK#Rxa<$Mm)@JX;yUbx(9Y1Zc$TQ>H(%%(3 z{K&*zA|Qoy`@C=H<4<9l+eg%6E3@NwJ6-+~Z>L>fNF&2LnKM?M7PE6$(@09j>^NU6 zzT=@K6-O3^H8N~l-@?cEnQ5b7ThInRge>oyV2xJhc~m1|%oX3=me~ce8Tx~>rgqlG zyGbo=kM~R0a+{Mwrv>yho*nbs4;h(ZN{NYL-W8R+jF;MwRLo}xUAtGa$TaL!>I6OM zOGRgAm9*m8!G=h=s;TeR4(<>vP`@I@u0D4IPt3aM(Tie;Q|VyJ6v zc;wtzXoc?CXa?>&uS;2=L_PiReLY^->JxoY@1Sk2t@DIeQayFMvo>fXGut3o{C)@B z+v`vliWAh7A(mB^YL?g{lEK*GE{e1n^b>q+@?6)|AB>+R$>--%yHa*sHG;Kh1PiqQ zzREsyCtb_qw^b>GyA3K{tGa!LX??a&7-?c~DZ7=#ND0sNHACC3r^_nEiBBs}frL>0 z^IY7*nus3(C&ZN3AA~68W2E+-FVY!4KQBZO^8W#r|Nr{((2)?WetmI)rW+oviY2&|@c4AdeAfLmEf%{gLrOY2m(Ta#1y&Udy2BvRgb-fgLD$#Q@bU4@i&x&+3c|ob zp-%q&wUNtEkRw*%!-rmr3YwpvSL_lO7iXb}fD&$IZ$M2d#M!};{OT13ik;$KQrGL( zuX8mxH4F_MRQ~(Dv55&Rl$W?kQrFSxORoZzLjH6PhakFSbF!?gEEMYL)2C`o6SZ09 zRg;z(Wf=Cz-Nr~nMMcpwJ}ezCE-sda|Eh0s7uo@XDHVZq8~)TF*_3PI!mh0E?_|u7Ub8}svJ+m=P>5zqi5@jI4doA|V-0-E2bW=T5 zBrS|yZW`Yh`v3mRcGeKGIt7jXsHSIs^9(;Y_vbmFS)Vkk6uxL_k$Bj-;5rQV$#BO# zgg9Lo!`NBTF67fEDOou=xARkPajy&LtJZT*L>V%!wRI2k@D$zy9QLh<$ZtsEU)H6u zNuHXh`*w-%-}4_H9!lqr2zqDrEwOQM;9h@_#aqQc^P&!&%(1<-)ryu0&Tvw=!$1OW zw>H;u7B-|+q`~%C6lWGd>LI)LBjQlK&6mke}7-2betsw z1|WzGlP9&W`Or@i8xtc$mKFY#XCsGOVWo&zRjeYF(bOd8=jV^l&W_C#amhoYQ3?tQ zoHuSfSLF!SEmg3xLXaiA58kx#=g-2=pP0M4`&;FXY*t!>_0)!VuZqw)IMR_(UG##*kmXEE(>4 z61`E+QS|n1kXfI16~!kcY;S#zMSkTB00$H#dvjJ373$Yzz1!Qi@i({Oya z#rGM^8p&d3jNAw3S)%NYZoo={K?MZ)#Y0VjjT~-Il;J_< z`iOmPacQZXni}z_PDPY$@3vSM}%oJ2G zN%+h!rJ8pB>Pdoo*gO1GeA$93xOd6@*UE|<*DGN$YZn*NXV0G1*Vjw4B?ulV@KPbq zSXLII%@wN6j}w%Ia!?43dXW4mJ$9O+PZ=kurtomX6=0rlJa|vgl%y zlw`ufBMFgb`r>?B@Zn;d)ZVv5Ok#mo)ucV`v>6 zo%*Nix>qd-ura-SecRjHgKOuX!}3y4z)?|A(J(Qo5V>SzGZqwt%Aezn9_Wa=vc1{# z_a}U=&ytCWiPv_=mFx)u&N*bri(eC@VCCug1neMw(GD^ze2@_vpXh=e(N>{I4yLPzU#k@VPXPR4F9Dd^; z)R8wi0g+csyxPh>-gexX#C@ew*xl1Ja*}tSodO#Nr>&!7sS1aVvRpSRFOTi}M}I^0 zPp}UVibtOCBN&g=yfd1XlZVH;7ng(~9LO6pv^+CSgY~iT@dadAtc{my>g#tWcXf0u zz@=nQ4*nQu+c1g0m$}5+Jv5{g5Fq)GgAAXHg2LSGR=jR$$Df%GZYzU~*8QC;yCYQ= zN?u-Gm1PxnWA;M2W%|#T`cefl{Qdo_?8mvH43&)y4Wq_O^%j%VCCxB>DI&0c1YSsF z`yUv90Md7rR=ZsHs)U5`?dHvum9Y8w$5FA7-^Rv}KH=Vwb%T(EM7YVu3tEOnXS9sF zJAcqi+rt+)gq7|~DpA=i@vmRU{2qM+gN7sB{&#;wiFu*r-<*X3t*>~E%qx{^U%!4u zYjC0jqi0|=zNq3T6BHcd?o@d8cdny5;c7y5HVNA7d!6^L zH9I?dC8#OIE*v9RgSX3~Ov@~un1b3b$l?K!3v$tyYY8e{^`^sbeTa5RHmbP{XRMGcE zN<66+W5t@$cPuO{+*Bwr&s^p z*obzXZJd%%mE%cWglX?zjDjLrNg+xn6(H{Uca9jfI`iQ+)GltH<|*C5*LTAX5524t z+v}WWwoZ44s>^ykYD#c!adTVt-=K(qXECE(#-?*tG;Z`TYt#izK+f3s^*tfKf3we` z@4yapn{UO)Pc zH#D&F@{&o*=}BF`-evi8Wo5-;`)3CVm8%gB`UB49<|aq!4+f-HNgmE)p`@X6Sof#3 zf$TH#R>oznxd&TCR#rCpBZWN39@8~;h(rM+Nym6SWd3k_QUAT=B?<}(UQjifcY1G% zy3Pk_KE=Vt=H1n`;-}r5ZL%3V_GmuYY$`4(!9bNgswJ3hdM0wOWx3PPr6u$^79J)F zFwILSUsYw@f;G0oYist&DJht?;giS5$8^TSfG@X3)uk5TT53ENK0hO_^Lngmpjz+W zZV5>ju#qj)GTU1n36F|$5M-Uva1~_;dHIt6LPSAiz4z74$vP+cpqEvDVR=WJtOS2= zc!CGLK;W3TQV9Cbw|AzbJRcTro_sTOsZGw%08l{3=Bw6yM1HCPXmDHa|XPBOKRZdJb=o|~InHTWV#M{MG^ ztlP} zO5Q~4>fJ}yYATQM=i~i#gOUpw6aRgk<+C`c^X@!~(cv72Lq4kM(%m9n%U#-{BHPKfX8j+w!-V4bkCMRR3tKy>4_$+WsNmqUMRx$AK z@V>2m$|)}9v}XAD?61l4lMlKX#;0BvheMO2hx`HpRpuQ8&|9Q--gD0K45`&tyzB(v z18Nst3@$TXodIglS+5 z!kDDnX$~`8KH9zaTk3s<&<7rqW_%G55%IIVQN`E4BtZ-_YH-IHA0MxGUm^fm%c-Vu zvS^B0Tf{7@YmrvSy>xw=$KZWIM}^b4hCz^Aw_x;(>M3vH#2fe=|qlMHv(> zLNu$WO*Dh#koYc9UZx0ko;SCPQ%HsZY_i{{{+da-fP=DX{o2D zCyn2V0QLvc#yDT8sAdRW`r-fYb(_$7ctnKR+&afM!&?Ky4<2f1bwdyCKH6Q05yLkD zwea^yKAvWYw(3-Wx zC$)4}tvFHE%PD+CmsQv)>Khw>rkVz{l{|ctwqw%bvjCGu`m`L4WwqOiYLS6Q=uv zCGXyK!Nw+MV2FmhN%L4+ID1-qZD}PRZJ7KxdOlj2T~+S93wd$ohh1*daC0hNE(V20uy0#Yi^QXDCwl>Yu zv4rozmz==!OX;dFAHI2D2EZjvDo`@zmf=eP`fD)?12HEyZU!eDp9kp11_wz1!uvG% z5UD}o&g8y0TFJo>^oz(KIBwqmX4u`=*KQhkR%l~VsMTXh%gaH^K_`IwXS!C-&CLzO zROV265$E~YXFoci{LKIS`2uJmbWIjOZbMQR;sNJJHr&RIWApoT1hX5$t%vF~lSKx> zk@9R~V`FH*m-e;Oj$btcb_YcCTYQ9k4mPGZqokiiyd_oxn!RhnPC;83yS3$NX=yp% z8AA_1nb%gV7wYZlPT%b`UNcON2U*?8HrCddK~sfZ-ti!*E}xw(nwAzctd0OaNmnk^ z<`TO1g^Q0b;Y&vcxr>Vn#|zpkSCs0UXM3|20Yb}fW%yhQmCax89~`tk7Y0_XSYiRs z*ZU7>Eh(m#Z~A!@L(bGN=iwf;!?tX-f6>QCM(yykI(w6^xa1`7?6;z zMe^&{uT#JU4*vd7hl@-XpTgGr1yVLU4^OPf3OeAz@+kXVz|;-|tv2b)JQUgz!Gwhe}>UleXaA5FQgFl%WVn zPrznSx?Hz?ZjR~fcwaz8Vr3{tDM!*Dg&KXMF49{g3@<^bZ)GJJa9Mm3l5bJdKkD7` zH7l=+i!;Ey!}N~c{0n;+cny!~$1=USTsgd8YkwdQTf4jMEx!NAXlTM=lhJNWFDpmU zUPi#c^z@@GFL4-%nSQoEDV(=%Dd_4_qgbG2%gD$mmX0FG2S&|5C_Hirn z@=egq#ij*EzKx8Kv$C?H=!&MSEG<_h%05`{?Cz#35&KCpzrOoS_~_^F@NoPxgKAvB zQNBOFM2H5SH{TPg?0}D`bekU9kiyx9>$vT z2$*%gp{aT!9$<$0ecZf(=YGxS$LlD%&U|&rBX%G%Um~d=O5?YMF$Z)zW?6!~0PBT~ zn>*Uds%R-!M7i^&x%9W0@UB4cdzS{%JORa<6x9irFvb;~0RUPM= zX{Fn>TK|5m_+%XWzgd8j!8Ilks1uK&Doi#$y&3cpJq*Lc2gVCX>e))u0bAe74Sm+n znwy)+sHv?lQ_|Yo+sCJ;_i$VM-1b`iS{OB@+RG6#pC2drS&7;IOY$`ij-Sw(t0EnD z4Gav@pl>Bn8gNrvfHg*Q$DO^ecXA;?WDA~x2YOgqfdL5#3CIKjs|C&v^D+-oa&m^s zLN619hKGmq_T4^*NvyK$p|HO570nu?(~pl5pah(B zm$;TaR}$tNjvryUdGo%@I|@=#QrOlsXRIGt6I2T8-4=0oJ5Y3o-=Au-vr-OjW4*p3n;B;H*Ti9jCU42{}y06A_^=@)5 zDTHC|&p&(+!NkPupDxxap*lJ`@`?BaA_lU|5*2=sbzAatKdQkutaCK;5%Bc%OcQpZ zoAX{_tQKB_#t{)Gd5mu}m}S<>PH{={{LrHR_1%f(15BsLF5%+X-d+`>PXR5O1O$3| zdeGonXJ==*&*uRv6&4n9a&tS@s6p|<0~zfWe{|r^uY3KOBI+(u^gO9iZNYdJFqt$` z0nG+q@PE1A@!Xhv4qdNqq&M|VwhsZIr*Z?EC%i(q0-VEStw?DJ2>597jNBGK$=AyZ zuGG@=WwcX1e?*$=RbF#5!@td0hZ>`DaPjboh-wbU+3aiSX6l^UVUfF@A)W(NBm|vx z#xchQoE@j{S(j*Vx28xP3+}&lN z<&y&yg$|1#6~O+8Pz3@S$fJmEM~1IqY#eiZ?6ZvP1x!CVIhjRDia9+!9dzWb{q>1V zHQ_7pcDvD{g^nwxmR4`v@3*hwj?3W7z~}%>(a_W!S&cmw1u0v^L6{^A3z{Rynj`?G ztgE}iOGa!3l^;Cl1of#BG@GP>H+9w3a@yKdig8Ra+lyV9>;hpzX8ggD;h@-pNNB_p zCYu{1o9k7uUjzv0xomDL)E<1aS=mj{xmH*4VVZ1gY^w2N(+FXIgC}|y0X=~FvLyZK zK!;bpf8TdQEdm5I*a*mjgO>GpzV&%{Y^?Bc(a<*{2V5rtV?CV-C!G>)7+vT-{r4xv zmteGaj}8GxZvoO_y?vXMEg?Lk>hjOUMb@MqSCA1D14{vY{aRWAu?8Op2M1J582~WJ zD%YSQp|!bKsiVwnZ1Ae|iQxV~`}*9~g?D~_4#g$kT9DV;YFLRC#0ya5K{Jqj^WZfQ zt#8OOdRU~|){}IdoRM*$jzNW&cJn5osoyq^ZiUf3W+#0b zYAIZtAOtP824U2D{>d1)wdzE83+E;0a?BCWxEKEM-ft{eO$<^2S#*0C$i4-oY5_FB zu`KFv9S=9qNss^iRqx6rmBx}wiPNE>LN5*%p`Ww%b-g8e+qWZaH>nbj`;wcv6rTcv z_$H^3v2hisD5^P2OI_KdN zEV;9je>R3BOMF#g!IEhdW8dKO*FV1{qGMzv_VxA6bW*T;+CypxEisCIyFQz>Td9?x^(c{QIrBG(=7z@a0`$jmJLpwm+OP)A1r zOHMa(oK_ITe9Y%4piJ-?wD1`%`mbd`am~xibL7xSPEU^jqDz4cFENn;tFDbkYh892 z5AcPAgaohOg{hM%vV54j4#N%;6}gp_@lH1sLkDTz2b6t9tBY@AZ)|Lo`7o$p$<;mA zq0{E3&IiR&cXpugIqOU-7cqhOv1l^c3#Xa71wiCopi5P`F34J1S<%WYAo_*=E7E$OpUCsOViGcNX*57@q zJF@v!W*~=(2Qg&*RaaLRC2VG`N001n(@6(lNH3-KU4x!sx7`ewhadcl#MD%!)6-M1 zq^U}UI9Wp=>yU})Ely&3`6FZiaew~(t6l?vu_`Fv3+HE2=U&4NxVama-=FpJm z6V`Pa23a3?1G=WBX8g%h!!D2kM8uXC7BCW&L!zUJf*l-hdUVD+nUCYf#KhpF_H_VR zd?fLqtc(c7lAxR+zPYi{??}>*``;J6Qf3d2j&>Yfq@JBC7#QeY*rnH9F45*{zvOro zUh)S%2WMK6BkZ%F4>hk5w z`1ts|-h_%aL{q}LF2k^DQMOMRrr()Lxi%OTym=!cmXeTwQLgK-^M}&*ak%+D?$akv z{kP@Xvvj-Z+HF2gm;E^>xn-P@PmG$*$ zV2QE%AMddq92~F%kJ8rBNtd?6A{DSGzVjeQQVlAKvXK!3IX*TvYWD(mD80t5jx>Ga z>4757n>T~O_6WE*dj>tW#z&GB`_7#^;Mm|36Nff6HC@s^Z>M)@ey)}&%zFL$NA(Wh%vMd~@R&?dobGwV&hA?mYN+_nZB zaCJBr3uKqV)JsshIZ1KuuWP9F4rGe-e7ZPu;rBoG`1;Y`7c&T!sx_+s>hsEO4~XML zx+}n+(tO}%dH_t`1IsV`^=rl>NIenjl6Ev!9hU?EjEabe5cS?+2T%&5^DrQ=uM?cH zKYyGmeI7o1n11a1<6{gsFIPoHX}}cz49xDoZ{`7yu>-UK04Fq0ghLhc`D|031MhEf zz(PzkcX#(n$0>dgwt~kMs!Yn}(9&{|anK2$_c@(U=#-A*3a!FMr<)}M>Ic7||3v`& zVG#Eke!Q<)Mw!XWi9-4*0v@13XGnBu7#oGkJ_qa0I&QtOC0{Y-^GjlSBCYEkVpX)k zU}ZT@y~imC^`?EvzY1nj?zp|7co^9W_;R#aE}0r$gGn5x2jKcO$8|i=dI68o7GwiQ z7Mjs|(qOc8BqG_dfzISRmmm5P8^O9^m9(yd|`M=<|g z54X&qan72PW`&@@s0Spnh|5amgAO&_eP~Q&SV8!H5J@ThR61zUAuvkCn)i z+77@MiVi9$BZICbUDCWt|2Egn1m#u$+-qwD(0)Yk-ff?nqD9b<`!DKw``3Xv0!XvlHn?txkBte>c9or7 z{_i-*A0Wnmo|;N`il7qsQbznpQ}cPL-a9sMPL4z*BpCVAH>xTCZl+VKb5qL!>SiHp z9T*XaDuceG6gSaa+Oe z{{Amu2e<;ygD4_+U2g`;bAh&jHaowvf(IQE!R}ywgS!c~tRg%OG$s()FiFBjS69~8 z*O~i>z=8+c5%wzB)k^p7T|&n5(W6MP0RM~D;c1I2Dx61!7#SFbOZ9H={r$lVS(Viv zpQM1CFdJO$*m*pT2DmKhcgPDmLp0S-P~m4<*|YL4}-PW;+&_<&Y!T>^`@pK z`F9F9$q0V@{rfivJ&K^nL`l(uP6V3lV<;Knad9F?bA?o+=32quzI{Wi)yYqRQt;W| zSG^a`kg*mMqk~z8ehRS>?CB3KE?gyL8m6XkSy>Fw^cJDoiuxXK15wI!a%(W+0V5+c zS1!yP!V=+;k^EKWkyU(+G7b(7V37vSfA|s5etve6dHR0aOB_j5V&M`=dw2-u<>wO% zyS08rSO)MFsPqYmi7yb?3UEa&8<`*Ia6i*+vSmOs%h>3B$W53}y9Zm~@ciU&6>L!s zHCm8);mZ8RLO^ycx+_(nzNF>0LEJ)9M`wIBD?XmAKkE)9$Zc$2=`6GhFkH97L>H4#=fp}4%s^fu6Q&|4C z&@B9mA~X`etv0+bAWGf)T<9Ab8kzu>YSPArqnx&a-E$yi?obB!9lmk@{Pk;WwR#oQ z`6G~oBNX$^47mzp#8YHob9jog+CG;(I4lDDK!5TyG z15~`_>cwp@%k$GCd5)y2TXA2pNv(!~POe|`r6vgd_4?TyE0`mlUzPYUr>3SXVM+Oj zOo84M4^gYiTQNH*Cw>^_>i}rKo=8JxKovZknDRJtd6-wF7cXAyIoBi9X68NTKQIIf zwMtCTZF6(k0pYqK@HWt;o970e^(0<%?8`fiqbBBhrE(9b|J>Cia3IrFGDl!ha{y-O zUk5KxSSRoyRQOO)QBmHUeR#~N6nWNLG&L0!v3qOdQAe$a$%c4_Do%=ErzSz-DG^dO zWT;;t50UQgLZP_|B;+ax%VlFO++d=GE3=zR?q0sBTY0Nz+3p(}$iKB@akhkS;?9oy z!!`a(5O#i)glo{~aRb=ORr}h;o}6`<+=Xo~b}6YJocq=HzyT+Z>gbPkfk2D3VWQfo z<%7I}0(NTw!`ruSGl+R~7ioDG6c!=|hK}YM0F7zj zPlAVwLIE1>|F!e(<1s;7TU*Q?OnK_j9mb2Jp};KwuM04{Fv&`Q-1y+lx>xY~GlU35 zoWDOl{{fM2B*KkCVu6aO@@#E$Exv}$-xl9Pf7+P&Knh`^!?n_PTg#a)U;9HGw;ty_ z8_c@XKe-EdO!1HD#Kgq^%q|#Wl&D`&HCW*$xQ-z0(*quQgft5avJoJg!U2hHRwScn z@X_xM%o_4qvx=)pJ>5_??p>UpT|#M@nyTa5r6qdpt!nPTxKg0lZ{1RRcaGN;)Holr zDF)^}t5O`(HRLycdRf98D$sUoS@!QvAGr@|8KQJ)ErQrHCrlM%;C&7L2(D~{QQ zs1dRoN#pmA!W1orL2AZ8L92-#wfxWumgV00JNgx3W=W%W%|Ovn!;aP%b?LljFXk>J z#Kn&9$RQ>s?tsd-4T(g4<3}jOwq{^pKTjxj!V=T99`pWR#iXnPr zXh?{1g|^T@1Ila51tIne>OLK=S9T#1>}pme6H5>6`>yySIfK?{DUA8*A<1?yU5Tz% z#z4Yr*!qm{( zCO`V$g;wka@+YW5W;?%na3`iI0QU6zW+c93q@x8HtO63#skbvvqt5DAKgyF9ok86R zC|+NEWIId!0x4jSZU`2>@O${%gvY2Jg+dtbs1Wt7N7#@#fepBb++(x%E>T^eo#CA) z%S5}`F|4G8mx2MA(MZePL^7^Pggy)&cGo|+{1{AT6m>xF8d{UuudNo|fO zSUvkQtpMol9`HqFX=y|uL7EWQ3S_d%rTgoMyM!T)?2!D^KZb};9@4%*hAIHpmg8N{ zSLq~!Ge}AzIt&I1F?DrHb!q?Lf__^jVx6qa4w(mtdy3|MxL=!@Ne_GHn=L{1fATuH z&j!GI`w6`PwCRwzI8yf~PmsJ6DhNVvpFe+2<5>ybUjwrMrX4r6PXT1V)|Fj=kI15F z$)N23gEIeutGeo*J;nISj+|B!apltK7a(00FwBp?RcBSv-KeTd7fp z<-MBv$0z5ckVg~BxFctWF1P6YRu6RmLmKvWcvF*aKCO1Ae7SCto~i$}%#vY(z zs=88zc8}D&cYq)YFw=##vx4VlUA@kJBL(R0C0b#}w7G#pz*E+S)S)$ec9W38DNL>A zkd(}Z!rV1E&B-wjc@Y)}@AccP|NJQ%%Pcim$K88j`(%0m#45@wSFW@)ZQwEcZFSp8 zac<<%|D6k5{4-v9r2#ybnXjDxwl%!n-kE-?NPUBk`aM=ciPZGp!kE-A04?0qEn|s| zjrEaB#UZ2~&Mc?h8BSjU=-qS0)NjOADg}a636KLA-Y!XJOYQ4{Js}HJk#6>}UC5lD z_pgB@r~*9@EKgVBYt)0?(evzwztV^2yp%AX59UB~P!!RI8{C0ZjBwNPD|06CgM(m@ zs*y#S&Q$CRtuF!D2w*MJ%U)k%1*C5Yc9ms!JZp?I8rtcv0g)dy8B}k-#mXGuT?>it z?^or2x~2_T!#Dpzhb1OXpcN>?;>dlQFCL^)$OZ{SHW1g?z|W46!~&A>9s+vP)m6Mi zjqSoHAPtXqmj@87J3cjaV$}8DuleVc#S1t(PQ> z)8?HLDstJ=z~GVgfRGR**aE8LYBPXqB%LB)-7gIe8==aLm!EBMTXG;Wh7_Yu=f^jb zdaG`LP6P|n<$r;{sw$B@TSC=R`Youoa73yDN{H*iXPhi?ZwhFoJx_vPyx4*yp9OfL zUJ%Vn+n}K8>tx4mVFo|~IpLzqPyp?#X}<$3M@&k2MMYS>n6r&f<$$ZeNdUDQQ>)J%#;3GiPM|^Sc@Y(@laCbd|;1L*hV9h)1H3Bp#y)+EF5Hx2pM#dO~ zVu3=h`qMdb|8t`ZbHV%f6mYyj0h0SLY*B#2&}j60ZpFgy-h~W%awM(uYQh!hYi^Bw`<4giFu?AFoTz()(YyP=#xYR*>Cu;T zfA5fkng1B3+~pJ|Le=)7HlR;S^PSeAF%+jL3kj7cs2rqAq3xFCm4BI z+HklFV)y@V2VOXJQBE?cl8E*NR9{380XvSnv_PM~2FD)> z%zvveCImMVf_aL6C!rxCiy`oA-ITi|U!QOc9oG#z3X}}x! z%`$xZVI@Ga#3(WbhVQFsU<1R_1p!d?R+PDwMzAECm6a6=6(Rrimm3&ioKyrbX&GA7 z9ldB=e|b2;iGiNFh5NM0>_c6xMCi5I2ekj21^7w<7Y>J@1PYEGRP-!1raa`P&QzuB zI7Z&-VKD?Mv|<-1iEuKLjEqcLWV=wD8s36L%|I`LOz+&PJ_Om}@jwH`UFc!47{_Tq2qv5I3M`NOL5y3JOv| z`33r^e`ySj8`Qpl2K?gKht_9>BPIVI&%FHS)C_|xzL_ER43Zv&7HC6lj76NjsKa#` z4pyY|lY|9>8NRT!(C*k>Fv;T4K#Lrk%?GrG$mdMWraF3h0)N3J9Y~bsyHOK$BK6;c zFTl9@pVJW(VoZ0OF+)Ar+TMm}z0-~;NV1gb;?JRcQr^s;goSj*3^fNyxYk`>autPm zK}Lj*rX!>M@QJdjs-qz8IM7VqfKxBZn|YHkjQ{w|K4V*}zd8ZBM8ju}4J}k(L!rv5 zSmrMx@Bt=twA6w)4J_FA1(D``FgdNzRC7mc_j=*P2*Nv4s5BjE?T7KaAXf^ftkN!K zrl!n5FapSLsd>3WHy76*1shMni?I zEDJX;)d&`r@$(Z0pArKF2Ywjfm_=VCXI-Su5W7~1Hsl<>z`(kl95_LO2@OFZ*q=am z`|m@s1kV*@Icd2Mx*~X~?F+3P9ia_Huy)~2;o}hP5;{Io`@#4^WXi{nS)h0PSM$>i za50qozdmQvZ@p+$%8Lm8!1xoAl7ayaKpOZe1nEIR8h9Yiivu1jq#__4LkI`xMjD>j zEMKFJG8nb`4W&L8>imDIr_1HUTvu1uAP56M+b}XRf+Pg7iIQQZXs}A5R@U8TBuLiG z-ku9YItVQ64Nm~uQ@zQVpo|PYDX2}d>=dj}To}bXf>b#yqD`QRK<6&nFMs>iXSLB= zoC)e!G=y@Ib7EjG$pAo4Yo$_Pmc@rX4CgdrAsG+iP3^G&c(Cvbf=zHjOq_`n{(MxP z;ypewfs9kR?gt+UFxHV1CrwS6f_W|nxH_CvqHaI2L2QXnP7Z;lD0ny5I82{g5o{$f zk5v@lRXFg&JNv-Y)U-3XTm~N_tle&#q4p6mL?$8nqd5B;443)oT8DZ#1yE{=3C=eW zgD4qj4FVhR{E9go%g8`TeV3uA;EiLSULlg)T?PLxU?1aQ>G+Zm+4Q z7X|`$Q7Lz7UpnhhFwjXP0Wdl`x@v4zEocj;q9Ai018ZU7O9bV>93Ko#qsQ+TaN>pq zw8P&jxY*d@V|bR1Ac}yV{IaZ!8*JbOh!g_4QGltemRj80j79P@lpLz9@vL%t)Uk$l z-5VHy^>sp+iH@=Q!-ue@rn|^2g0q>GVaK_)w#Jgw!}3an^_2>}+GE&uTl@P8V2#Cm zJK>`bPDxE&1WMfr*_@YO97F`IBIZdY zgxSEx#icu~HXBEWkp0g&s(QDpFgUZt_n}?$y3R`@)f#4Db++lll>9{Wb5L6$D3SoP z3QqR2xNN zQuJ{nPBX^PfcPLC$q4ObS8?$jFh&co+99SLITgt32!XZ;;MYHqGdXa0ZLSJTVkDZ2 z)XDp6OiZ%)5d2GkY+CXqY)nX${m=0tE7G|CTwN;_NX=m0;Sd5=1N=M`$i6@u+)8+7=MkJO705(L%`FYs^dSdz6rb;bBezL2 z4gBPS&a%0;cVL4ek#6WZd=?^-IdQ;pEFhg|Jw>U>^$JEcST+|0Kh*@{a7y5O=<8b3 zz^R?5>(t;34kRCefy&Ljk&|$4L?Y0AH=-9p=}XgsOpAzD?ID>?e_$CFrai5{Jb)jk?P4hn%%v$?~4Ex4@} zG)9LWHxhh&GyuGD&u)B6?QX6W@vikH=cAL8QCR<6e_T?MAuIt1$MT-L z?bQ2gwZIm)&o5`(N6tqfWk7Qf*6WkiVOE7ZH_2fKOP=jL3^-c40`@NkqBFPn?6cjt z(Q}R8xY=tYFAI)C)!2#N3Mv>kM?dh$sX8aa z1~z>HD;p4#K%tF;^C%en`V*ifH{n}Y!J8cJ)x+u28po-xOUs^ClvGrfBUmja>W+?% z5&z1`a3o-jAp>bu=?NREOus7c(a9B^=ZZ0ORlfh6`^df}TvhVg8&M)$N)}6kGfwx> z1)BMa4}_{onZ&!{kQaV*fe9Z0=K}T0Oh1_*R_)kZo%>)l+z0nkOhJ*A;DYH|?stM? z5X=nD4`FTzTTD#n&GMmq%#_9`Q_SAKn@G;XR;<&BM`7 zjYQJ#SzS!N{fYIJ;7x(DxmxoCkf%ZCMV4`939S2T&P|XbLxoWif%>KhNpvt{q9rg93VqEVA)3`ijYaD1b$!3lz0fk>kP1yQE-psNxlz5<^53YHl>xlE@))P*<3| zf01*jXFEIEN1OjKiL2aRde^Z634SdrNc1KW_IxRW53_Jpc*U~FJNI%2Ln-{pm zbX#K&)ybjW!Q%N14S6;(7^>PEa3`Qkz+pzaJG!o}yfYtMY`%n(!||SNnAhFzt8tZ9 zebnIj4#72@udg6VFtC4wc>ulm35PeW;7X7nHcaj^05f(p@d7~tcmIelKT@NM=`80M z2j@S3^f!ZUaj|ATu5|8{?B$pv@zxlJN3X_HOsdR7J94Hf&EyP7pU46A41uf(C?vHr zOyuOODC8(&U)}X=FIl)pXqqk)o}i?eLxj_FCURFsJxi2z%)S=P@lUg!u$D7~ow$Tu z<{UqqfrmpLI>J`sa76jV=#>+oWJ=SpZh}r-!kB!xInDbTNvMxVw7_{-PDhMOP#T9C!Q~ zmM!VuI9X@4DdSYV|2jPyGBE>CVM|OueVjc2+J-TCEnLKY3_pKF8K@^Hg(-i)7PSPn zc}>y=oJLxHOMGYyO|$a9VfE00z}MICZUv62)c7(}P{@M)1f^;j1XI*wIG%=rv*v>p z<)BW(iNM=eZkt%b;9pCr<(|wKsk``p%KGkbEZew$B^8kpvMMS&BO@bZJXBV;%#^)% zqGV)LM#ybN_FhHyYLQjhB19o0DWs_Mey;a;e}Da+4IJ-^@2x-FHj z2(HYyoTtQ^0*xWH_P6`|pVs75h9KvgPoq@B5=M4a{Wz(r!%<#hC&mJ~InhXfIfaLy z^-2Tz)gO-VWd@m-+k#dh9JF3v-o@fnS$Su9k2E^$_qFab;RYnkNrdIf0{Sh;TAJGZ z*)+sXeYl9uV;dn(A_MmM8C*xDqobzB832SZF7uKabDv#h8HJ@d&10{pM{t8am(xJO zeo!xP@*V8FBc5L%-4GvHdiq-S^lcITxzd^m2j8@$q`4=)X^@!<98-zR0I0A2;8YZd zTD0j>5F=p$Rx}*&yLL?&xgzkEYk)3-$<_wO$?o(s=`d87`_7Q)(uYlxzTg<11@tpR=CTJs~m`ScLWLx;Ly|foE5q@tA6~mr{59A3?KkY(Grkqp-D8Vb>qO} zwFE`j`o>HKJX)qRl%ZtPq1!HoNue#DAF0eA&vyUR*0{M)tXUZE5+QX^uXs?W#>Ff@ z^~H@TQck;L^$QJKmKb5SrCCTxr*P^mO`HxH&!ox{z6EKbCODAD>0cc{CoSJ#B8zPVGIgMtH(* zo0t16q>ikud7;&%YUem^JEMl-pS-W!GvE9PPN2xcvMHQu36Ee0l~4IZ%=dM5b%fqR zGx6Ce561?^Ql-uVQT2;u4LjIzV_I>gU7iI;akY1Ap`zHq?$WSy%KdYi&s~)B2+Urp zWLapsvOw6v5o7{GixF{V6K6Skr`!0o8*pqd!X4b9+GzOnP}*Bn%w_B%akztxBP3|y z$y&>etI=dHbI#wt8{f;;ih5jX*Pj02LrVUcr z{sY^s9K|C361T=UYps0c5o{@HJA9r6Q)r%k3o+h_*iH<=IQ$iNKZXkwG&C(S_;0)Y z^r`&+{tNyCGEX)XmpnZ^TOsNWO-xJ#uA2>-i2+Z?XTdH+0PJ?c2b8G%chxf~kN(c* zryKi`Aa#J;uA<`bLYQg2*BubVUebqfSpY={Ot9-SK$05C56sNW*d#1y%^>fNNM(PJ zo_+y9y+c*XqesHwO&vHn?Rzq|;d6Kkggwj`l+htvp<`N_K?7gRhr z`HYH2q(tBC^au+8gp9KFUw*$kLL~C_d%D`&A6fB{s>aTqmqPIXSK|502nWoGri~v- z0RiYx0ekRsW>|}{VB(;~zyg(3FQ%c7K0I&J*d-(k#TAyE{I3GaQK_u)+yv_+>#W-p;FZ&i+$QSD~_12J5 ztY9aYe5Iz9UDJy7sVKq=9y~Fkgu4Q7%sqlhYSkg76P-So`E4Q|zu|5?{Wo=%%@jRZ zhjhcp<0$R;mwvoH=@U=}!^}e4-p7c+sdUZgHv`J~UTmyPr~$B|k}!?*LF5h$8q(ec`aUTX#FOe6&0q$l^N%?8+W^~G)~(p%ef z|28D%oamIo^H$Z@jG+{m%?ts5A|g<2dI%i&D#8cD)Iv}gYG z(5j;`)@>a!EWgZJzbsEMDyMyd{UMZ1Y+Tm*uMnyy)_J%YIg zR-4(bCrxqZnS})oyAvkWkq|Zy3Q{)V(-VmU@J>xE&00u*#D+qwWhb5d+WLB)QKgMb zoz<1|`xIf#kpdQV!t=7MtgJoJ;g=+-nq6j{P76S<0W<2@*Eh5keWNhnfsRZvVMy^1 zM+KjG@7iLG<|x#F%N0F^P~*4lh+y!%X!|Oy?&=Z?c_EWQzK{5YiQx)CfXlWo?{UpLLRn8n{Jl zQj*>I_oBL$HX6iWo4JRs!BoNdyt=v-Jk!MLhSyWFWH@Wk!5(^aD7PzQa6lD>e6Z$1 zvjDUgv%)JlTVJ3XhGZr3MKu6SYG#p;U5Bp)f8}0zu#9@j>2_~ z3Av$yL<)Ll!7eUN!rZKe)!;Bx(&1b)J{y0<(j_;e8hzhtmr%h5+F z4hs+O&r;rlYaqZ2%uHVMTAJX2(4@Y6`O@vrFZU~!mROQpr%qMByP|#h@@2xN0>x(^ zv+!7Lrkeg!0LCz4bh%5m2L=;t^mT9VW?go?;-Y?-zBZgQ) z3P4zlq^0Yp9R=%mR~c&{P7WKcs#Rtg#|r6?ae;csKH_f0#VLX`fT{s-#tMR$L_qxH zj}HLb#*6`c;Xab`RF71aS5Ph7#&d?2Llcbx730tGgfYCgcuSQ6uK8`2O!?jIo@f&xg~VZhCPyKdGp3wCe zS37m!hM7CLJBHr93=OKxYPTq=N0IUGFL#3t*fEz$LeV;n9$DYvU4GGJVJ5;Ph}rVS zN(Xlt16B#1J-$UvC=%8K1KzPmg_==3_>4bPy zX%~(k_M78C4QmBVHGYLr#hdW)pfmWOCn1Nopo3WpFQ0@Cv%xst;Tg=Dzc5z06ipn6 zKRi%42ILe^-3=pq?m+==;56v+MoJG{7tL79(3~b2noj|6J+KthO# z+^vd7KN#EVJMa#$E~yU;q!i{A_(_=hW7ErH-L^Klww1w*MVW5*zmDYG3BjPTO9asjQRXi?T|NegXN7ynnAIjX( z%=fI46ja6=B_n_=3dQ+8o;21{4G~*WVpZ9*-$LqX;Mu3pa zN@Bh&G|VoG=8-MfLtsRNT^}=`7k;J{5Zo{HQP-wI57N(wW%3m40ed5X-ug52KIM-r z|9^OuKUd2~c?C!1nF8@yp07MSLDH>c#2k=|I^U?=7=uHWQ5e0!g z>VLIVR#Bk>#pk}<^z$y(Rs=e(+ZdDYzzGKl${1D5&<09T1csmQutFbvk8Z*{>->GL zqr$>kWJDKFI-cpMML!UVwo(JU-y_pk?d|RRa0WAiyE%xmT;Y#VW&1uru6*T5q~~zC zoPoTW9RlUMPL<#xdK-N`_cJr|qAx4tDG2r)LFfkAOPqOKHzHB0DCNNvJ?XIp0Kot~ z3ns<}nJdz1;A#m_3BaGO6Zj#?2xYfQo`R3J>SMN%?HdcF*vf(T!jP>IwUqDFTrfMglA<4+CZR1tZQWJWvl=GKfF!Q(atzB*`+(J3p82jV<`1f~edCzlrdVV}QiD)Kh;b*S znBQV4Dw%*b{QwQ2lfrJB1Z=_gqxt_}CesR8AYpxNhp_NykXJQ{>-WJ@ipa`vA)H_v zXp$r$@hx0;M0=)^9Sd27V!B!Ljgh{#ahza8I3E$$^pT&RUPW6=VygM~*KFMD+;!z; zfG) z38UwD{M+inWSs@mja^LZ=&cqtwB(fF}D77_s$CmmL-A^(B*#wo5MMQ zbJ&mwg20@52eC1CdwR6ATWPxy?x+OX39K|YfhcKdeY&ogplP%M&r7f^DBL86 zOShhBP185w-0!cj?z+3Lw-g(LW&`_%86qO=f^4j390!U-5)__ar=K|If4Ge=ErgMS z=12tYfg>>!&^IaL{q4A2@h~L@BWH^4&>=JDqiJYVmCA=#v0m$q z*kpa;y0g#~<^$mWEe*lpU2KIy1P9uuwZ}HkB1-#=d$T8dJA(Vtg9Yj%` zajM5jED|ENtkU*gv2vjf57j~&6ZKBa|HQ=tRl-GB&tkG7<`z8UXwWXhDEPee6yBaN z26g~_JCB*jWOg7S1YlYc?i7$amrl+dUBsnnVoehrBP<9gF)02z2M!!i0+jg+&z?!{ zMs0Cxp$89@F~!AdCuUgrIRpjEI$!@`61AZQWbg@1g-f#J)K{LCiwqXsNhe`EBRV2{ za2@x}HT&kx1%5)8tSr@ad!<-^n~aPM5l%^%3b0dg%U=@f96VGYu*X{5Eo=|{5U}C8 zfa@l%FUx|QISK;cEpFzU2%+X{{X!fU57SeW9=!&D6YMyS+cp3ZrUGwhlHun=nheT$ z8%{TS{E#Asub`Ni7{%r}{LD2#wQNJ29;b*MK+Hey6XN2YV?kWo+W72RFI~-`nXBod z%Oe3OnjYO2F^~~n!YdHI<8~_{cAzzaB={E47J*{X%6tn1|3s&_`y~8Jh|)R%wF*4&%qBYGQsp zj%bESkllEdXpHgSP+oMjwBRNUGGhgYmdImwB?%;KcON>08DG(B?2C+`r)Rk#uIu^ zlP{m)+=tZ^J;5*4xPr~hoNIdf(R-rJn#l}5ds96UChT?&#L%p^w(f_PoZyS$U$#nasSL(?k0w(R znY%9^K$$j0cSf-3LHMgfwtr`JnW)!;2!^}t%WAGo)ECv*uVWmvVh-fP#rdif{Bmqh z-%X9UE$!(Upm28X8QQK7de_c!f3zeqQGvywNa|Ug)rNlMxP=d8XWznM0wCmN7>x^;Q42iX76;4jOd5WnB8P_!5Om_E?#Y z!XMK5lk#5bfo&O-@dq0g{6zI_Js-(GHJyU;j{GO(lHD{|R8pTXIYK34(&ap6%D{{rbZ#w?eOY+=P;6(C z5B*B^lF$lkCai0+zOfF9)0IO5pX?S=%!d`S3ttpfJ+$Lew*W@M6r~~~<8|ChZf}jj z8;3#4gREpa3Xtt#;*0P2-sU818rKpocb+esNULEU$h)1k%<2vwmwyHWvj9krw z$pWei&^Lq_!@Ruw$zv^!5bM9%P#Zv0!7S_drmzcS;2)d^K;6isQ0yw{r+G zWbH{-7kfLj^2U{wSK#D!YTlJh30c;-XKoCayFV5(pIIGAc|kqz!@p?Y6?3o>_ndji zTy^@^BXOgsiYS2vGOdxw=EA=*4~16RGS_!`lXci19;pB8GvL5b%(&NL;8>dc48N;f zip54x%0qDu>tD_7yDLZN9?L|xFPpLP9lBPvt6Xr>^Wd+w1P?t0dI|xmSn`nucE>$d zuAyT}^4iTLDzDei8uncCev)#Dvq_kyFyqWF3foNf!&GlNer`srtDc|AWQeHUp4Yth zH0{&ObhQn$uBXrJ=499mnkllwCJL(BRE%y}-^(whJxufT)2WRTXLeGZquZMs!{i?WCNT&|dn!8^liu2PM{y}Fx@3-Tl6McuNK-k(yE{QfhE zWVSf%cIC7SA5~6CTXD(zlxKsE6p_v4&;LuT@Ef!76Qg)5+*1`p>)iD5r?_eC-IRv2 za-Y8lI2}sT_EqEjF~4g|N#V2k9=7*cJa!Y8+kb5nxp`tVTyIyPt5E-VO=6?lUDfA( z>EUCy@+^AY+wYNld@NPwt@{V!n;x~AibWk8T~|qAw>K{G&rNmsNB8^D3=x-eAx-6` zkY&ACp>o0+?~?lWuDr*ll|~Pb3xxG$txNDadVZr$e8y3JTAtPT66M< z>Db-n$^^TzLv z!yQ{>E790+Yux{MuZOT^Qi{;fJgHD|@Se&ue;3rpe{StgUly;VGs~Iit863QA)}Y- zkJtqC7gzp$Cv;9%)-j^-yzSOPtFlPRO^CUQQ{^!ZTkh#U$SuuN0Z8;T;y=hVvMb2 z)$}0&xva8v^5xUd8czROi!WaqBfIq{pxmE!xH;CQR)FuqH&&{k3xTdj_(YAe{P+q^ zvi2n^jvj4qaS03WR7(-smYs9Pes4zLA4?Glg<02_rV+W~w!Kkoa^IWx$Y^xVjf`$x zq#}j4ODKD3P(4^pj9g)4@E+a~>>BXx(2kqrOW8|V^2TT9i>;UanhHxDcPd;^dirv4 zyUUwQKi-0q>Q99^?Prt=A z341#JTA{GwzC#@&lq08S+#+9?8wglZ@?}$VZ(m9k~>Ce1tj2-zi1S(dFwdaoZOH{Y#e2GdT-!T0W{$Mhq$O$YnEm(Cb0jO!cQY|)aj*w>kvQS-XKqaFM; z&d;Df{KWL59tQ!2hE|$>+?33=hecy`BoRe>R8zYkMW)O2$X?M!@ZI)dR8%y0h zFP{r8F3#D`XlmFuP|2{PW$)I{ZG6cNNh>LAQo;=v_=I*x2c`&V4Xs?#S5o+KkmI}i zJb%*n1!`}(xVP-bu677@+)fjiJ^k>*UsBxme62$#Rn<;7b6EWiN>iR4WLBIIi@JC8 z*7?NzkqdWLm-cwK@bow8|1|7LZJBzml*jz*+=1$$>-&Bk&q$E9?i20fuF6QbY5h7` z#8+M+GpqeHwc$jl<0Z?3c56$!st&eK$wbDiQyzc&#Q6HCpVso(-@PGplM_^aORTk$ zL(&hP7athg4DC*Q$ z=~PVbxQXGde=j)YqJHz)jVjj49O^RTvyd4uI?-ZvliHMx`!%Jg+&IUybMkn0hL+Lv zm#`e8ii$Ai<$v*ZrTAF4e(0R9}Mwi`Cfe^Sq5SJNGQyIC?9NtZ;Su^KN<0GkY4{Ut9dt z?TK8Td~O-2z0-T4ESTlk%62U$tfysL*qz4US1We7Z@B#`U+JGdg?=qR4T_(N z?V87Z^Qsv2o?a|ypzcYE_hPFcUkQ7E^&qQ|`wj)dmH z^9GO6VfD5I1T;8b^8Z010|O+l$x}`oXCIA-8{so4qjRsPO4p+N9_B=#X4} zeRpg?89VIXPS{H4y}dYg*AZStEUQayV_ z?wWksKivMAa3lkPJY*O#MTZ%N5Iot#gRgc^J6HIE5xLaw&My@dk&hWA8>-tbZ|Dzm z=iB^oN}D(!NvXzB`b2rfXojYW?SmQL10bT0Awa9BtgJ)y5`bPZf)oU~((umT^2!yk zo5umCLW73U)VK;dXw^F{iM@7&GzrM*ZV(tq zqa)_*yMMN3SD_LBE5$^3lpC%R0yO9_2t^J^8Ix*S7O~s#`YOKSi8xWsChHdu01u3f zCJ=~u1c+y5Dw95W?dModD*IvT>%2>jT%Z_5<{LcyrUfA@rJBKjS3m2OH>~s1HfU zBXuhhWCn~?U6_N_PFw;7f-A5D%0>V!uuZN&O85QEY2^>}fPS1YncMiL-@pF?Ik25z zU)ieDC0rlA{`frlo;ITqe8kMqegng?M!E#vyaM^y{)Htx7!8oRndgVu#;A$F3opy%%UJ z2N{uS+EDG<_&tp5Wx&7RA4ICeySCjvoZw z)#k&6M~rIH3;1i&>Y924%M5#JEqF~8g%+#TE||2OQ^;Dh;t!7Fv-9w%K#)KdP~1?# z9?Y9lpFeYhUQvd8zi@Q4QyX-ewgIx%dGz=Qe>4MVt*@2u-o4Y|ox|+BgPr)ciH0Qz zY3M-G)=!;O<&W6-Sp+0Ca~%rIeS!GWgJqhVL8^I^!9VJo#RltTGxP0t9LvEa{Zx2O zURO=(rM4d$*7wrq3xuG;LYT>JqEX7Bs!3vMW=0w7KnjvBkSeAKTzl!fT>B!$SEt;3 zQrw1enzN!xcRYLvf=RWj9F>|l?Qk;DS{4iH;oj@BQ3WdshTh8(ZR@u}i-IdM9xg_Ocfw5N*K@#7^0NjUaV@a^J z>`~gKsijZ@QMYiOGOmjTXZzpp*za^papPnK-8F_B+$vNt5T++tqOQtX0>p$B0}4ih zVZ}yQ8>`N;8!Tb~Bmtl-WZzX)H%M~SF6ik12JgVaA@pa6mgONRZ+G`rfjt+m8bMAG z0sTJQFmxI`k{*vWy=apqaB|cKMfU1S9?lV zp3-ktXZQ~@GlC(ugQE>SngFJb8=_ta6h192nH5ztCk6lOo8~KWn@$;w|0g zwRo*1n>5JRDkT`rzifQy^IG}LDa+`6?g}37J2n-WR!#Y{3BSf&lwm3mfW)#q37U*h zp2CJGi2Kct@^y^tBm{krp>o1^R6%?85elJ$FrR=6|4#-!kdJ`5_B&J=t0#*ngOTm} zt~PoV&`{_!zPHmlxmnl2p$L&u#RNzUqJ*9ZwW-Ac(2A(wV`3~(c6~W_l1}@S5ioh| zhYtym#Sz;DI|HEtg5O;)8XJY|J1Qh}0gqk<50!wm2*(U@QTyrXkLPKo8S`A5)`_h1 z$oVL#_;N6QxOSgnPQc}+t@3XECl3}iO#kiT=n!+{{Og(Qp1Bgtl5IWG9qj30F)VZW zJx!9hW5SCil(=j}dt7}_IDP=-|NFZfAkeW3=pPwW2!iniS}E179oj4))(KP?x*G!L zQ_k=Ijy=$iC@z<}8OCrM7x&LJ)YMkcQJ~iK0dze2UP@ZU-nw_*3t!H0H__bh4r(Dm zkz-#&sB$&-JiFjA=gh&VJxq>iO>xbA1M)L&E(O=sB~HITP*Kx0O!Kp2R4MGZUy zzQZNE+7G3MiUwLdaeqGT`=Gs3ad4~WS4hdX#L8WC>Um`sT%~@`NSiL-3O*t2JiDUz zl>ML$%_&Y@*2>A}-?9wP8ECl~QrqYGW^x5c{u0;S(9jLtC;H5j?d#XWvOG`gZVvS& zS4|{3nzB!h$s0|vPLD=swn$T-<-d66-aT7jh7wK^NVH}-tY<4>~=Gz%Aj&t zzTh8gMw}xRr>yJf1nq+B)oZ(d&M7FoIVHhwz7i4BM6UI$^pZ(pNLO@-=g)WCB0M~` z$HMeR=95VMmEvQY3>k5Yi7EVi1^!ms9v^i}KTJPevZ{7}+EGKG);Zj?ByW-}bOo;KS(yy#*sJ#iVBj&cqQdc3~UUl&8dPw&Vk$}e&v|5hM z;^7ju5-)4Q2Y!~S{l~+j$9U9`F;}j?ttgexm3fZZOo$}9dhpzwgTCg6pb9P*O2$=> z7l#Kz+QTC(r#DZK6k)JC6&m=({b?YrkFiuIhNa+zrxdNG-jx_SE8ZCcg5l-Lc8KVm9W^ zsl@z_0XfkLpX3wGZPwEMgW6j1f{~m1kH4+D@O!nvPF>UHJB#e2e6G8hC>8okC4T>rtkZO!-RXE*gMCK}mBIzx z!xF`Jc?&3CFc=A*ao#_qAFbi@WODZ+t*v_EqDbCNG78G|S6aTE^!)#(JkD_Xf16dA zRvcoilQ*0d8d6-adE%X0OuzQT`-(R%#Q$tc^K59Gmcr9d`&P`86B=6{78PdL01uts zOl@&KRrJ(Vct;DhdD;wDW_WkHb)L?U!I$n!WZpDVC7&eDg+1k;4A(E%J}0Dv0cDJ5 zwJB=&%NaxaXZhvo8Q+hD<=S{oaLn801%!@QO%EP+5Gv}SV%ImpGI(B9K7Cia`pxOU zWwKi96nphSE1RU(iED!*+g ze}N@m${ZcW%Pz#*EDv6o+1^xrZCud5H!$|1-!N4k3vU69QA?Mw&wBKtTuL`N8XCTsHA(Y4)uU| zJMteCCMC3HJ5%;k#B8wU2!(ck;GL%1SPMz{M>O99MYB`_Nzux+&_WvA}@Tdp_hzzyFq}7P00o|a9 z!t2{Ib;7R)-?A^#Qf;I;95M2E9#AXh>ExIY9J$kWIXKm=X1+P;@dpet)S}LZ1eYQ zZqPC>vKfB)w!ofUBd$_^yf46$r$Auiq=q)O{KE-dX z%~f>BVdH^cm4uN<+S7(gZ^cjnU&w83Tw{k~dll?8%{-;n7==e?ydSy9QB-j*CsCiU zE=%0DIX0KI#w2uPfN+LsEQitnh4sJ&?J0v zO&QIgi7kIkni`{tsf%7`%^&#^WN=rA1AZkD8`#nkQfSl7*YTj)qRVK(jXVdCFO zjiW+*!QARx#;ITGRxR;o3AHNeVAYWV@)>2^juC#oOa0da3com9VpTR6DG$<}lg;xw z^+4@;bz@{ZNjBxA*=!z5rMy*#e`Ipr+cJZ0k3*wc-<;gjB6^;C-8ymQJXL0*tku`U z_EXbesxCBCDv?j5S=}u8cdKI9O9_l#2!}@5U{aN`ir4GPPlqzs?{}qM|F^5L{#<%) zf%y<)EcfSK3kPz~kOGV~Gx;S2Y8Z~k_cRsh)c*#1 za!FX;8=T?!D$y@~-zCEJ%(r>{U$fI;V20_a-T)fhR7!bXz1S|Pcwl$^Pz7LNOFtKy z6cbe+bEP7&UTWTq3n!a2MVd5Yb44TP^B#7MUAG>W4Aj>y@XDKzKDTpppt)jrC`sMT z`H|Ot0NdqC>i0zc?DajHqZa3LQSS4RCPClvZMXsRRC4|~I-}7+hWkN&?Acu9I^aM% z{grfUiu1d8)eozlj%>;~mX0ardu=OqM_=hE2X#z~@t0`i-dWVRn7wqJB$g~-YP-Ey zMnjc}M7ltAd&?`SrC* z#fbumC#^$@-yOI~eU%zj-QRTR2a@SiLjg|ra{Mdk`0w=1ar#pbI}!uVMw z;*B(`MofppBT7aibBSr2^a8M%4IC?_v1UqfY!U;P@T}rx<3`lIh6i5_ZsnObN3&H9 z4v9w144q6~@ZER7$$USwIHeWF;WO|Pf$EUK=K<^~0Y#93`E{I0U+#wjYwzei{zZm=&MRyFSEgtY{6CLqqPGA5 literal 36616 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

bRBhZpp*FfihJZhpb&R!3HSHt+4?IHa9smFU diff --git a/docs/_static/tutorials/table-lookup/3.final.graph.png b/docs/_static/tutorials/table-lookup/3.final.graph.png index 73b5ab86d4f1ca5d268902e370abcefe8349b25d..cb5756bc1186f64e7104e5df09cb890a2db8e03b 100644 GIT binary patch literal 22159 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 literal 16902 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 diff --git a/docs/_static/zama_home_docs.jpeg b/docs/_static/zama_home_docs.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e51821042d7cff4e66ad38c25f007f0ea57bcb47 GIT binary patch literal 85177 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 z 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%0AV!X@Wvu04rSZ%& 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 ASpWb4 literal 0 HcmV?d00001 diff --git a/docs/basics/compatibility.md b/docs/basics/compatibility.md new file mode 100644 index 000000000..cae688cd3 --- /dev/null +++ b/docs/basics/compatibility.md @@ -0,0 +1,192 @@ +# Compatibility + +## Supported operations + +Here are the operations you can use inside the function you are compiling. + +{% hint style="info" %} +Some of these operations are not supported between two encrypted values. A detailed error will be raised if you try to do something that is not supported. +{% endhint %} + +### Supported Python operators + +* [\_\_abs\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_abs\_\_) +* [\_\_add\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_add\_\_) +* [\_\_and\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_and\_\_) +* [\_\_eq\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_eq\_\_) +* [\_\_floordiv\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_floordiv\_\_) +* [\_\_ge\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_ge\_\_) +* [\_\_getitem\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_getitem\_\_) +* [\_\_gt\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_gt\_\_) +* [\_\_invert\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_invert\_\_) +* [\_\_le\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_le\_\_) +* [\_\_lshift\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_lshift\_\_) +* [\_\_lt\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_lt\_\_) +* [\_\_matmul\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_matmul\_\_) +* [\_\_mod\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_mod\_\_) +* [\_\_mul\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_mul\_\_) +* [\_\_ne\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_ne\_\_) +* [\_\_neg\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_neg\_\_) +* [\_\_or\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_or\_\_) +* [\_\_pos\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_pos\_\_) +* [\_\_pow\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_pow\_\_) +* [\_\_radd\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_radd\_\_) +* [\_\_rand\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_rand\_\_) +* [\_\_rfloordiv\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_rfloordiv\_\_) +* [\_\_rlshift\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_rlshift\_\_) +* [\_\_rmatmul\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_rmatmul\_\_) +* [\_\_rmod\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_rmod\_\_) +* [\_\_rmul\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_rmul\_\_) +* [\_\_ror\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_ror\_\_) +* [\_\_round\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_round\_\_) +* [\_\_rpow\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_rpow\_\_) +* [\_\_rrshift\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_rrshift\_\_) +* [\_\_rshift\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_rshift\_\_) +* [\_\_rsub\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_rsub\_\_) +* [\_\_rtruediv\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_rtruediv\_\_) +* [\_\_rxor\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_rxor\_\_) +* [\_\_sub\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_sub\_\_) +* [\_\_truediv\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_truediv\_\_) +* [\_\_xor\_\_](https://docs.python.org/3/reference/datamodel.html#object.\_\_xor\_\_) + +### Supported NumPy functions + + + +* [np.absolute](https://numpy.org/doc/stable/reference/generated/numpy.absolute.html) +* [np.add](https://numpy.org/doc/stable/reference/generated/numpy.add.html) +* [np.arccos](https://numpy.org/doc/stable/reference/generated/numpy.arccos.html) +* [np.arccosh](https://numpy.org/doc/stable/reference/generated/numpy.arccosh.html) +* [np.arcsin](https://numpy.org/doc/stable/reference/generated/numpy.arcsin.html) +* [np.arcsinh](https://numpy.org/doc/stable/reference/generated/numpy.arcsinh.html) +* [np.arctan](https://numpy.org/doc/stable/reference/generated/numpy.arctan.html) +* [np.arctan2](https://numpy.org/doc/stable/reference/generated/numpy.arctan2.html) +* [np.arctanh](https://numpy.org/doc/stable/reference/generated/numpy.arctanh.html) +* [np.around](https://numpy.org/doc/stable/reference/generated/numpy.around.html) +* [np.bitwise\_and](https://numpy.org/doc/stable/reference/generated/numpy.bitwise\_and.html) +* [np.bitwise\_or](https://numpy.org/doc/stable/reference/generated/numpy.bitwise\_or.html) +* [np.bitwise\_xor](https://numpy.org/doc/stable/reference/generated/numpy.bitwise\_xor.html) +* [np.cbrt](https://numpy.org/doc/stable/reference/generated/numpy.cbrt.html) +* [np.ceil](https://numpy.org/doc/stable/reference/generated/numpy.ceil.html) +* [np.clip](https://numpy.org/doc/stable/reference/generated/numpy.clip.html) +* [np.concatenate](https://numpy.org/doc/stable/reference/generated/numpy.concatenate.html) +* [np.copysign](https://numpy.org/doc/stable/reference/generated/numpy.copysign.html) +* [np.cos](https://numpy.org/doc/stable/reference/generated/numpy.cos.html) +* [np.cosh](https://numpy.org/doc/stable/reference/generated/numpy.cosh.html) +* [np.deg2rad](https://numpy.org/doc/stable/reference/generated/numpy.deg2rad.html) +* [np.degrees](https://numpy.org/doc/stable/reference/generated/numpy.degrees.html) +* [np.dot](https://numpy.org/doc/stable/reference/generated/numpy.dot.html) +* [np.equal](https://numpy.org/doc/stable/reference/generated/numpy.equal.html) +* [np.exp](https://numpy.org/doc/stable/reference/generated/numpy.exp.html) +* [np.exp2](https://numpy.org/doc/stable/reference/generated/numpy.exp2.html) +* [np.expm1](https://numpy.org/doc/stable/reference/generated/numpy.expm1.html) +* [np.fabs](https://numpy.org/doc/stable/reference/generated/numpy.fabs.html) +* [np.float\_power](https://numpy.org/doc/stable/reference/generated/numpy.float\_power.html) +* [np.floor](https://numpy.org/doc/stable/reference/generated/numpy.floor.html) +* [np.floor\_divide](https://numpy.org/doc/stable/reference/generated/numpy.floor\_divide.html) +* [np.fmax](https://numpy.org/doc/stable/reference/generated/numpy.fmax.html) +* [np.fmin](https://numpy.org/doc/stable/reference/generated/numpy.fmin.html) +* [np.fmod](https://numpy.org/doc/stable/reference/generated/numpy.fmod.html) +* [np.gcd](https://numpy.org/doc/stable/reference/generated/numpy.gcd.html) +* [np.greater](https://numpy.org/doc/stable/reference/generated/numpy.greater.html) +* [np.greater\_equal](https://numpy.org/doc/stable/reference/generated/numpy.greater\_equal.html) +* [np.heaviside](https://numpy.org/doc/stable/reference/generated/numpy.heaviside.html) +* [np.hypot](https://numpy.org/doc/stable/reference/generated/numpy.hypot.html) +* [np.invert](https://numpy.org/doc/stable/reference/generated/numpy.invert.html) +* [np.isfinite](https://numpy.org/doc/stable/reference/generated/numpy.isfinite.html) +* [np.isinf](https://numpy.org/doc/stable/reference/generated/numpy.isinf.html) +* [np.isnan](https://numpy.org/doc/stable/reference/generated/numpy.isnan.html) +* [np.lcm](https://numpy.org/doc/stable/reference/generated/numpy.lcm.html) +* [np.ldexp](https://numpy.org/doc/stable/reference/generated/numpy.ldexp.html) +* [np.left\_shift](https://numpy.org/doc/stable/reference/generated/numpy.left\_shift.html) +* [np.less](https://numpy.org/doc/stable/reference/generated/numpy.less.html) +* [np.less\_equal](https://numpy.org/doc/stable/reference/generated/numpy.less\_equal.html) +* [np.log](https://numpy.org/doc/stable/reference/generated/numpy.log.html) +* [np.log10](https://numpy.org/doc/stable/reference/generated/numpy.log10.html) +* [np.log1p](https://numpy.org/doc/stable/reference/generated/numpy.log1p.html) +* [np.log2](https://numpy.org/doc/stable/reference/generated/numpy.log2.html) +* [np.logaddexp](https://numpy.org/doc/stable/reference/generated/numpy.logaddexp.html) +* [np.logaddexp2](https://numpy.org/doc/stable/reference/generated/numpy.logaddexp2.html) +* [np.logical\_and](https://numpy.org/doc/stable/reference/generated/numpy.logical\_and.html) +* [np.logical\_not](https://numpy.org/doc/stable/reference/generated/numpy.logical\_not.html) +* [np.logical\_or](https://numpy.org/doc/stable/reference/generated/numpy.logical\_or.html) +* [np.logical\_xor](https://numpy.org/doc/stable/reference/generated/numpy.logical\_xor.html) +* [np.matmul](https://numpy.org/doc/stable/reference/generated/numpy.matmul.html) +* [np.maximum](https://numpy.org/doc/stable/reference/generated/numpy.maximum.html) +* [np.minimum](https://numpy.org/doc/stable/reference/generated/numpy.minimum.html) +* [np.multiply](https://numpy.org/doc/stable/reference/generated/numpy.multiply.html) +* [np.negative](https://numpy.org/doc/stable/reference/generated/numpy.negative.html) +* [np.nextafter](https://numpy.org/doc/stable/reference/generated/numpy.nextafter.html) +* [np.not\_equal](https://numpy.org/doc/stable/reference/generated/numpy.not\_equal.html) +* [np.ones\_like](https://numpy.org/doc/stable/reference/generated/numpy.ones\_like.html) +* [np.positive](https://numpy.org/doc/stable/reference/generated/numpy.positive.html) +* [np.power](https://numpy.org/doc/stable/reference/generated/numpy.power.html) +* [np.rad2deg](https://numpy.org/doc/stable/reference/generated/numpy.rad2deg.html) +* [np.radians](https://numpy.org/doc/stable/reference/generated/numpy.radians.html) +* [np.reciprocal](https://numpy.org/doc/stable/reference/generated/numpy.reciprocal.html) +* [np.remainder](https://numpy.org/doc/stable/reference/generated/numpy.remainder.html) +* [np.reshape](https://numpy.org/doc/stable/reference/generated/numpy.reshape.html) +* [np.right\_shift](https://numpy.org/doc/stable/reference/generated/numpy.right\_shift.html) +* [np.rint](https://numpy.org/doc/stable/reference/generated/numpy.rint.html) +* [np.round\_](https://numpy.org/doc/stable/reference/generated/numpy.round\_.html) +* [np.sign](https://numpy.org/doc/stable/reference/generated/numpy.sign.html) +* [np.signbit](https://numpy.org/doc/stable/reference/generated/numpy.signbit.html) +* [np.sin](https://numpy.org/doc/stable/reference/generated/numpy.sin.html) +* [np.sinh](https://numpy.org/doc/stable/reference/generated/numpy.sinh.html) +* [np.spacing](https://numpy.org/doc/stable/reference/generated/numpy.spacing.html) +* [np.sqrt](https://numpy.org/doc/stable/reference/generated/numpy.sqrt.html) +* [np.square](https://numpy.org/doc/stable/reference/generated/numpy.square.html) +* [np.subtract](https://numpy.org/doc/stable/reference/generated/numpy.subtract.html) +* [np.sum](https://numpy.org/doc/stable/reference/generated/numpy.sum.html) +* [np.tan](https://numpy.org/doc/stable/reference/generated/numpy.tan.html) +* [np.tanh](https://numpy.org/doc/stable/reference/generated/numpy.tanh.html) +* [np.transpose](https://numpy.org/doc/stable/reference/generated/numpy.transpose.html) +* [np.true\_divide](https://numpy.org/doc/stable/reference/generated/numpy.true\_divide.html) +* [np.trunc](https://numpy.org/doc/stable/reference/generated/numpy.trunc.html) +* [np.where](https://numpy.org/doc/stable/reference/generated/numpy.where.html) +* [np.zeros\_like](https://numpy.org/doc/stable/reference/generated/numpy.zeros\_like.html) + + +### Supported `ndarray` methods + +* [np.ndarray.astype](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.astype.html) +* [np.ndarray.clip](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.clip.html) +* [np.ndarray.dot](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.dot.html) +* [np.ndarray.flatten](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.flatten.html) +* [np.ndarray.reshape](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.reshape.html) +* [np.ndarray.transpose](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.transpose.html) + +### Supported `ndarray` properties + +* [np.ndarray.shape](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.shape.html) +* [np.ndarray.ndim](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.ndim.html) +* [np.ndarray.size](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.size.html) +* [np.ndarray.T](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.T.html) + +## Limitations + +### Operational constraints + +Some Python control flow statements are not supported. For example, you cannot have an `if` statement or a `while` statement for which the condition depends on an encrypted value. However, such statements are supported with constant values (e.g., `for i in range(SOME_CONSTANT)`, `if os.environ.get("SOME_FEATURE") == "ON":`). + +Another constraint is that you cannot have floating-point inputs or floating-point outputs. You can have floating-point intermediate values as long as they can be converted to an integer Table Lookup (e.g., `(60 * np.sin(x)).astype(np.int64)`). + +### Bit width constraints + +There is a limit on the bit width of encrypted values. We are constantly working on increasing this bit width. If you go above this limit, you will get an error. + +### Computation constraints + +One of the most common operations in **Concrete Numpy** is `Table Lookups` (TLUs). TLUs are performed with an FHE operation called `Programmable Bootstrapping` (PBS). PBSes have a certain probability of error, which, when triggered, result in inaccurate results. + +Let's say you have the table: + +```python +[1, 4, 9, 16, 25, 36, 49, 64] +``` + +And you performed a table lookup using `4`, The result you should get is `16`, but because of the possibility of error, you can sometimes get `9` or `25`. + +{% hint style="info" %} +The probability of this error can be configured through the `p_error` configuration option, which has the default value of `0.000063342483999973` (i.e., probability of success is `99.993`%). Keep in mind that changing it could affect compilation and key generation times. +{% endhint %} diff --git a/docs/basics/compiling_and_executing.md b/docs/basics/compiling_and_executing.md deleted file mode 100644 index fae2c7adf..000000000 --- a/docs/basics/compiling_and_executing.md +++ /dev/null @@ -1,103 +0,0 @@ -# Compiling and Executing your first function - -## Importing necessary components - -Everything you need to compile and execute homomorphic functions is included in a single module. You can import it like so: - -```python -import concrete.numpy as cnp -``` - -## Defining a function to compile - -You need to have a python function that follows the [limits](../explanation/fhe\_and\_framework_limits.md) of **Concrete Numpy**. Here is a simple example: - - -```python -def f(x, y): - return x + y -``` - -## Compiling the function - -To compile the function, you need to identify the inputs that it is expecting. In the example function above, `x` and `y` could be scalars or tensors (though, for now, only dot between tensors are supported), they can be encrypted or clear, they can be signed or unsigned, they can have different bit-widths. So, we need to know what they are beforehand. We can do that like so: - - -```python -x = "encrypted" -y = "encrypted" -``` - -In this configuration, both `x` and `y` will be encrypted values. - -We also need an inputset. It is to determine the bit-widths of the intermediate results. It should be an iterable yielding tuples in the same order as the inputs of the function to compile. There should be at least 10 inputs in the input set to avoid warnings (except for functions with less than 10 possible inputs). The warning is there because the bigger the input set, the better the bounds will be. - - -```python -inputset = [(2, 3), (0, 0), (1, 6), (7, 7), (7, 1), (3, 2), (6, 1), (1, 7), (4, 5), (5, 4)] -``` - -Finally, we can compile our function to its homomorphic equivalent. - - -```python -compiler = cnp.Compiler(f, {"x": x, "y": y}) -circuit = compiler.compile(inputset) - -# You can print the compiled circuit: -print(circuit) - -# Outputs - -# %0 = x # EncryptedScalar -# %1 = y # EncryptedScalar -# %2 = add(%0, %1) # EncryptedScalar -# return %2 - -# Or draw it -circuit.draw(show=True) -``` - -Here is the graph from the previous code block drawn with `draw`: - -![Drawn graph of previous code block](../\_static/basics/compiling\_and\_executing\_example\_graph.png) - -## Performing homomorphic evaluation - -You can use `.encrypt_run_decrypt(...)` method of `Circuit` to perform fully homomorphic evaluation. Here are some examples: - - -```python -circuit.encrypt_run_decrypt(3, 4) -# 7 -circuit.encrypt_run_decrypt(1, 2) -# 3 -circuit.encrypt_run_decrypt(7, 7) -# 14 -circuit.encrypt_run_decrypt(0, 0) -# 0 -``` - -{% hint style="warning" %} -Be careful about the inputs, though. If you were to run with values outside the range of the inputset, the result might not be correct. -{% endhint %} - -While `.encrypt_run_decrypt(...)` is a good start for prototyping examples, more advanced usages require control over the different steps that are happening behind the scene, mainly key generation, encryption, execution, and decryption. The different steps can of course be called separately as in the example below: - - -```python -# generate keys required for encrypted computation -circuit.keygen() -# this will encrypt arguments that require encryption and pack all arguments -# as well as public materials (public keys) -public_args = circuit.encrypt(3, 4) -# this will run the encrypted computation using public materials and inputs provided -encrypted_result = circuit.run(public_args) -# the execution returns the encrypted result which can later be decrypted -decrypted_result = circuit.decrypt(encrypted_result) -``` - -## Further reading - -* [Working With Floating Points Tutorial](../tutorial/working\_with\_floating\_points.md) -* [Table Lookup Tutorial](../tutorial/table\_lookup.md) diff --git a/docs/basics/installing.md b/docs/basics/installing.md index d8140e9d2..6910d6577 100644 --- a/docs/basics/installing.md +++ b/docs/basics/installing.md @@ -1,62 +1,55 @@ -# Installing +# Installation -## Python package +**Concrete Numpy** is natively supported on Linux and macOS for Python 3.8 and 3.9, but if you have Docker support in your platform, you can use the docker image to use **Concrete Numpy**. -To install **Concrete Numpy** from PyPi, run the following: +## Using PyPI + +You can install **Concrete Numpy** from PyPI: ```shell pip install concrete-numpy ``` -{% hint style='info' %} -Note that **concrete-numpy** has `pygraphviz` as an optional dependency to draw graphs. +{% hint style="warning" %} +Apple silicon users must use docker installation (explained below) as there is no ARM version of some of our dependencies for the time being. {% endhint %} -{% hint style='info' %} -`pygraphviz` requires `graphviz` packages being installed on your OS, see https://pygraphviz.github.io/documentation/stable/install.html -{% endhint %} - -{% hint style='tip' %} -`graphviz` packages are binary packages that won't automatically be installed by pip. -Do check https://pygraphviz.github.io/documentation/stable/install.html for instructions on how to install `graphviz` for `pygraphviz`. -{% endhint %} - -You can install the extra python dependencies for drawing with: +You can install the extra python dependencies for drawing circuits: ```shell pip install concrete-numpy[full] -# you may need to force reinstallation -pip install --force-reinstall concrete-numpy[full] ``` -## Docker image +{% hint style="info" %} +**Concrete Numpy** depends on `pygraphviz` for drawing, which requires `graphviz` packages to be installed on your system (see [pygraphviz installation documentation](https://pygraphviz.github.io/documentation/stable/install.html)). +{% endhint %} -You can also get the **concrete-numpy** docker image by either pulling the latest docker image or a specific version: +## Using Docker + +You can also get the **Concrete Numpy** docker image: ```shell -docker pull zamafhe/concrete-numpy:latest -# or -docker pull zamafhe/concrete-numpy:v0.2.0 +docker pull zamafhe/concrete-numpy:v0.6.0 ``` -The image can be used with docker volumes, [see the docker documentation here](https://docs.docker.com/storage/volumes/). +### Starting Jupyter server -You can then use this image with the following command: +By default, the entry point of the **Concrete Numpy** docker image is a jupyter server that you can access from your browser: ```shell -docker run --rm -it -p 8888:8888 zamafhe/concrete-numpy:v0.2.0 +docker run --rm -it -p 8888:8888 zamafhe/concrete-numpy:latest ``` -or with local volume to save notebooks on host: - -``` -docker run --rm -it -p 8888:8888 -v /host/path:/data zamafhe/concrete-numpy:v0.2.0 -``` - -This will launch a **Concrete Numpy** enabled jupyter server in the docker, that you can access from your browser. - -Alternatively, you can just open a shell in the docker with or without volumes: +To save notebooks on host, you can use a local volume: ```shell -docker run --rm -it zamafhe/concrete-numpy:v0.2.0 /bin/bash +docker run --rm -it -p 8888:8888 -v /path/to/notebooks:/data zamafhe/concrete-numpy:latest +``` + +### Starting Bash session + +Alternatively, you can launch a Bash session: + +```shell +docker run --rm -it zamafhe/concrete-numpy:latest /bin/bash ``` diff --git a/docs/basics/numpy_support.md b/docs/basics/numpy_support.md deleted file mode 100644 index 422518699..000000000 --- a/docs/basics/numpy_support.md +++ /dev/null @@ -1,148 +0,0 @@ -# Numpy Support - -In this section, we list the operations which are supported currently in **Concrete Numpy**. Please have a look to numpy [documentation](https://numpy.org/doc/stable/user/index.html) to know what these operations are about. - - - -List of supported functions: -- absolute -- add -- arccos -- arccosh -- arcsin -- arcsinh -- arctan -- arctan2 -- arctanh -- around -- bitwise_and -- bitwise_or -- bitwise_xor -- cbrt -- ceil -- clip -- concatenate -- copysign -- cos -- cosh -- deg2rad -- degrees -- dot -- equal -- exp -- exp2 -- expm1 -- fabs -- float_power -- floor -- floor_divide -- fmax -- fmin -- fmod -- gcd -- greater -- greater_equal -- heaviside -- hypot -- invert -- isfinite -- isinf -- isnan -- lcm -- ldexp -- left_shift -- less -- less_equal -- log -- log10 -- log1p -- log2 -- logaddexp -- logaddexp2 -- logical_and -- logical_not -- logical_or -- logical_xor -- matmul -- maximum -- minimum -- multiply -- negative -- nextafter -- not_equal -- ones_like -- positive -- power -- rad2deg -- radians -- reciprocal -- remainder -- reshape -- right_shift -- rint -- round_ -- sign -- signbit -- sin -- sinh -- spacing -- sqrt -- square -- subtract -- sum -- tan -- tanh -- transpose -- true_divide -- trunc -- where -- zeros_like - - -# Shapes - -Our encrypted tensors have shapes just like numpy arrays. -We determine the shapes of the inputs from the inputset, and we infer the shapes of the intermediate values from the function that is being compiled. - -You can access the shape of a tensor by accessing the `shape` property, just like in numpy. -Here is an example: - -```python -def function_to_compile(x): - return x.reshape((x.shape[0], -1)) -``` - -One important aspect of our library is that, scalars are tensors of shape `()`. -This is transparent to you, as a user, but it's something to keep in mind, especialy if you are accessing the `shape` property in the functions that you are compiling. -This schema is used by numpy and pytorch as well. - -## Indexing - -Indexing is described in [this section](../tutorial/indexing.md). - -## Other machine-learning-related operators - -We support (sometimes, with limits) some other operators: - -- dot: one of the operators must be non-encrypted -- clip: the minimum and maximum values must be constant -- transpose -- ravel -- reshape: the shapes must be constant -- flatten -- matmul: one of the two matrices must be non-encrypted. Only 2D matrix multiplication is supported for now - -## Operators which are not numpy-restricted - -The framework also gives support for: - -- shifts, i.e., `x op y` for `op` in `[<<, >>, ]`: if one of `x` or `y` is a constant -- boolean test operations, i.e., `x op y` for `op` in `[<, <=, ==, !=, >, >=]`: if one of `x` or `y` is a constant -- boolean operators, i.e., `x op y` for `op` in `[&, ^, |]`: if one of `x` or `y` is a constant -- powers, i.e., `x ** y`: if one of `x` or `y` is a constant -- modulo, i.e., `x % y`: if one of `x` or `y` is a constant -- invert, i.e., `~x` -- true div, i.e., `x / y`: if one of `x` or `y` is a constant -- floor div, i.e., `x // y`: if one of `x` or `y` is a constant - -There is support for astype as well, e.g. `x.astype(numpy.int64)`. This allows to control which data type to use for computations. In the context of FHE going back to integers may allow to fuse floating point operations together, see [this tutorial](../tutorial/working_with_floating_points.md) to see how to work with floating point values. diff --git a/docs/basics/quick_start.md b/docs/basics/quick_start.md new file mode 100644 index 000000000..49ac7a497 --- /dev/null +++ b/docs/basics/quick_start.md @@ -0,0 +1,86 @@ +# Quick Start + +To compute on encrypted data, you first need to define the function that you want to compute, then compile it into a Concrete Numpy `Circuit`, which you can use to perform homomorphic evaluation. + +Here is the full example that we will walk through: + +```python +import concrete.numpy as cnp + +def add(x, y): + return x + y + +compiler = cnp.Compiler(add, {"x": "encrypted", "y": "clear"}) + +inputset = [(2, 3), (0, 0), (1, 6), (7, 7), (7, 1)] +circuit = compiler.compile(inputset) + +x = 4 +y = 4 + +clear_evaluation = add(x, y) +homomorphic_evaluation = circuit.encrypt_run_decrypt(x, y) + +print(x, "+", y, "=", clear_evaluation, "=", homomorphic_evaluation) +``` + +## Importing the library + +Everything you need to perform homomorphic evaluation is included in a single module: + + +```python +import concrete.numpy as cnp +``` + +## Defining the function to compile + +In this example, we will compile a simple addition function: + + +```python +def add(x, y): + return x + y +``` + +## Creating a compiler + +To compile the function, you need to create a `Compiler` by specifying the function to compile and encryption status of its inputs: + + +```python +compiler = cnp.Compiler(add, {"x": "encrypted", "y": "clear"}) +``` + +## Defining an inputset + +An inputset is a collection representing the typical inputs to the function. It is used to determine the bit widths and shapes of the variables within the function. + +It should be an iterable, yielding tuples of the same length as the number of arguments of the function being compiled: + + +```python +inputset = [(2, 3), (0, 0), (1, 6), (7, 7), (7, 1)] +``` + +## Compiling the function + +You can use the `compile` method of a `Compiler` class with an inputset to perform the compilation and get the resulting circuit back: + + +```python +circuit = compiler.compile(inputset) +``` + +## Performing homomorphic evaluation + +You can use the `encrypt_run_decrypt` method of a `Circuit` class to perform homomorphic evaluation: + + +```python +homomorphic_evaluation = circuit.encrypt_run_decrypt(4, 4) +``` + +{% hint style="info" %} +`circuit.encrypt_run_decrypt(*args)` is just a convenient way to do everything at once. It is implemented as `circuit.decrypt(circuit.run(circuit.encrypt(*args)))`. +{% endhint %} diff --git a/docs/dev/compilation.md b/docs/dev/compilation.md index c94aeb601..b2ce940bf 100644 --- a/docs/dev/compilation.md +++ b/docs/dev/compilation.md @@ -1,45 +1,14 @@ -# Compilation Pipeline In Depth +# Compilation -## What is **concrete-numpy**? - -**concrete-numpy** is a convenient python package, made on top of **Concrete compiler** and **Concrete library**, for developing homomorphic applications. One of its essential functionalities is to transform Python functions to their `MLIR` equivalent. Unfortunately, not all python functions can be converted due to the limits of current product (we are in the alpha stage), or sometimes due to inherent restrictions of FHE itself. However, you can already build interesting and impressing use cases, and more will be available in further versions of the framework. - -## How can I use it? - -```python -# Import necessary Concrete components -import concrete.numpy as cnp - -# Define the function to homomorphize -def f(x, y): - return (2 * x) + y - -# Create a Compiler -compiler = cnp.Compiler(f, {"x": "encrypted", "y": "encrypted"}) - -# Compile to a Circuit using an inputset -inputset = [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 0), (3, 1)] -circuit = compiler.compile(inputset) - -# Make homomorphic inference -circuit.encrypt_run_decrypt(1, 0) -``` - -## Overview of the numpy compilation process - -The compilation journey begins with tracing to get an easy to understand and manipulate representation of the function. We call this representation `Computation Graph` which is basically a Directed Acyclic Graph (DAG) containing nodes representing the computations done in the function. Working with graphs is good because they have been studied extensively over the years and there are a lot of algorithms to manipulate them. Internally, we use [networkx](https://networkx.org) which is an excellent graph library for Python. +The compilation journey begins with tracing to get an easy-to-manipulate representation of the function. We call this representation a `Computation Graph`, which is basically a Directed Acyclic Graph (DAG) containing nodes representing the computations done in the function. Working with graphs is good because they have been studied extensively over the years and there are a lot of algorithms to manipulate them. Internally, we use [networkx](https://networkx.org), which is an excellent graph library for Python. The next step in the compilation is transforming the computation graph. There are many transformations we perform, and they will be discussed in their own sections. In any case, the result of transformations is just another computation graph. -After transformations are applied, we need to determine the bounds (i.e., the minimum and the maximum values) of each intermediate node. This is required because FHE currently allows a limited precision for computations. Bound measurement is our way to know what is the needed precision for the function. +After transformations are applied, we need to determine the bounds (i.e., the minimum and the maximum values) of each intermediate node. This is required because FHE currently allows a limited precision for computations. Bound measurement is our way to know what is the required precision for the function. The final step is to transform the computation graph to equivalent `MLIR` code. How this is done will be explained in detail in its own chapter. -Once the MLIR is prepared, the rest of the stack, which you can learn more about [here](http://docs.zama.ai/), takes over and completes the compilation process. - -Here is the visual representation of the pipeline: - -![Frontend Flow](../_static/compilation-pipeline/frontend_flow.svg) +Once the MLIR is generated, we send it to the **Concrete Compiler**, and it completes the compilation process. ## Tracing @@ -52,13 +21,11 @@ def f(x): the goal of tracing is to create the following computation graph without needing any change from the user. -![](../_static/compilation-pipeline/two_x_plus_three.png) +![](../\_static/compilation-pipeline/two\_x\_plus\_three.png) (Note that the edge labels are for non-commutative operations. To give an example, a subtraction node represents `(predecessor with edge label 0) - (predecessor with edge label 1)`) -To do this, we make use of Tracers, which are objects that record the operation performed during their creation. We create a `Tracer` for each argument of the function and call the function with those tracers. Tracers make use of operator overloading feature of Python to achieve their goal. - -Here is an example: +To do this, we make use of `Tracer`s, which are objects that record the operation performed during their creation. We create a `Tracer` for each argument of the function and call the function with those tracers. `Tracer`s make use of the operator overloading feature of Python to achieve their goal: ``` def f(x, y): @@ -70,11 +37,11 @@ y = Tracer(computation=Input("y")) resulting_tracer = f(x, y) ``` -`2 * y` will be performed first, and `*` is overloaded for `Tracer` to return another tracer: `Tracer(computation=Multiply(Constant(2), self.computation))` which is equal to: `Tracer(computation=Multiply(Constant(2), Input("y")))` +`2 * y` will be performed first, and `*` is overloaded for `Tracer` to return another tracer: `Tracer(computation=Multiply(Constant(2), self.computation))`, which is equal to `Tracer(computation=Multiply(Constant(2), Input("y")))` -`x + (2 * y)` will be performed next, and `+` is overloaded for `Tracer` to return another tracer: `Tracer(computation=Add(self.computation, (2 * y).computation))` which is equal to: `Tracer(computation=Add(Input("x"), Multiply(Constant(2), Input("y")))` +`x + (2 * y)` will be performed next, and `+` is overloaded for `Tracer` to return another tracer: `Tracer(computation=Add(self.computation, (2 * y).computation))`, which is equal to `Tracer(computation=Add(Input("x"), Multiply(Constant(2), Input("y")))` -In the end, we will have output Tracers that can be used to create the computation graph. The implementation is a bit more complex than this, but the idea is the same. +In the end, we will have output tracers that can be used to create the computation graph. The implementation is a bit more complex than this, but the idea is the same. Tracing is also responsible for indicating whether the values in the node would be encrypted or not, and the rule for that is if a node has an encrypted predecessor, it is encrypted as well. @@ -86,33 +53,33 @@ With the current version of **Concrete Numpy**, floating point inputs and floati Let's take a closer look at the transforms we can currently perform. -### Fusing floating point operations +### Fusing. -We have allocated a whole new chapter to explaining float fusing. You can find it [here](float-fusing.md). +We have allocated a whole new chapter to explaining fusing. You can find it after this chapter. ## Bounds measurement Given a computation graph, the goal of the bound measurement step is to assign the minimal data type to each node in the graph. -Let's say we have an encrypted input that is always between `0` and `10`, we should assign the type `Encrypted` to node of this input as `Encrypted` is the minimal encrypted integer that supports all the values between `0` and `10`. +Let's say we have an encrypted input that is always between `0` and `10`. We should assign the type `Encrypted` to the node of this input as `Encrypted` is the minimal encrypted integer that supports all values between `0` and `10`. If there were negative values in the range, we could have used `intX` instead of `uintX`. -Bounds measurement is necessary because FHE supports limited precision, and we don't want unexpected behaviour during evaluation of the compiled functions. +Bounds measurement is necessary because FHE supports limited precision, and we don't want unexpected behaviour while evaluating the compiled functions. Let's take a closer look at how we perform bounds measurement. -### Inputset evaluation +### Inputset evaluation. This is a simple approach that requires an inputset to be provided by the user. -The inputset is not to be confused with the dataset which is classical in ML, as it doesn't require labels. Rather, it is a set of values which are typical inputs of the function. +The inputset is not to be confused with the dataset, which is classical in ML, as it doesn't require labels. Rather, it is a set of values which are typical inputs of the function. -The idea is to evaluate each input in the inputset and record the result of each operation in the computation graph. Then we compare the evaluation results with the current minimum/maximum values of each node and update the minimum/maximum accordingly. After the entire inputset is evaluated, we assign a data type to each node using the minimum and the maximum value it contains. +The idea is to evaluate each input in the inputset and record the result of each operation in the computation graph. Then we compare the evaluation results with the current minimum/maximum values of each node and update the minimum/maximum accordingly. After the entire inputset is evaluated, we assign a data type to each node using the minimum and the maximum values it contains. Here is an example, given this computation graph where `x` is encrypted: -![](../_static/compilation-pipeline/two_x_plus_three.png) +![](../\_static/compilation-pipeline/two\_x\_plus\_three.png) and this inputset: @@ -178,156 +145,4 @@ Assigned Data Types: ## MLIR conversion -The actual compilation will be done by the **Concrete** compiler, which is expecting an MLIR input. The MLIR conversion goes from a computation graph to its MLIR equivalent. You can read more about it [here](mlir.md) - -## Example walkthrough #1 - -### Function to homomorphize - -``` -def f(x): - return (2 * x) + 3 -``` - -### Parameters - -``` -x = "encrypted" -``` - -#### Corresponding computation graph - -![](../_static/compilation-pipeline/two_x_plus_three.png) - -### Topological transforms - -#### Fusing floating point operations - -This transform isn't applied since the computation doesn't involve any floating point operations. - -### Bounds measurement using \[2, 3, 1] as inputset (same settings as above) - -Data Types: - -* `x`: Encrypted<**uint2**> -* `2`: Clear<**uint2**> -* `*`: Encrypted<**uint3**> -* `3`: Clear<**uint2**> -* `+`: Encrypted<**uint4**> - -### MLIR lowering - -``` -module { - func @main(%arg0: !FHE.eint<4>) -> !FHE.eint<4> { - %c3_i5 = constant 3 : i5 - %c2_i5 = constant 2 : i5 - %0 = "FHE.mul_eint_int"(%arg0, %c2_i5) : (!FHE.eint<4>, i5) -> !FHE.eint<4> - %1 = "FHE.add_eint_int"(%0, %c3_i5) : (!FHE.eint<4>, i5) -> !FHE.eint<4> - return %1 : !FHE.eint<4> - } -} -``` - -## Example walkthrough #2 - -### Function to homomorphize - -``` -def f(x, y): - return (42 - x) + (y * 2) -``` - -### Parameters - -``` -x = "encrypted" -y = "encrypted" -``` - -#### Corresponding computation graph - -![](../_static/compilation-pipeline/forty_two_minus_x_plus_y_times_two.png) - -### Topological transforms - -#### Fusing floating point operations - -This transform isn't applied since the computation doesn't involve any floating point operations. - -### Bounds measurement using \[(6, 0), (5, 1), (3, 0), (4, 1)] as inputset - -Evaluation Result of `(6, 0)`: - -* `42`: 42 -* `x`: 6 -* `y`: 0 -* `2`: 2 -* `-`: 36 -* `*`: 0 -* `+`: 36 - -Evaluation Result of `(5, 1)`: - -* `42`: 42 -* `x`: 5 -* `y`: 1 -* `2`: 2 -* `-`: 37 -* `*`: 2 -* `+`: 39 - -Evaluation Result of `(3, 0)`: - -* `42`: 42 -* `x`: 3 -* `y`: 0 -* `2`: 2 -* `-`: 39 -* `*`: 0 -* `+`: 39 - -Evaluation Result of `(4, 1)`: - -* `42`: 42 -* `x`: 4 -* `y`: 1 -* `2`: 2 -* `-`: 38 -* `*`: 2 -* `+`: 40 - -Bounds: - -* `42`: \[42, 42] -* `x`: \[3, 6] -* `y`: \[0, 1] -* `2`: \[2, 2] -* `-`: \[36, 39] -* `*`: \[0, 2] -* `+`: \[36, 40] - -Data Types: - -* `42`: Clear<**uint6**> -* `x`: Encrypted<**uint3**> -* `y`: Encrypted<**uint1**> -* `2`: Clear<**uint2**> -* `-`: Encrypted<**uint6**> -* `*`: Encrypted<**uint2**> -* `+`: Encrypted<**uint6**> - -### MLIR lowering - -``` -module { - func @main(%arg0: !FHE.eint<6>, %arg1: !FHE.eint<6>) -> !FHE.eint<6> { - %c42_i7 = constant 42 : i7 - %c2_i7 = constant 2 : i7 - %0 = "FHE.sub_int_eint"(%c42_i7, %arg0) : (i7, !FHE.eint<6>) -> !FHE.eint<6> - %1 = "FHE.mul_eint_int"(%arg1, %c2_i7) : (!FHE.eint<6>, i7) -> !FHE.eint<6> - %2 = "FHE.add_eint"(%0, %1) : (!FHE.eint<6>, !FHE.eint<6>) -> !FHE.eint<6> - return %2 : !FHE.eint<6> - } -} -``` +The actual compilation will be done by the **Concrete Compiler**, which is expecting an MLIR input. The MLIR conversion goes from a computation graph to its MLIR equivalent. You can read more about it [here](mlir.md). diff --git a/docs/dev/contributing.md b/docs/dev/contributing.md index 092f3cf62..08c1d272a 100644 --- a/docs/dev/contributing.md +++ b/docs/dev/contributing.md @@ -1,64 +1,60 @@ +# Contribute -# Contributing +{% hint style="info" %} +There are two ways to contribute to **Concrete Numpy** or to **Concrete** tools in general: -{% hint style='info' %} -There are two ways to contribute to **concrete-numpy** or to **Concrete** tools in general: -- you can open issues to report bugs and typos and to suggest ideas -- you can ask to become an official contributor by emailing hello@zama.ai. Only approved contributors can send pull requests, so please make sure to get in touch before you do! +* You can open issues to report bugs and typos and to suggest ideas. +* You can ask to become an official contributor by emailing hello@zama.ai. Only approved contributors can send pull requests, so please make sure to get in touch before you do! {% endhint %} -Let's go over some other important things that you need to be careful about. +Now, let's go over some other important items that you need to know. ## Creating a new branch -We are using a consistent branch naming scheme, and you are expected to follow it as well. Here is the format and some examples. +We are using a consistent branch naming scheme, and you are expected to follow it as well. Here is the format: ```shell -git checkout -b {feat|fix|refactor|test|benchmark|doc|style|chore}/short-description_$issue_id +git checkout -b {feat|fix|refactor|test|benchmark|doc|style|chore}/short-description ``` -e.g. +...and some examples: ```shell -git checkout -b feat/explicit-tlu_11 -git checkout -b fix/tracing_indexing_42 +git checkout -b feat/direct-tlu +git checkout -b fix/tracing-indexing ``` ## Before committing -### Conformance +### Conformance. -Each commit to **concrete-numpy** should conform to the standards decided by the team. Conformance can be checked using the following command. +Each commit to **Concrete Numpy** should conform to the standards decided by the team. Conformance can be checked using the following command: ```shell make pcc ``` -### pytest +### Testing. -Of course, tests must pass as well. +On top of conformance, all tests must pass with 100% code coverage across the codebase: ```shell make pytest ``` -### Coverage +{% hint style="info" %} +There may be cases where covering 100% of the code is not possible (e.g., exceptions that cannot be triggered in normal execution circumstances). In those cases, you may be allowed to disable coverage for some specific lines. This should be the exception rather than the rule. Reviewers may ask why some lines are not covered and, if it appears they can be covered, then the PR won't be accepted in that state. +{% endhint %} -The last requirement is to make sure you get 100 percent code coverage. The `make pytest` command checks that by default and will fail with a coverage report at the end should some lines of your code not be executed during testing. +## Committing -If your coverage is below 100 percent, you should write more tests and then create the pull request. If you ignore this warning and create the PR, GitHub actions will fail and your PR will not be merged anyway. - -There may be cases where covering you code is not possible (exception that cannot be triggered in normal execution circumstances), in those cases you may be allowed to disable coverage for some specific lines. This should be the exception rather than the rule and reviewers will ask why some lines are not covered and if it appears they can be covered then the PR won't be accepted in that state. - -## Commiting - -We are using a consistent commit naming scheme, and you are expected to follow it as well (the CI will make sure you do). The accepted format can be printed to your terminal by running: +We are using a consistent commit naming scheme, and you are expected to follow it as well. Again, here is the accepted format: ```shell make show_scope ``` -e.g. +...and some examples: ```shell git commit -m "feat: implement bounds checking" @@ -66,15 +62,15 @@ git commit -m "feat(debugging): add an helper function to draw intermediate repr git commit -m "fix(tracing): fix a bug that crashed pytorch tracer" ``` -To learn more about conventional commits, check [this](https://www.conventionalcommits.org/en/v1.0.0/) page. Just a reminder that commit messages are checked in the comformance step, and rejected if they don't follow the rules. +To learn more about conventional commits, check [this](https://www.conventionalcommits.org/en/v1.0.0/) page. -## Before creating pull request +## Before creating a pull request -{% hint style='tip' %} -We remind that only official contributors can send pull requests. To become such an official contributor, please email hello@zama.ai. +{% hint style="info" %} +We remind you that only official contributors can send pull requests. To become an official contributor, please email hello@zama.ai. {% endhint %} -You should rebase on top of `main` branch before you create your pull request. We don't allow merge commits, so rebasing on `main` before pushing gives you the best chance of avoiding having to rewrite parts of your PR later if some conflicts arise with other PRs being merged. After you commit your changes to your new branch, you can use the following commands to rebase: +You should rebase on top of the `main` branch before you create your pull request. We don't allow merge commits, so rebasing on `main` before pushing gives you the best chance of avoiding rewriting parts of your PR later if conflicts arise with other PRs being merged. After you commit your changes to your new branch, you can use the following commands to rebase: ```shell # fetch the list of active remote branches diff --git a/docs/dev/docker.md b/docs/dev/docker.md index ea2fb5b7e..ee8303875 100644 --- a/docs/dev/docker.md +++ b/docs/dev/docker.md @@ -1,54 +1,45 @@ -# Docker +# Docker Setup -## Setting up docker and X forwarding +## Installation -Before you start this section, go ahead and install docker. You can follow [this](https://docs.docker.com/engine/install/) official guide for that. +Before you start this section, go ahead and install Docker. You can follow [this](https://docs.docker.com/engine/install/) official guide if you need help. -### Linux +## X forwarding + +### Linux. + +You can use xhost command: ```shell xhost +localhost ``` -### Mac OS +### macOS. -To be able to use X forwarding on Mac OS: -- Install XQuartz -- Open XQuartz.app application, make sure in the application parameters that `authorize network connections` are set (currently in the Security settings) -- Open a new terminal within XQuartz.app and type: +To use X forwarding on Mac OS: + +* Install XQuartz +* Open XQuartz.app application, make sure in the application parameters that `authorize network connections` are set (currently in the Security settings) +* Open a new terminal within XQuartz.app and type: ```shell xhost +127.0.0.1 ``` -and now, the X server should be all set in docker (in the regular terminal). +X server should be all set for Docker in the regular terminal. -### Windows +## Building -Install Xming and use Xlaunch: -- Multiple Windows, Display number: 0 -- `Start no client` -- **IMPORTANT**: Check `No Access Control` -- You can save this configuration to re-launch easily, then click finish. - -## Logging in and building the image - -Docker image of **Concrete-Numpy** is based on another docker image provided by the compiler team. Once you have access to this repository you should be able to launch the commands to build the dev docker image with `make docker_build`. - -Upon joining to the team, you need to log in using the following command: +You can use the dedicated target in the Makefile to build the docker image: ```shell -docker login ghcr.io +make docker_build ``` -This command will ask for a username and a password. For username, just enter your GitHub username. For password, you should create a personal access token from [here](https://github.com/settings/tokens) selecting `read:packages` permission. Just paste the generated access token as your password, and you are good to go. +## Starting -Once you do that, you can get inside the docker environment using the following command: +You can use the dedicated target in the Makefile to start the docker session: ```shell -make docker_build_and_start -# or equivalently but shorter -make docker_bas +make docker_start ``` - -After you finish your work, you can leave the docker by using the `exit` command or by pressing `CTRL + D`. diff --git a/docs/dev/float-fusing.md b/docs/dev/float-fusing.md deleted file mode 100644 index 769b91c05..000000000 --- a/docs/dev/float-fusing.md +++ /dev/null @@ -1,86 +0,0 @@ -# Fusing Floating Point Operations - -## Why is it needed? - -The current compiler stack only supports integers with 7 bits or less. But it's not uncommon to have numpy code using floating point numbers. - -We added fusing floating point operations to make tracing numpy functions somewhat user friendly to allow in-line quantization in the numpy code e.g.: - - -```python -import numpy - -def quantized_sin(x): - # from a 7 bit unsigned integer x, compute z in the [0; 2 * pi] range - z = 2 * numpy.pi * x * (1 / 127) - # quantize over 6 bits and offset to be >= 0, round and convert to integers in range [0; 63] - quantized_sin = numpy.rint(31 * numpy.sin(z) + 31).astype(numpy.int64) - # output quantized_sin and a further offset result - return quantized_sin, quantized_sin + 32 -``` - -This function `quantized_sin` is not strictly supported as is by the compiler as there are floating point intermediate values. However, when looking at the function globally we can see we have a single integer input and a single integer output. As we know the input range we can compute a table to represent the whole computation for each input value, which can later be lowered to a PBS in the FHE world. - -Any computation where there is a single variable integer input and a single integer output can be replaced by an equivalent table lookup. - -The `quantized_sin` graph of operations: - -![](../_static/float_fusing_example/before.png) - -The float subgraph that was detected: - -![](../_static/float_fusing_example/subgraph.png) - -The simplified graph of operations with the float subgraph condensed in a `GenericFunction` node: - -![](../_static/float_fusing_example/after.png) - -## How is it done in **Concrete Numpy**? - -The first step consists in detecting where we go from floating point computation back to integers. This allows the identification of the potential terminal node of the float subgraph we are going to fuse. - -From the terminal node, we go back up through the nodes until we find nodes that go from integers to floats. If we find a single node then we have a fusable subgraph that we replace by an equivalent GenericFunction node and stop the search for fusable subgraphs for the terminal node being considered. If we find more than one such node we try to find a single common ancestor that would go from integers to floats. We repeat the process as long as there are potential ancestors nodes, stopping if we find a suitable float subgraph with a single integer input and a single integer output. - -Here is an example benefiting from the expanded search: - - -```python -def fusable_with_bigger_search(x, y): - """fusable with bigger search""" - x = x + 1 - x_1 = x.astype(numpy.int64) - x_1 = x_1 + 1.5 - x_2 = x.astype(numpy.int64) - x_2 = x_2 + 3.4 - add = x_1 + x_2 - add_int = add.astype(numpy.int64) - return add_int + y -``` - -The `fusable_with_bigger_search` graph of operations: - -![](../_static/float_fusing_example/before_bigger_search.png) - -The float subgraph that was detected: - -![](../_static/float_fusing_example/subgraph_bigger_search.png) - -The simplified graph of operations with the float subgraph condensed in a `GenericFunction` node: - -![](../_static/float_fusing_example/after_bigger_search.png) - -An example of a non fusable computation with that technique is: - - -```python -import numpy - -def non_fusable(x, y): - x_1 = x + 1.5 # x_1 is now float - y_1 = y + 3.4 # y_1 is now float - add = x_1 + y_1 - add_int = add.astype(numpy.int64) - return add_int -``` - -From `add_int` you will find two `Add` nodes going from int to float (`x_1` and `y_1`) which we cannot represent with a single input table look-up. Kolmogorov–Arnold representation theorem states that every multivariate continuous function can be represented as a superposition of continuous functions of one variable ([from Wikipedia](https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Arnold\_representation\_theorem)), so the above case could be handled in future versions of **Concrete** tools. diff --git a/docs/dev/fusing.md b/docs/dev/fusing.md new file mode 100644 index 000000000..c7f249191 --- /dev/null +++ b/docs/dev/fusing.md @@ -0,0 +1,37 @@ +# Fusing + +Fusing is the act of combining multiple nodes into a single node, which is converted to a table lookup. + +## How is it done? + +Code related to fusing is in the `concrete/numpy/compilation/utils.py` file. + +Fusing can be performed using the `fuse` function. Within `fuse`: + +1. We loop until there are no more subgraphs to fuse. +2. Within each iteration: +3. We find a subgraph to fuse. + + 3.1. We search for a terminal node that is appropriate for fusing. + + 3.2. We crawl backwards to find the closest integer nodes to this node. + + 3.3. If there is a single node as such, we return the subgraph from this node to the terminal node. + + 3.4. Otherwise, we try to find the lowest common ancestor (lca) of this list of nodes. + + 3.5. If lca doesn't exist, we say this particular terminal node is not fusable, and we go back to search for another subgraph. + + 3.6. Otherwise, we use this lca as the input of the subgraph and continue with `subgraph` node creation below. +4. We convert the subgraph into a `subgraph` node + + 4.1. We check fusability status of the nodes of the subgraph in this step. +5. We substitute the `subgraph` node to the original graph. + +## Limitations + +With the current implementation, we cannot fuse subgraphs that depend on multiple encrypted values where those values doesn't have a common lca (e.g., `np.round(np.sin(x) + np.cos(y))`). + +{% hint style="info" %} +[Kolmogorov–Arnold representation theorem](https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Arnold\_representation\_theorem) states that every multivariate continuous function can be represented as a superposition of continuous functions of one variable. Therefore, the case above could be handled in future versions of **Concrete Numpy**. +{% endhint %} diff --git a/docs/dev/mlir.md b/docs/dev/mlir.md index 10234fbdd..50344b5e9 100644 --- a/docs/dev/mlir.md +++ b/docs/dev/mlir.md @@ -1,17 +1,17 @@ # MLIR -The MLIR project is a sub-project of the LLVM project. It's designed to simplify building domain-specific compilers such as ours: Concrete Compiler. +The MLIR project is a sub-project of the LLVM project. It's designed to simplify building domain-specific compilers such as our **Concrete Compiler**. -Concrete Compiler accepts MLIR as input and emits compiled assembly code for the target architecture. +**Concrete Compiler** accepts MLIR as an input and emits compiled assembly code for a target architecture. -Concrete NumPy does the MLIR generation from the computation graph. Code related to this conversion is in `concrete/numpy/mlir` folder. +**Concrete Numpy** performs the MLIR generation from the computation graph. Code related to this conversion is in the `concrete/numpy/mlir` folder. -The conversion can be performed using `convert` method of `GraphConverter` class. +The conversion can be performed using the `convert` method of the `GraphConverter` class. -Within `convert` method of `GraphConverter`: +Within the `convert` method of `GraphConverter`: -* MLIR compatibility of the graph is checked -* Bit-width constraints are checked -* Negative lookup tables are offsetted -* Computation graph is traversed and each node is converted to their corresponding MLIR representation using `NodeConverter` class -* String representation of resulting MLIR is returned +* MLIR compatibility of the graph is checked; +* bit width constraints are checked; +* negative lookup tables are offset; +* the computation graph is traversed and each node is converted to their corresponding MLIR representation using the `NodeConverter` class; +* and string representation of the resulting MLIR is returned. diff --git a/docs/dev/project_setup.md b/docs/dev/project_setup.md index 53466f0a9..976fdf1e5 100644 --- a/docs/dev/project_setup.md +++ b/docs/dev/project_setup.md @@ -1,171 +1,93 @@ # Project Setup -{% hint style='info' %} -It is strongly recommended to use the development docker (see the [docker](./docker.md) guide). However you can setup the project on bare macOS and Linux provided you install the required dependencies (check Dockerfile.env for the required binary packages like make). - -The project targets Python 3.8 through 3.9 inclusive. +{% hint style="info" %} +It is **strongly** recommended to use the development tool Docker. Though, you can set the project up on a bare Linux or macOS as long as you have the required dependencies. You can see the required dependencies in `Dockerfile.dev` under `docker` directory. {% endhint %} -## Installing Python +## Installing `Python` -**concrete-numpy** is a `Python` library, so `Python` should be installed to develop **concrete-numpy**. `v3.8` and `v3.9` are the only supported versions. +**Concrete Numpy** is a `Python` library, so `Python` should be installed to develop it. `v3.8` and `v3.9` are, currently, the only supported versions. -You can follow [this](https://realpython.com/installing-python/) guide to install it (alternatively you can google `how to install python 3.8 (or 3.9)`). +You probably have Python already, but in case you don't, or in case you have an unsupported version, you can google `how to install python 3.8` and follow one of the results. -## Installing Poetry +## Installing `Poetry` `Poetry` is our package manager. It drastically simplifies dependency and environment management. You can follow [this](https://python-poetry.org/docs/#installation) official guide to install it. -{% hint style='danger' %} -As there is no `concrete-compiler` package for Windows, only the dev dependencies can be installed. This requires poetry >= 1.2. +## Installing `make` -At the time of writing (January 2022), there is only an alpha version of poetry 1.2 that you can install. In the meantime we recommend following [this link to setup the docker environment](./docker.md) on Windows. -{% endhint %} +`make` is used to launch various commands such as formatting and testing. -## Installing make +On Linux, you can install `make` using the package manager of your distribution. -The dev tools use `make` to launch the various commands. - -On Linux you can install `make` from your distribution's preferred package manager. - -On Mac OS you can install a more recent version of `make` via brew: +On macOS, you can install `gmake` via brew: ```shell -# check for gmake -which gmake -# If you don't have it, it will error out, install gmake brew install make -# recheck, now you should have gmake -which gmake ``` -It is possible to install `gmake` as `make`, check this [StackOverflow post](https://stackoverflow.com/questions/38901894/how-can-i-install-a-newer-version-of-make-on-mac-os) for more info. - -On Windows check [this GitHub gist](https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058#make). - -{% hint style='tip' %} -In the following sections, be sure to use the proper `make` tool for your system: `make`, `gmake`, or other. +{% hint style="info" %} +In the following sections, be sure to use the proper `make` tool for your system (i.e., `make`, `gmake`, etc). {% endhint %} -## Cloning repository +## Cloning the repository -Now, it's time to get the source code of **concrete-numpy**. +Now, it's time to get the source code of **Concrete Numpy**. -Clone the code repository using the link for your favourite communication protocol (ssh or https). +Clone the git repository from GitHub using the protocol of your choice (ssh or https). -## Setting up environment on your host OS +## Setting up the environment -We are going to make use of virtual environments. This helps to keep the project isolated from other `Python` projects in the system. The following commands will create a new virtual environment under the project directory and install dependencies to it. +Virtual environments are utilized to keep the project isolated from other `Python` projects in the system. -{% hint style='danger' %} -The following command will not work on Windows if you don't have poetry >= 1.2. As poetry 1.2 is still in alpha we recommend following [this link to setup the docker environment](./docker.md) instead. -{% endhint %} +To create a new virtual environment and install dependencies, use the command: ```shell -cd concrete-numpy make setup_env ``` ## Activating the environment -Finally, all we need to do is to activate the newly created environment using the following command. - -### macOS or Linux +To activate the newly created environment, use: ```shell source .venv/bin/activate ``` -### Windows +## Syncing the environment + +From time to time, new dependencies will be added to the project and old ones will be removed. + +The command below will make sure the project has the proper environment, so run it regularly. ```shell -source .venv/Scripts/activate +make sync_env ``` -## Setting up environment on docker +## Troubleshooting -The docker automatically creates and sources a venv in ~/dev_venv/ +### In native setups. -The venv persists thanks to volumes. We also create a volume for ~/.cache to speed up later reinstallations. You can check which docker volumes exist with: - -```shell -docker volume ls -``` - -You can still run all `make` commands inside the docker (to update the venv, for example). Be mindful of the current venv being used (the name in parentheses at the beginning of your command prompt). - -```shell -# Here we have dev_venv sourced -(dev_venv) dev_user@8e299b32283c:/src$ make setup_env -``` - -## Leaving the environment - -After your work is done, you can simply run the following command to leave the environment. +If you are having issues in a native setup, you can try to re-create your environment like this: ```shell deactivate -``` - -## Syncing environment with the latest changes - -From time to time, new dependencies will be added to project or the old ones will be removed. The command below will make sure the project has the proper environment. So run it regularly! - -```shell -make sync_env -``` - -## Troubleshooting your environment - -### In your OS - -If you are having issues, consider using the dev docker exclusively (unless you are working on OS specific bug fixes or features). - -Here are the steps you can take on your OS to try and fix issues: - -```shell -# Try to install the env normally -make setup_env - -# If you are still having issues, sync the environment -make sync_env - -# If you are still having issues on your OS delete the venv: rm -rf .venv - -# And re-run the env setup make setup_env +source .venv/bin/activate ``` -At this point you should consider using docker as nobody will have the exact same setup as you, unless you need to develop on your OS directly, in which case you can ask us for help but may not get a solution right away. +If the problem persists, you should consider using Docker. If you are working on a platform specific feature and Docker is not an option, you should create an issue so that we can take a look at your problem. -### In docker +### In docker setups. -Here are the steps you can take in your docker to try and fix issues: +If you are having issues in a docker setup, you can try to re-build the docker image: ```shell -# Try to install the env normally -make setup_env - -# If you are still having issues, sync the environment -make sync_env - -# If you are still having issues in docker delete the venv: -rm -rf ~/dev_venv/* - -# Disconnect from the docker -exit - -# And relaunch, the venv will be reinstalled -make docker_start - -# If you are still out of luck, force a rebuild which will also delete the volumes make docker_rebuild - -# And start the docker which will reinstall the venv make docker_start ``` -If the problem persists at this point, you should consider asking for help. We're here and ready to assist! +If the problem persists, you should contact us for help. diff --git a/docs/dev/releasing.md b/docs/dev/releasing.md index 5f09d17a1..f92efa8d7 100644 --- a/docs/dev/releasing.md +++ b/docs/dev/releasing.md @@ -1,9 +1,17 @@ -# Creating A Release On GitHub +# Release process -## Release Candidate cycle +## Release candidate cycle -Before settling for a final release, we go through a Release Candidate (RC) cycle. The idea is that once the code base and documentations look ready for a release you create an RC Release by opening an issue with the release template [here](https://github.com/zama-ai/concrete-numpy-internal/issues/new?assignees=&labels=&template=release.md), starting with version `vX.Y.Zrc1` and then with versions `vX.Y.Zrc2`, `vX.Y.Zrc3`... +Throughout the quarter, many release candidatess are relesed. Those candidates are released in a private package repository. At the end of the quarter, we take the latest release candidate, and release it in PyPI without `rcX` tag. -## Proper release +## Release flow -Once the last RC is deemed ready, open an issue with the release template using the last RC version from which you remove the `rc?` part (i.e. `v12.67.19` if your last RC version was `v12.67.19-rc4`) on [github](https://github.com/zama-ai/concrete-numpy-internal/issues/new?assignees=&labels=&template=release.md). +* Checkout to the commit that you want to include in the release (everything before this commit and this commit will be in the release) +* Run `make release` +* Wait for CI to complete +* Checkout to `chore/version` branch +* Run `VERSION=a.b.c-rcX make set_version` with appropriate version +* Push the branch to origin +* Create a PR to merge it to main +* Wait for CI to finish and get approval in the meantime +* Merge the version update to main diff --git a/docs/dev/terminology_and_structure.md b/docs/dev/terminology_and_structure.md index 71b64f0a8..5f102a840 100644 --- a/docs/dev/terminology_and_structure.md +++ b/docs/dev/terminology_and_structure.md @@ -2,31 +2,25 @@ ## Terminology -In this section we will go over some terms that we use throughout the project. +Some terms used throughout the project include: -- intermediate representation - - a data structure to represent a computation - - basically a computation graph in which nodes are either inputs, constants, or operations on other nodes -- tracing - - it is the technique to take a python function from a user and generate intermediate representation corresponding to it in a painless way for the user -- bounds - - before intermediate representation is converted to MLIR, we need to know which node will output which type (e.g., uint3 vs uint5) - - there are several ways to do this but the simplest one is to evaluate the intermediate representation with some combinations of inputs and remember the maximum and the minimum values for each node, which is what we call bounds, and bounds can be used to determine the appropriate type for each node -- circuit - - it is the result of compilation - - it is made of the computation graph and the compiler engine - - it has methods for printing, visualizing, and evaluating +* computation graph - a data structure to represent a computation. This is basically a directed acyclic graph in which nodes are either inputs, constants or operations on other nodes. +* tracing - the technique that takes a Python function from the user and generates the corresponding computation graph in an easy to read format. +* bounds - before a computation graph is converted to MLIR, we need to know which node will output which type (e.g., uint3 vs euint5). Computation graphs with different inputs must remember the minimum and maximum values for each node, which is what we call bounds, and use bounds to determine the appropriate type for each node +* circuit - the result of compilation. A circuit is made of the client and server components and has methods, everything from printing and drawing to evaluation. ## Module structure -In this section, we will discuss the module structure of **concrete-numpy** briefly. You are encouraged to check individual `.py` files to learn more! +In this section, we will discuss the module structure of **Concrete Numpy** briefly. You are encouraged to check individual `.py` files to learn more. -- concrete - - numpy - - dtypes: data type specifications - - values: value specifications (i.e., data type + shape + encryption status) - - representation: representation of computation - - tracing: tracing of python functions - - extensions: custom functionality which is not available in numpy (e.g., conv2d) - - mlir: mlir conversion - - compilation: compilation from python functions to circuits +* Concrete + * Numpy + * dtypes - data type specifications + * values - value specifications (i.e., data type + shape + encryption status) + * representation - representation of computation + * tracing - tracing of Python functions + * extensions - custom functionality which is not available in NumPy (e.g., direct table lookups) + * MLIR - MLIR conversion + * compilation - compilation from a Python function to a circuit, client/server architecture + * ONNX + * convolution - custom convolution operations that follow the behavior of ONNX diff --git a/docs/explanation/fhe_and_framework_limits.md b/docs/explanation/fhe_and_framework_limits.md deleted file mode 100644 index b7f02880d..000000000 --- a/docs/explanation/fhe_and_framework_limits.md +++ /dev/null @@ -1,33 +0,0 @@ -# FHE and **Concrete Numpy** Limits - -## FHE limits - -FHE used to be an impossible thing to imagine, twenty years ago. Then, with advances due to [Craig Gentry](https://crypto.stanford.edu/craig/), this became a dream come true. And, even more recently, with several generations of new scheme, FHE became practical. - -### Speed - -However, one still has to consider that FHE is slow, as compared to the vanilla implementations. With the different HW pluggins that can be added to **Concrete**, an important speed factor can be achieved. - -### Multiplying by constants - -In the scheme used in **Concrete Numpy**, namely [TFHE](https://tfhe.github.io/tfhe/), multiplications by constants is only defined for integer constants. Notably, one can't multiply by floats. As float multiplication is very usual in the data science (think of weights of dense layers, for example), this could be a problem, but quantization is at our rescue. See [Quantization](https://docs.preprod.zama.ai/concrete-ml/main/user/explanation/quantization.html) section of Concrete ML documentation for more details. - -### Achieving computations of not-linear functions - -For most FHE scheme but TFHE, the application of a non-linear function is complicated and slow, if not impossible. Typically, this is a blocker, since activation functions _are_ non-linear. However, in the **Concrete Numpy** package, we use an operation called _programmable bootstrapping_ (described in this [white paper](https://whitepaper.zama.ai)), which allows to apply any table lookup: by quantizing the non-linear function, any function can thus be replaced. - -## Limits of this project - -Since this is an early version of the product, not everything is done, to say the least. What we wanted to tackle first was the cryptographic complexities. This is why we concentrated on the cryptographic part, and let some engineering problems for later. - -### Currently executing locally - -As of today, the execution of the FHE program is done locally. Notably, in the current version, there is no client (on which we encrypt the private data, or decrypt the returned result) or server (on which the computation is done completely over encrypted data), but a single host. As explained in [this section](future_features.md), this limit will be removed in the next version, such that **Concrete Numpy** can be used in production. - -### Currently slow - -As we explained, we wanted to focus first on cryptographic challenges. Performance has been postponed, and will be tackled in the next release. - -### Currently restricted to 7 bits computations - -For the moment, we can only perform computations with 7 bits or less. Furthermore, the exactness of computations is only ensured for 6 bits or less; for 7 bits, the computations are exact with a probability close to 90%. Of course, we are working on increasing this limit, and making the probability of a wrong computation as close to 0% as possible. Don't hesitate to look at [Quantization](https://docs.preprod.zama.ai/concrete-ml/main/user/explanation/quantization.html) section of Concrete ML documentation to know how to use smaller integers. diff --git a/docs/explanation/future_features.md b/docs/explanation/future_features.md deleted file mode 100644 index f75f54bb1..000000000 --- a/docs/explanation/future_features.md +++ /dev/null @@ -1,12 +0,0 @@ -# Future Features - -As explained in [this section](fhe_and_framework_limits.md#limits-of-this-project), the **Concrete Numpy** package -is currently in its first version, and is sometimes constrained in term of functionalities. However, the good -news is that we are going to release new versions regularly, and more functionality will be added progressively. - -In this page, we briefly list what the plans for next versions of **Concrete Numpy** are: -- **better performance**: further versions will contain improved versions of the **Concrete Library**, with faster -execution; also, the **Concrete Compiler** will be improved, to have faster local execution (with multi-threading -for example) and faster production execution (with distribution over a set of machines or use of hardware accelerations) -- **more complete benchmarks**: we will have an extended benchmark, containing lots of functions that you may want to compile; then, we will measure the framework progress by tracking the number of successfully compiled functions over time. Also, this public benchmark will be a way for other competing frameworks or technologies to compare fairly with us, in terms of functionality or performance -- **serialization**: we are going to add several utils, to serialize ciphertexts or keys diff --git a/docs/explanation/what_is_fhe.md b/docs/explanation/what_is_fhe.md deleted file mode 100644 index 0936b393b..000000000 --- a/docs/explanation/what_is_fhe.md +++ /dev/null @@ -1,12 +0,0 @@ -# What is FHE? - -Fully Homomorphic Encryption (FHE for short) is a technology that enables computing on encrypted data directly, without having to decrypt it. -Users would encrypt their data using their own secret key, then send it to your servers for processing. Your servers would process the encrypted data blindly, producing a result which itself is encrypted, and that only the user can decrypt with their secret key. - -From the user's perspective, nothing changes (but the fact that her data is never in clear on the server), they are still sending data to your service and getting a response. But you now no longer need to worry about securing your user data, as it is now encrypted both in transit and during processing, i.e., it is encrypted end-to-end. - -You can learn more about FHE using the following links: -- [quick overview](https://6min.zama.ai/) -- [monthly technical FHE.org meetup](https://www.meetup.com/fhe-org/) -- [videos and resources](http://fhe.org/) -- [Homomorphic Encryption 101](https://medium.com/zama-ai/homomorphic-encryption-101-c1524fb76013) diff --git a/docs/howto/configure.md b/docs/howto/configure.md new file mode 100644 index 000000000..f167cec41 --- /dev/null +++ b/docs/howto/configure.md @@ -0,0 +1,92 @@ +# Configure + +Behavior of **Concrete Numpy** can be customized using `Configuration`s: + +```python +import concrete.numpy as cnp +import numpy as np + +configuration = cnp.Configuration(p_error=0.01, loop_parallelize=True) + +@cnp.compiler({"x": "encrypted"}) +def f(x): + return x + 42 + +inputset = range(10) +circuit = f.compile(inputset, configuration=configuration) +``` + +Alternatively, you can overwrite individual options as kwargs to `compile` method: + +```python +import concrete.numpy as cnp +import numpy as np + +@cnp.compiler({"x": "encrypted"}) +def f(x): + return x + 42 + +inputset = range(10) +circuit = f.compile(inputset, p_error=0.01, loop_parallelize=True) +``` + +Or you can combine both: + +```python +import concrete.numpy as cnp +import numpy as np + +configuration = cnp.Configuration(p_error=0.01) + +@cnp.compiler({"x": "encrypted"}) +def f(x): + return x + 42 + +inputset = range(10) +circuit = f.compile(inputset, configuration=configuration, loop_parallelize=True) +``` + +{% hint style="info" %} +Additional kwarg to `compile` function have higher precedence. So if you set an option in both `configuration` and in `compile` method, the value in the `compile` method will be used. +{% endhint %} + +## Options + +* **show_graph**: bool = False + * Whether to print computation graph during compilation. + +* **show_mlir**: bool = False + * Whether to print MLIR during compilation. + +* **verbose**: bool = False + * Whether to print computation graph and MLIR during compilation. + +* **dump_artifacts_on_unexpected_failures**: bool = True + * Whether to export debugging artifacts automatically on compilation failures. + +* **p_error**: float = 0.000063342483999973 + * Error probability for table lookups. + +* **jit**: bool = False + * Whether to use JIT compilation. + +* **loop_parallelize**: bool = True + * Whether to enable loop parallelization in the compiler. + +* **dataflow_parallelize**: bool = False + * Whether to enable dataflow parallelization in the compiler. + +* **auto_parallelize**: bool = False + * Whether to enable auto parallelization in the compiler. + +* **enable_unsafe_features**: bool = False + * Whether to enable unsage features. + +* **virtual**: bool = False _(Unsafe)_ + * Whether to create a virtual circuit. + +* **use_insecure_key_cache**: bool = False _(Unsafe)_ + * Whether to use the insecure key cache. + +* **insecure_key_cache_location**: Optional[Union[Path, str]] = None + * Location of insecure key cache. diff --git a/docs/howto/debug.md b/docs/howto/debug.md new file mode 100644 index 000000000..411dadcdb --- /dev/null +++ b/docs/howto/debug.md @@ -0,0 +1,266 @@ +# Debug + +In this section, you will learn how to debug the compilation process easily as well as how to get help in case you cannot resolve your issue. + +## Debug Artifacts + +**Concrete Numpy** has an artifact system to simplify the process of debugging issues. + +### Automatic export. + +In case of compilation failures, artifacts are exported automatically to the `.artifacts` directory under the working directory. Let's intentionally create a compilation failure to show what kinds of things are exported. + + +```python +def f(x): + return np.sin(x) +``` + +This function fails to compile because **Concrete Numpy** does not support floating-point outputs. When you try to compile it, an exception will be raised and the artifacts will be exported automatically. If you go the `.artifacts` directory under the working directory, you'll see the following files: + +#### environment.txt + +This file contains information about your setup (i.e., your operating system and python version). + +``` +Linux-5.12.13-arch1-2-x86_64-with-glibc2.29 #1 SMP PREEMPT Fri, 25 Jun 2021 22:56:51 +0000 +Python 3.8.10 +``` + +#### requirements.txt + +This file contains information about python packages and their versions installed on your system. + +``` +alabaster==0.7.12 +appdirs==1.4.4 +argon2-cffi==21.1.0 +... +wheel==0.37.0 +widgetsnbextension==3.5.1 +wrapt==1.12.1 +``` + +#### function.txt + +This file contains information about the function you tried to compile. + +``` +def f(x): + return np.sin(x) +``` + +#### parameters.txt + +This file contains information about the encryption status of the parameters of the function you tried to compile. + +``` +x :: encrypted +``` + +#### 1.initial.graph.txt + +This file contains textual representation of the initial computation graph right after tracing. + +``` +%0 = x # EncryptedScalar +%1 = sin(%0) # EncryptedScalar +return %1 +``` + +#### 1.initial.graph.png + +This file contains the visual representation of the initial computation graph right after tracing. + +![](../\_static/tutorials/artifacts/auto/1.initial.graph.png) + +#### 2.final.graph.txt + +This file contains textual representation of the final computation graph right before MLIR conversion. + +``` +%0 = x # EncryptedScalar +%1 = sin(%0) # EncryptedScalar +return %1 +``` + +#### 2.final.graph.png + +This file contains the visual representation of the final computation graph right before MLIR conversion. + +![](../\_static/tutorials/artifacts/auto/2.final.graph.png) + +#### traceback.txt + +This file contains information about the error you received. + +``` +Traceback (most recent call last): + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compilation/compiler.py", line 320, in compile + mlir = GraphConverter.convert(self.graph, virtual=self.configuration.virtual) + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/mlir/graph_converter.py", line 298, in convert + GraphConverter._check_graph_convertibility(graph) + File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/mlir/graph_converter.py", line 175, in _check_graph_convertibility + raise RuntimeError( +RuntimeError: Function you are trying to compile cannot be converted to MLIR + +%0 = x # EncryptedScalar +%1 = sin(%0) # EncryptedScalar +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ only integer operations are supported +return %1 +``` + +### Manual export. + +Manual exports are mostly used for visualization. Nonetheless, they can be very useful for demonstrations. Here is how to perform one: + +```python +import concrete.numpy as cnp +import numpy as np + +artifacts = cnp.DebugArtifacts("/tmp/custom/export/path") + +@cnp.compiler({"x": "encrypted"}) +def f(x): + return 127 - (50 * (np.sin(x) + 1)).astype(np.int64) + +inputset = range(2 ** 3) +circuit = f.compile(inputset, artifacts=artifacts) + +artifacts.export() +``` + +If you go to the `/tmp/custom/export/path` directory, you'll see the following files: + +#### 1.initial.graph.txt + +This file contains textual representation of the initial computation graph right after tracing. + +``` +%0 = 127 # ClearScalar +%1 = 50 # ClearScalar +%2 = 1 # ClearScalar +%3 = x # EncryptedScalar +%4 = sin(%3) # EncryptedScalar +%5 = add(%4, %2) # EncryptedScalar +%6 = multiply(%1, %5) # EncryptedScalar +%7 = astype(%6, dtype=int_) # EncryptedScalar +%8 = subtract(%0, %7) # EncryptedScalar +return %8 +``` + +#### 1.initial.graph.png + +This file contains the visual representation of the initial computation graph right after tracing. + +![](../\_static/tutorials/artifacts/manual/1.initial.graph.png) + +#### 2.after-float-fuse-0.graph.txt + +This file contains textual representation of the intermediate computation graph after fusing. + +``` +%0 = 127 # ClearScalar +%1 = x # EncryptedScalar +%2 = subgraph(%1) # EncryptedScalar +%3 = subtract(%0, %2) # EncryptedScalar +return %3 + +Subgraphs: + + %2 = subgraph(%1): + + %0 = 50 # ClearScalar + %1 = 1 # ClearScalar + %2 = input # EncryptedScalar + %3 = sin(%2) # EncryptedScalar + %4 = add(%3, %1) # EncryptedScalar + %5 = multiply(%0, %4) # EncryptedScalar + %6 = astype(%5, dtype=int_) # EncryptedScalar + return %6 +``` + +#### 2.after-fusing.graph.png + +This file contains the visual representation of the intermediate computation graph after fusing. + +![](../\_static/tutorials/artifacts/manual/2.after-fusing.graph.png) + +#### 3.final.graph.txt + +This file contains the textual representation of the final computation graph right before MLIR conversion. + +``` +%0 = 127 # ClearScalar +%1 = x # EncryptedScalar +%2 = subgraph(%1) # EncryptedScalar +%3 = subtract(%0, %2) # EncryptedScalar +return %3 + +Subgraphs: + + %2 = subgraph(%1): + + %0 = 50 # ClearScalar + %1 = 1 # ClearScalar + %2 = input # EncryptedScalar + %3 = sin(%2) # EncryptedScalar + %4 = add(%3, %1) # EncryptedScalar + %5 = multiply(%0, %4) # EncryptedScalar + %6 = astype(%5, dtype=int_) # EncryptedScalar + return %6 +``` + +#### 3.final.graph.png + +This file contains the visual representation of the final computation graph right before MLIR conversion. + +![](../\_static/tutorials/artifacts/manual/3.final.graph.png) + +#### bounds.txt + +This file contains information about the bounds of the final computation graph of the function you are compiling using the inputset you provide. + +``` +%0 :: [127, 127] +%1 :: [0, 7] +%2 :: [2, 95] +%3 :: [32, 125] +``` + +#### mlir.txt + +This file contains information about the MLIR of the function you compiled using the inputset you provided. + +``` +module { + func @main(%arg0: !FHE.eint<7>) -> !FHE.eint<7> { + %c127_i8 = arith.constant 127 : i8 + %cst = arith.constant dense<"..."> : tensor<128xi64> + %0 = "FHE.apply_lookup_table"(%arg0, %cst) : (!FHE.eint<7>, tensor<128xi64>) -> !FHE.eint<7> + %1 = "FHE.sub_int_eint"(%c127_i8, %0) : (i8, !FHE.eint<7>) -> !FHE.eint<7> + return %1 : !FHE.eint<7> + } +} +``` + +## Asking the community + +You can seek help with your issue by asking directly in the [community forum](https://community.zama.ai/). + +## Submitting an issue + +If you cannot find a solution in the community forum, or you found a bug in the library, you could create an issue in our GitHub repository. + +In case of a bug: + +* try to minimize randomness +* try to minimize your function as much as possible while keeping the bug, this will help to fix the bug faster +* try to include your inputset in the issue +* try to include reproduction steps in the issue +* try to include debug artifacts in the issue + +In case of a feature request: + +* try to give a minimal example of the desired behavior +* try to explain your use case diff --git a/docs/howto/debug_support_submit_issues.md b/docs/howto/debug_support_submit_issues.md deleted file mode 100644 index 026122c77..000000000 --- a/docs/howto/debug_support_submit_issues.md +++ /dev/null @@ -1,76 +0,0 @@ -# Debugging / Support / Submitting Issues - -This version of **Concrete Numpy** is a first version of the product, meaning that it is not completely finished, contains several bugs (would they be known or unknown at this time), and will improve over time with feedback from early users. - -Here are some ways to debug your problems. If nothing seems conclusive, you can still report the issue, as explained in a later section of this page. - -## Is it a bug by the framework or by the user? - -If ever your numpy program fails, it may be because: - -* of bugs due to **Concrete** -* of bugs due to the user, notably who would have a bug without even considering FHE (does the function you want to compile run well with numpy?), or who would not use the framework as expected or not consider the limits of the framework. - -For the latter kind of bugs, we encourage the user to have a look at: - -* the error message received -* the documentation of the product -* the known limits of the product (such as the reduced set of supported operations at this time, or the limited precision of the computations). - -Once you have tried to see if the bug was not your own, it is time to go further. - -## Is the inputset sufficiently representative? - -A bug may happen if ever the inputset, which is internally used by the compilation core to set bit widths of some intermediate data, is not sufficiently representative. If ever, with all the inputs in the inputset, it appears that an intermediate data can be represented an `n`-bit integer, but for a particular computation, this same intermediate data needs a bit more bits to be represented, the FHE execution for this computation will result in a wrong output (as typically in integer overflows in classical programs). - -So, in general, when a bug appears, it may be a good idea to enlarge the inputset, and try to have random-looking inputs in this latter, following distribution of inputs used with the function. - -## Having a reproducible bug - -Once you're sure it is a bug, it would be nice to try to: - -* make it highly reproducible: e.g., by reducing as much the randomness as possible; e.g., if you can find an input which fails, there is no reason to let the input random -* reduce it to the smallest possible bug: it is easier to investigate bugs which are small, so when you have an issue, please try to reduce to a smaller issue, notably with less lines of code, smaller parameters, less complex function to compile, faster scripts etc. - -## Asking the community - -You can directly ask the developers and community about your issue on our Discourse server (link on the right of the top menu). - -Hopefully, it is just a misunderstanding or a small mistake on your side, that we can help you fix easily. And, the good point with your feedback is that, once we have heard the problem or misunderstanding, we can make the documentation even clearer (by adding to the FAQ). - -## Having a look to the compilation artifacts - -When things are more complicated, or if you want to have a look by yourself, you may want to start with the compilation reports, which are called artifacts. This is as simple as described in [here](../tutorial/compilation\_artifacts.md) - -The artifact system will create a directory, containing: - -* **environment.txt:** information about your system -* **requirements.txt:** information about your python dependencies -* **function.txt:** source code of the function you are compiling -* **parameters.txt:** parameters you specified for compilation -* **1.initial.graph.txt:** textual representation of the initial computation graph right after tracing -* **1.initial.graph.png:** visual representation of the initial computation graph right after tracing -* ... -* **X.description.graph.txt:** textual representation of the Xth computation graph after topological transforms -* **X.description.graph.png:** visual representation of the Xth computation graph after topological transforms -* ... -* **N.final.graph.txt:** textual representation of the final computation graph right before MLIR conversion -* **N.final.graph.png:** visual representation of the final computation graph right before MLIR conversion -* **bounds.txt:** ranges of data in the different steps of the computation for the final graph that is being compiled -* **mlir.txt**: resulting MLIR code that is sent to the compiler (if compilation succeeded) -* **traceback.txt**: information about the error you encountered (if compilation failed) - -Attaching the artifact with your issue or Slack message may help people to have a look at the core of the problem. The more precise your bug, the more likely we can reproduce and fix it. - -To simplify our work and let us reproduce your bug easily, we need all the information we can get. So, in addition to your python script, the following information would be very useful: - -* compilation artifacts -* reproducibility rate you see on your side -* any insight you might have on the bug -* any workaround you have been able to find - -Remember, **Concrete Numpy** is a project where we are open to contributions, more information at [Contributing](../developer/contributing.md). - -## Submitting an issue - -In case you have a bug, which is reproducible, that you have reduced to a small piece of code, we have our issue tracker (link on the right of the top menu). Remember that a well-described short issue is an issue which is more likely to be studied and fixed. The more issues we receive, the better the product will be. diff --git a/docs/howto/deploy.md b/docs/howto/deploy.md new file mode 100644 index 000000000..792220979 --- /dev/null +++ b/docs/howto/deploy.md @@ -0,0 +1,132 @@ +# Deploy + +After developing your circuit, you may want to deploy it. Sharing the details of your circuit with every client might not be desirable. Further, you might want to perform the computation in dedicated servers. In this case, you can use the `Client` and `Server` features of **Concrete Numpy**. + +## Development of the circuit + +You can develop your circuit like we've discussed in the previous chapters. Here is a simple example: + + +```python +import concrete.numpy as cnp + +@cnp.compiler({"x": "encrypted"}) +def function(x): + return x + 42 + +inputset = range(10) +circuit = function.compile(inputset) +``` + +Once you have your circuit, you can save everything the server needs like so: + + +```python +circuit.server.save("server.zip") +``` + +All you need to do now is to send `server.zip` to your computation server. + +## Setting up a server + +You can load the `server.zip` you get from the development machine like so: + + +```python +import concrete.numpy as cnp + +server = cnp.Server.load("server.zip") +``` + +At this point, you will need to wait for requests from clients. The first likely request is for `ClientSpecs`. + +Clients need `ClientSpecs` to generate keys and request computation. You can serialize `ClientSpecs` like so: + + +```python +serialized_client_specs: str = server.client_specs.serialize() +``` + +Then, you can send it to the clients requesting it. + +## Setting up clients + +After getting the serialized `ClientSpecs` from a server, you can create the client object like so: + + +```python +client_specs = cnp.ClientSpecs.unserialize(serialized_client_specs) +client = cnp.Client(client_specs) +``` + +## Generating keys (on the client) + +Once you have the `Client` object, you can perform key generation like so: + + +```python +client.keygen() +``` + +This method generates encryption/decryption keys and evaluation keys. + +The server requires evaluation keys linked to the encryption keys that you just generated. You can serialize your evaluation keys like so: + + +```python +serialized_evaluation_keys: bytes = client.evaluation_keys.serialize() +``` + +After serialization, you can send the evaluation keys to the server. + +{% hint style="info" %} +Serialized evaluation keys are very big in size, so you may want to cache them on the server instead of sending them with each request. +{% endhint %} + +## Encrypting inputs (on the client) + +You are now ready to encrypt your inputs and request the server to perform the computation. You can do it like so: + + +```python +serialized_args: bytes = client.encrypt(7).serialize() +``` + +The only thing left to do is to send serialized args to the server. + +## Performing computation (on the server) + +Upon having the serialized evaluation keys and serialized arguments, you can unserialize them like so: + + +```python +unserialized_evaluation_keys = cnp.EvaluationKeys.unserialize(serialized_evaluation_keys) +unserialized_args = server.client_specs.unserialize_public_args(serialized_args) +``` + +And you can perform the computation like so: + + +```python +public_result = server.run(unserialized_args, unserialized_evaluation_keys) +serialized_public_result: bytes = public_result.serialize() +``` + +Finally, you can send the serialized public result back to the client, so they can decrypt it and get the result of the computation. + +## Decrypting the result (on the client) + +Once you have received the public result of the computation from the server, you can unserialize it like so: + + +```python +unserialized_public_result = client.specs.unserialize_public_result(serialized_public_result) +``` + +Finally, you can decrypt the result like so: + + +```python +result = client.decrypt(unserialized_public_result) +assert result == 49 +``` diff --git a/docs/howto/printing_and_drawing.md b/docs/howto/printing_and_drawing.md deleted file mode 100644 index 83168fa09..000000000 --- a/docs/howto/printing_and_drawing.md +++ /dev/null @@ -1,63 +0,0 @@ -# Printing and drawing - -Sometimes, it can be useful to print or draw fhe circuits, we provide methods to just do that. Please read [Compiling and Executing](../basics/compiling_and_executing.md) before reading further to see how you can compile your function into an fhe circuit. - -## Printing - -To print your circuit, you can do the following: - - -```python -print(circuit) -``` - -## Drawing - -{% hint style="danger" %} -The draw function requires the installation of the package's extra dependencies. - -The drawing package required is `pygraphviz` which needs `graphviz` packages installed on your OS, see [https://pygraphviz.github.io/documentation/stable/install.html](https://pygraphviz.github.io/documentation/stable/install.html) - -To install the required drawing packages once you have `graphviz` installed run: - -`pip install concrete-numpy[full]` - -You may need to force reinstallation - -`pip install --force-reinstall concrete-numpy[full]` -{% endhint %} - -To draw your circuit, you can do the following: - - -```python -drawing = circuit.draw() -``` - -This method will draw the circuit on a temporary PNG file and return the path to this file. - -To show the drawing, you can use the following code in a jupyter notebook. - - -```python -from PIL import Image -drawing = Image.open(circuit.draw()) -drawing.show() -drawing.close() -``` - -Additionally, you can use the `show` option of the `draw` method to show the drawing with matplotlib. Beware that this will clear the matplotlib plots you have. - - -```python -circuit.draw(show=True) -``` - -Lastly, you can save the drawing to a specific path like this: - - -```python -destination = "/tmp/path/of/your/choice.png" -drawing = circuit.draw(save_to=destination) -assert drawing == destination -``` diff --git a/docs/howto/reduce_needed_precision.md b/docs/howto/reduce_needed_precision.md deleted file mode 100644 index 3bd32d738..000000000 --- a/docs/howto/reduce_needed_precision.md +++ /dev/null @@ -1,90 +0,0 @@ -# Computation With Quantized Functions - -With our current technology, we cannot represent integers with more than 7 bits. -We are actively working on supporting larger integers, so it should get better in the future. - -## What happens when you have larger values? - -You get a compilation error. Here is an example: - - -```python -import concrete.numpy as cnp - -@cnp.compiler({"x": "encrypted"}) -def f(x): - return 42 * x - -circuit = f.compile(range(2 ** 3)) -``` - -results in - -``` -Traceback (most recent call last): - File "/home/default/Documents/Projects/Zama/hdk/dist/demo.py", line 9, in - circuit = compiler.get_compiled_fhe_circuit() - File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/np_fhe_compiler.py", line 274, in get_compiled_fhe_circuit - return compile_op_graph_to_fhe_circuit( - File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 676, in compile_op_graph_to_fhe_circuit - result = run_compilation_function_with_error_management( - File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 141, in run_compilation_function_with_error_management - return compilation_function() - File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 674, in compilation_function - return _compile_op_graph_to_fhe_circuit_internal(op_graph, show_mlir, compilation_artifacts) - File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 626, in _compile_op_graph_to_fhe_circuit_internal - prepare_op_graph_for_mlir(op_graph) - File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 603, in prepare_op_graph_for_mlir - update_bit_width_for_mlir(op_graph) - File "/home/default/Documents/Projects/Zama/hdk/concrete/common/mlir/utils.py", line 204, in update_bit_width_for_mlir - raise RuntimeError( -RuntimeError: max_bit_width of some nodes is too high for the current version of the compiler (maximum must be 8) which is not compatible with: - -%0 = x # EncryptedScalar -%1 = 42 # ClearScalar -%2 = mul(%0, %1) # EncryptedScalar -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 9 bits is not supported for the time being -return %2 -``` - -when you try to run. - -## Why can some computation work with less precision? - -### The input data uses more bits than required - -For some tasks, like classification for example, the output prediction often carries much less information than the input data used to make that prediction. - -For example the MNIST classification task consists in taking an image, a 28x28 array containing uint8 values, representing a handwritten digit and predicting whether it belongs to one of 10 classes: the digits from 0 to 9. The output is a one-hot vector which indicates the class a particular sample belongs to. - -The input contains 28x28x8 = 6272 bits of information. In practice you could still obtain good results on MNIST by thresholding the pixels to {0, 1} and training a model for this new Binarized MNIST task. This means that in a real use case where you actually need to do digits recognition, you could binarize your input on the fly, replacing each pixel by either 0 or 1. Doing so, you use 1 bit per pixel and now only have 784 bits of input data. It also means that if you are doing some accumulation (adding pixel values together), you are going to need accumulators that are smaller (adding 0s and 1s requires less space than adding values ranging from 0 to 255 included). - -This shows how adapting your data can allow you to use models that may require smaller data types (i.e. use less precision) to perform their computations. - -### Model accuracy when quantizing for FHE - -Quantization and binarization increase inference speed, reduce model byte-size and are required to run computation in FHE. However, quantization and, especially, binarization, induce a loss in the accuracy of the model since it's representation power is diminished. Choosing quantization parameters carefully can alleviate the accuracy loss all the while allowing compilation to FHE. - -The end result has a granularity/imprecision linked to the data types used and for the Quantized Logistic Regression to the lattice used to evaluate the logistic model. - -## Limitations for FHE friendly neural network - -Recent quantization literature often takes a few shortcuts to reach performance similar to those achieved by floating point models. A common one is that the input is left in floating point. This is also true for the first and last layers which have more impact on the resulting model accuracy than hidden layers. - -But, in **Concrete Numpy**, the inputs, weights and the accumulator must remain on a maximum of 7 bits. - -Thus, in **Concrete Numpy**, we also quantize the input data and network output activations in the same way as the rest of the network: everything is quantized to a specific number of bits. It turns out, that the number of bits used for the input or the output of any activation function is crucial to comply with the constraint on accumulator width. - -The core operation in neural networks is essentially matrix multiplications (matmul). This operation must be done such that the maximum value of its result requires at most 7 bits of precision. - -For example, if you quantize your input and weights with $$ n_{\mathsf{weights}} $$, $$ n_{\mathsf{inputs}} $$ bits of precision, one can compute the maximum dimensionality of the input and weights before the matmul **can** exceed the 7 bits as such: - -$$ \Omega = \mathsf{floor} \left( \frac{2^{n_{\mathsf{max}}} - 1}{(2^{n_{\mathsf{weights}}} - 1)(2^{n_{\mathsf{inputs}}} - 1)} \right) $$ - -where $$ n_{\mathsf{max}} = 7 $$ is the maximum precision allowed. For example, if we set $$ n_{\mathsf{weights}} = 2$$ and $$ n_{\mathsf{inputs}} = 2$$ with $$ n_{\mathsf{max}} = 7$$ then we have the $$ \Omega = 14 $$ different inputs/weights allowed in the matmul. - -Above $$ \Omega $$ dimensions in the input and weights, the risk of overflow increases quickly. It may happen that for some distributions of weights and values the computation does not overflow, but the risk increases rapidly with the number of dimensions. - -Currently, **Concrete Numpy** pre-computes the number of bits needed for the computation depending on the input set calibration data and does not allow the overflow[^1] to happen. - -[^1]: [Integer overflow](https://en.wikipedia.org/wiki/Integer_overflow) diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 195c0003d..000000000 --- a/docs/index.rst +++ /dev/null @@ -1,10 +0,0 @@ -Concrete Numpy's documentation -================================== - - -.. toctree:: - :maxdepth: 2 - - User Guide - API <_apidoc/modules.rst> - Developer diff --git a/docs/intro.md b/docs/intro.md deleted file mode 100644 index bac0d78dc..000000000 --- a/docs/intro.md +++ /dev/null @@ -1,31 +0,0 @@ -# What is **Concrete Numpy**? - -## Introduction - -**Concrete Numpy**, or **Concrete** for short, is an open-source set of tools which aims to simplify the use of fully homomorphic encryption (FHE) for data scientists. - -FHE is a powerful cryptographic tool, which allows servers to perform computations directly on encrypted data without needing to decrypt first. With FHE, privacy is at the center, and you can build services which ensure full privacy of the user and are the perfect equivalent of their unsecure counterpart. - -FHE is also a killer feature regarding data breaches: as anything done on the server is done over encrypted data, even if the server is compromised, there is in the end no leak of useful data. - -With **Concrete Numpy**, data scientists can implement machine learning models using a [subset of numpy](basics/numpy_support.md) that compile to FHE. They will be able to train models with popular machine learning libraries and then convert the prediction functions of these models, that they write in numpy, to FHE. - -**Concrete Numpy** is made of several parts: -- an entry API, which is the main function of the so-called **Concrete frontend**, which takes programs made from a subset of numpy, and converts them to an FHE program -- the **Concrete compiler**, which is called by the frontend, which allows you to turn an MLIR program into an FHE program, on the top of **Concrete Library**, which contains the core cryptographic APIs for computing with FHE; - -In a further release, **Concrete Numpy** will be divided into a **Concrete Framework** package, containing the compiler, the core lib and the frontend(s), and in a **Concrete ML**, which will contain ML tools, made on top of the **Concrete Framework**. Names of these packages are succeptible to change. - -## Organization of the documentation - -Basically, we have divided our documentation into several parts: -- one about basic elements, notably a description of the installation, that you are currently reading -- one dedicated to _users_ of **Concrete Numpy**, with tutorials, how-tos and deeper explanations -- one detailing the APIs of the different functions of the frontend, directly done by parsing its source code -- and finally, one dedicated to _developers_ of **Concrete Numpy**, who could be internal or external contributors to the framework - -## A work in progress - -{% hint style='info' %} -Concrete is a work in progress, and is currently limited to a certain number of operators and features. In the future, there will be improvements as described in this [section](explanation/future_features.md). -{% endhint %} diff --git a/docs/tutorial/compilation_artifacts.md b/docs/tutorial/compilation_artifacts.md deleted file mode 100644 index 8b3a975d3..000000000 --- a/docs/tutorial/compilation_artifacts.md +++ /dev/null @@ -1,247 +0,0 @@ -# Compilation artifacts - -In this tutorial, we are going to go over the artifact system, which is designed to inspect/debug the compilation process easily. - -## Automatic export - -In case of compilation failures, artifacts are exported automatically to `.artifacts` directory under the working directory. Let's intentionally create a compilation failure and show what kinds of things are exported. - - -```python -def f(x): - return np.sin(x) -``` - -This function fails to compile because **Concrete Numpy** doesn't support floating point outputs. When you try to compile it (you might want to check [this](../basics/compiling_and_executing.md) to see how you can do that), an exception will be raised and the artifacts will be exported automatically. - -### environment.txt - -This file contains information about your setup (i.e., your operating system and python version). - -``` -Linux-5.12.13-arch1-2-x86_64-with-glibc2.29 #1 SMP PREEMPT Fri, 25 Jun 2021 22:56:51 +0000 -Python 3.8.10 -``` - -### requirements.txt - -This file contains information about python packages and their versions installed on your system. - -``` -alabaster==0.7.12 -appdirs==1.4.4 -argon2-cffi==21.1.0 -... -wheel==0.37.0 -widgetsnbextension==3.5.1 -wrapt==1.12.1 -``` - -### function.txt - -This file contains information about the function you are trying to compile. - -``` -def f(x): - return np.sin(x) -``` - -### parameters.txt - -This file contains information about the parameters of the function you are trying to compile. - -``` -x :: EncryptedScalar> -``` - -### 1.initial.graph.txt - -This file contains textual representation of the initial computation graph right after tracing. - -``` -%0 = x # EncryptedScalar -%1 = sin(%0) # EncryptedScalar -return %1 -``` - -### 1.initial.graph.png - -This file contains the visual representation of the initial computation graph right after tracing. - -![](../_static/tutorials/artifacts/auto/1.initial.graph.png) - -### 2.final.graph.txt - -This file contains textual representation of the final computation graph right before MLIR conversion. - -``` -%0 = x # EncryptedScalar -%1 = sin(%0) # EncryptedScalar -return %1 -``` - -### 2.final.graph.png - -This file contains the visual representation of the final computation graph right before MLIR conversion. - -![](../_static/tutorials/artifacts/auto/2.final.graph.png) - -### traceback.txt - -This file contains information about the error you got. - -``` -Traceback (most recent call last): - File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 141, in run_compilation_function_with_error_management - return compilation_function() - File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 769, in compilation_function - return _compile_numpy_function_internal( - File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 722, in _compile_numpy_function_internal - fhe_circuit = _compile_op_graph_to_fhe_circuit_internal( - File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 626, in _compile_op_graph_to_fhe_circuit_internal - prepare_op_graph_for_mlir(op_graph) - File "/home/default/Documents/Projects/Zama/hdk/concrete/numpy/compile.py", line 597, in prepare_op_graph_for_mlir - raise RuntimeError( -RuntimeError: function you are trying to compile isn't supported for MLIR lowering - -%0 = x # EncryptedScalar -%1 = sin(%0) # EncryptedScalar -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ only integer outputs are supported -return %1 -``` - -## Manual export - -Manual exports are mostly used for visualization. Nonetheless, they can be very useful for demonstrations. Here is how to do it: - -```python -import concrete.numpy as cnp -import numpy as np -import pathlib - -artifacts = cnp.DebugArtifacts("/tmp/custom/export/path") - -@cnp.compiler({"x": "encrypted"}) -def f(x): - return 127 - (50 * (np.sin(x) + 1)).astype(np.int64) - -f.compile(range(2 ** 3), artifacts=artifacts) - -artifacts.export() -``` - -### 1.initial.graph.txt - -This file contains textual representation of the initial computation graph right after tracing. - -``` -%0 = 127 # ClearScalar -%1 = 50 # ClearScalar -%2 = 1 # ClearScalar -%3 = x # EncryptedScalar -%4 = sin(%3) # EncryptedScalar -%5 = add(%4, %2) # EncryptedScalar -%6 = mul(%5, %1) # EncryptedScalar -%7 = astype(%6, dtype=uint32) # EncryptedScalar -%8 = sub(%0, %7) # EncryptedScalar -return %8 -``` - -### 1.initial.graph.png - -This file contains the visual representation of the initial computation graph right after tracing. - -![](../_static/tutorials/artifacts/manual/1.initial.graph.png) - -### 2.after-float-fuse-0.graph.txt - -This file contains textual representation of the intermediate computation graph after fusing. - -``` -%0 = 127 # ClearScalar -%1 = x # EncryptedScalar -%2 = subgraph(%1) # EncryptedScalar -%3 = sub(%0, %2) # EncryptedScalar -return %3 - -Subgraphs: - - %2 = subgraph(%1): - - %0 = 50 # ClearScalar - %1 = 1 # ClearScalar - %2 = float_subgraph_input # EncryptedScalar - %3 = sin(%2) # EncryptedScalar - %4 = add(%3, %1) # EncryptedScalar - %5 = mul(%4, %0) # EncryptedScalar - %6 = astype(%5, dtype=uint32) # EncryptedScalar - return %6 -``` - -### 2.after-float-fuse-0.graph.png - -This file contains the visual representation of the intermediate computation graph after fusing. - -![](../_static/tutorials/artifacts/manual/2.after-float-fuse-0.graph.png) - -### 3.final.graph.txt - -This file contains textual representation of the final computation graph right before MLIR conversion. - -``` -%0 = 127 # ClearScalar -%1 = x # EncryptedScalar -%2 = subgraph(%1) # EncryptedScalar -%3 = sub(%0, %2) # EncryptedScalar -return %3 - -Subgraphs: - - %2 = subgraph(%1): - - %0 = 50 # ClearScalar - %1 = 1 # ClearScalar - %2 = float_subgraph_input # EncryptedScalar - %3 = sin(%2) # EncryptedScalar - %4 = add(%3, %1) # EncryptedScalar - %5 = mul(%4, %0) # EncryptedScalar - %6 = astype(%5, dtype=uint32) # EncryptedScalar - return %6 -``` - -### 3.final.graph.png - -This file contains the visual representation of the final computation graph right before MLIR conversion. - -![](../_static/tutorials/artifacts/manual/3.final.graph.png) - -### bounds.txt - -This file contains information about the bounds of the final computation graph of the function you are trying to compile using the input set you provide. - -``` -%0 :: [127, 127] -%1 :: [0, 7] -%2 :: [2, 95] -%3 :: [32, 125] -``` - -You can learn what bounds are [here](../../dev/explanation/terminology_and_structure.md). - -### mlir.txt - -This file contains information about the MLIR of the function you are trying to compile using the input set you provide. - -``` -module { - func @main(%arg0: !FHE.eint<7>) -> !FHE.eint<7> { - %c127_i8 = arith.constant 127 : i8 - %cst = arith.constant dense<"..."> : tensor<128xi64> - %0 = "FHE.apply_lookup_table"(%arg0, %cst) : (!FHE.eint<7>, tensor<128xi64>) -> !FHE.eint<7> - %1 = "FHE.sub_int_eint"(%c127_i8, %0) : (i8, !FHE.eint<7>) -> !FHE.eint<7> - return %1 : !FHE.eint<7> - } -} -``` - -You can learn more about MLIR [here](../../dev/explanation/mlir.md). diff --git a/docs/tutorial/decorator.md b/docs/tutorial/decorator.md new file mode 100644 index 000000000..c46ca92ab --- /dev/null +++ b/docs/tutorial/decorator.md @@ -0,0 +1,20 @@ +# Decorator + +If you are trying to compile a regular function, you can use the decorator interface instead of the explicit `Compiler` interface to simplify your code: + +```python +import concrete.numpy as cnp + +@cnp.compiler({"x": "encrypted"}) +def f(x): + return x + 42 + +inputset = range(10) +circuit = f.compile(inputset) + +assert circuit.encrypt_run_decrypt(10) == f(10) +``` + +{% hint style="info" %} +Think of this decorator as a way to add the `compile` method to the function object without changing its name elsewhere. +{% endhint %} diff --git a/docs/tutorial/extensions.md b/docs/tutorial/extensions.md new file mode 100644 index 000000000..154b1f15b --- /dev/null +++ b/docs/tutorial/extensions.md @@ -0,0 +1,153 @@ +# Extensions + +**Concrete Numpy** tries to support **NumPy** as much as possible, but due to some technical limitations, not everything can be supported. On top of that, there are some things **NumPy** lack, which are useful. In some of these situations, we provide extesions in **Concrete Numpy** to improve your experience. + +## cnp.zero() + +Allows you to create encrypted scalar zero: + +```python +import concrete.numpy as cnp +import numpy as np + +@cnp.compiler({"x": "encrypted"}) +def f(x): + z = cnp.zero() + return x + z + +inputset = range(10) +circuit = f.compile(inputset) + +for x in range(10): + assert circuit.encrypt_run_decrypt(x) == x +``` + +## cnp.zeros(shape) + +Allows you to create encrypted tensor of zeros: + +```python +import concrete.numpy as cnp +import numpy as np + +@cnp.compiler({"x": "encrypted"}) +def f(x): + z = cnp.zeros((2, 3)) + return x + z + +inputset = range(10) +circuit = f.compile(inputset) + +for x in range(10): + assert np.array_equal(circuit.encrypt_run_decrypt(x), np.array([[x, x, x], [x, x, x]])) +``` + +## cnp.one() + +Allows you to create encrypted scalar one: + +```python +import concrete.numpy as cnp +import numpy as np + +@cnp.compiler({"x": "encrypted"}) +def f(x): + z = cnp.one() + return x + z + +inputset = range(10) +circuit = f.compile(inputset) + +for x in range(10): + assert circuit.encrypt_run_decrypt(x) == x + 1 +``` + +## cnp.ones(shape) + +Allows you to create encrypted tensor of ones: + +```python +import concrete.numpy as cnp +import numpy as np + +@cnp.compiler({"x": "encrypted"}) +def f(x): + z = cnp.ones((2, 3)) + return x + z + +inputset = range(10) +circuit = f.compile(inputset) + +for x in range(10): + assert np.array_equal(circuit.encrypt_run_decrypt(x), np.array([[x, x, x], [x, x, x]]) + 1) +``` + +## cnp.univariate(function) + +Allows you to wrap any univariate function into a single table lookup: + +```python +import concrete.numpy as cnp +import numpy as np + +def complex_univariate_function(x): + + def per_element(element): + result = 0 + for i in range(element): + result += i + return result + + return np.vectorize(per_element)(x) + +@cnp.compiler({"x": "encrypted"}) +def f(x): + return cnp.univariate(complex_univariate_function)(x) + +inputset = [np.random.randint(0, 5, size=(3, 2)) for _ in range(10)] +circuit = f.compile(inputset) + +sample = np.array([ + [0, 4], + [2, 1], + [3, 0], +]) +assert np.array_equal(circuit.encrypt_run_decrypt(sample), complex_univariate_function(sample)) +``` + +{% hint style="danger" %} +The wrapped function shouldn't have any side effects, and it should be deterministic. +{% endhint %} + +## coonx.conv(...) + +Allows you to perform a convolution operation, with the same semantic of [onnx.Conv](https://github.com/onnx/onnx/blob/main/docs/Operators.md#Conv): + +```python +import concrete.numpy as cnp +import concrete.onnx as connx +import numpy as np + +weight = np.array([[2, 1], [3, 2]]).reshape(1, 1, 2, 2) + +@cnp.compiler({"x": "encrypted"}) +def f(x): + return connx.conv(x, weight, strides=(2, 2), dilations=(1, 1), group=1) + +inputset = [np.random.randint(0, 4, size=(1, 1, 4, 4)) for _ in range(10)] +circuit = f.compile(inputset) + +sample = np.array( + [ + [3, 2, 1, 0], + [3, 2, 1, 0], + [3, 2, 1, 0], + [3, 2, 1, 0], + ] +).reshape(1, 1, 4, 4) +assert np.array_equal(circuit.encrypt_run_decrypt(sample), f(sample)) +``` + +{% hint style="danger" %} +Only 2D convolutions with one groups and without padding are supported for the time being. +{% endhint %} diff --git a/docs/tutorial/floating_points.md b/docs/tutorial/floating_points.md new file mode 100644 index 000000000..de27c1fbd --- /dev/null +++ b/docs/tutorial/floating_points.md @@ -0,0 +1,79 @@ +# Floating Points + +**Concrete Numpy** partly supports floating points: + +* They cannot be inputs +* They cannot be outputs +* They can be intermediate values under certain constraints + +## As intermediate values + +**Concrete Compile**, which is used for compiling the circuit, doesn't support floating points at all. However, it supports table lookups. They take an integer and map it to another integer. It does not care how the lookup table is calculated. Further, the constraints of this operation are such that there should be a single integer input and it should result in a single integer output. + +As long as your floating point operations comply with those constraints, **Concrete Numpy** automatically converts your operations to a table lookup operation: + +```python +import concrete.numpy as cnp +import numpy as np + +@cnp.compiler({"x": "encrypted"}) +def f(x): + a = x + 1.5 + b = np.sin(x) + c = np.around(a + b) + d = c.astype(np.int64) + return d + +inputset = range(8) +circuit = f.compile(inputset) + +for x in range(8): + assert circuit.encrypt_run_decrypt(x) == f(x) +``` + +In the example above, `a`, `b`, and `c` are all floating point intermediates. However, they are just used to calculate `d`, which is an integer and value of `d` dependent upon `x` , which is another integer. **Concrete Numpy** detects this and fuses all of those operations into a single table lookup from `x` to `d`. + +This approach works for a variety of use cases, but it comes up short for some: + + +```python +import concrete.numpy as cnp +import numpy as np + +@cnp.compiler({"x": "encrypted", "y": "encrypted"}) +def f(x, y): + a = x + 1.5 + b = np.sin(y) + c = np.around(a + b) + d = c.astype(np.int64) + return d + +inputset = [(1, 2), (3, 0), (2, 2), (1, 3)] +circuit = f.compile(inputset) + +for x in range(8): + assert circuit.encrypt_run_decrypt(x) == f(x) +``` + +results in + +``` +RuntimeError: Function you are trying to compile cannot be converted to MLIR + +%0 = x # EncryptedScalar +%1 = 1.5 # ClearScalar +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ only integer constants are supported +%2 = y # EncryptedScalar +%3 = add(%0, %1) # EncryptedScalar +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ only integer operations are supported +%4 = sin(%2) # EncryptedScalar +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ only integer operations are supported +%5 = add(%3, %4) # EncryptedScalar +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ only integer operations are supported +%6 = around(%5) # EncryptedScalar +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ only integer operations are supported +%7 = astype(%6, dtype=int_) # EncryptedScalar +return %7 +``` + +The reason for that is that `d` no longer depends solely on `x`, it depends on `y` as well. Thus, **Concrete Numpy** cannot fuse these operations, so it raises an exception. diff --git a/docs/tutorial/formatting_and_drawing.md b/docs/tutorial/formatting_and_drawing.md new file mode 100644 index 000000000..22f20928c --- /dev/null +++ b/docs/tutorial/formatting_and_drawing.md @@ -0,0 +1,64 @@ +# Format and Draw + +Sometimes, it can be useful to format or draw circuits. We provide methods to just do that. + +## Formatting + +You can convert your compiled circuit into its textual representation by converting it to string: + + +```python +str(circuit) +``` + +If you just want to see the output on your terminal, you can directly print it as well: + + +```python +print(circuit) +``` + +## Drawing + +{% hint style="danger" %} +Drawing functionality requires the installation of the package with a full feature set. See the Installation section to learn how to do that. +{% endhint %} + +You can use the `draw` method of your compiled circuit to draw it: + + +```python +drawing = circuit.draw() +``` + +This method will draw the circuit on a temporary PNG file and return the path to this file. + +You can show the drawing in a Jupyter notebook, like this: + + +```python +from PIL import Image +drawing = Image.open(circuit.draw()) +drawing.show() +drawing.close() +``` + +Or, you can use the `show` option of the `draw` method to show the drawing with matplotlib. + + +```python +circuit.draw(show=True) +``` + +{% hint style="danger" %} +Beware that this will clear the matplotlib plots you have. +{% endhint %} + +Lastly, you can save the drawing to a specific path: + + +```python +destination = "/tmp/path/of/your/choice.png" +drawing = circuit.draw(save_to=destination) +assert drawing == destination +``` diff --git a/docs/tutorial/indexing.md b/docs/tutorial/indexing.md deleted file mode 100644 index 7154bda91..000000000 --- a/docs/tutorial/indexing.md +++ /dev/null @@ -1,95 +0,0 @@ -# Indexing - -## Constant Indexing - -Constant indexing refers to the index being static (i.e., known during compilation). - -Here are some examples of constant indexing: - -### Extracting a single element - -```python -import concrete.numpy as cnp -import numpy as np - -@cnp.compiler({"x": "encrypted"}) -def f(x): - return x[1] - -inputset = [np.random.randint(0, 2 ** 3, size=(3,), dtype=np.uint8) for _ in range(10)] -circuit = f.compile(inputset) - -test_input = np.array([4, 2, 6], dtype=np.uint8) -expected_output = 2 - -assert np.array_equal(circuit.encrypt_run_decrypt(test_input), expected_output) -``` - -You can use negative indexing. - -```python -import concrete.numpy as cnp -import numpy as np - -@cnp.compiler({"x": "encrypted"}) -def f(x): - return x[-1] - -inputset = [np.random.randint(0, 2 ** 3, size=(3,), dtype=np.uint8) for _ in range(10)] -circuit = f.compile(inputset) - -test_input = np.array([4, 2, 6], dtype=np.uint8) -expected_output = 6 - -assert np.array_equal(circuit.encrypt_run_decrypt(test_input), expected_output) -``` - -You can use multidimensional indexing as well. - -```python -import concrete.numpy as cnp -import numpy as np - -@cnp.compiler({"x": "encrypted"}) -def f(x): - return x[-1, 1] - -inputset = [np.random.randint(0, 2 ** 3, size=(3, 2), dtype=np.uint8) for _ in range(10)] -circuit = f.compile(inputset) - -test_input = np.array([[4, 2], [1, 5], [7, 6]], dtype=np.uint8) -expected_output = 6 - -assert np.array_equal(circuit.encrypt_run_decrypt(test_input), expected_output) -``` - -### Extracting a slice - -```python -import concrete.numpy as cnp -import numpy as np - -@cnp.compiler({"x": "encrypted"}) -def f(x): - return x[1:4] - -inputset = [np.random.randint(0, 2 ** 3, size=(5,), dtype=np.uint8) for _ in range(10)] -circuit = f.compile(inputset) - -test_input = np.array([4, 2, 6, 1, 7], dtype=np.uint8) -expected_output = np.array([2, 6, 1], dtype=np.uint8) - -assert np.array_equal(circuit.encrypt_run_decrypt(test_input), expected_output) -``` - -You can use multidimensional slicing as well. - -{% hint style='tip' %} -There are certain limitations of slicing due to MLIR. So if you stumple into `RuntimeError: Compilation failed: Failed to lower to LLVM dialect`, know that we are aware of it, and we are trying to make such cases compilable. -{% endhint %} - -## Dynamic Indexing - -Dynamic indexing refers to the index being dynamic (i.e., can change during runtime). -Such indexing is especially useful for things like decision trees. -Unfortunately, we don't support dynamic indexing for the time being. diff --git a/docs/tutorial/table_lookup.md b/docs/tutorial/table_lookup.md index 6f634673b..8260819d0 100644 --- a/docs/tutorial/table_lookup.md +++ b/docs/tutorial/table_lookup.md @@ -1,87 +1,108 @@ -# Table lookup +# Table Lookups -In this tutorial, we are going to go over the ways to perform direct table lookups in **Concrete Numpy**. Please read [Compiling and Executing](../basics/compiling\_and\_executing.md) before reading further to see how you can compile the functions below. +In this tutorial, we will review the ways to perform direct table lookups in **Concrete Numpy**. ## Direct table lookup -**Concrete Numpy** provides a special class to allow direct table lookups. Here is how to use it: +**Concrete Numpy** provides a `LookupTable` class for you to create your own tables and apply them in your circuits. + +{% hint style="info" %} +`LookupTable`s can have any number of elements. Let's call them **N**. As long as the lookup variable is in range \[-**N**, **N**), table lookup is valid. + +If you go out of bounds of this range, you will get the following error: + +``` +IndexError: index 10 is out of bounds for axis 0 with size 6 +``` +{% endhint %} + +{% hint style="info" %} +The number of elements in the lookup table doesn't affect performance in any way. +{% endhint %} + +### With scalars. + +You can create the lookup table using a list of integers and apply it using indexing: ```python import concrete.numpy as cnp table = cnp.LookupTable([2, -1, 3, 0]) +@cnp.compiler({"x": "encrypted"}) def f(x): return table[x] + +inputset = range(4) +circuit = f.compile(inputset) + +assert circuit.encrypt_run_decrypt(0) == table[0] == 2 +assert circuit.encrypt_run_decrypt(1) == table[1] == -1 +assert circuit.encrypt_run_decrypt(2) == table[2] == 3 +assert circuit.encrypt_run_decrypt(3) == table[3] == 0 ``` -where +### With tensors. -* `x = "encrypted"` scalar +When you apply the table lookup to a tensor, you apply the scalar table lookup to each element of the tensor: -results in - - ```python -circuit.encrypt_run_decrypt(0) == 2 -circuit.encrypt_run_decrypt(1) == -1 -circuit.encrypt_run_decrypt(2) == 3 -circuit.encrypt_run_decrypt(3) == 0 +import concrete.numpy as cnp +import numpy as np + +table = cnp.LookupTable([2, -1, 3, 0]) + +@cnp.compiler({"x": "encrypted"}) +def f(x): + return table[x] + +inputset = [np.random.randint(0, 4, size=(2, 3)) for _ in range(10)] +circuit = f.compile(inputset) + +sample = [ + [0, 1, 3], + [2, 3, 1], +] +expected_output = [ + [2, -1, 0], + [3, 0, -1], +] +actual_output = circuit.encrypt_run_decrypt(np.array(sample)) + +for i in range(2): + for j in range(3): + assert actual_output[i][j] == expected_output[i][j] == table[sample[i][j]] ``` -Moreover, direct lookup tables can be used with tensors where the same table lookup is applied to each value in the tensor, so +### With negative values. -* `x = "encrypted"` tensor of shape `(2, 3)` - -results in - - -```python -input = np.array([[0, 1, 3], [2, 3, 1]], dtype=np.uint8) -circuit.encrypt_run_decrypt(input) == [[2, 1, 0], [3, 0, 1]] -``` - -Direct table lookups behaves like array indexing in python. Which means, if the lookup variable is negative, table is looked up from the back. +`LookupTable` mimics array indexing in Python, which means if the lookup variable is negative, the table is looked up from the back: ```python import concrete.numpy as cnp -table = cnp.LookupTable([2, 1, 3, 0]) +table = cnp.LookupTable([2, -1, 3, 0]) +@cnp.compiler({"x": "encrypted"}) def f(x): return table[-x] + +inputset = range(1, 5) +circuit = f.compile(inputset) + +assert circuit.encrypt_run_decrypt(1) == table[-1] == 0 +assert circuit.encrypt_run_decrypt(2) == table[-2] == 3 +assert circuit.encrypt_run_decrypt(3) == table[-3] == -1 +assert circuit.encrypt_run_decrypt(4) == table[-4] == 2 ``` -where - -* `x = "encrypted"` scalar - -results in - - -```python -circuit.encrypt_run_decrypt(0) == 2 -circuit.encrypt_run_decrypt(1) == 0 -circuit.encrypt_run_decrypt(2) == 3 -circuit.encrypt_run_decrypt(3) == 1 -circuit.encrypt_run_decrypt(4) == 2 -``` - -Lastly, a `LookupTable` can have any number of elements, let's call it **N**, as long as the lookup variable is in range \[-**N**, **N**). If you go out of bounds of this range, you will get the following error: - -``` -IndexError: index 10 is out of bounds for axis 0 with size 6 -``` - -Note that, number of elements in the lookup table doesn't affect the performance in any way. - ## Direct multi table lookup -Sometimes you may want to apply a different lookup table to each value in a tensor. That's where direct multi lookup table becomes handy. Here is how to use it: +In case you want to apply a different lookup table to each element of a tensor, you can have a `LookupTable` of `LookupTable`s: - ```python import concrete.numpy as cnp +import numpy as np squared = cnp.LookupTable([i ** 2 for i in range(4)]) cubed = cnp.LookupTable([i ** 3 for i in range(4)]) @@ -92,72 +113,66 @@ table = cnp.LookupTable([ [squared, cubed], ]) +@cnp.compiler({"x": "encrypted"}) def f(x): return table[x] + +inputset = [np.random.randint(0, 4, size=(3, 2)) for _ in range(10)] +circuit = f.compile(inputset) + +sample = [ + [0, 1], + [2, 3], + [3, 0], +] +expected_output = [ + [0, 1], + [4, 27], + [9, 0] +] +actual_output = circuit.encrypt_run_decrypt(np.array(sample)) + +for i in range(3): + for j in range(2): + if j == 0: + assert actual_output[i][j] == expected_output[i][j] == squared[sample[i][j]] + else: + assert actual_output[i][j] == expected_output[i][j] == cubed[sample[i][j]] ``` -where - -* `x = "encrypted"` tensor of shape `(3, 2)` - -results in - - -```python -input = np.array([[2, 3], [1, 2], [3, 0]], dtype=np.uint8) -circuit.encrypt_run_decrypt(input) == [[4, 27], [1, 8], [9, 0]] -``` - -Basically, we applied `squared` table to the first column and `cubed` to the second one. +In this example, we applied a `squared` table to the first column and a `cubed` table to the second one. ## Fused table lookup -Direct tables are tedious to prepare by hand. When possible, **Concrete Numpy** fuses the floating point operations into table lookups automatically. There are some limitations on fusing operations, which you can learn more about on the next tutorial, [Working With Floating Points](working\_with\_floating\_points.md). +**Concrete Numpy** tries to fuse some operations into table lookups automatically, so you don't need to create the lookup tables manually: -Here is an example function that results in fused table lookup: - - ```python +import concrete.numpy as cnp +import numpy as np + +@cnp.compiler({"x": "encrypted"}) def f(x): - return 127 - (50 * (np.sin(x) + 1)).astype(np.int64) # astype is to go back to integer world + return (42 * np.sin(x)).astype(np.int64) // 10 + +inputset = range(8) +circuit = f.compile(inputset) + +for x in range(8): + assert circuit.encrypt_run_decrypt(x) == f(x) ``` -where +{% hint style="info" %} +All lookup tables need to be from integers to integers. So, without `.astype(np.int64)`, **Concrete Numpy** will not be able to fuse. +{% endhint %} -* `x = "encrypted"` scalar - -results in - - -```python -circuit.encrypt_run_decrypt(0) == 77 -circuit.encrypt_run_decrypt(1) == 35 -circuit.encrypt_run_decrypt(2) == 32 -circuit.encrypt_run_decrypt(3) == 70 -circuit.encrypt_run_decrypt(4) == 115 -circuit.encrypt_run_decrypt(5) == 125 -circuit.encrypt_run_decrypt(6) == 91 -circuit.encrypt_run_decrypt(7) == 45 -``` - -Initially, the function is converted to this operation graph +The function is first traced into: ![](../\_static/tutorials/table-lookup/1.initial.graph.png) -and after floating point operations are fused, we get the following operation graph +Then, **Concrete Numpy** fuses appropriate nodes: ![](../\_static/tutorials/table-lookup/3.final.graph.png) -Internally, it uses the following lookup table - - -```python -table = cnp.LookupTable([50, 92, 95, 57, 12, 2, 36, 82]) -``` - -which is calculated by: - - -```python -[(50 * (np.sin(x) + 1)).astype(np.int64) for x in range(2 ** 3)] -``` +{% hint style="info" %} +Fusing makes the code more readable and easier to modify. So try to utilize it over manual `LookupTable`s as much as possible. +{% endhint %} diff --git a/docs/tutorial/working_with_floating_points.md b/docs/tutorial/working_with_floating_points.md deleted file mode 100644 index 749a396cc..000000000 --- a/docs/tutorial/working_with_floating_points.md +++ /dev/null @@ -1,36 +0,0 @@ -# Working with floating points - -## An example - -```python -import concrete.numpy as cnp -import numpy as np - -# Function using floating points values converted back to integers at the end -@cnp.compiler({"x": "encrypted"}) -def f(x): - return np.fabs(50 * (2 * np.sin(x) * np.cos(x))).astype(np.int64) - # astype is to go back to the integer world - -circuit = f.compile(range(64)) - -print(circuit.encrypt_run_decrypt(3) == f(3)) -print(circuit.encrypt_run_decrypt(0) == f(0)) -print(circuit.encrypt_run_decrypt(1) == f(1)) -print(circuit.encrypt_run_decrypt(10) == f(10)) -print(circuit.encrypt_run_decrypt(60) == f(60)) - -print("All good!") -``` - -You can look to [numpy supported functions](../howto/numpy\_support.md) for information about possible float operations. - -## Limitations - -Floating point support in **Concrete Numpy** is very limited for the time being. They can't appear on inputs, or they can't be outputs. However, they can be used in intermediate results. Unfortunately, there are limitations on that front as well. - -This biggest one is that, because floating point operations are fused into table lookups with a single unsigned integer input and single unsigned integer output, only univariate portion of code can be replaced with table lookups, which means multivariate portions cannot be compiled. - -To give a precise example, `100 - np.fabs(50 * (np.sin(x) + np.sin(y)))` cannot be compiled because the floating point part depends on both `x` and `y` (i.e., it cannot be rewritten in the form `100 - table[z]` for a `z` that could be computed easily from `x` and `y`). - -To dive into implementation details, you may refer to [Fusing Floating Point Operations](../../developer/float-fusing.md) document. diff --git a/pyproject.toml b/pyproject.toml index 142cdc058..e1e2280e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "concrete-numpy" version = "0.6.0-rc9" -description = "Concrete Numpy is a python package that contains the tools data scientists need to compile various numpy functions into their Fully Homomorphic Encryption (FHE) equivalents. Concrete Numpy goes on top of the Concrete Library and its Compiler." +description = "Concrete Numpy is an open-source library which simplifies the use of fully homomorphic encryption (FHE)." license = "BSD-3-Clause" authors = [ "Zama ", diff --git a/script/doc_utils/gen_supported_ufuncs.py b/script/doc_utils/gen_supported_ufuncs.py index ae1771146..fa2b0b820 100644 --- a/script/doc_utils/gen_supported_ufuncs.py +++ b/script/doc_utils/gen_supported_ufuncs.py @@ -7,7 +7,11 @@ from concrete.numpy.tracing import Tracer def main(file_to_update): """Update list of supported functions in file_to_update""" - supported_func = sorted(f.__name__ for f in Tracer.SUPPORTED_NUMPY_OPERATORS) + f_names = sorted(f.__name__.replace("_", "\\_") for f in Tracer.SUPPORTED_NUMPY_OPERATORS) + supported_func = [ + f"[np.{f}](https://numpy.org/doc/stable/reference/generated/numpy.{f}.html)" + for f in f_names + ] with open(file_to_update, "r", encoding="utf-8") as file: lines = file.readlines() @@ -36,9 +40,7 @@ def main(file_to_update): keep_line = True # Inject the supported functions - newlines.append("List of supported functions:\n") - - newlines.extend(f"- {f}\n" for f in supported_func) + newlines.extend(f"* {f}\n" for f in supported_func) newlines.append(line) else: