From aa14ecf9553ff5a6cddee0b8a8fcc6e3b52e9785 Mon Sep 17 00:00:00 2001 From: IsCoffeeTho Date: Mon, 17 Feb 2025 10:30:31 +1030 Subject: [PATCH] Added a very basic getting started guide --- .gitignore | 1 + README.md | 18 +++++++- docs/Getting Started.md | 3 -- docs/Guides/Dynamic Routes.md | 34 +++++++++++++++ docs/Guides/Getting Started.md | 57 +++++++++++++++++++++++++ docs/assets/DynamicRoutes-example1.png | Bin 0 -> 19876 bytes docs/assets/HelloWorld.png | Bin 0 -> 13301 bytes 7 files changed, 109 insertions(+), 4 deletions(-) delete mode 100644 docs/Getting Started.md create mode 100644 docs/Guides/Dynamic Routes.md create mode 100644 docs/Guides/Getting Started.md create mode 100644 docs/assets/DynamicRoutes-example1.png create mode 100644 docs/assets/HelloWorld.png diff --git a/.gitignore b/.gitignore index f375b7e..3510170 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .* !.git* +!docs/.assets bun.lock* package-lock.json node_modules diff --git a/README.md b/README.md index 8ced6bd..691029e 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,23 @@ ToastieBun is an express like bun based http server framework. ```bash bun install toastiebun ``` -## Testing +### Usage +```ts +// index.ts + +import toastiebun from "toastiebun"; + +const app = new toastiebun.server(); + +app.get("/", (req, res) => { + res.send("Hello from Toastiebun"); +}) + +app.listen("127.0.0.1", 8000); +``` +![Hello from Tostiebun](./docs/.assets/HelloWorld.png) + +## Development ```bash # Unit Tests bun test diff --git a/docs/Getting Started.md b/docs/Getting Started.md deleted file mode 100644 index acf03fb..0000000 --- a/docs/Getting Started.md +++ /dev/null @@ -1,3 +0,0 @@ -# Getting Started - -Test custom document file \ No newline at end of file diff --git a/docs/Guides/Dynamic Routes.md b/docs/Guides/Dynamic Routes.md new file mode 100644 index 0000000..7bcf179 --- /dev/null +++ b/docs/Guides/Dynamic Routes.md @@ -0,0 +1,34 @@ +# Dynamic Routes + +## Introduction + +Often when making a website there will be a need to have content available after the fact of writing the code. You could just continuously add `.get` handlers to accommodate but this doesn't handle the case where things get deleted. + +Let's write an example about handling requests where you could have a variable name in the path and how to access the variable. +## Example + +Suppose you want to write a blog and want to separate out the various + +```ts +import toastiebun from "toastiebun"; + +const app = new toastiebun.server(); + +app.get("/post/:community/:slug", (req, res) => { + res.send({ + status: "success", + post: { + community: req.params.community, + slug: req.params.slug, + } + }) +}); + +app.listen("::", 8000, () => { + console.log("Server running at http://localhost:8000"); +}); +``` + +![Example 1](../assets/DynamicRoutes-example1.png) + +This is great for simple pages that are stored somewhere else and can be accessed by the server however, dynamic routes can also be used to write APIs with a bit more complex structuring. \ No newline at end of file diff --git a/docs/Guides/Getting Started.md b/docs/Guides/Getting Started.md new file mode 100644 index 0000000..0cdf5c1 --- /dev/null +++ b/docs/Guides/Getting Started.md @@ -0,0 +1,57 @@ +# Getting Started + +## Introduction + +Welcome to **ToastieBun**, a lightweight and high-performance express-like HTTP(S) server framework tailored for the [Bun](https://bun.sh/) runtime. Built for speed and simplicity, ToastieBun provides an intuitive API to help developers quickly set up and manage web servers. This guide will walk you through the installation, setup, and fundamental features to get you started. + +Note is that ToastieBun is **NOT** a drop in replacement for express. +## Prerequisites + +Before you start, ensure you have the following: + +- **Bun installed**: If you haven't installed Bun yet, follow the instructions at [Bun's official website](https://bun.sh/). +- **A working terminal** (Linux/macOS/Windows with WSL or Git Bash recommended). + +To check if Bun is installed, run: + +```bash +bun --version +``` + +## Creating your first ToastieBun Server + +1. Create a new project folder and navigate into it: + ```bash + mkdir my-website && cd my-website + ``` +2. Initialize a Bun project: + ```bash + bun init + ``` +3. Install ToastieBun: + ```bash + bun install toastiebun + ``` +4. Create an `index.ts` file and add the following code: + + ```typescript + import toastiebun from "toastiebun"; // v0.4.11 + + const app = new toastiebun.server(); + + app.get("/", (req, res) => { + res.send("Hello from ToastieBun"); + }); + + app.listen("::", 8000, () => { + console.log("Server running at http://localhost:8000"); + }); + ``` + +5. Start the server: + ```bash + bun run index.ts + ``` + +6. Open your browser and visit `http://localhost:8000`. You should see `Hello, ToastieBun!` displayed. + ![Hello from Toasteibun](../assets/HelloWorld.png) diff --git a/docs/assets/DynamicRoutes-example1.png b/docs/assets/DynamicRoutes-example1.png new file mode 100644 index 0000000000000000000000000000000000000000..61f7f7d024b055ec13628b832670b610ec8dae28 GIT binary patch literal 19876 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

