From 07a69a56f2f226b693da2d1f0ec2bd940b25cd17 Mon Sep 17 00:00:00 2001 From: Dunkan <70066170+dcdunkan@users.noreply.github.com> Date: Thu, 28 Jul 2022 04:39:12 +0530 Subject: [PATCH 1/3] refactor(telegram): use grammY --- telegram/bot.ts | 11 ++++ telegram/local.ts | 3 + telegram/mod.ts | 149 +++++++--------------------------------------- 3 files changed, 36 insertions(+), 127 deletions(-) create mode 100644 telegram/bot.ts create mode 100644 telegram/local.ts diff --git a/telegram/bot.ts b/telegram/bot.ts new file mode 100644 index 0000000..cf5ff23 --- /dev/null +++ b/telegram/bot.ts @@ -0,0 +1,11 @@ +import { Bot } from "https://deno.land/x/grammy@v1.9.2/mod.ts"; + +export const bot = new Bot(Deno.env.get("BOT_TOKEN") ?? ""); + +bot.command("start", async (ctx) => { + await ctx.reply("Hello!"); +}); + +bot.command("ping", async (ctx) => { + await ctx.reply("Pong!"); +}); diff --git a/telegram/local.ts b/telegram/local.ts new file mode 100644 index 0000000..cd74338 --- /dev/null +++ b/telegram/local.ts @@ -0,0 +1,3 @@ +import { bot } from "./bot.ts"; + +bot.start(); diff --git a/telegram/mod.ts b/telegram/mod.ts index d60bd7a..66803b4 100644 --- a/telegram/mod.ts +++ b/telegram/mod.ts @@ -1,130 +1,25 @@ -import { - json, - PathParams, - serve, - validateRequest, -} from "https://deno.land/x/sift@0.4.2/mod.ts"; - -// For all requests to "/" endpoint, we want to invoke handleTelegram() handler. -// Recommend using a secret path in the URL, e.g. https://www.example.com/. -serve({ - "/": () => new Response("Welcome to the Telegram Bot site."), - "/:slug": handleTelegram, -}); - -// The main logic of the Telegram bot is defined in this function. -async function handleTelegram(request: Request, params?: PathParams) { - // Gets the environment variable TOKEN - const TOKEN = Deno.env.get("TOKEN")!; - // Gets the environment variable BOT_NAME - const BOT_NAME = Deno.env.get("BOT_NAME")!; - - // If the environment variable TOKEN is not found, throw an error. - if (!TOKEN) { - throw new Error("environment variable TOKEN is not set"); - } - - // For using a secret path in the URL, e.g. https://www.example.com/. If wrong url return "invalid request". - if (params?.slug != TOKEN) { - return json( - { error: "invalid request" }, - { - status: 401, - }, - ); - } - - // Make sure the request is a POST request. - const { error } = await validateRequest(request, { - POST: {}, - }); - - // validateRequest populates the error if the request doesn't meet - // the schema we defined. - if (error) { - return json({ error: error.message }, { status: error.status }); - } - - // Get the body of the request - const body = await request.text(); - // Parse the raw JSON body from Telegrams webhook. - const data = await JSON.parse(body); - - // Check if the method is a POST request and that there was somthing in the body. - if (request.method === "POST") { - // Cheack if the command was "/ping". - if ( - data && data["message"] && data["message"]["text"] && - (data["message"]["text"].toLowerCase() == "/ping" || - data["message"]["text"].toLowerCase() == - "/ping@" + BOT_NAME.toLowerCase()) - ) { - // Store the chat id of the Group Chat, Channel or PM. - const chatId: number = data["message"]["chat"]["id"]; - - // Calls the API service to Telegram for sending a message. - const { dataTelegram, errors } = await sendMessage( - chatId, - "Pong", - TOKEN, - ); - - if (errors) { - console.error(errors.map((error) => error.message).join("\n")); - return json({ error: "couldn't create the message" }, { - status: 500, - }); +import { serve } from "https://deno.land/std@0.149.0/http/mod.ts"; +import { webhookCallback } from "https://deno.land/x/grammy@v1.9.2/mod.ts"; +import { bot } from "./bot.ts"; + +await bot.init(); + +const handleUpdate = webhookCallback(bot, "std/http"); +serve(async (req) => { + const pathname = new URL(req.url).pathname; + switch (pathname) { + case `/${bot.token}`: + if (req.method === "POST") { + try { + return await handleUpdate(req); + } catch (err) { + console.error(err); + return new Response(); + } } + break; - // Returns the answer and set status code 201. - return json({ dataTelegram }, { status: 201 }); - } - // Returns empty object and set status code 200. - return json({}, { status: 200 }); - } - - // We will return a bad request error as a valid Telegram request - // shouldn't reach here. - return json({ error: "bad request" }, { status: 400 }); -} - -/** What to store for an error message. */ -type TelegramError = { - message?: string; -}; - -/** Sending a POST request to Telegram's API to send a message. */ -async function sendMessage( - chatId: number, - text: string, - token: string, -): Promise<{ - dataTelegram?: unknown; - errors?: TelegramError[]; -}> { - try { - const res = await fetch( - `https://api.telegram.org/bot${token}/sendMessage`, - { - method: "POST", - headers: { - "content-type": "application/json", - }, - body: JSON.stringify({ - chat_id: chatId, - text: text, - }), - }, - ); - const { dataTelegram, errors } = await res.json(); - - if (errors) { - return { dataTelegram, errors }; - } - - return { dataTelegram }; - } catch (error) { - console.error(error); - return { errors: [{ message: "failed to fetch data from Telegram" }] }; + default: + return Response.redirect(`https://telegram.me/${bot.botInfo.username}`); } -} +}); From 1ebe1fe9cb836d7732ccaec6651bb764e6080443 Mon Sep 17 00:00:00 2001 From: Dunkan <70066170+dcdunkan@users.noreply.github.com> Date: Thu, 28 Jul 2022 04:40:32 +0530 Subject: [PATCH 2/3] chore(telegram): update README --- telegram/README.md | 61 ++++++++++++++----------------------------- telegram/demo.png | Bin 16020 -> 0 bytes telegram/preview.png | Bin 0 -> 24628 bytes 3 files changed, 19 insertions(+), 42 deletions(-) delete mode 100644 telegram/demo.png create mode 100644 telegram/preview.png diff --git a/telegram/README.md b/telegram/README.md index 70d2d30..20075cb 100644 --- a/telegram/README.md +++ b/telegram/README.md @@ -1,57 +1,34 @@ -# Telegram Bot Command +# Telegram Bot -A simple Telegram Bot Command. +A simple Telegram bot built with [grammY](https://grammy.dev). ## Tutorial -1. Follow the - [official Telegram guide](https://core.telegram.org/bots#3-how-do-i-create-a-bot) - for creating a Bot. -2. Deploy the Bot by clicking on this button: - [![Deploy this example](https://deno.com/deno-deploy-button.svg)](https://dash.deno.com/new?url=https://raw.githubusercontent.com/denoland/deploy_examples/main/telegram/mod.ts&env=TOKEN,BOT_NAME) -3. Input `TOKEN` and `BOT_NAME` env variable fields. The token value should be - available from the BotFather and the value `BOT_NAME` is the bot username - that ends with either `_bot` or `Bot`. -4. Click on **Create** to create the project, then on **Deploy** to deploy the +1. Deploy the Bot. + + [![Deploy this example](https://deno.com/deno-deploy-button.svg)](https://dash.deno.com/new?url=https://raw.githubusercontent.com/denoland/deploy_examples/main/telegram/mod.ts&env=BOT_TOKEN) +2. Open Telegram, talk to [BotFather](https://telegram.me/BotFather) and grab a + bot token. Set it as the `BOT_TOKEN` environment variable value. +3. Click on **Create** to create the project, then on **Deploy** to deploy the script. -5. Grab the URL that's displayed under Domains in the Production Deployment - card. -6. Visit the following URL (make sure to replace the template fields): +4. Visit the following URL (make sure to replace the template fields): ``` - https://api.telegram.org/bot/setWebhook?url=/ + https://api.telegram.org/bot/setWebhook?url=/ ``` - > Replace with the token from the BotFather and `` - > with the URL from the previous step. - -7. Add a command to the bot by visiting the following URL: - - ``` - https://api.telegram.org/bot/setMyCommands?commands=[{"command":"ping","description":"Should return a 'pong' from the Bot."}] - ``` -8. Now you can invite the bot to a Group Chat or just PM the bot with the - following command "/ping". + - Replace `` with the token you got earlier. + - Replace `` with the the URL that is displayed under the + **Production Deployment** card at your project dashboard page. +5. Now send the bot a `/start` or `/ping` command. -demo of Telegram Bot Command +demo of Telegram Bot Command -## Run Offline +## Run Locally -You can run the example program on your machine using -[`deno`](https://github.com/denoland/deno): +You can run the example on your machine using [Deno CLI](https://deno.land). ```sh -TOKEN= BOT_NAME= deno run --allow-env --allow-net https://raw.githubusercontent.com/denoland/deploy_examples/main/telegram/mod.ts +BOT_TOKEN="" deno run --allow-env --allow-net https://raw.githubusercontent.com/denoland/deploy_examples/main/telegram/local.ts ``` -You need to use a tool like [ngrok](https://ngrok.com) to tunnel Telegram -requests to the app running on your machine. - -1. Run `ngrok http 8080` (assuming that the application is running on port - `8080`) -2. While registering the bot, use the https URL output by ngrok for **url** - query. - -> Example: -> `https://api.telegram.org/bot/setWebhook?url=/` - -That's it. +Remember to replace the `` with your own bot token. diff --git a/telegram/demo.png b/telegram/demo.png deleted file mode 100644 index 2b9b293016035f35ae2fe4ed31c0ad3b90dc7315..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16020 zcmcJ0WmsIzvMvxHxD4(vIKkb0(BSSc1cJM3@WCZm0>RxSxXVBwkc8ka3GVK2$v*qY z{laTn zN|JsiTEQcXvx19+8uE)5=5Ps>hQ{hJ;3k+^AV^#mc9u(g&ke~J9r6j@i~^<{8QBG~ zt{P?*Zipz7QTzgj(tsXWUYINry@6m4k-`%JGmR1f#}O`$7B9I#JNcc}=3Ve`-pE-D z072FisgTKQgLZeDfslxhh?D(YFG=1_Jt03S5mcF~pQ)OQT^AmXhy$rMAp;Gq4UUko z`7L!n_XHuKSJ0}*!e`1_2J8cv0Y_%2^?(c(uL|~y7rXI~k78dr*=r8LrdI}MkB^5f zkB^T=z1`ht+^6DHFf+);Jk4MgohPPhTjwl(nX= zo37GpL32lYR+>J|wD7Y2@0J`~|2?dy0kZwcVdG$BXZx?ZpGbxOJQY;6_Oh_kleV^h zV$V|>q5}NF|0@1h#(y{XKL~aIn~;N@m*;8e<;Wd3ToE@TKa)%OhmhoNs;4La-w1cV$s}xk27@C>@?AtA z19v43=()UDAfQ=K51ukEKQmIgi0(2zbZt(X`zBw=S1~jDnGwsa*vfUUjk0968F zepqRM^>#oVAeeEIZb2=218>6PmNP{mTT6m8mjji^G|i!xjB3I|d@}HLo>(NIc~1vEiV?R-vpe!4fcjwZl6}Wz9)V{vtD# zVJ_cNw*p^x-AOmeX}+Sw9tCI?)eEkpWNfoR$-s&^__4p={BjY*rB|^EziUv&~(aTZWD+yYTD!O1kf z)YBucErRq?#7WpOyr}?T)aJ?cuehh1@Pf=xdACIqkbWMacpjm8 zI@ZqJLr6_CA*A+~Y@}*pNYn|iwhBTm#zsPJ?fNyBnZ2T}JgN>Xkgao&lwEIN>r3Uc%Q0)K7=6>&ZOo4{>?4^X*GDY9qeDH{ zF278me9OpGop`^gy>;8;r)hi-7!EjEF>Sq=9b6lp^yL()zqNZy`%i8qbbq5V^{^a@ zpHAyG7R4StB~PVTv1hnCXkZs=w@SQy!#rWT8nvp`eBHR5R{-LvsKUjosC2KK!d-0wYKx`lj9(0Ilr z)z8o5-Vw&|8Fw{{R~wI%bLuR{a2dp!uPgYM;S9)EZE{XG7a4m?AxjLG1?B!LD zu#>u>+*&7MC~p9)9lYeENzRUJb+3S36uGg_Hwsg>62SWpo(Ua?dRDi;In;_Df`bq5 z373!ut++m#p8Ii+w!BOnXqY=Jz6-&r!5TX+x|Ej z-bbps)vaFr#E;$*VTk0r4PP6j8`h|j{myYrv31n$GG{B)V3k}5FA_pwpM76HZ*FmT z>i?TOfRWgw17~T7zMJ}9lTql=%+2qd^W(-6TPko_VkuFl&sdl^(o`t9X6)+bP&%*% zJhT2?&hh;ncD(qydv(qOG#fPpfzV3jo0%__$?M2WJm092`qx>GVaD}cm=WpccPqhP z*#p+Hkiy{7ABQ4t;wM#qXZeHiCn%1Uy6(`8y)Kabj%Nqc>%KqmU*B%7#F^aTPA^`$ za`R4@oy~~!7kml%F7^P!CVEM;cHG>ID&YJLlPyU7x1W8b*KMrM@oIb1nf63;V4l>LZgPHP710>JAD$uQ~o z_5!Q8lR#Xw9vg)m8!w`ZIalVWsFPYS)Mg~$)Yb3&A;N3F0h1$em6)5m$<%Gq37b7i zx^yT4zWyEG*Dz*hB4;^L)aZqBFbDmryFNRxt7)>kyKS#aD-z!*x~{ASFGhUIxVX2= zuj*k971~69xq^zdREJhcac=}4+tI*~vj$3M1}{=o;gXmWY9|VZ~axrrB zV<13n$eKM!y@uxMu*wG?xQK&M}$qZ4&XBlhbpfh?|y!BGx*ZHdj&z9t(G`B>uTv+DKrdn~-RW z7hx|;q|StjZ+d1K58rs7gftvRZ=T2RWN}1T_vBsQKc-M*Z7QZi4-Okc{4L}8PSLlFZ$_Izej&bf&2zq;zr# zuOsPUT_vRvo0O?OzSdVY%&asK&zP!~VaEy+AP({gs<-W$o zDE7?-dw$2{OB0&17gjz`7ReXC$&8&t!XyJ5VD80yTX2 zVJH=4k4$Uo$3eD3wAa=@*|y6n*E?i?b1|lpuYdXIQrF&mSZ*#|()eQ_tmO7m>Ez{` z!7mwNGQf$rIr{3<17sHc8QP;lo39`J+KsD04+%i@@`fWdkAsjSWkLJ^MNH0L&<|5s!P8}Ez!_9Ul-mR% z16m`l=)%VC4zl}uf4TJcf0Q;VPx73hy+4p|c%|GK#+LK2p8P}I=feLeMofX{oXN7* zL#?-uEB+BL+mBtPi6AA_?7RO(pR3BZULvt(@yFb_Y<|58GTvzUA2f?^3mEKBMQ<5I zmfKuS6b1A3)d5?gJSY4c?te-Hg@MU?^6f9ilU zu}CEp5q;;jH2fR!KaO@B6LF(a@H~OdX0UVkUBE+6oCMz)C}R(JQs|_Lfaqkr6y{^o zf)hfWtBdnM3&9Eyx$3$+qY5WK27b>Yf~E(lc=MpzQL&yTKOu>w3dk}Vd!vuA!@c7U zLZpxaFlt`JI)gmqI5C_%U{Fx&p}5O&8$}+q=~&r#LkEc&*{>d$^^h8Gv1XdlFs^Br z!O_$}Muqu%j^A&E5)T`?3Gj0&cWa%TdFf(^!s6mQXzKd)f!IM-6g2{woS)v@CqyVj zWkhh^R*y8~u;5N#5((S3+Kxqb{g^&BEpOIuXE138zzIepp~`Ha*(wj)ff~@-&KUC} zL|-|JBh+cq(tTjnR9k~tQ|o^LK-bz(qs2b>@m9^SA4+{*9(Y{ZRJW;!{%|g5;5DA-aNp>j@0W}c-+}CaEtG7U$Xe$SXpti_i=xi)XBIUU{@#=TPkvzb~R8*fpm>y2X>5Gcz3DG9_xEDdU$+9ri-U@nq*dFPR z!LJ)^t({Yv3)|Is8GmK9H1GBBVUR<0Is8VyBLX{LrWh23oj;gU)o3Z_yL&<>bae~` zvNqGE7cyNGAfunN$kJCl#!=y0DK@8I$xIwPQL>@3Zfh z=0iFFje>d_>Ca%Qe^}8$jsRE-r6(C8m6USAd(B~h2DjuRzHl4efB*1$=%N{WbZsdc z?YeO{@m07MxK6iMjJ1a=BnYO6+`pn956#9|f(VH@&9gCfa`%k*#kp2EykeI=!9 z&2kP=Y*Li|lO9^JjWmndRh(5SMMFuKeqA7402jvx`g!wSd}PQ6yX0p0wV%0gG<1MU z&NgI>2nZY?4M^uei(lSs08y0Swv&SLyA#%UB#BL3k;iteuEqM_47{EwTVUtqnYx+PWTSDO7gcz5-0BO9g^7Gf2C z2VTnhV7}Owhc?K`-9?ek<`3iN_2V2CBzKRy8oN`(%7DTQ!f;fC4EhW4oyUiIb2Yl6 zJ(s*do+h&mVLid%t7je7*OQWhyeE!?b8;W75IU z%JRNbGjy75Xg=O-+Eqo}5!p?Ac`&(zT4r=FZkKF-?tfF;wRW=W&_Bu*_=**XJ@Vl` zFW``C;H}Fy-2$ii(JyJ~0Oxbl6JsKkkL!XM84%Q>0xf1r>5`hwDB7_8JS!`idK0kb z3`o-{Jb`)*+OzH)X=D~Y50EvNRj&ZNmixlCp4*II$-%*qMi99!Exq=3_&0zJ2tc-0 zL~%aDs+BC9e7zGxF&jsdne;$Svj)wHZto{Cd7W)8XmZllxUGv;S0%e9^Jd@wBR)T| zNt@zbkZ1%;_4s7YSN=r1H_=AM&9Sxuw`s+k_P@ymUx1j>i(+n#S)#MqLw#pGHwW@P}d?3<1QpFpjUK)FcaU7)n0d$sD z?KyUDKGlc020k{w8DeRQtigrmA!M&krl|)pYcV5hrLxGk)H0jg(Na3|$NEf8o!+WF z2CaRPFtrr9gJJF5xj75WgPH{7j?bU*C{Nb@Eu0m_mmc$2l2X+PyvJkcX|$nC_v8Y} zZ`BWu#ahqW&wgwa$t-wIzve)58Ww6r2zn>BICTm(@Ye!{E-!hYx}2Us)t8o8QbFHa z8r>b4Dv6iZV|@%3X?dlp$bKo3fww8UGG)Ov(UT#AyW!uf)ni*%+yvS4%FxKu$ZV$_ zl1!%fjp@P5f(C z#|Up463*JkJg^~J5hVRR0H|(K=pw7eb~~(9xSTiWM&O0G@V>dQE>Pgj!lqm9Cm@GAN`3SGyL1H6#uO$uxX4 zPvy?_hi>I$dM|EYTKV{*ax=!S_hN@H_6R4n_w?#h!i;)hegcarhF2({5Hq6N&63x4hxv! z4T=GwRMVWxK@xIKKnzXjcnh3>?RWFPuy>Ku(l=zWQ53MgEEqO-u->CS*8F7F#9-@N zerQ09PPLb$$&!|4M%c-anz4;XN#6r__R^HTUMEG8FB{>F)XE*Xvp6WZ15l*872vxf zVU!~gt??#mT9Sgf6V^2kD4s`nm*L@t<*4%W3^~_oz20`eRzs1lRArQxTCFL-+{fCd zr0QhG)}<-xKU&2DzR^`vSA9okLg-!@AZ_u^%NF7uMr7uEn~wND zSpaX1Ya5%|2vaBQFa!0GtW3l@MJ`k+(Zw77*vA;a^}qB44UQ-p7e8A11y+wZR2UM; zBW?I?#~3P&<%qfekZZ^xDCn28PZcCm93vGFL_)T|4+*1of-tS(MqS>L<8sT4LFMJ086vzruY6hCQmJ zPpFm4{R~^*?490!A_2{0e*)@0?Su66uno!S*8s0IphZ^L<&jg3__!PEre5C2HYEBq zs+O z9O}@gJy4@x=qe0>?(UB5=#+wJU&$F-RLKDuwx#G}SfI6od-SgGW=UT7>MS2b^MG#Y zH16`^gIP{3q%PHW!f)*L455Xpv`h~4|NFeW{1&62id4MF49ls-jDjaT4h-V{1(ARE zHPPGhb5w(L4s~#|)X(<{38SQG^3urIW0E|=4KoT3CCcSM6Bt=U}k!h6A>#s z&xA?azAr=Hf`=W<;tJs-J+Ou5{3K?WF{rYVb#YPJn=`(=O#p@k_elQp%zT=yWh6Kv z19fEGFUoa=OX|x`BR~)c0`04ax&l?OG#XwQxvss()eBhr>jX#!Hoy%V zxyCxlCnHK|6_d)LE-!aBq5ugOnWGp9RG|EFh}*h6s$lqmY6_Q08)RtsI++KgdXZ%9 ztbGt2h5A?&;)ub`Ydbtd7;s$=pzjk=IZQHzH_r`KqBK*trJ`kx|soG2O zjF>1nfL)4%8{-fbN88^hctUpq(wn`5F=k+x7Bf9KsaHzCsDRTSf&l8JVUz%sSVe<1 zJCP#}Od{)&gqu6a(|6`nX^2GQGSv%y>DZOpO6rc#j99)RU8RHX?arcAySnqRR_V1! zO~(ZS`z@5Ul6Gi-VF0EImr6qs0FeAMA}0Zsq1G*x?tRP0M%l6Gf?dJX4p{dy*2PyK*pTsqjK0(Bmt&Uc|2vi*?IZR&6i9OQKi3aMkRd28eK6I^+Kawfs zuJ?8QL4JN*%{gM}o*UB{yfJxZhhI$rR1fco($JM8$Z#Z)5uIxxkWxbIwNC7mcj*|m zXoHzv1sEmU23=@$<%%zx&wQAXw5IbnPE*8PU!p+$fD1c)JBX$ab1)yJ$dhr`fr{!$ zh%}?6qc&;-IAD>)AG6}gcp$@IkFs;k#Z-^&WHV=sdBwU!T?-0SnyFA(_-JIOSYfO` z%Fq+81wZ@bin%M*+0h%th%8JrN@_jWvpvQ&{p!jGY`<2-CHLfFJ`i3scI&M?dM%8o z1az9{@Ost$J}!i%3C?m|yZ5>MO2f|ZXTz50H9-^yw|e>8mER*Fs#84>DyTx_x<|N* z$YRP8!{lx%j;5=6PuK{|?3GB$>h_#oe#EYyqfsiQc!FW9aiSq51thU@mI-%u^ku{K zs?*64T9fEV^qQ?d;gguy!(L}$1xe1@lmPHiqhy?ghCVas#LL|iliBtX8eCRqVA+;W zHa&s)UKjktqlXVeR?690c2PHJfs8>SQb^OR5>F6gx5$m^Ri_U^*0F4^#Zupq|8?B~ zh3#z2s*XrD`PaXYlYfb4dmO?f+ORqsUE^XGw}J)s-x|d%(t`3g)xV2iZ8k+=kF3+UrON&|ZW>a1_!@4k5X;>E7M1-$N1KLbCvh zKs;GVkr0<_Rn{lP{e5c~OCUd(CFAVeR4n-iw*4&9&<5%VkEXFboH)a-8( zC0Xj*Sz+S)Ga(WA{1?9ORrRt$Sa{BXy3IAt=44A(rXnBbsR2kDhTOf_p)@3ese)W< zTHar(%cLc$UYgbRB0)!vsxj7nrMQE65~WiMI9Ntq^Q%~55}HG1Dw(2@Xi()ycQf)o zh?u=~l)Zj~El&!Tug#giS{pwQKb^5zfkha$qj?6#6{OwAG41K_uz-a>kLJe5bxY%&XxPjTSBfkO&6KboohaxO=QK|&J{ z*6a(R0==HnAH$lomTTJ!{E@~)4*G2UVvQ_zo8wr#e1XqwhE@eg6i->>LjG~{L86Hs z3Y0c*DmZ90ERHB<^NTi?uJA_{HZQh`j-R8akc85z6wZ79g(?5hoNDah=4sVSw)2zh ze|@s3WT;$#+|#Az`*{&z2zZe`++QKaR5ACb-e^zo-uA~*N8(`2qndw3RaaEhOo&ABp<5^YIg&@ma?VZq)_w zeaUvDvDHhARWwPt1za1UHm59pY7{%I{txvxs?#!hf!`AcXisRUA<&e?51pEZnl$$% zLv~{vtUo__Jv#(;%AkFG#)&=H+JLM1uU~&q9RnYBZ#2w!gjN7tkV7&-SQ0)y@VDYu zKV|@-VhkL#!5q@0%D*k!RQ1$gmR;n{n1VR&sn!Rmdf1`CR5aRzk)iT+zK{&aZ|X`+ zh?dlbGiRGfvx3;%%m@E`gOG)iX285gFOQDzyGVOjiIQp>5-i!?wzM{LS$#?bDj@TE3J>g8QrhcTBcRhPnVbU5H|((MtuJxr8d5O!YRBg@u!RRLB-nGG*+n!=C)*&r zRZ7c_-$AD5zB5;Y?^hGLGwI4Ter8tv9K0AAs(nsLwx>3IvOl{%@uGAj>d_c&9r+0j ztP5~xe`A`m$eIt2Yyog<)CF^|ZvxAkVcZ`m+W~_0m5lE`#?jc!N$DERN9Bmc@z&-L zDtsJUYBNLs%MJa+hVBD#)2C1aH~*RD0yHBw39iZG$i5geJ&!$FYgr*6N3vYh*d)4= z6W)3s6QfYny_)9qXESRl!txAB06*91S)S4K2G8>q%bOPKs_$hnG}}INC{qR*$#=KE zBG{aJX5de&-t;N1#Vldv!(YbflRwxr4Ui*Ot9b0{{9MJbAuu465cu!U*4vg01Bx<= z%8q_Ud4oYFglAAEr17Hr%bnS1JYhMCWGshd(f@hMD?>sd~)(uya7)7CcE zp6wFiQ;-fKa@OCD?k9=t!T6NfhAT!u|6G^Yk#u9DKe<;if9*-U)mrVAw;<#aroe+5 zziHX`X^9iZ%^>m9)mn^EA(&oSM3^k8vY*#8SZ#l{7ypim86xWti=K^nUli99qfun~ zh-|^`&dQ!1CTgM|t;ZG^_Bdh?<^`Yg7;{a<8aSbxVtH%=CILqsFpoo z)F!;_5LAGEjAglkN}aMFM(=cf)RTS2@Sv&r1aHSnV#g~42m8qTc20Xab3yn@NDwO; z)Fhx2Nam3)xBA(@c^*%LuUJBcJwXu(@r)vIp-!5u~SGAsz_-6du5S zpZBU}uz<1ocDf0CI)Luv+upqLv)uiYUON>r$edWJ`RetYKn0rmi zh4xX6WZViGKU|J?Y!JPMVnoWTCH(3Yv&@QNG>=NuJiIm1LTrdO)|al1nlKg`q;2EQ z=CcRV#WVFIaGA(x7_d(|B4sONUai;m`NYOV>mUD!aBsfc|7dLgsDr0fq9!84maB|KTfHws(Au)6zX>Ytc1p^JU{ZyeA9>CluIf4SdR27F)Z` z_9?QpHX70q$sI=;s~8I|3og!o2g?}UZwxoOEpCzs#Z5x;$Z=l6{&Bqe;9lG9gS3%Cm)d&E)gYV708!JO zZ=0c5vTXzaM$;P{@Z!O3is3a$cC-fl=IVXJzUo?UC3rH287rA&;O!(?^RHMXU2THU zIv?)|Sh$P3fSDwD+|93~hsGYCza(ssBViCib^r|!Dr?=-^mx#^@qL0HB&N2ijRiWE<0h83k5Qxi16A&*@dU$aOgLzQDfq#J*{4a zWd}4F#*gBu{VGKrSQRp_JH9C6^=r?4F?f&|O<(9hSsraK^4)WAV`WK0_KQCLU3Ig) z?r(#(U;PT1!i<>a(V42g+W1tSowY<6^T6hv8ud)NyaCHd^W1(sEp1--C-<^k>GSd%bZji4KwL4LY7@vHHnoX)`T#ZX| z3_La<3%?s4!Dp>7O+xnpho9$V_E-@dK^*a!#a}<#?2~Ct@r0dg4x>ousb$vc1a)>j zF6xgM{|v^20)Qq9v>0UDN^GU@G28K#{g@OcVUsRKA2z#7;OH>`yOBxEB*yv+F}n{9 z%5Am`yJ$R@$u6EgenkXKB}I1V@d4^jk!Ve8-zg@x8I^Gp^P0y`fB;2^IQBq%wn;oS zg>J>IKa)1)aG50DIjLt?!|s~HmeNtkUkBletyK5)Qn-ObGhA2mF>!@n3n_t-x4)oe z*y6!f23{a*su zz~ooM6yHh1JgYv1-gb%suCw+}eh-;??kW5=t2J%d{MRwA?g@$whZl|7?T_Cw=5BH| z!D{@Z$_o!-fxX*rv#Tj=b2`z_8(P0Z)bh{u{9_135YgRBZ`{@?*}~80e1Dqda}*gG zFA14UG*ww>7UV12+3$E*ob6V;zSwj8d}&lYrS0o=+@ZB-IeI38Fu+}B<3}aI&DRi~ zTj$U1)_>F?#xf=u`qg176_=?`#yif4jfzU**3c#vzFX76?|2F(`RtA zi~$IWd(+Y^yC#GSK^;s+X~KA?w+I-Z*q8(YRKQjJNvc8IDLlQ!;6kTwq6maWTm2xF zDw%zl9=6FW(b*L#TlR3SOIEBPYQ|ZK5!GXw4e301?`0rq!WjeT_ zZxb1j(mS7yKMYbp5z>sJNdg1f?ywvrHOxiGy;qDG#w1c?AN>M}zc=29-p`mgU%T_I zZG7kgNe4T8`*07`W;V(s&mIc<6Br(dB9VQnnfm6}y_j-D5>ZT$2$y}C6HeJ#GElui zeR($F;H}%SH_S+_J;vol~_n(T13?Ctaph+Np5 zMma(J;ufub)ZNm;5G;wtc;#PC!h;g~5 zqHVrf0h5JDu70AfWpwbd4#B6@lf`*kC9^;IArYENrW z7Yj)l{A5C?aq{}F{dL4bpJOP*oaDldHFJTvJHL~Wkrw}MnN1SJbn#2|hb6Q6ozvW# z1#j<5G?H-L#HDw+oNn6bBiiXG7ck5+hA+Jh;;s^`a6Cgp?|wR-9a3qZ6$cY8KJ2b~ zd)a;aCSPj(p5Vc*w$%!`|8q`aK%<1Q*B<_CfO^}T5-PE4<(B?-xt8cN9;g@rw>&SF ziHXwUj%Ln?hrFJR?rXwWe6;{gQj`W0TFo41+nW(o&GqEUh^obF z@ozsSZbTo*C+3vg?3gWLOB#a#WQYX~9bkWrLS`4JGbIv0M-F^}^}3LS!&2^3toKb; zpk2$J1s~()ojU1oZ_Yux}UkIw>6U%u1 zFV>UEA5?UUGR-;~xi7RACTHS>md^yqWSP84F;i0QH%K->mrJW!P;PePuGC@iC6T-E zvu5F596V=Z!4^`99qCEQO#&t@1EK6k@wX9f9j$43OCEkU z&6|xR3hs6kSgz1NYY;jpQ<^8{6{*38eFJa39O$4jKC95VEPZkkpEnR~{OmCMR{3)> zG8J9srT>9Ir-6A|#;DQ7&%%#s&zf#+R6#L|BHH#2&;q7NDk`Yc&J2^J8(<5U7R|o5 zU=nrvkTrDwouXNtH%vXqQ~Am!vBYFfb|4{n6|@;ss<9b7&{}T67Q%ubjZocr#k}A^ zu=L?F2tq4gq2Gb%y3rZSVz7fKgns+1D`Ai3k2@y2Y9?3%lW6hM15GPWBbi;0*8f~i zCIqP5OtWv*Sb~X6BULHKT_K%!V~)+xn0TEx*gmA}Exm711GTI-`#yx@?pZ$@leuU2 zdvkM@e%d5t{JSW{?v!WK2H{@&-t(5CInoe%&A=U~!$WS;4D_u1`sHG({b&%|G%$^Upr_-?&t*?cHCJ|QFH{XyUJ zF!@vGn4f@V%ML~k8fldopEF#7*2Z&p`?JIH%4)%4E(lnu!W;U+F^?ZDQl?GxjoQzZKHk#qB zr=Nex&Z%HHxZ3aVx{qz)UoZI8AQai>u>8%)h5wn=?kDueC6-$=^58~RCFbrJ!#KJx zAukQD^;*X2>x8|+D0|iV!Yqr?czsu0uWDiT&7{HH8M*o=&fB{&9vw<7G_V&4A@0+K zk;qk8nsLtupbR%(lj%*&S8OEs<0}o7U*ngXYXvxQ(5|dN`AdUFKiaC>q3>r6qc%|V zX``^R;Z^>#l^3hW&CbVo)8M6BiXD&m`A_)#ZU|z}A{dA?>@t^`&z4f0| zwv7HgB`RNHMGKUn1Kb!b6QIkKa<{H;4O145Fa?lM z30MX!bWGx>H`*g>&1K9g;lFFbg)#M*BH2z=yuYcGkeseEsGgq~EaR~~Z$SB?r>$L9 z-G;bqI9^!o@cZR6Y)t5W2OmzOUP82NP)DTFSuc5pRLJ1QX04W6uYbPnLkJF0oA&?w zlVANlHei@lYTojTx{Xr9g=#cPruUX-9MnvfEE<)y1yFDDDZf}fulEafiW5KS%@V5v zF|};m56Q5q1k8r&&L|gHwe>wNmFc(DgCXx#_?1mg|5o$=KyXg*;lB^eUW=TT#&dW} z!(LP{v6r=eicRy;css0`?`-S;R%!EV7ZvQ;^kX@?lB(@N%*jn=3xB}erJG%3)6$2C z{5WA!C@4&@v%hi5_p$?%<1rf4d>n4;+;ip%+N#;bEuJSH^muk3R>C(b79h#~NV+u34EJL<%oB#{${&7cdl$8muwHOF!#s$Oxe`v0@*$)1knt2ePpdu&`9#w|br#nvQI#d7T`_uiRsb4ICbHP%zC8 zQXF=@)H7zIJM?5o7JpVTr(tIgA_Jl`DX<4b)=PKW< z=2h3U6nVU5fqFlqDy@*nnnpz9MkPS)1|na^bce~R^atce7Z!Et;xT50XGH8Yn7WHt zb~NDDiy4Uh=FTtGyO#e;Yy9IS5yGBf1cG#6v_P}`U>5-lLW5uqi*|s22di)1apB^hmy_i|%FSS7%g~#fnXuH%K$@gwJ={<}06^0dsW+;vU;>Lu?Zq?6{1N+q|ts&6D#f z1DZNk?N^yw541anrOO%l@z}RFKG&jd1-naXNrgx3TY_8U=UXWzCL0LGk(|AAEi{`= zNbmz+IkmvRc_X{z+i5!+EH-a~ueC(e>4gWi}`~Q5x!Z&?K9AXWV#MlpjCLtqH zES3o%h2W`D>t`eSfW6C`onAA?ImpG@RhcL&H_q}grL_wTpi>9Gc7YDOy@tVmlnuM) zioX=1i`Gkkz4{&3m6#qf=f5wSnm^D1k^@8$9hxiKLD5!Ytlg=5>8ebrp*k}*Qm-$g zC4u}zRoN~Dx#IbKC2IHI37oyEugnemK7zF6`(xDH5fnM;rgARj&-bMk6)WvYooFG$41-(+h3g8@ueo~XkS$QeBZ1pQbl;CJuYW@%Ac%n2ubf|gAV5au&Hj5D z5CjAepAogaDlK6+L|%w^7xi$O2>JV=pfIzXSU@>Hv2by-i71luGMY<`x)*7et>j2G zoLNFt4{%#&J z!+kGoMn+z?Xv4@V{IocaTN;j|>f3u098?gUB}a#f%z~>_8EuH11$Mz#q*`3uz2ya( z0(=H+LVrkXfJ{yrM-Nb%|F2bZdy%Wv^7BIjrtv#=a~oBbuC)O;0_1b1h%O2JZ-fXO z@o=ya(d4x!B6A*)k*v_=SMKKZN`7dXnwjFnR(~%qf4q^V@-OoB&71tAjs~$rk2S&h z^%et_CKN`HI@!-zwGE8YRq4399FRW>_h6}Hgapci;)xgAYVF%SR|MHB;wHE|S&~zIRQLVW1cSk%APEV8TnU_u zjoc$?O2#j8y;+|C&B>p_Q{^uxl+DpYf3Fjdj~D<_2>?XDVX^vDE&-knOnbsVf20g^ zVR1%sCW|p*aAI`)Tt>%06xVHnV*$;nsM^%~5@UAx7y;iehymNdVP||y#2owI#%=lI z?=Mij8LGiyUub{P=i86_ud*P6hBX_0uakO{ zBMVfltch_o9%DG?pN%Jk_ioKI3ggscT^G)aV`#sPjnk{C96 zV8@8os{2MAeO9EM_nx>NLlK0jGAPzKnN1_`fGw4C9x+Acr@hrtN>%YEC&lMJl&oCK z;CqrF5ds#&4MP8g{rBdL?QQq4*zD)KTiw9-)-7l8O0)rKd0+6qLR8Sg{J>*G$KJ<* z{3}lpS+LtE0jf~CCQ&5pv|x_H;-px8r2fPfqW|m@2IE(ycnMhEV~!d!Hh_)h$$Rs2 z@}j4?{h~7q=JO|peSf7M=@%0tBL#UR$wc^VnY=K1Bri0dxj!09M-2$f00Hw;72tJ!h{rdVvANjE=ZS z$yEXZ2E_K<1CsT9dPbH#+dlPC9Fz@@3g3OHczDR@v$BdNe`^%k(DTiZ^adH3585?p z$}R5l3-N=+ci+wWQC>pz+BgYtaS*r`g!t|4`S-*jf?w&g&jy$%96z$#3!f&C8pR(3 z#8(D=?)78!y-Ss*yg52W#`x&|=+Px3(fOyhw=nl_t_01Wvm1js8B7{<>hh*tCg|*m z`ts3^FE!vN2Bn9Vc}q5;$Z!qnRKD**h9uQtnf)B_SS%taaYpY1r5iA1UV z@KO>%j0=awKPWeogMZX_` zKI(V`G33h@C*sP=7Lqppw#1{`G*ENv3lI0b8Rez==v5x0>Qv^TY-T4H9;-Ts|Ljj- zidRxUQ8DjQg|<;>gArpnO)<}}=>DQrECwdy`XTscSLL*|9sWC9ZpIB$Yy7h9>^+oS zl>(+g3^s`$(?z0t(reiV-V$twsH4kLe_L6c#j1@p^N>QTGu7i-?kKnI8~xcTUH>Ij+w?r$NgzPYKQ+dH8oD*wQ(5e zn;gf(!-HIL4u?1Z0%iN5qRJrP0J(ISv0q+MyjyXmu|B))`_1z{L2eRXhK8K4w8kcR z(1?T9bCPSmrL3m^-QAhVPFiGXVs|t?U(d52HJ;4yVI(0mvT%5hlMSvBTNAa1$$t6( zp*+|_O+}m(BJuY27I58nXx0yt!ECV%I{ufSe0g!P>^!Lm0I1^cH>ao((XkQG@MXfU zzC3M>_kreKG>KD=;TX%1`l-@N+lP02+Z0H{A6kyp3wwyMjbQ|UKkeU-)0k_RF%H;j zJH5kZ)^lbv?aB|YK3+{r9x;wX-icfpPy*i%>+jk>`gS5Vi|oa_ZLw82Y-}v(TU_v5 zw%wR?MMy_=XeU2pny$9gKCO5z>}#?8d<-AzZQ7cD;PM>o(T#7j?Pt_qQo(>%&z|^vID<) z{~vOY&6=oRM~ox}fc?e9L_yl2*VoaumPf6H&5iV5ZFp2_cedGvH3Z;0f`MqA)<>DQ%#=MhdrHAW%{1A`+9i1xi+-qw@p@XwhU(> ze}}C)v38nIJ^%*S!!+$VX7K1# zG`|bY2-}o0_+&pmA{F`aJJ6Ugw{ut8#9j7kI$1;yCAe6647NYD_a;? zmi@!#qsL1Mx6hGtfmhy7)g|RRwI*TMM$>BRcsFv&-1d`dy#PU_XPh$3^MQ43q zt)nf=vCHdvL}rAp#hNgRy$=NiA;v*0X_<_GZ|2KHZ|eU2ji}-FY;K^S9AcUJKqaf6 z=`?)d-R@CeB;*=R6eI7_(@fB`gsU_f9#?g>lboPt6;*&wv$=VjT%jv4MzwG;b2%9& zDc5K;tqTMDUg<3g2rO*XC%_T;9*)Ry=^zvk7@~?u*TFS;zvsW*)v&7Rx_rmhd~ha| zGuB}DbiPoCmtq->CsKBEqD-axn99E5xVQyTH8tJPYCoTr_PvQnIl3!v&1oc7kABSu z)@RM{GE9*$=<$yY5)*yj6znH~YV{q}e0u@_>UA(UxBHiBb&tFXYA&Zfy?9u(raDgc zx!w(SgT@IqHdrt2bwGK;YO;b2u1xLPSc-lOB_)*4yGT&$xf(0^Q9#3s3NO01}&L4yLo7DI5JgWM!wGR!)Z}3pl*_rZK3+3a#(t!7Li&Rhu<~8|=)T5Mrd`b6o2; zb$d%|2y!4R3cA4p>)9i!SMdc%UPFZh)?y9ugF)Jur*|Uv{dH9Leyb@(D#E8{FV;mK zPw4v-agh-iB0zqo8CIHzh<>r4A|(pIujBn!oZ!}eosv*lSc0BugkS@&<7T~_*#So1 z)6H~m^>m{i+lBY`5u&e4_D(ycRauq+d5@;bnD%H!AVNx5 zUZ*C}uy!aoBH~*z?DFn+vUE1(rJbDHKoBrlvrq@$;<#EmOP!2mxzRVv^N%2TNicnx@aMpoRTnsPErc{8< z_tidhzti*N$Q#=tB~h)@Zy&|6vyK|lc7>|wwq52%?d*_HP#oCXdgj$|qXKpf=EF@< z1sen*mXyM^Prn|8z8Mf3+gvJM70nXHZs6Gr2Y}*5(c~G%@V~}`7~j5;hseZIx(+CN z-6jjdDAD2+y4%hNtZgsqf~6A2a3vDn#oQ|Rn$dNKRu8{zlNnW;?ybZOEYMBJM( zCEDBJRcOw$5r33C?5_6?JX4%<^#b2#?qB&puzhK9Q+}*FT>tB6yIv^W6W;ABi~DW| zt6cE?6t?^3>dnv_#S5h(To8r7Y0`Y$EtI~C$-cW@;JbhjR`KGJ5&}|@S)GcEzhByL zQf3nDL%gx;%r|0Pj>GdN-thBRn9A?0ve^}SC@aVW?)r`jGKr4gMvf$_RQGL%-XKZ7 zt&d*&9)rM1VzbMrw}X+-pYi6*&bCqVZFNz-5K~Rj34#Jkd$z?vQxsc6a|M5`@!pd9OL76oxm|06WUatTCgCvc0K;;>UVjNke!?BD#>Gy6-qK|~!lsvfPREeRal*_+$xWr;cpBuU~j$*uxtC>d#Uwsvk}5nT@p? zd@$|(6;{TI!~5AFI@ea(m5j2c;Y{I<#=NJH;071)E0vL+d=!cjI?3_;c{tXANiQ9u zo5Z0YDhq%qrH_?Q=9a-IUs8MgECTHUMsiG2K!Ly9>oI53#bS3 z+aD!O+z5}1?N4YjjDrJ2<+`46%VzeLb_*F~naH6)pGl1oFOmiC#bG zC8gZ9x2Aw5=zVN-zZsZTDk^C#HXI!}2t@1MQ-sxB()ebB31cW$V8du|(rk0a+1kiT zR9T@gIoS{7FILr6TmCe+3jUk9EPy78K>604!?1?EWh*ly1@;)JqU=$#dNIb{*>JxK z(bV)C#6Nf&mF`-6kiRay>1sbw4 zix@})u_QOh<=XOhZ%WEXwOo}(79#lcz4{4|CF%Z738rD^mU{i!t=r2`(&Ct__ujK^ zg>O3<^TP?Wg>>Zp=al@%+3dO-Orlc%GP& zjI)*n^YA#CU}_$IjJaBRxN=*mGJGhU8DwiL@mzx*wHZCo>CM>9ox8nwMLt(!%__kH zk_GYnv6oaMAJ zjTEoZC(Ap#?X3dG27zU3Yfkj#<$XY>q8{6FgSqr_zb=Ayl|}z)QVB0(I_aKUYaK6X z7~nUX-gfhM(9!$Rou$dTFa6?z-X9OnZ4B4ptH-v0qUHZAQA>@Dff9m=>5>Q;l3XRS zdoWU3PIsB*Q&^}w>-J_|G{1wnU%v8nIkyBIG=5*qR+Oq6$yJClGR}&{wDt>5q=?! zIiw)pRew0ij=$pkO84QcNg33)ns_8ANfRg3?3RsvgB;AP1q%Y(@Oe(35@3C)$$9*j30-Wp+`%AJ zKfk0JZF%$<9d{P?Rih<$X~t(wg2PP87zAGSX#B`MHJ+dXh@qQCMf&LK zg4Y5p)a=Ot(F;P4G z#f28jpuXGq=6xrPyiVHG?cLqw;llWw_UN+>Sb1Hjhld0Z{$(F?8Y!ZVg@Av3oq9}6 zEF63-N+Svu8Jk#&lw&kS0BA@<3{z+7W}#Olu%`hI#frr{qFI-F_rHXcx{=*Ys2NfcChGz4Ddl5~4G5a;c7bUAdq%qTi-oqtC;_zyvPL z&dy9zslFoL`DSxNa>U~7&t?vjKC`-SEe0ZnRv8P{b+r?Ecyc-HEB)0$)OVR z8pWjfUpUoMpD(5`Q;^K-c%Sz6)>iMzmX1FTrLgvu>QZSquVKKUt)Y>Wka0H9?nMSD z81A4O40);Y&Rzb3@cF9cD_HM)Cq+p}IfKm_R#0Zn_ghz5o}Slm{nEX1_i7)dDV z#Z|3y(CEJo_r39D%}=ye+sfoz&y1t{9RM@d-JRDeW<4yrLA{C#)IB_I6shjg zJ)aI%A8%=?ZYHx}wTlOUsDy;`Q|ndP$C}%TK{j~_JlJi-VEfdfzX5d)AW7?%{1E?J zkTcaqw$Ku?&Y9LjTS0;ZG{9Nz=3mb&H=O+>btb(Pp>j;5CR)-lRVxt^Yy8WJ#3h?X)aL9CxC#PnG(xLlTw z7*S>5F9=>3i5#|ulh430tP>iQx9RM_!HoIXhYuKVtB7YkrC;55+56tfr1j}FT8y_Z z`%-~F`rHr{ss{F(A4~kJK0Tee)C7yFAo60!V$*1MDMP+XEh-0lsy;vlc@#6{jcRP` zv9!%2t1u*)_;%*z z3Tje`)4A}A?^FHZ+->-i=F7nAdW9G;qF=CyOkT)TN%BLAWn1^E@55Pz-NQr;yU(vg`;<8O~LMp`Kc0Gfv!l zdwcH|;5m{V_nl{1ayI1C_1yT%%8H3#T&Q%EyC9D8Ydo|;^$_?c8fB5Q>$ak-AB%0a zi{h_Zv_w(-03IBiY>Ew$-;sr~(GZ;hImq9Z-k@Q$^kr&y4!Ai|r8g}}kUH_ZP21Ib z|0&0ruI%gB0=}zW;d=||R632qsivfPGwo$UK4vFTbon<%s@;H%Yx8R!xo$^Vq!J!7 z|0Kz@{CqtNyV`09C4T);cx``7hjy5WzK$0cLOPPFRq=x*d{XBWf{6ia(Jb{pSH*J% zrtA~N0V!$((SZW92-$RFVi0V?0A6<)2r6U@4bwDLR2ETDCMOZ)JlFX_;pc0;7kP^?tQJoNVSNT*vlIaZ1t9YajRHhR%Q%$QK{jjf4*4OxKT>rGXzgv zJ6OVdo;5oHWY8*^nD^w`eVvr*p})^OWW{v!nwwxY_N%j##=|D7p^28Ha>Lt_bBoc~ zs*}zV(Ol2P<6)`L_kJ!qI$132%r2gVGh$H4Y0bg{R7i-MQ!F>pG!2c?tC52`pm4tD zroak*clONOltzS~TN@ISDu#x>`lwCktYl@D3h{ApJQOO?s)pcfft;wtK~T42_vau? zU}AmP;mtDl1kc|hW~TO9_qf#^8QDOeqILGOGoiFLetbENU5;Uh)-Mj4ct@<==c!ff zgX6ZMe7VN!#?+&jYF+1Bay^gGLs{nGzglabB-Lco{Cq8&kF+$@5SkGe>E|mtBZIyg zrR+7AXlj0*R9)P+L?}A@yY#I!MJ0aPY5}k~18Zasbr{(l?*GIX!*al-;je1@D8n<=$f+^na!;rk!D>4{Hj+CRtkG7{wf!&`a&>u&Hb z`oT@dH~$h$Hv|jd+)N}?MHSCz#?-XHM0tf#FDbQ(kJ%ba06q$M%AFj5O^YC`^O5ht zwQwi-)Ny4a5Z+0%Lq52>bYLLuv_G0reb=>ODD9xy2;O<*a1wsdSLTPu9sYP+t=kng zp;S=gah}NMN8iJrQz!ti?fE1k^tjYeKC*#J1;1c_zmUv`hnjE8q$rgRH_fY0yLj@~_hRs0AWGg@xgqqN z+&4n6V^F#(IvUV%-QCS+pyUf24ny*MvGOK1Qt3pH_Dfh8y~K$-IRl~c zaYzk(I@wqzDOk0WM(nf>|d#F-eA3s-Kq!I#vXOrzo+PU@0!D)*5((MPABj1;xA}&g`ze*=z zON{;_$a;1^cbeSFmCvRpHv zotBU;Y8r{7{QC8@RdU3UdB$attrZ<67Q70 z`}l6BEk}$6y5W2nBSG(NJW@ZeI-lhfhh?w3upLGo<9%He?s0UpNJivx{}?Usbmxu; z7#xl4Ds8o|o{W?6w;n&t-i|(EnchTYHPwIL7-wHP`+Widfc=%*g^owxry1Dlqt;^k zu|!Qk#}0&z7&o(Yfe+at;&Ide z%ad74g*JVNkN;b1KCK;k-xEjMzf-de`mJYQJ$m9dl1}TEH|G~p=*alDCUdeLb|g-R z0>{&~VBcFW@zVJT1#h$y5X1ZahRZ(-W1#NvK5ZCb6HBYsIDQVYSL*e0sS~QjjND|I z509e_!BU$q6c!!!h#pU;j)Fv1=}lLPe6H`5qr6z@gtolCaLs1XcfQc`l-7Um!dKtB zv2gF__Zr!t$5@J`j#}z7VX5B7{iqq+#Z`Qg2E(0!3*^%p?nx+CI%qKT)wwGlAHPfY z)bZAJgq*zN#B!5Lzl^f^df4Wn6T9H#nP$1pHz9}p;jV+QI2evj1Uodo=tJ(!@d$0} zI?q4M(k1<5HjB0E74HjuTKFm+xlg|2lr11Hrikq55D@4{oYA45%70;BNIT)^;OpX` z9@@`F4t~=b%!v*<`!(8jGua@uoS^aZp|pzw?r3pFT(}F}c?e?)Dgt;U(>hG? zHf`Y>^7?TGT6-rm?y5P%sX8huEi_%;mA4LeYuPyOFo-Jj_Z3m}lx8FqmNWG9E1fe+ zHp}uTPHH|brLK=ALne?A%pJag#iS-`Z@lK|KMP2YX5|R1o#_^adEJ8G3jl^MfKhVN zU+jdq0yKcM5~VQS$Y>M)>T4<^)7(l9$D}FW)QsXgn9f1jft8w}4~nK+Mq`$-tKly@ zm-<(%tJS(IUiZb?Za>5#Gu4_ZMeAmQ5lu(JG7~T<7w2VnhomWX4@1LP<wHx^A3mkN$6-XUf^bQ!D{JNmzKr*%9H7w`_((9il!fkq${6GbP#~-Nn7s3 z;nXyN2B9J&%jgfVMRJlGY4On?OVytyZ^cH(Fz1dzNB|%v_deMWQ<#OjhU>yaOMW!< zNUFMs^=s|MhS|4*JQ~*6Bd+G=w1v;{BTJ%}b49tKZgpQcXhlYO9oduyM+R%813I=% zR#>0o65A$P&fz$V;J)&-)u zgHZ7McrgW*=rb+VOqBhkvVCK$mQH9DDxo@-H6=GAd{MTjSAMr$m-5l~teKl)0@aP5 zV)bl-Ib(~nRbo7^{pQY|XXW^@q@sBPJ?ljt^yRegW5+9>tKELJ!O^>P<$B4pyS;_N z=3Y{$B!TJ9pQeU|T&p2eD2sdPf^&N7viU7b^$)fmr}6+$otwe>r6gUvh{?&h8A}uL z_VlGLT2}y1GlhY{(%zyI23MWCbY&kR@7OryDErAq%(e!gD@<+!Z9g zoqxjQQU0X4&Fp!V`7|#Z*1c#uXLg8cKR)2{cpbM(dmsy7w@Id_2#~(k&j110jV)|s z=*5ddEBjusdZ8JwH5q6Ff}f7YUP*N`R?7zgFB}}Rq%zq0-fH{0Oy3(c0wKu~e!{Sj zhvt|sJLmR$S4YA)l)L`Fb-i|sw7S|_>DO0+OSCq>#I)&5S^~glCe1RebE+j>vg(bB zg%-fNsQz8Qo$uX2;%|6FZ8S*{_V(RamdcDe5g#pTSb(UGRraWjW$4kWQ04m1x6{?h zKTW4GBk$CN1q4zxt4l>+Q3}inhmEd8Vx7M#{B?L};AGz4M9?FT?pZ%`!Kjjq$Z2*V zgpOe4%sGr5ry08yqAjl_Ht7QRnb=>6e)#k&r664n#u? zdJTwLq?IR_rfmrWo#C#aydDBeORW6}F|IgJ@g8mndt!^jqhlzT?UEkx~Ec1s#6*YJK~OAZ|b`stF?v5PAhCACEtCxSP?7 z{*iUcBfyGrOAZ>|8k~vBT<_Bh$?5{P1`meUpgWRx)Q@}Ke8{b#tIcK_O<5se|BWx? zLXjYn8vyTLFeL!HrlP2b4VTTubL3$vRh=kI{VHhW>Bh>np~sUiL6hls^x0io!Ig}&~zq?b6bx}SvBqM9BR>?lq++4JEpQS7zh|5i4#zWrltzSkT!EbtY zVw3Ur2=j2=A}F2^^wtnX& zeAw#xQYy=qT+b3AZ8XO~I~ooT1o>X&b9Dp1{0vu|)(pDSqCQ23n!*p){5Tt}Ut)C~ zQ$$43aPV&V!PA~}UPdfVV2n7*$MPyOl`_UMO0vDyQ+XW{lck=I>D2UsuG$SktyZHN z1E1~EI7<7Ft{o-YJnxVbRq4u!y_at?ifui{R#dk4rtbvs;Dw_6M6O}T@g;{1CUt({ z&VM>r;{=D42rjjBy*h81UZ!wpx>xEuCtD)geJJXB0kg2rQpcsHkxwnO1n7zRP-v{u6ctX0 zU7zg3q9w^_;*eTfd6AG_ z+i!P1=SC+(@BfpL6Q>JPDw#j$EiM0xp8Wq-aQ=UFLOdURiatn+fP~Hj-!DmW068Ct z#P7o|N_~m`v*qR#HPSJop``oU zL6mG1YT@?NUFMlN`j016x*CFJ$49bH{`$fYk6<+rWfIU7`B%e$$AABQYUd$i0qzMZ ze96UG1{2ewx!*>^of=Uo2_`4vwi?sD2k#nf0(KlKfQs-15eXLnQ~#-a5r!R$4Hyi; z?u0ALbAJ+9uw_MdUXlj%V z3=PnLO+P@P4`(sLh{{ioQbk?GxH1#?;C>oEr(_%n>~m zk?hdDq81r~lbxN@`L)Ix>BcmbBy%^}d)$GF=)79T4`5Ti)xUy!wiQcN9Xwiu!|Kn> zzsXr5Q+F6BXXT!%AAbhj~W^Zy!j?7L5&_BF~Dc%b3ANI-z+9uOrLKjra}d7t+h%Ld#s69#;0CLjcb)H=hlfV-(=I(WNJ zRNnjti2*?S0A5?0$jk8^0skJnfIh^%YOXI8Nlt%iidVikZ=ItOmQC(58$?iKQqxLP zN@o1`Js?%mU|(zz|1#zeTu=Y<`B4-3#;GYd|Kz5Agl-D31RhgK!WGc(AF20>5>{HVLnJ}sPwr3aT^Twc_n1kSi` z(Pc=1c%@%4a>!=m;v&4yW?#Eodtu-5L?qIFPUa?zE${4)0_MRmR8V84ZbXS^^kDzb zc@e2{WI)2&q#neJ(7^y0_tNV0Q_)_8o9|w*Nc(*!6>P56_JyB@s_MHp#N0oJpLRZw z(9lTouil5f@;a7+PU5UhMdDH8qBlBEpBi*7R2lEdr6&eiIY`4um!62w5D?^kc_EPV zq&_TrybBv9%~XOH7ZT+=WQOE8lrr{1Wki9XnG+Ce<9&EW^Oe_nw7`O1dY1R)E7;wg zK+NO!)_QPP{c72(Ex}c+C?OS-s2^AjNs|&1_oiv@%fcU**oC*;2 zv$YU;$~=?7Oy?EEg=fT!{L68~FAefY!x4i_XtWX0B!vv^GM~o$k?5l-QpAX5X|a#_ zr?Sp}F2hy!`*Uh}IOBF%9KK-Gu-umFQ`8SK395{A@$m}0j&YN(<%T+D4x-=QxqjiRK=jvYXpC zUCwBwtB}2LHrV=wxz$2ySvd9S=C}YA*6{A4Df|vsqzVOa)qpN3a4bG9B5DAytL@SM zrb6e7X|~!>Rhbdxss3(dX*u7iqU`%wYGI9hOp*vXH8sVfP9q*T`5{!CmJ5&p1%aw$ z{&x-fv7;d!%;$pi<$)ZvKQ3V`v5$i)LdI&Sj1}tats>>R!&c^4>S*@;Z2^A;U&F)c zal_Hl8C+bdhvcu1ZMb8Z;e4{x~vw>9zMn;d>HP+}WzU;XQb(ned0CcS-f`z)l<)z(8~@J7=!D5QWL$K z-rGG#IbHx58d|87m}ytJT56LqSEkWky!e+#0ac2D#nfMXG99+TRqgzmR@M>h;xzG0 z_)lgiIYuoBYGE@-(EYX?fBCU*l&a-wg=+aK9ro1p`KhfSB4ye8YI(J7T`2~~^SJE@ z<~q$Ak<5Z4R;pV!aNxRn6?k{x+IL!@5sHuQlJ-Y?@&xaq*)^Yc%GP$IO1`vL}9;!@Gc1XBG2-{1*AiWMdFmp(;B!mWZPGfp_c9=ZE%eUPl|jgE2hh+v;l$<*iJ!R7al0 zuM23ECiLn*X;|w1>$dhJqgnR}m^i?|$Ny(y`ZL27&5Ubim8{g>0<{;;NdHSoOxZO1 zZ1X)nuH3*|(b)X_TbE>${qXINrN_JqN{gtN`|#i8O^&IsJc)IG+ZW=-s~k<}n(ZYt zYN}7;8O=()X8Qs#742%X<=e=i(oLy?9bGuh0l;;6bzajGrpyXmaNQ!ei!B^CciR_sV)%s1Y5058cop-z$J2N*bg!X{jpSrU2?>b&xdwZa7 z(2DqSJg!su#w##>!1k+_0kmg|&FH`Ys;tBA6aqj@9z?>~ofR}snj`Z+rRiL|n@s<{ zQ)XkEAK?|(ENyH2ixGLZd1JFt^fYhYjX%e+F!#{iK6`|!cpoo2$wkD*=BPW<&G?H@ z`)AVth24=&xn(q6Qe|T`I)?nL$>$$#R5prOK4khm^0S%+^b2Xxvr=#xydm4-Mr!tt z?UzMk^JczxXXuV}VUYodT6(t53PcR49Jc{m-svu#N|sbL9t@6!lokia&9MX%|Iu!sdl}8Y zj~V^>Z2Nb8GtRA&2+O{|Uv{R1#Sa3O&UL1d@OCfXVW%i`Tr)`OUz`{JtNy&>k6}qs zjSv%?-r?wIV%d8<;Cz1~ICaX$Ck}p z2r?>s^mFnL7=#+E&<4YU7b546p;M^ixP;&+p`u$sm%MMgda0NnVw*o9PYHs74VU1mLyO=o96V_C&X{iw2C-SloZ zy*Ysm_I~7kt>f=e1{mu5&)tEQT=YrPI6$tEYc-@RK{UAUAoH^&B+ z>_*dE$m9o^F((DRES~%yJpYsL>8Bo!RF3gr(IEb~$tu~59CT=^jt>w%EfwQYk&=NTFORYWDxcn|fpwD61ngT{PY2u|iVFi2lc z)k~XR){2Cj{3F6IgEowBxL#d^xY~HPR`7!WtRm~4U6%q=f!a~^ClCWqbVSId_-=5}}gSg{!U zX(m8Agy`?T2hkA#sKMw-ifC%sN<7w6Zw}m?Dff5CW*6^VGX%Ll)=7K8mc?IMYCTEr zSR)nd0sz&>^Zx=A_(0`fr@i78xpv>{Xe<7RfsA~o2d=#74IeI|g6xXS+`~kygmHuh znMapvJv(v-BK`67^k}TkW632Kqxbm)&Fr^Q$bGE-aR$AZH<2-aBKVJt8umRaavcm>|?ENgsn$I zRaKRaA}R^4!tZwp3WNdlgZ;9OA$^!6)e6L4hfH3JqxzS^9}`cIKCR~HhLCXR{lch+ z$k*H0^e^bCHcX{Y-9dk>P_Zt?vn*O&Xe>tgW_20vwEfVFclo(meyfp$Vl%;?R$6}b zll8GfXB8j8bcmm=!ci;bLXs;LEwo2x!@xiKgy$#GBhuG&FzU;w!5RCO2@4J^&o5Yq zzQ&G@h`BkQ=8D~O>CRRi+1f_$WPBi); z?(8m7=%)wQntlasGdB{)VZ}w?rP|ZfO#hcCbtD!tu^(j%m_r@vAc!B{gyK%B4zsfk;(hh#)XErYW3u||)z!jS zz%qB1$`JUKM{8Ua(lkK2I2N|OUow6CTV?=y;Q9^qh5!IdPTQpmt_T#05q?QlHs?yU z-rY4G?;nqw=WUFVPoFJaG~m-~5l6Cpab=DhIjmXjvz}z9tihEe==u{04^s>kitbnz z_7*|)UAnF=);C9kptfSG2H*YlpxFAEKyp6>kCGa0TMoA7qqe}shNIm5w|X~qF+v23 zH>og-A5sh(q<;|e!a1BGR(2*tn?~?{oQjX)zRa-YyS$6WEuP` zHC556)1Rm;mpXNEiOS!4V$uAY5O*x$F37Pk>uF*y4a@!R>H=j%1`J38YcvgUJI-$YgZi?)feoS5EeliL_oTvT|&CMYb6C-y1RuHL8OsbIwT|o1j$9ZK@f?h zOS)qPY2Nks&->&3`~JN5e0J_Rb7tmzXU@zllL}7XM1gD)K@!IYtYpiw(;razZnp1t z>GsussPI7G&j@Jh`d7Dj=rkI7=sH*N1kC^W5?j{eeugdeV$J6&>hY`!Ay)#pW8N9un^p{kBb)mP?ArMm?#Xauo zrE3+8g?l<)Q7u?)W+O;-ztQHl;B}PN=)5H6+3jONq*NW;AD30#61bLHc|R7gu3|c@ z6zPPGJsO(lCG0@|ysg!dyI#Q}ufa!sBz`sVJk(nb0!A5<95 z3c9)u!uU^UsJ%-W0-k70cfXe>*w81_pk~Ayjg~xnmq@%aGW_!U)m#Oa;g^+c=Y_gi zdMfy8!q4`gejrc&3@+`_KYGr5FfV=Fwp>qZ#P+0;6E{~B!{e}IV7N!{-c=xE=VUuxf0a0(_U$xolSfp-jW&mCQ4(+Xk022^2ce z6u#d@z{`Y=E#p+rs(lRchDQzIyia=Ow~ z&wNcVjpC;p~;S>fYD<-0yKRV*@(aMsF& zoHW_cGH^H3;Sf`g!6a7AL>2o0bos+H@kAAGTF1`+goym9oCdDSt%6w>A3wM&l)nql z9aB)N`4`0dAfr)jCHTjggYySuxrvhLzJc^8u=e5>SRM1!T$RiK2d-F0x3LHApe0dVI*6X z<$SI_4re(r`K~Ba#S_%I`{irdYK=}NhE6EN#de!4Mv@MnC4vd4C#R&Q(Qe^%qz&#o zDcewtIOS}VeT2O^!x~|!BdT@k4vOs0~j;Q6uWB{iNbE_SXebQ~4M*za^(z7`w zt`T<>swt(Nt=yF_2@kkL(ztpe7qS|hnZt?ScHXtMR=1Zs>=tu1LSIhXYmhzg@bvtx zGn^F`cAIWVEVrFh&^_xz&8VGNfN!q!7N1t+V-Z6e2Yz|4j4T5vSMBH5X>}?q4J_a$ zuz(}8{GjQe!9wB|UlHo^a(<+7ImAHAA>0cy94lkb_>`Pyyw(`e3T7;}EIrW?Ax}Rs z^w+}}BVASDpwe`Z;m)Nne%=QF9jx`KX) zL*G}tzfQpI_~v|zG)bsf(1m{UL_^qfw)d#>Bn7Z#)E5z~5)gifXb^v_B90PUbFaQW zq@S;tn(m3J>bag%ptH4ET0pk}XS3f=C;7136up)2jepm(t}P77GoJgNu6rmZK1yQD z(4bvtx3m0o^qqzaU=3 zEYNRCiewXtq1A+d#+c;08>m0D3_3u-;R39P*a#f)`G|g)U6Q5ax_`yX`N?f#;3@4)zeR;RQb{>NS^0wp0S;q0uWZjNV?#&3&80EDsy82U zj%4V&qLipW1Mee80)w)>Mlb!^ z(PI%@!e&4df*pmcs;tIkiYLsUNVGWkrM%#?E%vj6&M4Nha;B0bi3DZy!r|=t(sh_0 z24nb=t9QEA&^FsR{lJfJej>*c&qKqMghI(cOdin4e)GT`Xkq8Yj8($zG(5yqtHjjQ zR7ev)HbL9Xa;-RyT`L;|>SWN1QDpsSoGZx{D51=4%t}Srksg5uEQ^@a9tk8%`)8Yo z4}1}Qnl$(@171oFB6vs=HGKQ?Z}35e-JP39qRY^&5L>21Qm>|vVb1*_!xM{KEt$-ON;emmbB?m+-waOw+66Ou2mJC%4#8PBt-BC6 znZcq45wE0>btyn~1Z71Ai-eP(X_bmnsJrXCxO7X0T$*FbfI+K1>Z#xD`UxTRja=-Y zjwlY5L3@J8R5h-$0TEV(dFk?pT%2v+knh# z1*{cXFgrE}1_J;aN;^O@Q-X~pCTm5vIxWoWFSyLCv&m9b#XRKbh}B@mA@~~lP-q`^ z*s1EL0FiNgKt{yn5-TUIM_t7>Z`eZHRAUX@XZu3=qtxpZRcBFdA32AB>YTnecd4z{ zlY^1M`;SE=Q9cr+Q3GY(VhA0*GH%kl3QCxy}^e+w#J(? zq^cWCV!{$moZJll@S0f8{y8@+a?of9pF%^ zGjxQ?OCv&*DqVV--clv0^$BIm$px^33p(xlo>PSrn@C(<#13GXbdG5ap-4BBa_5F7 z`n;S4{cL{`mB}c|Cb@$EC89KyQi9o%V5EB3 z2yxVZdg)P_?PR-xvjX|Z@{xfgB8q>YSBuGq1P===2k>swn?#Dc9Mm7_O~CTj%grWw zzKJ0mI8eU3chLa~Dfa+R9+)y?_(ReNU}kb)3KoLrz#}oI3Ka}^WHk85-}CPWr3|kl zflUwBk?kS|U>`XDT{z=Ejs9N(FTW#!&KSLVF7+uiv9_}OI-CNjlXai6 z&-=)3qZI6{fBSpu*>Jl(1uj@LZOpPl(uD)B0lG{&vOUbjByy#nHh?^P49nKVkmUK+ z5nb1!t~YHgBXzBzE3SFflH}u*-`uhVpinB)$*fQ6grDDWsD)dm06xyUlmudVknrq* zpRn+xX$&Pw&O+i&L0em$qmGK1CDx%lv#&F4n2eDjT1l+kAnxCxTD#3?n=#VxE#Kpn zvBROJPdKym!NE?nl9$`A;Aloc5r3!IC>TQ(vg!};h=MkM;H4wP^zmm0IjQ-&KUJF> zuHRJCa29PRcn}E10&fml6qiqFc`OBgq!%yvalRA*uq<9cc4t^l+Ju~3-FKz?Cd|yf z*A}hIaBysyp@*p^1QpZF^WXJ}mKZREo9)K~oF3{b2v0YO*^ow6n>uo#8fPaYY|%m# z@$#$3;Ys?~zYN}^Zz@CN(jb^J5553;m@iiVe=1Yidpg#~#W_N`XqsC!?i^shMp2)d zeb^-8%0fTber-gQrm)=$rSL2YUG}#G{Y;54uGwEAdO#cQ8CU|be3f20Ty2JYZK2otx6T8U2I>f2WWFLgj7zi@nFWcHU<; z*{>6ohH$N$=Y!$?6SovQv2ZGkmC?S4h55l>qkT#X8(4spA>V8h!%*`F_)@dF%4aY4 z#Ddy}qe=czssRREJzKoo6du25=0)WGlU4hg4J22N%8sydGw-XxMd1(fMFu068lNve zO~KKX%D%#QpbpWA@sp46l^LKZP_XOYUn+MEA&7>B+pM6foCTkwl92P%%*K{~s{!}C5NL=w0jNOUj(n~{E1`sgoQrqVF3@jG!&AN;a{KbJIM1% zoeqbQ5ECe#BR5@Mv~QuO&0065+pku*LM0CFhV;wGkF7c5T1J2mAotg)VK38C*N>-Y z$ur7mOI0+59R}4L2BQo1f|#X)0)Jb-dCgPxjAz6ua`o3;D%SOF2KLE#l^s#Y&aa?` zWsf~{wRA?cN1_3wR{$;#s3@;Mb3{6;=+n*tL>gSM)`<$#VFa^pD_BSQ87;(p&bu=` z&*?9`dmr0BY3w7FD2^{Njtp{hzmD(ggPfv7a6x*L?rX}@{=-vTPFz1eg8$G5uEBHf zZkIy!6XnhB-`gEl`kx-&qg?Nf<9WE8hGR{BOi!I|mEi3V_{g5x!hZfBGm-0VFO znY{wI+@}(igKooptYSwuyXmsQ!3a?pPm25xP`kiq^ezrrA_5<~-Y`qWrHHBl4$t#+0tGEr?P|Z@YLK$fUI^mYpECnyL<*Sy z?b?(*@1)S(r_^lB)VQB0JCPp~(;x64O!#Xq7&4{q z;tpTDSRl+6Ur#y{Q@+-W%fIH(KkZIlRSCRe&GsVn-t8}^Tb>Z}=x+GCe4duSg=B}; zIFGnAx{@m2&xnaoIMo^GsqWIj!V6flP?K|{!PkUDy<5(vUk#ch5F0kEl*zInO;tta zwXmi98kVe(xR&C!QC%2IUfOYxPkmeMb_(WhwoJs)NGW1$@@5=-?JgW{=dJDh! z+rJEUbmXKvNr>++Ud|%LMEl2k`nI{aT&&Ybhpc?CxGMP>ytgHuj0c4{-oZTnCh{X%kX&N;{Wp~R~^TP;CWJE zh%p7t4t@~zk1eFqx!+UTt%-3%5s}m)!)kA&y5e&BLr_6$RZaMHOFS*!00@-d;qTdt zvN?NX(`mKpwWR^8^hSJL88Gs&K@1DeNQ+)?^^jRH)(oxsKIv;cjrFsyX&FzVqfrma zP6yD)_UXqxYaJaei;Dto9fu7_BBjs?&#d!Y*t5D zTLhj#Ocero=$cvz*J{!idQ``x-Qj3v9Pzq5| zQ9l~oe5idnn?{=X@S>}zZrmY5beMBxpdT0s)>%+DH|W6Bpr1>-yhPl;Y5Eo?M5z*E(r@JEBf+!_}~a$QgQ#+Vo`|y zNR%%(K0F!a(+EGVj{fjF7RzeK-tt%>fo~M_*5CE2>&2lF?~(4^Rj1@uUU3Ey%(L2_ zL!F@EZ@cnm}h7C_Bf~K$E_Pw6m`bnbuB4XPzdW$Qxr8Bo0kQ#yM4S2TVhiXgbz^9p|-B3iAjOTdcfnzgml0 zYyZAg0W>zc4|1IkD6EKN!NhvXCwX)1X0fOF1AeY7sCn)iQN4Jc|I;lOz4Hk^6M7IBh1X~y3RbrO$9=)dFDj({ZOqVXgh>5?{L-_EP*!&1W@ufo! zi3Yf`5v*Zk`uzqZ>hI@A<#R#>MIP%B#{a{@8`Ll{=H~qq?IORB{PU-@r83(Fl6>?> z1kxuJ{{Ep*I%TFr+NXAsh=B5wKErl+{Fbj9#r?kjnX^)cxkw|?R?Kt|C|Nb$He-zF;1+{WR##?n9(`tY zO%N5G%juu!27n+Cm4Eb{(<%t7^FYfk)gmqS{(=jseY5`vdlJoK#LF)+K6SwUqWv#g z{P$1#lL&ncK?-rF%xdIiYh!u~{O(m$%N(MHDK@mtsQ8%fnxcspc zNKQTWlB`~{x0emDIifsa462wK794z3tQh3RxfMJ$Kh}gvFsHJF4YlDp;t~{Lub1~{ zA$0U;#d4a8?9|uQW~=4=JrPPkH0K}onK!HgGNOI2-^_kUSFD*o%DV5(wm2n{Y)0?6 zy^%a!B{FMA)4=sz1>R=HzwgJNO^#1C1O`wzRq2@*bAKel7 z{T5tuc(1`9zbL+5;@W=rTTBocC5@D)ApbXp)D&oS`HPE$v-pxp>u4-+YV;|S4@@F^ z6O=MOJ0VvvvQaDJ>Cf~4)WH;LIk!{VKolOPU&w*eGVd_^ zkGR)tvyomdal_Dc8WAU1{o?P_Qe|vM6_J6g2~9vj})FD$3oKpl{#2!B_P;{@3ONStD95NvQAHWaVG}&@hI;7x$ndt!j1iHQbD%G9J16P;7RdMk44b1&?oY%%yeO z(U;1Dne~r+Ca<>2IqAfto?nk>1h~D5N})Z#+ZL{m0IY*M;F5qov6AnCl~D-9?)V&L z-3Oo*) zaq!{?>6sWgqV`I7*EflwXJJD#E^2+M3ypV87{JgO0d1w%RfA`vtf? zdUBRW;rO#aSD3jt39@8m)(B>ye6`!Qi2J#%roKuzX{VUk4oS|BOz)S0u*UPKDo9sD@s; zgeR(OhmI~ZKTa=H`!Wi4-Cr^VUgy7);yMF}Zp7(Wa|vZsUI~lkbMPfxrp-CieKTH8 z6(D@yZLuRFkvr-dKw_lfCD`W17epeAYdm$Eyt`HnnsEjXq<_Z z+XB9zALQ{>uylz|rC(k^m)4SR_-)6GMz+FX2ocff$9zJH%^%qo)k?jBN5CBRjs9!HqU#*X!(M+~t(w zgGboD*TGNokKg?StCXM{*J&uQ<-n|%6bfq3+Ze)iForE6MKz1On@1Xo>*_`wD}_ym z9^rgbi8D|U;3=#9#2u6z73zPZ!s5w94fT+J49pHZvcVMoU*so$Vbxs>(Eb01P|*L0 cCEe4%zP6+GI!4h0e**wgRn$_blCymGKR?bSssI20 literal 0 HcmV?d00001 From 834861ae0852eb736c1016b806141da78f308b21 Mon Sep 17 00:00:00 2001 From: Dunkan <70066170+dcdunkan@users.noreply.github.com> Date: Thu, 28 Jul 2022 04:59:54 +0530 Subject: [PATCH 3/3] fix(telegram): align image at center --- telegram/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/telegram/README.md b/telegram/README.md index 20075cb..497d2a7 100644 --- a/telegram/README.md +++ b/telegram/README.md @@ -21,7 +21,11 @@ A simple Telegram bot built with [grammY](https://grammy.dev). **Production Deployment** card at your project dashboard page. 5. Now send the bot a `/start` or `/ping` command. -demo of Telegram Bot Command +
+ +![preview](https://raw.githubusercontent.com/dcdunkan/deploy_examples/main/telegram/preview.png) + +
## Run Locally