My to dos
+-
+
- + + + + + + +
From 111f3868dffba99e5613f72bcbc81c27d82f4d9b Mon Sep 17 00:00:00 2001 From: Esther Lizardo <100808713+Esther-Lita@users.noreply.github.com> Date: Mon, 9 Oct 2023 09:48:15 +0100 Subject: [PATCH 1/6] docs: create nextjs tutorial --- docs/docs/guides/tutorials/nextjs.mdx | 774 ++++++++++++++++++ docs/sidebars.js | 4 +- .../img/next-tutorial/cloud-organization.png | Bin 0 -> 43867 bytes docs/static/img/next-tutorial/dashboard.png | Bin 0 -> 75373 bytes docs/static/img/next-tutorial/hanko-auth.png | Bin 0 -> 15993 bytes .../img/next-tutorial/hanko-profile.png | Bin 0 -> 30932 bytes docs/static/img/next-tutorial/new-project.png | Bin 0 -> 67489 bytes docs/static/img/next-tutorial/next-config.png | Bin 0 -> 130664 bytes 8 files changed, 775 insertions(+), 3 deletions(-) create mode 100644 docs/docs/guides/tutorials/nextjs.mdx create mode 100644 docs/static/img/next-tutorial/cloud-organization.png create mode 100644 docs/static/img/next-tutorial/dashboard.png create mode 100644 docs/static/img/next-tutorial/hanko-auth.png create mode 100644 docs/static/img/next-tutorial/hanko-profile.png create mode 100644 docs/static/img/next-tutorial/new-project.png create mode 100644 docs/static/img/next-tutorial/next-config.png diff --git a/docs/docs/guides/tutorials/nextjs.mdx b/docs/docs/guides/tutorials/nextjs.mdx new file mode 100644 index 000000000..1e3c7302e --- /dev/null +++ b/docs/docs/guides/tutorials/nextjs.mdx @@ -0,0 +1,774 @@ +--- +title: Next.js and Hanko Tutorial +sidebar_label: Next.js +keywords: [next, next.js] +--- + +# Using Hanko for a Todo app with Next.js 13 and Prisma + +In this tutorial, you’ll learn how to build a Todo app with the Next.js 13 popular “App Router” structure and understand some of the most important changes that come with it. We will build a fully functional todo app, handling the creation, updating when completed and the option to delete the todos. + +## Let’s set it up + +At Hanko, we understand that finding the right stack for the project is a big step. In this guide, we will bring Next.js as the main character of the project, we will test the Client vs Server Components. For the style, we will use Tailwind CSS. We will use Hanko for the login and registration, user management and logout. Prisma will handle the storage. + +### Initialize the Next.js app + +To create a new Next.js app, we can use the `create-next-app` or `create-next-app@latest` command-line tool followed by the name of your choice for the app. Open your terminal in Visual Studio Code and run the following command: + +```shell +npx create-next-app@latest todo-nextjs-hanko + +Then you’ll be asked some prompts on what you will use for the app. The project configuration options should look something like this: + +![Pre-config Next.js prompts](/img/next-tutorial/next-config.png) + +The above choices will create a new Next.js app with the chosen name, all the required dependencies for this project will also be installed. + +#### Understanding the project structure + +When using the version 13 of Next.js, we have the option to work with the App Router directory instead of the Pages Router, for a quick summary we could say that: + +- The new directory named “app” is replacing “pages” +- “page.tsx|page.jsx” is the new “index.tsx|index.jsx” +- “layout.tsx” is the new “\_app.tsx” +- Everything is a Server Component unless you make it a Client Component using the “use client” directive at the top of the file. +- API Routes are now Server Components or Route Handlers (... More info on how this is very important) + +Remove unnecessary files, such as logos, icons, etc. If you are going to use Tailwind CSS make sure to bring your desired configuration to the `tailwind.config.ts` file, defining your color palette, fonts, breakpoints, ect. + +ℹ️ For more information about the App Router of Next.js click [here](https://nextjs.org/docs). + +### Setting up Prisma + +Install the Prisma CLI as a development dependency in the project: + +```shell npm2yarn +$ npm install prisma --save-dev +``` + +Set up Prisma with the init command of the Prisma CLI: + +```shell +npx prisma init --datasource-provider sqlite + +This creates a new `prisma` directory with your Prisma schema file and configures SQLite as your database. Once we also create the "Todo" model, the Prisma schema file should look like this: + +``` +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "sqlite" + url = env("DATABASE_URL") +} + +model Todo { + + id String @id @default(uuid()) + title String + complete Boolean + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} +``` + +At this point, you have a Prisma schema but no database yet. Run the following command in your terminal to create the SQLite database and the Todo table: + +``` +npx prisma migrate dev --name init +``` + +This command did two things: + +1. It creates a new SQL migration file for this migration in the `prisma/migrations` directory. +2. It runs the SQL migration file against the database. + +Because the SQLite database file didn't exist before, the command also created it inside the `prisma` directory with the name `dev.db` as defined via the environment variable in the `.env` file. + +To prevent problems when instantiating PrismaClient, on the Prisma Docs there’s a [section](https://www.prisma.io/docs/guides/other/troubleshooting-orm/help-articles/nextjs-prisma-client-dev-practices) dedicated to the best practice to do it. Let’s try it by creating a `db.ts` file in the root of the app and add the following code inside: + +```js +import { PrismaClient } from "@prisma/client"; + +const globalForPrisma = globalThis as unknown as { + prisma: PrismaClient | undefined; +}; + +export const prisma = globalForPrisma.prisma ?? new PrismaClient(); + +if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma; +``` + +ℹ️ For more information about Prisma integration click [here](https://www.prisma.io/docs/getting-started). + +## Building the user interface + +The goal is to build a simple "todo app" with a nice login to protect the todos, for this we will only need two pages: + +- The login page where the Hanko-auth component will play its part in handling authentication. +- The todo page where all the todos will be displayed. + +### App structure + +In the App Router directory, the `page.tsx` is like the new `index.tsx`, which means that this name will play an important role when creating a new route. You can define a page by exporting a component from a `page.tsx` file. + +Now you can update the `page.tsx` file to display "Hello World" as done below. + +```js +export default function Home() { + return ( +
Hello World
+xr}ZfryFmlC2K z{1Wq0)$v7$BM0=6xc}6cK-}diY!e%%dN`5U7f;Xk(*0By_gMLmeZ% zS+2x~8dW||AR1}=A~1)od4 Ort^g7s z8hcxTsYKN&>Fz>{@d^ZttJ^HbWws;2w=5<-6wM}LXv4Sq$a`|gxmv7U(SyrROtORO znqEk<$QEaifQh<)K2HXb-SqS!N_K!-L^}#_WPUX6M f&7ITdfZjim$x^___dg)c9&MQ$^I$KRU zc?iSIxp>5u?3Ss-804tdKf(HuCs_yt7qA;eKs`o2Am^wMt?H*4!|sRZ-| tE5g**a%BfqLDL~v qDGZI#IC2DCH4` }dQr{^=&y4h5@PFIl z4pZr+*(|6F!f~)8nA6VYDg+i9JYd@HGK3Ad7P`VEXWxm-Afbm4{B9{ZPV|Cw3G8e_ z1|A^R4MZ);FCbR}Q5v9Ds?|xqCijI)cA>70%Hh@XU%)dv$Kd+OA{`;3fxnLwjUPTF z^?;YPE(e`BI5TAm2z?bVIQAJmnbFLYu4E;teOe(R6mp}5ukI-jf`lLUpB@(|-R7=w ziKr^IPc<`|bj(S4gUxyGEeBn?&P%j8 S-E%%0`?!+Ec5!sLJb zkg<=W4p6oI{B5|-cHD^Q(^-$l6zF}sF;%__MA&3b8c2noKE${NKtJb*4Ehzz`q6Yb z&UQ&PbSYSrJR9qrm>+tYX})a69Xf`grr&Ff=`oSmv@T6J8-)U;t(osK veOi;R=`@Vm)2>^_~c-gG@eShXwJ4*kCwA;s`L6bJeuP$ SCqy}9ZOSTfo;v#E%L~-lc;&IHE-3A;UgnF{;yRMC!-}ohG)TP8(?V4^R9WYaj zLZMjG^;q6F3bA~ja>^OZ{Kj*0(npW&p=^i$ A7fI-%zPm7pWRyCJvqXb)%}mTE(m6il9-n z#HZZgPJIN?Q8r>^3H?6SVQ+aOph||t<8b_yTz6Jt!+W`g;JH8-n@|a0e(({ifCs~k zmCS0;QniE~V@rhTa <|`{bYU1FZc(3{LBahHxCmq?t!RniCB@viL zaFI_#4;01QmK%ae*}ad?bx}UG)uJLjb%x3GT#Hojcpaz<@0QV+l}FUN6;?8`NrQhR z#BH%7AYO^j*{i$F0kh>z;+|vyBCzJ6m#1R4q0CBC^i7}i;6O0ePq& %y)g`T1g%-yz7vgy-N(IxVCMa9sG~pGXix0+LFLW2 zr(9gAye1u%!nL?$N&?HDw0F8LHb{ATbu7DNTQnnYO)6!wR)Z9dzZ7& m8>=TnZNoRRl2%C{NHe?pH*|%_aE&BiNBZ?urvUl^SBT1 z7x-v@C!XfAVqAZT(m0j6SHL8t)Byb`iTfm^0NR&1?jSy>G-T%NkZsY0*$cqy7F0<- z1vlDrko7t! lh1%*6n;07f%rE##Afq#~U|_Vp+Mk0}s|lT=5pw z&m`tL>@z*GWBENlGaU00y@qbh?;`kGmYq1E2+mJq&2@eJ3He`>D?&K|;JT=PS=M3v z6x4f)hVNgHky3PsK0@YYi066$ZKNA7^c(?zCrebBn{$ bc*tg$bJ6fB>SxB;2{J7(n?RD@<*D^l#vb%%)G8$5 zyu97q!CIec?mZ! Q!#K zJ>MT`OdR7??(ULXzrhwQGj6>M$pqO+siWhga{^F*Bukbj^bDKIF7K~EgLr4G@t-+H z$B}^cRtvsK6S+a<)}?!(lZMUZ(I~JMuj3b|{{lC>NhERoIs$>QF@FmUA=bJ6+W{Bd zU-kEBDheh|f!`7@0nze@&Hl4QuMLTQ@AqjtM0?|Jb;4g?=I%E5r;Go;E>w8ot$2k% z@BVBN7b97#5ezM@!ug_vci(Qa^$d^0fbWL}ckHW8A;B%$D*zMq`Od}O)NmIG#}rhx z9~0>I1(r{Q?-BW-T7qyJ=(|lD-l8b3ikp6%p}Yxoy4IIey48Nig5J@sd!^z^W?t29 z^6fqQElZh-_+%Z#_k*wXg^tbo-q>l=z9uKL6lCNDf>$P=-*(MT9OSj>N?CbTf`*GC zck`0bU03;$kBXU(%PsmnLe1+PYOyLd0AShUybdDHg!ks+yM+t23qLhN{>bR;C^5*< z&ki~e8;2Ff55UbW{Lzct=@O3byxV}OLN2LRK6>8-21V`Pa2lT{7_~K@TIGlS(Cz7D z>1{pNft${W-!3|}vIqFdxW*B=iZ`050Kcm7c|=jwp|btB^u=~xBCliYj!~DPL@OrS zSv=sorFZl3rOC78)T-|^MdFCDW*jo%rrjGMZ-r_u^@uoR6~i)of~fo(phEX((vRkb zYR2LIF87^a8xOh&yL0uXsLIo@P2{>hpwX4@>$_`hi&0uhct#*WGbw$oP_$hI0SkJ2 z7AbK7Z%vIjn`8MczWRyl`tj+>nqoc$=O=SG@gBtKVoaSKLR2>B&>&sPF}!1jz|h)d zag_!KDYI>Hnk=S~&J5gV5_nRVR$(P(^QLo7hSSofRd1qLFL?dpwKdI;7Kj9G0=3bL zp?4(Vug|QbNuJk5laO5!COTw#A`NDEbW}2}0cH*Av8QKIHs4_2+WTdSdo8C}n3#N5 za_eeoXe6pdFUSuqJkM{LD81}X)XLJ8@y2sC4z=&umByMVYv=%{#*Nw+((j?%%$uF_ z=sCx9?kom3dw4|z`MucIVBW>o7Q7kw1$_7`#eOLM{z=!kl?fnIXznhZIr9*Jm**{yF3gTb^*t9BWe!~#|!AAI_L5c2Ny>XAD z1-@d;_hg|G#q;-7GgL&xK~8xzt1GeL{3IA1>%H_aP=siCuqr#WC`QTVgbIJiDMdHy zCl6e8m7(R}$r~O7e9t5gURV!u_c+|X<6 4& %~} z%~#+*SXcMone P;J!?SyW#$~VZ zOoqjF@;HGTU+${)S&of{<{ET{1nxQ-j@lTzVpldYJsJW%siNoCH8ATTRQJ}4>`!z* z2OY@^nn|2q*O%GMpH)y5(ZP-Qb-dDA)zF5^HG=Bx@UeT90nd76-7BM<2X FMJH&CWd-gZ jJen!foFr=1OPO*~@C%W{IA;%$Z)hac zFSE-T$@!v0S;Y%e C`1Ec}Dmq9%CpDu}oCt@NT5vJ`gz74hd z+xQ>=39>#cvrbUYyMaGn_Ge(_oEFZcSfw_sT5;Ll;xBBumSr#KO9q_?%9BjsxxlxG z7NNie+C}a}{`ax|W6}iD5*A@eO^cS7>GbRhy=Nqo3bKMtn0vmPEO_!K $^znE zb`B;Btqvs+ouh-w=clW|= %9NYgc?zYu?tN@FNA^v1^9yQug<-}u8#q_w5mHJ*1HX; zisFuc>|Uhs{ml&vor^b(OGXa~Zu1?}*$W;~akJ~S9LAUu?2j+~iT+$Sq}`hqWY_bm zGp4Ko?=~+aj@$7M{Gve*LhQBsTgE@{coX{O_=?33D_!}(1gy;XNuFQuYH{V!ufDjP zn)1yHu@4!L1HE4d-+$(o=X*^VJ?;nejD &Bw@p;=A79qzpt~~8h(@7 zCFeKbYxSdu?--GV*&wMi$d9J8lZ$H^)a#2@<$ZF;h@8+lKQbzpa>L59Q*`KgqFrBH z)MLhpbQ6`6V@>z%_lZ^7;A99Qghh58TecPS7@5b`lzooQIhQT(LrPtVdo(Zs@+1)b zytfFQzkKHr{)Pg}mr$V122NaO*;O~lxVvdRVkk933RTad2l4yOH8Iyttnlz9&_t<= z0Wsi&)Mwv6-sao~-gPD`nAA4auE7$#@42?QzabwK-+DdkGvy}>>2VO?ag}d1RN$`v zDR1D9BL6xc7);#P(?%;*G(aeqbR*vr>~p`;;9O=GQ8)8h>c#gJnXF0rV|g`YdAUzZ z9g#Xajy0Zn3$CDpT>;yl-90($wex2zr0=eZ2;UxZ^hcQ5L{)MkpJDMW{*_ckpmvj^ z_Mv0;3t5*vep?XA;a9-ufCv(@>?>njpUvx@@^?`!LgPg1FAQ1r $3bvk+dkB}58v`ZY#9aue^MP_WtO!Q5tjWkZZ`Al<*+Iij!$Jq zk-;wrZ-(pK@cQ*#5(ldFj&AY$L~`2=3gTb0@VS}iPT=#Nr>JD3KrNpaFq~lBf0?#- z)*@Ta)0=H;g>70bz`uTkL7+Yen16ToWxik5Z6V3QPr9}Qx%3hlGMi=tmD9PL*i;-e zbF5=??ma_)|KiWtR!R9w$fT+k-?Bh)WZC4N8a%{NePN?7kB?z!#)kUEE pX85fv%ur2fxQOOiy>_#I-YRq-1u5wp9PvTI+Yx>UBq6nIu#;=il z46ld`_$&fb?|7c_NUzhZ%aE@Vmk00DPGoc&_AF@?__5Y6+OjuVJiMTOE?K1cv3C)E z!-L$OK~?Ij|Ime)6k?c*`I^7av*!bSlRMHqXXEY0&CC8Vk3Svco(APvZys;Ll{t7l z(pw*`6s8S~nQPdDO0&E;OmiE0NpR^h^Jp*F41t!LR-;xYYIO|KK|gLyR?K1C%EOC4 z+|WM1&jPr!d4iJcner()%Tf$BIXT?9Gnyd^&`;00=Vc@Zd}$ZDf()Rn1@UEpxCj`7 zWiP2}q7yCRvE=a#9dpKWpNmD{2B+z#Z_;9zg2vSnQSu(yPn({^&NOyk*>0tBXPFF! z*5Got?nr)n`o$}O@>JjRMrzQCE7v5_9|M^z)9Xt!sU2+d4|;GYv8Eqxz)CaC(^Tgh zn+FWRzIwSmRa)p(&$3R0q8ejV39+6>s~y?I5Fu-{SEp3mOdiLEykQqt)o5lP#jf() zG+CFaufsyBWd>cfPsqZyqjdUlb!98QYWYWxk*l9p+;KE(h~ar?EfNX$XCabY;)#Lc zGr*8K4*IArzz`3TTTk5bzd;D?*#z=MZ-|(&*{5vX<8&NyG)(NgD9-W_i)sa5gIt*e zzOjB3xEGFJZ*&I@&GOXm@NKgg3stmYuBFozVO^W0OV%wJjN?qxb`PJrJg#Otz@_`d zib0E8 gf@0&~#_7WfNHN9D*Nh zMssY4MmLdo9_?D&lwf~`F)t$VHbe0F&l^?V8)lrNMMxsTkg~h+Fi2d`q@o6Lbs%t) zaU|jE=yDIN_+ E0uze6K%l9(;i&%!xxe!ZpYv^9?0Z{*DYxw z-B73Uf>U;KNDZ9Dw}$KE@;3UO)kwnLD(M^sj%$*78{AH$VyLz6q{Wg2Dx5{~Fh4R| zL$@Ea^BZD#0-<|y@(|% F_O&$9NI_w@=%ZH3DVY_{?}Q1|k1wEQaH99qQDCcOG29VY*S zja%NpV*H#@J@rt2f(GRW0RThnO^37k&(CF1;xwmAUGTNZ(>Oyiq;_rzp8YT%bAPg~ zayzn0_XK1#{IoF3jx1E~S#_UI$^zkl@wZt~MgrVZOMb3Mkx&!11equXZ4JY>A0<$t zQArDj%COE4HtwAP{L|(r3M|`8XP >nJeKq>SMxiQdUXcPz|=7w6c=b zh;_Z+-0yHw;u4Cg 7hAe^w-gwjf|p0OG5gb-KYe;Pp~?_&ol>*(==1>09j9DOQi zUgu*4w_+@+%?Bvd$;Us;xL-beAvY~SX$HA &$;|OSmReW`o(cw@+O^Sd0wa$Yfi| D@~6Sa`DJ z_iNqI!mt?ui#Tjn%(d3fvEg}@1CqBNEBcRoAO;SqaBtZ7{USQC94Q+5>!kY`QeF|d zfz>6$`iz_kyvgM-@6n^onPMEnHtgd?NL$QOIP4n9{A<}J->IhoX-alYyXUM6Z6n?s z-GJoQu(3QJ#yKcL{>CRjn&PxMdo}FQh}|f#SoTwEOqH^L)aJB9Nzg}I!Z#6b(^l~# zja`RH@op#g8v(aYBINf_3D(r(ou5OWQhSp%do6WMbe4zwS~4@Qvwh?CHm}cVxizzX z_M-E3cV>9&ndeMrmD-!Q!*-sM!QLkqow;0@Bq2CLCn4xl&F#v;leC9W%~er;#Tl;R zklys4_;hN8s7G0LWn30$$tPtdgEGYrSH#GcqmYZ_IC I4{PDjqqh1_+UMJ$(hWh3z(8tjja8vWY3xIga%V-V~ci+oyd_`xFwCx2$zS zK=C5#ukXnB6Lr|OLY73VydF8KJBD^d>=kqyVaU}7Yd&XMs9Ss6=Q0 SX57XXx2ORTv)xRk$Dr)YDEoOFSviz<0a&1VSSUmBsCJ=A(= ?{ydTLZNFKjgZC^^=hq~0^DU7l;?Fhs&6Qu+q0O89~v3kyf?m{#6Y z1TiMogItW`a73#oBSC(!7t5v}*NBvkjwKa8-39Id3zbAZYwZ(azuPJSP>% Csz;GcS{-N9lNv&L=?XJA9{mU_X!))} zu_n0yfwUUvoux4-I~?YhE8%8Qy_M*+@$*${KyIA)B$vfWL1m=Vw(`cV42b8jeN=-A zFnNF2_t25>teSKz(Lli&ePv5?9K}5jwQ`-z%kHD}X+Ar1elkp=1N((~SuGB>A6oq= z$ql#7*wIM+2E}JH2oq8Nj7^^0jLZ~9V$5jhmA)jD%y7EY^~t(PIvP2LFgsAI?x9z} z$!Fkf^!O23yuaO;GGU){TdYyAZi!=ZH%lY$!UkrtG-uEpqt+S03b#i0u8)R7eI+M@ znmymJVhKhGGqO;%(mq&>;e4n`Uu;0>1LGSnoUJAA&CqGv^>qOSqu$lI3FN#LxN%{K zdRn&lWWV}&i0DOv_&p9Be!;Qj@Yinvl*qlD^yGMO{ k=HAca=De)-rG4FJ7OI~r zWA}e7l1@AP7zbVSQy_H%9b~YYc_+8tEiORF3nm5S_T+#mbHofL#)9&f0StP$kAo1^ z{b;1@OQDh_hu6oH4tuhW9Up&zH8#KAAm}&1qlO%t+>qCfex^-E-kEK6f{u|Ixnycc zZYQ!&8R5H>T}3HeLXT~UmR@1s)VX7W1U&svHTGgqiG5+5#&lc0;4JQyQi@+gU|AT( zeA>kDM3J>Zxg&Ni54hZD`C5y&xX0O)llOr8T?CmiBcMzQNGIn5EhWi}6(8(5^4 zYin HA>gTKr=FFhNn_oa@;0e;c5>waywzC_hJlau?oJgLl~-H8C<^l7-Nn- z^sG&vn`arEIbUbqv9n;yB$x0IR&D)4!&&J7&owcwkbS2~vVZY@HRc!3M3;e#ywTwo zFONZO%uoQdC2z|+ZIj#R + z=*apL>F?1Im-gHnBjuFz8L5-Gg zcPSgb(^D7o#G6)HjL$tuGTrT}U@6-evf6AGo(j4<^HgB+42E$8-Em17WeAqJ*p=9} z$9E;pcHyhE0o1qVvyx)_EZsArP#Y_;BZdVpf@KWYlqbOMmW{jD7k;>LR~tA5OdbX= zces~=8nTt9ZHdeDpuKXYkLZ|Ff~vF|{`MH+&m-D4&Z*pn5c !Rb1`BZ#78B<(xH{6U(OiO5)+9S;vu~u9bhC~ZNnEc#4K|ybK`^<+w}ObeLurR zyv;PuYyLQNq1{g7`;nf|aBk`P&Z?r_;&)-+?OLU)-K{M}3%naa?3USPu_R Q<&Ah9F;Uha(E)!667FL 6ci4h_yL-zQdw zFcwrG^0FbY)+c-b^uBw`6Ve{s6%_8enD)a6mAws)kZyy$t>k=J9 V<|n!e zqNX&(g-P`$OFc;U 66~N_Docno2-zZ#a8a zBUT$|J##EWiVN@|51Ij>p&zw&eLHp{1(y7^Gpm~;sl*Vw6$auR8IL5MR-#Xek#3XZ ztsipg+Ae2pAksg$`K*{sW;UEL_=t0pWhFQ*yy5{*{NwGYC39;9v;;n&<)NO%!^9g7 z{Cwe3gNV0B?V+W9QD1y5XuzWL3`Nm_3QJ=@3P6=5mro1t{YF(+UXkb>meT%qCtqe7 z>&fvwJaaYoBPo5+RC?C5D{t39mqAhYRq%}#x8M{b2mS6f%o+o9wJgqvCsLz3FdGzN zY5tnw-EYC*}$R)Y70$z>|o1`LoA)HgdMKI2IFe+i)Eg?(QyMwWI&Qm4Coul~;6k z-+^DTkn;cEobICEw`|&O1`}7{Z_qDy4-rFV?x6nH*#DL%YDK&SHo-7Q{vVM05By9c zsuGs7@}QgMzYz7m-#oX7cvY(Vch0|I%f$XPJ&AZU1%OPSB)pL45&k39gY(O`6#pQQ zZ`Q|tESmcACkakUO|(tZ opNY{Kb$s^sE+0sAr7Yp8^zw5munq7B^xNi~m6+1fC`O09cs2IrsF~PCX0_ zp=^EuaPE5@+t>=vZiU71m(OjW#KGpc%=1A-@j!uNSJy+p$^N6`P=}iB5;h=hdKFHs zA&US}BUeA6zt$MgL*-hMyEj|kvieijPtZ?6YKoe%-6WJ&kcm=>?Mbn4E`l2g^VU(m zZ&%FYM9!gO6`vnfx%~EK$(@3UwXs?^ap|P)@}S`SyBe6yeZ-|t12Gb4vV$H+!p2(E zx(xfcWyQVExd46bOVjPFPfryiapjwHpK;b;N#C@$=4Y-Jkcu6N74;P^lfFUOR}_(c z;~w7kdL&SqnWwhjehz|<6|-WC@9w=f!*4K)k~(5o8 >;kz_cko*lIMJTkG~3Ci7X!Lu+C}wY#Wdmd&Oj!h&9{06m?X7dvf_BU_391ZqukQ z+_bGKF5ft+J}Z-=;oLk> @nXpMeT;>No&(&*g68@>%}+LOwefX ziwDrYYmL#R9Y8VU)7Xc7`pp2_+HZ5NOD4}C>4oxsQX(Mz``n`?Qh_JdrP%HrTBPRp zD7`o$X{_I)x%b|%a$_D{8uZ!BMAK;)Lm8A!0YnZNnQHLZ&XmR$<7KT-YJWE3#)pOq z&yDkofWFNo3(C=5+Ne~CQR-1D0)@jUT}AS@IBCAuw+Tzf++U=hchrZ(UIHtstfeWs zpJL~ii3<(WyShzS?0k|~)9k=vJlh#NVaIZgRdNDCO2SH8bl{D$Vw1r4SFO#BBKTz< zfIdcLZ8aMv6JEy4*qSbB`IQ@lMXUWEYgsU6$tuCsLMyqp3eNF-pq}8^a$MscG1afX z-<~~bHtsEm-Wd6Acx e`nFl?!Jm>)i02Ii{Q^bp=v@tVF0yg>;WQomj1`IoJ8>)YzTW!(WC z6zE)4pz+g#$Hn6$OjM8|*khxN4@?y58WIPg7ijN pSt9vB zx9?gXQE= H++UoeQamgAY!{d6wCZs4WwhG-ZVv3Gt)+vdo>S8eogF zDKbXKmE!@DBBh3EPrs6~H5pE#>-$Uw^Y3(5 v6n5AvvP#$Hwf|9egHT^Z6uK`*`le_G!%iACZ z)VsL;mT4{Qh#KF!r_a-Nse10cr2!};n)uunw4OEcMb(pDilkVis$&4nEwx{^znp7T z*3#mPd7a*n$H;^EMb_wQCm7j|j-w{z!xmcq26sI ^rGFr?OMp0Pe-qLe)_xAVCx!$D}E`+!~Ly?SGSCkLR5*(=7!6hyYM zmY5>Ykb9J3-Eabz;JQ}Q6QD*?VxvM|ZKC=g>$+TS|HQrHX^SZIb3d wGn%J2nlu@Y;Rk?RWWb3Nb{qu%qU|=);)e`9o(Dl#EdPAnUKSSNCqk=ey~~zOSXu z?N&REkE_WmrLc>jPksmr*4`C00?d3Y(uXn1w;!En-);#WQ(Mvf1M~F(A6Bsj*auT^ z1~m&*7mx_8_ervWxJ%3zySry&myPlKXJd;21lzmuoy~Y3`=Q|I?ku}g5sT^*RQn%{ z?L*J*0n~dv@5MOsv%|e}z4UG0N_wYa^3HnBn^ysG8B=P_0>Me-g+48D2nkPL+0Q8~ ztFw<7OO}i-zu2Huow+s10|@}9rMszmZQhFtSCgE#w-KIrzjrRWE`KE-Lyg5So;_4V zQi8m(75rMvLd|21J$A3xtyQMFuKC2yE)~u&6ocnhZue!6Xz)Fz9;)}5k4Ma@k1vw7 zqQ3yTl(_M^OV@m_L944TZ}NP`ovHVpD}#PrE435 F~J z+A(L8+eSBc?_k3vW>4&O>du_ER@CcW=}Sb~rT6VZu_4Qik^{T4S+Aa7tDxN?eux3i zFUdIf*B<7-z}jh*mh}woKIf$6%9S)l*HfzNXi-#>9ZKbh*|HG1PJ&~qKe=y7abbW^ z=qhy`pi>^7;spp#smZX-ux)a@D)Cqc@C3) c&MNZPYU&w`> zQg&c wqX}($usBfd{5p-r z7F1TW*Rp^0(0BNBjE@=Jx+~0u6}k#}e);SX8k9pBy!pmT1~bC$zmM_ji2Cysz~aT9 zz$GRCAw>Csg+~wP4S7lf@+INxe?_IOH{bMq?zw}@Tzhr!9^ZND?y6aK2=f2)^hDzH(>>yN%a?UjD}~tA3{hg zyo#KLs Zdv}BwjkM$OEI?q^;x+>?i<#o+_uAG0g6D}k zwNgBuC92IjfQFY|^Yw?A1PGXKGBLn*H ?KoVYiPHfY; zY;CR3w2wp_Qlp^->0we?U(EbOj=0N~T!c~@zkJCJ(9@@E?py?)UfE7=u>NE6-rmXY z^tQ|S#%ZoGIb&*F^+awzG(+oFKhxZ MAvch zD#VG0YX2&RW@aKZoLygUP(oiP!;o6D_^o^BgP&bf+m;uoXb`vq`NUO!7guw4d$i!s zV|II4$trU@o`s{gn%I6!J}|R}^RxFvwSQ9ZDyv6xpYVrz0eRO=J^zfS97|~Y=|H^E zW=+t|SDHH}?SCepTihEosLpYbUY!=IX>nbz4?bP4x1w2nR*ULep}y&9M9qZ%3dv>v z=)KH%#cIYDXrV1~ZOEhL`tb|IWqiZY@*R;r?ypp?rVE#vqC*%{d&wQM2XY>m5jW;I z8C+Vz&+K1~B>=#Iro9n}&&3n-)?KeLbKd}Zn8AVHs>^p$pjJAGHrRsU((Y)#nlRj= zzSv}N`=p%6I5G**SZLIx_+seB`b?@*XS$fJYP0=bFvmWkT)-}Xk8{H8h+NilWz2pE zzyjLU(TB{ C|qi8!yWzQV%k>iE?qsRqfrS_6bA_V X`O4m^f JGu+LVZT;OUYy zyCGtRcb^=SJ;e9U1IfP!ld}}xk;`Y=9c;`+psyDPqbF8`wvvHUT@UT3)1#8_;DUl8 z@TImYRpQ!r`iDe=Ywec9?R>o?-JieYe@ZyO@vk5&641ROUEc99bDzi#o6=2Ec=3ng z)R4A({vG-JDdU*Z9t0QhR$oS`yw(6WK7*J88Qj5aCykied=anl8E)S2GAd8-o7%Zl z-}~xakRi6T_~N+j)$#TV-m?K@>wgi?W!ZZ7XTANoe&5~Vqx~!{ufDZ3z5MDCXE$l= z>xVvnre~MqJm*vbR`ET#CJ!cf->2x2p8Q}-2O2%vgK-nrhyB_E|6H9keI&8XeS78J z&qMWFa@^tuWNUWPH#Py{%8&SD_v%nA@cDn=*ZyyPzS-h`_VC|+`G40xXbb++2FZKA z`)Ih#;rX}EGhzDqQ1xqP%ui?CkqmSmH9b$v`D>T^c4S5H!nvQ`O8Xvr?z5GZI0(y0 zlU+4R|4UoxH#UoQ0RO*`^@2aG4j`b}1|#IIa|)}+&tBhEnU25E%2K~x*>Kjne7hnO z9{WDv>X&%Sjv;roSpdf;3Kd= * z+hGe)3^52BcFkcna}#?C+Ti;tl)jr1xRrK2V4hvhBjs>?1_ZxxBCrdG5|4DHtHkAA zjkVd?p=On>fEqFcH8;a|p}1W>Cl*jDM?S1B>tx*f!s0rRU1FH7uG^hSAFJ&FcX^=- zOe961=WPL%b-QxbfuBGC6H7__HyKty9%q{u5Ix^zodm$IT^>5kciq_)^QN)h4cV3X zLJ74tw(KVbKo7fW!kfi6tbra#LThnGyZyM5x0`wDP9PCEKpTRwz%}V|_d0(pbA7kX zAt|UOuZsUlpuL(#H!$Px2aD)qR+m@bY4q8KZw@Qf4XaJaSR Bpi5^ z0FX#R+nb1qY3@mn4=$q8h{K=nS3XxuKo%AqH4sf&p)I*l0F~e05`OoCwq71vHK*m9 zWT=W)&YfNFLY1@WC!CcKkKj+Z_xW-&h8)(Ju7O!Q8Ez*aWm{3lvFi5$9ix6P3A7vR zi)fw%g4Amf{L*KGCE=7Wip|jF%WY9db0ZcHd+p+YgcSJ-x8aAkn|z;ukHBq9fyO^p zwc;HX`hUz6O`Lw%u(2<$VB-7?essuuI8wI0=kDMVD7WY+|5RpUM@ogNIG$fNRs#bS zaWr!ud>I7tZFjF(8MxkI)G?MZKA(tfaLXIgQN&S7m9XWo4^EBEH6yP*du(4#2#{b% zuqM#5%N5~Oo)A{4C4>3GyH+kNX{53JMbJ!W!d5ul?}um-c#UiT h<%4AlC<{g=u?~Jt#_Ful2*5bCV?lnH9bO-7@e(LztG7KZw zYf$BZv{UaDwL``1hyDE!c+MJJuzD>njk0%}c#fa>?HIXR3xwQiGCbckfmzV{m?FOF zuteI$Yh~O3h5FI+58|VQA>~;RL_>@Lpij6rV(swYQI@7oFr>TrIkN;zlMo4N0a;YN zh!T;1uT&aPI`k#oGVDrE2hiqXWb}Dvi8LU9S+>qIqYn88XVnX2Gr<6`++d#5{ocg3 z5sazXPC)=53e0}W?5Zs`27oCupmKXQSk`!Hyu5fpHwsnI^U2K?eXZ@_(R5wY$~I_! z?x;aC`JKf0d^V~_p=jP3S1<8=mXhc`8|il(ieJ(q{@FB%HOD}l?UzYH{jWFJVYY|T zeGJl+o>xKZpBxPr&9kM~OK>>$zNo!7R}^%9xl+ozOYvyNL~`UF#o0IejOen43s3Uj zZR@rtF?GNH8yS->49;tO2w^cZO zJ~>!uo;dKv^z%pnrn0iqsor>L=#6`ULFyevoi;+n1j{3!Wn0<1weYw}xp!W{M^!`O ztL~$&<%g(uu`G Aa7cZ5aKf*p-g=x*ZRenK|MWU3TsPG}1#u8Crleq$_Rm+7P<{Bjw%N zF78S&uEW>%kM|9!tshIiU&w^WDPHUfMTiHKq;C$r_BuacbD?+2qFt;vNSUwhB9I`t z4O8i4t=VOd<^&*lcEyl`9bTM0M;&pp5^-_c*A*7+o;@J~e9vJRU~(4&mD#}0i2y|Z z_MFQnwzQrV2`&I>dboB6PNGo!{KA}!j$b?D14G;2rTxh@`ynPjm0jZV>|ENzs$wz! z6!x
(}u?ijd_jvD=YG1cvqN9K5qTezm~6#ljk zcH%FQPZ$PG3{diXPRy_qrTF*QHHsht m4&z$@IaHG=JwI}=By!eUEsUmh}As4|iuTcji%K$aW616h6Cdj5;TL_n$s z#*11^iY_iue)yic8FOI8m*LPkL0=ktJJMoOiy~Ivh624G#`?B1cId~V+>UGlRT=ag zt~+_pDt@`QKHQxn8xH`Rr+^v>H*N;LEW_&9#lK@j%)oW0Ye)m?VQf=%DKyx>I$*In zC3t=qLP^xXyej57 DWp=|jt zq`KT 96)<$3*_;HL=C;q${ zY$WQ-hPbBp_L;sJck90GvAPi~`Vjl@ A<_R$!G)`jw8hv6w-kJvbNv2lsqu>t zrLTa~#}1FTm-B;z-(1M^;H=9TMkel?JFywd*9k5gp$yvv%-G}6GwBBcjH5(U4%roN zjc!{Xq{QqgOSJEXxj$jV2E}XZp}g9g6orC5zHE(V66p+G>rAP%l7$AfMI}x(Cm#JU zFV vPy zUg%G&h**x;S4IvB7iBb(AwzEOpfaTv HXM^({ BYcQb?vve?H^+KunTEjNh+j zppPB!$`UxbUZQTI#k_X+!&5#Ke m`QvyS3xC= zmf`#9B9$Lpjk3SGV` s56@(XB!dH`dSz|69{xuS8JuSA6!wTR9Jys84RM-1hcaH{SX;^F4?vxcV zEwnP~it0kh6aKOm@ud@PJre;^{w&X0_atE*^>N!JTSv{LP9jn}dR1|8{6KG0-;Gxp z?DlT0&y~?-Sh)@F#iFbbNd)6#K=mx;$IcTiTVW1fPnziDWjQ0gjzu9;y0`lROb?=v z>jCrmw^n3GHZjFLCr?M~qBP;?#YmY;wN+o*P6k7R$;RAe6EOUst_dt%B-C?Ut>$(l z?^g#+hLJKRm8=VQ*zVnLVz@kKhi7{ofbpBRr`FXrQOfKC;p&V=t*ym=;n9~4eQM2& zW(e YkU4U`=TPAAe80#=&{lU%S_ts&{x8q&e-rJu*}t)!qN2EJ#p zq3P4q{Xz~Yi=-HzZdGdfbaOS{a<&JK@wM&~rq23tcW*7Zw$?mWyH_ijnQoK(QT2e< z&bySz;vLNBX6wyI#~(JS;HqY}eEXiv^GdI^t8$KcAdMp2snb{!L)&Lcu|GCAOQNmz zBjk!xiRks)p#rM#k+c}2EXqJTYEtEN4C~xUU6ai}4;(?cf>m=y#+q|@qgdB834JE{ zA~5pt)*(Oc)5E4KmLea@l`#)c1kwy9t9z?0z_f^2BytilQ 2+&;ulEn`9p)Lp-B-Lu~UH+Ihzsdf*CuGw>xA$o1Je^BD-nes&^87QTuRSsF z#!kXE9mB~4rf%0p(w7`Un*yZ{gDxZ{YQC_ uKW1vSr+xZWxp6@ZFWLZFiEKcPiRy{tmVe!n`x51 z5)#F@q#t|;*o-egfqGOxP`Wkd$asKa9hLi=FEkSGb(ry*;a4z!Zl1U&lrOX|M-Mx> z1Y7J==L)$Up4DzdLi^Mbic8^AP)4|x!MyD{HId5M`2iU)=Gaac1VKwajXB2bjR;!Z z=y*mmJ;7HFIlZQbRPT8Zbd?|W?8)3vci||Y55>!1SKg2D*G9bI-l(`sO1JC>nlv?R zlRBWtWL0iAPW4o<|3|h6-h}(YBY~NsR}A1loWJhFhXpHUOR+#?@MhL^t)$w z&K+x?OkZibU@g-+pKL8Gw$}pa*-=ixl_x<%2F)V8{mDzXjq_qxt`AtJYSOX3Jp`&{ zVENLZ!xNoA(Ql4LJDZ)AWy|*2q6JH;(bVW0_PxZlbjqObqN61r(}R`4=AGc>e2vXZ z-hJ}IW7t-~kiWirq+K7o%6slI5(1sb(AHrus`&DVK Uo7BNx-5Rk~Y(_Z9Ag(3x z_;fkX-W@so{c*bvZ9-bKWz7y8Alb{q48@
A-FS1IOO|uZDN-wyXoLp}>aJdIcKx4c| zbr+|z;96bjJMWh*__)5m3ss48cY0s=P92aez>!pP1)c jI4IirWq1&&Yb$W<&FN4oxXL zRu(G!YYZ%G3aNml_F3J8{ (rUTTsuVYpkr6fn17+dgOQ~PtC}79cAikc zh-|CLFMq17aRBi0?@zNcF%zYFYdtVk^Q(=y#9?b?;v!0|3tT3uK_0L2r65aWVM97^ zX0RVd heX L7h#L*%XrwBIQi|wJ>p<^entQqR=x+0#)ERfw52Ar6zuR% zfA#t}lMZ1yUyA2XZRj5l%61xD2hH~vurp}GgpYA1d6srTin=c#8{$dWJB<3Ot|4n# zpLf9GB^U<|do8xm$#!#Ymb0uIraC9T?Ox#ZT<2xd*fMvO!k$`JJ@BC6^9Z3=Cnk3h z1-2_<>2rXM;R5paa*asZ)|+BZuE(69%_s@Q?f4B=yW+c)jKcPD=qJ(en^mTo&C9ZC zdBmaHYF%ksAjI~P+hT-z6C=gBpk~}>%)LhcxO*LJ34;U&FMQQQA;^ mZZXmRbqFpOtrDZI`X+GW5ZNtl^)opma9Bf^)Sp@3 zGYR1_I}H3_@4iV=qH 8BJ%5|wMTVO zYD(A=n*#U?NRSltVKq`_i+}#|(UThV&Pu7r6!fqez&flb&UETdHy89+OX1GdyDkC} zn-(_FP|T~7 RbA zM-+F%@@dCbqVo97rVAsk;Tx@2pQ8~oPg+NshFUn3C*x%iv@g@*EwLVU7tC|~qqBZ) zMxuE3eq=LR$CYg$Lz|$P)D@Ri?XpA54lT@e<|nq1dqQW4aAa;?fac>dBK{ns!~2DR z4oz$#F>H!X3ew@;>P}MzX(a2h83wQX^~zE$x?P gBgAWAqf zew(nGQSt>O|NgXKFlp)bI6mL{p|r6_DQ7jL&EUCPX=C}8;_8tc(JL{>5_UYlf~_{E z9p9_Em6}&wT!}9mtuyNPfHMjbx%bHhPklTxX*b($aPX(2%-#Wx+hK6pY3|U5!_S15 zNTz2KEe+(IyB{1_bqivj>j4Gh+>q_-+jSnr{OZiT0u^=!+^2g|6$|r}n-fLIC3ym@ zhd{hTpYW711GTxy#bgtBSG96gI=auf#^(CwiA)jfYgV!s+5lt(8j`wIX*6n;C68Tn z{v#|_>`MH&3a`$FSY2tJfP|KM=@Le5|4yu`RrpZP^X2JLd1rc- pQ!TZyq^ z;RTj+O{P&T&y*rclY`f1&EincxIaw${+bLYD=?Y6Ij0YY1|NQ=4asYo22iZd;uwV) z>}Jp?ceZB2UX+ZINUi5<#^d;!aeJH8^Vmgo8uV@t@ez|WzfRk*fQBl^C$T-#Pc9y$ zdw^QkDVfD~vS$}*)k8Kpfp$eCaM}@(d6_l&F-?c5?9fFDznx2(?JS4jg>|h>x1$@6 z?O`>prL=1NjC0@ txTrJ1)S2-<(@N5~Mm z&2x*!_&Vr(Gy&*!HGD%fILERBzn&CtUlNj=%!RBX^r(|}o+%6cJsC89L#myu>j?+a ziW-}W-Gm$QG0E1;F_koqcZIFWXs#yLRtbV9x#(1)0d=*~x%|T9K+`mQdBD6UT^`bH z@5VZi$=y>@EO)(Qc`3`*JiG>*D(`HZnh8eJmd5d8!kcP8U6T+y5JlH{@jTboVEf4I z16ipt*d}+?@_v}JPI4`5TA0Xf7iPrJhUP!c%ivE2b7|17W_G|l yqU&A^X z(X3PV*++F@#Yw7~AP+R8RHMJj6_k4*Xrp=Pjda#gY5H2S<=dFM_Y7sVhoR#}q3@ zII@X8jhjA}LoeOy^RcR}Xm&c441Pd=a?4FL8faVn>z(hg?08H+peGpp1!Nz4L#ZNx zuSbr_SVY8pUFB}#v~|B4F*#E`B#`m&ODG)T`hjBzG}pp)TuI^imv^)Ub!8|vfuD1K z%pEyCj5VC@7vXc#^Eoe3jM#ygs;120G;(koBl#X(HqFNw8MQSXk=WMvUK_j`%R*2m zL(l@yDb35)UG>t~{J75=)b*jJM{U!|oosa*IB+EMTQgq)Z6U}Sy(EGx6_Mk2D|3Gv z>51HvlQn-t`A6vf;V{-LhVgYN4{O;RM=AdFVG|(0hf$wvgaYvC+&t?hj2y02pb>x( z7oxS%ff~}bhr=gGr<;cw0eUUrIdnK+BB))#zw=7#*O8O5%oOR;hMJKW`cM;MyhKGi z+8hlA=CaW*Y5|QYM(3MkHQQ)>T`oQjIv89~D;%_CuNyq|E<6&qt-9HHD+Askqtqe2 zEt2sNL67FK{!(pJ&b*TaYN#7I=4oRWq&fFVuXG3OZC9*^#3|YmA$m(?O+DM~TBTR1 zv)qRy1>p}OkfFDnzkVq!rN^-HB$0PY#C}8>3&Ekn$77Cr6gdtzHi!ZKW(y7G- HyHF~~ z=4{7L0cVdXOO{Sf24lAzZf=k0 S z>Ur|Do-#kSFpy~A*hVBug+#-Dj`W|1T$>ljr_Ei&9Z&suL*GJ79FRDVF?s(_T6*&$ zFu5ldrdNKrtZ(=4jRw+=|KHuZ_gd(%9W<}*!=sBjszH)T-*Y%=(`=GQ01mUsOL@=( zq?y6M@-J1V96oZ(DHKS4%j@P^ju;zPGjhs0mA#n0El}Ad)@jVjR;`-p?*Ccs;Q}CZ zZ)Oc8VP)7wtbTC|3)|VamSe}GjMf-!x8Imx5)v0xCBHwf6sb*^+)a*AW?UHZHvg3a zfRA$vwbKbN^|G=}y8acYwN$lqfYg(O>#$E1JU`uc9sHVOT55+-gPJIRPZ%03MVYBo zk7il=YA1tlJOEVPc*I2ji1#^A@n Df2&n&slE+ zIcsNe>FO^l2F$AW9Iz%&UG;f?&sm-LfSlE5x$x(~^3Salq5$K$n`)~2k3Igldv*$t z^>vMJFB$(fI1Vu&%}&n0$^DxFx;Oy|<$ps4kdzc@i07U?!h5e>zIYQr3I1F0UvS`m zM)G5C{r}i7LWgy-F< JEso1=69b!^{k8Ap6#HNOFl<%3*IAY-B{noF>RyKR z?|{9O-gQ UFqc6DKa*rUlKM)2!kn^NsH0z3zY9TO|d=J&d0pFGl$pRUFppnLB(BaG!!u4QW zf(p*Au}QM1@-yF?fGkZ{Qq*DxB(kBt1d!-1I%qYBatKvhq%LsyoME;#>%Ni(D^&^{ma>oQ zc#3c{K9MjRM$WBPnpD6+2M#RuHA>|27idlt_kht|`wv pk~MzbDA)sn<@ygxAF-y>dyf>%06sdDP1gCW|#{`e#NhCjVq&g`DyCz z SVPj4S bVdgEohVX@itMyi$MTi(U z)M6C7Ah6onC8_VuCQTH#bMfKzgYXtK!ZEo%5G}&u$G#wl ZFKiIF93j^CBuRda1j zWGi36X)FU(lmym~nSeMqY 5e-e^%BXzIAr+P9V|QcXxly*1yq0Qs zy(of4^P!|_^naCvzO9>GkJC!X`~(k}htn%v(-55cV#9V?8s788t>w-1ZQw^8Fw6O4 zYl(B+Y1U28DD5D4^4xrn5Jjyh;j;-~+h=1Qscd!R%pLn?=Xaj`5oHzdfk4O&w|-0w z3}gx5Zqb|K(P(amZ4wmVt4+S66s?YnxNP5>oYB D;O83mxsF`ZeAB(9DrBN$OxbNo!pxrK}^ m7c=HPV*snga7$ zpqgA0^F9P6igbU*2A>!5ea|pB?%wF&h2#s%tHQ0*F5O#S5{tlR!B)P$vb#|$@bX+p zG0_yM3zr-d3A}s^+4FLdB+a z0{F4m%$`vD+o{UrYG2a4R(vMZ-qh*^WN-~hX(0SnxpST6FUC&$6PcumU<#&RQDq^@ zcWD%EeB1+}(`O)v= x@hsv3dCq{*->;+PM3Zgpcx=#3zXtp3+?y@* z8Dz+92udbmeupB7F=U_X>Jd9+cUrh|l5cGG2?y6{bUkUjqNZ4=l%5`l!&1b%u&t%x zvza7T_PGK~$PB)9P1!c&F89ZF%#B=uzB0d(o>nb}ot(@ph7!oKrVQRJAhh5ZvfZw9 z_l4Jrk^D!K=93H+sRFJQI>IT3;MUaxeHBC9 4M)3a9unEVg! z*P6 hu)IE3z! 8%Jpf!=Lww{Pd(zSqz#PH3Y`?Z~3SwQB06}nB5hIOZ@)$URPvzn!Ok)+Q$ zJye2q;ADKeu>J-wYOkqPU=vZ%c7u{ zM3^roM`8IHz=5}G-x`h62#Nu$4}2+ z;D~|96q;v+^ssrm5n~|Z>tqbS&&G_;@_-tos|SJOK0Dmsr2aTNAX9=HSDULqiKXJp zwjv|H;x g8Rduo`xbmJWJdBS$n1xi{weSO{sJL5Q0i zucJOK?Dq>Y3bQ(vrgylBE)VWO5XpQf?tKUCs{LQ EErw>+-z-oM2 zW72NRK2QMI(1rkU4e3w8?}cT%fY628U`VG^P+v`#b+BJf!S 4gh(+WSUIsAC=Rx4~I zb#Fvd$&M0v&@wU;%dz?1d!xxJyUyRPZnb4bD_(Z1Z9Z}9Q%cZS%jw|`l|#)7l9>A{ zl0#z28Z%gXxkkt82+CH@Fy=xJl982|xq_x!370K=sQPS@pB%1rlDyr1HT0_6gQ{!6 znxJS)lDEXu^7i31BtDPuW#x7&;n8gr_)LlI8^)I)>yNehaO{(<9pV_6CrE@g*Ato5 zftQ)1iuf#9_NS-F_pjkE!Hdm`#u-;(7kx?2S~u^tcRU5+i-GO WlJ{5t06f_ z1ixX@IflX!YXW$wV_I?iPGgD~c|KU=Bix7yOtJN(SFBwM!qc1~&@7_U(0IOea;f|b z^#GV=T)s`q^ayfRl>kYM!0)gu8%*YCKCNlzWOl%xS(Rhac>28kaj3{PNu@RNarCWL z%{86P#6Qa~fOD;78(-gA2l)e#K0FOEnY^>?3_tUDtA?22NfduVXR068n4_%$;VcSG zaqg@K87#Zk_{jxmEFBBojchGD;W2oJGui{LTj*uJNQt%(`qv I~_e9+y(Cpj!0XU>7ATm5i|9CCt)?dfu}RIu$|fP zHR&4t@r~ztd>?2I)jRGam_x8AXh9i@9vCXv2KXPL54iz%$zGWDJ*}{nI^ xeXP@y?--{4d8A+Ou)m9Zz!yrX^F wJtBSwAaTTHer`NK+wLgfLl7Lv4YTPYywY_d=^C2b zVR)31#|2S3ZpDK?XOF5q@7Vt6QCN~M&6VA9G6pv-tF~5DMc)aZhfcvWI8` EX6I=%b>--yGG_bI# x|u2~}6BzU%Z$AX%c zo(8^xphjY3cB1pKc66-}vUITtJ_R_@CM5o0tKqdme=w@Dk1>~np`H6 yWw_uHA-s{WIouI60voGR zx9IE8I1L&h_g6Vb+7WBW52%o$OImm=|Co$V5gPe*XsiHCC$~ph6IM}@xb-$={)=0~ z#uti4?t?NXKxFjr)74t2h2@U0nA~)psdN9Mi-mmfNV#K|fP#HX#Nl)M;kwr#oZs )Nl8dqtx$qb6YAN^wxyR%C*xlbmh8?fbPEK br@s81SOUd#vn(;dc1%DVe zIA0n=(f@(+!~x%aSYY&fj`wZ++S&Tde4~Y?Zc@_UKll#%od)(#Qp=}bVD~>DwK>2H zvwTw>p8yQxU-yXz5K4nP_kM#d_k^ASxHg3YR$u-h{`~s3J^*`*pR4#EFg#%w48Jeq zDE>Pb{(l-XGwn=uV#N>4;2VAkm=P1~KornF>)&|hb#dU+1S^Bv|MS4V0PK_HiqdcM zIQ05&;8XqLyrSQ3p`Cph0N_MH;`#YNFTwi!^?f gsI~uZ3Fx*M6dowcIx$gY5Ab(Q*Z6YDr8|%RAI=+sLjV8( literal 0 HcmV?d00001 diff --git a/docs/static/img/next-tutorial/dashboard.png b/docs/static/img/next-tutorial/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..d5616cde618a22f4b2bbde159bde7ea2acb7ec1b GIT binary patch literal 75373 zcmeFZcT|(z(l-o9M4E^+0To06>C$^s0g>Ko=%I%mdRIWYN)wPSy@nDXbfie{z4zWB zlu*8SpL3pb&Moiy{`l7W$G6s#ERu_BU%Slgy=Q(idnUn(@>2LX6gX&TX!z3a-YTP^ zVIt7bFgowuMcsjJ&sCtI;lM23yit^X^M+c{!PeBm8ia=SE;uF*OEqfZq3_y_3N|+S zLmFz@W4d?rzR?e~(EuCNjL)ziy#JJzGal1QqKivIqe<$d_O?llp;Vn&Q^|Uq%!E*B ztkoZ1W0v4?^KSjotf1|+W8c;F`C4yx-I{zarf(bZFB9?{MzJg|si#lpe@29dnnhjs z;xVWC369_UIKg3~sd>+UL*xc1G7T^>sRs!!Zp}5^Xebc{mj$4`d( Fy7tVyRGN0UgDoA&H1`ri-w|tYGru3F~^?N z^k}hN>%~64dO^=OLXO^!hd%Yq3im}FzPC 1pXRYClV7v-;cG0j#oj%WZ8_1{7Uo2)H6vz?XJtQYCjZ8s+JvY7LenFxX^ZimcMoJ%)}@MxwHF<+L7RSY2V=oyK=P z5x`)Vg^Y?%CGzs?r6m-Lo{gI(OCMQtiBoeQh#fV3>~+OLt3ykLs(oYXqZ|s4CVJqD z;bh=Xy6#8#?F0At2TsJ)d^qSaX4(U6`&U>WKjXwx2c4HZQWtwh{PXTO9!Uw2bCU?) zy`VJgh@a$DXd3f(r~QKZ0d@Ni@6O-Bdv@>jYx8?|23{W%61Ct!rT9M4F9v<2UU>KT z>!%;o$}h;Y!U|r8e0lf-BlorC=aetTzsQ##4*E??!M}Jfvm63i(^R8_H`BA$Rii&R z3>a`dObX9RJ?i%?M*{}MW{j+(mlFzq&=cQF1+L3DJ;34vJ;pWjEo-y46ViRj`ZO*q zYAJRx#12$tsr#e|Fcw%7u+?1G?A1nefG0$08}8DMwV1L0`cmjp`BK{x;7wIe=yTr( zcP^Z&(dT*pJpoK6e@Z`vPqaTCtP yxZ*7{Ny#;!ksVgObB~Ev9^dAJ!TKD z`cxHLm87X4B)3hCcz`AS;wx!K$g(&NE%rP9AFl`12hj%^2IZ95Hi)$13lw1V$f%_b z<-_+5 GlsUaE2b-kfI(k%SN&R6En8dJZ5Y#%74ihacEWWca`Gfx zk~7n7Xwibd98yj(sWnM7Nly|O5{{!U@uO5WQ#n& Z5BTHw?G|PBPs}V##P}!qMUYS?zRD~>;EN4$yG=KJI zBYW5*p}^135NM)(@<7)Mj-GFxrW9r0+&)kAKJHf>vm5?2s+p>kYyUbUG{88%^sE4H z)P2-&6gV0u4UejdYKa<^%}aE09F*$mNSIA9>Y?dz?-5MUFCW+T*51&jtVk$-YPD3s zQekG $U2&3MZaBCRE3r3msV=O_9FEjgWx1I)_rm=43{J@<5p@5T@bIiT6eoGkL~1h9O(T z8_}B#Nu#P(MUZ4jA*2$&i>}2qQ!c7!E4NK$Dck1zB+p4=VH7xU$7U+XdDB_knQ2FR zdv;Q15_gAb$5yca@#T|PelEdU`*H_j!CkxBwHCXC-SWxYkqreiGP7#OB*%tOs7!hn zPn`VyD55s4uIlyob|?10Rrl$Wvcxi-h$+KL(dojOp_$Vf(G*i2IU(?A`BQ>71b$L6 zQgQTCoC8NveXMME*!(mq##C&d+kQEHx+hWu;0^ciMNYPlO6?BKAAMPC(`gpm2|dE! zXE_9)s+@)%=I?tf+ODT8>TiiYm?tiIIqyXM>=mD#u>rk)9NY5PK9;|(e=KGaZq{8X zObtv?d?? K9zp)qV2`5!X@K95>?#0 zQD@RqU+;btS|DAJ`BIsqI?RT65cdiBRrssS*OYA6AJ*?T6i(i=$av8%NHe~$9mE)N z&hnBakef>s`A!(6lp@_L+bu+=7MCT{2igF!{M!7i)qw*79!;-;lX +g5+)`Gh`b0~`z P76~D-s#(eGj}?_#_Vad7FaU$vuNt|9|0R(Dgqb- z4x4*NcJp1lBX9H$y^s_^+&W{POb T{Gx)U zVo^R*0d&Qa1h#^CO|wpVI|iLbz?0yDp)TI%N{35zdA@mVmP4DRz!soeP4Z5}> >j}xR7O+1;1hZvh=j7 z>7bK{f_^mR$9HBveow}m;dzUR4GlBp-sAFKu$L 8*Mt5%%~(`Ksc4&YrUtCU5&+5%aS@3k9{qi&Wt9Wt9E zTm5RzCHeN5oSIVsB7vIS;9cQ{6#JW=54Bit2;xL(gc#imE~>VJd!sh>S-cDP9Cif; zcBZ^eELw(wgqxG&8bCLQipqKN9WAXCZ~Y!e OGwGtehp2b)oD+D&bGH0uH7G4oBBfkp2ibi-ji6nXnd`qS z{!zT*qkTDX$Z|H7vCzF>7%#^92n?_r7mJEQpWOwdwxYkXK~pphKN-&O54$3GM0=(n zH0lx=!r53P@B2#v?b#R_Ox=KmWi=%k?SW+b@vg4`-^(`F8^Ou^$WNQ-zKk9^tZd7( zc0V1?g2GM?d^(URoMEnzk3PLO7z*#OUB}WZ^H4z62&5@(Dkq1=h`PRqhJpSN?GEY+ z9rZ>FvOvT9>lzJ>4)u+OcIRs#8W!sNA?i;t72{u}n26Ln|GLKL{QaP~${T5E)VGSU z0|;c}Xm0DY_R=E?1)fDLR5hJ6 %u`o5jt>=21&v5@HgoVhTF9J`Jy QpNR)`F&_!0^ua5?d+b%u2`-iN39Ws9CoL_Vsq{b$4IT53 zk5nyeVy^trLCrslem}mCfr)T^M(vA+aqsUR{dj i*O}`-O{QrnxC-Voj*GJJpisZ=olV7`)LCvw~qDR_5sCh0})Fl$9XVr6-W?H z_xv_G#0( {zKu_dZyg9`LK>Q1o#|P>Ime&Vgz5=3h4_D;y}t(Vzf<^s zVG2L-{Nx#079w6B$Ox*i8e?7PZMZ_{=)kPCnt9a!TrYl}grB0Lqg7YCdK^-EH0BXg zwv|5#M1>aa_KF~_Yxe4q4`ERMKNsk7C>qfIXhqsF<+epe8G~98;hXjjoVS&p(})?c z=_hlY2LIVEb%_%8gYl`Hr}VrZZYllDhFVUC|L1PSoHF2v?p5)KohhB0>nm{YcYc`N zLbE&HQeaYZkG3_i#$ws%8{3=o5~A;xawZE3m~($zk&8WOrtY=F2A^J)Cs8c#hU&_f3YHn`>mg z@K48H{&so3g^wS1pqkwgA{XXVCGW=<)QhSXai+{tydLt1UY{*_d$?x!o3AB%6g{zT zA%vZ;CI-30_ulmI&YdBqordIK))S>4uNGod$7;4qyS9VrllOP7cWiyOKDalrQ~6v% zf!^mUh-t?@K%zBrr?L{4t+pRAZX9{W18Co^JJr*#Oi!n&7uMw4F8R4V)^H6e+4R{; zfFtAucTD2++;hP-JFtT*eXo<4y6cOr>qmh5TlvS^6GPr7`T7$)Q`So#+y~4@y1Wh+ zTM-LERFgWkbs*kpyAOrH8dyDRhubadP?G3VRanU|gLe4n$E=#q7{X+_c79ivYoffM z;t|!hNGjX46rcJ+y*dHCLb*g9L>r~;SwZEQWaa+xkiwLG`xCNRlb?b3Wn_A;O*lBC zr{34s$UU!AnT8MPcy(A$T^l9C9uZo +!Qvh z-&~)H)*yFl3UhK^8tRvDIIhYHqPPhjEzoMpI@@zP{kki1U*yc7W*5HYnPq(Wf`OEH zUU1__)UQPu!=H42sFPn{zZ0dbX&bW-<-5rqyHNehMY4*!Cr$?$5dxjbUI;A}9-yLn zk* G1Z5dv?@M>lNQw;c79AvhA|MaJ|0#XQw3p}J{%r8ND_dQHeBu4 zqLwpnp{eR{rUrVklLUHiei6L$F5V*p-dR`U$<*YCIgh ?Ao2xw^PWPwS^a|SN8wx&_E;A5~LUG|IS-xALZ1v`Eg6_)+;O76i*~M&dm%#?M z+vCtIG+hTJ*o^-5A(=|Q0#N=ZXn(#*B$1_dCq_f>0P=IH{IXs2dLSe;^lJ4Df$*?o z 6DEGS9P1p(B_-+5QIz}s*hezHFB zGcqRI9#bVeH`_5Uw4^OlMQPuDBu|Z@F9)wtwzJB9$$ChR_e5<4Zqo5JIw+UvSRCs~ zw1Yk!CAVHGMpg&taJj?z>SQdD<3YpOV(7;ioX>im2d&ssn&N+IL +Z~V1`yL&% zajG6X*(u)ez1PS!(VGdE8Z}96H#fJ}!r`sitW^t#HFH z`*~p5GVz`Bh8v`) zsQ9P0>M6IiByf{IV8oIMcYh^LAJNn&{^71xgZCA)TBSw>+jL#kWbi0h@w1|zEMO-Z zKL`7LgwWxyv%0{@C>>xIo6ot7)f5ceyx=nHmfgoXeCCHUZ&BO0F_cX|JmJ_UTnA~E zyiHL&CjHgbm`rEa|CW5=5VhDQP-^1wtVxQ`b#)zT@ncU#_hi{rFO(X!;t1~59yKRk zmSUK9PRsN*54AkZ^|uf(AN(OL@-1t(6o)3TJ#omos&d*vref=OW2hbL0csYZ;!XVF zj%2d#X=r2M${F=SQwxh+Di8V7;sOx>9|^HcviWPE73T&{0W&{9e$Ml#=d6O{m+T6U z!}7Z!%?}f#00IS}gO-m!xvD?WZT0_nE =`30oHto>0EGIIxtABH$(d-=F9{1Q>Sz|8fsr$<`y~7ZHw}b&6HC`$LS7p^HskTe5IxYgmB)EQ!msG&`@Eecd@vyG5E+oVfeYOQy)q_*t@C} zc6ICwq6 7Y$RJ%-S4_(hZo&j1{tuap_!wkX`gEW+zFi;f>fQ~MTuX9 zb5Cx2i9GCA%`x0eJLp)C=jk^T;}%vGl|iJYL%XU?ZB9)C3B8G%)r_w^nz8AJoisgD z+T@3qDLcr&9N;kDf*Sc>e2(+0Gk5xFBk1N3xPP=gSz+bMZFs&_+#s*1pr=$boTL%u zyzHUm%Q;n=)~7Z$R7P78S15Gyhn0}ZfXTz$JVMM;6l7&d6SU0Xed+3fIwp$Z&DPbg zuvF{ZNqGC3vp9>%=W0tI90zoU#xQAQ6&z-ZUgc^l+MaBVc)!LE4<`$A%a-OImUA&? z$n|%v0Eny1)X)h^v#MmtLVru#j>Ms&?8M<0JLucDm^ntNecee z^6^hNCPEot&5bZPv~J&+Y;yiXuZX4cWB-VRab?&1DlN>#@bK7%24!|W#+COv?4Z}F zao+JCv1}mmrR25IZAPF}_DC!WrIqYNtH>W{d0 n-AZ5@>8bR0a~5!>+&qcf^I??v=giU=rqy1A_EPIqUPdd7`H zS+=thZ9;yL;j-mtHs-9K>LxZ |sOPpqlF09v^~7!YOZ}!da>opX zNDL1Ry>;uB8^8A!Z%w1_Wr?X(y)=mP^a9dXo73D6ui-WAel%s82;SZ<>w`%>b!$oC zt=>hU42ww7YuCfo@7kg$k-CkVa2T1s=fH0a@LLbcHPtPri&;9vb6cq&(jk|qZq~uY zC;)I)-^E(fje;LU`eV(#f_v6P^z!95C@dv{#zdc_u=I>kMy2mfUoF4sYr5%|On=PG zXAKND^6?=eb-T52-q{>P3CS}5asL}Rpl#)>yOqpS%H0+s1uoD50CYOzQq03Mi_*v7 zNMXdcVr4x&n}&;#V*ky9If0v^nq3P0o6Y>Io#;LOI-yfq{YjYT0r?*!=Mu5b1p?k!i_@$6AG3(8(flix`PGT|M^=+R#=b?8Fgn z?ReLnsme&(6kglp8P}!ogA)VssPJu+wc h-tZfFCjjjI*n4bFEoV4}Az@;AG)Xlt*Xn`AX^3 zF=GE4bTPYyRedC?jzR7<%<1`DL28bA1*2S6j^U;lqb<+4NdPCmA$&A>aObg1Oh??N z=jL^Rfu+N$ULJgs$LqrBHpt}4=WV+*7jP(0l5H?_zLv6g$CJwY%&^mUFkK?l zlX~a7V=sG;Wd6L0qBnAC?!xAK6WlwJN_3V^A^Gv_avXQPu0t%)Ax;-^XY|Em94=Zi zxn_G5pqWCEx#eOZ+kj%x6e+XjXI*Zyu@MsWnIx2PIQ5Z7T~+mrwclf>B5sc(v4pdn z<_$=;9)&1*Tz01|$vwr@08%3W?TP43M53jqh%m04Y OJp)~22SsFPR+ zY9wLQ`WUFfYb?j}khPObXse*?l1@&S-KgcBs7_%U9J!tmnFkR5**@A{>Ywu_5bt1V zodIbJOBAB5wzBoo4RX9iYlPE202knL2W^=P)hdXbx7=`nJYt# NNW;j*v!4 zYB2-b=dPcoF>WapyGEJ4T@7ZvPj2%PSz}_zCPN8@T6Ajy_8M+x`xYr}$cQvPa% c#!X-}|%n-Sc_C;IS(L&MTYl!3+(mDf{hf?6_e#Y)$)% z95RAdT~Slhcql}tygas0drVVGP^Z$uEMOpAdrJxZPd#PM=x441tYRphDw`v{J{%JD zWCL^J;NV!#k3QcnQ^?YE)6%Nd8 Uc5ZO&OXca$jYf iZ1L`Yg46RAF4N+#_t)iF+!{vWQ^Tt7=U4TAqXLPuV`)JlPfPcNX2p8ijdD zp`<&H%cvRRdw!*J&*n#WVdQb;ok)?9bO{MW^Af>$7{Q#vcpuK6yQjY&!z~^fhiz%d zWob+x(y3i;9;4{h_!(^7zkkt#P_Z+Q((?lMu5n&gd>tdA_)O0f&nHDgNTw^;I$8t- zFWnqy)SLz~fj2#DCv$`moFJjQw2S`bSX4f6f{^Q@Hm04TE!Hx?TzADA1-_rrO=QvX zK={P9RFd^jcCGDA)uxN{9E*ldqVtaR9M$&+ss{}*P}fER1!$#yf&t0O3O4dK1Cl}p z<=>^)NKYqaI3*?_%bu=(Mj3NeVRWvn19wdml{>r${9aT2G%?r_1j?*CZux+?e0~Gn zTk9($>53h%DHd7dV3q+7%_g?ndJXklXbHyoWp~3-Ws{p~OgowMR2+c2KhebiL~&KJ z^})qL#+g=QRoyLnJ2BbUR&~=y7E|>fL{m8Kv_El7kaItxMcOTH9axq8>A$+i1ryVA zZpHr`<5sz|K2r$V;z4v^5$zLor+@jH4k2ltk z1+` 1rP4m z>{wl45tOB;8zB$NHh4N9O86L`Xp54j_DbUj{8@Bg&50mgL-v%lm6RMw6KcwL%1_0! z#5Ch^)8#zR$&trP9pYWx65W>I#9gI$NRoid$&As;%>dH2+I}b9B54GL js{E(T1fUL~yhD}<7IZk54B;xCJkS4qWlc@UkgUAWnOs)|rK zuTzM}UIke}2Cn84=fQXp#mx5s0ZLY5X;F~%;R!0D>ps&&g7RXK6!N*~+NX1b+T(6} z_B_+!UD=K48171O(ylGJYnn`CKkzztm%I&h@W^fU>Mm;QE{-#HFP_ZsIntl;Fg&-J z9>_j77(0rbU2FeJSvKa!W0WoI|8wa2DWB7iz6g( 0M_s*kDM&@ z<_rBKucPS%(dpa GsKhOT(KC-Ley4kwN$zj zog1fHUMN?CIOtJ3iESCX^2a?c!W&7v+Tg;C XLWI;h0QD5CJ5XJ7oo(y^m3lMELP0*$UP?VV0siEIpo;DSE091?_K{Okm z)@-SRYQ4C(ROVv6ZL9?#W`(&ghrpeJ#pjHjc7i)(aRPBHo-iFc@K&j`LdwYLD6T?$ z=^aoJ0*grXhod(#GkYiFbheZlm&1H1i 6kqm>O=$ZnEzG=gZT54d_
;MwC6dMM+xw)%J|b1gc8{#SIM)SMjwq zct>D6d33;cF6pyZSd-t`@=SlKB`u$*wlm}_XnnMFtYW^t))7rkhE+hKBwp+hjEx+| zzL6S#HI`Ia*R`u6ChNxncu~fJ61Z(Oi>8A-a*Ap8cU>OWG=SII&W7+R5 QD$ z-!H4H|DIis3>4koAxkM$@xB(E%j8? gU*;y5+r@aJ9Q?iw)dIyU9V1ciPvGgAfUI-+W7sFEfjf&C<`( zQ% xpjbRymh*VPAxjR^AzF%@ypax1-au$X}*p#Vyc zHd0k#>T77*f=)$ko}lxg$mlI%FYDp2siLYAe7))P04iQqzT(na_v+LcqqwBlqMWHb zQ#0WH&RG5XLwEQRsW&ow&vMeZtR7p9OJufrul`^vx-NUdyT(GOMsdPqhFy5tgi40Y zYmak etf!=!I{(T#oh+ z=7&W97w&vkK+cyq>6_;t&6=(bk2btxr&A-mU3Tk(se)|Z+=*ClEWPFAcsK|J{kcML z1ai%@hR-l@ZGcmuA=+o;rrbkdMI0dSEMbPrDUhH0`K}F;YPSX^pK@4KoNiMelys~z z K$5(kIoo9J)c( zy47=L_my*cIQ*(In*hW4<%W?lfk3CitMvKo5Db6dbXaFoB%G~_RWlMUt$K^0C1!k& z7-l)L`L(S|krilsB(8&8?M{G- halx zL}me(d8T6{Q2lBs@}k<~Nd>ar1~xr&RZz($dQw6)WRtn2orjjZt59}>m^G5|*d4ez zD{6WJd$MA7rB*q4{UPuIy1$%WP`{Ajd{Q><-C&ai1WKXvf_|N+{?I8d1c#D#pMuFz z3KdpIX>8kN_}tTX=W0yPj=eXps5SRH*8Q2$3tR4C!Tc*3QtvghrWx b8Zx15UK+!r>CmoG~~EH^I_L&_$jjbXvgf$ zO!v>uD$mt4pNsDINiyQYOMUSEp7*sGH%g5v@jgv(jI3O`vwkS?ElO4dKtoGQJA!49 z-^aAvR1KRn#Y$mt-oy9VCkJ-UYr~xEg^1Xw%~$+iCz!t$XJSe5oNaYJJ&8j?SH6yY zFt$V%O0zi?(0zWVL9D8pmD2WEhP6}MY6K2WqU(7lqH*Y62zH#X*#W}z81t7MEr1jD zg_Grl&Qv%>YI4fT7F{!V)#7(e@*H2j%04R4 2ucjzE{) X}r{d=fM@Cy P?vp@E(v4$j#-0_L;ue^0Sk{k?*lP-^|%Z^(aO;#6!vw3>#J(n8Im%{y4KjX2Ov z(0SW@^Q(@g=J-dK*3AEeHmKtzRD4>1z}R1Pf9ary=Z?W4TkbVJ94DLMUy1%BPNaVu zbG>qC`zbm8E#ABbVvS*_$SaInx6A)VUj1JPo*OV7UzN0Q_(5&d%A%wB1sO~#QAn+A z4gj=>Qvy;#sY~RkNkg>?YMVQ|It#6Pw3#5HG0^v(f9(E7?6>dVzdvK*KUV%kN}|=} zTv!N7R8K2prtuXkx>ul8Jvqv(zvAx&svdkX>G$t-_t%wJ6iTY#LMu1Md$lX9h$fq9 zFzzkqHEymjfmgn+R8I;`{@r&g_5rt_WQ>qWrWh>k5lTwN&BsTE+9Vf*iVx~@B%p !9- zqKuZ01bsbh5f}->l6%H=DGYyW_1w2l_$oHu=4fN3x6Y;j!<}mDO7`!O6x1mw zBfTU$nB$QOTZ-Q1^i~^d>S@{R7%?V=N@{88;CmSvxrYC4UCbDFd1aY=vs5E{!Zrh- z&X*oUg12D_s1x`Gu>kEB^OptWvmiz|LcPix8AZ<83j9U)DUbo(Cl5aR&W>4W6d7{h z>)j8hEAc#cU}9sdH0QG1nTq0`G~d^~_n#7@R_w=*A20UO6~QtBnq54sFXJQ_#^L!S zPiiV81S*RTaykJ_h1+vfTH8^3Rt4?ysL;zte%wqNHSrE{Jl!4qOc>G_GO^51O=i=8 zfPm4o56I@A{|=?&N*9|2AZP%DThnD8>MaBIcUau}(R^fA(nr(}X2(d8c7AHT`8ZGC zx>rLl0#8etza(n@P?6CuzD!dnxU6O?h2M`M6ifBSB<)3xG8(&`CP`e)+s77QGBPrH zYD_OK8c|JmZ5lBCw*sMj`Ps# fP0UHy7-n=5AGG3lq>hJaQPJp(9zc%p^cyg!r?dI}`lG*wK;!Y>~` z4j@H38FHF~hq}n`vRrBMDhnXc~W)YN>>nhc;n#>9H&vrYw&~d(1Y~V%0P!Qs&CX z$GWUUMnU%&5{nO!YU-W~k3ygFj|1{hezO#oyz{F5*>%GY1$JX1>h1%$>eYEdgTPC uDZ8f0rO4bP zn^=#(0ia(xezmyUByVv!-Nyq25vA{fNJ){V0cx_}<0jZyKdE|Nn} ofEC9G3;pZ{oO;@i4OBS=Way%m0- )MI|C{O+IVPC(W=_^;;$0<=y3_Fk zruDfF7yO87n>Nr*(r!w2@q># v4*_Oh}xpqUMgXm9Fja1 zR>4y1%knc+`m%`E#|C=HO$3=4&~x@Blg}pS>GwBF`x3a8TuNy0^_*v<8*4=sPT{T7 zR+U*D`suyz`YIRCPyAM!g^^m~W23wLUfYQ(`JlUfeBSz6tR@#CeTU_$e@D91*_a%m z4lAlrl-cZG^mZ--{HZmXe7}~HjapZ=X4@>?(Oh9IQN4bv_W32>XrxsvVx3rUG`6O( zdyNzVv?Up4ns#v{+h>6IrJVSs(eQew>?H_pP%=UMqTku4Rh*sliu@w`4iz)*uFy_7 z$=)F(vkP(3740?fOB~=8$cmGQ9Pb3+cX=r?^3}uUa0;}tN!6=c!p~RVw*VkGFlOi? zm95n({JsWj0S<@hu=?12z{?L0g*#_bx)O#Td4pUO5T{C>3-YGoZSlBoN%i?Ak rfy~51=1?W CD6F(FAX*I8LH2;ySQ$uH`lFoqs(k*K>bz0Lo&jgb^oMXk3kB(Zy< zJn#PrL?Bys7-xz^0}pKUvb=;h+)#o6!c*1r>uc(}a08|)D^}`9(cg|(-fdbIH0rhh zFpTx- fs8M%;-Uobe z7vMq2jhIk=>D{^`HJL1}q@f4emhdTwu~;2F^nu&YM`N#ta8%>CY%R3~CN9FUH9%G| z@ZDyX>+)<|3`C_v_+Feut`m`LwB_pv?e}RI0jxwyw2K&l0VvWKAo0Ob4Z&1e{e^{v z)n_287sn@?{px^E(Fc`?&M~h_{Umxs$7`l~XWPoU%Dxv&P7?uyWXnufQyy6za;l6C zx<-U#)CErD9*0chd7)I1ie2%<04ZD^E89$sh9@bIQL_hkwZ2-&EAv}HV`eVAJ#7aF zKTLO5%(ZiFcXGQ)fx1KPPd8V}1g $-DdRpa->?v|wIx|STlyOja)TReKJZE~u) zuBTR^UX`6@Z`5n&;nBr8IMacB8dDD7*m$9($)YCjzr+4Rpl?_mS1}rh?|c!Cs}7%! z*^|F`9tWzBi##L5*(9+#yay5p;5hNeY2v4WD5>wagThE6c2~-JiLJ5Un;gj(2@{6O z$!&AwQ>!jC_KH`8`LydwYSCr(1HMFuXH!A^xZ|KOggY6YgLqnMi>W6S!KQ@{a8kR! zIAcp&XLD~VWcu5uT`7g DN+nX<{5dt@fswZ=iTLIGZa7f5V> z_sO-X?D!93G4JDIvYDHj7q;}GSgUkPcIdoKS5xKb8lLZRtFY5T6CJt>rF0uBQ&VtP zN7IH)<2yKueuDTh{}aOfHWO _o?1XnCd(S8j0`Vnf<~;N1!OKZksxS z*6EPqK5O05ozS`l5kWS!k>y94z{xzk_IF6q(Zj5(JYc%=gl*AVfr`@3m8}oDBaEZ= zZzgu43fH3zM;8ZYu3WuIio2b)oE`JD=#xb{6v%^Y@C2@2kj>ff>Lp|7P|PU+(|RD4 z>hpZMG*5KeI8U0VqT)#QSsqXPjEvVzwW%u1Q2#=_FDF9hCOkNy1s{{IQe}1VQ{(*- zTI~g4;np%e4BK)CM!fl(`lZ%K*`=9ogHV2%!v1hFb-o{=F?~9#^iV}77WYOpQA2-@ z)#E7Eoa`aest#h+Xf3tuhmPpauT)hbKKQ+99pnWu9!{)@{d@YA&j))U9mDmhRWEhk zLJ~?$rbiViAz^K6I>^Mh*E&RGF#}{zZCUMYXU2?DSdVA)aox)cDfIioxykIyh>+M^ z9KwZGJ`+ovLuLf eS{+8kfeD& 1v7w0MB)O6{5-uwi3RlyKl-B)h!(0d(nndjW>g2;Ar}AWvwo&e7Y{#WPA8l>7VYu zJj~5OX)d;H|6n#8mkl6^n4=5udR$gC*bknX&^4dWkdvLNlSWA(FTt5VY8G5AmO-#= zy#QYhe7{h#OPZ*`U6jJpKK;msa4eHkmkXg~94k9TVWYA#*452L_3TauoPV8BV{9XIn&{OqB;WFwOjUGD0V7zl1Ic zSC?Z}Dv{Pn(aH`MANCq|IaNdBRlU3dD=oH9 }NQE&K0i#h}lB^ z3=SuAPj()cYLbFPfWWwB&H?sF0N=4Y4q~G+IX~q)Z7usog<2Gdu8+^t^3QYURQPWz z#0c85UAg%}O=ozed=QcrUNs?#D|Hg4!Q^vB#Cy jKO*)UD#r$|h<5RfSNJZ(_z2H9FX4D|Q2k< nXOx8@gllv3U)S`T{TX_^QxB7Gt{oZgNf zj%9T9mWp-!$J%^*4X*x+)>2a^mg^x+rfF{#A32B>%i}@r3|8pEP>kr3Dc7tUCzDgz zaVKz$O$1Vv0@XOV469&$UTjb!cXbw)uu*9zbxPp~6`l!-$aVEdPPEM!42hVU#Nmp9 z;+CFw3!Ms9n?DTCp}bM_D<7v1USg#ilLILqY_E~pi?=ijUnEppzpm38-qAJYVQl=C zXRa$5?xHzQ$9~Y)4p8-aWd~fDWae~h%PmUWfXU9S#V1F)|6v@biy7vt7qWJ=26C$= zYM0ws00KrnJRd2_#$)8oFZ4GA;Oth31-3m=3GUG}hsN7DeB_eQGHw;MU)rlyF^3KB zW8Sm4FI~eAZ@?|73MOL&j?LQzdtD}x+}|;k2*N)^rvjE;?lP!F@f76eG@AI~Dof0S z)#D7SdRGp*FsYT$AvS3AWze6^$gDh$qm9clclf+sg`Q=T62ltB0zB|zuH;1cZQZ9} zj4$V|enMh%cl V1FGkcF^%9opGy^YH!{BK-rF_QI~$G>lu_dn`InD`3V-1_-_? zXb-a1;vOnad?^7mC&?LRuCK=}OI*)wB;`gZ}F+VR(cNU#@LVy!g(lrN0-NdYLa zn;vuD50{K<;4R6Di##lZz-nDRzkrX|O=95SXZQ4(3Fy?vnuM*#W}MPNOB*N4ToxYP zdZIe=765AlG^-Eam=G}($J-d=gTV*c!ZXZ`HoEXJAe~;$+3xq g zB6^~BxlFn##DFn)O9 zRdC$q;?>VzFFX~HT8Cp$+|#Wb_5CF!$Iez?MH 7%~vG0=4CZVZ(y