s!5+8J|uZJ196ls|1JTL1TW4zJi@2J0%c7v z*C%(RDNfd+IerKKnQ!IpT()`!qLC={=$UGKvp}CSY^@ezqLC{JhhqB1#;zF~-yEn4 z_`ww!8M$TiW-tTDXP{TlAfezgh}=|OhrtE`av#+VZKdbLac0}2*RDx^f`ZW0WZM{Z zG^*?Qd#|mR^z^Qlxm=V9-LKf693^~MSU4kQ?QmIG4ZT_SwPB0A+KW_iZ`%E~fY|E0 zEtwh_8R_air4oFxv4_vl);5Inc~MrD+J}*a<%3x+J(rA7?_&Sxs075O%qu09SwfgW z>QQ2LeeXVh{tOZc(CDps^5pwh7jw-%J&Szw$bM;NxWHk*SW#|ri-kJt(uor%AiRiQ z|E7ESauDfrTbm*glcu-$)=#j1(E9qu#^8Ve?gGqQ5UEZVDz4M?6_`qpdYIhuoTmq7 zW@fnDS3=eJaPM8;-`fHFY=IY3zX2MG>{h}Z#0C2Pc8SCqUy+MEy-oFKdW>xi^V zsPf~)sdJ4_7J)=HVr=tk!_rx0pV}n-y0 zeiX6^q$8@89rW_uyLX{`m4O`0%+0wZ9rp9{Z`A++eGm~55gXeBSnswnU7MDc2AuLS zMyl}c!fzAN<0nqI0_&<5%i7(!a|b|s0>BoP$Hav9MuyJ$_FeiehfV95z=DB!OPnS- zkK3C}bmfEk5EGyP0Gp}fE_{1)7?T=6h?sCDM)FFr!?wvd5ROZw&WFkVO3#amiz(`n ztSlEd6C>lyL}72Ntb42iPyT)mTajkq-PYu$&RlZ_a`Z9VvODwRS%#H&{`|VAqjL)% z1-#=DGL_AjnVE?dytK3gz$7RjKqlVC3E#cTwtF|=?mm8geJF4J6+U7dzXaVqoUIs^7)Rvnqm&CM@f@UBc?4sy!6vG3j;z?BGr6>A6csidq- z25tZk4|#1tj$IAB2p6_6(H+q=qO7FEI6YSr%+}i4T3J~+UFfxyKK7_p`^<2|G3&4K zLguD^MzcQ}G5)xDDPCUk>gtU}H%Gk5{gB}rKYql3g5Esvi=I*5M8ArA6sh(DOu^~b z*OtW=YnAMawei9^<45(RJN29zA<270fGApJQ(VNed~M~tMFOY zGQz^b9z1y9Vk{SS& zheK6(4;^~FxajQt(8p(suOW2TcZI0sPLD^xPi$`4cRq7i{{=moLuF&abY%y|emv9+R;(S)&(s2x<~;&s2L11fL_3 zA1f-zOH?L_kAK7od@L#`c+xadTT}C6XsFpD4`S=3jb?CXq81O3`cFc@=$wL z)|Mw1sp>z4=E#3p3ED4BL*2wjsLzuSVmWUAqOh<~jqeCV3fr_ODd#DJXhB~R*>(Ak z&UEVAw%lW4Uz>|(Xx_wiC>QA9-XeFOb0ct)jBRxHR*!<{Iv1^QE z|HTF^eSQ6N=ZvpiJHW-9(s@oUNejjG4RpbeAJx2@Q4^`?Ii;_Edjn}Pc=r)AC}{sQ zaoh-(<!{__nZxW6CI5^!?=9+GF z*gxY^A>-?H+yvMxtM~zN4wc%uG(9=Fc4Ri7L<19xMEq)9pe#teh__UQu@M>&(WmeK|1G!*y>9}O1_wMyl;5jNLW><9CC*y!OUlQr@ zFgpXoSrpZ)S0C6udGZAAiw~)S|Gjpy0(;CEE)d#36W!BiC7{{#K#GiwC-1@Rhs-l0O#c>(d3kz9D5)DATkAAxnF!<@9l2g0%|(sc7cPPUE1Is!6h30 zmqw&$b$xwWUf$!=Ns`BpV_YH60}Mdbt7 zz1F#N0L#&Ngabp+J;Bq#*^eB7i%^Kq!%F@!E7R|nlr%=J6ioN`_y6$W!~D+<+1oR`l9GCzUb2m<-1{4LbDP-O%3l8_ z0a=*Z=U(BJK^?7R1#;0odAw;Kkjj+&#{VH?Hskf{j+T~dWzjV? zH6R~f56Q%Z6q32UEv>BLWZh+)r}{8w&CSgdG#7t$9%(x+D9xl^b}yu9A62Rt9%C;m zL#TWWXY`ec!K_E?dwaPkLIrB;J^uQ237uzqj~3f z7rEDMO1ESi`bJ-$fq{W041;xzlwe3X@F5?&O1iBqqICZu(j?25o%*jVK-Ap1JZ0TI z;ird}8R{Dvf`fuE?{lQCfrdd$Q54+a1@c;u0gG=4qs|-U zMU_y&3z=0lH4oU2+qb3ZV4mrGJ@&1XsjU|N{pio1?yy`gyuOOJkJlCYGd-Q1n_GEI zGr5Y-@%Og_y#pD)w!Rdqg4i`<8-8L(x683%_h&Q4w_wHboq6Uw_Bjdi(ugtL-3@x9dBO>@21E6kV9{Z3f z7N-BlYNH#cPMuP1tux6FgM$G*DwLRRr_n10YHMrz zR}b)o9GZ46opC>~^5lN*>jAl=#~TDFaA%tbIpf(1O9(AItGU>{UXJ&-k;tf(rlzJ~ zP*riayh*->n0Is2(+7lwtNjvONm1Tg)UP`%x~!qYLP*y5MvD<;(0Kf{yBoM`4FFvI zx}=VVId9x;1%;{#9~!_*o9ov(Sy(JAEfL*x@sHh->Agu0WZ~y3Yk^+r*CT1Jp zr8u~alarI9W7*9SIb@TPg+~QDld13;jgBq_G@B7 z`2qVW7fKcYfEfNyaY>2$pH6dy^h<_@37AGPXZ|C(FZOA+Mg4jyw+AczJ!T{*w2`Hy zq)nID5|?aTlZLA5@<8CBDx+zs+&^8e*WZF zuRek=y?^fsh0S$YTtY&(v3vM|htl)uC6@u4S;4>PhkmrXbAZQixn?FNq}43|Q|mvX zZ8P=DIoa5{hXm93WuLg;{q^;5g612;N~#kl-U5#Sn+`NS1$2e~Jr9lm-xP)^7V)!) z2q#cJ}b;}kM@HEA{X<0&e>Fct;mT>xs33!iSwqpZqe!jlo%zuE00|EkI ztb)4K*yg^u{2R@!?C-c>seE#LyaCwIV%W7^2QL$e#6`feeT=8>+>vatYEOixxd48~ zr#yyoBJWGPjh1%Ez6i3of|D)G9*7J%Cfj5xT<{K;4@T6PJYYR)iTDID0k~=9qJnob zx*gv44WJu59BQA>FPN4z=s6@`h?pOYU}I)3upd4hsdipdlLSy<@`1GStSq-m-jA+s zvIU?Ri3wmaD3&priM|vy1UE1{vDPdB1%d9bK%bX?>z% zAQBf~xbR}XEIp~X>8;I~!e_3~e^Jv>e1oR{m(Q2-_)we}$e28=X(0kos$d43Fxt4$ z*AT#dZf;IYRFq7-QS=S=4_3!D$Hm`q?rV{8ad8n5=C-!B=H`A2d-khYbKr`BgySmA za--E8RDeV^VlnBj=;-(~CBrpIOi#Z%^nt;}yHpwy{X(dq;BWcJmK3kArMGWdTMPA& z30>itnZMUom))0!cLfJ^ZRk7K+@AEPM?=ozF8%DY!0G{z%O$oLM6q6c%SZC7yW0!VImb{WgpX|MRqz*~2j@J>AOM zTKdL76{w|E$w7jP${wLb2}2g8=Pg6ZJO4S*9iO*-!tIqBk*2p+66d%3rxm0cFI6h5dN7p4I8gyniAW22w@;fgRPn47q zjr>;HA&0!%moKHWMu(WF+d5wzAH5DqlAhIp#|0qFI9pepiWYV}SlGZ@+Q;twVL@9EdGV_20|t+v}(CwP)q*#%$ehPpryCNhAW{-PY}r3^H!CRL^hQQuN|x zcJD25n~_K`F{v^TiJ#=c$54})T?C*{2Ud%UiFxZFR!P{u$(Tk)n8g=S6xAfH1cU*o z5&KZ%J9o3igmUU9Ak`{D(SC2x_nd*EHE(o4?gSz;gE!P*m=v20|0&R{Cv_>mdMJ^g zrBnV~V^Cn7bcOP7mscWgCp5ZmjmCpcVoBs1*FFIAhL?J)tYX+6+8>}wFVu~Ty1IEz z+bM6?nCLL}S&{OR)2C0b!H5DoX|WJHT26l6@^@j<*3uH%i4LS1#|%!&r`_O1?YHSj z@T$kXIdH%*TbG7e$a!t0NK*fXgTu=5WO>o$%>4XYDDzz<98_LPiD;it92SvwJT3ubGp`k$)(YW$Gq(4Qp+No5z@<@yVcNm~B_?30 zZ`rcNb-H>N`XMpl_{|?*Iy#(wf4dDC5*k4N?2@6OA(A-oM-e;#jXDa}T2K&s*qEy9 za9q7S?ZU*m!xBwsw-E{6pBb#&_ z8dx#T8)oP&J3AycA(}x6&(6s~Fl%efnPZ}&l1{(b$)kuGLDX~`$!<79+n^r66Z&EA z51U$xELLvHVD_xD*{kq{0TLo?rT_MhBJbbD#aHMzP>X>F;6o@qpXkix7Z-O#0t&zs zO27|02`s^$TyuKzDCC*5XU{@9+*?*=@O~pC-yJ)0jjHd1yGWlE2v<^82D=+HJUQ9( z7L)-pv37?JENjGzAYVh*z_2T*oJ`RC_Wk=vV>CY#b&2D|eSWv)i9%HRyWV01wtJ3b=>$XmoLK&7@3@WT})R&bx_^Uhji!4!|6TN2*kxViMD3G)p7qf zOZSL5@*v*k>*v>t;tM`ZNr6p90gyX}Xt z-{Qz2xgX&)PR{F=mR--4>5rOA^w}3d@AwPw2|o~J?Z28yC|tax2}y^`Ag9P}SXo$T zt_z|D!a9P6XSw&F14>AWQjl>%9VIH z9`)UVKnkcE{E5%kDNTzIuV~`kj6Aiyy}f{-Ak?pniNBQNa#kOR36L4lCc6<0LQCq( zq&V1wyqDQK`cZ?iTp+S{Wo-Xukivo*<>)XfXC`rnA%5XI6Q9i~)DT{TXS zDYD=9pUkoIUv!t}iHS3_v$;7raFmd6c|gj^%~e%bKVjGB5gB>WlJcMkY|Z5p+o5gN zma{Q19ClxG+3Ay307n94q`*`oCMM?j^XIcOGgnKUrx7Xb3xHzORA0|ikoxKsFJBnK zh{zo&!$>kT><4js_3G7>1JY{HG)>ISM}GX^lyaoi0MIL6U%Lyg?CAIh!WJSIvDXa@ zKzmlu=%FT}14BQ$sAx*L$nzGBLyC|@7Tf-!Az-Q3?6~FNfQy8(m50+pBtTL^qHpZE zQgDSxP-Xw(;vy3h6Dbn*0Oju0)Bxzl$H#+^yUn*V7RyLKt_!o*J1rch@D08!OS zedK)Lx6UzX*H3Ot~kYy86+Nd{0DXgY68OVO{9kpn%{v9-0a0qS;7hDM#7%yrz} z8|r```KT$RKV*p^hhqg_$+rw24@M9ZJAnX!!W^LWBqs7m^F8ck;dVfH6}CGb5SRR` zjUd92Fs$W9#>OG+$1&~grut4wXD5YI7NBjm= zs;V|~YwPQWkkZoA<%z>1Be}Y-&`|eyudJ>PJB>idrYu!78WCDH*tBb}%p4rVd<{WU zJKEYH5mV%{1o#nISy_;7qNAb)-fuqq!(iw`C{#$`yQYx_lN`X;w3HxAN~WUdCcjW1 z*joIyV4p1}qPO849qfYY%vmGrWksi=^D#5{hHoZMjh zEIRrw?l#bZiJ2K=#sF-mOF1T|w6(urTEVkPIg?P29Bis=z&$e747#wOkPwAgBaAp@ z<^d*P-CZCoCN>9v2R`eztQg3QmeW&wOYqPkTXd1dWZ*6=M@no&RrM}B(w0p*fY=bQ zDJoq`%6>7iJa}Ht#mLZDSXh9nAT+I}Mtg&I=Xs^0a5~`7^QntcX1q}N+yRJD=k@fu z@bP(9u=R?-K_j-;-5xu|u-Z9Er1**ZI5=t-k4zXI!3HzNl%M~-^-iWb%j3PlKi*w93C*ed5v8L|g)T8&qQTCPhWdK{ zBnr(Wc(m&3ia7rIid8v*TmT@!!GjN;KJz0dfPjdjKk@UAU|7@MC)psxbtZg@Sg9h%mLGW$5d@t}eaA z8)a!}pzgHXaJ!OcX6&UI^mk^ROFr{2=!yltwm2AqI57hQ1Exc(f%@Zs2M-GJ^IZX` zv1y`5{s!Ldou6Wup(iBeo?RZKoUAP8*&o}<{+0ct!EI9>9=f870N;@1=;-LssQ~n^{>2l89PbTIfrs zhUA4_Ay~Nvs}`f4b}*vRY=;+fTT5mJWmdfNQ#DrI7mRof+F_jQpGYNps|&DNp;X_v zapQfrFrGv3SY}E-0<9f7_8lxCH8+Ib2p?Ka_$&O#yo|zEinS?ONrX7rgKtr86XJIZ z2OR(XOOBgJvz7}xIzE1nO-JHht=SLFV{_R4hm6C5<~}@kqTkhf3lss$Ha7qg$uM@S zvw*!=vtbH8>C%FOBO|*Q7(7Y!b#*uF?JaMq!@NWyO%gkEFqaC8MTLC~pXLM>SL|)g zlzH5XQ*$wqspj^p=jG?ODxv0JV&4tCr(lu0<9$!h+Q-Nv5H~QCAorC!z<%I{JpvSp zj9fyTx-X20vZWET2BmE~9UTM)C)_OqgFWQ^umE^@c@gDFj&mz^oY2EMz<7|z{{uBq zr@eYrH6nKz$Iu-RdVYw<&!7@YiHhc6v=D#B+N(0G3b8@?c5s*j?wfY-`FU}#_jTk(u-nF)lAXqA z1SBOhaqjlkL=QvyVHT|p77aMuWw(X$zvJmZFKCmibFBbtyYp8ZFy_rq7FzU3jEoh7 z(+GpPE%tBa39UBr@$}B7ij2(IA9{)fG(<3Ix!H9zNBoAxp`LBRHW% zM5hH|x4Kkd-O|y)U!Yx3KMOJoWAw+bU(Z5AJxKt$G~2d?qUR?(e*73YbMIzsYk>_n z++fo(-h>L&*w~02oFD4y&R*Fq8RLe028sYqeh$F7K3otb05+Yrz&z4N*!z*5no5bT zU~XX_inDZV#r!J<^8W>Fekkk~looZ6Tt(Z#XwuNqiXAxuHBC@hn6gu4Efv`d@L6DN z6O$p7H#h*zpIbd2ub5#_^9nJjcA(5)LX=3nVAV*R`@v8ZTu;s5G!PZ$1p^si28|K( z{qjMW?JHlijnQzc3Y!`l(qF%ZcZe-Xkbf4_REY_|s+cm_x|cx+;^H)f8eXUw8S%Jv zq9w&50ww5(n{$wdr-EX0qs@vVR{_hQpKB)*)3?&wJGdRtw)xKOkCnVt|MjcHi4#|1 zcz`4!W}xZAm>L&`Tm)YV8BPVBv!D#X3~p5t?4RJe3JMBNZ+n3jJ25fAK(4ye?jZR# zK3;B(@2V?`1NIkSFtPRf#fu^A($IIE-#I-7@Q*kz4K+0qRQzgB<0S=6ljZwuL9FEN zw(9ZU3lGPRM}}6*Pc}N_bCURNrrlO9Lx|3DB@O_ z>iQg~_x`+yj4N_Sc-24PIRsf4N#KEVMm}nEe#VxTX_A7$&**UXq7w7D5qbD;^mo$K zG)Y$oyX+28wjo1u+|lur@A3Tb;Fya{oIe}Pn@i)VJar5o@Pz}6lf%*>V(n#KOeS`&Ra|u(3hqmlhrUlDfmK>d7Jf-{a$dfh?i#fY?A390-I8K-rNT zR!2)s-33KXPL2@!V8JUT*Iyg+_u92FI7B<$y3p%>{jy%Fx0s@=Vv7rUR>IhZRU={z zM1*t#EmdVx6FoO?s7hjDB0lGnQ8xC8LPGSDo$Sy8U4jILPa<-c=9jlIWzGnN)j@*A z8t%ZdL#!n=Ohfg8`}tha)YMc6PPoTN!XpEVSQa1)ky~EA5^sF}KDBoxyXLYwK<19-snr< zw>jcw8!(R%jdSZot9U3d&(ig zC1OAH0jmtgT!wzR3^(@%ZqQ8=cm*iK|ImxGH0Rl1=stU4K_591)@Wwim3K;J9UkQM zp3dP;10U?sU(jFXa+qra)W}9uUv2OsKUk-Uc&+=k>A-P9o%0 zwRtkKq~tC%#-GJc@D8Or@|g3UCL|bQ000ZhR{wN=`J!!efdWjLS^n#bA|(F-z~+=n zpDnnxkSjs)AII4g?nSnmZp~qMc|*GFCQK+2$m@vF;(fp;^6Ov?TyqiC2OeX~4+ z4b-nM7tJ6Mf_;2g^3}&!B4m#L&T_9jpniyl|V(?6`J89~9s)?Bl1VrUuM4d_bn?);-F)=&bfw zk$ize1A;4eZr=vtSXy3=2oKNaF^BOCF$G?7YhB&8xJwZaA3e%}1@yuq*cc+jd<3zg zL*hY5h^+k(G1kb$!~q`xp4;8sUG6-6Z#03D7Dp^TMO%REe@Lu&UPTt|gK%sn+F1+$Sw#NeIxwjG$DBr-bP%^Nqa z^+aUjMuBJvqpQ`_n4yP}iA;<2_S$IDzEObJWMN5lujUldy;%Jcfb8~xE8}+NRBIJT% zH8Sn&A|opyv6$N=Q+W&$5;Ji#dM-Ne<%0|O;Is>Yu~@>Gbw@-+Uucb?5=;r^Sz?bN zAQ+K5RXZv!E`&5QJ&n2IU}(r4*My{NvY($Hrd5=mf4ud3Q^o+^@YCqikis;tToIPt z$|MvIWXf?Li$x4qh$68f@R2nmUJEN(q1#tmU|&5f1H=umI9SOR2;D23+dxji{#kd= z-ugj7BKjD`^u!!QFb3$H`-$qiT>*UO1F<&$vYpHvnAs8|6SGbpT}395FEt1*zHrSee@GF{Yj6?nNRaFhN^fMHtj8{ zz76jqApL^iLF0_de!HQ`7f2ZebbwaAbzgTwiG~t-Bo?LZKnE~Hi!p(Qm9IQoquBy`9|9A@xGrP2N^QTXA z`n5pqa(;>V?HhLrt^jMJS<dE8B5EfM1mRML=q+S0$ZW=lFZ->D7 zjuF6_^z#|^j*fhxDu7Ao3^s~EsW-`)1OboGcLQGO#7_O# zH$cw&RG%m)DgrW7@Qd>R00hPHgM^1E0@slTz-UY=5Yl6Ae!k7EMu2gI2j}6kVz0k3 zx(ep+OdP)C1gFRaTlQj?Plou`eYT`_tvH3C3isj2S=1ca{F!*PU$7%P4I5#m|>{hp5xy$O;P zoQ51xS}Kk2rx-ZENV&?!+FU+LQ9)&dHyc&>uv`QAJXCCKA?ZUVU zzo3v{_ZPnIL)P6*O)bdL7yw{*@3#e;J>a{$|DB`6q-BnT6gc0# zJ2El?WCuOVDw`EgluLJ&j`?ShSUjgM`;Sf&^*Ji54>SOwvSw`x%5yQ%>kKe3HJyk2 z402aqShR&AHa7R*u%@1#0EsxY&jkkvQ#UMDzrsa$c_-72^1F+!9v3tA0^GfG$1;=B zx(UrW?XvNs{rwD#j66)#_}-cDh=}A)OUm2zty;P2+M!XP46fptnn6#KqMfF>|BHbR4D)w8Tj+(PrIWl<#_zj;20uLD0Vq~`1)11B%g9g9?Yx93b3W#NY^U%0>z+xSKD8n z760bV*NOG665}1-2_iv>J`d{;3vJ#-+I3@7@{PUkwL1KD&iltS`UFi;H%0aV);wId zk9>KpkCk8$FHG}$VR_6UYGmooTRQg5grFSPqi?=nk82unk$L@7(vCzBssE#AC(Rkx zl*~u)D9<;2FQ(o*>D0$WFnA?Q<5&_SUq_f~s=v4D<}Shh#B_HF6@eusj;s9Y>xJc2 zXKAI$4FumCy1NPfH1`Q|CL0K(iv)rKq9&nR{`ar{t4CvKt5lfRnG?Z#GAQ%ul;RnM JOtQhf{{v!tnw0$-eI)`(E}vieychgzVXd8T)Rm$x>nrhLI#? zUo(To_P?i|=ly?vzrDwMJRjWVxR-0L`@GNlJb%kI&-HXP=s^$=1qB8D-8*Uq6ckiu z6cm)ow5NeRwscgDz`wITcg%e$D9*np|53t)&a+cc@KD@UQ!xs%S)VymXVg2_w@s-M ze+Mq8z;8=^#aMW$3(}>-QnAQWeZAU#Ewc9lJg@rw=?@orZB!mW;|-``&o98r1bKKy z6O4XFMn2eZ3ig<7J#bnK=UdE{ZwlPZ{{5-v2%XVf3%98ELJ#RNDpOEW|Jht&F6Eel zH!)Jt@;s&>ZytkrY`35M{S53-6ISkwznJ#%^1pkig(FV?dwEnG4Xqi|lSeXt$6{2@ z(`=xYM3_n&2Y#Jev#Li-$?TtG2jB&MUW+)~)~F5MajFge$Xa`C|Ad}h+9~wo(?wH; z6@8JW$nkTlOat1@v{YcVJiQaI+wGpy4H=qn!As1CCk-dZCjoU`v&QjqPQyjyXYAdJfFS8(Od2;=hCraMxecn6aTE7u0EnM|y|hr$Z3aV|cZf~uEkq+|N0kjX`w z$~MjO`2(@lTgBAKw*BB6RJ1I*JcWBr%GXjrx~wSFuBZ@TirW&t9cB3sDuHrCHCY)7%?Dzl8hsNi?5X1di2FO&zuhzZcVJxz1ex z@yvZBNzE8%!n1s6g&1M>1Sis);Ri444>WMeotc*QTg6O6Jtw}5(XuXMt zTT{lh2n<67j4xG~!>TnwDdhmGYfsQo2ZB?;az_Ss@n@2Owa^TU-F2c~lkC!qo*|vC z=%AQVOp2nzhc-fD25X{4Ob1LTXqh8BOZ)fg{S&ucynCgG&CBuTBz9>jT?L}inq*A- zeG~Y+1NBSVcZb)6pCMU}{XU8;yw39e{8jE*sAD9v4LJ!M_+I!?3$2zst!dp1a4rdX z=~HrUw{5iUTl>M@4a?}6?|p6iiRO&~N$7|@n}aN=_1(#QC&*8WwjjHhEYS+<)&^G` zDmz2U)1v$9C~ChXH=<=KbQ7HvFnGVl;d$`kcHa>0ex&E{=9lJLg|DUhytO`asykaf z3|YZD3sVn5*3F%>9b5cYolXunS~oK>g&NbC7{AJ)d5vf3P69rkZuCu}e;gn0b$IV- z5?5Eo%ZJJ<+cUSphDXu`Z?FNqZKfY?y^W)w0^9Ixa>_BtZz*Hjf_FH1h=FG~e3bPc z*DoL}7-^vv;MnpRh}6wc{}p?;vHf69lQ7Jk*EWV2&CRdqA;p8WS9Md*xI#)@ryG#X z3z_bpelO;F7wcrZMeMcCPVIm{i?;9E?;P$7PxBBz%Wb~7C)#{~LW=APzl6(3o|z;IiV!%Z)tBzf-XslFEj&i)%n8MpNOTGsz2JqKkD|5SW+2n`>BdG@q3B^R_sOb! zbWF1L+glj<{clgC&e;Ub#VkxdNRcd5Ptr7tQ4A-&$$CQMcb}-Z!I$m#@{)W|Rr9Yw zq4nmnmAn?>+7x!e`N7uvcipJsi1x!@_pmMg?(8irP2D#id^lI@w`_3G_i+A0Mmefw z@NLLSnUoc0G+J8|bmu}kB zveB~I;2!kqy7pS`$76JaNfN>;BeU z00CiEWb@?oLgMAc>1hEM&1_htfj_X}VN_SD;U_9Vix6zw%3@AltLYg~rK zS~reJ#Dwfj#Cb^6Xdj3(Y^y7P)94oB&6*-8%nsv%v-Czgp30{B`YA(VsKUH<&5lNb zreVLvt|!*k&j&Xd;kw;NM5~KS+P_|@?<~c zCo0b-(bY8~A)dD!+1gF)ba;&|ZdJ^K(m%cynVuUZaln#j>s_%QxD3V5Y9wD6zl}Th zaRO=ifLr?|>O3e|`isvKnT@9TwL9rR?os(C`N1yhB#hN3YaYB@hCsAON?)rBjW_HU zPymBm57jzP^1WCCoheO~osk}Q$BsXr$I!VT%nYAGnn5L5{^|C*Oy?6V&lDf53Us%0 zi76(U!Dbh&m?){^#a`@P*{d1^89@d{O>gwTH!8K&UcoIY*RqlMGlhlOvX;J_Rbn=h*8aVYoY1Q_n70)VbKzNE^qa29#m;H!(h2IhhQ0vm`^;%k&cZ*4OpTY(ywkuR8e;Itwd;klT%EU| zM7U(=!ns!N3Dcbjn~SIdeI!a@SAt#Iqpr1O(co+7rh?psA`AzOB(iYS$ov+(xOW~R zGa3g^ZuFQM{i@DuWr2J5tw2CR1TR#Dmjk6ibYQt|v$p_p<2-@V!E>v*-pWd<3?K#HclJ7#Q5 zbu(E;*n34j_$$?*kOFX9s;X>O7nm&H z8|H@BI(~F&Jw_O8DT%n4nvL~?x#5P1TtB(MFk2OI&g?puSLOlcmHbMeI%Z1hLE5XF zU3iYf2o@pRWgGo8?}edi_wsIrP?TX~4qBLdmm@|Lr_3W4<*CvnNDy63OmoEXy-flj zG4ma+s_1%1ub@8aXvA;s$JzOKWB-jO6jXPqJ(>i!_)YRpabza|Xy%9D3%}IX;`IWE zxu&s9OnJ?LP|V^px@uofj>_8L@!p#YNyp&R zw7XOT*6UCw!#^ap{gh~$5gA%aX|WRZYMu8ewdYr75fKjuOP}UzCX9h=2q&c08r~ld z7nfTCEW~@1U+XK}Itv7bze@Q7rBKB)s+a8(i(7UB84cGCmFKmF7v+ItN>QXP4PFtO znyclY_v)41=$e-?e5%GKsJDp}R2#JKte+Tj8IKz|z-<@(K~%I&VtM)=F~Yznp2wXh z)Nkp`{GX)Mm+2Rt4u49fS9uJ-QS4#I*Zx3+Z_ZH_CA4%jB?3=oAW(jM-wq3c(~2!B zUNDaVf^&HtzH%$b;0?gEXpI~w`KVsA4!Bu}&lJain+sj!sET;dzIAb`&mya zkzI!UAs1xghtz?2iURpdt9HHWb|+qDf8B6Z06JFbdEugQ{HIL1%X<0LgaqaedE-*i zl4@EWM!qWRP6V^C0g|(#Fz-(}{j>QY%1CFH1d*&^e`fG6mj!qfbJa9-3}v0=1JC8H zB$J0f$Ly)#0Or+UtOAngUlNR=H9~=fT}uAX4q7!nMtNZ~LN=tJT*360g>sg$*Lg)A ztNU}j#~!xJ{^{6T5^dJ5I4d;O*#yeIU@3sP;>hjLdS= z(-Df-`nBLpWJVbekbc3Nw;B&}A9rH_YD22uGGN z0(|q?*~Nnp65HQ!on@@rm*HoNLRvQBUAxqHVGyK&%OHU=abLXH->O+LyuaVL`HDGd0#&j)GJsyuM;_|~j-*Gca~~K1xUfQ_hSqfBKV|PlE?625+6Ds{TueIpU9ttrl9(Ht&_zrctGyaedGg(xb0)) z(9W=uH`L#Bsi5A#F<~V?wcG*LXW8iGiLY~gp!*v@bf18xn_btQY5&QucAY-ImC?U1Te7;W-K>)>>qJ}`mq9DWv$>KGftz0! z(hPNO^l=8hJ!-dZ4G7S5?~0~TcLE>)DtHyySkPpxj&lKEu*_!L&L^(WH9H`xPO^a; z9!|qKo`L#eM*43s-MclgLY?P|4R?7B$S}Bht>$AzMjIJ8Bm)G&7cR5WhxVP?Ej=OAN3XPt`%%aip=3w z&(OhU$EMmTeJS_cE4X?RB*Rcw zVSKH5F=u!7dGziQrf_I)Hq!fkL5Ym6+&UCnbdSxQH1~`fKR;*W-QGv{tLFm@NZF`I zEOAg<0V~dM0!GRTO&GoRbFyOHn=|>{(Ra3vsx$GIYFIW{P|#lm`Y&q=LpbFEpk!k0 zI*u^bZ(~_wc^5)hvg726JbYOD=%;3=w{~mx!w;7l6amm9DFzVLABM5d)zes>UO=`Q zi0j3XI!+Fh$P~;{1Bo%fTnSFv6{xa_JR(jIX98zuKI`GeoIQ)D`Gj&M@57es9^I+oPJkgV^(+qagsz%gXX@pK8~cyQfr01|RD}M_RdIzXleb^X0_- z2+Gm^@e?RJkA109MIJHqz$0q?1*~Gehn$+oN>nx3Sr|%~U<&cY_QNNn;q<1EWvrj+ zMXq@LvINnV{@8Ld8w%ZM=3_CRLECZz_JFh(pEZ4BZ@Z!-XO zJ%A)V8}?ur)BK#ZVXx@+yN@8=uCiU$>!moqKw&zxWobk=KKD)|@suWnbW3sm~ zzmgbrW1>WiHmfiO`U%0`0>M^ zVv#py!}qeS!zw#WF%YRsh+*&+iyMJQ1tB1tB=|LOHhclqx^a_J)=wN~<(u?-t#0o=$RO!7pLe>)xm8-AZde?5spCxV= zjc!EoX(X}6!f=LFqhdlWI*NUgk2F<)N)^W3FK5g7sQ>apKW|FiNvh{aUX(R78}TLb zj8AAc% z092)I5`7Wa3DV&1E@`mxu3BMJe4YC-%e!G6i@y1LADq;_RHmps3@+z)h%F4BQ;>|# zuT%wRIDgMS;KO@B-!=$Zb~uD*ETg|ymN2o$Ktu@1Vvu^w9pfPRDduMurX|F?AY;fB zrls0Xm(L9$(asNzT^$-7*I3PiI+kFdF~Ky2YP`i|BqLsACe=8hJwjjvFMY(Z6fz(c zPCvAxU{jhai6Ud@v=Zg7l&eG1vvuC;nL4BVs{3jd!ICRjT_x=hcl4CoK^)Lx@kpk@ z_A+q6XMi);diO8K=Ug9a*X})U_PkgifwKxqWe||5M~A8}zRP=cS>1tyI*w&f+ewEb4iV;DB!6vez@pUm2YiAw}egBB`?fSaH=k@+jZ@rI5pRUW^P^Il%p) z@#5{)Av^k*$TcFjwP}O<2)k7>IYSG1*9b1zB~ixzj+JET7ZRU3V-={r%)J@N?UTqkTU@x3gY~jE;c*& z$if}&A{~e%Vpz|RGDf9n=ZZ^P*Bi2|sZsvwbFac2#Sly)NG46wec^6DRSq&tWb8NL z8D*;2T0l{kS1F3F)fT1-E5uh;{t^WlZ)3f-iFf^l<3pacmZx)?8+48ljHhDeWp#P4 ziFF*-OaTRYy+1de)y7>YN{yQXIX|GdBOWj1L;nZ3QIDQwaiA8O(U!5PreTpHzIUA} zU=mJpfayaY!8dpxbsvaFgJW*t{y2JZY;hi`auu`=f_clMYS<`?9TwE@0fNQz&sfQu z^rj)ii#frxu?)n(EN3#9Sd*sao8S%JxT` zDm_OgiOMQ~(?|33=l20>7Sv1aGj22RV#eAjdzD3}gG>kikB)nRA&@@|ASx&-TKLhk zi&0wCP~+0n3N>B5*h2j|zk=OiP=}uJlwu)lKE^Y29>7WvZT?h^k&lX?Lja8FCN-or19nwEA(pmT{yz5IHa!TZr$< zCNoyx&dNYlr^}5(KhKA_+l6M!`md=5h}h!N0aeUFD1Dt>zPP~k≤EV{oirL^!S~ znrGfT$JYJe-vMaFVP=8~Foi$d2_PvBKwPh3jg46TQX*|Cc8qjAo0R28>?E zU-_4F7V+o_Oe%z03K*ry{_oB!0MjWWun^VASqR+eOC}y$xR$BD{@>(bro!4c!D_+Sl`!5F51=uvjGMh-#BtMw zvXUIZ$?&k&EwT=%2=I`KEaF0zcP7wy6;^TERDUBB#(0Ol%A&!;^|jc2uU){5FbhqQ zS-4nh+ZCON2Y}ZL{~<}-Rr$!VQvKcidt&G`4Dpe|@}N*9bXa~T(G^>qbP4LBhf06G z<_`*fq)qS#Ffc42*N-jah=?;hoe$85?k^Ds>&v1&5C3^4am=L#`cM`Y@Pd_q^V^59 zWmdlz!{kB;E)rjG=P?u%%vt2M0DzRqe7YP!q8PXvJ{18vr%I>0I0eR%K(uW`Z4h8kJkw3tRmP#jg(1u z$)9DZr5O^=c&3)>2Ys19`5FbFtfK2`qa$GJ1M2(%5s2=k7{t~vz^>~nEAMx-Uy^zB z4t?yL8}8)QvV7eTX;D8}?~Nu-OcGWA8tOgGc%STjk*&cJ7?GrOILA=k(>N25RZpwI zMnty*RMBqO6<=3&w3B#A;(`v-2H-2H@0oU#M(lkJtt>Mxp9t9Vo^3~Gzs{ES&LM+H zt(g}8^=(08#G1Gu3E=h+ZMJd_zY&#*ZJ_Pk0GM|&x(^84+le&he{>WW&*tMI=|i^r zVVGpVsTms}vtAvUY@hD4sdd|*B!;16B95thhwAW}ktG{^&S9QtSAg%&2wOFcSOIi- z_rUkFjPo-b1DE{d(!HqLd-%5C+U3dW!eD^0d;*(V+2QNmoyk<0z0?hd;tWNr;>cjP z^5|gpTS>K)fJG?^gp=c0CPp#>uD7oQG!11xf)r#`IheqCwhYawKeLNP3q9igmLLYf7Yk zlkivP(&LFrJT(EhV7hYA?<&c}(u5OD8S9OLL}6S;0N>ATcE6CHEPim-kJ65QNMav~ zW8&4yRSaKa4@mo&|BUM%V1ctE)M1gzuu`sHCCryQY~s*I#f>;ULwg>x}1{HU8wY!b_- zo$2tziCj;@WfuRganVCjU8?LFElvCS$@sk7nz-Cb{%8S=u5kH^wtkG`Vs>CdA%lJz zaC6f>Os|2_K1Y;yn7YIv_-WHb95<0Xg$JvfJq2Y7G37opX{t%x`t3z3PfiC2inOnj z6pz0`X0R5b+SdT1XKWEb-3^V$fSj>*2M^F!_YyNO7w{UY%h6|g>*tp9`wXhVRtJ9M z<O(AV>dtFn zo3~+f*l};f2~aMbZ6ba zf*og`kJxBlOl;_m69YX7;aAqBM4450fAQ&|ukJCm_J`LS$EB4|y!fZ-Y{Bvj#7DPx zu0Z}#SjoWYDphcbEzE#U^e+wqGBD_>a_6s73D&hyUTj|Htv+)=9HdSNdy53gAaQ6cl%1 LI%+6Y+vxuR*X`BR literal 0 HcmV?d00001