From b578ea5951c5e1ed474576dd9eeb770124797565 Mon Sep 17 00:00:00 2001 From: Alex Galey Date: Tue, 9 Dec 2025 09:27:01 +0100 Subject: [PATCH] Fireflies app reached beta : utilities to ingest one or many meetings - No production webhook without headers forwarding (#16410) # Fireflies Automatically (with cli util : webhook not working and no cron added) captures meeting notes with AI-generated summaries and insights from Fireflies.ai into your Twenty CRM. ## Current Status - Doesn't work with Fireflies webhook yet due to missing headers forwarding in twenty serverless func - Meeting ingestion utility script are available for individual meeting insertion and historical meetings with filters with yarn meeting:all - You have to push the secrets as application.config.ts values (despite env variables in .env in docker compose or container I couldn't push the secrets with the cli) ## Current Platform Limitation (Headers) - Twenty serverless route triggers currently do **not forward HTTP headers** to functions. Fireflies signatures sent in headers are stripped, so header-based verification does not work in production. - Workaround: the provided test script also includes the signature inside the payload; the handler falls back to that payload signature. Use this only for testing until header forwarding is supported. ## Utilities for meeting insertion (workarounds) - Ingest a specific Fireflies meeting into Twenty: `yarn meeting:ingest ` or `MEETING_ID=... yarn meeting:ingest` - Fetch all/historical Fireflies meetings into Twenty: `yarn meeting:all [--from 2024-01-01] [--to 2024-02-01] [--organizer a@x.com] [--participant b@x.com] [--channel ] [--mine] [--dry-run]` - Filters (combine as needed): - `--from` / `--to`: ISO or date string range filter - `--organizer` / `--participant`: comma-separated emails - `--channel`: Fireflies channel id - `--mine`: only meetings for the current Fireflies user - Controls: - `--dry-run`: list and transform without writing to Twenty - `--page-size`: pagination size (default 50) - `--max-records`: stop after N transcripts (default 500) I am closing previous #16378 as this one includes it all --- .../community/fireflies/.env.example | 2 +- .../community/fireflies/.gitignore | 1 + .../fireflies/.yarn/install-state.gz | Bin 375675 -> 0 bytes .../community/fireflies/CHANGELOG.md | 71 + .../twenty-apps/community/fireflies/README.md | 90 +- .../community/fireflies/application.config.ts | 21 +- .../community/fireflies/package.json | 11 +- .../community/fireflies/project.json | 8 +- .../fireflies/scripts/add-meeting-fields.ts | 171 +- .../fireflies/scripts/debug-meeting.ts | 81 + .../fireflies/scripts/delete-meeting.ts | 59 + .../fireflies/scripts/fetch-all-meetings.ts | 222 +++ .../fireflies/scripts/ingest-meeting.ts | 93 + .../fireflies/scripts/test-webhook.ts | 43 +- .../src/fireflies-api-client.ts | 426 ----- .../receive-fireflies-notes/src/formatters.ts | 227 --- .../receive-fireflies-notes/src/index.ts | 5 +- .../receive-fireflies-notes/src/logger.ts | 95 -- .../receive-fireflies-notes/src/types.ts | 130 -- .../src/__tests__/fireflies-webhook.spec.ts | 48 +- .../src/__tests__/historical-importer.spec.ts | 84 + .../fireflies/src/__tests__/setup.ts | 1 + .../__tests__/webhook-handler-logging.spec.ts | 40 + .../src/actions/receive-fireflies-notes.ts | 11 - .../fireflies/src/fireflies-api-client.ts | 823 +++++++++ .../community/fireflies/src/formatters.ts | 259 +++ .../fireflies/src/historical-importer.ts | 161 ++ .../community/fireflies/src/index.ts | 31 + .../community/fireflies/src/logger.ts | 142 ++ .../community/fireflies/src/objects/index.ts | 3 + .../fireflies/src/objects/meeting.ts | 4 +- .../src/receive-fireflies-notes.ts | 7 +- .../src/twenty-crm-service.ts | 143 +- .../community/fireflies/src/types.ts | 235 +++ .../receive-fireflies-notes => }/src/utils.ts | 15 +- .../src/webhook-handler.ts | 180 +- .../src/webhook-validator.ts | 0 .../twenty-apps/community/fireflies/yarn.lock | 1503 ++++++++++++++++- 38 files changed, 4266 insertions(+), 1180 deletions(-) create mode 100644 packages/twenty-apps/community/fireflies/.gitignore delete mode 100644 packages/twenty-apps/community/fireflies/.yarn/install-state.gz create mode 100644 packages/twenty-apps/community/fireflies/scripts/debug-meeting.ts create mode 100644 packages/twenty-apps/community/fireflies/scripts/delete-meeting.ts create mode 100644 packages/twenty-apps/community/fireflies/scripts/fetch-all-meetings.ts create mode 100644 packages/twenty-apps/community/fireflies/scripts/ingest-meeting.ts delete mode 100644 packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/fireflies-api-client.ts delete mode 100644 packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/formatters.ts delete mode 100644 packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/logger.ts delete mode 100644 packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/types.ts create mode 100644 packages/twenty-apps/community/fireflies/src/__tests__/historical-importer.spec.ts create mode 100644 packages/twenty-apps/community/fireflies/src/__tests__/webhook-handler-logging.spec.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/actions/receive-fireflies-notes.ts create mode 100644 packages/twenty-apps/community/fireflies/src/fireflies-api-client.ts create mode 100644 packages/twenty-apps/community/fireflies/src/formatters.ts create mode 100644 packages/twenty-apps/community/fireflies/src/historical-importer.ts create mode 100644 packages/twenty-apps/community/fireflies/src/index.ts create mode 100644 packages/twenty-apps/community/fireflies/src/logger.ts create mode 100644 packages/twenty-apps/community/fireflies/src/objects/index.ts rename packages/twenty-apps/community/fireflies/{serverlessFunctions/receive-fireflies-notes => }/src/receive-fireflies-notes.ts (82%) rename packages/twenty-apps/community/fireflies/{serverlessFunctions/receive-fireflies-notes => }/src/twenty-crm-service.ts (81%) create mode 100644 packages/twenty-apps/community/fireflies/src/types.ts rename packages/twenty-apps/community/fireflies/{serverlessFunctions/receive-fireflies-notes => }/src/utils.ts (71%) rename packages/twenty-apps/community/fireflies/{serverlessFunctions/receive-fireflies-notes => }/src/webhook-handler.ts (60%) rename packages/twenty-apps/community/fireflies/{serverlessFunctions/receive-fireflies-notes => }/src/webhook-validator.ts (100%) diff --git a/packages/twenty-apps/community/fireflies/.env.example b/packages/twenty-apps/community/fireflies/.env.example index 05135f11e6..9c6771103c 100644 --- a/packages/twenty-apps/community/fireflies/.env.example +++ b/packages/twenty-apps/community/fireflies/.env.example @@ -17,7 +17,7 @@ FIREFLIES_API_KEY=your_fireflies_api_key_here # Fireflies plan level - affects which fields are available # Options: free, pro, business, enterprise # This controls which GraphQL fields are requested to avoid 403 errors -FIREFLIES_PLAN_LEVEL=pro +FIREFLIES_PLAN=free # Twenty CRM API key for authentication # Generate this from your Twenty instance: Settings > Developers > API Keys diff --git a/packages/twenty-apps/community/fireflies/.gitignore b/packages/twenty-apps/community/fireflies/.gitignore new file mode 100644 index 0000000000..61c3bc75a0 --- /dev/null +++ b/packages/twenty-apps/community/fireflies/.gitignore @@ -0,0 +1 @@ +.yarn diff --git a/packages/twenty-apps/community/fireflies/.yarn/install-state.gz b/packages/twenty-apps/community/fireflies/.yarn/install-state.gz deleted file mode 100644 index b009e513d8bc4f97a36047a7ed17b75b525e2638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375675 zcmV)4K+3-#iwFP!000006Rf>o@2y#K9uzwv2}B`;Pk_!97hu<_KdV;RcYxpq_zqRI zR@n_R)0TUj5Lrn1=AdV{k#aE-8f~}cqR({qIqz@p_13C-{?-5UZ+`yqZ-4XC@BYvC zx4-<4fA`DpfBxC0eBb}}^ZmQuykGv;&%gKMzx(m; z-rxT6)6c*A@fY%c|NP@W`{nmP|LyzBAOG=BBqZt$mA-pIN1Z7vcLm?!7CN`}>7{+= zaK^DJPj%7tTICv7b+c`~RcvQehFzJ=qBa$AbWnwrT0iX`FFqYx;|i_*`NzNfZT{}3 zdB6Pr=O6#He)`>C{>4A}@h^Vqzy0ZNe*eo~{>4A}`#=5h&wl&UFa7h6fBo0_%m47x z@9s~(`>X%uKm5)A{P%zI_ka51KmG|lmZGy*g@f0Y;#O}Kevzsy@3|${i&48&X=icr zlI*j)&s}d_r%SOy?kqd5Yrmc+UL?h2FH;u<`LPVWyVu<48=Hjn+viW-cJI-5!jDu& z@pP7KQz_{>N7l|Q#<8`}~Vu>6>UNK3BqsPMjxuzkV~~o%3kI{KXs}Su&SnlJ!3AS#rC0Z)5JT z-ivrtYXv3ojkOl9r0}+TSbL4$yxJ=JoqOx+^V7c0v14qz!_16!#Gbk>=T({C*B!C7 zmmXg3N_jSM>)dmT?AfdHG*8xhm1{g$^K{CgOinuoFM-Z^yF`w87cH9#-HX2d{BJM4 znp;x%>1#iI&$_{O&t+5McB?tQoKr}PpTAi1x}TJFxV>d`$0eS(G0&2B&zY4w=q`(M z*Sg-9!_u2-yxq3!+Ii#a&)-s8yNS(KwCeKQDt4Zg&dFBVw>yZL&epZY^szq5ch`$$ zMDJ`Lo6DLeR-D%)=SY)PcrvMYuh&vddM$@y+TKvkdfz_3J~Jn~GNG)e?bx1k!_SEc zxu#p|v>5lAk=O4H`S_&krFOTLjOV-aN<4n{Li@x}t`IGoVp*iI*Q74IFQ+LgvdmV~ zx6eN}siRIFyLW0TD@$+0J-6qb`@~+KYxd5ZUXNnk;iSuc?oAtZ6yFq_Mi(m?bKz3kU6JpUZjc z#OoV+{q8m1_cG}zAxTe{LsyUO@Mk_>fBy2`t(Q`zaqN(|@D<74OnlA}>uu>w*R6EX z8R|Bhc=yN^QOhHr_i@L@XS?J?xs2?7Yij94$3Ev~C&^Q~)OB5wDYwJFspH=DC;OSbg_qreIw?+^&)X3dGn`r8kKNroL0%zIwB zjqDnWzDkCpbiV%lr?;@qYJAgc%`uaj+AmTl=aPBcew0^U%i_cO@>2I=ThA{|;_Jvg zU8ib(t(x!X?$Fn?C;BwglF$|<fvwYO!SrJ{4wEeaR5>RZL}ef@b? zG@Ui)3RQO9_lCDG9<-dZHs0ISZceV#x$uVT!&|CP-k_!4nnf0#o~zo{?B4T|?&sDW zy?Dh}*4@0XG3C7Hcb&?w@84gadM{N$A9G(%^*u3mZ(V76BX{oYq^*L9Bu>QfMRa&@ z-M;dyxTVW?`s=xFD_xW|wAW(wTh-bWp7Pqf&aUA;C%*3ggI?{!aceeamAo$(KMK9W zlVa`9ZTBvEl||iW&Q8z1>zs)f@yNxp+uZ!}(V)B$lf|!SU4F~WaZwzX^W5*^yfeH` z(AW3xof9+Z=dHzT6?-mA6Z@TBE$?$9Z0DOSCffZON|^TAwBt&aj)kO#Q;b>g%06#a zMWbvTRv&)(v`EzXuDyo)$$RmheEs=n`fbi$OTsxcrJrQ%yH!W7?YFdo>881Aa#Wv0 zdxL-edb9EDH*Y^qj(xTsIiFrXpXjN)q^-kyZwc-S0#7iA?>g(8UeuprnpcW;@vU5+%FAW@={2Ie0?&4y`rUfxYIpLfv$t1kM6aEd zI_JK9h(`G9_cxgI9(sPgcb&H?KV9^jTRQm`qklPU=h}%QoHXy$(Z^S;h~D*-&h|Ae zv-W-*8x48&dvZn9WcBM-T+qt8ZdPrxyPx&f{l9DKA(9>Uy+cc$ZgLmbwE!JxUOjhq z2TF>#jHXWe6)ud&wA`gDjqf?BLM%G8_r#3KsXZ(=j$1_GXUx-;Dprr0_Pt-fzc*gS z$YVRPpWuFB>Zh|3E&r&Rg)Lf!W}nWgwOt7FQ$G~Kl|&YV>k4;Z%*98*^PX(BRFaKm zmEIBy<>*C6wm(Uu^Y#2&CcZ9;4zFBG@X9*c1bkkLYeJ*Xj9I3vWX*@Q6-9I#5S|8pOqo>cyHDxbic8=J+ z_cooqe0qiY9#NunH@o^cy4Oe>&5mPKR(1f|Y4e^tGycL>tP{IzJ*%ZamL5ON=9c-o z|K!hY)kX0+ti4qh3lId=@f|zO2W`S$rb6;^Iq|mEAm_(yvzDn|pVKk*?5stFvZ`&e z<+R}7&|qj(cS&iwtLDAX_($kJ_3qQ#B;`Imn`B(NP05vSuPnX}08ra;3dAuz)~64i zd~#iPkD*IL)B0lFW_^CjcI{)gmPu_)D|J}5aGdQLl5Jc3>;6XyZF|r;9Hr`LxDNgx z+w-P#_6+IuI8R@yu0FSG?d*seYj@q2qg8TK^0>^EgAVk~j-jnj*+kz-MsJGwphLtk z9nT-=AAbDvpa16lE`R#*pa0pP*H6Fu^Zw0GfAOb(TuZU9q|U@F8Ma!dbwy7ejlo2- zU*;=|w~rZV=SVz@y;kz_zLZ(O52aNybBjMO9-UuZSi_1*9gg7-ZLCxWnox3I0dow5>88v?WRZQu$-R9D{ETh5V5RB%gOwXeGvF1g29>juHfpt(fhs+WJFGZ z;n{Kp$e6cv$K}Q=EyulT&ix)z+_hIHr+74gA+c*Js+4oC@0PdYXl1<3(;x?~S%&D- zjA$!G^@1|d-kg&uZc@Hcwz&`)?%N=_sX}vhqPWO1EJyAcaffr-+0S@ zd@v0XnpL&wb8Pu@S^Fhs^t)wy^IZn;?j3$Xfg(whXNNpVYO572KrNg2Se^)uEmhPJ zF@5Um^M3#|_vD8eKxePKn@*Vbq$B}E_N#11#Vqc!gO+=IlSP-a+2%WMwe`9c`)2Zx z(PN_3_iSwvDdnEa=}W^pc%5`gTVJ=NZxf$4#9qU+`Ce0NsZWl7wU@%5Dq)X#3z3F!xD zHq7b>wX}gSVxH#AXX}Lh^*gGCrVKbTwv)sk7-8 zFvC0cR$ZO-blKGnT7W9gFJ)k2 zZl=;(UBgaWOB>Lx$abCNo8y3~g=8P`-FH1Qv@rfY5MJa;f4X-Ax&Z4~E_CFqXID5{ zYwIDjeD7f5SapM5`}fc9I;HkDfy@;%u(q5#SR#D8$9TTYFU9>nv(Ry?i_<==YbsZ* z{4kI45@nzEhb+bt$~{i$th=^Kr{{6IYjMgWfE20Jfme0jp17{H@-T?O`}kVdsJ8ZE394Km{XB~FBV)S+fP_mk@?_VQQcMg7ix2-y<_cZ%CZ%M!FG1C@4F6Y)s z>RL3Q>D1O(?eylJ%2Km(Ykb1jfN_>I2 zZ)nM(V|ey4v2)f#1zZo6rbR-iF@~%dNw1}B{5bOII@=D@G{Ew0dz+`oy{v0JsTDHE zPv+FCFyB$z{}CX$JheUR5F{=x<+Quxo~H|>P+;oyCA_Xt&Eg!d+#DMGRAj}4YQ>e$ zDjnuby7Ep#wZ(h(@~#j0I}jgn@R+;bZtC~m*OVBmHTvWBl31bh(Hvb~niZ21hsJ7o=k?rIJjSG-MN$xvh8S{h$dG9Hez zBUXMv4flR8TsYscd0e@d2My_RfQV!ehh533c$vqSh33HvPX6|z@&yp}91PYCO0{`i zFJi#FxR8f0%B=_=r?2}5V)Njlm)>U@{0x{pSp=pVZ(6a%l<*etb$7`F>6q5&TTj@| z7n5pAZ+`c|*Yx;J=O>wvXUs6O^MS(V zDPCtMFsH4(_}ohG8)+}<8Pi6W1WAof?dGJWeES|HrhWQkyRKUD4yXY%eVlWz&=c;j z>nAXu7&6%zj(NlTrJv({cU&db-o%C1j$yr_@sIRSEchkr@boZ|Hp~FMg zJHZDdewc$3BeMFoL3DOd zudJlq-aY%&EnnTEM{hodNaEq(Y-c^vWxsYu9l=)vO?LT$6y)ps_hfNLC@2g86!##l z(U$fU3t6WCAo!Yd&^=m&T(zB>(jwn`m>y>{WmHa8NUQSoBly}FMA+Vb@A6nBWWFIM zxJ1o-zMkLxics-O#^I2=?H)fGWinkpv3V;2Sq`@j41nxU`dkPUDQNd10I{m{*cZ@- zLnr&{NBTDAw)W*+6Dn6q&pPf?l8lD->-ryz0;dtL-2cVAA-JfUSJ}{PLLg1*Nf? zKdq!d8kyRwy81Edj{;H$icgyc5O-*f(u+e%(JiPdkx3IWMX2zOw8=e$~7`^T?*+T4*G;Mv~2`Q&Q$r%Ng^2P9$!F zx7_P4AP`)&9X-!ImS${AuK0UK+2`yyem|ntug||Y{o>qhlrX8t6Ym z$xCd{gMn#_gEUE9N%wn7>{g>=7oWm`fnuZf&9gmxzpyL5iBy$wNBc>rUhA#a0#(|v zFFt;fHBb`Qp|RV!@?d7<)`X7q+R44bR;S@NKS%9TkiM?}VRAJt7hpfZp~$xdpC0vo zT7CW--EJ@lA%JjKQZ7)!;OxMy}cJ7UDu0>Qi>U~_rk6&Jv(!!N2`gp<@lf{$a zT+-(~v_J+7+Hz?f+jv1t9^IVpC1vyOQ}0>2hR9$xsCUtvweq>+x=%D$DHNOloon*N z5?VOl&w=6>i8L?d$Wia&pHl4xoWi$)oEOC=zvkOLT^7Wt;ED zl`Oltm16Jp%sFb+QI_$>{4a7@D(#*m4(?UY$IDKx6&Hih>~Z)eZYiJdB?V~^O=_Lf znR|(WK0<*w3JKy7(Yq^O5wGp54^TriY6ng00bUy3(94VXXkF1q8%>8FhY{xbz(lYI zL(VAZwYAlY+94MD`uW9n)dnfJ+k<@J)`jVaPOP(T4MWs)W?EL?B(rCAdLIEZ^QK(c zK*HO{O7PYyxM={V7wCG3?jvtzrR(8fRA@85i8=J^^8=j{>jnZYLa@1rX1044acyOL zn9TWPIoCRzkhK|3#)3FQ-EWXoauGSCW2a4DJoFolOAjy9>;=v)7ewz91i9%Br|;|M zNlFslEarU*5Gx>Ma9;}+s6*AluRpMCG}RITBwL%bjwfY;0a(f>A$#6;JZYa=`u4j8 zji2qA^|~w8^lW^K+Wa7s_#Xc$P$RhyWN`l8M(02C_U*OQL@(RH=$F(wi}@w7LEH&3 zF^3iU)i^C$_XIpXmtM)BWr9X6*}2YQI2u0Z^AP&H1%}hV#(z4@2?DPSc!U<{2#Vo~ zd2}Ejh@8)On}ly;S%OtRz=L+TiVZ3I=t+GdYn{j*c28+JYy+6|lD7qiKs|tL5rsrKM+jlSg zST{h)$g}l!K~i(TIGQyqdUJ1X2rHI+J--82SbFxYa~p0`JxA^mjZ<-j!E-u4ba7(G zy$f0mFh5y|DXK56$ALNG#Z{>4<7IQu+LNnlH7gYPy{SqzyMsFt=z;8eN#d+`;5;Bw z3E6tp52JG4((`z1@7Sgv`@*1muS-EVMzDRbC#I6;!(!Y37y zI0#t%@v$um^iq4fIA{yAq~lx0bm1nkylc-b*Jt3rsvt{oIIs>}U@R+6I`j`}`ThAn zejl?(a>RnP)9**bc8qRg{671z<$A;?O4<5?nhy9ho#kHbdK$)k(R!}iAAt7xeqFOh zAvypROmIZp?eBgJ=4*ILzQ<4Mft=d0AK0O+SmFXyYHf2%=u^Qbi4}B_VQ=NdL<6Dm z9lk^#d}^lh7>Qr14S^4b%&yl%zBuUK1e**k_-z6~tXA}W{Y(fqFQdfmlgq9=9f+|n zTp!)xxx4yGt$M=yGNI$xBCAREg5x~u1ze|xx#%Jgzoz?k z<@c;+?e%G|_q9;)?&ZE%?gk6vB$)ZW#{YFYCNO%PU9uL;@5!$eq7CI<7xa&2teg2j zKlCS;0I(GCO&3qTx@^_Q=wlS!Q+K@QJk|)M%_a2`syB#z_j%I07L;<|x!KmO_OfBCyeh)$P zpZ)g#_~nliMT@Zj#xFEJXBY#ptV6q`!AMF&t_9W-aPyexhPMHZ++aS>!HR5iXwc5f zfL-opWR@z=x@UJ4P*6U;=7D`U0Rmsujr0#R6+iyP`=$Qwr{CNk{|YkifB40J`cwV* zSAX;KFTelkcfb5TfAgCk|K@i;-}m4A!>|4fKmY%)kg=KJ8C;%z&&8zNd5Vw9!Az<1 z0FliY{2l(W+lR++ECaLxbUk|%&ic$0aRQcCU_6d=d#+JA|k->+3>5 z)UQv-o{iB_p|7Ox6i9d%}-WIY@2=i?Gdv7%L^o=KX9I&|~8NdlZ#=DhqXuZAYo+Z74u0YvhFnjn@ zQIa+oXgm(QJ`nHlK~4;vbO0oz6PJxIv4hVA&351~%hmMkYat7)+HSUATLooWdXt945rKAiuoOOo83pv069FNFpjlYU{i+g&u~SR_N9JqB8H!wb#|mO9SQ4 zMvL3>y^sak?*RHq37aZm& z`jo2~c96NEh8zb-r_l;7f9TGf&V?KXTK~RVZjoDj52U7LCOs#-Rb2X%U`KQZVrc%F z6)+{Tj3BEA2>>KDV&nwxM(fl9`~a#Qs?);u9eiss{!(d;n3o{ z_bOYU%zgqH|2`esAQHwn6_d z_G$L(*;1O!3)QpGT0r3w7Z5@h-~tyHxfIVXDTZZjvla~|zaER4JAIWE8WWIl8v_MI z7&qQF0~S7ZWDrI0egCj99^4E0*@x7>kPu-iJ;z~p93;kpHWP%P-5XlStg$V<)+hMS zzzXX+UH*~Z%tkPt8T6vZ9_l38tKA*lnFMe0s(0z=`8peeyuF#bUm2aZKjhv$%YlP2 zS9@Jv945)^p6evNO`s2|8;G_ZH!J^mTQPF8x$&0nvwA_JM1{VZS6G&>p%lk=eVIeP z1~Te$-|OHMaUcwipNVBXj{GBoMD)Gf*QORkyIB`T%lCM1(0&K75@mEC+-$9vh(Ou{ z#m=nW<8y}>0FJr~!9B3T=8glo-S{!FM80;5Jgf-r9&ESx7bXO>%du1V5bmWfV4(S@wN4 z46oey-z+7ETYe!wvz*LupbnkbAV)NU0v@)s_YkXtjD|h&lEo3D*t!ualbNt#@g^nc zs0LJy7>w=w*n{kD2R819rsM1Sb8}=N-Dt^~O;nxGn0)Nb4#PsDQ+ZTZ%U3~)wcn!! z`8%42IZ(Zxh3g3cOT3VIuu?e(UDV-(6P8PnJ36=a*}PX1Kfh)F2tsyPunSYy#q0ebGerQHu zp85$pyUyQdLo$>lh+mRMA6d-@EgArIhJ|UKUF2mw>32?M0u6!m@oK@Uo~tmNY(E^@ z_7H;B5XAT-&Q>mh05~Pl`}DypQ+Q3TgN*+A{@sP33O&xvM3XB&@hBY`zhYAFa!HUZ zFn_chJSW2g42Nz7LSJ(C>V8H5E**>yyv8feJ$>rJFED-j6HABQuUY6euFUU={N3~5 z*QAEQwn_Si#8yP^0JSxSs2FBpd}avd6c{`G)J5xjpvEOWYw5g!f^e;- z*d7`wLN+J6xUpj<*xH3`xzM#mwR!F-1D{ysS7)N}Y3-dzX0*G*l)!;Uh$MC*gR->p9O$o4gn}mBwQLZ z#=iDu(Y@M-F+v9B?gPDcwhrnp=)z}u0)dtF^>Ba`2}IAvdKWQSnYptXf?HSu;4d}_X2^vI%V%qP{{W# z1HuG*Hd4>v9h-y>ju$)|+l&S(uR)k0s2fc2aMuVa^zelIlx{=W4;E$b6^JguOtX2} z;)~Sv8(jM?g~-Lu@pfyc}==$ncjGmBuHTU1TgpM~N3*@qNd)2hjMu%X`q z5vX!zK|o#X&Zq_!>WO!h8%$jg!(YpnTX&gzQ6wbp${q~s$)6{Yr<#rKMBvO2%kde%Eyv1KFb0~#>wePB8I3{x3{!+H5+~8X_eqY^;v-fTcn8=K!>AC99RgnQWXL@;vA=dMOP>$JquyA6XK_K$`_-nTs!vDX1 zEz*Sj%Dx#|fpB4_Ub^oSp{YJJ^Aa(!ah*}rdwq-*bWdQOcG7_+d@X;<_`X_@J>%Dj zbbpK?NG~OXkdi8ry#m4i=wQCS7QkdJw;_Yk6|$y679)iV?4k+>T+n>{2Is+Euw^gT zE_;pB!_=@7XP`UMYHFk#Jkp(A0ngB$Wx!cHE>#t@#4uA_J!*eQeDu%$>Nh{vkN^4~ z)JN}^-(v9m;}uAsgFn#O!#ar$RdO*%V!RFafS;s&`N5B+ju0tUcZUr}AV-Cp7jq>% z*dBKRt~pS}8igtz7vbm6b%j1jeh(4dB#Ck8`&b#?TK5j>9};Zr!Y`cnA<-5-eU6Rz z2B_379nm0|aTavdLr8jXWZghkX2+8BVL8u9gf*R#XK_JOyahxIT5Q_Dg2g{0$6jB* z8T9skd4v}d@!>rO;#*X;v3LVKl))JS+M8=F-(8pYjX=h8W5~V}LT5t>>c{JpBb)DC zU1v_bQ2d;PdxGmFpjxD#gRH*q>kH!*7fK@#Xd_tW>Vc|+g#hNKGn(%;3^sQ0Ze%^X z<_zP`o44u!c1;aM#PWj)KsF?I%y*oW83L}lfrU^{+L3n+GY0qK{WY3&B0g?pB*x2U z6$PST6tPDp0e>KZD-H&99fxeS_Z}un-LKSfv}mwe0Vw^$asp(--IWqPupZ0n*xl_2 zDV7Uqt~mMuB+!4)hA`bb&f}4Ym-L7PwaR%FxgE%0BuIjhxecCB%ou8^Adoj^ZgM_f z%<;QMd}i8_VvCNIu>1%HHtN~P$2ATwsG1?s364JixcvApKIqrK|LdRnuYdek{|O%U z`G5Y%>V)xx3TgKWvo#c5FxmiZ^u%f}h-2SpKw2N;7W=9VSVk-9Jzu&HeSjLXVz?md z+#U1|V!Rj`?|qR!jj>a}@BztEDBztK%w!*0l}NqvfXIxz z@*U>9XCn*lAgl{9rJ@YPOI_+B!;}jPgycfD6mJ^oU|25WP@!ADuen;JxFYKSOiUvh z08kI9?P;|CZSJw!H6wQ#69iP4GZEU^@oEl&K<5~Yf$6Z8w?<9w?ZPD@lxyzWNP;;E zS2}4fSdte0`kreO-wN(&uU?P_OJY(Gu>BpY!1ky;mPpv)}K* z%X{0qkZ4?3*98cJ8QR~D#p}%;1agrMqpkKS*+Z(Hq+G+%TtQ!0C+KH^Dwa z7?+L!h~J9tg^Z$jt15yC`r7xV*^Vu#XD{6N?_|UAN49K4J|0nU<-Q@B9~=oo9IH67C8uNGt|#Ul{bAzB+F3P2U$b#04IBj$OVs{2}&d@y6;k@#Kd4GzTa zLT~{gFG_WG3Y2U26nu%(+3eQVVCR+rpMn+}EiB+P+!W;S$;8-Ma_EDBjj8YAqf zJb<8g?DY^ZlVR+PJtR`qh)45o!CS4ORmQ0(r+UN@|EFyvl; zt(Apr{&wGR#=5s`jZSP0g)I>Z8^n<|yryKuRXIUGvaAAI@}>$-qzfzqfS`oMt2!5C z=nLb6RY{1xz6h$Ui@b+(z?*cZef|6cOg7f5bqwn*6j6D69=o1b$WY}%rU({dk*vGm z=Cq^G;=E7Rk)C@OQCBUc(<4tD4v@MU9p|iEgp~|3e%~3T>L^E%P3N!Af8PBTh&olq zcVQpyDGv(1r$7*dU5KCc97bq-3No*G^9)hS5T0VuDerp5G60TwGn3l^nK}W1a@sC&0~L!Y;s0&Q_J07YfU#+9wpZpJ z30uR$jQ09s@56=zVQYQ%jh;MM4u(mQ;2#agg1DDw;lqcltrynka?HM{nV!q*fRX!5 zPZEq!FZr4d0eUU-ke_k;0%hJ87l04*&c1sna`W?FBkQo|5$j1D5#Ss?r_hOQgoE4l zH``7=c~Kvem&GQ(%b|zFV#qFp399Ig=BG1X_y4GdaswJD^{r_4-S>Wq4T6Zr8>8~J zp4s_<6bb75J{}b|2C?iERMjd@gMsoaFEo9y{i`9I0)Zk2uFZr0qOlYeI$U1#{r%fM z5FJ#DeNyt^`%tSsSVXdr`!q7FNPNOKQLx4eyvWF|!xn64tOaAkJ^s;8O%k;83s(cB zlsLizM-SG)9L=;j6c5wU_gWVu+$`Q|Aq)bWE2_+r1(IE+1)$f5tSR_z7~OU__99Zu zA%;N${0{1nV$bLr5Yx9`jq|T9_uG7FMkA4GAus$Y;&bvJ!E~(~*!j_ImBe&l$g|jL z>tN=U#Ac(7Q=Wm9I&c+yqP?m?!>x)USOCqBVWR;OWfLZAx`v`g=RRdb#?EGJ8Aduh zRv5-bGUWHB>zsou-W*@I_hRqO*p{w=h>VYboCTZapd7mN7+SV<=Y#&Fc#m7PdtZ(jrWd_&f_+FuvB>VaXMu3kh<1h1LPSJg_;~IIxWt ztwuBp)6P^!SSpr__7$LOEm)^{Rr8f&-jCa@eqnKr1yt#6NPx!=(qv&YUC;|#94sgL z`u%-Kmbh_vUwRAG4u%N3Gy5=goX;-Y{n_@gpxT+fNF!RJ=m8$WlV!@Vl-_8HVh3V@ zkimBuk&S_UhL9f&HmO4-i3E3(bE3XqT2SYPB>cK*SQ7#1;%$SOH4L1)VL;%b=mj!= zLrjB^%-E_R?=1%6AOtRK?7E~wFOF}gRgMd~(7BExc~7vwL3@iM6S%;qfBpQ5@{jb( zBLBpANI&e@Kvc8A{JuX*Ya+!4U@{J>>V(gqizC=@EvB)uP*O<3?6A83(5NMVnV zV3U|CviGr?e7%*vT)(IDEm*tAQ6ld`e6m=n_6tRv)IpTkv|JQ?)gJn!9Vi;#quiLJzd>zV=IK} zD&v^|l!oP*YsH2j&_KgqM{~KnH!yYk*kV8HPV?H^P@`e1mSf4_GIc=Lg?#EG3sw<9 zz9N1Ipc4GO*9L#mGr7o`Ka8kI1!qxi7rVSC0x4Z1E@x2^GE$Jyae2{6hSQSP*4hkx zjR1^cP~-~{?=ZFNhAOrP=pyo~^&w6Wdq=S8^L$-@_B}lxsr4sy7-3?AjprfeTJQ@H zjHB2kp>(mQ=(B|HA*D+(!)z#=UWe-Njq~erqdB)6bq1O!K_nHjg5Hv1?D;gs>V|pS zzn7yq*77|lv}&3AMY1$WU~dPUk`fScU`+wy)<3CASmcVeA))dFuGiX|?&v7ig)%~& z9~P7#hd8m!5}Vv^2zEFrSUzM{Hq2)vGcRh+PX>-1`GS<*qnE#SQbx9;hOQ@1{T=3qxD>2?S^9Q|Rlj#6uO}=s zudP_O<$&*GZPgo)HK$WS+>ImQ8ptL zM*7d6pSSKhAjt3Wm!wl9eN@xk=4eZ((Fh5UcJFWk;^T!TS}hJuE%_V(j2aKQ@$=?? za98_W-s*k4m)s`Jj&8;ljoo8@itsmomkyR(v0?@30o=QxGg8mA>ct7WuFtMRh~ud*o?@IK-eXHV?=fu0qm91E>v)gzBK*52B7tu&u*Ve@{V$NZoEd-YyO7=k`&V_U zY>0IcA>DPiq=@}4O(d?jFnp2%y5o&Bk=PyuQA`<;AO_+YCAiCav*laf(%s`>L`h7b zXTVKsVA}UPM5FeA@Q>zk@@eaVawO>sttCZ(Jg`##{QJL@mnV8VT~&`{`}o|%LP*oL z;}+B^dQC`PU^l|EB0x^@_8j}pb){lHa~lV(li*B(zWpLoWbqEDgEVZDhg!B=_iAr#Ub_h|hNO&iT*>Pu)OWW_pZ z$>iQ4hezWwzGooEQqH#L1%v`8iX(@aJ@&PXeG@}2g45pS7R=1un$wmhfyQzc<|TGM+9QDUgKonKd0kbbPlx1-37h&n#S>kTlluxla=(w zsR$4U^<#(V#PTo*EpbD8*?LiUa$N`F`#7+)Xx)>G<2!MX`n)O^j9=alzZjOnKhHmB zUuV8OsAAnazv+A)2U{>dgKPn+gRg*?;T%L8UoUBeMY{(c=_i|LyJ{3ObqecmF?3d#W`5~b z8`%m*i{R4R2wPfXgDRXYnm^8v?RSq;s~Ni1MIADBu+nPgP5BgcG7J*btN_;>yX)E@ zr`w7;7T5I}L&wqdzKqYLE!NG27&A)<_XowQM}L*Sx9Z8zb%+WQ@!v4E-vZ({m< z+JLaw5i|SzpnJd5GzlG&YCr&L*7s!;)c3f7v%Utt14deNj4?l*bl#R>M*;A|inMcZ za@}3)Q^}Ch7yEssN_1-X#>H`WYrdWw(2UunD_WpOfpskwUiWMOu(Uds3`}eAD#4CT z@p+uThf?j6L;B82-$IU&(hVtO=L-lS+OChpar^VnFSeFuK{dznHYlFp%~C^h-C;tF z*d6e(_v!cI(X?eAs-#2PhJad3a^K0Ud>C4X+OyjriY%NBxp8&wg6BPi^K3H7>+7%8 zkNnv8+qgx*HwLhQ&jq5R8X^^L_k0 zU?$&-YV~=xIT1l#C%i?JoXn9bUlyAFpn&4yeQKB4-S23|++F*=q#@o#bs3fSf=B=Q z!dGSOoTH6{BA0CFk-p&7_uXmU@AI5)AK*wmd05zIIe@9hL(lW3(uvG*Mvc!P(=LrX zd%w4LvHP_XHsC69?j%guNQTpd*oRND+4QdGNXu}^&a)BtR@|{}zw!pch)&5Ap9FOE zHXb3<7S1t5iJQMmY-?KZ@w0;^^7r--p>Euq@WPH4HA;j1U#s|*^Zd8H7PoapN&_1} z_Zn2jK@+1FvplzY&N;tR#;oF)OGRy(A=kQL+Zy*Gs0(x7{WUx1{XGos@2-KS@=FLI zd8za1B=&0t3m5wK;SQGyaCFZ;gV|MaCq8z&sI)3V<@HeSzV_91fb3lp^L9d+(JSwR9&8RkYuBRD5H-KA#v}s>D=UEURHc9pf@^o&mjX)2<`US z`jv0pbN*mOK(NjI*KBlu`fvWJ{_<~s`oI41r{bUg=Ev85TxlqF-830n@=YndENbVP z2YkKWQ?cf^Em@#QB>LO?n{r!2r5Js(k@lyh3@_sF;xnGe1}>OSvWf`{nfTW2gC z?XP@&{`7zU$N&5<|NO82_78vl=d=F&5APrUzyJ2X{A>N`fBg4<_{&EP{#*Z;v|Jh& z)=qF|9j+5?c;h3K&3BK=AY%^Bk|Ac3Gpvy|H(pJBJ!p7Jk3!>h(tPtlNCANlf3D10 z7NJE>&0ZV=M*09T{JV+r=sDP*&9)VMdy`g}dhK!^KIrH`=3c*-6Ytb<9v#U3eRJZ< z>aAV7%0n9&^IS{#YqM?R3aJ4WH;Jc&)A1q=HrPq7`Q+!N=x~d6@Eqt;S_lYf_U>25 zYP);BTAe5Ki2klaAppo=%s6D6&4psp&k{8Md&2syPXUpQjY_EgBg^Ie03=8P&H!A9AcsZ+p%6M>d{j3?KeC zGnqA><;nMp>7vg)C`G=zNmqt%{Yn8pFBQkah29{1`Ak_2dGK1G>SgS=@7DJbbB+g> zaNP935=Za1lTpCK_L+l5Ka}9X8LO(b_vmPNvM_~4)xa6B9OVOfzrUgR^QEwwX1jYK zKSyqh(i+2YYfZ=io1ENNhW3i@ChpPZ*0lkgjY1HM6llaG93-+RxaEyVCyYv}m3PcU z9Mz#p!@nQwnuP1u&r9jb8qc-pzaPe5#{vrO;8*t;1ahGR9%78e$EK)E`Dxmd9ffey zr^3AN-z&8ffbO~da6E&1AamRY3_L+B%*tVt`}kt4^LGdZkLu|lECNM<$sk$2__{eA zKz7Tz`xml{9CuRKTtTu?<4cI|=_Ff=uKKG<`kHIujMuU-s`Ne`(36F|b1o=jh5#|f z&qIAdue!%o&FgDb`{dK{x^vm17rZE#2f4hF`xZ={o_FA-8;uDmaL#H3^2 z`99Q;##kzB{`w|zQ?1>z5cf@`@%r;nWDm%_-p?OCh9%I8|)>&{ODKbFm-sqgWbY%hrS1Zc@%+R2NA|BrhcrcJ3n_H94k0OxcZhv83r zO)XWedPnFMz;npy6U6uWgHK6w>olJO6;#uZiMb~HP;sOtND1oQ^f?aLDf8N3R&YQP zy#Ltu{i)Z0_VIft20XfUvc0aZs^jg&($G5q;=2me^C1oCb2YMu_jK)fW-$`id*5i> zte{^u*ND;FBxO@nBbuIe2-15e2>n1V>Qhv->}h_!C9yLbbH(&Up+n@tf`i(T6dyp! z1R--Ct#jQ+ouZ}AIoh`sk)@-ktH!8vr({&G`Uw5+3@ZQLvV6}xLAB5<0B&F3`%nY^ zc>=-%kL}4ULUZ)t08v1$zh7L1@iQj1*DhZhnBX2`zn15UJ7F)&f-wGu)zmf5YbM(t z3_R7fg_oVFHNBimg>5CMl)w@OOU~!t!32G-$LW_V8|YlxIPJ5TPuQC@q_v)OJyM{u zt*7qLM%XRiHGO*#W=jJ-X0J;4gJ+I2b!5)DAG<`rH0)pM(H%(wd*ZMC4p4tL9^T_E zC*|cK-hfk z0(i|?WyLY?RKLo%{~bydC=7jjH)itP+946_eZ4mzQ*4Db-?a65TW;&aHe!%09e`?1 z>;o&5y*0p(z{yRlWb#0xc^C3p7bNjj(z3z~%kW!84WZ##jKz}0# zNGe_vuL%9mQT^0$D7EzR{JeWRpTlg`7;@>F$@b~QFH zYirydd#!K8KSybd?Zb+#o&X8ZQV_#oFX(IsknPRB6w_jZtM~KqZdC|-1#Y)h?Z}pu zT*`z=4GiD{g39d38Xx=BURS)2&TE-AXB_A}CJrYdr*$DgLyp~7t~;3dnPVDgY%&0F z9qzCr$InApgUCHBvv1<5g+$f_{#xd{>v{~GS+WU+Qm3=NF&4E;wdAunNsTu3DCST< z#?M8ZX~~Uqhy>}g$b8)A@B5m0)rLy5)qfvizJciD-1+(#9PMoH%?ap$Ne{}cuS4X{ zyIH!EAW*N9m|dVpH(6LkSq2b7A}}*x5Aqg1XS~To!gWnC-Wta~<7xl*@!MZ{y#BZU z^p|1`_)W(6$G`1~Dk2xc%l6w;aB@>Td;I)p-vc5Ui4j44&DqnKb~PdcMB|6sH}Br! z=^ghhQ~o!R#vR$T3VfZjcTq!`xWTCIRoh9J^zV>@5Y9)P{4MrFqLh5V4v&vUsgds_ zfWB_PnaD{fWi*8uN@S>SnPfoFTpzF~+uEr<)F2%~+p1%^>Cs2@$ph@pJ=Qo0spIDh z!!cKe4e+dkZs^+7*^0jculp+dV*dVW!5vIv4!LK5onCntv4(nQA5dptkm}QSZI6z| zaxAhpZ2hEqIfks0^=b>6t>51WbHkBSqB&Aa=l~F$_kQ+E86t1gH%;KoX zY#3`d+v|eN&bVg_0|K}mRQRDFy(8JL>i64ESE0knFwhwJ*Izks|LK3&|N77WpTE?< z{^igA_?LhC)BoweW{fJrYizF?ZDokayot2C78WAT0{j=U!!{dz95g<>cQtn(Tv_Mz zx`XJbb+nM+s-SroWB(;w3l|rY4yzsL@SVVMY;Rw;{grRUpZ=%4{!)Mb$Ny6Q@b7=T zfB4VqU;gDE|I7c(Sp5I6%>Au@&|v}OUb47WKk$#`XM5XFQe=`#*a3KZ*5-cksZf-1 z)wJ2}mv?=mkcC&Mu-^#i^C$QlOKl6HgM*Cb>dK@t-eQ5cqyKLHt}E0Boq$-|^2fZ1 z_IBgX#4jFu?xD>ZHTUZ0rMNPhmy+OZQGm;Nl&|?oKFDC_?L;9tD|^%7sOHxv-|4)` zA@Yr9{&y%L_A8sB+VaJn+r&=225JUO(j%EeTyz);TYBp2+sw5~Ht;lDaMHb3UknFD z@N(MCwd2{E2|5rW;a({!$@4Kyacug|hs1ki!$(5FJve;e4R!)*}QXl5jc59hu z9}+$D&NCWis3@V!aTb}J+u~Awnc8+E7T+i^?pL5<%Kqezd*aL>)$AN7wEjk#< zUR@iXkj1!W$_@G`YfSBL1wiE<&|&C4*J5yqjvF*a89P;ntREz#mbMNM>Wq3fWKSCr zaen^!$wn+Q-{U0~?8n(O&y1Z?Gu_ck#B<*q9RvLEW6yY)8L%Et8$6Ua2dvyALiu$_{V+x zzm__Q(2oic=MO4a)V29aC)nyum7Wq^>3G?cGGP0BjLl_IscYx8{f0kdoUEc=-AI5! zwl1?1Gv^-5|Z%fukA|Iy>yAr8mwGTG&BaV0uJkx_Eo<+zVQbv zIBe+T%YIwR`JEmRbn^rqFiS-yl-ABo%!PN+SZtSm$O6aKgJko>=y2w1)90iZ`tIT+ zsr(Od>1!Q!QZo5PK>AoY&dVuzjAWH0ZW=3y5&u5Pd2va%y7F6H(EP!GaI;&|zvz|~ zkR(RkMk`hr+76B)CXn{$#N*0s2|C|7?RnYl_X0Ov;-lVDQc*R6OvppeeX(tM?4NJ4 zb8RlvXB2-8R3?QN7TWB#vzXF}^e;QKIg)?yZh>DMb8orMHt`%g8t|ULLql6?%?eSy z9KvpX?8UP-a9FLu+vny!@%(qTXaCr3vp?&=vZt(?dio!bo*|qWgwfJe<0vG-F*f$e z*+4Qh&V$JUqV+qLt-iozD)Tt-Nl{UCo-h{m^2VKSQmE_G_WFHMhY$3awaFmkkW38g zG~#@QzSw7tNtP*uD);DeeO%~Jk9C_#@7vvWHdBjhLE6^Z_yFAR4r?TZ8G_UAZ4)>;8SSP{V z&}bW1^%`KS=DUaZT}hl08>U>O$a#f#L8K$3#BoRg-7X8!YGpqd}c_vAn}m;7x_@hxz|`$nQzaq zQT^xNKLE&iC>m>m_}g%7YJ3jrNq%Y{D8a8xb%D+}4z{F242Ru)dWJwX+UHT8$~}5E z{3IJ;#dC4EU5m&Wc6+{KeYXke=gs(ecf@ySz3;IkN+N%*K6UK(4qHXH0D{4T=;_mX z74;0JP%oBs`-7vNck?zfmmFhx>8Zb9=_-pJ9x@`I7qUJ>I^RlCOX~a%H1Pvr=mf7W z>!+u_8l^S^IppmE+g){z;EJk!qf-L;_g2nm&@y+xNbAF@2C0-YAO+m@n#@Cz{#I>{ z7F%w$hfSH2H1AO5%Xpa1-)|MbUr z`TLi@eQVbdAIU8Q4vL(X*+HsC~W4x-xa7MYww`XUL|6&4Q(+2S5bbFKAW%4jd%A|+ww~eg2a1ovRmjJH}G;$M}YZ^^;WowGUSPte8&j z{eZdmLuS?LmIn$ibe~uACLRD%Xzg@L%{^lAhM@%PbKlqQ>2W1KyE%T50fTi`{& zJ^Ja?#lE-aqdB9jjX9z8HHTnDI?W)%xc^bvF2T$x{yQbN-@wx|mrZVTn$Ndio5^L) zclX=xd+NJYC7#fAnCp;7l;kt46BTE_A1?hCNvC)VkM*Og8#S7LNwK@g=1>EocnC_x zX8T?G7T}peIzCl)dkizExnEjo``QlM*dwpc&ziP(-%OYv8qg-{A~5NL^rfSEOw)2L z1^F`O8V5S@L~0`D=r%6tW=R2k`a31}5c$MCdH8ABlv;NaAj0seD{G(idUTN7=1%MZ z8JFc3+afip)laUu=iEfVjiE6P8Xml}`BTzs7Atr_H!$~N4F6}XpD#t2fwjI>wq}NM zzH43D1|a26Kfc%oIlemZAe{(MDOW*{xGkjb>0N3yLvzG$^Mum2th7yqEDTYqYyVeOYqEMu+TyxO>JKFrzn=EaqsH@2^%0 z|JFc0&;QKk$1(ZFJ#!ZoN6ELi{J(HGq1Dn5Bj@rdZHm;(VJ9C$onc*j+Y1lbTl`O* z?v0%zR$Y$sk5nv;>F43TPJSlm`SbTzndPlJ;R}%Ym-fMFu*4LD$T=2CYUWL4a=X>H zM_GhLTTPuhmOFR3tv83h7+yh8+*tw`h(3vF{yj*=>7*!-af^B4{hW^oTiIpLstfLS z(lqWfa34PMC%KeKK)V$md~;xkIW;Fsocl6*ryiT{@)Kej1aM85JT}c$CluVqEoqxv z)dYj7((tji`}?Jug})>CzIZQrEYjRT6QQ0hJBeeMI}vBtM}hpVloua(=WBvlaGQK1 zfmK$nWGXx#itDjij!EY0x5FvK5Y$ZqWY(7c`<|io3O<#04c)}Z)>u*YY$!!Cfj~~3 zqn&*sa8Z9fi3~OUpJ_VOknk_F6<~VeRb1!@6YFl z(p}?Qr9aE@9a8RyDpD{_OdE^#?_{03G_+)|hzVpPZYKsb3WcxT=}JMuvUiVu$!nH* z8;b}p^K-dp?EuLpLg{U?KyfpF3xLm%iptg9IPXx7l|bDK6y2r zi^J}024O2o079Yn)}#BA zf8B1q_`Oiz7JE@yc)}wwKMnYo1szCX7Fw`H5V6Jqu?JeI1ECMa857$2blz;y294CS zvD9759@Z(%@SDEp3KXc5fN##~SqiCs|DM?0XZr&}B!Jl6HhUOk5dQic9(Tc21(8;K z^evGEi;+<}_rXoS*tqUo@E8)p(}k++KEH$pDp5+q!q8itLXn2IPdfJE_s_@6*`1=qNdo9wp+DG?{IZ}C zcC|A@&A7O5Hchys=>cUN1RPL%@PZN6j>}s1M``0u1tRiREL&r5dZd?n;^|}?xnU%) zf${tMYoNvCJ_q0*5R@FINyiuBm`$i;=(lhnJ>io$%gEPoa*ZChd*8j~YW~c_A|B$H z7)abUyM@}hxvtbK78tL3N2mUruk`%+^V8uZ6#8$zeZ5u>b80Vk=0yW8Km{PnpVxYX zS?hbx>(BV3h);>zn+ZMXO#miYDl*%bGp6Qaij1ZVuoYF1^A8I+$=) z4xmpn$&ey{qc8M#pjZFo50tgbmBv1ahq%g}iD&6u|lMI~N8QBJ+xZj_ChCs6$OCotV|;orUf zJ}`vmJEM*CS34UAbz66#rpTEwe{T#F;nLS;(DL#5TK6H$^%*SIQvhZ7`V4kBmE1et z%Cpz9?++^x%oJdo-XqMZ3gs&yLA83n8+)h&B@1op41?qZL2 zwW65YQzj_nb3cE7Z-)ay5Q{MB;riF)G3>+tcT&4tVi?DAt=@;aVB2kO{C{-C+Kcez z6a^SSe9qAJKv5=Xl4>NLbz_4ace#YZ)Vi!mf8X6G&|RIaKQi($wTTwiaMg&Ir{6gT zb_ERU7!Xct131kRLN_(6N3;vlnh^`9j5yM~B{!E|>*7TobA!kRq04LHz4P*Otp0re zHToopC%yp6TafHiT31KC_x3h!_&H|I8?9M*R~Q$5YLB{?MP}^TmSr1ng*jS@?U$4HccpSxIM6EBn2l0l?jbp*gt(u6Qd=+FeGZ9Ns6esOIF%Rtp7h-bY(N zx*juGDmRe%d&al9caYN=w@(Dh83IPldLOb8M^0(5cq@_+?eB%+)4$7wbyK~qtHKdy zLb=cPdR0$UA4}kCCibAShPEe939Ae}yub4BAq0Q88yETW)K4#Sl2tS#?&MM&wUzwy zd}h}8-~7EXmiR8#dG@v-AjG+|SS-&o9wVT~C%GR^3l~ZmQ6pKi<0PU3loLP)waPSK zsI#r4e_@h0_ppq*#@j)lgkTR)`(E96ynlZFgqBeX;nrRZi@}pY+-dQV zJMLWzPPgNZj?KHJ28?!2@w(ABKjtNm>Ces6tZYa$inslH4^VEU+?)ALp_h4o6x#}o z;UwwI^m@tGp@(HUC&b_PFRcS?su``39^$we+&I>3fC=d9CBV$7^X;w*rC=U^3lY0T zS+MvAk~*ZVdw1r3a^JhNaV*(i`-CM9rtTwyy4#A=O}+no{-015V#8Y)HNYO`^nTjn z-!gW!*SQ&z6~fA-yml?r{b>t%_n?bx50_R;Uoc;hbd51=$%+{WlTHzp<$f($geqs> zOw{l1p)@vW@z&_IE8t|Y>^U9&|0H;|vR7+NV)<%Z$SLGR{48&-bC`~$HlhJzP3TlT z28}kk;L4qw4zcHV;0#QlyF-SqntPW0eEuJA7knDhlOyR`*NerS*fsI*bkG$_uvg#P zg)WHGeGYo^ORg?r+IbiEOQbB!dzWxR>M-%V+L#+UAt_(mn>{N#2GMhW|NQ7^v@(x> z3Bd1+^_)CV^Az4}5mP?Dgzi($LI#N5<9X{t`c%sIxrabU3jXduxKr-KFGoDhPfMwf zt&!@p_;bu8!tKBBkD4Lc{KSZt)p zq5yYVE)+0DzU*{(TML(>DA6Hrj+CvR$i~Wp`T~U7gh^cFr6N?tb-+uaX>#`ABKdp% zLBHAH+e9frb;nyf`!^r#Nh4y@AJ=V7{kw|CF5BEO&vA<`6t@lQuHH#CM6|l!BmwBs z@3OjMQ&tRhOz2v3%PD}^_Vf8|a>=s-6a=yQ#sd)BTF{D*dC@R51gFn>E;B*_4?N9h zS$k97%e5WMX^Qn4GFbP9CB7RZo@z?!VL5J!Tg)tHPJO^3Iwi{p*_U(ck)gehdB$ zFzHA-fNz;~_ynS-cKgiM<7}jD9YnsKadpuP-T=;QOY_QOv86-Nh{;?$sQ#7ZGH3xCc^ixQO5uD-~DU-<)8ojzt(^7F#r8u|3*~z2lwh781y-)rrL5g zFx=A#2I+o#D7@mEb_w=Hj#W$>rV%}5;J+OO6yc^IxOUu)*zu}$Y{b)~yQOK>v z`AXWwc>eQyEzO6~*NaYx0%6`9C%&nF-nkLN;7wEm*>=s?9~0W0UkAMgB=Wsq+o@<8 zd5=ircD<8tc2?%OFlq_=UHyP>TRK?T`TM;Rfd|jg9_f3?fk}EA4zAv(etN|g6L}eL z?N_q_iz8Jt{>ax{U*OW2up~8$5ud?I??D}CoKSPMb9Y{=(BhjjWumt|CBNGn7JtuI z6O!c)5q~i`PGWlm0`tLqDa~-y-af}_KI|eIzU>cL#v0?}5p?cszURUSeq@`zv(^TL zvB%v+N&V!LY^tn@xkooKI+ zy2)Yb1c-jRjLRTmblRnwPmRoaTE0 zV4dGTKRNfb%?(e8l`ZGMK>uv9EaM5zK6?i&o}_Lc;}a9bjF==E`=fvlx&Au}Ce5;U ztq#d*E=1Ovf|Hzw1FcoEd$3_DYuL~4wS2xV?2FCt7=E*S!IEe#2ms7|lKU|iOsZKE z5cS)g?W0Uy5Kr58c-}-q2j}MMxR0GEnujjyXLc@>-#rJwqTk)*BYpmSuC7UyZOz)G zNb1fKniInhCW2=Ncf&*qb&rZ2n{{d(xl>-k&S#t@WozS|ri9fPm|&MjdnsjGr%pp- zViOa66?>@mMTqkET*^{Y@iT=T%3evGVZ9H5;+WTb|3Tq}&3-Xb5RutjEJ=5+C+22n zb>ts!+ZqD_RB#u4%-(ciYzP=UQ7N~hUMGL^9x{vHNm}*dK-$p}3V|MV%C@n+!=xR% zW)6Y|iGSfNzAm>fB#IhuF8BcyDQ`+Rf94yTw*qQKTrG1S`pfjO?}^W+yf%0HcBj|x zdx6cPeiozkwbqE*q-|%6vFmK8k2%T8_mQBmJc-^*p7Bk~_t+m5uh))KKH2~j4yNWV zJMw9v?w4m>GSYM{gO9iGyXM+|w{PVl?Q-uhNd1Jccf>Vf_JPaK#^SE<(0m|PY@Jb@ z4?AtN&!p$Otutrxstb{d#6`06qJ79sU+4I;8GX|68lN@>bSEI?pKX605XuO+kJJhDIg%GvzUKC27%x8>P z*dW^(p4V1CzuRjou0zeumFVq&T}J_ZJB`>ltl0&&hQ6_+{rz5JPC}e$Wcv(~*KlLpE-~)l@Oi|a zOw=gt5|ckk?+osugAO&Sm#O3A1^!=)#SI{btJHeSh~V?bJ8;ohIT@I)Ifyd;Zm(_N zEKvoI)j6nRf5~^}&iIhT2?byh9@h03Jbp!Q??W%UEqa3L*42cd|EdRDhaWptK~5^hPu6Y9*F4?lJJ@=DpGz3Ox*CT_{Ke(%D5gI!<&DdXjriLAi#3W@m0-Or^ufX2}((l?q{FT zVB=lf9ON!h8jSpV?Df!KEuJXSG)#MQR?J06c56jsABDT0|R=a+yoo&a~)uaT`Runf+vUahFwahrgAQ(yR8_W}5D`%wr zd#|C%Ud_&`F^8Ym2A}gABjLD0d(yC&trw8`wv3$$m6l~p-(+n1Vq@Mcn56299mbSr zF&3%Ij16MIrxtg2Z72+DwzsSQE_%>?@E&ip&^-^CH=XoTxAD;IqrUy=xsfLWE}tM( zpp&jAgvCo&x;pn0Zvg~9Kn6z%x!2v8Z?{#X>6Xg_&WR8cIr#Pby%#fQqf&nxHj+A7 zXr$U9;!^YZ5S`rz z?0l0t-9AV9&!2x9+gCP;cX6HbTdSw}o6TMfqa$V=ESJxA5ri$b;(6#-W#-XttGTDh zr6SNdf%703H%~uJ&!I>8K#RW9*O(sfvb=#I^>Z$L4uSvWd!+5!naQW)OnaY_xnEEV zx=AUO0qpTzH}R}Cw2gT(uZu1`Fb) zAoVr?e9p^5TGU(@ib?E7w&GoC^S8mdpX2vl&w=L)CiCcJQgyWt@>z1x#vex%Qo$!F z_`?l^f7)yK6iSn_rAM~j?@%eP?dOl}i;zM$8zuhU9mV}l)`1aE^>ZkC<=^eQj?@8B z7omVLW~Y-(5$Q>L+O!&RiF_m6QIYcp9CO|?80y2AUPweNm{lY)Jv;=yce|{zD-3F4 z+cwiu&!m?~V#T!9Y3t|nKj#$#*>}iS%IlA&)bd;MOisJ%CqyG^(k6kCUi`45e4K_p zF9I*-klpX>V=SGC8#_*m2beBl7(e17#(p`bawkgZ=KecLokkje&q|Qbx`6pbq39MT zlwI6rT1)mUt^05pb;AIR8}*m{DSXO~cb+XY>8Wlu%@-|pOqlyD?~AJCtO=Q5y!#cq z&-?lPE4?AgkshZ8^=w&7Z`)MeZ`PZSCXwu*DK98pt`7Zlz$^_=lCKAp3+R&LQX=a8 zpzYN_Mxh+)vYWt}h0kL$u_HU0o!@&&&0j}y58_>M_ zBBuAwpx7vLU!%*=HjF=wC$FE=#@&}2GF-InX3x_Z|> z;Yi|qK~mU8FPa2De}CaG2d)6_AfmiSPs#lbId|3YZ$EL8Rb(d)z$V~gNnDp~u+4rS z)AX%e*$p~fP3Sh~oGEgQF`K8=3O?&{YY)EQY%5!vNnA z!Lvh<=f-TGCHU->TDuS9ZiR@p^P&5rf!zziVChc3cdQRA2wVDg1@`?-cX6hWkURbN zT-+L7b3Z@s>_WkskSF{oZ1WAx4JI7NWMIP?=jNPi^xbMN4n{inXvs7S{|0-CdW%r? zEaiFI(qbr^0@gSS60wAT*Ru6{E(lJG&*kIFH8-h#%%wlrWzpHk3B(75!gcOAlwoAN z&DwNvusNTInbpv@lRG9Dbe)eH3%#AGfNfVL_7kv|6IS|QmV4IE^Yb#DkP7+v*4WiZ z)#!Mik!mnCAxh4xs7^aX57*OLRKhE44<0{}ZBC3Cr{!tX+SFGs`#2WdDf5rK>|K$m z2kn}itBO4F=kvofnR@2xoX>X3dv@U=#AVox(g~RUed?FokgAh7a2vUzC8*1gm_%nN ztG+sRwvx#l-&sfh&}Tj>!NNAi)yDO?TleSVchTO#$@zGo*IL^vN%mkIp8cfKw4P@y z@F%Aiy_wDAsaBBFm5s7=?t4YZDE6suGY!SHeX;v2(L)jVY6nF4J!>A%0ZZFQSWK#=L3k_Koa&S^T> zO)^mGxp`%qsU0DqtJNpnnptTLqG=& zr;mOc#Ud2SQ^w$1<2xKW22!*^;(=3+_<=92YFL?Mc5Zn|ACK1MCa4K#^XH%6@}7n5 z9scJ%$GsCN;E3+`fl9EIh(iKq>ZC`5bx@3H?qdM2C|T?X%gIcu>T-%n(hUjZ4Hl zKfiz1gI=8X&CroN6VvuG5vU6jRy;GP0 z^YXIR3G5f38z8s`)WiTJ7Y_99?Vsl-don5~!}0Yh7?(_w=iIFlB?3w%F!6i;(Jw{y z7w4|Pdu+2!p7=~d5Jg3~4yvbT#0LvwPqq?Pazfed6rSoL$z&!`^7Hvkqf82U_DKjY z#G=V@5A4`u4ftnmA5bU_V<&w;o{ZGVvD~!K4#~dndL?%8qeSK(AD_yTH)ZgJmoww` zefu!q$&h~C`MWm>`N?D0km$9WfGj1J?t@hQjo8e3(&L;O_6I!*6sIHk?fbt6Pru}d=&vS3qmtjOBjGkhng=byj7 zJ>`An=JH7){X=2WMyJWDJ#lq$QOofL>JH#7V!*VxM(;?#4`fw7I(9 zMh_AuRwlbhj^EL{N)u`VcxTPQPIu4Ujl)ZlQNWD|Wj%YGv+-D@AX+1T2-_VZEdD+)Y&2|~on_}-p zTiE^%&(GGD>*jzQodF@j+?p0CZRM*4G&5d%?c4j;lKiR`P{&us`&!!c;Dxy^|D}r< zs6~bhD+cd&XXTF9LWZ73Di;|Y%j3U8{{KvT28?A%U*&70;7(6=R-mOuIzhAl{{GeETe`(g zV;2utaE*6@24k^rv}G)UCHfx3m)%aBH=AY~Tl9e-d=q)dY?DaJTIZ{1bL(meJB^f+)=ts1 zTdW5lS@x#b?-Hz8fz!H;nb~Ufcj$Fq-luztGAO#LmqWr6l-opW z5O*9DK_&AF!J1ROO8WjXq%=2WYFUN78<*ep@YUZNx!XyWmhgGz-$7O}E>kkAwU_Ny zvt0&cSkYuX8ge=?CTi7L$$d(u+?6?F=pPV+z2JRX)-u{LZ9`J2!#%m*B@yip8A^w= zNk(X#lMooe!2bOEUqBDkV5!mBg8Sc3j6G3?%o>Za8r=_TNu>zu`I@w%xD#ttmdHV# zY&6IBQqCayjx%Fc!rgdr9q!S(he`ymXqoN7Y5RG8@^r8V@_ytIOW?)Iv-;7jZSsul z_LBm1HOWJ+GdjRh%_`(G==#{mv#WU^rRF`?+d|qp7$Uwx+4q`%W6~>8M2)Zqb^klu zU&aEYw0m1vaMDjP$R(}}h={b6*n^nP0IFX1HT(8FOk%}e>jK=%xfcW);r8YI-Q9C> zZp(FnIMVLxAcVcoqkEOMx%_uo&NZmPhmMXsZSYmA*RwYsL%Hd8$XiDu$)N6dg@g5C z-psW?xL2KB$Inx}D}06D^t+h6zw3-=R!8T|=>7Od5#gPE-)j_(}0{}8D5QGDU*=l9p5!vEyqAnrs)-ZAdtZj6zoL5SjH z(fLL0b{pAjPh_8CaQ3_=m+~C|IYvj@X~=x~HT7hAmrg|L42BLZzst^LXZ5*4f6xDn zJ!N00jXij{ z+W@Z)k)H>Bg>Oxy%yD>>{m#{qdFpL{XSFDtFH4$p;{r;}=jtxXM2jQ_;^&2=mvz_l zzFMqnoJBL`qq9aI$F+t@&e!gf^DT#W@5PKFb;b11vv5-1-=CikC;T6&q#Amou~|O4 zH^G>leWJP^SYVVDhbO=XX8;Zo7o8!1U*dBl6U(o5ZJEqqcxB)`wZ5{ggn&mgxYcXQ zq&>^m&%ggX3pO=@c4&Ja4Skwjo=VHHBuy5j-6h_4%%iQ-My-52Qlp~!CAZkC}yW7bejQeJXAyIe(exE-)wNDo`ji+H!yUc+#e9>pHydmdVaDs_R ztAcIVp7tfc9;We!P(z1Pm{*5jJji6Sj6aK1*}zKC#(?SvAvgM1ALlG){w^kFN)n+7 z{!B+-h0E-&)tY)Ard8GTe`oCsc5S_p^NIk59VBrEfnOkZl8FtF#UhK?EU{_)%UG6{g5Cr7k=>|4$rPNOMj-o zR+`!LqVF&7^RT3@aC(}pO;D+0Pv3`ur>%3^>b3j1?dx1_*%9pj9mQPNvnyJ2D(h9( zW`G`}DJ=iN^L{ZAc``=|3*)vehh7D8WnQ^=+M`x9t!tc}c?R9TAty9by0wQ!HXcujx`N+)9NLGRF1bo6wD=Bo3t(I(au4 z%Gsx%lXJcA_JUINz!)=M zDNA0|Wb3Dt6HBFCIlD@Y-Sp{u^kDrgWf=^Di3M)JAX>AKF#vn4y?s5un%tV~RJP`I z#`X<86_`w%G1eUoV;UG|u%=ssPQ__SvTYaULsN$4E^Tmp8pigojR^Ra<>}Bz=WW$4 z@sCSSvOcrK@XYdcS>RRNUACjgII8k~up?R}S;GmTj-0__`x?>yla|v7m(&9JR6B#U zmy9KFQAb~EKYn*wFHS)ZP?i8&V~~DbTaW$q&%d_Zz49{8yR0)E9@;2Z_(Uwx z>V1PY7A(@55F0FfC4j{3=yzzT@Q_-kRk0GlR3Yb7q#jUZ2F6;}Iq`aUfpp`N1FiA( z`RzT&hw%8M8IEJ22=3iJp$GB>l+)oAxvV8*xfig;g*fSO?oJqctMZ;DMn?)x+G?ZQ zxaW4!HXBh)pugNFMj3E@$1PaTzRo}CTFrO4PDadhly4S(W#(o9^(+5U|2cj> z>zDI4@89jOKL2k2=702?{}pdf>8~qqQu~bB+19PWvUF`$Tmx~jFXT|0XqR%1q68CX z!zAF&RGTttpUZlJlPptedl&poTw;^yZOt0@l2OnJBBzkvzC5?S++T+}kY5%X*@vm- zZvB<4fy*#}gG*Qe7ebAjJ^gul8A+}NR0Lx}Z8rfnGg5K>LKw8(V8lFjv7pf zsa%!5es5TJ;F=F4WgH52f0W#tIZl~;ZM#`VxHt$vqySmpfKq)1BRL8~99Wykq8~B( zqEt2OZsZ0T-}`fY-BreRIjx^bsSZu<*L_^Q+)?&a0TRtx$QHo?NTGa5iQwK?eLHV7 zGsswkhhj#pkP>T$6iwEV)D33H!{HWjx)6gmd9Jyu4IW{pt7r8bn{vL^40mWJLP0@D6 zt+DDyKyjh?J8-BAC6Y!5BKw}q@xRW~MIKb>$&l}vqa^9+=53!nv2^xLKAZY21gB7| zK;PF4Aj}2k7CEw0+B*;4z6MqZ$CBlSc~6Qhn{vjWcPs_2u-#2NuKU+{u4Gb5X{~B) zbe3j;OOSP5M|x4L2~`JBBKT`#1xg8TW%lZyjQWapQKxE0i_LKi!n0V1f?y5{E`Qi)Lp# zI2W#`b51oh?oX)E?G6^X@Zt9W^x~HHoLPV6-1_Y=e);}6Ui^9d_``2LP}s0? zQ5lTgn?TS#X^!Kh#`?^K@kCAZPJB)z$g5Gcc>G$iW{PFDd^Y@SV z{r~^x-}bvndP-aYjto`A=2B4%A3#o8OTWJ4L=jvF{g&a|t$4BLOrMPqYVAFnovXz7 z2NN^i+sepHl}5b`u2dHTCp%LxrjLK#%D)3-C)y{Ogb#TymfT zLyVTvZc^FcGtjsrF0$PUsALg|J4$!27Lb=fO6vBB&eJa{ZIY-6!3|R!sHEF;)k?gG zF%^8wkUee{_@#-#T7TuR{p~;g^Z)$uhx^BW`2Ov`@X7ku|MVN-wddWL`$3!*^U(W7 z*mK!?MhJ1~Rc>t*@Nb8ldO3`{9?*_L8_A|vtwrQ7(LEeMZ=-{kdFF5Upj#lrzhKx*Ej85w5 zcR*%rJz0!Ts1Q6XnBAPKb5__}y$9`IRZv%7KZJ9S?&;bAWrH*JvBW27-gP^5SRc^T zuVZpnc;M{V3K|;ta^93@?jTY{5nuWRp2{Su)Um8NL;br79ke*s56AKwfIz)}Jv`Ft zV&5##r{<>WIr-7A9d}aR8@%)q#~pGMRI~GNu72=PheLS5WmNv^&e)*TvnWl;R*(pU zsdDJ5(bb}#dl4E_cW~MBi&FI8{ogHY_dos9KmOehKmD)s z^S8hL_P@{1-+%bSPv3sm{?8x2{nvk5zx@9D-~RFM{t)YzKm5!;{Kszy1C{-i(E(b*OD}5q2>|dtcB8csFL*pBKxeOk5X| zF!tE3E4v(r_uk=;Xz$4szD~$Z^Ol^WO`F!CXa~lbQf+~kXZ~(11gp*du6sk7YLcgx zd#M4C$fy`ky>LRvLux-gj+n@Q}kC6FH71Bo0*a^gkce7P7!!TI+0)2!&kc) z60TU1-N+j({t3?}8N6Q4Z1pKh3M4G}X?1=QHx{^?gPD*T0As&vFxlW*GWqz>e2l=0^y@BQSyV$djSspz6MD z*{;egL!4^qq$pQzkmDIpa!B@M3Os^FNajwPYvC^OZUnGwR;KQ2?qQ2ZH4oCZjaE;~ zd9-o}@a!BOaiaCI=}TVQ&_dM-t+(n~BruLWRG7$G1!r4GZHr=Uwb-WvNu&`WE@S{T zK+301{svD#@Oxtd8HMT?=4zU+{Xu=hnhFzmUQs zB^9^!%{{oD+M4d7>)ypL0;LG`=)`USpmqgSDG}o>d?`DY+2NgGh>uFZc3C9Z8sDeG zyBnkm{VnK2R*ACCNZum_=Jw*IL4k9oPb^os!ZJxANZ5n8t?RdR&GGG?bRsG4wTFn-w#Za6WZM)1KhWLIF`P# zEQ~&gIk(uofN)kYP>BI}J(6Yd&C?P8aJZ{GaJMdcnrmk;Wvc-s<;`Rb!sk4K77KD6 zqgAwc>zw1HC5Dvc;Jo*z0GIYQnIXeR8G~k`dEKpaqv}Ml3_5!9jbQf3s7m-Lw;VmE zP4$Pe-%L_uDDw+2ndrsOAy*YMS1VcwfYx$4HihzR3Q>5rtsr?@eBW*uGT1+}I77?8 z{O~f2%CpKVGzs5IRT)c!p8xS^pnx6&y%8I$^=|2}5Rkm{2;9qAF^(5I8o75nu)p~j z(oRTVs$?u|^s*9G&s~$_<#4PEuAM*C9QqzjWM)SW068J=rPp+E`HxC1p536p^-I!eLY9hSAuP>ewWPUe6>DpIlPaUHKen-lD zee9)q+93*tNL8#V+H z)w$IyUA;{DEbCkrXH|$ta`CA<*BR>)D9ByOFim)-M0A6v+|XJf&zg(08O`!2lw6p< zFCV;vH~f>rjZ%GMjU(r1j(V0${lMAv{Hq3DW3RnW4c(xL-(4DlRjar2>X_v+gJjql z?9_F&m0a4^sNQR=&fk1a?e8n{)Q7#LdICapY5a6?ee>^7VjS7nmpQkJ`M7ccU zUR$!i5|)Lp=#ydJIQyJ^@wT!n;KL576gkfr{QSVs2$3lvJi^D3k4FdCL+hRJxo?2D z!vF{2%v+I-RKWCGhjRqkv3HDV+A#7;?W;wT%?|mwc{-G1#|p5$$wPOi zBGIcr>HD~I^->dsea?0JoAt<@Qs)~LgsuLv)>C6quH6ZCO)Eo@TWQH}EW>RzNWzd_ zprFbzxY=jWY~9zvR^2WahJElLLXP?72*^4m=DGKZIyavMISVPr za+n~C+Thf2a;0~n@Xkd+I^zVtqN!CqdOIUUZ0;7Vvbwghp)D6G^mTReb}GBg)ePn+ zU-L|oe@&&Y2el0uR{MIyio1sAGlviLz2s`8k0KTPTLnHtdOnbJ^T0$A8e05$7EBzX zFNqo06y6$SqD>}d6>${c#~?(ogYe|+bH{znn%pY0+51IAIal|bvDT;!RBGWPI|-BT z*_!5?UcIG$jR_Br_tE6_I+?Gy1u5(XqiBPCA{tz{%(;@3y-XBBPYz)QEhdIiz`r7Gq|EDy`E*GAd$rh z9lcP@tfwYSQ|E=i$Jn%v6ZbUR=-3N9Zmv@dGKmF_sMr9~M`@xj{oBXJvSfFJd3o4e zOYvK#*I9EjZ0O`)qSeR+kD_zko(&i(94eJgUahagd$Cpk!D0snU?XO6(t(`sWeV(; zhhOiOi(~K;2neR#v1<3$N>;eYRH$t2B73Ox!||LxJgtr?OGVKK@fNY5a*$+`mk_7G zZ9Sta8}1o{iR0ocb_Wrcg-oN_^>T%8ftB}YnnZz{3~3$5IQQ=zz2lFr;FKSB9z7p- zc8{{_iv{gHn9A5Ha6^$=2xg9^Bd@J8=4N(xa*uI@5>h4k;q}HH@m7|?W_P{Y6kLw^ z(i3{^Kw*TXbOw?ekh&>-a`IewAlc)sBAxNZ@v~W!alY^w%%vwa-^g+{sY&Le>@p2M zl9aYSzvx+bsaKMG#%+rJUZHTZ9K3jqg|y*fSv+OlgX;CZ1M({TOln_;+AFs!=wU~O z1Q*S+%IH*e?=+(QtO{#OyRE&Qh-ZcW3MC+HnUSJBlW#QhPYR-IoY$Y+ zpFEpaog?=|S0YR2YzgUlZXixLD@+cr>;}XJcW?E33;%phfPqI^oYU9wR9kS0R)|w0 zS{0?ED2T@xWg{LkJHuBq?g%oUl8a0q^IdJ;V9OeaJQ##Z^`Vd9qw5%*XHKIM2bh~T zbn_KyQF^)Dm>SEwu3v&c<0u$!@>{9xpA{NeLtw$gI0Mqke z$WtH~fqtealk9ac9y>-kXxG}t%YSml-B1G+INKgoi$l?8ioe(7R>K9|WYR74u(!A7 z$j@bGsJ&w8l(-3yJb?VvQ%4rJa?z?bnM)}Lo?_LG%s!fOFNV0|`f2%Z>Uza$Y@0<6BVeD)+9D#b-e+N29uWgQ>l7``Apc9BI7m5z&oQO13Qfzm zN{_@f<4X5RTBgQ6a62P8DnP*G_I_-ffN#UjreaSod+qWhe&v6;~|+B)}`Bevb(kkrpibuJklAw!w9Lf)!`fM zmHNc=i-DEUp5O(v*T-? z8b_CARh(I7A+18^5{$S>}(qznyzFKecO=ShZTX7gT%znwPN z{m{vdby+L+S2eKPSRskuC7MU$)<$1;j4l%1V*uS&-4&Rkq}NLLoZ&N2T#fo>ipo{t zOeDbXxj>L@5|RnNL2>BTjQNv{i6 z;DvgUDA}Bx-e?#PUjE$z!{*&j&r)CKw`!8sflQ|-o?x4`O6TZ9pPeeyokqj86_&2X z+nifW+dbSmQ|P?*F63S4N}ZhZ)`g{~cAo$R4KpuSzq0AO^>?*j$%QUp>MJvK2uGou zuLr{L(>I${xOf=>Sh`HE$hYeeJ!KtESha(X97cy*7>)ETE4km!2Eod0N#QBRRDXlB z?dui?Rd)+@PEJi6<0!veSJ4@LauG{6E|Ct2b?BZzjf2s{i35@88i~I|I@1vy92~p)#voI=fPgcR#DFfvx{Qe@?DLLnW)sebn^00+N1ORHj z7_LW2B^(&|JhnfX6VHWN-%UPJKo}2597nd$NWq}=fWvXk#043OV!0TMWhZS+h1kTYcYh*KOr22#kZ$ z*^_l?Ju211EdrRTI&a_3jdlBu&2MaK%#@XT`iXQ+%TcdICR#kYKFdDx9i_uyZ%grt zbmXxX$y<0nrCF0~ZN(5q`jdEmUy$vY!qo!MGkU*%a<*(-U}k$CFUG8Bx*FvFcH4-@ zR#28mW6oT$N;_IeFQv6bb+~h005`@SqM$&d6aRuRrI9>s33|LB3ct-x!{%@*pItcI zxWjzDPYTAiCsH$fwq_KDXgsg>lyFr;WYA9Tw~c*C`2lAvrEqq9#c$DDgCAL~clM4! z7XfE0i=eN0#wjb?VVW>SpYJ0mg&fO*TKM`JH}>57e!hxl>WC*Oq4P6C3Y3XxTDpXe z{kd~_}R9$=hkY2-4VV6@Uf^2H7XNp0vQ^` zZM75Koias& z?&E0oLdt-@{XA+pG;b<+;m>XacoEgo1;K`jJ6x0|d>lz~JA2i-*L!83n;W@a z6`t{+M6*v);H%s-H?lfBfQ5_uVx4WMrf%iB?}NAh4zTNhBwLLWPlr;N&?NH_5*Me( zd8V7CFMs*iUxWZ&vS`v6o_gD^W%=ea&==yX^=;8z`BM#p~!LlRxiOhF!fDK#Uz?(yqf= z;nWj{Z&zKVbf;=1Jl@EWE6d@-g{Uvazr0opGC5a@zGcEmX)HM2=Ds(&AUB1PLv4Hl zjps0b>MEOVvs|YYfp)K78(a3An~N@mx^TZT$Y3Ds3VuJ(($K=gB1!;Nc)aSSUex8z zwj+m>Yd+q5A@~fUB;RN~Vje)A{WvONu+^CvWs=W|ilp;4r3XnXT90@{y$vPjaIzbH zGqq_9vj#r53*Wc0IvIda`>x6j1)akRiFSEY%6kySF8+RTZH)eZSFMCfBh{cs?(>Nb4&Kf3lN`$@>+Y^?#=no9zE*gVp!67`t7%Q zp((gHWzSAfoMd^mS>LvnnFC`&=&OQ{Y1zV(ZN{F62lW}JQ)j>$fu|R5c8!=ykVRG* ztCmBYrM^!A&~c;(!mqC_GEQ2M5P4B~Cq@=82!SHs47znf@4?J)$wU%3vsKutEr@V5 z*!V)sgFWnp(exN_Pf|!gnY}yqzUX_N<-F}ahI&=GHRp)ESxm~bdJoHS3Pbx)}isS@GP82D?%k0LqbHq; zR0V<%#S`TZ!awSL1-j4)V?_mh!u4PkhN(A;v_tX3)z63V%`XBOOZsVfjrA_Y^|ZoP z=Hv#QR?ny@*58G{z7RoUoUtr^iaF#bxKrONYd`-00uE~ zR}DZ?+@?x|bsW7tJl2sNaPL_{0+6_z1ldm;Z{<@@isn{~WO8T`JbYJMj0-R|-ZSrJ zQdX=~N8ES-wd7cJ)YP?bdHLgSauj{(E+iz*aSXI~OcWezdXQzr+ewcD);r0-!~ zw_|j8OQg7D72?skg(84(`_Q}cFqxeyC!zv^WUx%YYY<{>S*VFY_}JwM?Lj?phla4h z(zCuGdkeqB?9zikN-S3TJSp#G7$n@j@)4xyLy_L)yLQQ9Qq+;D$K@8zKiGQ73SB}Lv~NN=tYrmzHtivb`gau_-mPCWR}{Mio-d0V z2c|PIk`GujPKvOW>ZP=`DDWUrpSxT%7-i5+^oQlq}@R>dK zgMDdsyUmr7V269JNq__7%ktFa9njy=&gD;d>G8saSFIp_l8ji^)*?sCU99`tQvxAa z5WV=2$kwBU_cI;REok5cT;OCp)i*f;46x*HZo?--D!E5vhd>&w?A^2U8+CWW=t*sr zz$P%!7uzwuor4}L<>NQ{Og_7v0=V1btc3@li3lY++xjjJc~^8dKhm#>c=F%KFY3#4DAkkC!lLF z7Y`WuZ0@5~5PH!=de2gL)fIb@xi}hP~PW$TC8CKbJmky`@=9IJ$~hv7UEckmDf)hADYY z0^sD3%4;X(*g2ega^<}p)&N~@oYl(AMGD;+1^}_RC|H0Th|THTEuEx?->IBeM8ZyR zh8Hx->vrw=?h!5eM7JB0K^F2hN>+vP_*^Ym0@2 z2vodYCWhL^E~XlLA(0J^MXER&4l!Hx(P0Za+8yyw)f4Ev?e`WWebVg-)o9#T;&Wy5 z5|`?IZL1ew3qSD`@y1nVr$i>b*~L$`-zfEZ?QxBfRwvbpNj*E{tS)EmR0{D&23{>< z`HhrcIOEq!YJb@pfTH=>j%znxwBN?g$`mNpZEN@>75OIdx0mMFr7%D;Uw|sJnYPcs ztd@JWbij+H_7{!s(zK1qSc@kU{H{v$S=)+IY1SYjP_E6ZZ)n9w4q z4Gy6{p~udpN`TMF`)orN;GG9Qt|G=@bzXhZyZRa*?FM*oHaFDocslMeadh0!j7xCs zB)j%|a2_Tm42b{ZrQubL18!f=;FlABylINDN+jmM^(TX&=Ba~wd}WPbqaeFbw4!_h zYA@dJU2FF@;*h!q|8=VtbKh|O;%qA&R2cDJA1sm8acLh6?&mP0;bI5LZ{ZdLU8;lG z$Xd%{6PMFs4~R^FuE%9jFXjbY5UWp{1vu-&h~8EiSfRihb{+y7=p>{ZOXFLE?e1K0n?g8piIcI-2IaVubtcI z;G0)?-vd)>j3IiGCQ<1}QOwElb)0nR8^d#rq*9AD_)fChZkn*i-Jo*KL{vn0k1#j0nP)f37Dd zWj6;9(VC-InJuL(I4PG*Xf0=LAwwr7IgJD8O&1kYvkLK_w;1MRvz~mH3bjzW4#Nq+Qz-m z0j$_y9j+%^o0t=*%AIXHD&Giu(nFOQ3a4ao0J?1#c0XdxIv%w`o_;fCcC7;f8tcl& zyM}A4EPV}zJ?c?(dvgF{aF@ZjZlJiVo|mZKT2PDznFh!F!DnIaV+7{Ull*bc)#`!; zxGr`f`(4-*8&5x_k9=Tpavr5G!pzH8;dyayM}am3?N-m*UVLNDJ}QUoxv zJ)T~+i~O+4wCcVr$TPSganUKG&ZxYvKuaG0bo2lqD8b)TER<&$)=3$X2-1*S6m;z$S$d$BhSn|B8sfFoF* z&w8x3l(vk~|4Zyjl3?y{o$%J?S^0P%uc-^=>}fU+P3}|o780fBRqUY@?=tx_N9;+CiR?3~J9sKvU1?+M zunSDd+b|TFL^OG3jnT?Hxq@;q%Vl6{%@79HRymxuF_N{xtyUW-riEXYscH-mA-FI_ zN#%Kvk9@7tMc;EwGVfL}Ev2k+_>FJzy8~MBy8C(_{+t-3PB;?}+985Xwq06gbC=PS zi79L6WYS|x+w7-JUyYj@1Ot$NtWBpGT&kCYhN4%!ji^%MDl@LGVR8x<+7Wd?69I?S zmf}#qwNN6eWe48I?wy~~m_->q)qNL)@!oSYozp!%OQ*$*`2o&AL`>4=THb}OrjyuW zz_f^Ki(RE~HN0nGzScUwdFDFEiwJ#Jv7Hh1e1?#mzpf4`Tmcvqw_<@lx))|+1Zbvq zdZ*Vn;UgwJkbh6JVUGfPZIg}Q*yB8;${8CbOr9;7t&h_8{5%6h^Xm4|hHtKB3w9Wg zQazm$8+wbxs#e!z)J9`wD^|-V%o-2$eu%)3B~kO&7(xwCJGuI*lfcHGRi^Ou{rrI%V)92oKqoO5ZMFlOI8tu5Gmg>B0jL+-H4ebP9 z9`>y_!Ka&e0-e>Zlz_ekqx9~W<=(T{9eSGZt&aLy10^TYscJhDo;@zjqf>qihXpvWx#0F`Yruof6AR(+UUit(HB!{KVI(3pwC0lW*`#K z*!=`QZz(}BZ#i!(jJQE_^%Nb?gt0CI9tf({Jj=$yCx@m0XtN&ANQWDScsBJa-p*}R zVWP<|8d>|eQ2Gxg7e$uGCfnxV~1QK`% z2cjd)J9j&9T4*v>Zd4?X%ivz!>>YYWwGSEs$!(KLV1&{mx945CUz~IP&HNH#7)}+O$2lHHdqub>8X6l|O3XaUlCF?#yHwn5^dExp1~@zCK*Y zd!Y@q4--AYEXa^{85!n^C3G9#Q(JkuN4(x7qru< zVVoAm@|`5TM3uo+X1c%j9%+pBf=4vO71C*MPJ4+0@Z`j+*9fLU#g$U9YHxrATs(;I zFn2g4XkrHe_~v%W^R*K`FqO0DZApF>OyVh|JKmH z_gGmE%t!u^9+%2`y$daznqbh=fSb1EY#S< ztz9==j83Pj5x}$*cIhRf<0k26TsA>n`OQR|eSr*R5Rv-A10?J2O6ICXhywJZV@Ro5 zwp5JIH|`>AKJ)B*NK#%Gf>3CaC+@+)BA%{s-_ptW^>?IJe}C<=@PIXVOZ zYddwZsUl_AlI@D08?Yt_&Kbez9*4Q3gcyBP#xOzmlWRu7Nf5l>qnmjR)8%U{h=tOP z6B&o_@U!paV1H+)lCzA;W2o<^Ds8e`Yh~4&XV4#?N?Wq%!pJu&|L={v8hT3D{52{Y zjJs3&EcDg|mRW6V^UJgVb<3J-ExQ}01inYg6vaq;ZL*kal8)W2_ntwBh?!Pl?9hG6 zyNSvwys5LT@hYfAX^B77fUU4TaKxdD-{H?JH`m z9G0KXbG7Flw{_%S1sDa?mRw=WQ(t1mqS@%_1z2!>iN-E{P}# ztl@UK4y{=>36>eL*8xo%9Y{i8O``h;jssz5<&rfUlLd&tO#BMcQdKM$7p`D^jiJ$& z&QW=2p1F`0XX&-y)?Uqt>8lMA1(%;~=dRcI8(-GY!~+;y-|l5C^lmb0VU$lga*B#tDb86SyEXEw33aXW7o+zjLE`0FSP6Q z1pByS!m`B&PVN2<9~;XF2kqlz(8`L;z5vzVddMSltXH0n(G2Q4dMvrP3u>wDa=PFs z&UGnzEi=3+yfHPawJ(_*()hc|$rgjrO2>JbyAYF9y#tresEH@_0G9}{9z7V4)y~C) ztq-4tGw!06)91Z|1>oQ>zJvHx1wB!S-A^v$!$&C;OUhh8Ey!+W3ix7eJE-0y-09z7--$|_&d^lv8)%hb_?v`H9t^k*f zVF(%LBRIHr;e58~K$9RXt!Aao)TgpCprC}84sfsq64!rp>V`Abao!pmW^6N22<`|!iwlmdi| zoSUL4tBk|A1Y4*Yp+Ddb0?%>sv3iC#;8s=VgQBp8A!sX<7?0EK07lJF?bsn{zO_EYeX&%WZ(9Ccq}W5&64GGrF=*6m%Dt$7j#)B!vaBrHHr!Nf@nEdl_Hx6 z*lwLk^@v`%#W$~y8iu8}oybm;jbO#l{YngT&3tB<(m|4m;|M_uTlo>N#)?WmMf{HB zi)e7?Clj-GBx*pdxTy1`Oj+$7%EB4Rg%^TaBP@!QJ`n@0A;&&25HjxyDYYisV7s`h z2GuNviuMf2fDV1Xa8vhDEUU3dBqSdjSc*1H4>`y_KEYFOn08lJXm#y|*%(L3al;P5 zHD=M{-m%_Yt&muV`DmE8v#!0H1-UjWm$TZewt2Tvhg6`9uK+!1ElvK4pe(^ASZaAs z#{lA{5EuJHh!85#zGLdW5X-OJc10l<@bkbp46|3`*_LE)*5!?3MoxR18enMjiFjm` z)pj%BC|75LO{8n}JBuF&f7cl*&EUZs`ESa}doMZUoGW z--#+x3u70)8A^GfUWTX{XJ3=g`~3{bf?RIVd~L@qmFoNYbm(+&6Q4S;v`U$zz`76Z zb#h*8Xxe4)8(*HgzOcjtMeJZkRk!a#?yTDcn>ZmUEjn{0F^cyx^PsuBd(FOa_Ogaoy&)dceltdLH*I!)NO&X-0^nFU9dBkZnf-gi$}h~s5;Ldy9jJPTsu z?zKI0kmn&Wc3H7*f}Mpr>ca#wP8^TdWTZl&s}v#zNNIQ!zah&OdSIoN8dRB)buTpt zLo^m58@Hio1pHHVooyUX@uW;Mq2*QtjdZ$r1-qO4j zr6p5PgYAs~fLVYzZ0F)K^$PsCiQS%T{Lzv zzIRzcXtll(sUy`GdqU(&#@C3-`rhXxQ<^5-WZYe;{R>M3WLli?nO>B|*(ZoUow3j0 zTGqjLF-EIO*SwN0y>CP3jTe5&89U;P(gtD5-Q`~AVnm$3Rv3pGovCRWuR$oETz6FYTf2W)Vp>yuH73_*ld*?N&^AIpM!I?yf_X2$EU*x4Uk`bH)U|Ktta)Z z>kjSUHfyt%RVXA=#Z9RN9xsKYIuwlhcx@V>Q+9deB=>{6J~ z$u|Nu%6(h&hpmFEaH*PsP}fZiq7eJLz^6+}a#}e09JTO@&SNO&30K8tJYBAjb7yYj zlh10V0TrO6ernr7^Puap(eD}dc2ls=$6?pAYd1?W^rg7~2^kpL8D0Yt1OoR;^>j3j zSKQU75j)&tl)QSC4uZhuIxAWMWQA>n$TQ!&arRQiUchaFLH=Iv<0ytI6v6>S9Upu1 z%{o1{2A#*aO$c&jVfhq5hX&houNUbPHrvtVrAW9fm~m-XGYi`%k{4xHJ~n4`gRpLg zsd8mzKkjF~FlO15A>JszW8|y?#(^Mq?!&h91i5!0Ha=h+A$#r4aBSjIs2D06H=_RL zIZG=+Vm5r0>m@&h>|BC&mgakG1~4)!5LjkS6xI?e%!sQh`k5#`fG?-7V-sapJ}YeW zP`g2sd@_ke_TIP&)m5+|T;z%Qc+#^DXSM{IDcQ0ehez1q(_9fBX^UCXyG;ehU!`_j zK{epa7GkoPQrF&u@dYBy>l#zFR`{ah*zP^Zvw|J7vQ{Wom$RG181vS#CnUY9_tu!Q zg4lxF%4!v=QmggtBkIF55@)>=U^)0qX@_oQW91h%G4X87753VveMLum2 zGL~>=%^V(Yef=*=KoDI9Qm}DLcvUaap7+?}d@ghV3wwF_f|A;gWa3PPhzad+O-h_f zL%)}Gu0qkVL3C|zojBu0i^XZ5c4K2_W>qgStJYZoRggc4!M+$EJieE=+XP9oF29Jo zas^bijDg-#z539DfssCQB`H%Gh?h(q?DF-_=C&aq7K7p3_;yXbba?J4;{z)aTWAqq z%pbOJ>Cx!VCc@R?uN8KU-Bg?kBbuSxn841;)~9sz?zo4m^w`nR(#+nWQ&4(P1L=1i zR3s-wd{gBviQTus!w?iOmEBewi|-W=>3f+!S|TrMszpB#wFwD;Bqb1Dhl!%zWUXwi z_cr&sT`0y9Bpwr5+7N*7bG!o@1-gP?nf9Z2d7I8Pm?6xai_RY`KiKSX7tNKv7B|pc zz2XD^a9QSBK=Ok2%~kKU&OPP1*tI7X|qXMbnY(hC+cTz~lA} zwkBHv_<2fTp&l|}Tsoag#@cD$WKfC#oH zY!sjZ?D`2WM)ddkI<59$zB}(9I}84tR#BAXRR7v*8TwV9951<=^=O}+^~gC0=`??^ z8-`2Q`~?^9gcZinyAGDF_c;?7H(pTaMDaTDDFZEYQQ)GXmG$se^EGVV7gUlhEj7c0 zhB(mMEE0&DIE@+vIern(oXaL;lM>CFLbX{|Q@1CT?x-9&A?`rMS0^nI2)78uT@P=$ z0^Ph0qa9Wn$W4+YT}rL1Izi|Rrsp!ObUP0LfuF|ObyDxFd4wIFbJVE8_ic4PHuQz4 zHN(RuqYXzBb3rqi7^|rG4uaE^28wMYjYthQC$ASgztj1p-3LpnpYsZ-)%T95w``7@ ze4sZ6MFLhgicqZKCJw!z67sl^jX*6} z*=6X55d=eCI>?+>ILArZOmv3ajGC()5CEJp7}fG~Z8%DX8CGGrAqOx~90J1+4Fme% z+|eR;^Tp2cC9qg0_8PIgd+D6y!|oV$Jk5H&Qbt*z#bQ1HP}ycrL51n36qRQ#Zxog6 z9xg->H)t*E0{*<{3{g{i>@J2Pk4Jhal!3K8?Q#b|RNXh2s*XfEI>dtl=;jd^3l5LN z?VhyjUEG};O{9@TLOa83E_UGFicVPd$VKtf&oVCW#j-vGGn;L#1Wc)WGAk;mHu>2L zL*qILCs8ZFF_K+b#g;>eiKFRJZ5qvo(CSR58apIEdpgXY zeqS1V!F8KF6p52jx~>zrJ8H4(YwsJSIa@Zy$X<8$E<3qD$kvLcdf6k=i(w+_N4olmJ2PZ|KMNWJ}?Awxt*P_i=y2CpB=Z}r=cdrW7LD-ucmn~5*$i3(vGSo)dCykRh|bFX2pyBL7pYHF ziM$5jqOqf4>CRH4H9j1qdFfM38u6nfSF2a!!?z+k88P34Qa+Do0xx?Z$!v9PH!T{g zfrXfR6-P&U)~WIbwNWx z2ai`C`?CjKASJPb-(2rDq(#)?b5zI)1Ir6x!IhHrDx^dq5C}*S_F2)(cC*aEgS)Yq zzsYvS`s8=j13LJN)3E-Aj7|+G#v!cMq12sq_+UOo`d*9EXM+z)gtzUbq*cK*fe(f% zam3B+J(ukq-mrw9tar$}Is5K_2RXJM+qqwU&ho9z$IYb>#@`A8Sm%jH5Zt$b*Ab{( z!BNT^Ma^wulY7bGfEYcWV7GT{;wrwl;T(SP^!El)IjxWv zI*C^+lJ(7A;uDvqA?y3Wm^aLwATX5PE0m*a^|WN(XHb1Ejm9{0*&A^z66|%#-TU3B zyVtQBxsN^kvPtk7fkB;*a3*Y1_|}ACZX}zwjp0eSKhN?$3zXhClnDd>g>5N|j>1pL zAq>pplPx;ELN0KnqU>Ow-g#iiy7agjxrjC|O7vov&^rJ(YFDTC;)nGcuhMaNK&lU= z4E)&O(IT)VbfnGD*?KJpAb(F@k^xbfHf`b(5ddtkWDbT3e!ny8l2Wo~<2#D^z!qMo zJbib~%6OJB3NcdtZQwGIb7$Xax6U^J?z05AyS9+nHDH%}3y_eqW%xZy_(JNGn}dum ziRG?uBuP={_!R5om{%dk7sNI-X!f?KV~fk!)7Y=KDZ@{5WF0les`55;=an{l1NX$? znyJh&WAz=F!8*(uwq-RShtI*4y8L|n^;Z6#55 z$;Se#*zJW6p6Pa#_S%T1!@RBn=6@|fYgPB%x!Zkhf*6ytqCJJG<2X!Vo(shIu|ZXW zWGQ{)hVlGf5*fpp#?e|SgoT;B@te)}b23g%r{MbC3vmVjd@K&=1PY)sWfBs;vucww z-+^(=VjH`9B$ZQzcm&H+r*0qWBRzqd0 zr#Jy%JFeY0HZG3wpKUE1g+bC91EBS)?9LaTo9gMmcr%r=>QwFTybyq8vNg}K7UH7H6OPS4n5hW~`v$T-{f*XcJ)@11;Ii`A;bs3w*RSvV5GN z;f^pYi4WOt-dYKp40u3bo>|k&m)%RRydyz4pcll`35+Bx?z&lZ7Uw_)_r*QY2*awy6$g_>I0 ztOgYm6z_w1G-NOgwT7W9oU4z6Z_+?|lMZ;$0=aD*CDi>U@igk2uyh@5wAS?Q#W-sK zWhgI&-gXnO6(P9BPPVv^lj5@Ee<~6U%q+!M1-0OXf@KuH6Rf zo~cQB(ADHWPaBH_My*K&ig30Qb0Ek+S)=oPwUuz8C~E-Ldozk>rX->_^+a0rdE}f& zN4TLxVMp;ZHqtvXV!cnQ1!A-zD3M3?65l`dwOT$(gJhCDF^wpz6&6N*v*V;@A>^GRP`~G3)iHMsYwB*cFHM=1%FbFrkV&t!8y+si2K;Rpvx3h7_Hu7|TVgOT> zSyaVIO_)FkHBRCy@uVmYox4fjZdkLaRT|~a&Z16s5;>5ot`t{zKHNik!1PF*7}Q&d zUyZof%e;3lr*Kbc%d~x>*jDj!Pi7QiH;m^F$tA?@r3VQ5IAd*N2Jmpma@tmd5y=UEU??NRZE-RYj zLEt~!wzAE{M}+7u3jaSty6ceTb{k0>rp^QwpzIY+q5yiPQmUo>l-iO%HZd?bup;wq zWw@8o8RCSPSK)QB8Xy*g&}tne)Y9RjFttbC?Lc>>uH9zJ+-tq-y&<2{jVO<4R3%Q^ zPNN|_`<+BKr#(9gPzeN3^uZpg{>;i)fTQ0zCF-urIV)Ap^i+5cy-kk)z3>rOJt06`UMF2U(gUC(<>g^G4}*{mcF82VnR z3%Mf-8&jL%h+&gRYO2cye^c->jtB6mM~gLxV7f>2|Ht0B>)MvwRy1&K7;t1bQ{qGc z>s?G8`zKgcB+!7M7A*OL{HMm?x`89dGH^lx>h62b*?X-ja?UaMSF@_H^7gL4%w z4bH2eCIOU5M|m!s?&zX5RJ zl~7rdf^=q0$M5Cx@fGr7e4wad;alpgKOrTL)2K_bIlx%T1RGJqC4+v3T(7+)+>Qo| z-=T-->fTs~aciEAznDOFwo1oroPH@{Z^CbO2sk-Ei0Lm}t8ohtHwt1pxWJvYDO;O9 zW1{PUfd<@RiR(#0g3<>eyBqU+##P0uV|Bv58GZ_Qql6uU$nC?=_dWs{$DdPnXQT`8F>F4y?FK`*2c1;gpN_;`nUuTC1`4+O~qJ8Ou zYrYjuVa5rh(#xj{jHAu@;!JyzpM`<$&5B~4?Lpnm=S90f;v5uiD`=brYzXIrWQ{bE zIuIXUt|X&7%869cIXS1Lz(aI%P%z@elbSSVIIeO#Fu0wwYx*Pn6>?dVjftG{-6P0a zLa%lHRa$0Dt( z9%Fv#uKLO$dt?*KaT{e^4Sl%XyKY8+_Q!gzawiYFxca0lPh( z+SxH|LAio8=F1v}3PuMqz2Hz2g7bN;JyUJoy}?bFLBf8L;q2}Eqz!$f!n%ss)=`-A zR8nU1wGp1jVs)~FrI$mj)ptkDKDOgl;ou>;F9$uDHMzzefs)skcPx7Hrk0M!M@o@FPx;2~GG>0*V}{!3k`j5vBY8K&hkiHQ+I7db$PLxM!u!yO0pJ3blWFZPbzL;#=`R{%6c2!vpuE+Xksm zm6m{eLLV98y4Aepn@>J*M;i9uH*xHdG1yZ>PpByu{IHu26tr3C|NQ- zPlJ2kW+b{Q2r548ga%hVl9lkac;LnERO`-5sYb}sOV;LSC8>_(Z#Md&QXtiK`G$Vw zZ5|>9x9?K;WEjlbuiF}(No(bL!-{ctIzjlll@y~KR|tnBTdv`)*>?+Y1(L3pL55@; zsG?m6inDw4w)lu*qPdxU-2|Ts;6p}R+{A|5r{Kh%k?4{~$O76q>nx(*pd#)H!9_@X zE%3IKhAX{rK$1#3Lb;>@xr>rUFy5=ZD|47KN87g9xwa2I``9DS#^24L7m&&36lA65 zieor62=2y%_+8f{_$XkOhbF@3!H9-T)kvwK)$E#ZALh{i+GAGD&m zPfs57;RtxU>!)4R!XpRufEYBf3f6p%can;IqBUJR`gD*SU=AQQ4SK}A1Z*H2~zqrt}{L=M35SM!&Wc%&ttszi&hZ74A^q zd{=mHR9hw@06jp$zaUO^9Q~^LFub;d0UIR}K}0JA8+mgGfax%dhj4fhAwDnrKBq?k zCZqCrI_-pT;F;j!sN-g730Du9dnM&eU@j={Z$ZdMILexk;iE}Sba~Q8>kDetbYFZ0 zqB9@e;0_>SLqsLB&XlB{+Ba)#o~gYdoJA}M*!HXqf;NSK6($iO!lsn5@Sx$G2X?tw zYn)3ZHhi>ZB%bdi^Ia)#Q_a3rccI~MZVWI>6nve&tghBiV6^XJVw)_3??JR^9=<&W{etQYmriygapOGj(bVP+53e?3 zGpZ{_914^TuFxkW+n~0wKq-E6$}%r)13=dfg$f%C;PbIIkhE73D+4%yvHuv{!qcIg z6{c$o9lx__@YFsWW7Ryj6KZ`Hg0KWchx_3{eadqQfRVhq3G8I*^C$y;QOffQ{<|La z>pB1TuJJVBT03lE6b+;>$oK-v2E`B#Jt>B7+Cb7$D<1sHX6%YL2g%w8{W>`i2qg_z&1`pMM6i^z2`B2zZO>BOs)Yrr`HPG(-F;jduTjP9^wnyJ;c61 z&55T8i>GnvBgJG3CbuzApfycu@yRftH-}#>kQP-_ z-+lBw!AU{jOD0=x=q7Oxl4UeQMCgk_&F*DV)^^6#;D5ojoE5NiIeP-Z{ z!Q%t=u>ghTZ7Wp?ofF|51}i#To0~h zN0K*?s+CcKAV_2K=O2`(7uYjb1|jx2zwo0McyMKAtF*oiN@dwtoR69YLff&FqtQGF zre5H_5O)PIXQ*)&+pVJfKHCBSS6|l7pR;J#VX!TOu-^7AGj}b|7|Ih&A#Fuue0)~# zyD3KOQo-RdXX2PlZ1a%|I&YjkV9dk8OJLJE^>D8Z_;FI&EQJpJW*s*{n<)~{=8bfE zU)GT=js=3Fj0u+FvHC4qXgFr8^s>eSmxfS$FgqJ{jzaa7dNO*5Yf&+39h7iPal!u# z&BX_sz~=R;t+Uo)OFg*C0x01dxnxFTg#$sDZ>~_d1oOfU~a@l9@|<3Z>4vNbXHG!L)btv z0Gmz{f)y_aa}KthDKM#}fR6^WSYr9gpTcAlIF<>d_;^AN048)4SYmxs7ouI+k5}2i zr)Y_6u5_>%Qm;UO{MLKhYaUyYyQN+(Xlb(3@Hp4L=tIHIN9C&H8o#1dXjZ0bf~uiH zy^9zPt)hl;OpQJ161wOB)2KFAkyVO^_Hi{h@%K^D+8XepF#c6&`j~)$Cge3ADY#>O zHTRr`h+!66iJs-gWN(pLWxrn}qwp|CoEzKf$mNy$gpcy-@SJo20%jN2R_it=hou80 zxdl$n%`O|6VI7pF%3fpUx3f%w9F3;;*z4|(0gOGloaO##xUTg6tqsB}7;39E&aCo$ zXS=V%8@av~lad#@Yb7$L@%WEG+oIphzIz{{aFcbb^yftmTaQIauN8r{hcJqtLLt7) zVFMH!-!(!fFdW)cQH*~0DFlKw_3sP z09^WBs4qyFsf?UbbH0FbiQmw(-q7QkbxYSkZ={3@HE;qHa?eGRL4k(O2qERxv>D&H z`^Zm?YF0X)YZuN5Fqy}RI%u15+ice=8oLQ{sE!uzebK4|rPYHWT+avj>)V}qxs=g_ z5oo@~At3LDY-D3et#iN1%)dLF!|~Q^*f7YdZN@&snqWVpJX?wYx2deTDwTRbuvN ztG&^?Ke;MB_spO>Q0S!3ahQTYYM9uN=YB>5lCF*OF&GLIu?%(!7poIEG^%UM$nGlL zibtJy&Xq%G=y2o&3pa1<4R5tQ)0x5M@Ox9Lpk2Pqu~Fk<7sG;qx_LI88!-ZbrX)Sr zJYtqt_kf3e=fcDH@bHLkX$U(wA_EpdVSOGO96J^LsrC`o>nNp z+B#ry0XFXsBO%2#zgRLaW!PYF4M%kMrfJR`)z+Q^iNrzdiX+d?SPVm+&G@|=Dmo0sPPFOzFXJdD5(JUA=cB2EN#h^|G=LUGx!f%7G$191(Rfed zyfZ+ai@AE&z#!rn;OnfXiki$AbED=3QnEY1ro))Qj~-4azMNS`;ATB`V)6-H$#*1g z>rgxSFjY6iu*5y!3`6fMBwOjp-@poon)96XW(@u`$j0}pg8jIU!z5mrjioF7_BXb$ zB2KJg^ct(2((sOL%S}s8UqM?n;FEN}^%{g%6AAEptoSf<-*R5m-r%kzQ69_{dL!Z- zLEwBcc3=a*Ljr?I&2*vfQ7E_+Ud)@i#ZnfDfS!oDd?jb$0su2*SpI6a(ZFCG@~Ti% zN87ZN{{2COOuqn%-!AjER_ob|0T3KX@_ds^6bA+YS5-PxxSIA7gMvZI3kLyB;eA)q z@~7Gf**xNdod#b{YEdh;GA?6XY^=VWZ72h#(h{q?0$X9s2T!yRFZVImX|PI3e?6mm zG>Ok)9pAKz16XZ+g!*svwrX-;UsF9?25KFB?#afaHeGZkb@NHm-FCcKdp%*%$eMlu z+=(L(v$SIaC$W{Zxlrl^r=;tBH`J!SaO1ac31;LWEl-7Dt{&W%Fr8+wEpHQjH}L-+FT8I}>%e`J6$Mb6|v2AU$?b*Y`$4r?@;eNc$mIf^yvU zeXOn+Q$tUU+S+l(ORxEM1_R^@9Fo*W%O{1++Jv3r<=iDDxP5`ty4orX`N}ZVtYVQa zU;hmt3fHCAx-6! z#|IvAP1+r2$3aFzfs{J+__5hrHBvnnXPCqROuG8g^|s(dtc_^%yeN0!WcSzylC4S) z+hekU8eTwn6S8E`Sqvm$f4d>TASwG+CXX^gL6;p+{CdoQIa?XBvuA@vdFrPHAS8<& zlMTQXCx%fy39hOnQ9uP$0Mm?RsVgI|SnwBhe^Q-VJMuBys)(NP6|*kQu;HzFoj1XL5dNJRDpGh7b^|#BSS~0l#_Vz3j*Gemztx(agGYUal|-?H#k-StQ4D2! zr3-Z$2+M(ti}87^(+AA&v~w2n-4F@d$OkJt%_Je?qPIRdw1N~rWWyWE3BFw_(<-cV z_{fbOeQAi*0I5~&gcHdghilRpo;&_qXxUI4`1B4T>vME@#zNw$Z$>hK)34P``Yqhl zeUs}kn${CE)APutp$(hEdvm`HN^>$f4btyRdwfU?Y?w z6O#h`o>db5fN*j$cA*6oe2Hf-6|pa)QVreN`Jy5adten z(ql0oVaTI+r%&)qh^&OE2(btnqDqt2*_Q0x8p;Fe6U0UCxt!o~2Hoc3_)y9d4aq|zN0h;49hNT!Y2m-dkB#2HsOgj zUkCk+j{0eoIb98>bUj790Ky)#xVk_<|f{=aUKw4!09{bk&diP*Z zK?9x>QmtSVk-I{%goIbEK2Z4P9@MznrI{$wVv7s>nbx_wy!rPt&SA5w3GDd@TeGXmhS` zGzt#wFNI?k_DNm*5XD=SxX8f3H0R;7`SwY8O4P*gkHYs6=%sdLIo%cM!)dr!rId1! z(o$K7VhxhOThrbh@up3syv9;1wH;&a}0l2Ij+`C%pke1jhxPWS@pK; zx7139_+EfIVv~6a$59p%__ceZVEdpG!%WqVu`}u#Y%LiaoJnoYX(Ay5bbydWVE0eR z}AWCZY6!=iB2|3!}jPV>P!U^;!A4pu!V2*)O-0|9{@GO;T=gNZ{EDOGb6|ZYA_{-SGLG!As zB_B-of_22RGkgifBUS+w(T6S_H&a<<0sTYi z!E4I+fxV{m^v*72#$LSOAdV4-&sr-16yD!>a8PRx(E0Pp2c1AsMXa`RqMB!63cu+D zj0?FKBr{@f(jQl|I)PY=Q3IzYAtStNFfY`*=;zi($=`rg_}BLJ)&kpW=pNm4){b3N z!ofJ|c(q@U*GCw)^bCm;8B&%Bdc*J0 zKDqge&~?^09H9z(A)7pT$u$`RD89jrJW<=Tpdf?alNz(v-izH{#U~)o0CcxZ^^}(YFSMehYeYpNo2`)KG--5I`$~sp$Lvn&6FN9-< zgA8-EvUorQB90;Du&V65jJ<+Zoa~Y&7S(!J<;0dp7>aB29VuBwmwN8qTwbQ#sq-f$ifX?rnL$yrQGV|)IkYuey6Qto9{x^6Y|i} z;TMoGHBkdNQ8yBx*7r_xf{)1#ojso<#q14`6t9-uU*|Omle#SM9rDNmz|ozLKHH?8 zI7qx{>p=RWqLQPDD_Pk&coxVR@F%>Kf0zLwSb&E?gD}krl=Z+Eb}0RjTHn@qxYe?V ztAuD5Tj6HGjW6S!v-b9w7ZD6=bJR8pfduoQJivchTcIPc5q21#emLb%8lPI7bAg|i zJhH68U%>li?~iwmU-PJ0yF;-}7_-4$K9?{Iohz??8g&&QruNJp^mHMfI$0&hW_R2e z^nn?l7wa$u6vhhHOBt=`;r@8CwA3#eiqkrvLeAUF+&A+ec+{gpQ9^KkX_eDY0dp!4 z``7$+7_k0o8_@QL8$aYW5Tbfi@Lz!Y-du>q4r?z2Nq3x8ngS-y#Srie4?_&BH0{;^ zb$D8B?WxsK7+nqsL|V!9vZ_TXPYy`eG*B?P>n%KI?;I^3EbfhB)R>8PWTR%(FBfp} zho7R+vEb2Ub1y=9Sf&A}zE7MEFyU^Qwl8|F!h@a}(yAMXTH=s1RJcXoLunZoU0$KW zJakm7fkxj`Db297t)t-w@%Lb^v)x2p^w|e8~NSC1t*5eC@ zNX{Eze(rs)ttUjySK~SWg9HgMVeFQ5wMdNnd@rYYyfi9TEv(48gk~D%z657KmwUz? zh~~*#h;8S{$G!_n`5tRyY@;E96OD^ph)*u%pU9&elX1=a>hp$le&=s@rO-+Bqiy`n z)v4@@4JIVSP;78#D&V{u>K}#t{@OIg84E#gH&%#PH4u$~K*qNx0KCvx9t0x;9%LjU z=IKbDB`6odRfEI%re>C9q0$}H%J=0;<*;?+vUC(az36CYq?JRY*xrR1r3)xBU3Vl8 zae#}YN1*J(0Id6)N$#L&!Z{{sV3RQjB!N-<){#U}J_}?z(XdW7er>HBp6ZyfWW?@+ zjMJzzW#*CxyU6BnzGOJx5m41(0&Bh?WT3EoHlOR{eT#qk-)F%_-)%VT z*=6_Z*)UKZu>s^bG0H2v(G${sB9QOeAeKHaNYM7ctSDBJ21JQG&Kza2pCW2Q;b|Se zuO9&cKv$@vRqeK@blU2*MrHh#2;^$uD%l=z*(UplwQ!j?J;`?@Vz-V;ks1J93p0;M zMk=$tx3_=R*Tu&xc`-bguIqzE(#W6`o6X6!5D(w#T``U50oF}xLsEZ7`{?rAxF4#^q z1SlFktzG?4oL-M%A@r(#9J55@w&EjKB4=Jke9~av(^f(4O|IYGn47`L$_pU`4l;y< zHfM|?{Dc^;@6I8N?}G0`X58a|1K{P{3*3KuB-J@|@9`_y{Q1D?N2}QK3IRB@R9mIi*MUF#nfIHe6!!FEbT2c|w{t2h zcGEbCOrSw;OswDp_W-Gg>1{_wGMf|Oi6Tg-9Rr+e^o>X!rx(gX^bd1eu zTVYY(a+2vF~n-s1BD{mPb13?AQ(8PI>ttvT_po;^WTBr=7GcNjhn;^!M2d z#sDK)CpNcykpb?Yv_UZiPsf4+gpvBb-U)veGr-HlS)Y0=%n{UUNy8S{C9n0Cs6vJk z06Z<|)KK-9FmTwU2SqQ8d`{K#HLc0XhPC3OEZ~b1s!Jw%WJZOyQk-T}XOz5&O)er9 zHK!EH1ejS-bPC|r*mj}nXz|KAZxEZ1Lqn|XC{gbfM1h0!SF{mt2ErB_~;eUcp{ zahPmyh6&dXf1)GT-zCVfd}gKy;#C@kACtgqB=z`1j8*i$&azJH>>S^y;Int`d2X!- z{d+q@?EwmkH9p;xe^3n@g zge}#rxtqeIwoc4DCj&ep?QGVvjkGYE94h00(Khgvj)7)bufV5`mq%Nti*m66pTQ`@ z0}He-Z+wXb9Y%iRM1s z8S|7LhgqNT@V`lKWQLO?EcC5I=Hz$A{OhPTimiqurB(`ri|RWXL%C*ot!<0;8vhCF z$Awiu>ybR4&e5G^J5L$Ea#_MzG&eG%pLu{c3BDbG7gzKO$*MN3`pD=thdKRLusEo- zr8&5uKm|#boOtNB7rry$8%0a~2oJ-KW(&et#votK$G)P$;=Pa`)V3(4!Cm%Z-cS55 z{EmAX3&x)BgZ9zgf~X@3L&r1t<~q>&XHRg}h58nJ(UJX4BxS|mA1(l~K>qI5UW>;A~){v&K}WQHX2YAR5-Bo_uy{_-sr>U^2#rNWV7{<6#vKQ%>acqNI?8kX9Osp25YWB094> zMjN-Vw{2b*d6?xogwm$4b>z9=m14zM4t3?QtR?DsTToYq!LyiLbVrG^Zte96ksOeY ztMtw%Xr4U@bi-!qOr3cXl!?UzU`0zRbLDKNq`FAZ9kz~?82KX%eb)e*QgM6;*eWw& zUg`5;m?I>DHJlc9kWXNJ!-i-|#yoc=VI}ybHoYqytF(tX^S-gqZuK3umW_~%k^$|Y zf381T)Z8Nq0(Cyd%Cq3mBB*utP5R&Qw=8L;WbzE>kMLn!WU+Be-*@~nOH^+C2Xyz# zn2%TZ0Y`*AIb@5Ax|56oS?5J64*tM5cf9RB0v?x}`h|>h0C_BiAvy#+_+spwX|p}K zXmSB2Xmdc@)O~kh3%y}2*30m-cvWZxXKcFqOORLuopsJH?3`EPp4Uwnb5I%97t0&C z-8DubOE6Y1={BskS*bnfTs_o{>M3fQFceLFAPlA@%PSb*-@`2HEIun#e4cq!4JgcB zqSc+E)t>aa;v{Z#jns3bDQ^KbgH#lg6OjUMfSp6T|C}$e2YqYbXB%AOSh9E$a3lxn zv!U%1=DU4o2Z))JDFtPvR9lG(`GeucsoE3F-L{Y7z%#EB&}U`Mn!H2D?A9q4$+^Vf zQCUxdVSL@ln*wo>-6{+L?DLLHyY;qJzu$xF)u*NN`7L+tSI?^*XgU)Fdn*AsP(`qH zT?MZxg~la|``L*OpyA}sP;T=TrI&eKw_R!PN=rR+d6dh+ps%YUen{e=!KjSUI8D^v zQ6vdx|5p(Sz$FMWae2AlEP7qqir0{x=^2Q4@S*g%M{E0iM1=xG(K# z!4?Jcv_N*MkE;fVU;&V}*e5e?bLk#9rC|~dd)`PIKa9mbgc|dvLk_ACo?XddIM+sl zk#_XWSp(MEkj3KgoZ_nvprU-WsQgYrcThxF-WCu>y#}_v%r6Lu5;)gWUZ&J%gK9^P zhPobKBF12BGw<}G3qTpa@BvMh%nr4Hm7%QXmtYn3r8_}W@~<0)5-G$vWKtOhA^trY z7^>uvW$U<*IQ<#0KhIg@#f?pLLX=x*0nt%u^qy`j~XLfK`CFd8&O=wb4GDMf6y!`paQZfpPueGPoL1_ha>;tmPP z!L3`-3~W$oH?ZhrK*_omuDkr79@rY$x=SCilSXqUY{Lcv$g=C{teoe#`vzJp>8G@y z>jocLY{_CcZ+0^P%5%LCPv+4@aSGSI(v*o2O>0f5 zrzQ`I0*BV@NfFV0FktqbG}o{YFs6B_FJjq3L)JmXJs4tT;CuzKl}3g|)$Ry!;NXw& z=3VzPcz{`68^EgReR>FZB@RO@80p(Kd41pWlI#^56woeGO-ZVgssi@jO-m=fzvgHQ zOn=NVBWO{85uN`%y3XVa z@s-ZfEO?*u`1rI003BE$TyPpLVWH}mxOOSaFQ9?SPNi7+| zoF|*R;zMSo+!Rm9Az}cQ`GezL>`{kqJ5~>)ki;TH!!Z0`uU$0!>?A@(>?T z2clLyzavYBIa^K@gZZNKI`>;v%ycT)!ITlS@wtnnP;AvR;TlH(46cRF&g2}iVJ%AL z73Q2%jn@-`QqrFr-^8W(yly*|Mx&W%m^bMEULrFk8Wt7!g)yQBSFANhN+>tx?I6+y zMYwP~Elfi|QnJW!NVBayDA{{H#XrOE_@QGMRv}L^7q~NX;Lvk?mCtS7XTj`Rb-_K} zg-?~%TOZGwtu{D0FUsUNVg*vQZLhH|y7KeJ<4|ulap#QGO^}y`MeKzOpbEVre>@Z} zOIUKr`#IP(d79}iZo+~1+>avYa@tPE$T{SM*@6U<9$s7KXp+)Z*~~zrZ#o_W`?Pe3 z4N#HXRec}pv{E5W`)jP2-|Fpr;J(_O51(i1lca5w0M%F-p2r;=Me(m7r=W7eqr39g zIr4;+cWOwuk1p=wjPi|J(Ray!RntPZSK7%nB?F82{&lh321 zS2tgJD0cnsJxS<4^x`EMSc2s}#2UH(|82W;May$6Hgi zWVduzbg14((G~Kd+#E`tTAfq2HZbJ7T?3%`@=F;2Rlh}t_x3g%`*s@^m^Y5r1zNL1 zVQEZ3aG6nMVwcNI>n&6Sx!PiP=kv9Sq@9ZZj}jn!qnZj*SXTd-XhIre0QG4#)iy?5 zn{7Uwux#2d)av*xLD=hJx>sk}k#94?Gt%8O_@3?xO$3X7ASb z+UPSG8e=1>WTqWHL!O|cjpW{}!BZCKkO!7d)u}lCP>)G`4 z9`?vmFc=}d^VnIy43A~Ruld)*!oiw=M{q$4!%Q?5(FA|% zZDq_}gwkgRwf^pYq|IMB_c5O?bC{iMrN1=<0}3D6QcpUGFyHky?#a(WZ%DX#TE4I~ zxcAQ9h-m1BgwaamwTUrGZLP9c6Fwf4sLmZRyA-M&ZII0{gd+}Oeo8G)iD=R6t_D4c zl-C9H5$r3=&1-GA>#TeyiIhT=kO~-aY-(zJo~jS37h26KD|Cds#en!YFZo9k%nDCI zR$OeTYO^-Sn&AP?exnV~?l0$$DU*8d3;`&WnfTEQuGdhOKdVpKDowXCVX#*4{`Ku! zX-PZ)1r=MuqDsb+gV-+Qq{`S~b?(NJy64o-L?>OK3PtV?xV#78%&p06vynIuJ?qM8 zEDakcr#E3Iu^rQgtd(QV9(<#pfcA(m$`7QaWb;&oxuuYi*E1!GNMUN9L+a_0B_NlJ zWpLpO&u2)_(jjQ!G%YooK!m_gq9n};Gb4>j+iCJiE;m>jn>+3n5*m@n47a&2ro$^* z9o~e@Lobm4U|aZ74<%z313njCyZ&m?CTl*Ra)+T1p9KucnRi{aK%*WEsSK7ZCy`6x z=uXJ@Hs)b*(|KnQOu2qY_j24Rt#hB>w#K6cD7zvu=Z(wg`LM}tXg^kACPkK-H|J>F ztb;S$>`G^s8O9qEh0AFpBbvnbxfW4mD>U6`NA2-6`H0;0u&6`=Docw;3!3w}@()sG z)dmV+)3DWA3pu?-MtXNnIeA{Nn6O$e94DThXJlhGkWI+u(=^r^P|_yDFhpvZfrJk1}7~C2X%*nn*}5mw;FBpmWkJs6@{L zPz~dkvm<9l#-8BT%c$?pp;b4`ERY#WZLTMJ=^?!vv~5iZTetE$G$K-U44s%tIT{1p zQDPT2`MdH6D`jSK9#)0ycx|1H4144<;E>hOdchhh_5ebJ>$Od?^72|Cp5@zQ^@=8O zjrWiT@Jmv9^208Bakvev-R@4AR7?}69r2hTzHAf)3q%KP#x#_Ueqx9jAEH?L8eog0 z7y~d&I&~naQfY7bCS!WfOO=hzRoYFu8B9RRX`So`IcK?mi6->SvyDNMUfNdmam(dL zTrdh&uMfZH7b@CD(hE5ppBAgdFrPH0vbWH0dkfkmN%W9e-PZv` z?F-vHau}M;n4S)c9+#G{uNXFAS)@Qj7nH9m%hs+wCwa*#)Pz?Y0$4+{RmzlIfGKy} z01RA7_`b430cOZ*fUFN0b4Z5QE-VXevPaSH9euK^I<;_iBLrusDL=2nAX|yS@NUl2 z0Q2Cz0`Q$P>q!2B`s`0o;8843yhWctxN^**%c~YDN@Qwa@3w-rck&o^BB=~2m7&-+ z5J2u;7FgAUaf}s{DIyqvGvO*o*V9I0*|+yAyeZejN4?LSNS`Rr;#dbtQm%csTxdZX z$PYi?`q=-Y&;`#2=Ng&DJYM@gtu1oQzW5TK z^AO&M47-vhAX5Xd{i-Eg@e#^7>8qW+LnN&Qilfs6=|x7URloRTeBjs7qf1m)!cKQ% zk6FfeZFzL!1(SOX56aHPrgws_b#lN7cytW#Xl!O@zRA~*c$0t!9Omuk7_Kw-R3q^~ zhW^k|bvO&TdUd|+J+g|RK_9)sJldP=SQBAOQ-%W#J6l#qpUuFy1Ao!Oh+_uEX}aE; z%>X!7)XHvML~>56h0!XfWz0mt5DTGnW0T~a&{h$8g#^;e(G8zY19B(JOc0_A#1%!2 zXx&O-6TwY{65>ULRG`JT2W_+G&f4?HHykX~-ALdX6X%eN8e~m#6*#&4R zZ6ZfQ!^^=$eJmJuMEvEA-OS&0puV#3Cn%60?n~8M!6Mfq;dW(j&S?Zh7kYDknB>rj>t1x?v0nx`BX5)0KRZJjUWWKlv6wvM3E z$)!S4E2mug1JUFv*Vk}f-+|qWu*J#6kTGh6T27Li^&vk1J2y7ztjVM3!O?md-+uqkzy2GsFM70;b?ap{$_U;oEhf|3@of65ry)wQ)|9ly1~O%w z+Jnwh5jXNI_t!gck%j7HIuch$QG$Hr-4Fn9Gg#c(grgxRZeAX@R)Z}IEqHTNYuI0j ziEK2B%xBT`#ZX&)g;JZvwTGX1EJ9h7zdOARGi!~PHzfjHE&LK4?|SPz7w94KwMzx(7V;0 z_up-#&yRG>FQY!;OP#vG#jG-{T=^g!f}9V(i)p|4>)#`bqceQ=TP-t&VjVl zcUt&}`m!S6=+(bp8cI9YF)D}r4)wSOoepY`>_fLyc(pQ;@|BUSoD6r&eOMg4DekbE z#G_a=XU5iyQ=Z&_^fy*C?VQmExv>5o>cM`y>FWUDUCfbuR9>2;d5=PRrZaVZrZQgv zo;gtu8UOF`-wy*%YXq$I!{Z(i1H!oaq5uDe7U2YQ^=+r$*($)9_H^{4% z{z77QR@{RvU|&+$@9g%Jt&@~-V&_U3jDFkS4}l?dIpx&e3^gdM=CVu+cD#PW9IQc; zMxM1C#-Vx}8QFGoO91ABq~JZlcyUv5zRNEV!F5(Uad{8$#>p$*Q>J=>@#q%n44vdD zR-=6naLj!Jn;G}pqilW{AW*lT7w!UsDUz{ZD0WZLbt6`WX7H^h-Rq>>Pi26LHnD7Sr@QgiAa8&2Ew3=abhI{)?r{Gqd%UvcBnpu@en>2g} zgnAzPMJbm$yTu2Xue^?n07gDRujaQUX;0Q&x8ncBDnmCDEYmIk8c52pLZ}4+mDReI zmCWRbnBl(2$Qqjav(D%JO>As-Y?uZXIT&7egVv(M&MFujXf>8st2WQs$Do522et!` zNh*TKtgsWkJ!BtvOS8Z^;w`fTLzDFV$egUY2VH}Z)c}N2k3b5DDkzsYn{)e=Q=H4z zxvLX1Pdft#kD9NkvWh!_mKoeHq8rcY)(5ipnm%$63QR}XUW7@XI@SOre3-LWLX-p1 z8vEZ3Sz@wV)roRfii$Lp4L;ym;Q6EIAd_ie-gmW(Lnf6Pz3^yZ&#)j;t1fY`4GU9J%v}m!5YyLu|HnwuzFvf zzLTg)XyIbwoP0N?rOzNK>a#@YvJy~dd^DE~R;7IlhyBi@ks`IzgLj0H+PVmfd7~Ud zHm0K^Ff&{CoI0h;$_yBYEwJyX=I{!yoh|ix9GPOHRoR7C0Ah|>02@L;wcszZ zt1WEOr<>EOI&)7v7gBxUSxogi95J_Q^U-|Roz1eh{xZuw4KxIlt~({gBr8WgvvSMo z0Eup|N;5}600KWGE!>rGFuu{bqm#TMBB*1vxO}h`kHTHKPnYU?>rUja6|hC)kvGYS z(*tR%XZVKl!iAXd+u=sk*(+3R*L4ZQ)5@$32-AgRQw>z_hL#(HYRsJAd-`zi)XzSFE2a*3T8|=Zf`rc*Xj;-~8Nfe(pCv_nV*l&CmVj z=YI2ZzxluKH~;d7fBgL~-xllN|LeCuy}aE(T`VQ;C*o;nvLO7_T^mYyy2eJO=ERjP zYg1t_9JXTybwZ$#g*_|mqcw=EuUmYxC)T0YXR8j-WdhKnE7Bi-D$2|}X8Cw*NIIY$ zF|^{~dUH$Xo6gx|UFZkVmt&CwBozepZbw=xTZ;pio+l)V&T<%)v zqz|?NnYwGzm=xpGvt0MCQ*mEShjo3lP;UT$0DiOD;ZA{@ym>o!`hk!EeS?tJJQ&B% z9Q6e+Rp{@Bq{xF~JI7X9f$jAwc4JaB#;m*eU~`n084Gup}6dc3N0`PX<-g8grou$wioxEs$jZr~CH7?8;?qbc2b=hBQn*uJI za6jvOb@iXi_TR~6dnLoC*L^$DOyfWjP)aL&n6?HS6*&{927%}fGJmdyTA5oC{OxL; z(}bN_(9V(MBa)|DQ)e{cCKY{AD&YAm=l|*o5)!!qo)KDMS9H!TjL|R z05kKDB5xiP1p`KGSFbzSG6XbN3t(7xk>K|ySCO@%nQq09Rt%zYc&7<^aL$}>cOqJC z)lHHZ{`%yF&#gn&p%+03;WQut+~s0x>Vx{aREGGQOpe3Z2|bjJCyEFlF!U@--1Q!c zF@7Dd@t!Ew;KX&`*=nS00sBcyr63FhhGH7-LipG;2hexib_STkH7f_bF@QjwRXOI( z;hvkkGR&G%73b5rD^d`soKPDCZ(zX=I3d z8!;XUe#*FW=^3hi{5+twdrz*4NCfgriKxKrod-yBJLfO-GFB-SI+>W3ly-gGn*ss zXmQ4CQih=UO~Ayk{%|%4m|sYd1?*N#=Qn8J{Tq$?R6&P5yKx$LF{m6}3sOjs6)RDt zyI2`zZFw&#j;qIRy3WLB&5&=ml1%zIyHhinhCgxFWk4wE*!M%3b4-%OfBL07c%xO$>rYbfcuJ|jJT-NGy#hU&qvpZ!m7dnH()lmp zALa!sr_3f4i0~2j zO=YfeT%?We7uCb4QVR0-cJ8}Idwnh$%X>*1^_JuD4rlx}Kn@i^rAup@k00R*ztI55 z^`&z_D6gYE43^0NTK;Hg?n2V&C3Gmz0c@$NikBkTlzj?CPha39+w?B7O>Wq?8uHe z^tOY6WAHFcg0|LV-6KMs1rpMsgL8P6w2ifbs#+7SA>xp{E}#}TnIHta-GU(;lsa!1 zRufKHY@7$8ryqFe6kDUzlnnq$kt;mP_FJP&d8K=vniPgX!HQa{FcBMri}}Je3-b%N zoUE*jH|vN4_{pOv6uf`S@%rBCY%w^&loJNhX^eNcdG)jP3069T-$oto-n$hT^}Bb4m4TcIjK;IOPpE>gjkek@fUp2wK%u{JA7b*WxZo;hCMgrm*qrv7Uwo*` z6DtqnlG$MTc|iToTltHFyjaoaoBdNYVSYP%0he9SGY`*HYKM(b!%~78xGPqf zQSr>bTJbt9=ac=u7c8o!q{V?6*w$e08YkXAm_k7$E+qNgC0NxRM7g}@9Z6D#R zS5^UQzJ5W1jvhWN0+z9GhkQcYd!po8>+x&T8vFS&8Ef{9Ka|x>aUR*DEg!e6dzmKD zitaJEhE^m8W=V5yHd=*o{s8>yMqDYEZalP4EJdWV**3!{jY^b1R3G+B+ zs*9@PS&J=OO^=XtSQ7Z$15nIz>3!nNR#a}sd%`^S(*}X(*tp{er%`xWQB`4c*TEpN z9s&BNwbMqwJ|>mto?hrZR^>VeQ@+Nft;?) zaTLev@*^^U5JNOMJ_g=|nF9_%*W1u(shk56B5mAC8(g&R9(5}{)tDf}oiDpP>^m># ztwvW9U(IPS@rqO2TYd6VD99#}StIXxVGfgSv;!{X&b*(9F+4%OG8<+r-esFR8T#)z zfcO*xq1wR_Z;stC7UQkQ{ygS(3JesL&t3$W}+X$T6<40jLKS6+@9Kl+QWzUdEF?aU1f%zLhDRl+wX)7tRrp z>#<4IfBNnK#&Ik>MA%KMO=U*Xl!09rPQQ`FBstF4Al+2DJPxO^E9ZFJheIA0cSd_vZjuQ4So(OQm#qfoz41UlPgR5 zeXXPmbwi}<-TW+so%-(0k*8%B+TAC!z(^QVE^7;e!vPL=eR6cpT5nOuXFWqn*zP&$ zFDVBIsKHV=w?dcZupFmJH{P(cW0zPch-U}E&d*kk*8-u+K*$KRs=4moyOlK*$o&+D z)KgoDv_%QBIkuk-_nw)@j98jCGc;27L={S|{O%GTP%Ea%^YWlSxHqm2^%vOPCt&5L zSvJ_+F`^W&$mBq}ZQfxv!G{?0&~p;jMzEXvx+-Vcah)b?H_d>>* zw8<^V%m&(nfqO0-7L|`*#|NPSCdxB4y-e}8;^gA7cxq3@Q@0i_RL@4!3VuuM=p`4b z&VrM1T14Gm>E-f%w3_H3<%#U!BtXryCud=Lp7&)rnWAeiSx|B(E;VH#8QV&MVQBEq zx;D^sOB|N*!hv;(>A=BfEoMOKrH*AG1?~-P4WuE40DTATCB~^ImvCsENE^ybaC7m& ztwYb=45LrV4Fsjm zCb@Htv#D0}iWy19Vqq`bzVNYMQ||eZ4mLG@7@Ss5ty@Q|4O+nqkG0!nO`TE=ap&H1 zHomo|6imLfFSy)ic(S(hw0s3(7@WEA=fI&zVq?`#B|mXIIKGa}(J%0gE1lOAo79FY z0vwMRu`}JZ1N)U4`3zRIA|4NA(*LaNn3Pk$UPbC)StXKOfDx&^F9=p(j%v9}hSU;(dXohL0i(ZvtF!ZzAfxa~Do z>rc%$(*$ldLeU9mvegwO0gR~JM?rIQ#im&+ekmkmNR@WoS$$eY#yK?gvUltNXdf1? z_-3TmBIO-tw;jD@}fTPb{k+iI{clM`J zEQK>HX^8>}X^)z8<4BT3g%G3_TKJMRCdr#ZHvp)kSM6*>N1@5#wSw@;4Q3y(RC-^8 zQ#ReQjW_vRz#I6;9yuW?+uLm2{ zkrEh<`lw)Vx+*x)f=<2c-1ha~UfF4Zy}e7HN$XkX5D&2gSb9+I)VWAftfUngjtPZy zF!*~Y9pizZZVkYWaru{#O65zN7a@>Eqd!*=?2z0z`p_5HR=IY7wz&FV5LYmndn%2Z zqJ-V=hRjYtg7z$Q7V=D|?A^-NGN!7?+@5cJba zx@t5GcLxt3KanWy0GDg{<%lx1*xYGd=ko1sHn|UF&XOoQbnugPOyHlT`pOXHf-<8n zBuu;NIGsKt;^RG5FQ*D@v$DW+)1-#bp*qh!BV5uhbm7!bhZ5N%?U~z5yI%J7+#nWj z=e}keqjgyGB@OaVGJC@owXQo_M(JGdZF0J#?4S5buFcUfugRLn6de#8V4vh8cyPo$WNNLphHH z$Ue%c{I_@=hm%#FKx&d$Uzwk58Ig6b37dI0By%Yh3ZI)h-)f5t)hWR8fzoPgb<(9X z1G_ltsCs>?R7OCSRpY_5-5c=@N~Xhxv)v4;bz4vORxxq=V5-w9Bpd(&uYxoXK9HTUU}E9L2Vk)&|oDEgVj*cIZQ z=EHITmipV) zHkmeb9t_o^6I5w);U1gEJE@44XY*>sJ*B~|kJQt3a&I8GZS*Y2PKRMBI!Uqw66zeA zW`Oo_=ugR^bSFToss;JM$Pn3KPR(Sde7-hN-O(K1qoe{^h?=m@cI7vPbLAGur8(c* z)TGtg8c@lBBmv*lo}2|iqzAQZi&fwfH5~A(o@Vqu6ufX-agJ1MLWAcXw$S#zDfST} z!tLX}1Xx=_PtGeqQbIOJbWW(Upw|M_qkHd8fx$C;p_%!~1VwdhyY#|mR?XKrrrpY_ zt7{*M2i$Im?lk&gQRf&^Xj+^N`v!lNgQG_SL4!qGoan@SxKjjJn`C{b*Qio>9ueZ6m%%fw{fwn zLXYB{=@Pde(Q0qK_ag(oK8LW>JJpFceG}d#`~rt@fsQtvwA`_4`QUOndM+ERemeNb zYAaMRn(~RnMY{y{{UMDpJ@(Y;W1xn(?+?%Sp(OaR@dUz_B^fz4tZ>53N)G4b%sa1~ zMC@)^0I8n%-_i00-*pK5r$Fh%+&z6QF!d+5 zxNDA5*}sD@Hf8MdwBhsG1BUOa+NEo>!7q3;GdyV1IgLDVoetp=O@d|BJvhm>Oz}VW zKG;c_8@T|Xkp@hc8tLZqa0*F)z2z2$y=J+=Mk>1~j>-ZT-0*Jf5qJ*O_l!0NFHnLa zvg>UOonke7wjpO9G-;s9YExX#why#=>&10WgFMz&YOo&jAw8zSNuuXo%01Fv@f4)I z$)(FoCOyBbWE@ob+Uua{tXC85@V;3E$lN>l03l|8r`NB`Qg>LTqm!$i#vQPVz|6ma z_t2hL9xWoBRAAn+37TI;NF+&4ZDynNA_To!*>Q?#Zd1s4qs}nN{1E`z(;FLVdeXDJ0?gmdsbV&V0#-c;%|o$O-AZ(0W@K z`Zg{2tC2_oR5|C!lKUeM@1Q6#nI!W6MtVRl zE0K@{=^MbZ$+}ju5$tT`K)&*6oxgXhj@|lBkM)!?QxXf~O;r&73tJ6xWY?Wr!)-L8 z-j0Q|y*PFNha`&_RM{Ae@|CE5p6pu&9(j~*DW$fKHFA*_*M)uZm7C5$H~&<3j7}?i zM3Of4IMJG}Hc!5-y$zAuJ@dNq5x(=litNFsnVjdssUtZb6hmZ@JFC1&2%qF9+SrrE zKDMXPt4FkyPL)j;aixn){r>^4bXUdrfY7RNPb3#tgAyS>D$1){avFQq21~Z7<}Ah> zN_Sp(#Sd+S3iCSS3`^ad=p~Vs-t$4==z|ksQQ5K?_R7MGhHULEanNS=3NTgQpu zarJ(XRX7J_Vvxi*=j+}2{@qTcjWdol!h58DGedqgKr*;&Hq9VbdfSdQ3>L*S$} z=N1%21kc^UNyh;(s&3ASVPriklU*6oD{b@@8qu?%1|h+Gx`Fde?1r}+ry*>U@+^eH zge9`&#Qsf}w={`|Ax&5d85qX`Th0JcDKipsQ4F{AXJ%_X5#62#snb5CoY2%tVQg-l zSyvifxAI1vvT#|JZr2vIqPrg>a6ag#<>*EHaALvAER;a-`FL6d>t0EGc9QJuSlp6q zZ?Mljks-)*8rMpbaNJ5c6X}|Hh4x;k=2pZsxtv|EinC9JR3CjU%ss0!Zom-Jin83dO3I}8 z_?Vrc+zDmKa{3J|wKIJ69%h99ub2iS3<>X5f%v!55sS)N#uW^E(4NE$xd|tFKRc)` zFZ8aMORlz0ICAN2xN|fuyXVoE021YIu=c`i7g0t&5qU~RV0oHa=T6C?pq#2k(OI)( zLtKpxZ4#<3U9d?aoXJ6TAQyE^7r17&k&wic9nrXksO6mxp--w5HBmX|13trvg-u4X zc!+&a7{#mjbh$_KGzsPRI+Ijl7OhXBfOtEzNg2u9Mmwo1TCUT}>YYjad6kTmP-#}E>t0_9U6|E$eSuBozizEp|$Ub>Uf%!L4uXC zux|9O8Lb7X-lD{4y-|&6Ms<6XvgTm&v~&aneUgf2B%Bb7)V505!6-!?coTWiaIe?K zxMjlg?wwi2hCjN^qHBzPgQtmu`boMXfmv?9dg3v->{vEPC=emBI;{ zIn3f@)T!-c&mCEeWv(@ep=<&zyOlzY_uS4Wb9e&*6{Kz%`JNq-1GT~YY!q1<7;<)O zsx)i&K#|AuPGPcC?Ko26)K=EoT*w!Q>@)|>h$giAiW0JI{5ZDZEj?HL)NYX{Mf5~! zX=1({Z9FxG949XRY0WX}QSLu|URXcVO0cj=+W1Bk6HCMHI#2;K0{CN7dR zb`D?9io{#UXfXp~oYV1FOZPCzDiswh52X(r%*0S~n;TEwKrc4i>DEy9RR(yp+9`?3 z^DblUQe_?@a70FNpXEf0T^YCCH0&BtWUtbg@7#=?T8(8D8fI&B@{hrH!RNMZ!`2BdY?HA}Zycb~ ziFK3$SzR#5+i}|cx5~1eBWq#Oyy059Q+_zuA~9J@ADicPF=T+AI;rJ8TIuL*cgv-u zZ5oVq?OY@AB~T(ReFxgRbAlB5>Z=T{>p>C6eDy-D@y=6@+}a&XmDW}w3eCuAr^(v= z03u+jU1A3^)Ha8n5h-Dg)xA)xMoc@I%&0zb58&IK@pI06lv$BK1y}sWlG`VUS&Fl7Fpep-;zs}E`^#_;}$;2o#PyAXC8DO!w(`o z$B9V&V6?fJV=cV?ELX`pwYE;4)HXQ8WWv$eu%eH#kbm`&POaw{)x&F%iz|!KJ6Ts- z;$c|Fz13~iX%hr42x`6b%4cRw*LXKF^o21K_nKg2HNNpJVPGd_1c_pC?O{ltf(#P_ z&fN1}d!lZc8ol;aiEG|yFuCYcOFvkYJe8)`E=j6XSEB`7Y7k=Boj+;jeSQP#r-Uh^ zeS&+y7k@q#!cnzxzK@NAYYZZn;1PJ9$XaH;q&*E`C_w0YGe^J4VpM5uX5>u%Km6bS z#qa*<^Op~w{QU3!d4GEM5e(!1bUjv>FgAZn=o>MZf)G1VuAca$_2kxI%5-F!MuFjz zchMb5YBjWRLGBgh&zk&NBwP6CmgruacmYBO}K z&9N#mj))UX+LF8mrliqWYo?yR?&$n56V9RFiw-X&&?FSUKU5R!=zm~Pv0++ zFrHCQ7Dkv`PTj$q>=>mpRou_+8wL?^=s3E*dr$?l%Gk_nI-%rHhe)#+U|BQu%s8IV z$K57X7pD-kM$ERfot5AIPR>C%Ssb;2h-#%(GeeNlo5X05m<{CTQpb#0^B(jr{P|6N z|Ka#EoBG;o_pqt$?R;DArXqWG?lg|f#S-)b^HH4VLXl3Tp#Ph`NWwPp~ z-CpyUw0(o2_CoHSQ*S4KnBoZxLQt<|#t8X9rO6*|f{xftA2wB(jLBAy1ijxXWX-nI z2+E2RI@9UjLpCp9N_xUazo^V~@7@FG3}b(5R|Z0;0gbRaDE@&|7-+vBI^Y2lW89nJ z-bSg&BO`&kTg z^5XKgye!uVB1#wx7)KDEdO0y_tb+Aum*9pI*J?>G`-C+Z5`8j=G;ygCIP)4Kbq-q0 zM`;7<#F&CP0>^piq>hvHVL$(?^WlrX|I;%Y`r7OEu%Z3!w+-EODX|;OdlTn2a>=!C zvlsYTBW}lQY^7$4d&tQtr$i~9?m7_{GHA=D)8uHi3PIeY%rnxIiMnc`3VciExiIBY zDZb5;zkBP_^6wxLvXQZ(xH&wS38nkPt(&NKk8=)pb}cpaI9^ue97W!;m)!HHf<|i3 zNqu`BYioJMrHt%0HF#2I@(f&eRx3n^s*T6v(Tg9^S6;R6KBD?IJ#DAtnj=w0S^R4B z$q&dl%RtYXk8hY_n;3SM#szJhK`Ogi&uJvY%R8n`UD4L8%+&^?W=WlktEMbQ(UK}Y zOP09vVAd;=_QQ6T*@Qx`v5R1tx?4#!LyB$U>T68X%j63*v*y?TRpurHrkkgi{6r+h z`A6g3Y9<+fMDFvsiUVii%-K#Jd1~RMytR@4kF~^U{vK^1^+$qxtItD$B_2 z&CK1D#ETVFp3cDSojIL1EuSj4!fI>ksMXh?_It1V$mtVSKpnN$9=QIF;VhqxnAQ~^ zSIS;o&phV}s}39ZR#}fb8mAF=Apk7|f^ri28?^6$@*g+pHgSJ8FwxnzQ3 zn4Db}Vo^M?V^N&6ai`2llM=F4U831;(zB(99sMuAeE!QbyZPFS_RHOD zZ}WUx?{3m7>5>%v^S>jal@RJQ8JEYiaLNcR})9MtCW?g1E{}uv!l(QV1O`0Ai&OGTB_)6ROpu zeZUy#$d}7znDUG^bM22u+~3^m%iYLlw)C~v?%S6BhmZDU|Nfu<<re_#K@ zf0VcLZT;`Q;cx%j^~ZNVetGx)f8HN{`e^1sc*N+VMj6f+P88WSbvu(C=Inl8Iw|+n>?n};7$(5PxHk*PR*fQnLXAlw7 zM0q;@YyK&`_S${>Dg5TXvhTj%J)N7G-2&%f$uX&w7YJ;NfrXuk4DxN(h$fSa=u8@P z=0AzCTVjN6nh%%>Dnk*N!l1~99w|j1rug@n(=XGn0ybze=r_eoj|XI5wJTh#?5hG$ z}nm`dMY1z7FEhp8a z9dy#{J{1Vl^7P$_%0Kf=oad^Cue@--_y+&y^tQ;?Gcp?2S~Bi+*mxH=8fP)ITuTFW zERBa^7(6+$9+i1tqxU~%kx6JV0W3&UmohioqbWK13))*yi4HyWO!go*5QtEhn8l3x z_zlhwi3+C_hK~+`X3{i{2Ab%`B`l;QfE(x3ncO%*9ynY3%DZzObxU2&MW|PmdgmDn zB$J$uZOPzSXZQe!IhHpa9I&|i)`uPaxAEEk&yB- zm$&tAysW?dr=MQc?zQ7+uPGdzGVvim-BNaozPqP2&zRb{W)21vM&@WcWmD74N3b_T z`yk*xX5TuDXY*jumg9`7G44j1aJcaIWr*{3owq!GwQI9!+C%2TGk+#O=YY%s!}XjU zlVlnBw8IyXI6nlGv`$V(BtoYdjK{zZeaNv#-5^-_?@kZU5RE7<+XBXoGs%8t$>nfGDe{BzMA$ zSq_QR3Vh}e?}B6nsN_;x$GL_CQ&4i&6MURPNV5$_&BxI}KFY`3IYN^QQ*8nIqQv9L zYA&V@UZ*;K!d8()d{}y)-MwI#WQaZ3utU zML=psYNe+=ol{Dab?Z$@E=}^g&g_RzKfO8j#h&dCyzbIHzJJr(_Edh1I_Kbp<~g=W z*r_K788CnYK2W7V7Xctzq1AfJiSr&D)H4WAA7-8zAla#L9FXh*bIOh%IpIBK+`mg% z3{MHI^xhfR_s7F>cQIz}H?vCB#t~@WJ2VeJGq<5MCz;TxS#<0O&u2AHb5yvZg^YUg zFc>tF6Ek9>g_~r(i{`E|lbFa}GBC=seiNTQ{PgDeHo25SLpt5Pvewf1!c>J7~!!d|s5;z1!|DFSj(kEnnZhxu*`eLU(jdj{M{nZ;vq<5FkvnY!l{!xi7lY zjF_X6O425b*Hz6Oe(;L32>^|{s*CdmWGt&DqT|{iM8lSh0Z4NYS6uV)7UZ&so~pp% z+zG~RcoA4cqWq(Y*K3Piq((?5=Z#*(7^nm;NeFvDk6mDnttg`~rmb6_Whatxw)-k) z$Y!iyx9$L?_oU z*T+`FnI>4~Am<3t?TfwVV=zeXDm84AO)S;!L@^_cx`Bsbq+z0h2`|km04E38tnK&s z10lqZorC~K`;0y6+Ozs$=4H;7ADer`znjfsqpl^Hv4Lq(kw*cCh}@DUR}3kNUm6KR^1i zPtP5jUVH7nzv7I$r`=KpYuZa)e4Fw@c93;Yk%#QU|2s6zU~J+v_|L;h5)!t}yC+6G z8(9Cs9HA}%{TL($T7 z0=Km7MP;g(Njv+@5y!h!X8VE5oHDy=u2!dTGR@K|&7m{rSyv#SDW+42$Gc$(Do>ql z$9jBjf5js!&ur&wFWciITD~=e8kDsN@i-ankUMlsx+IuvBpAo?4amc!i1X7Mn@B7y z2N}$e-@gll-R`iJH=N6nyW?4kh~=ql@L#)g)X|c4*w9Rpr#x&Y(_*7Tn4P^y5lTBt zeRsVssaVI4X3M9haYv@sXhXQjb*W`Cs5qDcGBg^iA(guBBtSnvvoamBD~0M$Q5(DB z0wyaOV||Y&rXN2X`~3U2Klx7|-u<7?C7)h<{T?6F{4Mwdk6mbr%}$JLHaQS3;x-*+ zt;Pt+*wwBQYtCV*Gi)zwV!+xs5u8O|46Kjb<6320^&kt&D6iI#(T69H2APkJ>%wGI z=VRM;kUEj0TFV%1+USTEibp43KKT>&<&rvyd%FW;C-Me-cA#v7&w=DT@@_R|wzQ$| zCClW7WYNUVBM3r7qU zPkpOj-@W57J(9y(2k}$jaqkU;YqZ%B>%h0BXV!y%PjYP_HG{FuwaIL^0ln1faXup6 z$+W=Xo4NY+Yyp3u%mT-)^R~=E(jO++e2i8&#N8|kobkX4m}6`eNU^wN7Nf@2f&Bns zTsz8OYBWtQpAyru<^@!}%WNq@b_GwuSqZ)eL`P_+xA5*R<>2 z#Pe~P*Iv5EfJOUu|IVYY*~kns@NJ zgVcPi>;G(@e)#<6qka1P?34Q1tM`zC%KwsrLMzZZ7>(RP3HjNmg4%|=gm5)?24|Q! zK|!Y*_!eb5VRBTgM{zWh(Hr9~DlkZx1Eq$87I6#?e$H$;bHPc9k1{2(9sanj3_^Hm zEBt_rVxZo`jeK~b!;w;j7UWS#7q9+2SqYOR=h0_W#-cHBrU;N+#! zORY}`8$F0JG75pJ1Q;G)z5bVvzMp$eUwhrYi?yY1&uO01`Rj>Y%@38fo_BYz2CJIc zl5_&a4ZO#BOaTLhbpiGsAR%Nj`PkfAnc5Nt4I67&cbJD+lUAI=CuT|+v+uUFA}8 z-WhO!L)9cz+;TOFn#>U6GiMHB&=?)VzIIT%9d7=ccIQ~>WJ@4!uNfnCCb|!FpN4_v z%Fjkd3)pviALFl698W>wuc6}o;nQTPPn)!yl>IhPJSCf{{c^=Nhwb`g8ES?YkP0##`#TqZKA8#`6&YTH)f#XFdt#<$$)M<(hmgFw5r)dA&T466y^bZM}Bp(-Zj2zrQz zXwr-#c`o#5ovM1{L{Yh8Da^VeNJH9V{g=M7jO73fiG~x?Jt!Y5IC_b`8283^?RXwN zF0XE{<89$T#sK=0eZ9Z zZVi4#2M7Vy6A>R~1_}NP2YRs;TmbtNgPsm;ueWsn2bxaz!l;sX_KJ~W2g=fA`5hfB5lF{^sK!et7efeS9_n@yaXsSWo(PRtju$T%4j| zU*W%J@6wpZ%@y_;v~+ZLqaC>!dSwjJAf{BDuqC5bi&kos5}=fLM}~Q(>7;8XgmAUP zsYZX7rX!e4vwzCSa4y|VI_7J=WB zNyDqH@_#-h@-aO@a5*E=Z7|39&6H7Z#$m5-u(Sjf$7a3zr6eL+4Sfu zFX4-ar#W{zQ2bACjQKB(R8RusjdL1n7$|H&2#q;v0@QFQ0iGF*n!VB~=a6Vb4l-BY z&Aj=(bCCR`K}Rn*os9c029U?HRSf(4BPpb2aoDIZsc|-ipuyVSYpJ6X=`v8@ZCRId zHCPi2Jo6k)6=?`{h=f_<)KSryfZ%i~1c397**6tMFAbw!H9+M!Ucg~le~fwm!#xk* ztoP3!pDRhc_VT@Wd*$f7>>S=;8Ec5~VnJI!`l7&NtJI7wu5I;vDuleFYYPe~enf7J zg^rNEG*J*q6<|xtWlJZXQ!~;V49jR!Q(qW*RzLK!AG4#JDS|>dA=_)OkCXBo{qpK{ zXQZ^&_SAAbmjsw=Z_5<*nXTm2hI*mEnl?&v^~|2D7l&KW;d8)z$ksI#17ToLJnnSy z+K+AXe}DJ&Cx#^a(~A%7Yp>yp4=p*Vvq)0e1Z_}DZ4;F(_!)}Qa5)z$Fy_Qir;3_{JuJ2nvOH}MulY(~QXgYKrVUe+!wYiQ4qM`u z>$Ib2S~nofT1=H|;KrI`XnIkXB_?N=iF*yh> z8O4my^#M1BQD~8#ITMIMh2{L%bG>`}!k)hN(!IE+W6o$00Pz;Nj|4sbGA&>Ru2_SA ziHSDPr7L6q#TXkHBuB^&X-OSLI$6KcEHwvOof)+Ha$cSym)$lVy-2s7n;fa%PG6rE5_-+ok?)8d~=`Ia&_Y97MH=CgtEYb3X7RgS3p^MEwH4yOLVfiW2eLk@&CEu3w*4d-s<&A3yHi zp4-}2Ucz5It#|r0Kb43fyKkiI(LwdL8|=GuwjFikF*%n^Il0`Gkm0L=5=YTWo(~dO z9gRO8e}GVjP(`1xX`WVso?^$3GR7FGRPPAR+H{9V{FqErfWwN{vPsdEea^HSZ^v;` z9(`BdZZVZBDU(aOWf?r%*yU`$=-81BVWk# zsXLD%4E3ou;&C8Gk0?MSaN5nv=%8=%6 ziVp!Hb8TJ^TPiA_W!lN&+P7NFXD^48)MK_8p92A?!&RVgweqC2J;cX{5euLmQD6jkvUn=;k?^%=u%N z@iYCveaEN9TukR}It!wsuK!=V`PlvC*l1ojXa zPs5MEwTgPHcC()Aj#NPqQGUe|r^Wb2F!!}AVzdIrN^hQCCMN`@pK?Va)wO79>+$A; zinuloH=aOMVTf>wM5Fc?6~RzWTNU91@~*YBtx8i5nrQ3HiSA;{9E~$B=39XV{F`&F z_^az~o-z*xLIdqWQ#Ff#A@vt__wSE=`t!T@FTR>zdlg^Y-YmM{s}ICUT(oPJhG}Te zP`oyCT6ojVZe^$g8Ci z^(Kt>81_#y4O_bzL~9>vZWCo3m%XcQYxnm zBuuptuS;e3r_p$nNP{_oFucB^RJzCN6N~X2E;0xGZ3ew!_Kw(zND46dlQbaW_68DOC@_=wf?fB`;2MyKu4CMQsnnhTowdjcAO5DoPR14Q>7=2Rd`(-G zGS0Bc!2_rD@o|lAN%3O(K-c1Ev9^v{7?==w>AU+6@yUICe)(MW+ROOj{poB&lFF3FK783HWLK+F$wi+t47Ir!po~g*v|(IHYxqQN($0{oX)AX~FiO79 z?kPF~aBZ=ZlWCim2!h|HoZ3RCqf+)f@?H`na!r@``_i50x8L^n`KR}_7xBg2H8Hc~ zn)pzc#bqB@y=tio^XV=v+8Q^oyRcJ5Cvk@ddCbzcA)Kz26R43-S^~3S=OsA4PCq@S z_?>lH{A0?wzNaXA%r?e%m_-nITUWP^h}lLOYN_H>@NS7QxVjnTuvRjDDLn1L-YSiF zT;!GPX&atO0>8MARSF@CVUgBTE=*_j5cN#TsFS9vmt0-rrC0NBe|-1;kAHdb*?sLr zd~tUVN3&WzGkZXKBaKe~1C35qJ! zb}=|Vl4_zGNXv|oVJQXOJCcY}qWb|4FbJ|p4z8C6o?fq$$6{MoIW@gh&-m-^J{O{S zPh67-41^FrQW?~!qEJCv8$P+HclRpb}*M*Yki%!a#;Bo z`fM>UH)Dfq(kTgJJ3## zV;ra9Zgb&+tiyNov0|YTgO>?>Zl`_5{4 z?z;QRYxwd_`O_W}Z2SEM_}h)w3%vl5TJd1T|eDzB)jH(@lFuLNbZXOXzQ6Lgb} zIrmcK8e^3StO1a^PP}WqCEIgYu;ENSCnuN6NAOzQ+r|Na%0;)pcde zjd0#UosDsFNtRAI;uNl=yHi(e$Sfi=K6Ay0qg7iq`*@sYKRGmIQlyb1fCw<^c$S?q z42PD2;_gC~o;fa^y81Yjg(591*Bc2RhSrW8v{r}?No4NuGwdXkvEJm)%@G0KBemsa zj8dDuu)qKKw7);S`}nyxf37$5+UxjowYglFb01l2y zjyacCBQCI7NvKmaDP!5aciq5>_CjAW^~`a~nK8h_V+T^-MhB12p@kshdu-G*ZzHyX z`jpDq1jJ8btP*9Kdm00IrH7X5XoNz`m_$I^q332y6Eo{fntM@vkBauBDObc*4ZmNp z9d20B`Df$&QsUczfH;>+J&NK#CYNRpm?xnzKDc0AC#=1hx)d0fUq z(-n_u1r>H>cY%6%i$E+bi7aAHyKK|UxGT(0K7u`K72brnG_c!a!l*Hk#Xr`X=k$#w znsdZm4?m6I6SgGgey~9%@9hfV6+>#QY1Ad%y6UK@)@r?^xGAM+f_iDCpyAy*DJ!Ao zP_icLG25II{VpvBTjOuPo)Z=y7CcEhb6+iQB!TL-YP++UEpi)caX31F`0|m0`~BucyV%O9qLh%9 z+pZ`bIxRy#z35ZF-E7-R)`*_>xizOFfBRPSd_Ci}m+-~CU8n4GR5S4Y)KFFBm|1pc zoA($$o8w@RV6eEjt<%yhfYf>=KXE|d*xd8xg|h?xw;nwO2ZzoiQ9&%@J8q6qfM8s{EP95mrCbrpU7(0qil?2Yy$ctMZw$~c?+f$DvYI( ztE;E*8V~cBa%e?}MJFY@rKD2#z-c++rM><8_x|N?6(e7J6<_Woge1Zp%Jsh`4yGC# zzv~>k5e-_S(hH~3BiGQ!q%n5t@pKt4t)Z=71^rRV+mSZt#TQbg5AaAUD*o$TGJ_6f z?yA65c03lF=QtI`a4^S}rkj>jHwfER{LWP2>~Xn*QlCW!-r2d56K{}EKnFy=drm-R zS}Rlq8(wM@b*Cij?KTycFJ#N+wT(3k^Pl!oqv$tZxA%ok!Yi-g%crV}z8TfE)X zT|o}d>o4uQ)JNv6Se3KWQ6;F)(q|B&o!3~Nd$u|+G&V<-z6Vl!*_tHFDP(*-E`>*# zC(_a-L%8NN!=D*ERN{&`ijK&3G8ngE?Z{ClM!Q}*RekvA@Bh}r``XL+;{IYqZwE46 zKX}RqD(~jC9Su#ZBdd?qw4zuyJ(TV9nZ49(v$=Y}pMZ@sWz??CsppD}d@YV(={2lYl0|!$g2CNdDj-aO!+Mu|3!p*GByY`c@9e139^TzAodZ~wJ zwoBFa9gSR^j&b=|K3p>FCRc1)WI23sBLHwfkH1`7+G`Q0i+Jf&^=*Hje|leg5nulD z_8}lP_RWFkQXN}^hNmTZN@wCNW><@Bttrv4YbEhivfN_0Ejw0W*L-HA#6i-_|P5Z~UGo zQ=iC$lgip@GJdh{=kz|w+hUr1AYk#A zQaHc<{KxknKELq%zV;Hn+$*{U#-)b+t*5lMrKC7Nb?eMiHdRee>$IhLQReOLDa+PF z9W92Q$*6{;(>ck|Smy@{2>b|?6+KPLYJ5oJEC$Sb-puWtC68a<)ba#Q)2xjt>UwOY zstmcNKJ}bl(YNZ6LzW5aGO`tKJ*6pm^_5}g0b7zSHRpX+uA>KjmWhUr;S5G3Lvwg; zvALx})1bZcQcdHxe}4DAmKUGg*IvXIcUNadQ7@fid!oe{gM=T`&KJX8VmVlBUiL!6 z^7`K|-Aazl(rY_=qsv{0dmRSM@?-(YIZAP{nmN;#MnZ^TK5K24(vOz>_~cS%n{}Ml zYJp>?PHFxe<~M?ozOFfx5$iR4;~74UQdG$-O5(p5l!a|E#@YE(^-^%V+M1)c2}u!r z=}2R!5VZw7&$v?QsxQ5rfAh4vFLaAudktTHEw>_8?(vj%#p3OT#%+&Y(#ec@AIocd z-9CmH1N$6R)5YN&v3zNy{Z3SF0g7|B#UkOx`^It_!;4j_2et>Fn8j!1=oOwnwgP9b zesmXl;IWK(s?|47Ff}y3f>O$$c?X4PctA z)jHX0YBFr4bn!$L?#USXVtnq`Pn-L~Yx$Lz@Ws8|Vnu4f{O2v#M#&^Wpx70jCD8oC zA)ikm(fFKFZ%a;}Za$m=wsyQU6X}*T#24e?Hb%Le1JWn`q~7OI=kzRg}Qs@WMVM=FlWxx&Od zP)cEt?XhB@lA3s{Yinj@RZgviBAaSnC-ltjF&sS0@#JG$T`Zf%j@6Ve*J~uh^+6(u+0p#m2eOM;U z(5M0}X+c!9&QZEhCx~D%i`_q@B#DOJfooc~>X;1y)!5%@1*Wae5lUy})S#jUnJ~oG+L_k+oMWD4R;@{*KeTh|q~TJH z7)nCfGUAr2@IDSaqIAaHgTVTnlNRxE?#}pBdJ%y{AZ6@Frs}Wu@9oFu+@`O+Y%gu6 zLOwsI=Fv&Cl$sc>!LRMr(rgJ;cK{dII)=soE!3G}7IJ@6Ey9O!8F-GhFB zf>1jfg4-R1n^D(_bONVnX=Q+%%E2VMm*ahODKqjk;>x-4kv^%N$LI5DT=Tq(c2p!AjXiRE zdh2(!GkS&qzpQLhLA;b^Xl-?LSHURs9Z>3D8+!A#m+!@WwW7(n$qS5kf>)V5boM4T zE7QJn$DRT{7|D8iR%eWS-g6&R(S3+DkV zeR>lL%=oEVk9-C#&uGbTHaQDBdEmdpS^N7xz4>Tge*Y}L$$=;u=I|?G#;0p+}Wt+*Bsq&ob3JLe#R!+D?U&Gsm4(J8kGrDN3tj z7}E3Zy^iWKPbq1i@20&{mAq{W2VJAZoJ97vdHP7{2-9%LrZS^m{PA{N-RD7=7JWh& z0DQqWSZ0-CaaxY-Ye^S;peZBPzTt68|7-ut#}DuQ{g-$4tcoR1de{a829EE6LgC43&{us(tzGRTZ7< z2EH`+9b;#0*z1zk(+q(0n#LfMlsQX@tTDGx`pZ4lvh(AOX5|`52LoAkGBBZ$Q?`x` zy%AE|8TW~7F#UXD3zyff?L?G$$4ct|L*3i;T9zZ{nZQi9J}i%0GG;Jy?aKkO!H6J( z!JiWm40atWD>I!ZOH%v7zkTqolUa@0dmm};HX0D%3%OfWTxYLE2H*F2WXIw{7-8g8 zq%0QpE2Z<`^7lx`MlANaP~uY?GE~>g{Z1$F4}bdVS?8CJAI`&H?2{Moo)Grth^XC9 z;~uq*J+f4RfCRZ0xqz(`ZDeW)X!ijEeV%^dj|LO96ocfkOefY`0 ze5p^5Zg!r$gg3%UY=*zPNT&xK#h(oDam{GNnjBfhts91^LIby33e}MTG6@Xnc}psx z#*C~e5INR0090Q?hX%Z@x%td-AP)jHWG6O;ZCtl29dq8ieYVS6V0VKbZN(k~{%oto zExJ}?V}d#((fnz;+Nwi(wjLNa&QJx!F{{fC2*iO)m^(-JGm{!7lk+N%5N`5mUt*UI z*LuI)m$z@@-+lW0Q0)HfRr~EP)qXwN3@<|g(n4dW6>^=@S8qu*sp)J-!Rwm)8rlVt z+3lK&EBE)^tzNDNfT89TeNZ<8(il zZF=$mWf^qZjej0MRJ?oOMbfw%ly0HB@abxPeQ&_gzstdRPv1skh;RdxCnh7#6rkAw zG;>XTipQLAqa1iz*+n)^wRmW_ioyAY5(+#PG*6{xI?7*hOkuY>7#9EtSTSq#DQBS& zdCLL&-@o~zhxzP9yM37b`^Pg;t&r&stiEht;G|(tNx?PRG&5945ZxmUod-l;VB8Ng zm?ze*Kg44#m3oZ@SAzphrrXjQ9Xip{n<%2Qyy2gj!Zl@S-Jw%2ZeA^_0b@>ihkFx5 zk5hqv%a{kv%CiH=pTnyXOZQO8>KeZ%X zkYF6)*6)O9-(Eib`A;7|M?8WXKYQ(dyCZ@__Q!==>1jy}6ZVSoW_W?|8Q4p4jAH!v zh8wsxe%P+RaT#tN7ofEOQ!_dXBRSv%G~A%!MGQX_8s08Qa37yOl4f~JS?Z%>%y;|7 zrXHF)1wpVlb7w?4`>DKnCF~+E^{NMA{6Kd z4d38CN6$0c=t`}4hXs`KaUJASyS2-X#tPM&s?t06qgB-n?w?AaaY)&Gpa2II}+yUp&n+AZoE1yCiJ(D2$3j0R)%ZXQe7 z@QUrR2JS+F@nmXHgM z+}v>F#2X3Y?DQbh?QK;L7GqRJkH?}`K-VSwS}<+VtO8SwVVV0j}PC!&tANH74Q!w(-+_JzC4xjksiZ)1hsb?n6 z(Z|*%6pB5tg$rWBi9tG)1wbgX*#szqfH;amFt(}79%Ce@!Ezv81~zTMD}H+{)dk0V z$yuYJCY2LAqH&I*!0mPTY*ma}u2C6K`iO}X0N~7wTuXxpt;6CeJpngpVFyuMSW5Td zdB(-XqrT88UT29U-r{Y}e)CZO%j+*+pjvwUke@$3)B!(x{ccY*Kc1_nPi?^My=~jU90AwP4QPnHL8h%-asnC;&LOVp?aZt7KeS7=UDvPkVEE@* zQ)%p^l?n&C5J1xA4sHvBeT>GTAp}e(6J`jy@SNlJ$NFDzE&k!P{>Lx%DIfk`pS^zX z!sXW)0MLnxkFy=Fs_3~{_AGpuqamNU+cko72BoA@>W(<>=Yt2U8gz1s%!(NUvXky;LXEPM56K5&vN!bM|p;F58w#e$Hf z*8uWVK>OXwowR|I8bW~MHtbc3eTf3b*{EbI^t$%s+ zRekchy(jpnW?eyrYQ2gpsnF&@2T?s1;{%5NcH*DdT{hwuQscOcx|AqV2VW-~4?FU# zGv{WbNn@U_o6oileh2&{Q#P}4L(Y*=v}m`tsK){ISZitnBXUu58VYFlk)3B!$kchJ z0uxa=eP>q9z<4@tekhH~R>g}Z0 zU;q3m|M}(7?Ecv+_uD7h{@A}iQ8bfOA)+-$EvsQpwU4(wZ8pk-vNeb%h+1qM!}i44 zS_f}*X|0!0+M4BiwPwyM8J?~Y*R^Cb-PdEsewP#-PQq? zc7#_ousG_lbyYdrqRS};5{EYu(TuIrYJO3ybRB_EVJ4U=5TD6W)CqIstjoZJ5;{2i z3>s;kOI4X$9*&A$jAgB)6&;e^5wDb%K*4ayu z*tx65b-XqmfUzu^NL=I3k_v3l!SgasQX;`XHL#_eqmg8g4X`!T7D0v5J$C9|32`Sd z^jD-C|8;Ai5}cygd2JNZ$R~^WR_KWDnT805IWB5*h_1L8?!XD@#e|{gO?P(-00}(V%j4NDLwAHHBi18 z_Ya-udM0^1bE@lRS##WVNRiT1>C(~iXgjd@=bTV8Wg7xdZ20U}n%KBY+YaGIu7 zpi0(YOKDqOWUaHoW@}S@=`?f>9sioRGhYF}96rN@l#`om;oHyZPyYJ(UmxCwKY875 zpXU$P=*Z1JMqAnrzA>A%s?aKd`-euhIbrW~E67fE>X>5!S(#h+oSY!l4YVyg$llkV z+od)hNGMdrIGzgXK9EJqxr5_E!XbmduIhnu)0qloHkKACuz#QF`Ns#Aah|$s!3cCHQ{->W` zey(?Ch0k8Qo4qeGNpBBTNe-QvV}TW@NzldvSAXI}m8<|ASkG87M{E@sr_~4OSFqt? z3txW5o(j}V*_i>Us~JR8_{w!NY1;!#q(n;$y~T}fXqSjA5Y3CO$(_26ZscG#Um z2AZ6`ughPwOkk3uwO8U&TAHzs4Xs~aZ8zD3QVr(q_{`~P3bv+oBfb2cpyR^X**5~U zPBmBC`r}9X-~Q&)m!IK{{XW?DKh>v4`=w{E-g`S>Ho$Q}*1)jXnhm&OE;w_S3-LG6 zEV%~Ln4GR&s!c-qrIU;oYD%13xd&F-rq<0343ChQnh%3uXT4GZ~OG z)^lB%%UE@)!^*_ii6JIDoEvC`w>69O^!(|O0PWcecaue0e{A2wgXXnYqZK;|n{CwX z=omI$eY;Jv39%0e4b#&Gq;ViL!!xk6ae{0Cw+wM>%HG>qRU2|3YJ(4EE^FbdIC|Dn zcF~ARd>qZz?M7+wDZ+uwcCisPYMnPKolw2P4(AfFShkZ-J+c%O$#watHXYmWc%PWG zG8>`>hCYjqhBOcQjJzh?t+Llb0|ij%UKbk`XP%oU`hWiP?c0|R*F*jAT0i@zZ!h`i zHT>*VydN3T_asXk9u4lw2*gc0m*yn=#}}OrYUT!#p=aA}cs=%06B*>IUDP`5X<1|7 zLJRa2auBTgKDKQPVGtP*h{HX`oL~ds*2Mr64!!jNAZsZc5*Qsa{@QDFhwq9DaR_R{ zQ_a>Kk;lhb2;5Rbl|lM&9ojYxI@BhO6N3A<7DMxhfaZOGl1KjnO2LV|UK|fA)2=)3 zMoT}xe0urfudi=O!iR~L=dRy-^Zf#5%vgN;9;-Dz384jcc9Yr_Lp2ZPNro2i?1AAX zs03CzY(pU50k$V(t;M$S=&;5G)7gqI)=td5PsxQ@=~bpl!^}JL?R`16AlqONP0S%` z$3(2i7aFPD&Kk!TtvQp$=yWieyW?yCt!N4+z|9*7%^ zEhW(wPv2pMv+IucpX}bmXuq8V8-lH_t(JN)tIN_tmQ;&v-W@{VO7(IdG+&Eyk)TWruE@fk< zAVst(l(>@|bm|c84uEyaEAEVizdqM5FJJ28%cn-aLijBFs9H;RrMdM3x%oPFlO6VPjJezu_v;%zYi=?fg2HD@l>=cDrLt)a_Fb3Z$ACyibag-|-a&5A76=1Iw2|Bp4gfk- zmqtc6AJD1bDvh>_rPS@Y)n{L0^IMW|S6?gwA5Gw&%4r-Fzpgr%&Ar8~ACqyRY*M-F zMA{k4x5yah^*KAaueJcgDbWN=5_}<^7vp8cfaglMwR?PTaBpbHZKHm%m`iBkXc zL{Vu#_y|3nHwZIVp8=ZNAR`3)8pKw372Qeg!hC_OY_!{~U?u|mp_1_cfqFEu%{&Sq zT6~RKLEo)%DWw`YT^urGyFff$An9>gE|b7O7>Ko8lp13cw-fl%+SyBxTf6Txe*XF8 zwLW~UZ(kn;44=Jx_ammaeefYP1!mx&-)SCY-DhC8i0b4f-%wjmOgYP!_IV&%?$?zs z0z%H1dzfw_u%dXQb4S`#d2F%MI*wU@+TjjANh(HLC3qz<{9QqIuG+p zn7l1`NZ24GeO0(IstibCD}o28*RQn$i1nTgxd(!)X1V3H<>Ckv?*(}Vti7GAEfNH0 zw(CXJ=(p$A-@U$meR-red-AH?99sD=+uwx>wDN(Q$Ia*>=mq-(o)_?K9Q_CB0Ty!2 zj*b$>2OH;t@QlAn2xHwQ6Dgb_~(yAwW9C z445cmjOEpuf^`<)SRR<2Ic~1VBhC3?% zsMC@PLJ-n22GLjy;pMd3_btGK>m-DH_`m_cf|@@7p>=Febp}eIgt(a3=xl3v^}dJC zh#o@-s0d&y5z@nnzyXPCS}2GPN7n(^!|vdDphJ%4>eTMu{~`f`frC8g2)pkFdJzKhG{AnpI}v|;AN8WwutMy=c9#b=vbZM zBnfuz5qk=*#tr}__=)5`rz?)mX8rKSedivxq3&)YI#_>%0YbnIij6y1U>)6+gJTKI z&3jsd0ol838?gyt@Z!^3uJOho0@l*%vu4Ky8Tu*sWdYZ~xQf2L zP0gP^|Ldnmuis~{+q+jZ_;3RtuKjFZWP62A$dw8Mo0_c+$E9?q2wR}zay zD@NB~nb%_QFxR$=>9zDa54Q!b6ND0L)|M1pD9Q{cUUb&&?f75OoZ;Ckcb^aaem@?t zxut5Ywu9RNyF?3x<+10IqeC5`f@ZkM8_eU#D2T-iHA9D?Jp1aJxbkwq?4^ig1H@V1$L-{(bgUo+5rF|0f@^BQ5tN75!L9M^n+c`jWYpH4scDGj&4C-6*I z`qaP(wV4P5p|(g#2!8Vr+68|g6b#OLABVz9ukl4GAr-fG4J30 z**|`Kd40$Lc=E!%SE9LkLN1$jmx|dp$~$MJB@|1i9fv4KcUm7hj*T9C2%;}pS%hmp z2R1;Tl0z=J(IXlCrlg(FHTmM0-C zq1EpqNq_g{!&^7%(U$kgEB9X6VlZx>P_Xp1>x^z;0YtK$=8HP65V(6g{jy@ph=F_i zF*XgBGmRQoABzn9kPaskdkdX%964kdkk4w&imD14KnLSEToB^da{ChvS`CA4nXNZ? z^K2Cu`36W3HbFt>vYv8Mgp6obRsi_AuI~MMrUpRWz*(Rz?rofPd@J&MJDY5%`YftC z;=!%Swu89kif(ssv#VqAAwPfmm-_nXhx+X0dv6ffiL4kRAJQ6N90OkMsRFoGgW#J} z0<=aVVQkO4oGl^lz+Idz7$td4NQx-Jd5tDi8$A?N+#jn1?wbRprAkI z3+C-YfUVHPvF^T%TXUW@0@1G9$9jJGl;2)HfBFzFpZ24;?~|ABc5MG+izHLDbyMpb zCGG1^}m z>aa_n4*4eP2f)LxHSSyql07Ie@&hov^|D5Yi48j=uBuq>NC@u*Zt?Jr5HHlpbLgC4 zNupz4GV{1o^C-Er6a%akD>9TArgDtUN)6|bZYK-HWEr>b-=7>;;SWQ;&tAFrj-~iK z({RX$k14cjeW9O{pv4gK&Eb`R3&AaNbRlkGVCnTew9J<_Za{Lb6h;HY5A4x`SAQ^@ zFch`0bwpg(Op91;5I!tHw+L?EOD1t`@ikd-!Li~Xz&qdcA2W4hHn@YTVeCeGN$H+~ zN~&cc9E?^CFXE~h+kvRxyGAm#^wJy~^tUX`l4-V%LGPLpO>Zw^{=Qy6)Yq?{zdkz0 zJbUSGf28u`lR7u4-~tFxZ~@)L_F9t&+PYeiF?vlg0;?-JrWm*f(mrUSjNeZ~1t@AB z=@WU1oojKIAw|LB$^6BO7w;XQ?dwPnMX=k}A@JGJS}%>00iv~eW`eSsZN`X>5e zkSTU_i&Do$*ypm^YH_g==C<6cs85+10_rwkb>4PCu?fHLoNb;fD$BD@n-i*LjNfl} zz5mCb>f48xPsroHzT~4%>XVo6KG^U^s%rtAx3KMFps4a%P-Wn#j2OR}D0*V&929r9 zBX)-dylS(p+>+zSI4E5X#olC&WBrVVd)lSeFHwi6_0hW%vYL9;=TQx>JM^|~;)4p9 zETnm+(Lxedd@N18F@Yx%d}+`w-qe8i;O)J-5tR1i8*Kf4CZ;o;vRRu$5;)y~@+lBx z0gS#cnuZW?=s?{N8SL9E(jV~d{r7to&tAa$yYTN$<<19@)fl=~pdQ(l!<31OJ6bxp zp-Ond59k=Y4C$_wV_Wz>SbXHlx8%I0>REcaphkUoNSg|3b|2n4lxSd66vL@F(Gyv9 z`wAX!3I|=_G=O_D#6=)!bhq-|I#_d;Na%T>sZ!G7d3h(pE6s$>}=J zjVZ*ouF6Wl^uus@^;4S_>5SkoY{@1e`~e{n5`5?m`p)7F>1!Ty~01Jf)*rl&f{; zZalARj@bj`4~DsSE7VMxG-%`OF{{lEle`VX0k~PPkwlw+y(8UoYhlZhd zA5DDYbEVr_q1mG(Lu1K86l%dN&q@m5*lyw}>4}@;mf)VB*4jA(NRo})>PVfpz0}sb zK^22CZD93fYp4l($!2X?CgSk^O}z6=rv)-)*zV5QYXrpcc3JAH;c6LRsc5+*TU*}8 zz)ToP0bHpnHRlepGELaCZ+oeKSD*6pe);t1WBTlsyG5MQAL;uYDv!*KnA4TORUB|n$nBu;uju9b?3KIE^}apPnE^Xh9GRf2ZJy?ZJd*<1r{X|G zuiUP2*a#BoQ(8GWK{*<$b!kUIchS%Go$VR%y#BUuR_BMF}ld{0ynnr|y%+#|s zrp*yW6O9lvv~6KHtaY^8mcsuMG*g`4JaErwq98Exyp1HG)iZ*?v>dNCHnB0-C9liP~LZZEu zU$d~mcH1NTS^VWF)XctE_@ zd+1s=4F2yD9c#(#qoJLX-Nf?$YS5l8tS6)4Itb0 z+6EE3hU^4_Mdnn)3=Nb%h|w5__a?GDL}rriWqJlB`hs{=)5}jQ3~vTzE<43|3;dP} zBV`b%3g@aQWVSr=xGw&`Jv3N6d+FYr;B$iu93QLf{N__lO=@0*Z-U|F5vL&t2SrbB zUBDD$Pqa+tuz^~_T&GK9o>7|s@Ha2q#;>_}SPdue^pe4~uP{QCb+x_X_N9xN_Qpx& zdZOOj#?2D64m=hZ9;^;n<3Y3;&KNbF&IXplLO_BrAPPt>V9@07jvz^3*mTOFCuC3j z(OC2jh-2A4V?>OW9=A8B|3O;t*^Bqy!4!rxT;fjbsQ|esMrUIHunJ?yZ4z z(eoI4Yfz7FDxPOe?l`hC?l;|3*l(}H|Ni6GUp~A?ba?jC-96JEo895E+M;cWfiU*P zbBD(e_yMyI1$EUn>Dc{3>K3p|s$D?9U|gEu1=8Ef;>lcRW~z;5q0O(u8Q7NFd@krE zM71#@%nXYn-HmsF+F-C1dIx%BcHRfmvVH^s9zP&mwIyoIgq@%Qy$mqU1yct%0k~8l z^nzix!%;3<7i1nV>6WYvD5Ec*@B}j37wU3*=pFm@AAcP*O}6IfU}ua6d1UMbs=i zc!J$v9?Z_xO(tN))wXmyw=sO`%^71K#sL#gbukoYheLXn;_h13rXi4=7No=$h`npE zh<0xYvY+!t!l8H1<*{}aMo+uT@;1^o_jy8RK}IvGPoL5tACTKk@0Slh`y<8evzP6? z{%~=PLMNm4X+ZBZ*sLSif@r38z|9rIEh04o`ehuphD492GG-rgJ;ie-AcLHfflpI-jQ zFZJQPe5@ZAZnu55CokZ;*_DBLjh4dWv6pn2aQL(Z(FcslJeq;(ZR*ek4)2(%PE^lR zNXc=S%tSV)YorEJ8su8hW|pp86LGqh<*aSN1mxGBB<5)CKIovh=fWe|)i*%5+8Kj; zg22lGahnVKo0Z}YkvQeB;~v4DV5Cw^%4GN$K};70;8DRwLXKcVUaBqeGvd+FPC_Pc z9ZVj76=?pq--kzi{810bz~RIB`uNE{dj)?y+5h|_iqAjB_*WN9TVyji8O60x>a$I> z;XezxaI%axC0E}kr|#hy=mhRPlLTa=wi^#o^I0~^h!V7WvkndM=}Ar_;Yr)IJLRA* zhpE$TL436VJ^Vfae*^xduT;)eJmqbH?IL!Mqq++)k^|2dlJEn1nD?ohx6<3rcAKP) zGca3{$$hPXT+qR83(Wis#HjZOF!4Bx#;?!z4N&*}Z1eif^PfNb^6lm0L!QHvm+=1c z`U9Fz9CZys`!FO`r)Pkki#J<<^%8=#-4JvK*1Dh($bwakvxI44x8NWc)ehg-if>FS zNo94H)dL8zV}%42ZGyzT&gKB{>-HM;ugjzP?8UqHXs)++abF2^kk1W#VRzUcw7kRP znayj?A~@UEP%Z{+Ag*a%?PBJ{|2e2BF%7etdxPj+D{&}^(X+ubhucj!CvYnk;AW~2 zkezbwy2Z$sRW5kfAz$0R&cTGfItR2oW#vK1brcLo+(rk?!R|JTMgzLcHg(IMIFWjS z*S&=qTva?xXuk?WSK7YKmUmY^YzJ)4d$?qNeYcMK?6tf9zP_P!`hmHeMI=u8b-+5q zCdh8oy|;c8u7RF=fdqEs$k=tPb9db}r^g)Bk+}}Zn8E_MQ$h~VTD3zCMC+LdPS?ix zJIv>fzy%52a@FVFYX>NvU^i1g-I>7snlQVKIiV8mS+h9?a)Q0$cspJc=JK((_YQs2 zQYDmrV+P~ZJBSu;UlYbSk{r3gm6KVH^7f9#Gw*CsuOIy(^y=Bm_TEehf8yyIe+flF zYoLX)%m)G!G!FN(c8rbKJ1!m1LNFCcNNwmh@8x4#?e5bQ_T(91T03QzhL_`?unois zAe5PHkl1vENoD%Dy>CNs6OLa+wWZc()E1Vr!J-IcE?~{bJ;*YRM#9)^4ii+GHYqe9 zURSutO^#q!4b39zf33JdpNnQu3W!-PO=E5Bhq-e!y`3rj2OraCFW&vf^lhJHK>}j; z$X!!QRKq$4s$sYAvC9V~cZ0*QU_C<31BC4A zZ)Uu?S3A4GdL)UEquyP){qmSAWbj-QDZyh*6 zM4zr*5nvC3jD0glv!I6mPinJCoJt1O2pR(hid#(GD)x=6ks!e1X9XP&)w@0w?>40uCphzj5yX?XW1XOldwcSpHM z5ilQ^vUxu;fdT;tUb7zow{Z~TH>Aig7CeL_Ft`izBgTtX9-Ylr;?6&}Oh2xB48MKz zl0d;i*su@~r)O`(HWBACu(7FAgMa+`1v)YXa{vX~agNBoVxW(`H%*|(DkTO=HL*^&Khl4^;ICi4e*U*Ve|Qhn{OlFHpDq2kr)i`4Mrml_ z4D1IOs6%~p)dS5@v`7h4WN$b58Q%BYXm6bfZVys>I8zCvWsvJ_kdHHXR9aifd*v*A z6lcV=`?#?osfL_KZsF=>G);RWnz{5Ka-v#w}b+0CEAClE6XswoZQpS^_lkM?Z} z+-6R(-oO-MntLXOuWc^8SIAJgByEi#4qk*pT~Y?keV7Ylyn*(@K$vlqoKrHI1hqh( zbAn#WN09lrq5F_@=!(T70bYGy(n59co%@(OL+TwS^j>JFqz5wf2SK>&PB zt~J`42x5|(i>(2V2`W#z!5@SRnTHJ#h*+lwkmyowyboNsHV>{v*X@bspI$%bKmSLM z_Ss8#uaf_sJQHn$H*C-pj4yi3An7r^Z-?c^U5YsRMvCoNO#s=rv!O=Xs-|pt9gJ}1qT66RKU7!2Zw(}S;A+p-2IRB?WkJejN=m0JiUoV z;YuGN0o$cr7V|v)fTf#P2js+3qagt@o|s_A?bJ@Cr<{WfBQL|}Z8`yNF51Fxu2uIhsGkek;gJ!~% z)wMZr`KDYI$Sy7X+_hijqqboqu7->oW=?4b+pCA;!ry&*oIQK?+WmN@zsEEEf4{5x zHV~A!!}Xp)esQGIIt!rC+-l{7lzwy+Wzj^!oCZy!o=BS*kipw+Br28}l3JZMGDTaP zjAb1@bZWrQFvdP3Wza5=f$pj^M;3L_rnr5=+h@&Hh}h9MK6HAlhKd`mSF>;2BC|;C z!9wDAU(bnCA&-f}2B6MbY*P?u3iQY)*nJ1&e9yhPs(@#xT)XqW-30$_zI=H3bUr_H z^gVasZf6faa%WIKVEi-<`NZ(9Xx*GGk|EP_tqvq#`s_Vz1J3C+Akv{OWB^Ik7K(-K zNE=M%%_jj@+^Y_nAv7`xEY20dd63=&M=Yh$xV6duHNonhy>z#e2mbL9?FIt~H3U`_ z@TGATSD;cd5R%moE(1xrErtIx9iA+U!ZlU`a0t)Bly(iT1_H(ebU$i$=c4Uyhc2Wq zLgn@vW5!4Yk7nFXe7j45R|5kSjft(zS~WYtAk+?2nJ@_{Fx9JL=eK>&77B*^nhWK> z(b4o%^FAjn*e<(4MT43s9bMB|=9Mat~a4$+!m9yrgp*F3pDI z1OjL!3v@Y2I|5kMF^FQ|f9L?ee0$|)ISSrl4dVmtc&_woBp-Av=E7fWAkxxwv7q~f z7H-P2q$J#V014OnS$)nqir1KP`8tqeq(BA?Msg>VdTTOX!&hkOEOEb8l>7q<#;-6Ru#&2?|k@ z-O(giCvZ_*gv~gTxpeUVOjn%{25$DPKm>vtU+%XXBLqR=02q5l!GZ6S&6RrLUWSsiu|bCHi0k_i=v7bKrypsmcrSLGdjtgM z-37ZOCA&Ss{6BBc^-uMwzJiSZ?>*sXujG4ASOO$2vDK{h;p0s>m<(obz_qMk;)429 z#%$Ej<;s~M)*4)Q$jB*i`occdaXV7Ldes`;XUw+2YnzO>k9GEP1k%@LaxuOmvvAl7 za6Is#Y8zOL8W~NN?>=H1wzn&IaL|}#9etw3qgEn2g0l7u-rW;d&@d`OGb(v@<4ISW zp)XVg3Ab|F4upqu)*z=?>vm}Pf2V)^c;S;i_?Isq|NP;n`uL?Da$26fkneFH+IG}R zpo@r{D|U+tLlbY{%OKXIe1cTPAZF~|U{;nO<3r12&fP-h!HrnUTwBb}Ng0PvWF3rH z(8%@PTdlLVwl>d(A#0Atw?AR?EB@iwN(%nOFI%j#&Shf58J?jtojEln*BCBXNU$~x~U2m^f;ZEIkUOp9uOke8j zw?{>rXRqP?v;B@*$18pgl%b*1J!)Vh?1>9Z+UJ6T=b1>|21W(Ks~X%3NMqGmNp+p$ zm_VOKAvcCpD%3Y1UM^Y4(Ve$m?cUp<2U@#1gou2{^pKvIE@*OhAv)8-ApgJteC>+n z@Q?0+z?!rrV!~aUPBs7(5yOeX94%ug%cH;Ij+>K3CQI$a8b4}&~KnL?_C=dtTkE&Sl6uv zwmQS4&y8vsDmQ@I*KYF+-M7Sm|N8&yi~H;~d@q=G7ET)YH?J@RT>BWrelUS{XaSFk zcY>&n_8znP$(i^wHQaw;Ho}Q(Pg>EE=TON4iUw3S6U9`a?Sy%-(_}CMhk*ZPJxcjD z@8WoIp|gs+XFiGGx+xx6uf)|BB^cej5w??kmKusl+GHn2fwM-Bjhq)5K|gS^4>I?( zlZ?wxe8~3M7vv>(1k`e)fyjzO>FtmL;H)oSKYx2PcY5~Hz4sm-tJMa$6L~jn1^620 za_sq-d8?(3)-cwrbD43flINT=3c>42-hz63%i5D+Ms)tE+dP-K33MLibAyfeT<>#pMe@Mk2pxZw@IcqwDUWan`f`xEz^#^-?RGgaRzQH zCxH+S*ptihGZrZ-ztJhQ)^@jr?|aYG0EJDsV|+l@b@kZZV>@P~4HA)of3XI7(Aph{ zHX-#5UPWxMkVc;~M!UN?FC4%MjWs+<4af3MeXKPLaL`BVMu zkAA7oUcKLTS$X|YzfXxXQ7DkU5yl+I(;_3c4w)8o+FJ(UgAMO`M1X2PdF2_NkT6%{ zLVv5^ndHRvz6>y)_GWY>PDN`(bT(k|HRmv}A-4mzX|!&y=ZFcMnqm~FRCF&Pm(A#d zMpV@{KXcCXAX60Wv4au=X|x|lZLF*@wvfGWG@w~ks0qi+fdXAl0(IwvdW=>RbaQSp z8OOuBN``-WefjYE?av?U(Nlf);=LzJ82AvNA32k7FF~+Uu7$$-i7kU`<2`sLkB-6@ zPYK5aY}Z)Ws<$z;A5u#MDUYD!&=`c}wwf$NJR9tv?K)d~!=}WsAH-SG@6gUwU~;RT z6Pmd8&VFpR6}Zh{B)Co0F(>Xwk;VoK+1CmJ8+ZXJfQF5?D)4va+{s`rbli{i6=$Bd zXr6(-uT$TM`t7mw&|dc`m#^jd?ZeAMV%C#a?xu5Yzdlk*?tCddTVn=*3zXX2;0>ww zI=h{btx0b)5@hO*IuneZ$&94@gvySRh$-L;U5yk9iw~)(~p4OHBF*i(>JeQU0Yr(X=q+WzqQ{{GMY^-m8U>XR4m=GBY@qP@)~7GW5dE8!cZD_*UegP=;63rwPy zHbQLy0LJW)2dqN&zQDi_L6ivhEu$O=R0#|=`^kkYx(NKGU|68#Bx8qC4~64duUZOm9|M?^$&M7r~3PRo_#f9bsk}EzJPU z4tNa&7vpjJ#a$kKHVeOcEH)0$F0>o2WxOf-=}SvCGJRIMdTV$+dBY1ekD&+It_>-yHwm{n5P&0Et0Mj$)X>c?p(J}D?I-53ooz$ts zpbMwttb{9f%pjy6W>mu)nVc@HsQ-HxYQ13(ORLUR{#fJa!{6&ae5==QAHLS>FCQOD z;-0*M?><^~?agSXf<582chH&H8rs#EJsY;}CmHD~KsE!Q3&BFx+?S508EQi~X9aBs z0jx*!VaR{N(e548w}o1aLIws(GnTlEjoS?rh3G+a6QN-YcC{m1BCH20%R?ss~4zu9kJ z{nP9D{PmGg;o0l=?t^vN@JA*DL5AUt15(^KV;k=RH#gq#iHZqu7Nfz+>>cGpXwiSdfBwc!xNLyK_aZ&?k zvRB?-(EaCYOi{1tUmngWp1pea=m`4ZKN;A@fr@(lE6&oE(Joj;A_9wla6lKWT_+J< zbAU~*YtBV$gjnS;r5qRzHE{e^?k<#zq4K3XXfal~Ehq4cU=BtVCEJ};Eb$igJtjDU zc$;30)+tLDg5Chv?3y47Y8;x4d{>s>%_kU1GzEym3acX0X;Z^p4zg}(t@}Xgya-#E zc>;2kOxQEW=!Rg~?HyhH+rt#`vsdl6PqY0+5tkZ366`IIgsW^3Y&RT9gidqs*?oj; z-Gke}OMujfbOWAjJFv~9c}=04wY9263*S4F@cT%mJ-{!{HBnq!8c>Q3)D&{w{YC?@ zc@UP~hM=qKuT zN=wZg7MxC(oCL{0)ex84r}G*MGc5%*o?*+NLENk@p*PafcXv~@%C^(e>yJ@{Zmg~ymy}}Mbt`;fbtvRqXD<&m!9M{BYr*ApZxV(y#qdc_WHg1U`v?L z^)3#dI#32u#ffktP~8ZWW7DNw$ZKLl3Akp*Xok#o>l1%~3=en8EMqX~ngaqm)@+b_ z|9{lIUC(66b!G<`)E7xv(#*&+h5>_?;Tr?h6MIMO_!wvg_D_k3y`x!VbyZD$kQ6XK z-dLxqn(WMc3Ew4nAxa=x-PMtq=S1vyp0#G*)bS@aKJ<)<9bMzv{H$AwFxQ}9d|Wc}))-jc*69A>H(!o7-^U*=?8~F{|C1N+#S6Ov=Ci`B$}P9No5A@%Y}i*~ zlL2ebw)R06VeQC$7f72a3dy)L29Z{BWsb|k%HWd2DEToIsw=dfJKL8pVB&n zb?0pi5uS1_L;8Z}(a)gcqKR_1(roP}TP+Y+SGa%-k8K|wfw@(_6g?2_va!Ob_%%76 zL+H7oi3hlxYgt=u6{4Lrk06`U+q&cO|F2&^*^lqu{4QR3ypOjYZ};nmFWYA?<%_>w z_K<_3NbB<`Tr%w`cMlq)l5*mvVGo2?Hf)rPHEr!{grFWcc z4{BvT>S?J;?94Vo4M@^t!S}xX^`^B1XlL?fc|x$qe(ipsl1W{ucpiX%JZY!rn@*b< zO>2=>9DY?7Nis%oNOcY!fU(LFD>dgRwp)*pA=&kn4`hz4y`MOm^KEwRmw);hKN=K2 zdG%gC#IC|TV|3G!y;WKd1DP#HF zEz>NjHJXj8($yIFT?C>E$H@2c+Dap%cc%s9zf5z$Md{QuQj6kW`u$yPo|e2=uOkg| zP8r+#AdS7|kyM1|R4#;7Ls}g(OO1{1z+;uYPbCDNa)XJgvuDi7`)rsUI_^@YU-nQR zKEHh%A0C}ypS*Z4eyV#y9Lrmib*@75xJY4{e}E&3Z@6Q}iM=Y^T;L?s#F?4+V!$^R z!!%5JL%d3K?R{ zZIK=jT8U*5WSeDrl%hM*)O3okVWmW$HB#S5G@DyW;^XYo&DuU|af?!uWQ$@LaKc+x zyqf2>%<;=_pX#UA593bHUcHwOJTwwVZ3U!p6pAG@4XSaa#Ul!2;6S=95T1ppoL#kZ2mt>PWc*y>#R$7Nf^gc1?=p${~ z0c@a&o*mt{!I;0lKGu(K=lhSpe)kXn^W^1w@pJ8MG%kAyOXsBNWZFG)kR%E^tfn@j z%9hm2W!fve_qg-L6~MTxfv}4_eUzNMIx`mHEz@l(Y00$D=o9S1>|X|E7S^v}@a?ru z-MmxVtjnddPfWSzS=D+!30K=yYF|^@Qb_*CN$)du%Usq(FDI)Gk5l$ZIy9Seza_B0 zODCT(fm)e|>Fkor*kFD6_pf{1W)r`BuD_daUi&bXmLX(fBoQqz!I4dGu&&uO1V^B#br& zQ~1V4&T{qb)+ReKl_Ua<#BqHJA~LsP$#78Yj~~Oo2Q=~U?fUH1dwD{^X^fC~Hf6ZkHN7baYlCM=1@um%`3iBHAHfqalcZZHR zbC#TlGg=hwX;yAAr|xzorFzaaB-Jtd3``uBS6$6+Kh~dPJ%9g-@&BXg#FN+Vr-S19 zV+B_jV|e-zNqsc$UAfjSy<{aaQtW`qE`B&n@qE<1ue42-deu4GnBc89>b|Kl z%r|p7Tv41QV(tMSEM_fq&FiI}@;iF}#UM+uO~y{4AW&ATG~J4IJx8vg%&22`N)QhI ze(P8gQhScdglf(*aMsS_yXRh!o9A*)^ETBIe;gz&>{&`>$!KDlot^KzRbRCXAK!d_ zG)sK;;=PnPU8hkGw>ct5aQ`4{SIR3w%Zsna6qI%u;gW9W%^|T*k+w5TYSnUDuh^IN z2r6FOAni2i5+zmFVVUh+vgR|PeHQ4+!dl)wf17L%5!saG@niOl3TrVMf!?VcKyrp=(F{q!%xaue9jUA{IBRaz2rr-NDM!V>%ukdJ|=D4 z830=35-Ri&KqiM7h49dpI5%p(oh?BuN)#iy$tcz*Nf?P*MxKSj(N2j5PCZpEt$v8F zv{PCduWmxX&bk}{c?inNF-U~ERs`Y zB-tonG*3EDlG;T9?K|5T>B`@wlzpiv@A+EvmQ`Aol)~>6s6dvK@sz9W8ccWl@}`Ho zW(%8@?O(ubPN=zvU;=rmMq^Za*x`Gvr8vsB)pA({7i)`^W2lpCIvOjQ$HIc#>+KEB zUtO%yM`MR4FWYSbynmhUyG1`OP*n-^|UDhn-kJFOXwC5o#ByJ*T}`8 zYB1U13sj2H8;!aMO74t`M!Cv}LlP%huDOq5 z%vPUtEw)M&-JA0aLtDLeglAdh!j3U-@v-MBdMrs!dxqC!;w{ax`IU^}fmmfUewd^8 zJZB~xbX$r1$Mfz(eE;Fy=ePc9|N8ZtM-Ap@ui$O=`&%cHE%kssycd6?o)e-r>Lv{) zC+E!5}lelz!PKfaIo+eb5pCokRoN2*^@FT#nK zopzC)5Q?0&!EBZS9*`}TPjg-y61p8sY8&7jq6ihyA+~FcyiS6?14irU<#LohS1G5> zE^?B0<7VlslASpE!99GZm&@4vFw~pimr!z9Ib{ozUfb5?RFaw*2}}OUTEZ7u%-*G@ zqDc}H|DvZ-)UZx7P8-`1pChjs(nx+HUu?SBJf+QiF|wrFOvK*-6MhM8`Rt|p=|?(# zqzMC}%WEeWkW_YYH+u72$|*dr`{6fg0Q-~d(EM?){btoP(z`s zYs_$lu(fd_bq%&?83@T|vlz+qkUN=CblF%>vl+S}u-9t7oOJV%{x9$6{_Xre zUj63dySJ~-hj%}`^2d&iXRqT+Xf*>Rvn*P+0>R;2i1b3wZ)I`>x`CBcS(WbQZZk(y zuT%5F$3iU=mgY&T&nr759@5P@cgv(`@4MH0q0N%lmf8Ta>Iz`NZcj8Yla6nam8qr- zOJT1`fn)HfQf4zzWV(53UDupr?X=8CiNS4qaVX#vYI4_ueu0^i%maehDD9v@Y6pnj z;P&G*1KZDyoQ~Vi_ZRO$4t(67KRk5XKYQ_R8aUs{H#Cz@uAtk=EzwECxYK7)XfN&u zDlXfW9WmBK2qG;;veok%VM7;TuVjUmm>7ST&iw%v4?oXmFWXBs$RG<6XDSAu1{^ow zrq>mx=Em1+`f4kU0ynB%3HyF(;c*jdv z0`P|qdB|Q`u@>hsAc}gS=y44=R%yC*lN+jInA~2`{PjW;_~=mc>~*`ZJ$~gyW15*U zCHtld+pJE$+cdedtaC~cKaFwgwAE>pjm1Vo&jFUitpqj*ug*Dn3k4{?r&4k=tDK`d z@gX9fbcCHPSe8A~1PH41ir@c?MKJx113%V#RFslPVYA1n6rE7nUoyc(Ywy$ zU&<8e*~|75;lh_4Zxh@E*CYK9y5fJu$h&6mk|k$CK@u`fmp$Q~=7sZT97~72%CRdk zk9=tm-aDGY<{>WT@Swn~@RUgq9EvZqvPz%u6?}|ajhx2Pn!8o*A^SLoxYe0sRjXvX zBaalRm%2E)rL)BgMB zUpTo3D&_y}3u5-$z4*HiudYAx>+|~IW$Lq+^r!oz_MNt`zuH6ReObo~A^Y@NN@?Mj zT4e2Uwz*Xk-U1h31rdvg>JknHy;e*i4UG8!d15lza_7xe|LnTzseA@oqLp+i(e`xm zHe)E3>TUL+?S2uJ%#TLDYy?jws>=uX?|karP>Q?!@2VqnXx|D@2E7? z5=zXv8>p@=B7SI$rp-N@UW5HHedrK?kaj~ z*i<<1^&(182q;Rfj^q?02<{&KzH9L%F4>t6$OxFWlCn&-B@A_Y!GV zh6oVcx#_{uuWNL$(yAwOn958(in^G_@RF9ZC0{T16f5pr2vTt*u%Zr>vs3E(#S8hTp&8NK9$ZedE4MYjHHtG?}9PIYM zu_%)2o-L&T?R66S*`cK?QI|exu}mGB22hE%OQ*0xa_t-|WrXEB{`W8ThnSz@)zxWz z5PEp>;=Pz;vGk>E1hj&C$(+28K)v0G7NqSQ8cVmjs*0LgieW^#5?`9Dn1+yNo(t=+ zG#bwjYPQ~MCm%v3Xyl&1C{g7M9lEQ=wQ0P4_~v0w*tO1dZC~;1wJvkv22#D`2G{nu zP$N1GK*oWvkqa7zvr+Y~snY84oM?SAX~^dwJ_3(8i4pbHI~6lff^3yHT zOW2QRFWVjV02Bx-GPe{po*B6|Mv@a@lDz?Ub#7CUSW zt#*=w!k*-85((N2ba5fNfNh%c88Dwl9|)fI!ed?cKnAaHM^>Tj!23!)%$tA~omx*H z-hC&&xSL9Guv2JYA8s#eddT6aBy$v|`2yC1;8sWKo*4wEoSUljWR1=!d`F@Jl4(6G zioM6URAws)67uS%U0;C(`*E~dMf%ufPH(+@;Rka`EYTTp3 zn;;E62UJeKTf}$SqVzfOZOaH<)#_) zB=glAZOzKkOC2_*a^S|(SN2tZxJGrol-ro-2^(jNHL;zX@crn0BOHjaz>>yXbD}}t z5FQr^?Rw@;aMZ{FO}t%c;Z7$v!uF!Anz4!R&Qj2KX^WK|^Q5k=9mukhyW$p*mI ztMhon^z5bk=?gY}r}7O=T7i0151CeG5@bQEK z!T^}+VA7{niHW)~g|vkKq_bT#z&n0yL|8O7MFtnJNWg4nBaCOrN7DtGcv1r3F|ICh zPDaOlyAA&N#r(K_sE?k)PhPwGl;~H9#_8ytp^r;Dsc2rwhUa{phKo%%_8q$rht6Xd zzm|kkD20vH0j(}(Al92nFA=qS0(EqWjrU}lki)PZ6h8>f7enqbt#-YWS5|IXBDt0W(-%)EV9 zoz^xOkS#h&WG90v0EOLevEalf_wC~uJE&5)?I1ySEObJ_kQwLrHL$nyq#J^Y* z~32a}9w8pFo7Jje3OCQ&hVr3u%xh$Krl&+R(+Hx_Ei`1E6 zH3{fNS`QOCqGGG9V%-1rwB-1bM57v`K&iJMXtNn+ZgM?)``)yK4~7H{u_GnBDBvZp zVI!v~4G^A-&z{PbBkPPDrAysXJ!h$Tb3!PS;r(#H3|vW)nJ@GZ3(5^$x*@*aexSej zw|D!~yI24Hb9{aj`F-}{-Gh0)R-=w2Nu6s(-Uo9gEw!u>h1S{GCr>RRb&t_et16Xy z?%pGeB<|62sHOdA4E&eB{rLLreluTx`1W&Um$cqJdYwLd1@HDq?JIk9?8>I3GQeQ_ z*Dw$ErDbaKLC&C*6KBuLfGXv@>rC~!N+KTbsfE+tO=qCTxhk1h*&ONeKULAIrQ=x4SnhGOkg+ZOTj)%fMQ_%M-fBVe@B5^!~l-(QUjPN4MJAqs`ok?3+9DouWt&vV16;;{3jR61EoA_NkQj0x% z*sGRFa>0Nxdx?0rMMn!AuQaAn> zyV?SU7Gh5XmM;~EV9T}5IYW&e+P>Q&A!r1Po#v+9-?>n$UaIdEtt@&ZxtCl@+ex-w!!bZA>sAcxT3L101_nL-7W(kF@x$v+ zpWDeoH`_Pqdlivvf+%`10nj&9XIz8T3wkwOK?y9R4VZ<_Jk9n{I>)kb~=ekh7VEHp0Hg_@XceT^Q zXqN`A!ersr8-;C{?ZY0)Tna#lZgUk;0u%T>UHfs8cXY)I!EWU6v|D@0JC7t*akN4b zEO&6FzyCTzdJ}KI|MV!+^6cfize@e`v8F=)8x5jOO_=6Xx#4wA{Q+DJE?4)wR;2DH zCFWVvwJ%@P>FZ$CM@eg1IY5L8dZw-|c=8Efwst+4_-|t+$m20a)EaZ%CLx9?S!=py z32AEP>SdH6mh2EeO19UUe1z@rrm@`l6Xny%!@~RA=^RSBTQ%)cW|-(TDz{-d*Tbe# z*TH}~3Y(EeMMn~y!g$C9j<>&i{o&o)AL8x9QPPuF@MY*j>W#F8c+yh9ccPFid*{B_ z&fb>wR-4XnDRa)y0*km^iXrZsfbH&UBQI416U2doPU!V{EZm&1*_QL|klb7#h=z|fM2-Mut zhBZyX>w7SKDQosoqoWkP+-7|Ny9YSkN~~SnRh&&+Rlo9c$yVmpA|Iyfxs$b?wQo;F zU>2n4htI+I>9n@y-PjjJXHHPM5e(p~IT6|eZVmo{)esC%^L&ao>PToY#t5sa?NN!) z@>bsaB{>e}F)!TRe&^h+x zW&AVPXEHLY<;&As0)K6D#_46M@>GLskCm`V045NWNeAO;&x~>^wc7=;EJd9t)4~`F zVFjc5yR)3uBwFs`r2KLgQ_Zm|Z06fHEme|aj;(LjmV`V~&Q~8>5d=a=UPuA2*=spN zqt$I#KN&AHp3bDeerD>)`id^SRT8$XAc!71ns(s$!jm3e(neWKD1-Jau^^1M~_Wd_D<)h#2vzPE* zu&iHia#|%iuOdCgj82=&Qrnern9#M$0QsVyi*Pf{OR470u9UtPS{7}38b=Oii+X{~ z?P|%8?DTp3401)SoTel{Qnpn25c6$4`H;xeGL)BMPsElCfmF)?(7gmB#Z;qK&Cz6H zlu0Uk&(i1g5w&EUv?Qbp)h4ntmaR%{^9cVri*A$*5g;($nptux&kQ0C*uyw*VejJ0twV&PEEIE zs=xU&7}+N;+_w+(U*FRW`Y&Jqp#RU?_don!`TymYo4!l`=ezfxUcY-g-~1oz^XoUC zUcdd<{qBeN^V5I+`d9zAFB>ftuN_+tTgo+>EnkFT^)di+_;17Y(p<|rTmh5+JFNol zXsXL{>ep#asWbTy^0DHV(=^vBD%Lrnds}$9V)5XmN|n|8Hv06J^A&jZ!rc~L_1lly zz4FM&o$CjBpsvQBiJCQIF&>^3dlH=x=w1C3Z64MM%CUdZHpid}KatEVYpF}Nd4%4W z5!>!sMHV1+jA>@w*c#5zp|_i?Gb@m+u}`(hIWQ7cHSX|sl{t8cVRV!-m&1z1fin7< zi_u;y@I5Qg)=Is#4P_DYIkmZfNKe+b@njs^D@_-%OI=c+vLBNlOFMrm68!f+v4MUu zl|8yQc=A&Iq>}Z2f4MT48eY4yGbl$Uld`A>5A>)xHDb!=DCESnlP^Cb1?7{?7=caW zD7Zh!-;JIqsV*pH)0T8vN0Eqt)->}Mw>bKDLS$WA>G_uF)3eV`bnE&!2W|2w{5zx( zfHq2)4c`S>dE<7cw$x1}xT)>ynx(TvjlLj6yB+%D#8v!mHA4 z%c=5&n|VgNm8v)Yce>8#s|%i0|s=R?rI` zu{x3hpme$y=al)Q{qwJ1f1GpwsQ=t=UVnZBvwZgI{d9kYnEC6*xqwC8Ytdvm1&d5q zN#i2lnAW&(sk6iQ?VBmW+EcpMPFFjt(GWU~y1`YK>2nv%shM5=fG}CGT$VL`YGz(m zGTGQXAYb*{{gt1LDn^LuC_0ZGedkyM$41w)DijIO!KNnFBCkUy?}Su zeBW+v&tW*j-x0d_b%Bx2*jS5UY+QDC%rP~9`<|99j&Cz~ZOl38pp0!vlc!X{!bMtM zJK)$=BrohjZ3$5_9cQ;H;$7M5V1v1xPjO9Nayqr*y;zQYtm)o!^`-@az)JL4PT7z` z2D_E4xl4k)ya6}(w9m0Bu$KgpWK@zU5*eAs1T0Gr3xA6K6t1Wj%z&G2bf4|?o zc|#H4cm2<)wx7L-FVz7`DrZpr-#S-6GlfI>pB6G#q7K#z;penZf;hvDMM=+2pfjgd zkJ!y7A-f_YPY&F3q{wC9rjm=iqiZ?1`pO_}9kaBy%9(c(&=?TJ;5v&{Y072m*(l;I zgjxT(ARGAv`x3D@HR%#`Bqh6d?}cnw+kUy^pwX7vVRX6fR8X<5w43VDyjQP2ojcaj z+{rWCF=$`^@cF|JpFjMXKiz{G`;!;%KIrzP%Pt~0LT07=(!!CDObE-VLjau=y;jqa z3#n%#4ZWeEo{N949xGES&Anzh#Ko4&3Qx(U3Ws&2L8Q5Cq>k#4<$BcZ0*im$K8xqh zn7*KZ*Tg`hrz&>gqYLMpP2LFbK#kmrAE#WrsZaWb>_n{!m;tvX?W9o~?Vgi1xKLS! zkYx0HYOTvt9a??jEH_L=$!?kb|8RjrUd12Y6CHo|C`9w@1-u_(d~L*LSc@a!*OWD+ zdMvfe(wIlquDeb=P0K2q&Qx>Z`x)S^hR7AhA?KRR@D{_U zyig696K+YoDepXGyDhYQR1tIDa@6WrbyKDH1yTFhnEQgV zQeSDKv>fS_*rzps*Nyi`CKpe1cA(=L5lWBunAO6}bt?aocNA02wmon7bjh@i%B~6+ z%mrpB=PKooQSyov19lbCubgF7{-wEv@y^@;rE~UNcPpJ3stdV=QY!JmBx|C_4~BPNJuJWC6&MCm^1_ZL%G-Jnj%{SGOZcI=NEH z_rlgF$<8{!#^iGrVNQc6F@>)!CXw00vPec3%Bdr408z~IB8#*(V&Yn%dwB}isklam z<1=Y8Ib80sj{Z1p`j?-r{Vu+}UjO`_>DeoI`+C)H9H-(@bq#eW8ZEXTALIf{Xc_}M zkF;8jtZKQaU;PQ&X~tQ#?bI0g#ir55l!zP)Jwc(C>OdL?LvCc@k|2e3_)Ji=dHCIH z$)<7-!q*Z3L0fwps$^C5L_Icv-rvFv7i6oE66=Wgw#{5eDm%5j+Agw4?@mp1Gt#&q z;#unGwe$GpHO4^00K`VF0cFPwPy#qIk(vAI8f)wgUiFS!}XLs05qg(-nC;!CCO zZqGbF`~JEU@>;dpT6O!BmSZ!PY_JG*F2Xybp#cLr zxCkwoZT>$=V{L0n{C?LpC(I97ZA&X0OC|-v#85^WWasM5Nl~x6GJB~zlA>ozsYJ6b zwM8!&ZEO)IZB@8ltu=@2!fNz64Q#_s-nZw~0s>S)zR?eP8U+=VX42la&^d;HuNqo{ zTm7{9K92Qk-d^hc^G^oEf984o>}9;?>U}-Ks#fcs(XMn`lk-%YQ`1aQR^=Mo+iXIy zWUubw+gC^`gN|yOvZ5K}w9$d9nr9+EYT#FL2MpPFhX1Q`@|dZ+j5+aw)TFcBmnq?q zF4}SzdhjCSF>unfTS=Eh#d{Dc4{MM~(F5h{v?8^hDKjT2X>TiO)&Yed)sJTTqq9JNP^LtPx^1(0&YP-|?cMzhxgf|MdlE={u^NRfGz zVzfYO)l+Zt7HI)8qshDvU{VR%S9$g^n?!w&wroEgI)h*K*R(3BXGsFS=ATG{6 zSu|;{?md>P9$?{-XA&T33>@j+q+CkzM((KCZT#*3=LOHR7xATEuL~G`m6~f_HVuF( z(-e*mp;s@a1%N>Ud>!-g8LG%}klczRgCM= zQw1xd$MH%6>KW&PDG^Gke3-T^YH2+-wyZnJ>wo&mhx^CW)T5KovsdyZHrw&VrS&Y8 zah4hDm~GZ`Y?_8tcu~Z&`O4d-s3*@e}^?(|t(Yd-4k2 zm%6?N;i%3#gUe{fu}`>h=o8^jY~B=5S*z!LWSM1Lvd9V+CJJkwQV#eYu{$A6Jhn(7^O<}@jHGrt?m9NoJ(E-IH zyx1wEJX^@_b7_b;8ixcNs%afdW*TEnGxDvQ4K60ERJg6tA(Powl5V+|Tb9@V{JZ|@ z)4NySKHo>5>yy{-9{>Mk&S-^d!^y}|3*90)(G%IQjc#@4C1<5ls-L+A{9v7V^kuuQ z-cl4fwL~sT!7ADUwjL{YS*di_G7i%PVA(5|nvfz+@tF#qU5z{2;FiAIY_SI?2k6^` z6UqBOK(|oPNQeixr5Bkl*KS!Qi`n;PMv2=S3BHYhMW463H@wZ|GYmpDi>jwsfP!*9~blz@iXPf)63MIvNGH47j zI&W(%A24)rLrGaF>4nR6%`913*!qsQf!4dCmEAUd26Fq;2Hj*xce|Id1#Czw(5?cW z$W9%)*6oyHwF54=Li8};f@ig>j~SJHKgzI-zhenxCod$jT`iZ3v(ismdo}KH6B9*` z$$92%jI0%@5Yq#0^&--mqxLN=?*bG8j{EJ4^>1Il{dIhJ{Wzui#9B!))B3hw(l~> zyPDU53?*bY48EtYF=tzC8W%BSyta4@Z)5T&Swjxj*S1@A>pd-G4PCrv^Spszj>(k| z*t(qa+7ORpWlxEt>*_7m6pb;;?a}6E@80gmW2Wb>+U?Uee}}hK_HIN$L$| zH8hm4ITUGXb8ZpEWt`$UD}P3b>0``1X=uy^yJ$1z=B*!bz5ZotXQbDQoSDIPcI#7Q zl3Vb+{Epex3gW#@*3^7Cfl`>YSgI|>v8yD$O9Rxf$2EG3)N8KbvFIUR!2e53GV0bw z3#7Vi^)<>YZLPXEGk{afsXGZ%(0WTd(5>6c*MGd6Ij=vyn(O1cH=iH+U7x*zFYS!h z&Y%ufGR)PTdwOu9q%!-}Q>YO2A($m51EV!4Rr~C%IEPl@IG8&;GM|%c>>+FP8rshA z(>j5HIVj#(w9#Np{oNyl5+(E@oq*MS}yL`TFr~+!Tr+CX1&ZS{LU#N z>TT3CO2Mf+I?PZ4+*=!JjkRp&HR=ZFYRyuL%%PqO&6zAKw%ZHI(=aC~qnFOUa+aA= z=Y6zK$9P8L9K2~eqiK;C4{Z^m7bT^s*^dlE28t@tK zP+z&gyu>a86r7Jfnb52_0j($FX_q!vqY)*L>d9&NY>hNFIYB$5!{+dT2fO!JZK!FY z7Mgd=U6t9W*rE9obe)cP%MP8&^Mq3t21a^g}gvXi7ULWF~dyQ8#JBy?jhT zT9!s0v3rheDh_;{@u{|{sYlu4sB>55C90FXsN+;Ct*<2%XKpvW?33Qlj}N^_PhPoi zAL;-8M|$F~{>T6L)ivnX>;Gzh^f`noMvvWu>&>LQp-SCDTj5wJi6_pqllCJ1(ZHW4 zXi0;w+8B8YTM`nU8|^?1vlac+&=Y|&H~A6(_bcT|8^I*m1me#O@6MGpr}hSQa8HbbxT?mR|1tR-_14qOzsiA{P>0Fb}ocs0fYDPm)#Ag(%?Mj{v`uUM# z`xxtX0x@GGWUTJ+)v3PxyvY1YAcd{IEo-<-X3*|!5nO}Mo7~v>Z6|q`Rr(_bx}qW)RI=i zQzZDyL4`skyDHp}iAKkJpX4Z3=BaH}juBkj5G-2e<;M7Gj+$vwM)p#7s`-y)jz5)Q z{cOMc@bHlH;2TC_TC1x;Db090*R%#7@mS_OdIu?HiaIyB+bqj3cR1$s zvJ-g!!TYmmFOoZjECQYqv+$;Z{mC#jzBA_u&KaY^M1 za5!ty!$DF^Fh04*TAe2PoO#|3ga6%r_x5-3;nSa7p+CAofASi>1TRoMC9SAYkELXr zIP67y9O_o2)jem-RQC=v!}L(IWz~zpyi^-Pvls4u)AZFg z8KQaD3xd+2i&Dm{SS$9f{fxsvJERi`6FI1FP90+w2Cs6Uq^GE%88N#>7uv!uyZ*>pe~+J>ibUq95DdEyql9bdk^_H$?MH4Lw4(!2BmGw4iq! zi&kQXkzC?nn5b1{GfL?l(kuk;gRJ2?!H1k)YT^20Cs|!0t>I<1DYv7D7mMo8Ubg$9`d7RyJL)}inb-9}mBWdU#pwJ!6bE$U$Gs7f&nzhHQ(Dx^3k76`)xk{lOZ0I#gKf`7jl51*b!|yKHG*WFtMz|-gF09-R`$dO$ z6__vH70{rCCG7UTbGrfu&=q}7-aV8CnG{WU~t17WvIINVgj2ZZeOJ)#vQRu)Xc%)XW^RRLd1INm7F&Iai``0vp`J0YlwYu zB{gd3Gw%b(sp)7mDA?;p>4d!@R_nazm|jQ5bT<=u5t(12eRAa!+qwOz{?mu}@1I|P zh*$pl!v#Hk1do6A65h8Xzbd%bNd{DC1h}^;Q5Tat4KmhnJG)PsED{S|hn1yNY9$Wd z+F9DkbB+tyB1i!-VQy;jb1)-4vkv6xzgMi zHZ#|OFwW~}BTu9JGc2+K!Vf*&>)KMednAFk#UOl-mTMX!)^|Bppe{(!$-DpdQ}q?K z&)#}E3Pu!7lApCxu0Fx!BPhu!&XRJRDg!5%oqDcm`?yT7pkuZ4aGU42oW;L?I!g}K z(qc8u)FYwfCKx8`)WSoe>c0KK{_NkRKf11Y_Nv`m&AvQ-yKXX3SwgwC8cn)jVY=8c z;boaS&chhfV(uc8hx!b`huKP%c5>#XDFb|qn4@hJ<++L4sLA8hd7+9-Hd3}j& z>e-f?dTt4{@VbaAZexy~TbjMiZZ@slo@|1)fujh^B)ItZZGgqaj^d!#?Es<&z2xR? z?QwWB!Sp|}6hm`Pp)$BpCpaDKTbzG>8dE_FIvNaWcKKB54v0_oq4!bR_;Jktr+~Fz zd{6r2e17xlJiJqX@)F)YiN7^7W{q9E@D<-2iTp}u^tl|P+jfNousRU4e6GD&W*HT?thI_4?KsDR9qORyxWxOb@@?IzhA>yA<0@gSypg zt27$D{odB7Wn)G_X5!Ykk;@n1u;aZGaT49&^1P1A=vmXbkfg}l8S_|=Be6PkFNS)x zcI!uC>RgiU!rt@kzr7SDefG-T_vF5Oq7*30NDe1-dp}re`O+K#>j`grSUqC^HA;PU zO2&=KOO4F0Xr-O8P95Xr)isph`b7jdekLsiOsKs2YnA8){}k8Oi`i_uO+?UW95bRc zggJv&Q8wFxnr@i|OvuwqovBo$7P!gn>@?V?RAlxvBhrydoWv?GxI_?q47MCQLNfdOF1JW zqmcxU)6SI5^J1)Kd3honb~4%s3-Z_6t@bk*D}W2~AA zxmyrrn;b&JCwk3}{IK9Bonzulxc!-)k66wgP79yCa^F7D|M~?>{OwQrjZ3WG0j;D}%c^oRApj4EUu7Oo0s6W}IS0UnR=n`m*7N zGB{5dQE647!=f|pooZ0RNloE)$C)RhGk#fZrxK%anZm^xFGT`26C3n=kvX`Q(CeTo3*(!4a^DaPXVpuH|?M5SS zRlN4Adt0cranHQyl$WyeEdsMA8LrVnN79+hI~JvJnf^*v4c`&DmB385=7mF{J%QnqL`uN&2S-zb=!`?UQn=k@ji8j;-I17OK%>3ibgCP?jU9P1;aOU(@g=K(t=Fbzn6zxK25( z?I~Gnj;xv3*6Luz=Fv%CrFTSRrS&ey#zvAPw};%V6oL2N8`*Q((xx|L$h}+F#O02l zicObxxAN1VoenT9>OsLWg$skEr0mZsBHW<>dWDx`aJsndOS7iE&uXp9_QqDZAC>j! zqx~CjKl9DQlkJmN@5PUG!#bdYpobF{MTn+isT0g8R^j;_ZCht^=RgKBYISluJpGsus<& zOs{9z;e}hpxI58U&b>BAKshpf8&_z#O^u1)o9Q0C4rU&8?-~(HG+F2&>SGU=kmA%3OF>W*XRC$8|x$%_+y zqfNi+@u4!#!J0CX)0<`s(q&X`U(O&LUz$p5(!w!WFVAhHJh*i>@*=l0#^jqp8!y@1 zYFd)kim8}bE+ej2yye;tke?_M=3a!Ig!wA9+{Uhw^P;A;0>Bdp#FDtGEm<<0yN08; zWCmF?&pyxEqm>rLZ(&aVxPSBU)erCd^P70}CjRi)z4PQ1e5rQW z^!~A#^4UxG`tLAGTAIoNDC!8`+;ZvZV|c|ni<8zd8E2rHdQG)e#t?Qe$^pheHI2ii zQel%v;U2Znfz|GYjUwSfya=ZUkS*}<^Ag#Tw+*b$a*Q}+H}Na-ADL!nLAhX?nWF}T zgi~PX?Bk@KJ!!A#E(;7jzBIJ4pa_-*{bWZ9(N#-JVR1KUXl_jhXZ-;r=(ujf5J~AXF*l9f7LB&Cvjd6*h#C}yR`lkr zH`eqL%*vqaO8gH8mwu35-;M&B_9fWlG%JjDz}?YJ3w`uzhQDth8Nw1=K)i$G8$FOJ zWdVJqbevOW#zxgZY5-k5PB4JAIPmUSxQTc%HVLEA)Dd7azT+OLtJ`26Kl`lB!E zv)Ar5Y##2a(+aULAb}JoYIZ>6f!{>#@(gN&BXsM)WtRi{2lVn4H%D`6D#1N46{REe z!Ci^U%IK<>M0G^#j1+-&%+a8L!R<<~J5H^7$NoRP;?!V zb7680O(Sjrq76KAF-7iT;`lOmGd0lVhG4jc^gRB|FcwZwsmB^t10%3$ece)g{`n6- zz4s4qUP@Pw&Nk0pzWeCJSKK9j7{**MHC@mse2_*1PQKQlafUWdt4)?H+2J|WMZh9W zVd-6W1CK~%Yh$!pr%7>di0Bn2hrQYuB|K%@7T0zz?!yVq-TZbCu-efuP{|IIzupW& zR$QZjywR*9A8&Zm)SOW~7x&#wI*a3FSu*$N2H_;}8hKQ4lI^=g8KrAZgkT`qZLyM& zF2>GmOjt>e-Ch^|@b>fT-_&O>-D_h2V_%W#hj?_j9#LX|LIT0M1_e4?Qpo>}=$Tv% zcQ=4s#9>Pf**rz&Xac_z$KV_qE!t=%>}Lrmlw*RdPzdv)+O`!FGjNOUtdl)G7E1$e zM-i7DIFJ)paA`i(Xry2Wbu8eDl$5 zBlZkOmop8hBBJ|7Q|yefdLOn9_=G|iQq&Rj1Od&q$XLFv&#kCn>SR0C>bNYuo53zh zgnj7v3wR5qF_8^s*gzk!0THNFMw2@-(g(v;sArgD(OhuLbb(}-0Dy_Uc^<>BorMpt zQc(4fLCv;iV?w{9aYJiZ=G{~M@Z#7H+UM%=ID_nR8g90C%cEs@GbV$psj{jkcuQ$(2RTWKZPrPOsUz z*5zkKwD$It+D5m6fIcIqEEv*E`|| z`UL>@Av|H*io3Zyf-2qWGFxgQCE8Qnh6CAkoA3YlA#n-(Xkz!|g}aS8^{3U{s<_(@9-(VZ~+AsYA5*C2D4T#U||c$+r0|+wLqXK!dy9XoS3#b0H7NlJ&c%2_iT4$(sR_H zwt+Q;bPC+@5dVN*1v3y>anki*^jd{cm$-se7q+^f*ZHNi z(1IASjXw8`x!XpJTs1Xr_rCw_<=&y*;>mudOH76hEOC4fB`mL2_JAA{H>14=5-xiq}y8#tu>=n87y^9z#tdXh{+^vmZ$VL?$T7#XJ zD$E2;#D-}=u@#1ut`OFsYZ@FJdu~*sqIxBUH}Hf)!Mm1RpB5XZ=ng3H(o?@4^`p4| zbJy^I@GkQ z)gppSb)qy@2zvuHHbcjRbG!xbjqqK&vmveNEetH#S`;{uBCd7TA@74G2$rg2m7sAp zKrCI5tTH@ct2WpZyb5+CWC&a$MS^ z!0&T6NWv_Z%V`1^cPUc)zOZQ?b3$%i2Io&*yjQ=dNcn(B&Y=W7$@0}V$?4}9S;W-n%d0v1v{ruTV>d5E;cd@I-< z2wtwjByxK}Q@yz52Jr>|+5#B#sGZ zooo)tcY*3rV6^nx-SDq3gYTO^etw8SeD>Pio^ZY)^VE<-HkhJ|i;wILnD)XjZ1Px% z|L~TqJsk9mO+BG3r(~MGFyRwNb9kZsciHr6ZPx^Xbu7S&%Ce6bV7)dm!H;CNmNirE z%2r@KH!9l23)Q(&ZyJezTX2P6Nad+L$J!t;!#r=oB?(w_j6-RON`Ffp%+mv1H9IVE zwVFGf>1YrntpKEX!f7H1?HNMAk2k}3rf=fo`}eP8)1JMEueD!CXUDlAW(+xJB4EIM z20k@~g0xK**HDY7g-N3367`@}*pw5ZZ;+@lA_)`k!wqB0X`9alyqL=!l2c&ItGdBU z)FuoPhxK+GH{i9>Y$%=)Zs=PJ@Lka}>~r-}rQVjeY6PCmX=QC9@vV7nSQ5E#b(pH? z6mov+II{ihC+NBvzfiEdObJOr)T9JjI~aIwr{=$oKlrCNpYr$lmxp=7=dRs-65{36 zx}~86F?6#v%rLB=2t)9Z3sb6rP~XCN8y9(aW3@A7Tz`Tdg8^aCwi$9{XCQ4Re47KB z(gu$DsWOew=%N<0l2|T_CUyjO$N?E}|I}L3`>D3zfCazG%N3bFR{jwO2;7}2(hlAbh_aV)i-Q5fZtgF z#xP58!yB+uZKOqsF!zwHgK)|i=gd+^g`#=iXNj*)ply4GK+$3Z({_v&4w9YM<@rG>%L+R z;1(f=f;LLIY|XJ7GBv|}2--vn)ra6s58FvPd^H8%xi#Hehi=qUZi8q8MbEQZM9-ZJ zC%W_DH5!C#xK`A1LnsY*hP`uOvlIf)kM!sh4fWjt%0O~^3SuyJc z!CIGG3i&2M4Dj}c_dib;K6&kK)vog!u^+c=1w|~Twxr8DInmw=DW}y>_eLEMGsXP| zT|6P$6GgtUd-@BxK3Y**nmBKdvkPWMjD2IEXR=)L*Lj5kBy)CkgU3mLHzL3@87+xzrOk7!~M~dm+pRl^n%(#81@iThgZU;KsmXs zRS>YafytO63o574~BLGJ?T$&++p2rxgLnm9C#<;?RTgah^J~-$v8IT|*Lq0Azci}F(unULO z!!deHSS*mQ;-ct|>_)q7W6TBDM4|%K8uhDifzEPG;t5#nz|9J*6+=1%+XEIs?0ANZ zF;*Fj#kde`_(x*#rnYebQA>90Q$tHSMPHqvH{gZan}80fsov@!fBX5TA1{yGoA~(d zv0&e~&gzC^)-LLHOF8U@JJ{H}YXi{F3p&5;#nLk! zp{>??UNukIqA3ol4P)y7S%&e%?O{$|F8xHBwkcAoeHBr6Tr)uEAaWfnM~sOKJho)& zw|k`D?4PQ@@cHyOE&Aled+o~#eb-(PjIvNTY;8Am^!g;FcGlkH*O36rG2Jh1jV*yjcHq`k zh9S;pdphO|1Zkn0v~7YdJ``M9^LFPuk3jM_>jVPou!{TKfvgy~WVr4v8anotet9w# zZzsYCYvCNoQniu!ov_DoOr7K&a`u3J8rOs>3Ai+Tt?gVptsKShrtUkqz;91}$@uc0 z%vGPgey^!`S3dxq`#$qr~F#4dGvjK^7`Fe>i@2PJJv9${}bR{$s$PMO;Or0>4Lek1M4L_CM#@1D#?5p zZ$F-EfL@VMd5p=70@?-`bO)?i-q%*TF6FfYY>j_DR}HE*F)2G^p4(9k59!eV@l0?@ z8xO>39aSSh0S5q-qZW1?O05JtLTsK2al3W}Hmzq89~tGok8r3^4i_MSoJGGtzi_)w5k~D$!-s673gTfKRL(|)bMu9MsJV+!b;1yqt15w zWko?HGds45&Zm;rMhoTC?49ON0Fg_&f*SA=_1ar@H#BsmPtX+xGM5!-nH8d-1vibY zXw46G{QI4N*SjN9b>Yp{Q%3P@ z#1p_iXK07UaNO=;5OEGZxqDZ4-baX9XTA*w53qWMhV4CNA^|cEGNDKW>=K7g4x18u zZ3SBpfLkol>OIzaGRubFY=TdRW{L%!ytb{lmRmUlO^#zTY6YV&N)2UE;0V^fJ?{Ma z?T>H#oKN{sdGzeHyR%q*OOaxll-X*)?Hia$CajbFXd2!LT5VtXYna^nvF1HxfpNCr z55+3=LRRELUIUVY_+vY(L!oAsq=#~wCrucloq74KpeXmC;ziH)?)Y7|G#Xx(V#WC_+W@Wi- z_bwa!g*9#;>OXyc@1MTBc{%aCGK+iW>fJ{ozMf!h1w68~gfk1($%BurjSgBL=vH$b zxcGFoVKWQ912WUi0Iq8%?+Z!$!68cm#KP?^0NPBlRl6|uz1EX1@y&zZteiw9a}IQ1greGWIMCrXiGTkFg{_DN7e z5w^~O;axSj5Efeej+jb2zGZ%kMEnw{_TPW@-M@Rg-^9m19`fDL32(C*#Q*Pb)lf~bUmFCawZ7W-zz zvin9@c4FmlWtZRt^T7Oq=I#ufM_Y0>d|tQ}9p)H2Nvc}w=5?Du{LbLC&tARPa{e#T zzU*@Y9=UoCi9QTjxuAm?C+3DO1DwW##`TH@-fOGqBd#)-X`(xg>9VK_S8p|_0fN0N zp&1^%AQcPIIG#X1+d&v@-2ONlj`~|Ce5V^h7>r@3^4ZzW*qAeKGRK{|GD1X9??NBG zOtgel14SK@Tp&j}1P=@q2I_Ml;y@Hg-NC)1;N9JV75dV_B9#Sf=rTw6VXP&d>zZ)@0Xj17!fS2Au^nhNQXey|&$*O0 z6mrL)$^{*e+XPm7%22b}!<%+Y?vym_^la)xz?S7fu6S5;eEXY^(CdwDgvZk6a`TLa z0>++O<@SsF>%T49BSO=Y*Y3WV{&lB31p`5wTKLN~^)YA>4-;lVtQHl1r;~~i;;7o! z3`!gRkumn1wR0=dL2GCmK#kJU>IB+u^3oyw?73aFwUXgbVjEHqjoR&Hqr`DLC|Z;# z?oYuxJ3PvTGo;II6X%4);S@{=#qI?V2+9S~Vxc{_gO6{xIC(}#+dYg18MbKyU)V&= z!cjpSRFgsWhl#u0%9;Nev%CN7Tl?(g`}SD>S3K6A|FHl5cdFMH4Id*5c_xj83wbrh zl#DteMU-d^?~^h2N;WpDuoGZ#&J@iiY>Syd;?PdmFF2ym0Mc_qLvEw>Hc%}eu{$Wt z+$K#QOKvZx_CCX50V9DO1@EcyvCf1`1vihg2VS-n4Mxhce(}(y z43<&`DAkVU5VN&{`*H+rkE#eWreTB+VNZDDAb?MSFJU%Ya~nECd*;M#y*p&mPSxkE zt|)Xe>cl5zoC!69--=!>mu^VUr=QW5$I4Zrn7guiw-FF(PFOwdoUfMLd^-PD)iWscr- zzod05L|tU6;@F`$D2gojkCq%=2**K%g?E@m0R`O0l^OF+)<)iD5`Vk>oqvctZ(id{ zKYRUNPgD3B9kBG{ob%##4bUOys_Vq>BsRUBG(kfGmt%r!G3#4TEd%q4!I+wsoWRvr z%IcuDfN6(c#zYgbqj0atW5?BGj0Lpv-TT$Dt%cdC03#qqQ(*_RHCM5Mj=1{u^4%MB zh0=WrUb<^nT#3azS|NpRt+-|zD7RV@R@rB}VoTh0&03@M6za9)dymn!-8LnE9Uni0 ze|cp<`|P#*_Dp}kGyU7;B566Ag6R9B)CH&r&w$*!6R_xl>7}%VM$?qzHX9m1dVTW4 zw{A(83A%Qg)z;aCXa_H^v(w9hX;ME#5?vZ=17>B&PIOvsPdZ~@1iKeTCJR6#D@@-f zqbiYxv0USW7U>+ARh9r=S*&g0B$~O5bx2T0*uSr-z|TqXfsu33Im~C#sIhV1dsGht zVmc?`I`;Of`VS}fPmcxw&tA5BmjBo3om>sX0g&%LXQ6oy<`uaUC_#;C2NFEqbv6ib zyVhPf5DG3bQQGVHFYZ+he6t>4T=j+9*HWV9{mRfO#pu~qZzL1S%ehbZ-SqBzvN1n< z?QU(%gMPQZwOkLpdreM<0Nj>W(SRJQX%GiwJb_%Gt6(J|1_^cTu)C>SS5UNjDZu12 zxmQiGIr|2Vr$_7TkRUg!UfaOqMr?ZHHm3DkILILH3@sdP)@2m6eMcz zAL>6|GucN2fM>7XtB-X9l8AZ3Ufze#9z!802AvEeCa@>HA!V-cDpyCDyB(reyb9X9T!RN_f7=rR?wi5!#q zrWMrb#Px%OM2Xb^G{69W?27>fg%AowJ3Ki zZ93}wj1&I#w@d#&ej5Y)5gjoQuM`t;WcR0!BB^#B%Qk|2s2TR)+jv?#0FAV%4Y+Rs4UmNsirJx}b zfooU*qc^I>tKs>A;iR)ST;m=?H|w@&_5XRS^Xz534L^Om^hd>e;1>=q_fc7X06}1e zYYXknj^+q1T5(6Ys<*^TfIUv9jpZ|has#=L)au+jw}FjjO@JL{pRq0!dm;4e$UR4O z)U*|a?OR&j+F5IGf)fyDGa&5O2^7*@Jb6LP?{X>P!;HUiZA#3xuTXAmC`N1{p06+|EGsP#m`>1+j~R#n)@fvTPJV@ z?8T0SKs{JMOOF%=J;tqS>IL zjuf;*2;>bPv<{f=UGUU!vSd};U9<0`*jR3!V{L9e0qjNUKbM2vt`$oN)i?}f*AnOFA%=k22>`s|f^4LrN5 zVCFWwj!TsTf(gOJ%c*NtIVPYwOvwj2ciWS$cv<%aNe}ju2-KtN*-eo(GN2UF`y$7^ zZtKD25c@TwwY$uTTKR^GYTvzE&vy8-?W}QeRxL)cD|=}x{NbkVrI8K~Z(FlZnsD%z z7y_g_n>5VIFcCxZ4r8*}X0_P4A`Yr;2=PJ$sEy_xIkRy1SG;9!$8vx8^8Vc$=zD*B z_&t60>b*+I8#Ll9#Bf$mT4?EQg>1|4mxlORfR}=Fyi6x*B5I2}S4H(^}!!tv;g5 zI_uIuwT3x+h)oo6R^w<&TZ8-dlJe0o>`Z`sqfrMp$$BGfG$yYAm9QuPXagH$SpgpeX~%^ z7GD(2d7YIVg?}Kr0fCLa)}d{SF)ZELRC^S<*9%kT(a7WsbiQvNa@UxN4{Kgn+E7Oz z9KFy+i_INCg6dsnb>wfW>ga~qPv;g)P}*6pehEgKBl+7fV~0n_eN*X`D;jKlEPOBe zlI*A&Oz68)2T`Q&6?_A?rY3 z$g{;_ic9}=d>!o>7nXfqGB%7HMbGvMvT@*i-#Dl+aF6Z=_IA)YJ{E3P>X2=7p#hJ` z-Sb^l+kB(Ml%59Tf+6tG7n)kSM=uIO(`|Gg5HsLVVFtNK8g-s_u88&?bI%hJh>{bkdP z@vR`4un$5C6Q7JLf7i#b(Go!4W$fEf7{XcFwE2-0d2q3fFW5xf1nS~BZEv4`EDgv< zj^UEkAto;C3O`1bt=`(Tjbgn=)>=dh4tFF6mL8isQQ@|1IsliOo0`oWMvd1Z-{T}C zVp&A193`NBSdIv|I^(Qa|fEWIsa*=~(&c4fkNf7JP5lT zrgPR5=5F1k;ph4++{B)J)<7tRa@lGF;|Ft{4w2j~%_3YnlJ&x0m%3uU6jCZKHtAf+oST2U$Z z&cQ#m3WV(Jql;A4hUr+l-G>GtoiIQ5N2- zg)VTXxplClj|2)bZSLO9Ru=bxyzc6>wXH)FUT##t)MuB&+}F>^wqHKyuV9jI{!0*dVbRxSb4`<}PBk^l3B zUVC-&zPyQ_K7Gm$U*3H9c=GEv`B8%L$t(I=aE8Y;-IOOhVkBVrdm*?%G62n*V+`d> zCuApS%fOPsVlq><2U5N4o^&?6yKSNhh26kqAZ`#U<|M6JTJX;E9;Tzs4g5{Jd(r_0 z;Q&VTfG$l3{P^^2#4TU|MR0Eq?rU$f8|zG@lF@>hf&H-_5JLO(0ZZ2D=qn~>wit#M z2CZ$(LFCc-05KESnpPuRAKYF?{$u{-$Bc)J;wP`$tLW3w=iz84ytlq3F#0}*>pndg zakuRkAy#mQCoS2LNTOo|aADMmAZ~^%lKCpbr!$Y6)Z9~(rF;Y3fHQsY8Ei#Z*S)bB zjN1uNF>Tlj@H;yPsVyj`IueQp41DciIjzGhTbUg)+&Ue>$ORL6<$%N_4^FS}V$>Br zqdu*nFSOy+4LCnK`qVO+8I6$OM*Rw8|KfrE%Lo7R(0z@JkxW8;$oq_rXq8Tdc8Xij}HJm&K(6YFBV=>m=_ve((} z$Ykzz2Ii+c&JYDCav~WFD%0&Z^}8AEJ$v2mM|)pobp-``)OY~^>yXJP9K*ndmzrkI z#f9IhupGH-)LDuJm!V1^E3 zf(S3|WwUkLGzQ`dbK=+$3G`%ySKR*c{`SkqmvHf$m(_c)A%61u-8QtoT_I5srXrBE9p0*gns5R# zv1`vYBA8d<$93W2=5|BukqlMc^tOt5X+wO!%ibLn7$5t>bcG+F^9D|hV4BgT?(PYr zD-UPzJ5VFm27l+AOg6wP)&nLk4xt06lg?95HaJrTrmeS};$K~uivP$*_fOAWxz{d@ zj|r^N;tN8wkpRMCj|QQ+z--YI!VC*Fj7f8%7PL3E;(|GUvruUGph2+)W);x790Jk7 znCpsz$_j)+(Z4S*gz@pV8QAvT?uKdLJi-wHHE~Wf6p<+C7k{VYt{*AIiI|`sB*u}8 zvvyPjxda>-1qm74%X&bX)gV!B5EUNS%MdT#gL$o@4jht~=wAbm`drRt<@#qwC0WM6WOLNd|!^43N0Ux>`kSueNz`$zg43rbk zAx>cVs+0?N>*F-SOQ=X-g){KHP^U;gZqb2)hX&Zzxvp+x_l-X@L3AjmaA8#aba;ck zZud(6@aI3geOLl`_OiV;yi@$Roi2HD6nuEuG?DKdfoy}bE{7XgV6@(|b;pNNuhBQ* zkQ`}kIH;ekFV5VpPh6WqvesZMNA?ac3G`{!7T~X)H|oJt?uzYm?Ya~(YCTBlICztO>&U*kqI2rXyXQl zu|GvpHE+MC|M2#6{^ik&^x4by+PAYX9TTYC?Euo;T?bqc6x&+|cj=&WFJnj4*s#_r zjYEc36Twlu0Y(_bbV>4R`DpH&kzRt;vl>Cw8nE8lr5_lR{V3cp?M{%yv|0hdBn5IW zM=I@!`K1c?zPggkB>@6MOQ20HC=_>YV8wzNOAboI5ad1~DQS)#?N|=n5F}{O22cYc zPbO~T4g%hfFIXE9rGR*{FNo}VD8}*{m?I3z ztpk+3yt)FW)QI)$yhi+P|?}7bGXG0hWSJ6RNqYC;^@`;K2d@2v@pe$Er(9 zGI=Fu!-kIN%w`Vb0m|w%ICHp;w$)CN1_hIsvyZ-5{dS*cd|aK&bPqSTLB1I)qI^bAr=J#F#~*Ts#o_*tpXjehu8l#&uodpG?pn z=3-+A$8YbNFuvon4I&!#T!#}{usj2I$y$*V51>_3i*(wSeEk z=gPHkmoxCCmsRixqCkSpO-r;eXhV8GIGXRXZjU8uTxHU)!VXJNQ+~#g8aAV=L=2ZAO zDUj&Hxpc-gB&}6I5>Lh*aX%M9V4j?p^0RPHSA0lUECJkfw`lCkSHvb#RLeQDs!V%ULXbxDH13_p{vMJF{o1SzP8_074O+=ciY+O49GjDF?mG*t3_MW|ZuW?Z6w7uiB3lM9F6X=mXvE8td2;Yi!q%(0o z>^#IyNMH*WICrC#Q9aMHFmPVx0lo+6tF`+D`7CiG6!;@8#u}|U$`#O!v^DPNw%-$n z?b&Ph8viFYyPdx9^Oh+KeK%~S0V15}89QSHhEt;Y5%O^ayXgbleVf2Nj>8V>sOG|! zY+VwSDa!(Qs@0BB+wEMn#3hO-J$vb1yF;A#@6Kwojg1~SMH0cB z7crL^?#f*U?zwW{p;&N0z8R0wB| zgW?i+>J7CaRQYvqI7WXp+h`HXDOG_qIeoAjM_7kkuUplnv66ihyb~4xwMUdfOKq~T zY1x1=2aX)WN6vw&$?f>Og7okSm*VNzz@Fl^8wG1Pe4im!Vq({={V?tLb@j7@8Ha~{ zrLX4!)&oKCob3$rvpYn;YPzh5px?R_>?ny;0~eqn33#jT`1R+vpTFd%*S?}pUc37% z;1_SG$iUb++$PAV=nlX*JSeD7TKFBH#2p>$7sui;sMf08$yJ!ew69M|}ui8xPE=YYhmwAD&HrjhfY) z`t()4b9+90@(SLeV)Wb06)z{uO{%BH!G;RGmQ%%Go^1nhPG^%X_@3y3N$mhD)Hf#- ziVA`9J`5A@Md=Qx9NBlHjI^P{`z+rR(bxlHD?-tVOv{ejYlrWzp!4hnynC|t^-DX# z)i)Qu+GkTuoZ@|RJGr%=Ht_=LtFdTz2JP6Y@wm*UZdN^LqM5&XKPMNu5>PtwW zTBlDY0rh32n+D53U41uTBIx!@8xuq$59y%;kx7#!-V=LZxEZ3G1D?V{n95K~OPXUS zfQhbi0!A%#0JLrV0@0zoG&|N-1NyZ!(AXe4#GEII7u*gxt})5OC;PvD9ls(?`u3fF zdHeChn=k(9_xVu1{_GWf@Fo6c>Yk&OpK52w(19IEpJPNP=t0he=CN2^YmuI|*Iw%^ zR7+u9gY$`XEAJ_3hjf#yo&(Io4!^;63<$T+(QqXm>>~+=$-X)gfwz&hvp3RPXAFUL za)qGy3k%Pxt`3Cv0LuzjabU|-!o*it=s>0&41I?`TD3|yjgF);2m5aKfQnSpr5^-55Cj%m0^JX612lU;kNP6 z;?co$-j;{B$J*BE;H|B6D zp?y|i3$wTr?N%e}Y0D5KsB;ExEO@y3YLj>0pq4F^9h4i`w>D@j+1r${|Mh`yDQKy- zPfW_u4MwQihR~NfOTw0KU;2En-u~AuZFx9ZdpPM!In`pt3csD2~_qBM`VHe?rkwu zlWK1G^{s;P0v!d<)8UP3x4+fj+2#MUSMSwVFgJIln5YXaLNp_cCM*S~Rv7x5zBUHj z6Ys(WkkSifP9g(6ZpB#=AgdJQj_}=5AbTcjbO0q|2fJe{(4#F*(4I$|Lv8pS{Yk34 zIg+AF8WiL}aG+iVM*KKyNjv)h7-X&Ri#iu=lLbt?7)llR57gR#Bmtp1YAu4Fc_nTt zYp`G*kMWu|+;ELud_Z*18usw9{_0D<|M8uFd2GFV?)ts@!j)}t%QA!eEj zH)Y`WY3sap*a1M7HLNrVl~V23FML=gjVn$GnM|c_{0U(S46}pbNkeh9gqv#z;D&M0ooJKPtuc6GJJmtQTjH>M>6{*9?&j0&Yzd*#7?@;~Kco#C_B@6~VY22klNWU%&W(QI>d zDedZ*%|k=10G4zb%~B-}CGU35$u^DHyX;PK&IYB88FVy@~ zF;Z4JoT};*kR$EeGw{mF3ZMdK0}UOLP2A%XfXa(mn<8c_$@g?|h^5dP3&utU&jS7q z+M|zzRR_qy05c25ZUj2dQN*sv16Pg}19n#Q5OHeQf&{7$x9zbYRGw$Y=_kk7dnO>J zMaLC<0R6cD@PHcg!>4?m?Dgzbyv-TY*Qa~wnM9xtglS?LZ>oN%qLCWPfPm*H+=@9- zJf79az~M>6{h;~5&tG{{>;e|M96JOPeGS28$6&ujLMu*m36I`I4~#*(-<^KG7tr{# zm+c-j{!k(5 z!LBR`7+S0A884qU8wNo^$=rbP>e1t}?uM}h)$YNL1H#u$)+8q}ERT@ZJ8pLd&Md$= z+k_)f7rgCgK(ne3!3Za-Z{V-m;Q^t-B{*tgdvrUBP3yXDG_yA!+)hK*xA!|_=70Tt ze)#;?507|G&tAB15AZ20w5vEip%1w%Cv7Ukfq{|eV6J11IL_z_tiW!4oZ*0=6m-kILo_CG2c`aQk}%I+ zxBDba|4Qk~zGp)mo^b7PIxHvL7q$Ob!r>xCAj>mO(>sOr6F5D4N7Ug zD%el}&b>!p=#LeKi?E4}j(e1`;GK4Dy+zCbi4rO3S&I1Xu0eeJCC$T=f;WxkKtx)H z_N)etF5H?nlgNb6ro)AetP%rt6LNUpC3QIeV7P;_Cnr|XTS17Hm3T{8fP5@>_=oA zDeS}@KMXQ;qhGi*P73>u8jOM;rlx(Yv2k;45id|?ramY5_b6DVbC*oYv7Vl~Z z^%cfnqA00GwwM4uk4u#fO_f;8mZ+GIV=|iDl3{+E{`rf4e(N7z3p+h~{cfuq<7e5~ z**kX`W4no9J(WPeiPKyh9M$pRPsyF-03pQeE7V5c1XU`7$hs!>mcS_-IlH^!0uMK~ zSZj*m?){96c4|&Z6fySV*m-+{_RUgjPYrzbAi6e<;Umc z?YYW|@D865Y$LX547U-;sSkBIJ+XD+7G!=1>1G?X$3!hKw6?T`VzTKN=C~gVL&d%& znC-V&iiHmHjGP^0s*+QMfkg=8p`v(BQxHTepW=;B^)?x}>y_?>pwt0WqC-yy_B=4o zJ<{CVV$2Z7>#yk?g@|B}#j&nR2P7-EU)B#FKfU*NZ~vcs11Q0xBhHi8@3kM{wisvH z0N`ucf-8G1(lz=jbdF4q82v92|A0#CyWO@5TVu2)Fz=`q?k zUbAYVX>cZ?y&$c;(;8*s0?>W#_Oj+DpCqaBcklDo+1%KmPFUt=QJ>;iP z4-*v6Ubh;i1~&I#J*`=6(3iI!@qJ{*hTM9d4JZI~jcY8(lnH+$-(+F!tfMmWGICDMT#0v; z*6l^af7y?RanD}0U)Tu8&-yw{7pPwpFiXSU3bDqC6io@w!T4`F%77X4L3f6$rg}Mw6D8w7ykP6~@eTC;5CjmYo;A(d45IA0&h^`(GAk>MS_+;m)925O9s=e~Itqk?N_^iQjeBm5gD4hb|#0LD!T(uVJ zR@R3X&V2jq0~FHOTEu-oUUBxq{bGSg)+`OdUTzx!a^tfUyJ71Mq`I?U_1sNS8U5Q- z_3sTGzquxH|KoqWW}1BR65jP7zcKx3R;aCISe{zkb1$%RZPEl;estebDFSdVD!J0Z z!eXY)uCOd>W(}n15gxLRh7c9_Cd+3p+JJRf-wEKGjy2GY>fM_*Rln^)V&F}JXi_W8 zW||CO?9e_w1@!mf)i5tt8Ne&RDfzohb*1noP>$d-NKw83D=nB8rXibhiXlP zMY?1BS7VGlX_G_xg5WwLm1`moi=29o5;krK>=bE@Ej5~B-vAw;I6U)bSqHKKNr1KX zU4sJ*bh+9av|DrJWt-Iu!-*c-Ol>7g9YYWJIZvraCu~=oNDVlb+HI(>{X$Wi;X4{h z;nmig&uf6)_bKGi+Zu#vL29ff8Mk}i@OSS%zy0!XWd7`>d+nzf#S$R&b@d52V~rS= z9ZiVl*+7-+l6xk6;8R>Y7Th+|LXad$M=)V!On5Ai(BK2SK6qwG)YtAnH<~CzGeDv& ztcPd;16#M-C15!>@DG8RC-zMcKAnk4_X51fshK%^9D9tAL+}R;)(P*(Mz#mXc~FpS zn2CYTi}7%njLJ-lHLTN1=S@u zb+|JCgu8=t#{g!WJJ!1ZCmdwl8pJ1#SD+I#y4kjJ!o2{K%$_HxG1>p*?(KT*Y>xCi zB(Nim$Ii?kPU0kRCWw5H7}!F0b$4}D{!LYNl|&6+k|6nNq7(lFpCmsxxF3?QhHI@Y z_-qZM0}1*f_wMJbyXvm%!ak}^Z5#qi3T;IVz0n0wMAWby1_=}}XG|{{cQChQpshET zIrWXU>_Juab~fj~j`xqYzfWGX+cr6Wt07%lRoi~4DCeG#vWpcW7MvT|MO#AvnjbY8 zcO>qnVS5HLd_ruT0oUKkCWu%7NRIr?KC3QjQq0-r2E=*N?3`61?tac*cZl~zJZBk0 zKE^%I)?^#2AZb9r6C9;cI1F?(?5Q|np(mZE!=SlwFVL1&%WI#bt-)-zsH|6W=dp22 za)%tLbPar(leDKF+qVUW{|5D_hmDzMuiI;wt!M~M9tQ)S+u~DYTKLXi;0bDK9TOx| zg9a1Zl4G2lc1;0Kme$~rE4~KlaoniYrKT}4FSuO*dCNU^@7RZoUSpDh$aAvazHtjd z`+amMW)zJ3(Zi=^xh#Xr%2DygcnwCPRxKgSr>;FSe8Fud$oV9uTIu+jdj%d(8Vwb> z*&wkxGtl=5CYS2{@QlT@wB>DM=5OA7diiAv=kYo9*$em@2C?JYJ!atb;Fz4mD7*XB z*Qs_)d7WCDXqgfY%qDgScCcKtC=ug0F(GoN)eEDg*5umFVO%KNxF&6V#|nmzYT86a zZB1Im>$Wq~TR)5uYryWEFp}YojvE8p-m5^R+A&$HG8>}+n8yckX%}(uK>?D*uUuz} zMh;aB=wwRaq?m4-x|MHP-O<&qYa9ysYQOEw{M8>W29rH3_C9;*Uj2}UnkeetSD<#6 z(#|RvW$>}0DLi0;1_2*T*d+r1{4*64WQ+%J8zxX6l<34Dyp)YVGi>GsXYfNPXIok8 z*y}k+o#;0)Wbn5I{0@+?_u{e8n^MmMw0?+#dEQ4C=RS|jM%`=IUi zw+`5a`i?&LKB`&$Ohr8+Iui1B+9n~!q`%RQ>4Fs0En48OKK%SK!To;35`Om5y$aPz zFxn1sdNgLiwRyr+s@EifP~;FzGGr=u;sH4hpU`TJY>kjaP|Bcuuu)?wFebxox8`)B z+ib@X%Z1=H71e0XNN2EdU2jKge!v;mXRqLEfB_IZ_%^E;9fUD)&=>)rVYO} z{#~p*onQk4uK|e?3Ki!R2RIuYrR@z~!>$O&7x_pgV1mYu(MS7k9cpp z-;zQ8?(Lg*`RT>potJq3_UE78Jp@NTc?oZy;Qm|wBEvzdKNOH`ffE(V!>rgQ9iuF0 z)E6hX^I*AN3=;-NGdpkM1K}aV!>aqh8Ac#TF)E<7w=X3WyGENn=K=QvjzEQX3*)M5 z`JES(I!4Tr@R8-gM+ZpDRETzaf{KGbd53uyKGrm+(-6AIqvqN{45tyPGm)0)J2S_@ z=tkh|@3A`-M>(VMg#qtmYGadH8+UOf@IhWaeg4ziheg9@FW&7I>RU$+xG9%?jJsm@ zc^sv5uR;udhxhaydAcDDX<4y)Pndd816$R>KRVt}{h@iZ0jDGr@5L<}b(m=yC44S* z7gqap3`JduGVJ09BoP#4$M3@u>oBh*o72c zXJ`(Cc7cIgBzM7^>5gq*!wA;|zqy*5lnN71gd)+cvKcb_l9fD1EV(Tj{#cLdvls8S zdiZTmtb(Er#{XzyJ`a<>20h)>%quIfx%!?02TR8tgYs1w$~KA@je)A-47b`)xZdeR z&86Id^{4~rMy7k4Q2x!n(H=fVKmxnmR-1mXNA=mO_uA-`Djxe8Jk6J$bBIz0 zMC!WDi>`E^iGgH;kGG5C#G^dChuSG91E(+akoRaV&2mFXfL$mzLoahow3Ro522v9^ zyatn~%$ghSh7HUHQu_goy}KZzxKPV&_824ZzkcuRH4IbzxwQE3bNl2~y*=0d0*%m~ zE!~Q6G^Evfbqf{U@CoTW(qo$Y0oShpY~%s7EjVtVAQ%P)TH7iEDOPMMj&+HNVEe9M zQ5b3pt>CtxfLb_k>R@V<=3S(T8LuJn({Y|_4tN0IX=9Oqg}<*6PlXN#aO{eqW3%v; zW^pvk`s4$OYj86`K`yb;oTEkTSyqkOu4Sjigv;Z!-OL@H`!0{EFaP%YtL<-o_jp|6 z*=u=!jlZ&C+E3*%y4%=b2;w%uob%rCJ{^$n$|-A)2#(syLdm$h&qur z<=h?0Vn~!oeG2G=sP5}#O4s9Dr}tQ+Lp|TTa%(KeaHqg{op~<3daKK;0|9dU7d_GO z);@iD`S9`mhy3{Y&BL$qvsd-o)&AFihQRkP*W0rjOr*yMm9G_WKIj_M_W~Mg6eh3_ zAh8Fq$IBTo2xfjhr7|@W225g1`Cc!~2h) zU+nYek8k|v$GMtkFY6tO;ujwPb?BMKI^mqxC|I^N*xi~U<_oV8BC(uTUPKRUWMK@5 zea_V+BOE30MWZ#bC73D3FRMA0p=mOwm&)3~JKBr|uv$p0oa6R|J_S5cByU48ig?b1 zp=0#E+C&P!wH~t(3eL7_pWJ5X0v6$4m-Y<-g040wz*-!!PG>|J6tQ82@d)SHRsh{D z0Fz^~;0-a&9wUMNr-#@3r~LfLt@P{#y?e61O@v^k%xPj6OeGEoViGlJT{GpTy1@Y4 zTsagm*#>_taKbsMvjS5U9^LEgf!3TZY$+F}jRn~@o$HmO&uIOu z(Sg~mL4DrfgX+^#!ID@D&WXuKXv^UqK2xw%7ZE8`(9W6x#-YvuJ_Ae#5GM2kZvq`0 zlXBsdzmQG2i{dnjM!CB2p>T}u&}@+r7^DF?b2Vzy#+u{|ZTTdS>1U_Cu4*wJoiT~L z>8_SDVNU7M_Og=!dl@EyF1)nR0$BDE&bDi7^CNP=+F4*Dxe=QosZwEYbuNjOM=$N--Ujg#d-n=_zp{C7w<+2fb#nBj5 z`96il#=ze&oz3yLz_kFimii1+-kq34G3E&1;b6=hAqWjmM_v7^P}rB(1Oz1Jsug{^ zJpO$DpWk2lcR#;<`{onI=k0BN3e;J?UHXSispl^6YtQ@)q)@EeLI$XHUiglS9+Z1pi3ot+|Z zJ~zMJx6Pzs5I@9Fyb%YyE)xUDW<)@iOpHz$GHy6|b2b}La715}xv*zb@aHKidCimA z45zrM(LI;&f@giyYzuW|bRvNZLl|{TdJGEt``ZiuQ+|9CFQ4**y>_{uy{xZ3=o!ZV z(NoIlDA2m3N%euC>Ld(&3jq@2v-Q39;w7zPYYeG(b!>e`3WVHXJqx>r$yg&0Y2kHM zsJV`zaaMEg1H{ZFXo#lcw&hFndpo!_t4r!R)>NA>;GQM+Ce+ zefXI6C=T@Ob$#vm)_H2E7q#i$5G=o}!L(O78~}Bo-X)}2F|u~>oJFUNiXa2zaF!Zm zhvC#h03wHPDJ%hJbarK6wlEgyNY1kMb|!br%;j>+$>^;%5#r6&c|_?BE6~9=W&&77 z=Q=v(gz!`m=RwAtsplL-+E@`?)}a`C<(X^F3qye1{OX0d^+Kw-w>=dpOw_>GKqBcF zEqQpo|HIAo{s4Zqy?qJHZol}Ocjqxk?%8Ym+BF|@F2am^o`PYagFEU%NaiCy=0TZ~ zZ8bGm?}wr7&H3K+tCcC{@CO0H-aVNe71)334MQnTafH{*!4<3&rV1NJGHUGW6dH48oKYLkUyWD*p#xw|5A3ptT8|Nr+ zdMNlsH^zITptqE@5<^x;WK6FxptkVDV3XvzqL=g%6KFx_z#|h^n-#od9F-L}F0C_0 z8yj}`X1AByrHC-@08#v!hTp&OBv^tNdHFfU@M>EbOu!65N~hHrbP(wUG=HoC`lc{7 zbUlUaBm=Auq7+K#WYu=zM+5QzMDyH;2kLmNKKMVrzuX@_zWJkl&TrM#KfSzp_w_aZ zC=dAL^?kMGwkuC-DgliZz}$6ZXH6zQc-Js% z442@#CKGZ)6j`WRM*-`I3RoJLesB@jrF6NAk2S=sJEW2jL6o}DI@7WS5Yx665}b_y zIO?Ql2xnLh49p`z4`LNDGhvJr(`)FP;dusHQr%dQ5(OP>L`+N>!53thG3U|y%e*fX+ZT>OezSuw7L$}|v7xmSveXbb}5B%i=wS0uZ2>_dkdPcQr2xDSKh368% zbBL;UqO-eE0M&Vo=p2JP+%5#n#NI>aSV`&Uw3WL1Mzxrr=;j8|mNz%O^_P#mb6+5! z>s~&mV=I!q08sSQg=CxBJlq8WENvs?@Rrypet}gKosiSaB#iJTh{oKo7xAIjSU7`^3W%!S z0rc@i4q2>v0XeE1)5Yq%K%vpZ*Sg8XuZ2EHY`P2qsILK9!_(pn4FCHHS`I)9sY;u+ zmO7*bQx+HlbMN8a1y;n3xUC4&;}XpO^7SJB(cZo}*Bs6DBfqIP53lvJm-JPd^V$J( zdy=?1+|f{jOl&e1$xwvKS)7M$4FiM-uZV^J@N!G;#)lIawxK8cScE^&*4PzjVJZpf z!83z!!X9PoOu-4XPUpOPeNPAkBsQ&U7mF~!a1KnEuGzcx4I=)!P*aE=HIf)WWE|hl zJhZ?WGeC3Q$BIqd3|>eA)%loS{ZGch42CkK{_?=4jW=Q1;|Kb``+BXvzQuq3{O0YW zy4tgs^3~_Ld2Y}uA*anYNJUR?RUDfp=fX6-0!1_h8wK#eI*=ovGaO1-y4zYQ!tmTd z33Lvx4O~VM6+;ZMOedpH#3W-JnV120(Q)qTYJHa(5*)5W;w;D?82xOK!MWP@<>lGL zeI=C87-55)xcsy+l24Bwb07vm^J)<@Ajz~1AoEFMF2#HtO?1X{Zd9@Gh8#SZ??%es zd_pzFA3nFwUb@%DFow(|O$lI3A%lg?MF_ofuwitA1sOBCQEFoQ-^M(KIWF+12%zyc z@!6;gSU?M!0>ut?Gg>sQQQr`2Aw?tRUdQjB*@mHvFT5<2ALbEMDGF+W-qbC|WMpAPr&V&K%;^Wl zTZbZR>U2>V6V;z;iOnr~$;;4%i}=&+HgQ0;*i#!!)(oO7I0f4u4{_;dTK-XIs&!A56RQ z3`HUs3gn8!xC*TCNTxPQ{053@%8;Aa^1uAUr~LGY%>L|UyQh47d141?jWN(fonS{G zY1sfRX3rc@m=S=v*_#FiDuE>_G>9gZV?0UZ*g$466^WhQHJ33jG04z*07sE@=CFbf z3J9{LLFm)dx@2h1;7>SbvD$END=|=2I1HfRJ!(6=V=IABPJoT5V=})CBf(>! z0ty}3#2|UK9g!z^ZD2DFV*qj39E@2s(6YU33u@`#5L*BHuRgtb_x{}1HelH_Er9rR z_mO=0SS*<_uJ7ke>}p}r%|&xVCa|%#81hVH28N8`u-egW00Bz83vq@~ZG!-^O>23Y zNaWg#Ot;eN(#_2_c8eR8%;VW}F4H`!q>v|r5=!&qq_rPhPuQ%=7#u;k|h2)@q|bm2$WiA&>4&hGE!HxGKTQ*i-T9wL4*+ zsnU{_3(6^hUz}0T9RVm4zVrkFlz!(nsrA;*T$75C zqh2UP589YX#;e&a`*!I1up^@wQ79Y)l2*OlUd_My>CL-0uW^8%y>$1V)UTm@aJ6jU z=>|=gF@{eAcLk@4dS5C-3j4Z^QBa-}uM*fF${W%MGk1u?Nazxh-p?8H6jXc5g0*6{ zsa)yWbQSXO=B=}Cm3@bHb~@eE+R^E;DR+~Ni0btq?A=#s1b|6UaH+J;fmZtf+Y!A7 zTR{75lL4(>GwTU%wt#1kZL*H;PQpDgF)GT8rVHx(OKaS6M*qdb}6pWN&h=v0k9w%tm7lytJn+-1pa3Q97X+VTqazOr`Ch2U}-*m=RmH zlyi+o;AIALFpA%ahznoM0wEW^>8o*8YF{wSI^Xsy!?nK6@1(T;8u!$hiiz6IZ)= z`Le70JP$(%64iyqm17jl6TwNiss*~G)@$i(9Jm9KIoqKa@{E?!YMn zc&k&pbqqK2tlJQ?STcF=mZxp!mo9Y zetvM{^|M#+?&aIQj<-l6XOh;X4tC#bE+GH*@mAx2G16$abG*vASm05qL&T`RcyFj% zwZd1TU9d%WMBKdlWcWh`w=O|E8F>&_%6@64C%zU_?~T_#)Q;)di}&hP-JFM}%{ai! zc4@1@_6@jcpCr7Oa{)Lqk5*%BLAZQ_Ulkb+38o%FMGp$MhIhn7>R4s3zFZ+M>{}8f z<|`P`H+C^ieJglUw>zdm6}gw|>0`Cn17AuSvLl8xYr_E7Z@Jn+XSPt_MW0!+&BP$$ zsRS7DbZBP4$d`fVd-45@()5 zFpm)wPlC<~d(9!XYxw|Qa7fTF5V$91X%8~vGTOW?61q3DHP&bjiwR=rTd9GgN+Lj* zMV;cn4`Ktur>MC>G7p0k5ZJ`CFam}`{wVT^qWyqi8UL6Ed(%}|QtPoD=fwfIkqCI; z4=?TCe7&@P!Bqe3WqfdDIk!r>Foa{MPKQkQj!C8%zx z)XzC!4Hn^xFfhy)Z3JO_PInM$tJY+2I}6N;HQ@Y}L<{v6Xn4X7k3+G$DUyiGSWQpt z-3D`x1f6;2HZ-oy@=$XX$Brn>T(Q+?*1E9lVXlE!c{s2crq|>-7?L}E(vTUW)Q~Uh zOJdT@zkFq1SJgjz86R9(wFBRlqm4hd9w09oEwaHwaxDy6n;TY&yg(kC<%Gt=9+=7P zpxpDAXZuOm*>bjR7{fg@dRqm?v%u@@(+upjGPA~|sO*V$D zGlQh?wZ4^fesw8)Nxoco+26l^^U$d9?1g;Qr~qZdIIvBe6dpy2am)e41X6Pi7(LT% zj-e%Z_Ehns2zOr%?zT~a`gSw$#49orj*?Tb71~yl7*;W5ZxN{~UMjH$yaAw36nuD;B~{@HC(` z<#8G*#&UA+$*TsT0^g91g<^$;g1pVyWzC6e!SJsiN|nOyk3HC7mC+ce#dZ^rhXT4v z9Q5?=z|$p>A!8}vRT!|Pemvp7-k?(26on5)r}GfJ;?i^}lLqX%HemuxFcU^tPX$xG zjv81z)=2jxAa64gm2#4Q0lI;_ zBKpm&=LBZ_fsmfN(iZr!m`(sfW7jt4O}jHH7A+3TEuHdjf0v(MK3M#N{Vred$$fNX zpS*&%P1bK$7JFS`jfgF)^c1RA$(G*B`_VPurtxumIx-21$jZrZge7a7BEm2VU!Le_U$iydY zp$~}h(1Utsa5>0F=L*zhXsdZP<`YTPMDW$XQ9C9ffC*hSyit9Q+3uz{G0-r3aS)O_ z5Fl?I9pe)_W$xD30rl4~&Cy%lQ~fgy9|+&{#P#?J22 z&%neokA|RiJ7m}M1D2_82x@B-K;xP?U@QzC6d+IA04zCyX;a*}Erk<;kO7W44YVr7 zcb-}VJifQl_5OwYqeh3Hy^gmZ-0`)~j>#l^gA%Zb8rsI}Ik7#!jhAH|D4v5s1zje4 zxU>?-sHh;&VcGUU5Pj8DfY-OV1;*hENACgOkkjJb1Gn#0*WR2oYjW&%TZH<7lf%zm z$p^{dFHQG}8508))l@l0!NR-|DW|}Opsxy9)~*;}=#oC#HaoLUn;j1lWkZn^l+`TB z%zZs}>flwNY(I3i(+;9$HpFZrELlYuf4Do*+D7_p9LOm~!`zvzv%5L>XmMggLY=&$ z>-II~B>*3>rFaWbpzzXivmuoK_zV2k z@&2a|_W9-5L(i`^PgnIl|g*<-esKyijlh*gHH7B?d zEU6NCPMYjgnJaBfrd3c1oz-)&gQWU=1|W8Yx$J z*Umh<&VG1p|Hr%GyDy{jk3PdsUd~tdSFk(f_>#gkngZ`IRu~7%79w)c^X_ve$P|^b zS&TIehDE$g@q#29v+rS|eD<(0r>`yp5i%z9-jFJbZfM?2S%%U^hUbjrpE^wSP7}XvBm0%dSu5<^z5GzDO+JP917&-{;z?-5@;=FuR$RYPBfYpx4H9()oY^StfS_^jb zc75s&90HOU7SxW!S40cd<34Vic|TZO=Gm+F>duK_pau%v05RM(cDM9`;Z4`F3YrIx zJ9*zm?N9{pThbS1h6z}Jr5%HR7~%w*TGDsHYyf@)f|CGTYoJs*(7}W#1nMSPOY?Tj z`NxXOJbUq8-6t(H{p`vc$l9v88*ltmgMR%aCcSG-cB_LiH0j-!G@snp)VwAVmt_Ig zgs|S)lWX$Ul^x+aj)k(2h(zo&Go)r(Sz%~S?T+#LBLfPayp*p}Wx&+R)e|@_p$tvH zZ?UyR92;+Yp5y57tUzEHP^Y&z zfh`Qi_IFE(+meMkPA^g>O}!QgAxMIWZvZ&NbbDOn7=*-|qqNf-W3H*9k($#*cTCjn zTcSZt04p~@awk|p22V<4#-fbYfD6T-Tk}3u<<5%p=F^LP{AhoA^Xbv>&a)Tqwhl$# zdbE03Lgxlu#}Gb&oEW1}Q(GG{cG0Y4>KL%~9<{AHok=|b1|MAsu7}zSCA&6}6R21S z8AvMk8GDLM3_z&@!mtZ~d<$V8b5m}UpJ-9k;;;+vEl5n zbDXmF7=$#Pht%mchEX5OKtyer`fq#YgvYe6zDF+*?i~|qm}7*m2(&@S&Npeq(hN9$ zPRC4A2=D_i0%*3|i>w<&;&ujtpS*GU!EDY-Z$T!yxiJ?2?3m|S;H-EGpHsbcB&If| z+zMH2%eG3DXIWn0Zn%%zoUL*14ZD=tdabDyz2(LC`2|IB%P#m;y#MK^_Yc*e&tAaS zCPO;9`dU*7+Pk0)HmR;7IpIL;m@(f6uX-6!BDPRJfS*o~GLZCEauCQm?%G^y1WMqr zU7{Wt*tAn@JM{vou$_+9rxG1H z6(Tt*V4|OlROn=NLaHLT8(bJ;>T0&n*tJ_FBLJhsfo0}-qR;NcEynB3puhR_{^yU8 zKiP*Dc)1^eN1nZwxBA!hP08(-th%4MFO>j$r&^6rX!YKfdv0Ae45iLNqkzD5=;Dof zWu2m-edu7w-3vyzHB>bQty7G|_n|}ErY*p7QS{!5;C=TVcW4SgbEd*Sh>Gh)JA>Q` zlwq(~P6E*-TXa?f*sd<1r7G8G96Dl{_zK@JYHaZ7>*@iq_h@||4A6yi_aV9w;~|ON zr?z2d*QT4@^RMmW@2*|@N4Ck*a8WuqgT2~-z#Yzfmf zQ&H#az>#I@j8Nt>P^N5Mwmk<%Vna3yJE=7o?GY@Q5mUleHGG2z@+f4P?3V7el2@U5 zcLL7l9YevoMx%$Zwb%nA1QN!MY~bmgj!7GUE-EH+Pd5iI$!iYT+p;@hcG)m^8+*g? zrN@9Oo~;8&u~Xd{J(}#dSM*o;>BGl2KRxQ|J$vC^GlcFK*BLvGH=ME{37UQa!bU&T z;uyvNdxt>=YODc)+Yl7w=MJO8(aIra&8DaJ#@$AVAT8lx$h9PotlWobU4Q-nVdCJ8 z%eM{NAFDL=?8SSH!6!2iUG7BMc^m-4kWZS@TycO#7&_9y9V5Cte4`3B^F0at@TSbe z4m26V`d;4p+AT(AN6-Po4l)Q+RVqgtJ{;iDwjqv6&fQGN4|P$Wy?77eQD3Xb@Y`%5 z@qGk4?Z9t7Sz&&_*LYa-$N+8Vtd1TdZRkOeva=Y4cjYuR%JGc=ds$aC>}15T@h|cwecA<|4lRcnR&+FZV*+ep7$c39e@^Iq6~bvxF0^Y7Ra8xRR@G?AZbbk+3KMgU2nU3KUlN&*{gRCYx}Zy;=qtK zG^Y?_Lf{RDo=w9MW5`5As5)a%gSKL0J}25%rAe(Ly3!6qRs(+Abm|R^yqM6Yj)I*n z&=X+{PF}Inu6PI$he0y&e(JIyGd*h=J}5F#VDDy~+Uk`Nr*tXIt;350TINZjP;O*n z#7z$K%8jHx*4un9=?OO+8OI_hnfvCBMyY`-I^!t(YoLJFxjEtdJGW2y_RYI|`5J@z z3nA5KujI|x#5G#lo2Y4{rWW}iH(WY3A z;91J7Q>5wTz|;{g*?L(h99`*Y!*fRZ7D$c_>Q(@9VbVEGPN`QG{!^~4YoI1nhA4o&Cj3m?nhDM9P80eOD z1OwVF3Kl)z*&`hyd!Jf9al*$4u&=cygj6cM_ZejaQKL9>)Wjg1mIJ|+>D~zMr#_mp zkd8Z;n5HU`x~OZrK*K?O2!rb!xVCK~hfzlOI?{ zy9Mwg=PXPbsE1>u0wlLHC1>?hN)8yR;qT;;>`+wCc@8#Pi+c?Vt+_$Z9hg9v`%qgT z9^ZnZF5KoHwl z}R3AO-+{R^%3QOt7w$ZYQ9Wb>t+JyURjSgchEWec6OdZgG7zJYpC& zLZuVf9gM;BFx)(>i_WbhXW(mKMfzhoJSDcXRqUJ<@g%}SB`Yrt~f6h=1;K( z=o>Ckld7`?4XN5ZTCRm@sFa0`z!NG86dV78U8i(DNlb;_u)}Fn1-+@z6JpS@7 zKGaV1VwVC6SxH9gI!YKMGOTM6n4eo>$uJ{}O}446arzk1+M0Xto)WXqnoXh+P{a;k zWSQcu+V-hF_Sz@Z1$?^Q!Cm)#d$bjR9M18xK^Ns1wvlBjGrk^zQY{%3=1>_EcRQvI zhQWY$i*V3DcH1yhGRHYA6NklFh#QWvP?5x!Zg9pJzHF#q0IOBe8n^nEe}!hiyU+FV zhlk0TC$HUi&*^{azeJEXd~VsWcW;tB5O2mk=MetPQ6xt-&eGL36ZsLtyqFoPyLnu4 zE~FD=1AAFGKGHN0ao811VlX-i{-~tMZ`r=$LWt=rvuBMCI ziLsOC5TNl6Ce+|{003ZQX2Y0fX!AOnelbf_WA?JA<4e!pW9W;b$h%FLrn!LD;e^2N0P4gTa-E_5H{ZVQ>uZ&B!rItq&pwB!58K`(>Y(r)*2t1+6xX`8 ziPgZ%S{N}UTCLCFNboYWDU1dwRAU>!Xpp3ru0x1ZRJIW_2s6m=e3+r3OCTTrpg7)V zFWa{}>;L)X&SEsDL0BB9A#`j_(cfsxk<*3O6Ez(Jw6cca=UB?vIOQ7G3s=Mk+}t^) z;6)Ws#lZstUzyUO0-n|ugrVHdY*wX8a1zU=^P6A5z+a8*JYs4zS!WbN42jGIOp6go z2S$xCJngcC<10EKZ2;nAZuHhzmz=HLy$w3MHMK>FkXtA2gk2Sj*tuXb*^lfv7!<%M zlzQIjO@5FY>)Ffp?Z*1gzuZ`~O;-?W+vC!tbjDC*wUAmlHeQ<19q-nLi9Xos673_| z_9fZ?oXCbw7!D|@Mj-!q_eOho3e<#WE0|9p^O4%_VS^d{EdFw1eLahm?y9Bz@W$Dc z*TAH#3WVYqcL(=jHbsTe(G*f-hJaHJbWP^TT*OfzqS2ZMW2uXX+JRRA&~_ykZ9r!U z4owNk?Lv4TX^h*+jUVNndiJv2zpMz%1Ji3K4Np>=JwQAPlrVVc>2rzmilaWF;cd8G z7w@(ww7Cr?!#WNz(>3+)0V~0U&(^d$GB%(In{!2|P9Y4N(}JAuFyFqc`dC1Kx-L3f zaLOo|Wvluqmyr!`RRDg?rOQ4^IWWKI6Kp&L0h`L$ix>A$TZLIByy{I3Vxr~!ByDbi zpTcT4AjA_@wB|Ezn+Ic6A;Vd+%3~@;2-{VJYTCp{uMJ62RtUPc?zC}EWDHh9x=qjt zqpIf%KAdcaz*ALgc}-!3T-$;|TJA7HEteXWnz!BPP76}!&7)S(vsdl@zG}H~<~n}J zr%Q4%Y%(}@IcZz13%+E-V+TMGYi^vj6JIl8ul1M!XD%4V*JW z*F=737uRuK2S(&vHNV_f{7aA$XNU%iIwha-Gpfy22ikO51Ig14&&l#Jz|Lw7{Z1q- z(yb?q&4#%OL}dD^y@?P!vaINo2}^u!qZ5O1GJ>`Fuq-V)%XjHrQ5#8}s8jb5D`N+e8O#!Cs5f<)CG*rhB9e?BUOJ$cpcx9#fv^c{2i^qsrVbJk_2$R>tRn@jK*4ltH6Q5TZ$O&2)8;8o>_kw!seTTh?#B5lHv96!zIP z=H@PylTXkz*drOWLY%(jWCOowDcH<~ECscFi6lEX2aR_(D9vWTfzYNFABj^ky{)m2 z_$cJPaF)fa9;8xQ8wB05x{cS9&XprJCO`myUI-1eteRv&u-S{+#>fc(l|X9070_`8 zA=CvYqYi3=Ce}Wr(B}rHm#2*j&vVvdbVeXmJg|^Ya5bdsRkve-lIX62^Q+IFUS7Gk zp1pAYjPI>)bb<`jVqgU+hA+H!?y1qSmosow%DheRmryM6J<@}7b14mSV8aeaz)L-A zx3Nmjf&>f|&sjU72NOWb1u5I1zRcjok!_#`-?4y17i=_utsI1Bjfx>rUT_?PhC|m7 zzs@{caiH=F)4^xMc*dJmtJNCZd#qkKP$39&`q^c>6#_C2pv+}ApSFQ`XgpUWi~N#n z`tr8=`sRxFA0L&Hp1pMUcNg%D+IsFb7kWM*ztyR8h9$+6lP7oUJX>LVx(CvBRj6kX z1%q$qYqMYC_?eCMq*5_9Y_rb|$1BRPjZW_v(T~+oAzK486>{$0TrxUny|w`GM_kA0 zAVz%wlAuEJK}J)@(r&WO0$Z?yIsqT!Jb2(}3gGZPeXG}i?Yw#!YXit_IdWEt5?hTR{nAp(Amjh+N9Ag|b9vJ7B-OmO& zGkp!7Eie7x6|F(~yZ70qEgZm{2Bsy`F^R<4qL%gB$=qLGKTT0_MWEOUI*D%WHRcN}d2@53Z! zx9YNa7=UWCkA6_{(o^tDpN@`!pz;f7g!c{Y#$0=2Z>V&}Fcl%B4}b{sb{yN=3c$Sm%yKB$eEr4;e(WqVMH@P%MM4>q`e0~A|m?)DsDRjpa6 zjj)@#R9*NxEA$*iS{zda2UUu7aY!Nxjz3q=wHL>>wAL^qKz%1PiMC|nb5jC(Ly!6= zb<;1qFX_zK{b8sPd=yYmRNLa^smYue`f{D&C#&=6qd>=Kr2=njO-3S+X?l2?cZ95F zR8v^q5a%K45^Kw13z6|X#1*R0+E~U7)M!;AF8Eu`=I7-ol2u)MCzInAc8~k%>zTNh;hw0RR_dN^w z^GAF4sosD5>ET$&lh^b9s|g-^(2)bk#%!yDq$U$o{Gi$mBl*>7L{B)17h(KjG^JHq zXN_{39Hwgxu+uZU2fpFO2QYbq(sRwX+}NO8_DVE@8}!Y|!Zekzm6S zkH#4Y;jkMb^i_Oji-%l>)XS$}pgSh+`}8;m?O#^CUV(VBAw$5V1LHSW_3 z13m;gYI$lP9E`_un$8BqdOxJ;(hr9o-Q^DCvK{OeyP{>rt(76~lPo4^mCQQ_1Npv& zoU{|V&wNfthefeV=^M>1q)(vGbRH*G*<@0l(gG)bY#z#icF2uQ+3JXCD~^w7?L&K& z?FwLXlN#P;_|k%VgI4*iRO9ciz5a)HA6`D@r}uCF_%Lq&>?ORv$yOjalYq76hCrYp zi-;)X3H%l04a?kzV^)4u>nwl{AiW&HOQ<(4S>3KleL^c}B=JE4Rv44ME0G&_OBp;h z_sH!aodXu@-*#g3HTbf)+BqBAh32Y7iK%Y<>ZKRyV${Nq*f(F%`bL7lCPu+Fn=wHA z*uD~(g8qvz3DZOy70csbKkfy3YiRaqQP~q?%f#q+-Hl0Uvnie&`%7hZS=p7aaA5#*bkPrR^7(H8nz%3{^BK1t9}l!@6r3WFXcBL zAWko5R_UUNqc3cMioxMv>4*tk>5=q_9w!95%{w9|-fL^2wFZWgLeNm5m`Cf&YFhXl zfiSLEBfM*8E-?2|ZQlja+#c{K-pOuRHm-r=3}YIH8*3W_1#QGX9e?EUJr3pp!(7;o zX2X|8TsFZ&t&)d%&nr2nykO($wxF-@qr3Guew6U5I(d z{h-=OJj}GWgV)neOcCvkH;MH%F@qU}!H{*l?b}(kQ@|8fS^tD^Ki_rKz+lZL0;dm_YCt&f+t&gTv|zSuztbuz2Q$m>MhQ`v185 zgI(d08(R~DCx(02fG0L!cf;_&Z9o9YAcLg+7Jh>ugK@9gbyWpPw~e0pCHyLWK4a}v z)kS6IHG1~{l12igJh{(4u_J=yTHk798vW`7{qO&lCHLp~%l!2Z{h$B*=lRoL|L{ra ze_4LN>;3<+Z}ewfbNp`Dil$J zI_`9S-yivZ{P(-u`OE+Or~bpgWy}7qZukek)!(kWIm;IBc79v35PQ1yygZQ06Du+R z*C^)ck1k;DPW?K$W7eX!EjW@O$EXb_5z>l|6~QO$*|xL%qn@Cd_mvCu zJ~H7G%Kl%p%k@8_Z_I$GdMW|=#bz!|7j z8LD7px1T1og%E8YCZG{q2F_|PZbjm#7nDKBvrLO)^SdkWzyH0J_m{t(zy7iRQ2+GL z{r~(u-}(=JufH=N{aM!DzhbdjbHI8ziAMF2)dqURc|-0xeAK#zNH+Q}frBbk{IYVY zTNDF0K|B0z+_Gjrut1gL^_32Ld1oH7=vq=0>GlQ-BFqdNzuxqC8tvCUXV=xaNMXYH zx}olKujTaIS{*n)>|XmIz6<8_22B8iJl?7Aoh3+oUT7CDd8-}_w+x+;zwL+co9;1p>e~F4g(Kky;f3p1_qk`zHA0uMH-hSRp3>nB?&&27u9hx#sExrTK-xEcCM{2- z>LON6hAw*E_x`$dqM?w6YOT(C9QP_gugYvttMS9hg2p-ENA_UcKL-wphqR(FY2ATcQ_uN*2-g4ZcURtjn%|8Z`_V7-=UsFE z2AV!Q`1K01!Tc`=2m^Fvx1-xS&>u65F4O_sZ@HNvW?~Ehyhj!-1g7@jpIk5a!D5AY zaiRcQDowHxg1(i`J`2j9ec<3i3HNJNHxDy=Pe|lg&M<(aU<~RqxPUWW?lN4QRs@34 z!S9{8$>vLTy?Qsyy%Bx56=rB8J)W&`X$Rqv$Jr`2Y(8}E+QO^&)%tyc)Bpb0o#B7} z(;xow*FXR9PygX}DFi?GjsE;)1?XrVQKaVx+y@8It1vGUZLrrBjO_yVvo+QggZA*G zPOoc`G1kg2B6V1LW5npQ=1IRLxKI6hmP*njW0*%u7bwP} z)YHAdx?WU9kmoK#hl{Hq){aK}liT#URCQ>nNTGP7(NC-hC#9V`?V<8l285an)|>0`!)AZ|NI~R*yo@AaQ^a_KmLb5{U@~WP+|Pn8Yw^e4gVc%e8q-a zs)@IiRISHIx#UeI2$_s6n_(UOC9Xlqp77mI?t7aY+WL*)#FIj(Jh3#)mU@Kju;YZz z*=u{Ig{dLLU8V8h+9LV2#%{45*1u#&w5`KicabrX0D`0dvLr;l_)D7LHNM``wo-@oSl5C47<{^>s>bL>C< zq5t{()BL6X_^1EyZ;SAE+bciz1^@i}AZ17Mk~u6GU+;}*;!Y22ML7AolVJuF!e5SC zc-rSdynP3!;&vE#2DF;D&Br?BB?&@u?RE#n<-1o_W(U1?)w>)*)bs1nzm5QUG~6qJ z<5~#cR1ovd5s`_jS$7?WV+=N!0i&+zHJi*Bs*E&0uwo;P_0G^iF9z!F8jEfIMf5;* zv2QrUlZUVfYpMJ`%J#qe^%DF~^XEVIAO14`a{g-z??=DZzlY6Flygz=yNF@DRrNk; z4efsYp&s_bf2l@)g7jfP4fHVIunj5l0ha+*ZasfL5rmoGrcaeXN(ZcNK{p%VR^GcCLcO!7MUwWU1@LI3EAQ$2NZZ6e8 z3)s}Y9GNXJM2IATRCIT)jMs1Lm@3`30qPIqcM?-J=s(CcwZDcN?K54&@K65k%KJb6 zYUO|dich&O{*>o+Ce@*K`q`z$| z%-SHX_kj_L)^n6zeb)0Xpu^IHOaV9Hy9-XKhMk-Jet|Z24;)O50G0jTmuE3@e_eUJ z6NBFu2^akksv83|cpA z*oGOJo6g&_hhI4!13p~!i>vM!h|e*5gAUqo%OPb609-;|P0i60_w32J=kDpfFA{vV zL33EgjAE(Y_#Kn;6G?jqv4o}vE^pc@^#F#_-cYYVEtwnA;OU@EP~$Gay@w3{yRC@P zK)kb-gh1ZOaiF6ejBe#T^0xzKVm6WH&*=1Wz29AU|CfKi@c!k`fBc`|#QEDS?SKBm zAOG~XL-_YPeLwj9{=|2_f1PW5i5xrVM!+s|L-t+oD0=VF(HrPx2y-58Cnd5|SUn$B ziSvD!@^AR{8UTTdnZgdl0F0WZXsk8Bf4V+|1L0cy?t#JlAlcy81uqSvE>_fFw|H5I zJ=8OA&1E|V!SM#!z7{}fE3j?MvQcoH!JR7EdrJgUJT7Qhu*X5`o^>{4c=^K4>ehn@ zghbo=ZUvR<_oV~>hhGWv{`p`2@K5tU%|HF&{J+j0f7gcpgJ0_3!MgKK47o29Z;!46 z)LFX|hsIm6G^9YrmbzRWsHc`BF~>SaX9K{`sNj~fWtYKyd}h&7yJ(yO!|DL40pCip zcY-3vU`E|szt$e3qYoLuF_0oZ7M(7>L|JiY%Xyl6*3}L}w44%YNdmTj^pt=gS7R{l zfR}G?G;QpFlDmf66(mHu!3JQ!ol@AmS3^!xkm60_2G zHhhJah)sxx#2SDt$i7|`uGFZANj0R;;EZS?F`A7T(LNZH^xb+4xmN4F$x(WdU^7Yg zpo33C()cItrMF#>wp*9pZ!E3UuKn1jYT%b;xfoE_DezLLPQ6!bV1yBsdMpY-wEgEs z18zJOg*_8qUhadm1^WDF@AZ-1y6*!kxE|C$N6{3XyID=;H%Z0?V#Y@D`j$pkS)m+| z3nFHgy&;DGrd!lZpdl~Eh~O=~T=j9UPjKd?3r|G6b&nB}NRVa7!(WR-63ldKuv>KJ zy{>G)X8)SM`io!spa1m!_-k3(lh#a60=eDNJY#VRUY;=pt=L&gns%v*gj2V90f)@_Og-QZ?+HX&}r|U9Y~* z69eRt7zuo@(*cy}2TRxet?@u*j;7RqF@OCHBO=a#EVVY(GJjE9(KzR|?n*7L=bQRL0AcwFo&V)*U5<868gAvC>f!m5wp`Hn}` zzZR$~$%}oFN;j|~OOMc&m`yq$iqTJO+Zw%Wq9VhrXV148ho`{hIYdNL=h%m z+qg{csoCP;0TC}+ak`@F@j#8q!8Z$C1Qpk%=CpsjsiZ^)~f z6E+%%!$Dp|Aw=)>q#eIn8`Rd;Rs@5JqIHMns*OlPT!KJQ>n$@O_x%=M{fjB$zrsKI z(eLiJCt@h%0JQww#iN!0O?;#!(H*t`{Q4~Q91BAUq+{P(3(Uk6M zhYpP9tcd^`^a5!?%c3WMYC*_(r3-ui=0x;|NR(kv2Uu%(!tB1<_U59W6>>NxC$q|XyyOyad zyd1NYOuElIw(CB41Ft3__6xI65Eq33quNjLe*!QG14&!j(Lm2`%YuF6`8vijdA15{ z0=5Mq5a;@#S$Fxy?dI1f;(z<^JU9Q9RraG_;cr*j#e}7_`vL^G8^AxhF~E9Z9`P19 z$}bh*%R(Ooam;bGZQ&Uq)`RSDWQL{G!7?D&hSwOd-#2hJyY3_JX%=TE%}%?nHJ?84K1tSn^3;Cs;vT)A<=Uv%9-?7b-58vT+j@%VI%2>1unG@S+G(ne zG@Q$h%T74bOhvCq`B{A(7`+mU+h=Tk-LCxyaCZIZH~QOy^BQNq_C)J=0YQoQwP#OZ z|54x8oXCOzPoBX}0>Jwnavrd9+2F^o>D_Owi_3rPn;R?M&b!;JfJ1{eug~he&Omg4 zjA5pizdktm?Ljqw&&>m1YP6kIFN%4*a}}`(R8AV&1*$t?6o2UsgJ& z4p@!u27b?|A=eE4f&ub>G?2iG)w2AR{$|bngE+f>^jrPyx?7XKg-(t*GW{jW2+}Rw67k#p#ao0k%^rL@gjRYl{Z6A12=oib$hn=EuMi>ayJ%?fcT~rSYw={p$(nKZ>*KN59secjf(?vun3MGkfQf zT@uKBR;LjG1;~hN*t2)pMXcUxgkoKHv@?ZrW56nQqxT2qA3wL+Jw18tB|yUraa%8k zo=BMC$IQ5v5rDV!-lG6Ad0mKh|52S?Kl;7?{CnOfOo$_gwB*v@@6Wys9W{3e+0H{Vzs_j>M{#!j=-2x5FFaTM`V}RQ5n7Ej4DIV{ z6mtaDcWCx3)N5~3P2b?19s)^atLk|)Aeje>RXtiHws-8@2eYjlY(S)TMMu(UFaMf$ z*pKwrbK8G7XV;H@zd!Mv?_cK{H6Y}_V$Ix(@>GQK0c!b@AycudnyxydTOdgETOpy& ze(ydJ=#MbM0(H+ZPdzDUgdi{Iik;qJw+x=mKt>Owl?NB&EknOSnfyaIyMFXb{d-t< znYPy6;f{%bHNU1~t6!_wOcQw^oQ}^Gno*de=%^`Za1e8jK7fOIg_>V);0f_^aogRq7x2z_0J9`O>5E(X z0RX*rzN6tJm<+Y9=RxYfaqItGY1n`CyZaqi7vXpg6;V23wjB9_R)_D!IUH-hKCm^x zRpa|u2ExvwnUQwGCd&2lDV#S9_Ios%jJz=0hgF6T0pg(_w@CLz1<>|sQT)BSwPWG;qtV!+L)bA zKS;`+X3GkB+j=R&(tjK2_4kzF`=ejo?+M(wBY<7U9>aOtb9JZ&#O6pf_nj z%UvJk6JrExcreHq!)L#<1?626op)EZ-0j!7dUWkHHiWi2=JINso$+13^O`rEnA7dZ zN?r`T`N0JM9wkwYzwg8GN58zEeSQ7k{=fg5|I>f_m%sk=pXdHRkc;-8QOW=1{| zc^8ke^3fGSB<54eVtc4N8UfhRYto-gE$H!Rt0F0H*aiDo++esWh**#FQbK^uAei_C zp#U*W2upxz9NTE18D@IXtL{?l=)4L?#cdtEwC@W!8CK;-eJKy(HB1og zCx%N5I`0oGU7UAj`6(DBJ7K#i9Aj{#d!fieZ)_1adZ$ufM|YQ6nhD+FXUGQ3+6eSp z6?Up|HA%i|!?`KWG03C#fF2HI5lX5iL7#YCh$^F#o>(3zI+>NZio5+$;!ULO1NGiV z2>}BR(S3>R@B`0QpIX~=)#?g#qt9L@30nE4OT-wqy($((E5gJ5^b+lL2GmSO2vTl1 z?qP^IThwB&2l;RhcBI+|O~Ow86xP}ZU`N3k>Z%Xh;l6pl+E6dqVKX#)-r_+;fk;dI zMUT*1)*KHXRgQK(2ozN`3;kwfhSAM;=cd(otu-^JF9Or#n*m?+L_w602*fkhZKz)) z7#*5WVh9y5@`-oNbw_d{RsfA3qz6CnXMqwpr@{+&V?I7Q@G9{||8eZuLtfC9cit5Z z6L|gu{HS0&La*|BmE%Bs1WBwbLTix(lMX?J<@TllIk$QtgOHdgFbIv23PX2@>L4a^ zqnQSYStCeWTmx~-wWLrk3#w)T?PU!b7Q){b0lN#O6=d7;1$NvWq~}@B`E#%ascZ17uzU2-YGpjQm6NK#ibyRK}*gp^6iJoTLm^6 zW*EP&+X^mkp4iBCG9-IqvkIckyA~{qdZQqc_iOe2A*@asV$r!t<7;ag!zkrcv&c^} zKa{{&W9t+?-8J}D>v7FAY$4d>*}rJ)r{Z&w^3197{7gRXMN;MuKpNCo6T41q3CmO1~GD=S7<>Phh*(^r_IPZ-U~T;VVX+=ZY#ckyYY$R@!P ztJg{IFn^j{C>JNtrqfH^c{Wtl0^&t6_VH)XiPMr%>6JU+q1}M{U|wPecnp0f6&+MY z6y*#d5H=rIa9=_*_3^T`p4@943;liLP{qZqKgyoNAY=E~T6m|{)uDO|*NeI`M=7Bo z58bblA-2d)P^tFG$}>?Qi6DY+AKw$scjIy!ZjJwZ`n0EO)+piFy6y3ja9=Q4xmxSS z5sWhI^T5)s)v#c%-VdHzX^;S)E!}z>8PP9A0%HixZ4SYE%t-~?=>X}0JUPCxyDG3J zhVvVsYa*SB6mDJ(xO`{rD)g}4=-^OR&*Cy^eY-b;UvDG^Zu*6uBdgu-M%ANTeC-(y zm;?`FMeg=EQ)^=w=5}XQ4PyuacEeaYk~XL3gj3shQc{*IsSC`@LqF!lA2TA-f9KdzTBbE-L>;&i-oQ zXNyI0c;1CcJ32XM7om1Kup;A_nglTD9kA3Q!S`OCjp_|xNwm{&*<~sWBmtNStQHIk z&gFa79Xq*X2{Yuzu@E{bu-6CiGy^$9H?Un|`D(ue?By|LNDFHLhx0Z zp+&ju@x~tlZe>tz_Aq_TyB@n&mc`p6r{J;2`dkCQ*`VZ_qkGypc2&x$Z2|(5o$r~| z`CawR8}jMbysioXfH+YDLXY=-G4(D*d^hOm+U5$~N_oZ1YeD_t{`IDj48V4Y*IN`c zR}ISO)k+JW;#+aQf6sAaZP=z{xxg*1A44v##{)MdvKdKdV}9p;sZsJiHOG|BORy{g zgcn3%#2_23=e_lbJLskP|m+yOXQn~n9;=;9itr&cic!lIocI8u~lmaSbllk^}3y$jB zgp>a@LX&VkBsw1-8l%ld=uM*!n_*N|Kw&M?mi_K~&nJzO11fx!jUNa@2Sd}AUJtjX zFF3-|KouGIbqpFAeGECEkoCU1T>`@`0v9E8>7gC-x{fZ&DJ)7~&*#3&n?H^91!Spl z%7*aH3&J{*)=#ZBN;t0L?1Q)9+i|O}{h0-jo{oknqC&aPFJmzzI>zIR{UYSbjm#NA zL7l4E_kD(qCIgWc|C>*`lJ+!A`sHpS4Rcn#jzYW?fsY>(jb$LuU`g{ zNBX*$m}H$cXe#q68cqnB4P5rv6+@o0oPW`?J>;EY2Q5%C#(a1{w3z)Dd9=_*{O(P&{^LO8zTs3MXci|q4~<~k@n`bM8HLFv$n zJT72&x8Sz)#Ht!_$g}zYkza^^yJ8Ej#*bh!?`^L$^s3#a8VB|F^@qGr$MyGEXFP>F zaz5ajBQf2SRy&b7FLwq?!zX-m_5d<+PU3_)mkvGlov&k6=bGC&D}lKA^o63@_ygQ^ z?H2*@ak>|Sn0Ih4mZiMbv#x^04r5JixtgY>o{^D(64}TV*ZQom3oIaJ`vq_1kqoe(4yfEcxgkD#d0&t|-1+t|@C9qO$fejFcc3;c7P0p* z;fyte`~1pH0?BTH!S<1peo-6Z2(YiRroF(Cmvx~FzrO9giYAqm_A_e>EvDp?3$led zX1Ti7U03`-<#9|MN!=EPFDO8d(a#rK_pa->OY)K(>nKgH#l6#kJvWg?J5t!U#YNGqtdWcxUlx)TWB?{kTjHW2d#`aV6DVRUIs0>=rHfa z``+HCUXoTUEUOEd;)08#c0FPAswc`Yt{|SXuq&0?0n;-sAe-E#-Zt-{b$nA8p!aWg zyiY#pR_sk@p>|*JiF(-}VssRQ!OL9=7P97jCt+bxpO88WA5E>sF*6gspl1LX;hrH# z3RTC8vPi|sbXNBjc3^`>qj5|DyGQg(kLyrG0MkGh2Yx|_Q5Z3F!h z$hU{fJa2vQ13_-dXvkOCH&A6mvu!__?Tg>m(hcK}BFABvW;_)#P@FE%Tt*T>p)?^0 zx--fi98)s+U~wIDT(EZAL67lV5Q4N)IP!>U_fl0y%EmzUJ9Iog;Bc2KLEZN@8G#|e;`Xu7X$uI28$ z$D;@)0DI2z%+Q}r+!g1jp#IGja-!<&srME;`9h=czJzl2z3xN(E{wtWLpUaDXc&o> zZ){K(AigYHughO<*-8)ES_e9Q&4|zHxMz_PsAx>UF{z?c!rHWg;xwFfl=aNvfPq;x zb=_4O9FCgz$er){dQ#v~h;&>l(foci^IVPA5L)=+$MV^6wmw65-SfP38QIUOkU;GhM&Fu>+P=Euvrdxr56ArdeA<>SdQeL}KPA9vtR;D+B6dLr#{S^T~( z%UbA-8?b#lPFV($Tyqtuo`Hl!5c{2A0z>Nt7sNFV{Sd?|n_P>#-aZ8Wwo{4~{u?Yk zdL8cE-L+n~Qnzu_t<3W93qQsG`+s#TV6Dr%b&CbKGlJgGq5`PmyUv=2-*f>Q`l);b zzH-ON>A@PHAKDZf>NYy-CN4Y;;6`l)-E>bJmfhWmSu5A zH%G9wc}^&{KQ#A-pcV{FCyv%e;r9T7q!Y*r5(f*+iyYmHi~ZTj8S%?mB(HWYoJuBd z;T!jjBhO~m(=UzO^cO4ZO&mjE{va3#zet!rQp`e&TJEfZM4ctKqoK&7DSS6ik zvWhD(lY`yAL~8QdB%c9(cNNS*XRz!(I!Pg!tE>IB7rHWdoTbvO+{vg1w(a?-@St^W zbQ;l-oDq8mEhY?v;Bma4Z)`mznq2$<0kUXft!TbbW%j-(36iCvW|B#|j*yg#FOU0Ad9Ds6RpSMMvm9Km1-mp#6PyD;ZoD!@!Tf z?TF-;&{6-;R7?t*Hzpira5=7r@mgB>Mpt|o zbvgJW)}?Dl?EwFd61?3-zRLEwKSyOfyQs#{JTEli5QWHR@=%Za!HPWCw>rQMxEc7P z5SrMf7>(Y+#&FRd5-6w%n6|T%j^h%r_Eayq@v2j^cuqsM`Bvj9b8u2(1VAV5l0h>J z7qm;dX-;d>E{VxVa6SX9>;8}-Mz4372Cl77dgr=ix#A%Kh%g6(!03&COi&~A$R^)y z-Xpg#%~ka6zgrVr?jwu<(SY?=yiW);XQ;*tmk1>N zVT{dlnEJ^#63Py=k0EgkrUNc2q_Lr)rb~LsSJvWl9%u(18q15&zdYUhY?ieTp@AN< zO1>dOq=E@feS%!x3aQ%|uiw4Fs@(C$8$E`l7Ae={SJfL)VKjXh?Opi_k>19i*Y~4Xkt#UJJj;| z-P9d(T=Ltc-*xVRNu62sWw#?xtQCWZrU;Sgz>VS#Y@1;E`MoZECC;Rm|u!jA=vd35@!9mi4&4UBJK$vQwOZ^6A^ zj#c+BiXOrQFTZ2~doLH5QV6hFqmB=~an0O!>E`zpbSQK8qQMvw z-7Q>zK?0bE_EGTE5Wz;-=i3jdRgW+RI9{ys5#P^%B5Wb_8bJWt_BI%=?-ga9Rh;XE z$AN~c(r`jxwvHq#h2mMqPEYoOdhwG=Xt1|6Jk1e1o@F-(7Cy-nDG*J83y z7X&*fk|1{ES_B+-jKaePAu)eq;*MFYXeSc7fnN{$Yd{ZDKrf~?35v~v_JSRS6H4HH z(~lk_SdBjWOWwl*X#wVnT=&dA?{Yi1tB%X#v%)N}pM17-Cb97pSwK7A(RY*&-EV`2 z>=JAxN6p)~_j0nJca5?>m@zEBBIA*_1x@_}et9?VuUwKwcN<$1en4|y+%;Wrjy#ly zS5E~X<|knSi?+LGAs`|GUj#^vzeIFs-Tjv6J1u!UXbdAu+*%u+tBXPhrxqlAi{1iC zG$0xmeDuE7eh;GxlpDDJpiahAEB3Y2YhC5eXenV4JADc?6!)1A3L;y1&>aL< zI9%#g;E4f385U&W7-VLNyNLBFqU}OE5YMg_qS(@LyyGj>)w(dxmhb167(s%uF*sN} zmn!u;rZC^}q&};xY4y#OTiJa69DB;gxI=x}M| z8lY!Aa#!ccRy&#l&Qa3hvljS-xJe5g;{vBOgJ}-7;T|K5|9#L`0|zSOMhAW^{3eJG z$$|*vHT>NleXj8c(IT*cffjHBX-KOfFAYUZ(vZF>J75pzafMzKt2cqcwr5^w@Set~ zV&yq!EeBBfK~J^bw4?Em_>kJp!eE_fk+th6h7|mBJOY7m6uI`>KDrg%Wc!4v{Z?=! zZk}luLk_O8801~_1=n#W&IG?J^p`(c%QqD?K}$uQ69a)%kPJYHL{iI|y~vOOGzrw{ z&+!P0K7j9_Xv&2qS3zylDLfy7op?5;|Gb)$?n3{|AZ74TwA$Myu6cebT9E8YK!i$h zeCI9FmsdNY3uAWQVmVQm3weicyMJvp5}nd0>>zN zOLgypPMTXc8~_J8(p4J~X0O5s(*mfJfM7$k&py2Q!fcFD_ZNk-rq_3I`w1RF4nDaA z?%m^qVFem(;-bUoZlIm}_-a1>Vl^s(H9coDK>rKkns)$=2hr%@8^pxEKxtB$&z7(; zv`d^C8^ff9#Ao1BNsE4tM_}`kr!NlXsb}@#Z`Qdw9~!_ndm`cIyNe+tc#k0-!vy-8 zIf(7hR?mfo@L>o5hmwQ>Rzm1vBZ3O!g2tQxN*EUi5*PaR@^d^w2>aK39@x!l2_is% zwp4WANubYxUg$xobpGXrYA?}Z$9#xr9h|Y2z~vS} z+q%D$tCc^;Bk2C5iSICON0^p~*O%Fpwji^`P>Jfx@6c3s2I%yjI`6Zed<*=jV8YW9J+iCu|r}ii9{-04P?8Ip)ew z;ouRn!hQa2wBIw|`e-Ysuk~7%iMTpKjw0D>E?cqe!XgWU2XBUV19sdMvEiAG)QJ8$ z9^qmuMRqfWj_4VpUXdh$Cs!~bp2hSq1AW#XNzgu^b>Qw&>HsbfElAR3%k6p)V<)tS;+`ZjLd}*$5z`^jJfTqc62R1GW@}*FF(g4=!4zmy^^*T zvrF_h9wZ8Y1Ct+MtY`)0(29l3gN;7lg{%)S-DKaJv2$r0cTV&?$?i%9WD^z*-CH4% zOS$*-(P8iFM}85Q{rE=+aflzGHw24OFJt_)6?Q^&W!cx3$54qkNY?=g)8kHjGFF-VlCv!IPJMGp^ixq4a8rv`?QpDzIpr zXKHu9pW_ie^(tDO_Sqw9Az0r`48*wU_u zFOIN#L6?L!b+2arJbp$e1u^Z!c_c9HBo_+Y|cm&)o&>M6SY0SCD z{dGZf9<6A`RxDr~bQ9a>bv9X;JFfWU#v%%5J=aHcBko~ihU;v7((?xuX}v{=A{WMl zQW8LVXd7St9FKs=0Q52L^@VVoeN-!oEczD4dh!Z)nM7-_E<%K1v%)_B-zNt4rxLj; zM?3|-ez~KZ4zKOr)|Zfvil!#|kgMfN=GKzkvi8sM2=H4f0PtsD4s=T!SN zZvyEA_^atby|!@q{GIW5*Y|+&MqTBizqKUVh*z z-oU&ZB1py9+cDB?T(<||L*-l;a6vf9NQ1%M6~N2{9Kr}W@hV);@JEyLK03XCpkz`C zGyJ;+r4aB_GKd)5KgT0LDFv6!##sdZlRZe%?*Yo7s3Fb*$e=j zWdQ=?A@Ty$meqscQ|OZn){sxUcyPtz~!ToQc6OU+;(>vwe`8 zI0bdj0nh6f(vro#w0FmvvkEYChX?6N&Z6(W06}XhB603M&`(2898Y#KP;KWOU$(>h z6NKG~lSe-PQZei>5NczlT#Tb3mJj+Vb^Sq>^;Re-u1g@RBfmq0#8s)|i_*Uh8s!Oi zvPCkq`G9*Nx7GyIyB+lc14=+W-cmgWGsAbkm^*jpy3cR!c`=Zx-GTZ2EWmlpU%#rw zP&&sA#%lnZUfEqoAp?`$_{4!V8zR_vkkVq-G9!D`HKmHh%^?3-C4^hfFW%{5#Ul{@( zNY;BZ-g3TIVg$h+Xh`S}CsY>u&aohv(QrFa*>jGHY5PfVChvw&j6R*P+w1Vv?vV;3 zb9|%HI#JsX+%fR3tolVPdt;Q}9Qq(j&P(_j)nkDI8L`ot5DYC&q%MI05?uO3&Y`;| z8qjmuZ?iZ06c0hk1>?svcfZ}#GxNa@V12r9ckky_vIy=DmCluFx>d*AZfBm4y{ z5SJCJ?Q;{Li-qBjOg+vN1;Gvyaxy}c-DJPvHcR220QtN6&9duogMCC2g)lD{+3|TQ zw|EHPSNO6|w17A=QBM)~*|&}T?7&+C9mZ{L?5JDL4Stzo26wY^7|K$IP@v%oGh#(P z2izNwi8?RJ`V_z$S~Yy|!3ke!ymcPFy8|mVc3s`D)AoW!2N3Uj8{Y9oAcM1fY>o$E zNkEnL%MP&p+}M010twCN4&qzO=TH^wf$}ouQ+@snns{+Sx;DaPL(#5e3_1{Xe{w;Y zlEn~Go(DO|wgc`%)xsBbE> zX!Llyee1aukjsNc>bI>4Ols@%Yr%-7@M*0`<-HV^3~&}Xy1xfm z^BEf?!c5t_f_EwKANN5Hj!4=h__-XhL!X(kuX)`E3vkf9A=-73^8QsUmGM3^WFpqe zNd%=Yzxev(kpF{WvjJ0(#+)Fr13e%gZ4mwAP4q-p!~wnpWXD)zc|{1yY&=2~uo@Y# z#aUr?qMY)?af`&c^-)IdRvbZO`x+Gcu=10gD;sA9;b#3F7AKG~y1D%cI?ahDe|&VQ zk7Lj!1fi?Kh@MgJGrafqfp8$gkxMs`0mTQ97=8H69`0vGhjZ0MO|7;BP=tYXL3A1%fkX?FaJnX#a=|EQ+=5ZtgP`8~W`W;HZX zE$~Sr?C z@3MkC{~B7OrPw02)`ZjJU+RbjEn46+yxjog$>!HkdO{cJ@K=M=!w25Ir4x7Z@+Uqz z(5B0_b$$JU$by@3ZMjgPrwsh#Hs_M>ZxaCNc2zmdqHo*GH?xLB649&-xF~$H2yk(P zFprQ%BE^dh5o}w|F~pi~U=*Rq4jv2bTsb-GQjhjSxf<5Lsx`0o|-YJ;Bx6edai> z6pu&&ik5;(4HWhaX#J*Go+viyJW#U$kM%{nLXeJ8@UGi2ydN!1Y$ixUh8=z{EV#RB z!)kNMC>&C5yd1qPXq+k?cmdDrn1&A%8eBI9OBHx@+c4PNM>G(~uBE|n2JR2YXzc4H z=CKY71?-OSoe_5hvX+zCK<-NJf_oN2tBtpQ>w@)A2v5XrhA|F?`sBrANiGfRMSb(g z7fA<4sW%8Zc$u4iq0?-jP9I1DhOY>MzI!0}cr;Nc=ot*!x$+c^Os^fF-_0ldh0cg1 z^MQ5m8WzFM)DDrc-N)N=T+gIQbz{Qh-cWm`a z7z*4TNZw+CYiY0T9}}@L5)AlIKpOjqD=vn6dO{qE-yRaPqvsbS9+-2|ko}JOGCJS( z1Jl_Tg%kb0!uq>5!H4=D1`9~{EOgC~<*kn&3_wuze+UUU5JdgVfHrrLK&5#1k@CJ9 z{Vn$ctz{u%aRdAYFJuX5jNqeed$awkrY=8UevZ1Xbq^5jh57+7C?k&u4Efl0GlYrI zmR=;mARJ)^{X(o4qy%kNq)`Gx0VyzkxgdW0iWP zx#(O#MbI!r9FbEyXdQS^lmKjid(geZlMqAOJOc{{%w%4f3kUsGLOskFe2*w`{8hK~ zvFK~PLLOwrp9)nV$) zHtOO3d)9fHywTBs_yc{*{L((*|IoJ^z|7A)^BEs{Z(Pv#(Bw|ZIc~Z@3T9bqm7`>t zEJ8g2MbjI7G+)jA4Wy2${ejyXJ(>;?yRZsGkR#Ya>?ukjQ z15BCP^A+BilS?mJO^23dQ&)|priUoK+IcwVN#oZUCwqt1R4iAg%fshBnZ#TsOjCl4szzR>Sb2e0mb)h>A)7x?HCN%lh zVe^fgF*z;6g6vv0DayPz*S_m?nGPU)j=4y9TMVajTKb)Q(R}b>0w$-eYJZ6y@3N|$ zYA8&h0xm9g8vxAIHttEKIaYxMHcTQqsCuvQFcFdmR-v~OqbSVZl{ar)1U`)~vJP#t zN2h$#wZQ?QvtCxqqI?|j&M?0Y>?AidIrsUVXkw{*)wzhI7fcF;{ov>;i(T1}F-X-= zwWZHKW@}rLhRl8NCB6oVCHb?ek6IPrc2~6j(+__d8uOjPI`| z2K1a}0}P$LYn>q8m;i)BX**|>_k2g~gzWLE@cyK)0`!ZkP>H%PY2wiywi0t^o}9_M zl9dQF=S|ard)n*WN*2A0vmJGsRbxF=`vi}?whq=nG5i9G>_)Nu^x?h_tz3FbGIUr! zJs-_GgT!7^(z{vnPInN;^=xJq?*z>pm6GJNQE-$4RN7i9%a#P?#zkpJE3(3*5IgV7 zjdu#ywPv=IJ>I4Mi-73#E2#hK);GAC9SAT17M?tDI8fe4)2r{uvhS!u>`mh_O*wri zBO+N#&wQrB(-NvEiTpnHBNyc4MKO^N$6Z!w%6)ye9;B@b>BM>1FGx$H4+(#Ua-HSr z99a&m8qNz%8Udcz8Ok8tlkK&t21pSKTvTU5?xf_k@FUHPwV|Jnd0eGMi@+vZ?`#XF zqU7ONC47rlPdeliK*Ju0IOlt;ZIfgAI&`@*nv7j{3~k$sOLn=GxYk?=tebNwkAdQq zj~n3tL=$>#@hO5t+~O+C)y?1HF`xrokS~f`^dCnQhjh2lq?9T}yu`ksu69KqdbZIgWoUL=dq(tn*1gNhyy8%9 z8~^#?h29hLnRq^i0ZmOgLTE8)4}FY0_h_wGdbC+PjLdSCL1=$7%Jiu@VOO)^sY+#& zFXcd)jt<6>b}Q@;lwN9dm3`GIoYl9m6JM#F`OWMDqB1J=%{K4`RowKu2pFM?(#Owz?(>!kx z5JPJ+3Gb4r@DaJ~)Y}j3|L(D-z$$0jD-SnX%K>3+(%~yAWz68mx}yg)a)LGl?HDg& zXe)rqLmo%L**1Ts2)H@o-C@)9%I=(`kP zLGb6{_g|)b(24kqyqk6K$iHW-Y}en6J0_p-q4Vf9;Pu511!iAfq}rW$nirRcLO6o! zKzg~CkuzofYetRRXFz%A49tI5D>rOz!L&(Vf;Is(mMT836(k;D53%h@l9n%PM}vz zSop!kmCvrkZ}dRL-9dT8IJfn=#?=hCP@>50k8|HmfPWJPh6l4RtB@foYlHT zhH>`9t6Pe9NKqH_LdzBgze`@Xw#z+jjUfg6-j>RpFQGS}Mg;iI0JZm39?iugw@u#4 zduDmxW@X7)w_{ixbF|fQ5jObQmFZQ7*Bx`!F;-!nUvJ;1b)k&NYs%^9QAuxdM;!73 z=bRRi6o`v2iP*sv_3)C~t9f`VOJe0a0@r-+PF$jv>-Ihp58(p)eVsG?<~kD;g88bH z#-%V$I;^Sl<)FvOagBoWXk^pIRAB~Lp4^ydxDPKodF}Dp~Kma-Lopa=4Ef zK6f)vG>yLuIQ!W-T>u)}(FhZseuHBfMXd|nlBrS$Za8(L=xu=zYF?{FiH@8rYJx8^d#*QeZyc?yxztREMsuOzX06N_m zo#0IgqBkKd0$S-|oV*RPMwMPcfoKC`QH)2_SuQgk_tgL|^A&EZQ0lJ~WZ3a3Qv?Qm zrNOT9rpu5TM!!W^)Rb3wj>7{N#($SeX{5}X>@nTW0TdRj5+MYY4k}uT74PkeFJVI%iyqph_D}kZ_H9v-rimBjoK54n zh%3Y_;m!{#1T38< z^{jt$lv@eU@6)2yB|E#Vo%Nnz9|b<8NG&`1I_|J{mfu!V)GEL;*3bs2F`3JAS&taq zpYf`91^4r~ucz$dhZ212oe%r07x&iip$`fPq}x!(06$?RR(bq^PrZY!Ys$RW3ndC& z)6qyhHG|bMfHk+AXX@l?e7W)l07(9lQuWOpPx5L~OGa6PuiR?AVR4Ws^42UI^EFDB ziS}o5zak&iPlNCcg^F5Nq3>vYcg6Rz*3@!$lid^-+L4O`Vgjs1%TgS|ioVPJxo}@t zlW#e2+cv>>-xvFUydlC3Xor*mSzFw-d%%^2^I``Af!*n#16>eYwBhVd>ONZ?@XY1B z%Eb?l22miOtB7O9d{URPx6pXjg69g@Qj9c55V9&|oV+Z};addIX5yJn<4-i=BIr9v z{f0l}Yn}(Vy#-J~nX?IeN-zhYPI@cw6DQ6!3HOom_7Owtni6sOUlR1{J}cj!$`rkG zU*6ivGe7#A=j<`kOg)r)?YWaBgigt)R0(!alC&xom73G$Y11$53)%!yN@X)u_@>QsDi3IlUQ1+`%`2XQe!T@q zJ39@wGjVTgI;ULr!9DuphopHzMPVFY#hHp%>$^5#%ttE77fkIv?=$o?kf}X=Q3Xd5 z58-Rsc^x{Qzri;C2`e}bK&)!}ZuN@+!RiQWg_))VEEJjRl+GC)9;L}F6Gr?g9*-b5 zN(%?zVPL^{RXQ=6EKJzJOe}G2Frm)7Q<4`{erJ%Wh?y*SW)r^>FD0A^tY}&HuC`zk z*Z_)%+RAqgH!}Gh692LTF=O4e+zBPz3{L?~F)D~A+g^GJ>+r!DDSpILNd7Vff`-!a z>eHYw+$9R#-x~V>0>9jukvOqHk*Mv~p1sw()3|6&flkE&@J0XX#!+%hJh{|iJX4lU zqlQY_7Mbwkn!szSu$2UAS@D6~rfpxpv^%9QK%f^SFjtI|gXMXP1&FuD<$avWVX(Jd z3K>=1?1~>`T75r>2j_xwI7U2@`g2?`&Yi;Ehs%Au()R|<(-n?LodCqbcap0bLwM#` z7`!7PBp_q7t>s*}zaESJp`obQs z*h5S5Ha@)VO%V}H_4lP53+2l>xhDvgNyW#yC;9azCUm6boU_48(!cLqC^62IJ_zR= zrF({A2Er7^jpT_t=h&C~`Yl?H8M7nelQfL_Cf_2PAIU2xY^l&%DwW$>f&-LS{4*>{ z!3u4d<5av`mBS|NfM?Anpt5<57#W5>QOBE|)@HW#6&;W(T|kS7pgKenhW4A^uuqL| zXWdcEvtlFoWx5WGOx7=T4W8@_Rg<5f(Td=YMwZF=zDDq+1ex9UiF~s(j358?Sj-t`wcbaK6&#?_ z-l!<@SMbI($ch7;AuZIIH*k6nz8_eGVs$S^Jod!idw3Ne08u+uB$+ZpV!;r^S(&QK zUQOYH7%xe0ToTSKY%KbkUWyNef)Jf=L<`WWr&qMC9ASkLIr#}A72$T{~ys`Jz zj}z6|Ez54Xos|gmkkg&B2_xDNctVItn{ESkq zmZdU`8Vguwev@;k^JtpBN6%;DBc$A4W_YxBE|Nh6mQLV^vkh^fhs8`rD)(s%e&E#P zvnE9Nc82V!avg2^A&KKe2yR2j*w|z-9B}yK#+7~XQ12zl5-f=8E6cdK`T%fTV4Xs< z<#`Y2_1FRkP&u(zZE1}s;e)P1v7P7g)@=`^>9z2_e$K7UJt!`diRGjpMsvC0*@nYa zbb`8EwEbAK*l6Pqe{^6}Ln8!mO7nC_IFPNxc!urZ zVlIwpa$DXxPBIAc!LyJND1-t=SYk{=^;#}!bW6*QNtjEoN^Ms;192@Ss`AK&r60ZY z^V{*+RMAM}LbphcabWJT87w7>DX-9K7kLyl$PA=3HJ8m|r4XET{6@7*)ML80Fj)bJ z(dUsX;K8eq)c4-`^u8#zJO6sIXfI>>j38p>ryDrwkQ&Se0Jj|XhapQk11Y1AUY&f~ zpn_dV|>&q zO(aC%7DiMiI_o3>{Ix+Wh}H#~iP&f?0^_T}*Y`Kdh&c=jCQkd^sDyOctud4(!w6Ym zXuo6oguYQ#2i_~&{Hr%|&WD(sm*k14-rJjJXJ|ilz5QlUprN?=`W)q)XES01Lms?t zZ`4+rsA$zbmML4xyzo?vul`i+ScCec<2dKLpOaOEVF@z3JPh$pS^Rowk~8{F6aagS z-S@gAUCqw|N`$?4F^Z-I#mX`|60}P)zp}ZX$Xpue@PUbTD-Z0s?@|m`LUOJSNc_b7 zVsgZ2?@bxIG*F8{ZOMo$_B}@6kz{E-7rq0obEJcxpP+GxZq z3^R?n>ct;5SYdZ^2}H9I=@7NL*`FzkDa?XT!<(||WgRiSfv~^IwLg2l$v_#+RTzoh zNs?$3g-P5CohHP1m(>+}sckC;7up5a*a!q&bt8i<{4P`KlX80|0fX+rK69M^0$XJ) zDeC-E8FPSt#9%lfdaWvrNe#7x&aw}#yjHkOyPUyq>+}}aksYNQ8HMeZx7!j@-Khdr z5}xpU$fv~nj#WhRz9u0z&qAs~wY(I)Z4WEj`N0*PS02C>!tDX}O{z*Kk`#%O8&TxA z%J(Q1?j`t?)ENd`alX`Uq|iq%6v)|7pq%1U#9aAh+b@90zmz@77DAKuzbvdI$ z^De;Z3xee~Zsl{t-8U--0gfZH&Uc{;--}BNIr6e7*@W*vT~{yRAUN~f&tV}ukETt{ zZa?|CtyW&*+y;}@!MaFW!KAvjSi^7Q_K9sR`Vs+}}l5aU^LKV&^HI`~} zTP7gl&H$lTP~GP3a@T3OhSjm#BtI;K2EJh~BexGv{sT8_lbGqX1!5#4+tA;FYm~X9 zwC%wsm`|mIhTi6bXfIyvYQUZGq76|Ty}>H8chVrFIM29^Qz{`e5YV`I2C(1Sx;4`F z`Xq1ye*E$hI9)cq0%zcH+sow7a5Tw{dnx%6yp+&g3q6WOZe`xV-+){f;V69Wjg<*v zYju}X_?9d=8TXu4K;<{(h$y$!@-2ogqQFdzV9}?%qA1#;iZ)B0&F~{v#~3{BZUDla zZ#Y?j(I1j`A8TYWQ4_I>UA0^C^yuZhRQACLrU@|x#x@GBKGF2?al~eK=gZz~{ABr* zP@tDWTw)!r!qV!BEWaQN;a zi?1|m-UX2IS2;alLFnj2lNYuzSs zDzl=2HKLpkg$qXE)}{j01#YzQv#YbY00t%1#%)e1G9vm_0FPrZB8>Jbo#L{4YkRD! zADv>+*v(UTJOEga2{f=rTSu!@aO(@wM)dJzk}A7rre>EVI1KYMbB&tdv^-)SRrOhuXq|Qe*Qck4{4i*a8VKxeI6U ziCUwbd;4AVV0n(T0~&W+zF~%9?nWB>)55y!y&2vK8VUeuq&wr*2_!)gAy3ZL$L2me zS=dl^MTX|k&se_hb0ivDobE(zq3ln7y+xSBWa<6z2p9kvn*ns6M^TWIKW-YU&HLfW zX%G5kOgnf_^@+L!Gy(}01W8~Ij?bs|JwSNS#V+(-l*DN1)*(5Z4i%meO7%zhNMdKd ztf!o#OpGmPb^{#{G2~vI+f*ZAEPP|%GShjnS;ife_mdjy(tY)y0K^Q5%jbe;$hO}7 zlez>4-I}=wrLA3R!@t2{PC?CknHcWr4bqk{&&?;5)c?CvQuAk+U*2hJ(C{GIT@+50 zJLS`4ll(jbozo-PPm@~4TqLYFGOttTP$L*!#?oB?AvA*5`aY8zTEi|Cd6EMUI5h96 zjJ{J-8V<#cj_4>auh=tR-97rM-fk$MhvvJ=8zz(5Y^_?HIaHpe*n5@1j7Rm{SkHId zXOn!Vju${>_O}sXv?j{FM^hpm0wOr%)0hz8gLTs?-|`*{Q3mUX_?wdR>ooWajpFaMm+PRpAGq}Lk{vi4-Iv@gZ7D?<1^u z!vu(sO=^*v#6e)%#xQ1gh$!oGkC7|dkJZVlrTW8&k4jt$`7Z_I zBzw%Yxj60A>tveHH899wIv506zG5klrWcrHo5(DN6rwME z^UK=iYLl^C!OF*skW>`NeLm~&G%{H!2U*`>@M)(SkSj3b@=+H*;|ZgXZW^H zaaEN*P4r|aH&4N?g;IblgY%Ige9J$M-O|dE^j@#7CtT-OoUIIMJkB4^DD+_|Ua|G; z(@0Nt$QMV?K77&%k?%=O`BfT}Bm>KWyP|D6J-beLgy`AnF>Fz{hQR`=WGRc?YR5Jf z_tr&Xag{B^&T4^5YFA5rRqu-BLrke@#>3$_mo4Y)Ur6$Ip$LE0q^C1DKADx9gvZzy zz8e^To~k|BC35;kzdq?Vyhh+5#c<16i}>QYjV}Y+)?u%%W49=+f>|)4u!V?Rvz_Xm z^Ra*WG=;Bg?CZvOQLPpaH+}~v5gw`;t#>>Jo7dsy-cXv2ni#3{+;RJ14ok9ew{`B; zNs!ilgTJsVKU@y+o2)h>9Ece_bfi+kiZ~^44}0U_$?vFfXFa&r6lD-?MdftePwY)K zjB{?_*{q8`eR&o%A!_1SA-gs!D@WR8+yz2N4maaLRKKi@q!l^GJ<{({-jokMlh1@v zNRfj0gnGb+_5J7bh9H?$vM zvz^oSy@SPrJ@+N475aR;V^a!P#*BQ>67jb`ZRX)ct>UB20J zx{Y=)i{%`}!sO-i9ku{xs-^L^gY^tQgz8P5Y2+pf@%oN>$wIqWY?*CNS-4#rbw-Jz zL-x*dgGQ6>B^Aa46qxn7&DjlaK1s+4K-y4IwWK@N7x@&n``K7pH~cK92q;x`7;%-& z0A-uSI~Nr*9?d=|8ncbu;d1I}WTRpaxmze2+hQ``-pzW}L8N>Lw$sCW)YehW0&B|k zu-t<5Dfr$@#mNKCmB6=j>R_}XL&=8l-|g7I)VY2N4Kywog;0r|OM`GvqeN5=4(zCJ zE0a~I6SIUyOtKTy`!8*Fr&fVJ}E*5ze|wF@V-KFwg`S)OGjy4m+OmByx8Qn zxCehTogv!%1G9YPsnB%M%$e*P^S++dHXiF`-D~eF#3sr}obXe4%OqjfTn;%#6P^G| zv0o9G$uatAY^wMbt*qCAtQz&Iw(2!X;m#?iK3e}d5Da`$bDBL-Cyp}Eep91nUbVJG z-q*)`$f#EBY_eU}=enh0ecNzfC$pl)|Cx+RqE-N{Z10kn zta)q}**6F;Zr)T_LusP#T#N;WEL^p#3pbmAQ@hWlEKr#soQ<2UR=Mv@3G$5wEPSK6 zH~u7E60$l>#~2fA6D@ewFBs>GpPXa$_$Vc-U5*WGqh7mF)G$F8G^;jQbn>PcXY_kX zl_OVKX@o?9W&9(lpA#P9>a*Wv=$06KISOEmEKLON6`cr%928dL(IcxdTb{P~M5Z6R z0NMn!(dVC+)>j+L>cZ8OB2lMmrJkTu3hB7CvcGTL#9nU(qNR`p&FaQ%0oW8<-B z=qa>sN1rht=P_x%>!nMIE%nX3@0*yl7CLOJS2c<-Drc+!E(Goo4fmz+(S2^M_&vST{n**Dc7mg{)lMzj z0+X!RyTt3lhfv`3l%yWu1wJS@*Y|Y9^1V{{K~50a9tTn)@8+nw3Nk*YfgnI?nGx*JQVN(nMjmon&*MP=ht#xj&Kry<$DGNDr$>>bdClo`y z{qhZ)7M-tAkS58fb@e^fd0S9LrM}lkjdQk@`HpOY*E!+wQ#`5XTo#yxhxfx=wW6+cToGb!32g* ztu!hS-3pzR{dNQ~pCU7*oW7&9sJs@Cd5xfw)Gx#c_8GrFK$@C7NK}wxWH!*$l zci&Rr0OD!V-Bu8$8F(OR5+kRir^jsxgSwY;XV2FX8JV$3?U5Cwev-@>bI@MkJmT#X zhKk@h17R%#h@6jgh?AzND_FDBj;0dftDXK+o0c3QW)l0a7u5)$%waG0ZjCgAeY2)9 zqxW@&59Zj^Xc5`l1Q#;u9t=3-yk-l}4UDvtY#SaY}-n`vw1 z@_+F%54!eSbGJh5uVF)YQEcWkEzZQKcD+8F`_T#aa3JeMMLjFsp~Rumv;iQ(FwhII z7w49iYcAcv!mgs(4Rnr9=?8fi|H8Yp+bnkwY-8uM0RHy#IPnnVAN2+1Mwdpx9?(@E zmB?9zy0VTV?s3pEFiY`czRSiL7P|wT*ssBwcwRdD*$}dbb_VrGY1tP&C-z{bqnsX78g~GEZDTY z166VE?(19*poBsaH0`(>_DIkI4-FT6`Gvb)LZd8xYoMXr4JFPQ2@VU`z}U1@XhpF{ z)e5(At-{qYw%p{0lDPajeT7F|IK8&@2xsjjnyE>X&a2{#-8bhEM))sO#CMpVG5YWg zlUw+1L@e)R-`5Cwf4iWJ3a2_A5GD_xs*kCYyzg!3Q z@D!)~ofVSs`z$;~RyA&LneCJYm3cR-!NYtSLg<|Q&%?PYU!zo2m! ztNyn4Z4r%Gxnk~wubA1HN#31&8-aJg>6!W-&`tX7a<+3T0#ZdaGC=`i$#zbhrDmf# zs|INs#g$qF1jO~Re3QHQDtr`=g@`fZbU&6UMAPDElQ4imKjOl=!daF6bM`W-odkpIaQ+vN;+hx!_ zQQd7?g09T}PVCYjjQNgE3VNh5=vlna9QyWpm=6GXWFrcN^s+boBp?}le0o%TkG-Px zhHA}p2inOxWCh6#cWYa8%BCf!_4&|`yOA#LVEFVI*uH-|(u2nz-{%bm`gr=yZA%Wq z(!EJ;RpU&Ih_Xi!>3RW>0JNCE=Fxn{S-i~&M^>$GU89w=%&JQU%i85Zy$35{f3$oD zd(_)_L*yohXs<5jH^MbwgT8VRt`O(G8tFNUxOGfm;CdEMGM%KjcNB|mFpDbVm!kK~ z^6V&gN3F#PpH16z_MJa_tt2kJJsCkTGXb7N~5jjJb5Wz7{VG0W9;>>Q{G{37x~d)|x^SQk#F?m-+6 z#0b;J^%w><$KljCSVfQPSlvL28NfjdXteh9eRT12N`a_o#P4(4uPmsy$OGzgHZIo5tkYR zhSTSp4wz42%ASM@qufQYx6#@H`UA#S9Il~%0P+KWoJMjYef@8KjqX6?;?U8-N7qZE*osDxSTjl4eIqxsBQcysSe z=!-Y%TF;ffO+ln&sjX2i%1W`<<1!A|&X1A0Xc-XO&O_yIQeKnUd4t_LA-cXApHh|q zdzs4o5`YPtS-_343?ehv4kgnu_P%===Qb#8l-_8PBd7) z*^$A&$zB^&nUrr2KZUhe&XJzv&JJ^gar3yPx5GJOn-`vL$=!d>L}8|5QPKrVazqas zY0_zg`WGosLY{l`n)AzKy)ZwcMs)%iZ&g;Y_tGvLFWq(Vqu8?|ZgZk9!KqHYvd3ngnVhBf@xcpJ+*`e+b<99)w>wY318HrD z5nX02--f*7RLVew#M_27QNB}CNcNXsds2uC0s$1+1tso1m;x4>d9c|Ub3HOr)i;*1+T29NC)Z1hSI{_^u| zJX+)JrcPR+(z+66*Nj1UeCHm-j`?+8;n7GO`vrR|S%$*^HJ-n)=-6+zDC)w1wxrvl z=|8QfMO$3CSfUpCSjc>=yXoR&_Ds&Rjhpe<;z}@&uGU-;Gq#Vhu>bhDv@Ivoqsw0( z*a|l`PFE+zq_-%W?KO6T5)^xa4fkdF{|`ZmrX{=N>P+36SL;UgiloEV_0c4-wY z$*rZ&HQt1kI?27tG#=;ADlm5z+P=|P>i~Ey?9+_WdmDzOkk2b;bsf4uvVqd-S<2Wv zW^cPe31iQy{iQg_1TfxZRE!8$sW;zRkM#c(WrM5e2FV46}Dj zdwh2YJdme}Txde4sp=rI{56eEDH9xEoZ9BJv6(=O+?kVOiW0|45PCa#*Klfrj|*^g z-OHX)_GR-q3n&_Up|*BbYYdf0!m>YfO7|OXGThVo^oPn6<-FH6dK{r-G1x+xRp95) zx9)D>g#loVvq`0DMw&S-lII4PnzTfMUPr zg13THS>P%U;cGDKop-Pxg)7+`yHc<=*Koq4 zg000u%Nmz-$t?zdaLm$90pU8nT+{Z_+StjswL+ZW?m6-nEJ^eSVVB12^mBx{kWe}u zs8jnL-iZ+`WYWGTQC{3Mf;n|Vi^PNgx?&3W1U8s?>vb*-vfg~5&Ph5~3j9Yit9Ry5 z%wxF8cT)70HQ=pB3W_Im4a(k+O_A*l-r)8F|3iomKsz9V%Ik#c*YI^mX48A_A*DNw z!XM?@dfzVsH9WA@Mg}X--jflP$fFRJjtZ9-I`NN5R(=xrvKH+@ekq

j^(D+qo}#J{`P zrP?;a=@zvSPn$TcpXD73JtA~Avv$Q)o~zw{&)J1@Kh(4LI*)1%i~&CHASyk2!It2v zm7F$3T!9=2U4$R3Jf(JbCRn2Bygx;|@F`0@; zU3CK5wY|~PHm&_ms;&G?D(pec&T-AldQD)ylEYkNaLrGarn?;9vplO{1fr79a7u`mTxMIm&ul#0R%XD*rA(q$;0Cf(B{nyWZ_VL z?K^kYI+# z@9180G_8xk(B)o_iV%FSof@sw&Eqf?nb72?wO!MKhuCW6ZreVP&%pSY_Js#N3k6oK zo>#N88yD-;a;)+C=5|O`C9znHYILH3mC&nn7T9&b9E*tpeYn2eR8I8CI=aJgh}LXn%t}N-va^qi z8K6cOK86tQ7|$ot(br)7x|ZjbdS~#LB<_ep>yp6^A5F{Sw}D5LQ*o*I2AdHz7-hdD z;o<@}f#>KTAyO%z zl5dbav?>us1Mc7-#MW%Lhm2aF;g2n4;e+by`G>ewDMmC%vipp2&zgMjF*GkTrSAO^;w*lmI-M{M*)f3886QZKO*z3}n1g9clz2nf%v0Iu*}r49 zAMewMZaz|x=kkM_m^I?=7eb#%|B^bJ!~!ZLVc5f77F{g&e{s)JcqzW z*+7WWmj&`-OQVcdSXk^aPI3$By6x(IfE-}os}{Kf%2;ez&;(B)nlH0Omq-Y3H0*e+ z2k^y>L|m|d9gd~N;VlMY!@B0RbK{|7Z#F*&oiR%^lFh3PJJ&{WI^6xKbB|jn%gA9j zE1VFbB1m>v=4Yov$};Ybvt%J=Pui+rxIcu#X80iyNpnTUB9YduCGxZ^RHe@vh@+<> z_Z;>@uVioy5*8mvlfj`p||^R`QF z0PYyma16}YrFkc;HS-Mqs_)6S*r73|I}XwTCiNkE&P<1V3X*#nQ(LX|oOu`L|Ci_) z=Hpa#Mtl2~BAp{`*G?^kW6)S%3<}0``@Iq0 zY4K5N9M3A=%NYAH7g&6=_aiCUAUPwO8_W`4zM__~PSzL8zp*;>!ol*A+hdulfr~@+ z{eF8{=#d*$T3wq5M*%U*!i3Vx+XwWV38Fdi6gygA@xrobmD^h_9- z#rhgUoib<8l->B0X)4b4!Zq6lb6V@0fqogc9uj1Y!vaU1i>!K-0XmMNh={H=8LE@l zMJP0QcRx%>$2K*vyk{1+uGS&`aCQV(kQYXUpE|F1r&WZknD$Y2)Q(f>d>{ytH5zp( zK(HGws@_R0e{N=6XL7+Wo87}b$?&7%sL4^KKiqaFc5aZSWzi%0k!HXsK)w373vnR# z{(F;$Vrc?s(~W>+A3F9$UAHsqDTJphw6AJ&RFUG8BlmN9*xn-vbbwOlb;c964;Y~+ z%8J*0G|;rsMR_Vb@r5ET$;C5^K}nbXnf7_Hmh&<}|rZ+k3D)ZVYI#`G>HgQ z$E~)C``j6`^jA4VA8BixJDI4~A!Sj;RLhK|MFI+);Di}N-Vj^F_SB+0AzM{_o%;=* z^}!-8(_4#vj7D#nlP4w7ZSv^=LqNR01>{|4#m&>%Y60A;1Znr!MbaSUc`rjDy-gTK z&|^#iy7;&VG#9JTX|Pxqkwkyxgbf^RHy31_@U$jW@4dNLpbE5bTtF;*XJPxs#Bd>t zn#1_dB)753Z@E6EV>@j!q(?W#A-Q=$ep)NII_o18bFUL-k&w3-0>MWSp>n+A=wn$} zgc~|mBm@m6y>eh<>vNDe5+i|yN%9w^IZY>Y@XQ4VrBN6Ubr4Dc+1Sud*D~s{)N=^I zpn?}jrgE?}tUP3#x#Y3` zUUG+W6nd1($=~hK)S!P)b;{ZPDl}~Ll>I~}4mrmcVvBQP%(G4%)!zV^!WtxlyLv4U zHDBb99DHSJj|=SV1aCXI`mRlIJ;v&=M#?czm`gZNbPw_$Xf9z}#ZxZC zee5j8m{Fjs3s)Y%>wWKrA85{npA?D?Jf-1utbs1I`VfSnV`qJCy$lDo3l!;DIuQ={ z+8oc7^fdT8Km&W7B&?^y7n@RYK#Xo+2WVr@#q*@h2im>EqeCF=D6`%pP_~nym%a}h z=_^d+D(lp_h{uh+tL*o2B(pae=L0ZQxgao}nQTlWGpmb;TVrKHdz6S+un<=oNg0F` zNVh|Mf0gcAHZtqYd8;HrpuHfJ3di6_?i_Rlwm#zvZ%Qy{3s%7m_9Bo|DVl(#qzNm| z`JYV;;Pk%bfJXrFnD#zE$xzkFJ?+laBJna$e{MJsLdSLw&H^1;Uy~~*A&Mw`i}nuj zno@c1T1XxFN}`~h!IbPxh5cM&Pv28EfKK_{d$6ulS%XDMD`Dy{J%Lwfqd6SXdEh-P1V z^4i8Vi^VcH@*}NDLROtM!X=Zy9i6&gVga5=1NFAO&r7 z_*fHQY6G=DDml=&R7v`MuAOq`h&Je|3zK2`)5@KoT4~W)&gTyHEX0}HZt>322AZGy z1&g?6ROxVoD86wQ}$T)4sY8B$bx46ZU|xY7C1=?S{6k+Epz6Fw_&K?br= zPIR0%U11Z>{F;AsrgJhw5zI)8qIWxdNiQ`_=v#JFwx@@+ca=5XnnxiUX$vh}?xD(! z>7AEHS+{fZW-&O8cM)9B4SkM3cjYXv6iHBbmM&Ob8d>9@O@yA7XCALXTTG^qI<-rK zmHJpzfmk?}0H$*e*z&AfWX@dAIGT9>WQ+-ljrvUHWih*G*mH8dr48E~tlR`BUM)zy z6i;KDmgMO4j(9bHyeV01^>YyTx|mJ)SsX!$f4Loc5f2&VxpCtjtdd-IU{3T}bjP4; z9EQ@jJlepZzI*1zf>CFUm8@&;YK0BU+LMkhe1K@kAF4H|89CP6GOTEB(PVXn*&$O% zU_AK2YtK-zF87NJw0SmyVyHgYFISe<43!H2-2B#ijr5FsyYop)%w6~RW_8@TF zZcmr8^YYS2j6`KGy|9WXYP1#kHguyDDiR>B^{{FW*2*&5WoBg*Ra#Ye=xEJ=_SqcM zxpMKAUgS__ZWDu^Q-i|{dAW+x);_f)3FVI)Z^;0AV8^Iq*Y)uoTgDu8qCk4e*-L0h zHns>rx~!~Q7aWU2N%PJv_{$rQC*+Toop?`7~CXvYXS4t zHk|oM=lk)R#yjgU=c((u(b}cmOmUE><%aM}%V>hra*PqfOPxjdm3CIfLN+VIiYAB*ik<@)R#+&l!GnFtzTmy@a8jNky9-*x+3A{nNx%Ev0M==O zq*~|6G`X{}BIU%YsfFUIdEvbPdaQ+&!!1(S?E)eIRnv6e4Gy0S5u;R+6_A;c`mo9? zv;ykpf2=YGS|fNa40ghuGe4g96SFH}3%i~u<7WuB5E268V7oc>+NTIkWX2ABir0dyVNKL$U@<2#TT zgE7Sm|74bB*QJwc3&Q7x5BD{O2+}FXyVkS#wo@;z)y=PKtr46~US(~9JK8E>p&J2A zF&@o@6YN0HOWbG?KAzdI(!OfXy@{WVUH^0|26LEnDm1wHd{cq|?z34VT)-}~nBYk4 z1~jI#P+_h=)^vnK)S}Q#kiXY^K`cA~36PwWJc(Iw#!gU?R(j=vn96A?7dV|JWbHzi z_FA7t8RfxXJao_pI?3i{7m_)?SpfTJ5Nj|S7d{BsujWHh*R%IIaK{7NyRcDncG1lb zsS&7QTwn*Wz)E4kiqZ3_eG>s-HP1Jqk#BALlyrO%ghXZ~WgIj!D%00e*++2n*(KUA z+`DT^J^UZf8~rIh`a|t8a--l3*t7I8>PcjdgJDS1o?z}e;b5eoZ*#v`(A17H*}12( z58ss3uh~Owt0nQkxhlrnBqmIMsaM%AzgcV|fn- z0_U_2DF_brbXwfbN8AfUNqSH(Vg=jUTi35!%b*8~pWj(lOu9!SiEzfMe46!=R$~{A zWZc0W?p6qdZeE2$xzur6;WdD`=h2MVAYdLRQPa z!H97!^lbx}N#TCLRz`d?%C)#mvP=pZHm=A#r+9L{XHYA&TT3g0TW>K4zscQjt{K&q z?N`8q8xD+Q+;&b*V&tnhg?eZ^`T8BKfS&xU;;G@MKt4T}WIu|JHxO)BJQW6IobuC} zKpMyU4ooA9^vB$}rb&|GT5wB%cu31ZAojn6`b?gCsJQ>;PWNf zL&$tEOajbsIUX}9K5T{F9H%!JocuZ%CTMX`sx{Hal+60n{8AnOY6SH_bIq;65QR<_ zww;9&j!q(-oQ-fWp0J>hzRSLy^me!F6Hu=LRkMO__1aqu3=QsaFjQ0(p%KIQ!M&d2 z2NBIjvn#czAI(R@-lZW_H{#?M)`{%aYsEdjq&#Lb;T4l3dcs&vVyXF-+QXUTn2m+& z@~|<<(5J3-jW<5B+$l^&ma6cRNMmc`zBBI}vMU@Pu?PG}cBcm5hja}gIF9jSk1|st zM}T+NJ4D#Ym$i7#vy%~?9PH3zzF<>DN`7Gl-p?xazrM{uf6E^8v-jG;+;%6&JHgvb zRbIXI4QfjVE7TY7?8%|G2xE>i^G?m^?v@qT;;!=W+Av@Of+>YPGKu=N=~KorQrrBE zEbRhC_uy2Yrlk>3`575P7}1Go{vJ?XM~v)lNJ`#bDfSH94c&N_w9F~V@&jt;I={d@ zGXG_sq58@Mx<|@<%vMV;lN&r#WM^f9z3`)4hJYEv2}PX_s?&nFx-xIfQx@^g#B9dvD?*8?9>mIOV8-Ff}qxXcHeB$;DZNIxhptd$`X*9 zPKw+Q=p_Z!w@;3{NTu`!t&ET&k`!Y_ImOtf)D97wB)vx?^IU0Ty6KG(Rq%gIUoqFR zS%qEpJR93XuH|~e-dtGQWC;-th>!EgaE}YjEuW4A?sy8o>dZnTvpm|{yr8B|)&dz& z1Nt{5V2U}(n(}B86L#!|Af&Q&a7OtQ1&9#K0L-kM%3+tQCzciEpm4koMxdDnr`0o# z$D>~?Ss%yMhIOS+vvh&FO642^A(n!>xo$aD|{n4pD%;M~JVmlVsnjtzUfa0|SZ zGn;q9*Kj#G{lepDIbWDWWAgmXza=MxH?EZ^NXYpT`1VR@K<4GMBG8~u=a;j&7x@*f zw64Vl!_GM4xS$BjBO1E9wkk}S)!=O~!RdFVh6|ECuc^+`NW74FL}L-HF=V-ZE?pQK z#8@#iIe)BI*oKkY0y|08W*TO8>jh96?if7jHnpuV!bf}%R({j?|ArT;L|lO8jJ;nb zfLFmTalrs1;|xu_0uj#q2;sQ`DpZ|a=)R{Ds9Fr=sYVnq>ZG$yo}?;y6E2xZT4t>3 zhbdN1^8DmILW^+J0P%$XF|W1CNs_2TgD>tc>nP_4U}C0Q12;+A>3mE#4h4`^niQ?N zTRa%PM6Ml#8l4I0ox-rqSm(C42oAprM7%%Vh_6C&2TPDizd(u7*^wN%jW>$$iWb3N zXbf3flK^hPPYIs-nonBvxoTG$5jbc_N^}(7;q&MmZUcTq8>3?fdbfvJiMsRi(W)5^ zwKmdW%m+VK09>id@Pb#KbH=T_`&OHwAQ-Yj&G(AkLymVH*As#_N`WoMxx}l5%c(p^ z5w0B6n1tNYE1{+m`g%WO2#?F<`I^#Md<5`2dJ+IQXEcE%THmOr5IoRIwTY&lve+RU zR*;V$f;CY#H*`3h{2q|)SM^jN8Q znY~-zt+fVNFUWKY0JJ2s#h+iFLEDH)6p_)+SoC)u_0hD8|?@Tyqe;!dvEWO zmP-i&Iny&jF<49wp$afs-KGRH?i|V!)EXs5fYf|H+w3ghuZ~8TNtgz(Ho4?fTO|aA z4~92@*wdn}3k(HBBzwP3(OFB)F<*c<8TMj&UMy!{bdt5vA!ey370t(hc zV@t;Nb3{i*V8Izzu8^bi3L0&0c*pP&>?qAALJW1hQ_@Z#$>@_2SMX z2pR)4?Qtf#-0tip!5gC?(6;8%tBs{lrtE(4ylSHU&qQ6wGWo+7s_p=9eEi-vdKk!F*Z_K&G(e3GyNmh||`&b5I zKOVzH-dS*P>Y%by2JdB558O>L7<~7-rtpi&n?J&7kaSSWyv*3YQe_2EIp)DL82@!i z3dLe>N0Wz)IpEiTrAcJVk%`OAoFR`&+5bc~kVe0Kka^O(u_HmsUj40HB@`Jz_Et#@G404?MOtZTO-7I0 zOgXe58h))}7lrf7@~lWm;%9Zw7_1vHL-Q4Y?-1~@ zYrtN4+w-}=U0tbDvO#fM19%)DgoH*|vA*mA>w>_By!r|XcKm=dR!e@7=8LhV``jvH zdAM!9oq_{_2#yYSIfdMS#B`4EzcVsm)_j~jgXCzV7voFf;hi9T7uZXv_NSR*Ucb~T zq0K-hi9++>!Pwv9y!O`QLsG8tSta&}K#SjJ19k7EojchdP}hjZ88epwm;Y56qFjio z@$wt|07!Fi9;5?1sf4mqOQY-qS|3B1pib!%Y%3d*LKnwUkCKu7A%kV!ziohMRfX*^VY89P&LHa%kn2{E~Qz86;&)OUh(F#(9ox;p+GLa#) zTuyqwt;9?{$jnmtz&c{aVAiw@zx-+G{(Dunn|NeVEpGWxCqxTg;av)!rlnn{v1y*0 z!<3K+FoFLFcf2&8y^X*~OCx!)8f;|opzmXMTF21cTVc@ar7ViUdPWZmcnt^904M{Z z3|058Fw&kCru@^s3ten{W~Gw3fL>i!zS&#z1wzAF;P=5{2y^qD?X1QMhztLg9V`3v zAnAkXM%=C#6FWjG?(zaw{81@oAzx;w)o4-ClEQW80o{=P&sUM=B2pBKzWtc zj6O)IzVBG@)I=AatWY?!DKEzKTdrL`p6ymWeNjT&ow+kiyxRzw#XGhvfWs}z-FDQE ziVXqDAu6}msd93_uxgD~;*1Q!Z*b;Q&#STg?5Z?^J)X3|67nrpO?wie-lxw8FT{Cz z)k&qHH+&=De%2zUUuc`5H&yvoB5?Eha9<{gn%ysfu|$sfPHGA>*N5BTK6vSrFlq)a z7cG=J;lQVZD&8cGBP{H;?LBOkb?fT72B<@3UOa31wbP=%T#vnXY5CWp)LrrdRi2$u zU4n^UA{Bfq_5Bxb@lfHpOK_DlF}pfDqqK4hc-kUS{7&Nhz!k-t^|rj?&TWQ$0vSVF znR?g#WmzuMS6!3nH0f;xSF(4|(cqHRv^64$6%7c;x+o?Ksw6>X`halw>5!buz9d>e z4^mJ&3AHZ9C7MYO!kwYpMDKJzw~sVAm;TIp4yIh+E^(&S`gNyOXKzt z?cQ!^V`%Tc0${aRf*wX8W(BZgO=KPJT_+b?frZf~X%ztyy=s3QH6$B?R{@;RQQ2jo zKc=Pl#zK+k`{kplR*9$^Bl=o#w|Lz;g7|igk`78=z)aak4E7YzFyw*j9PNe+ehR^- z_4?yPUwP*jFku`l8cRtyp|BIMX|t(gtkOkFMyvd+2Z5SfgkWrrh^*phrwRoS@X2c( z9ZE*-*+B76I}NvAb5}gFJWh}h-~0|2f6&397;kY|4Aoy(4qDpxCi0F@Z$#GkG7slg z=8j(7>b&r7fNx`(Z`wG{?-aPJb9oZL!lcdCuv&8{c@NdHN3g3jqRjbqncJmyt1pjS zP3)6@Xp7W~;UxRzisb zA{)<(jcdL}6dB_U+b5&+Ece*?NR-#(Jodrb7EcazV~0_^QNFd57??cBMx4)g;|Ix4 z0W{Hhj5RLw>(Mzduz)&m%Pyp3*Jas3F3gzHLO6RQ*6jFdYz{9`Fw`|}^TH4*qwsU5 zfXD@$k~SH#M%Bg!=o{T^^=hKzbTfw4;#F<0fpF&eT&FBpWlW2Dq4$gY zfc18Lj1v-p#Z3Z^NiF0(G2&7P-j#*V_odvS*f#cQWH4al)oqCW>cGBc9ftk{yUp`) z-LcEd;(JM-35_acd%s4V!;=uvi0cx|e{&nHvTK8pGE;P$4c30DZ@Tr!ZtYZf9S=J} z`tA_bWM^|d&`Pf#i#Y5Ot~TIV;;TE=UL*f5w?DIMZ3FEfEJcY{-yHYMj7wL>9GMJDY})g7wzXvKY!phC!m80c^XSfdwh zn|W5Z)lQJ&Ba>3>hj_|P7I4CPbS-(8|=9INJfLejgf+4klu!-W`a89^DIR6G}kT{!fGuC`tl_iY39d>4H! zj4D)$94beVx2e2N2aCDCoVdF- z9?(=u_M%f4Y^0T}5YFs`fKn|>GrB4gO^8vtNKd8_-xrTtql2@skQ<~5kYmR(7y z2EP=tftcQ?vM~lvOi45>OCSZwSHLlmsb#~OJNTY90n&MDHiqgOF&Zv9GLeH=JBP@$ z0yi2pW5t}}jA?1?5UFns=*u1zQI6l?##n}Qk41jN$WFyFU$wgKU&f$I;nF zJv6G?Sv1xcS~j{*?ZVob?^eh2w|TVCwG~qY5U%Ls>YF`aCZ2a=If}e+(dwncjv-UB zvOwYjNX60k(3h*A#UgvwN+3*Yn+K9z>+9eRg0=wg@DA7EXQA<1sakSx{+h7@rxz~V z=;?YZk4mz11WIO4n{4E$o4YEtbAS9eOdM1kYV>jBEtraac^!`=Du~T zS~xed>;wGsZ9J&RzJQHCOsjf>lQsB7P@JPAWn5QQCqvTdR?M+@hmJ}(N?BNMY7O!S zU5)GAtg^2I3>y)0!ZqMyt( z%6zgip~k?Bra@bk1qBeAT$^vb{@4pMkSz@rh_OjTAhX>35-lIEh1X7jF?0U6@t8iv zX-GfZuMIq*%LI$N{Zfw-J802Jz(cEFTGyW9yg8aP-rVJnDhr zN2Z3B{fHJsBT7|K2K}tT3ujO$4lRu;oSMwagnB0gLOGo32Lxdkh*_{E&G$xWao78y#&Z;In0kk*S zK9}9-oD3!C){yTI^MprADV!=~QhhQR1Ss zciy>H-GE6i92XvC)hUGK7t7AoL*UI)7IHTfsu2SsdEof zC=DiHn~N6jBPUN`%6X!}eFbFIkr~IWo0m9Skb!z6{c`ww!;v1qR)Sp+1*{=)Q1?ZQ z$hcV_8AJQd{Z>by`9W9zzuP<(`LmnyV~}Cl3p6sV*K|Xa@p!SP!(0ui7+PBeTWHmo zso_?3g|J#C&z=6ZVa3_58V;(f71sN5B26)j1A$pR%@M|Lc<3-`(rhCt2%NT^HR@f* z+5&}8YsuX8cm>Tfq=tq>*CziGgw26qRFwx5k?zHeL8hBL$_s-0uUzMeBwl2*pc}P} z&4A2yJ{{rwT^72vBOe`?Z!SYAqB@WQNZom#AeM?sw*m#a8ib}oTx-EvXF@r2?9#dW zs&2p-s+S01L83RfqpdVfBd%smj)7vty6qmr^*B0uhM4b`c~I%C zcSOgo{8!K$`^^*wgm)U#J#Xo(O2N>804Cwg2otgmc15lfdNw}uMCvx|e@JnwbttA+ z7{LxGaEH#)4j53j-V(KaD@JOv2GEbNK$>}yiU?xVuJbxztIB9ZU;LX!;LoH*$bhwazs6?JyPkPHN?lRlLsK&=)%Sfi*;0;R% zKyjao;xw##wAtX*jG#v5-HGD1O5b!+z*-at`3><<2PcTJwTW=}A8H}P`1H)+S@A%& zzk=L%ROf@=hmpIh! zGmqrLk%)3|0N(9qu{KzXF&l1nno}>uF!kDv+bY8fOD*EEOJK8|EE-l0eqtmJe1IzE zM9L+?VgZWZ`}C{B8DCH*re3~IXKUp}lq_$X!jqHu8wcz*(a?9II)Pej4-Bmjdc;et zAX%f%L@BdNY(Q9YzB0M4)+*U^XvX1XOv?+-##1a_fg{t(5G}ZJ9_e4``j;>?1cXCE z64OZKS^C_8Wf;?xaZ4$isRVz7LgcEQ{Z1BP$jnu6aMz>+1k*Fs$W7?0R%&_ug|Yl$ zF?cV&s*ar#_zRtbyGf`nw>K~w&->6&fL!uIz=Sb6r~EV9c|AF9+vn_A4ykuI z4D?pqh%lhtA&3Cc=z1Dn>+xNwvDZ7<$seRh3ayKIA>A6pH+0l1xo4keJbj~d*3P>F z%f0w%UN!?zAruedWw;;?ONop_Z~F;q2_QZCc1J-;}uA2AR2AJ-`&JcHY^bccT~AGYA@_1cnI)EAmk%wX2wf> z6eET}N2#1M^%>?KkE*54Su0Gh@+Oqii~IS}tSK=|H$*FY&;xrtgRZ7^v+cmV;^5^0 z10MxNu{u4efU?e)a#n|*kx8tP<3-x!D=#q6^~+fYgEn?PjsByX+|}R4*VD zy(7V-lbJ6D6{-%74>@O4U@ZL#gQ!}Ey>o(CL;fO4dvWh2qxQzRn#Pa%ns;)mhbxP6 z4lP6>uR5Inq=6D z4<0jo)uFqr-f)mFq-2ZGadmrn>th+r>VZ=cngK+lkoN+?I10Fi31U;2ccAG8{pB&T z$Zaj}wzH-0ybaEpV=Rt5%AdGVI$3i@B+AwLYzC?DOvAOs`Iq5#{rv=H9Jc?6tK001x1z zrD9V^O6ATPW4TUYHkwQfc+<@O3!hj_vsUDyy%c!*H?u1?SCx~qhsufj&D-bOIUz3x z2=<(30S>CQ4+G?wELOmlMops9!MU8I{#+uJ$8aga()itDmodZ(%DC{VM}aFDvf7Gq z8iK!+&fAoPu|xSk(dY=5b^=_!$M}$Z6PgkLsvxpg-LD3(&qk$pTk2AEV*HK))qsR` z>_*n^!aGBMe8=M5cN)+4^xQwFl%yIh$gpmJHtI_o5ur&MT<>0|mKrX>Q<>zodyNN}VfXc9(@87L zY)=p+Y4^V>E^l6;hQW{b|u}km#TJ2_W9=UGb{g>OurqS zQD^~?*@)Q10fgOXuD#cT6`rR)qz-UCg<8zC1)+~ctPMQwB&r(H0f*ze-eb6Z>e%2W z(8ycm`QIOK;exwv^OVfj)Ds-o1g|Jj7f@jYX^^HeUmxy%3qPGVy`R1?pvk6nQC@+h z#1I?Z{cgRyu_vbvJ9H@lvT7@9^Lw3hu5w#hbo-v)^ZKwnH7RJe2&us`i*319I-!}# zgQz{A;jy3GBR1H_!TvBR_51}Y@L5b%u9}XC?Y@Rn#F{N zyR`Qk-ddvA6*dsx8r&|F+F#L<>Iu-C^X*YX#(nq)h4FFFcRTfFh$peDL_20ghr~PY zO%LWpokK8Tg5y-hHaSRK*dy<`+Q>yWcK$>)|DS zbD*YZFS=5D(p8XJol_a&Us^6P+D(%^stl+Uthf!SxkGi=Q36TIVfM!ZjNB9=y)~?D zCtdu2oNtYrGU=1C7x5Y+$iZ-?>lI#*JxFd(ONZ`T$35v~Mn+d}%A2-fK0)u|%^-Hi zZ9TJCcXf30qjKe*AXdvYp-4w|3KZf1Kl^7|5+JO1+(k|jR2AA)s+4GqT)U0=%yixj znyAkcYsm2#P}HgSg6&;dn19;9(A1Jth<8bB(KjmjkVF-x9hSxdg9M;_eMvvZjiQ3+ zl8@+kRsjS|uK5#2$VQ(5QNMatmPIS2!EgNkpie^V-(te^N1c??rPZ^cRgz+Zuq{a4okgwE;2-Ut{@A{aGP|l8c|6Itbkq>^L!9AcJq>+g$dd zfixJSrR1(3t%(n4j!|U*aON!nQfp1tGR0{Eccz$)*%(9b*QN2Eo`Ek*&x({o0w%j^ zcg{Uou)FVDi4%HbvwBY%Rd6?XVelOLcv+KNJIgaCcMwi?u&|C^6MJg_YQSqDT7Xm# zRKRWh&_@WuJ^0rNBsD@o~Sn%3Xs$dnFLc{rr7VGx86w#8v( z&01(qjJNCIacI5#7QwQH&8zPY!=pAy7Vc#_S4pfL$&0ZJjlQ>b@Vu$_&AJ=Nzg9I9O{eXv@9QaK3v3 z;Zb6|zWZqv7}xa9&pK?7^?y7;nTOq}nc(P8J3nD_=vKWS;bk2Zy>9h{b1)l5Fu`i^ zErgu3nF`S9sh#(I0sIAjp2$2VBs=iS%bZs0rFGpHauv~$xp$6|Aaus-^sr9beNBBA zNQ1Mb;k;mNu#TxCQosp4^U<;=+U;VJcOoC|TQ{RooA@FCm{b&wzyc70_Umu0vn#yt z5QxdUxRQy*QNpHE!3?*)R4YPbL|vb}VZMfAuLjeg4*p%)JHylDwwXxIg4N0H`()tT zooR9(bF1h>(|k(5PB;sfEZ0wp!xMV7x3C9a7u6yWtsH%_!zbzfc=PwO zc(Va+7YMohe0lnvw%5HJ6o_*ILzj-+m7Et#m@>ssL*%P_HW~94$e!hvmpOwlme4(R zY(o5VJUp<6Z-lx7%!bJc4o|wE?18##o2 zEl(V$^CIix^IdB>5+|ZrE+G|<7OY69qCR8g)mNkcx8m}u@+)XOfEp>%&7Df^4%7oB z`#cP*2%r(nXRNxI_WQ2DnKB$r^n;V}?k!nfYd6+l;s{%MDZ zabN~+uHsdv8quXZJHi;Dj`vq+i7Q;B<`p7R-7+v&V@%Ix!yms*5b+d&wY+f2mF zT3C`5Ib8TDPPcLW7S?~zR{@;!*D&1~W30x38`BYsmhgV+Sr@8J2=!AquT5BOM?Rnr z>*GZqfoV+xevF9v)`sk!^GHAi8SS<^EjJ-&jfP5>{tuxrI^g}Fm|8Gf$N`arXvZ1= z!9A~V1$&9$Zy%YKTFLMc^K*~MTp5o|mSnUuW^K<8AokJ7y|V8D4R@e_t?6m=sRwED z;Udc9bX{g*Qd!-OGACai2shvYNiA;nF3gR=^xwu|aWl%wm|ZKBW|yD2$Gfw_zM9Pl zO8BGrmXQ2TAPZgg(0xtTcI>v-m&~+uWSK(PW)pta1>xpGmVZIZMx|6e3l2ib_*;`o zi_d;zPYDtxI=v!YcEDM-7zmO0+8xOgXF-$|Q^=LUUgo$=UJu)+^zj)Ci}TVTxkdz# z9j%>Oc7do1wMK)N+#q0M=WfL8)M$7*0=3$p`1LXN^QkC)uq=~gDYSe^Q?_{oK4z7R ztZm_C0zc1>u02x1pdWD`=BqXYBepjT&QXSocdhG@ir~O?F9lgVR9bx1*>WNeMuzOU zndYYj@LZS5kN#r60^-t1J7RN<{Vs$R9?*Qw8??|>GWE%CnRyOs&6a2G(rIgpMjt4% z*#XKcUgzj|2ECAv9O=U@&o0Lkz%gC{C`QE-^9KBL^|2R>NvCB*uRLE8%s;M zp9KeBN-X|rV3Nzi8l@arkEa?+UPj29sKU^|_{e*zS+8ZYFf)Jk0v9 z?$2ZF0@R6w%zO-dvURKsb8AIH+W7E~PFI*|0kh>oFC@3c zaoM?zS|?X)1T-N25%}evGW@D18#5r+awmj%$$ug$RvzEaez=y!*}_U{s7y{%THhtD zT*{+6THtZN;*?T*?}Kv(Z3B)F*jF|8X2DW)H75a?f*RH5G*x_Ix^*$h1m!StZ z6q*L3^ovjijg`+r`33H5OGq5+ADZca-62HwZQ6>Bs+Ur)6dh=gW8C^+!@RcwOjb*F zm(W_#w~-x(avvh7dI&S?Vz0cd1*LmJ1InI&U~w|OW|@LLo!53(BvFSY^TS6t%q#4w z0GK-vp`l3<`MQ6#XFYmFN@Lgb^{BB1M8whfuW2I#B`e39pw=L?$HGzc!U*BLt%nV!#{K^ksoIQqmWi0{GO z`8z0d??t3M$d0rwvyxLPbMSXGA@2lXfCN%dEPR&;~d!nI=+>EsktqLjEX zL=qXby*2=4KB8Z2Zs^zP)Z`-*G|EMcwii8oc9esvnA|`+2*Qo@31X4MT!b2g8|D7Z zV{S3m1%rICu=bOHT@E@b9BAS3@>%HR^ao3+%bU4TC1_U|SyjBgig=EpfcObe6x4T> z7nCFMW7E>Md54vVs6|e(w>JuJ{9esu9`*#O#x}`hs?B9<^f#BLwt%NIy$AtJME(E0 z2K#8{s~*HIh`GbpW9O;CBlsRNz@_3^HqGki{ko$WP~E-sRauJBp`Q^1HgqZYZVZed zPhQ7)o0yi`M+eBkAwsx+VsZ>4RD z%MTrW@65{TV)1*<;P`|N!a)@ve(IRBayJF?;2wfEV8_1!00(+7Ly${b0E3_)Q2>3y zB!(TL4VCuh9ua;NR{mpyPir4Do%dT=8sq7q))do?%0HlW7zSIEMNSU=U>AX>hpR1w zF%HlBHKxsb?-)2I)#cV|Z9(MZ#UzdXYy{tc>X2*>@C5=M%GmIUbHQ_V0jA;`(2~%A zCZT}`9j{QG85t<8Fx$g6r8KRwMwRw(uIo+L6b;(vK{_&a*8>#KoVoaO%YsPDXqOx)M2T9tD zA&+kWt?io+Uedn?X1u(^goUGd1@Q-g`*Ifnq6go44fg9X$eo>6*K`7=S!PsZJ=GW6 z`jz1#2lv@%4B5JLSV7QVKxSZL$%O-qmMGjLr;|8etPJgtxpo((5)*iaDI4qhpfpv8 z^OV&URR$$;kdEoIerqn)F$X?)`;-st&!FOSFDlFU0iOj*Ah@i)&S*tYhV7w=VXI%*NcAYOt0^xAD4g5$<#`&~En<+yUvvdHuNqw6Kyu2z zjycPw3Ik(LCCb$xpi0n;)a28skm)f>QXA&wQjjpm$ZhRC-lXxFD}4IVBDER~=OoAM zSmgJ^3Lsft-j(Y10AAkS=}RAL+nf`>Q&wrgR=L7dijGr7A*zbbcsx}W18UMW7%578 ztWRv#;KgaDqO01gWJ8NzCWNV~v*W1vwBw8*R%EIOI%~EUCd>9S`YW&mjfKr@jGz0> ztk<-?0XNVkdanYGDVQ$g+`cTCe*4CF3=(5+pB%L6*5`M%V{DVbIc|zU>`Tpyn_x`N z&s_DwtkCbRJO;cidHBb%b&X4z5QoIs%@VOx8bUECTUO$)%C{IAWvo8h@~%a*lT{(J zRp$^0WoY4I<~+q6fujaPoRKY({d;d2a2sjK{F!6gsVAfCO<{Y`8EIF>q*$O#sjMM=XHe z4G#ImQf%_x$+9Pw(MP>NTAd`e^7ttw?K+%YJaDxvENFbZsyw(~RuR%B#%nWlXhWMRomUJX0RcSjZXOugj(dd2L8$dGgZLVBT;zefM!1wVx(rI18 z>93N*_MVRS1^DXp^SEy@@i;bbqq@Jtjq~v94Mn*s<7Fx3V!#@~j@GrT4sqh>!EA{n zUaM1b-PsE`7Ag2So1mmyVosKNtRQniLZcQ&g2kah&$to23t)jB_yiD81$BzhaBROzf;YlRO}kcQVyCa7a^h$ZjCU4)d-!R_NnP zt^B6-kOdNs1WHbs!U^MU#NQ!Vyd%NY$Pa~$x3JXGL&Mgq1!4RPHb)Q3mzC^Itup07 zjbKh9%XXD5$cdPZ0;k?Zk_NCi21-U9#V0#^US#`gT_KABbIU2KU4O8-7_^+mwhG3? zgAUHa2iDJGVWV?NmYf%g4d3vkx`XMhtv^ig%%vZ#f_g8wm;*u)2+F?1|c7FeVec`!r1T4g)5^Da+GkxB$jR2sST!8O7dw zA0gkQk3oa$7rE3|8LOSf;(C`?Ic&-s;F6=nByqI`vl;7p3NZobggano;i9tR>cKBU ztE$I@o-5e6u9TM!Hjvu65*Y;}EDM=8QX&mdqk+wts^A|ssXNd|zT^hOZon>s%IyYD za{Hhi*r@Ac0j7RHL%F}Kkq3Rj%>W}xIgiO~f2hLwSN+)F%C!$%3T`}<=o8mNc{Pc{ z8`TuSi~AbsH|u<5yc&BBIj=j_jVcq){SCGpOyIlG*{&_HkPl*)$R=}DZWL=y0TA<6 zVuDWZ(&#Pwd9ycOJd8{>ncEU=&nc)q?D|4q@xYfTyRd{cQzt?m^$2Y5l?}4;zQdQf06 zhmex<(+kc&Xr-J^+UBJ5CSCU6b&bXaR39@z;!kg{r3bh2)roL1r7i#y+PR}-@t1nM zck(2AAKc)NDOYW?;Jz&E6PftWS~_4|28_nx-1ze$S{7I&liWY+k2QoJ&rAP$Es9N? zODLNFHhtwco{qpH0bRjX;FmH0tQBNtCN*`Ap%vVB@j`fkr7|EMe5$*QeVGKzy@?Rf z<$^$g2Z59Uo=WuzXUc@e{mz!;NEZ6LZM~Tai!1U_%Q773IJrsFvt(u^2ojBUhP|$H zR?0Z&Gl>&*@|~}7C)%)w9i_#dEWWs8c)4f-LdO^r%D}Q=l0s7k)s?{aDJk->dK2xR zi1n~mY8|gptnjdotN9KYQiS7RzdV^ZN3$sPV2{{JM|~&4#TWPUv_W-O4}Tz*7qE2D z)J={#zWS=1$*t01N!;k@OzAnT<7eO(w&y9VZ0X{96Gw3BT_Nq<&Hda+EWg**cn4@( zF$9QT>*dux+T_E?{IZtYdTNefYUW|eyWlnhn3E3<5-CdHK2pbleREzgHRN{y15q^TaoiR+`N6`bqc1D*32wRPP{ zB@b+_0+)K~7$41%xLTVe3vD`(0j$oq*@i;eDt{>psgkAMNjrem@?jcymz%I5^DeD=U-OqiP>h+UVoBS(e$ zsKOYQ&?cudIi57*=70`4gqLA^3uKaf95>)~U{sV`9HaYSX>d?x5eh&rOy6t@h3I}| z8>(#^gyQ+hqO~DOPW5>MB6cH)R#42tfg`6x3d7pRPTxtus$X9|Barq{LURRx_4J zI)X+g7X`u)!|p|a#21J9OfCt5p0~%jGoT2)dVRIS=F66)7s755xhJ-hczO!x`ZO4o zva;z%zPPanL92MFK_Qk+mpQGidhTFnM0bMzBOHIGjV14tEx5GaZ43d30UD)wxN-w1 z2;W(5oR`}S8G_pF0A9JREp<6k8(Yc=Dr6K0L3Iy^GQGLzmNidnLKXPdV+DrH=19^` zo21-w8Gu6Z-gfpCXlIS!rUIdGD87{dB@M(|glLj5U^X;8Oh+qcGsqZ6PNf+Drkv(0 z#*x}DoE;lCaZ_9}nr^PwBi7PVb-#QxAs-=1L`+;7M{cmMsd;2;whv52HmH>iB!#S) z3+`!F*9^|_m~SfXMh=6Ub19)y5-WUU!Zrm>+-GB}3WD+nP4&#(bLcnPF0>DjILBO~ z4Avo33;3$p`%tKAg;7P(N5T=Q(Y^DcC0W(Eap582fmk>6T?#<0k0cP$!q!a>vzd(@ zmiI3r=q=6{#pbDe4{0SZ@Mp7^-GlH(yGx2NMrwyBLK!3x_A`16GTaCqJ$L4Uci)yz z7L+344qF_m@*uJm29D=q!{R`~8-;nmIXe-PSq0@H3%5d=Ro#6l2t&FY!Vs@lXR3b^ zMyALbj^0DwdB#{lSlxQh0`RJ2ZVxV+O*5vK!lL)q!9vCxl@=NZFhlW=kC|DPo%X?| zqkEW9c&8UmX>f7#fMw1c>8?%cxiW5%!d`LpJ_z!+ngx-<`zYp{u%)6jb7UD>S+Bgj zg{>vSgVA^+pL*n`^6CyaQP-$9_q(D9-S^5)n>z-Y@@D2* zNAd}RR0Z3^*{Yty#U&oAnyF;ypc#(C0nH(`)5Ur3H@Y&iYoqBnY38}r#D=z{;K6XC z)-1Pd$h|?lqaF0S-dKX<4uuvFG}V@)%du7xhF+6Gxy)Yxt7-L}HvItE+gy17B+Yr+ zPGr=j@PsUaVjroGIjBOphOT!T_4@R^Rw-|^{aTn}wkuM2O+l`xSo>1>)ETWb zBky>0EC9!+9nzZGV12Sh@_>gB4@R8D=`&GVZC-V{TOpm@bcb|U`szp~ccXT2Ov&6= zCJD4IDqh;})P!DmlB(duxcF)Un8#kKW~W!%cT+!D{5hXU6@Ds}9Xo^e9o*O+eunAF zx|;7MGwYp}IEDdpzKVg``li2o=DE|np3S)HQDv|iUUh6fOZ_$wY=Go(5@Ezd^o(@0 zNES*+#nYvaNO4=&%c$tMS5Qz-Qtj7=Utj>#d}~3xD{o!O0mTo3_6b-nOG{Uo`A_`w z6NxnUMw+v5hwzb;tmZ?;!WmcGz;Xd7!OGc;pPQgOhKc2Lwv=TCeJ*r27H)Mc-RqTssrd4;9@9{RR@~+VXEc)4 z#%H2qe*!w|hXBi4?R2So(;A@*XZxxxA<+pMzHQHjv4Ui(z5*mG5;0uzi+>lx3<<*p z;z7Bg!vG^9;^EY+)z^L8cFmzAWo_9h!I8hRj6tp4Pi;Vf5UU%2N|o?YNs*AZFVyQSJ^B_fcrc@%wu;2fhrkG za=TXtlA!biaYf|>Q_gD;&1t8Z%cgG6TPkPnOV~aZt0nz_yG*}l&)*=DbQ7?K5Ed(p z8cjk}<6&L!Hy>KEM+xDsF%TW@(+@n{;90hn9Ds92pae7FJwmL6sj!ajdP?ov7F`4G z1ll?I&?4ugUTTsD8kI<_;bTHY9p&&)m~Fq;!B`@Dn!HgEouwpgI6`m3Bv@HIIkjn$ z6A(KOW-p%qq(L{Knx>>KE6@y@%VcY)BUW(&O1Y=p<#AJV+qLB@cj;qSaB31bN%OkP zsC^~@o~YlvTCi|;0S71ss%~y!n4QzH1_(=v$4=%^-jjWmdQ8~TIvMP95qRXsky@k# zdN-bkrEq3mAscQI2Y1A`%w1T}9Y@gMHuV%}qNE@=IPGVeuwDw|1v*$cgUH|_m4H0G zM5wjkB;RdY@dMu>Qh!#i&M2mvmJt2O+cF)2t@C0IxUjzPF!<)AnhFMG2Y57jIu8UA@z$ zCZ<8pzXk;fKvAz2^7Xr;R~J`UO!!L=bIOm)T6<}ooZv)HJ(0b#n%}QA;|NyPd6h)a zA{&&tRCXgglL1G;%`X92xK#WF7c*HIuDj(0r{C9|8Vc#(#V9#w=qMzy!i5TL2COw^ zj}-+w&=8i{AYz#gVDBtvb^e*l^0UBx<4zJ-eZRizTxO;Bu?YV0(BrNPCDg`;-#|V> zzpp_RcIGbSoj0oM1bDwz*2o*0!gC>1;lyk5q_Vr(lyos@q4|b$pZNtjv~JG1m<>+j z=CzHEZzUZ0Nb_NU%J3uk%b?f^7IS;8sE>}KdLbK8Ry(B7z*yl#@}Y+8tzi2}ilf#m zkkeNoWwy>oBzaI|l;_r4tHYA)1C`H3mNkgm$7x-nLtx+PQ!ZNix{dBER;htwmu0pt zRFO(PjNlDat*xb=jx}WNqJj`^B4m9I-rMskqk$KdsIt+xM%W7DuQ$%3n-B@^5lY1+ zD-7l&aiH%`SbasMG0ACg_n5Uw7d88S2w_xRDkfGOe|q^o_c3#Dara$W*P)DwvF6QV zHN=P^BzagB855wDK`{25N*V*vmM*nkZP@_PE%-?o%vV|hoYN0WDvw++!E=XmZ zHMi5i-~fO5JpN&bf4~{Qw&)fh3;oSU4o-1lhh+o2Ki~O8!(A~DbwY7=UPZ+ z!7jFT*3yP3*Y15po&3}+hj5#*L<1y#9`fI_Svk!8$i(f93dc&H@VP~Q@(N7^Tp~^Y z`jG69%d?wI_davlv|ycIOH)9^njD`!qYy2`%8PF$`uw4jleZwMwiPTzB1 z4J9|R1@XOu5G9kf-BFdGLuL+9sR zIaeoq(e6n6>C}=PPM(dSgUVEroqQNlLJU+f4Lh& zzFis92IA?0+?!=Jq|Siwu`TXkq#8#8{`w`J-4VF;CG^CX4kIH_*J$RK1Q_zLfjx7N zG)fs;w{}alm%x5nvNY0B%&kO#lV?Vwy5~|s zQum?Yac|0}S~Or^3tc-6BPxaD&Q4i z#6$jkv(rI7ARo{e)Wl{`{?Sd=KbR;Z6uuzgFZAE;47$E0P#=jrZT3>j2c>Pyj1Dbc zl>|ChtP*ujJ1}pg4_d8L*)P2A&-GFepf?g}V556dQ6Tu*BC>jHbLr$x(FmN{AzyXn zClA7alRPhPT9BilG>CU0ZS$$Mc556YYu16|l!AtS_e*H@1+T7KWx!Bj`o7bgz>1_9 zwl?!QAU_#}-Ts)#p*FYz`z-~=w4}($b900XfE4HPf;y{<1P@0}JB>hg&&(10=E{@e z*`q>4T6qj`abQkX&0;H1t#!`U%|~IZMXKsSIqduHj{I<8E+GFw3gO(2r-Oq7L-OW# zbB}oBTz$TCsj^;106p3X0-E~{e+1_4ZCt_Orh`imo)1i44|+3Yd}k5(LgZe9>U@Ge zZ1M64pY7c4n+v9mNy@L6N8LcnEIZc>74-rcfgq8x^Po@s(UeFH0%wF1x1ezn4mLwF z@3;x2HG}=Z>q!Dn5!4C~{2jId(n%AZRfWVjcSGer5@q9gUJm9+1TP@4F@c_SPA79s ztYnEGy~xd6J6E-li`6gJ&Q1z+?)IQ5Ebtu#Y4IdoP?vZ-@g>jC#tk z8DtbUU-(TGhlR>2b3Zqpg^6YST{&a6jY1T4f z(7s~(<|m6km3AgWl!R~G{O3T2O1lsRLYn^X$!d@54D(suXJxXNlz_Wgm&+4sM&QaG z^DscZbD?myc1}k&(*)LjI*e&o##U);&~6O&rm`GVu#C<<1@3JWhGC7$IY^H-ufeL~ z!ZvUUOCec!@6rX7Q0ULxUiFcz?GOss=W+e!G5RW5Yf#6L0(4*VV z_J`R%yUn)2+EHm^R$4ux0;|POIvUSHE3%0*FLd1ecy!(Rcp<&B_8CB?O9?)RvqqtE zt1hG2a-2lLDyQWk9=~3pRB?j}Z{A@5Q-P2g8;Ygv4s$n@VR@;WPY$OHKWIeW2~Bb_ zfH~$N2!*+l&@#t4`(_VKv?0PT{zO@v=^& zQKD|lsf}Mj=Q`%_ZBY?w5oB9qcuSj!(mV+$()}m`kFpVGJvopO?Dod*o)C4iKFNX% z;5>>s=+q6UuvR&~Iejti;I`cuTsJOmHSvoI8cg7sIH@II4_U6K-Bb4VzQ9P3qh_oD zqpDC+qdC`RrvuZ5mb}*XXBDXg zUN~=$bgIxf)Jm_I3t96<`D|qIlmf)^je^X`o$3ISz%N3GCooV2jM-`X_}uM!~o^>x|$r;=5RnH&qzhY`e6SLL6?9*5@3! z*xBFP&;m!Yv)gTs_J~^M>=r%nE`bIDZ%Zw&_+$iH0s&XUVSRpMD|6d(o9Q%<0POm@ zavcR-u-tXc0B}jrB0F{AO}{XGF7Z;dx;(` zhsm^E=rVUY1tjwX0omB2dzHl@$=D_Fo2CDEZm~C}SX5{@S63Dh5G_dQ7Ys&gaw~k* zegh#@6Aki92l)ld1Hs~b7Jgu7O>76mAg*B$-$aw>tsf5}R?x)duzg}$JLZ06wgZv~IQ4dxLW(@uG{SKmRJ zdBOiZmiO-XxUX*^u_)MxZA7cwEJiE3cDZFC%q2E!ZAHPVomSRbNw1Y)76rs=Vg^wUWqQHHWnsJ<(sw*u&<>`Q^d<>AStklbbkV0u?$>K3ff>Z@YWsbN+dR&qn( zlv@!$`_Rs*~$~|pHnNDq$eei zx@qaO=Zga+{g?JA4T1=_Ef+2&wYr)FwIB2;?j^4h#Rmf6c*aa^3Sb< zF?nL~A4q+Y#Kx=D_@_Cw|1wh;fjXd}d!too%U^OcGs8Y0|`dH%-Z0{Vj`78i}-0QS* zW}iC&aIvaImH-Bp$BJhYP#-c!kM3O#*8Q>1rZ7jUd7)h=&$vGror~a7-bj zfR>qM@_mNKQ$rc|@YuS2JP&G;tQ+Nx+LL3(yJm7;fYrkAHOP#@e(umn3JdXuRpL%c zO%gFW2vE&Bb>J1Ls&R12W(V-jwSRNTyNCm)y!1*DVW~mI_>qbYD?@{dV6jWIN6Yu~ z=tcT~eNFH!#^OTBDX-lDUxEjkKVwqwF>_%P)a{J!#sf02sxZw8bNdMvHwd@0Ez9<4 zld%rMaSUto#Wo|nCR=sp3*=lBU!C5*8Cb3Jn7ZlKx~(3!}+^_K20~oaS^|{1Q>y=(6I=F?ciah3`UmzU^!`k;Z_LODMPMwC&=UEWMZop>c zrq;2u^ij4B@!HW>HFRC#Pm>-qB6V9M00fcx+)*9Jb_u!K$;FIuo|i%V_Q5b{%JS^j?r9 z@$KsTs*dkAA#z=U)E!?aJE$vb3_J|$4SFzVPJ(fzmJZ>xXe$q(d2DN@bgO1R{0UV2 zmZgPUYtisEFL6n?O~rqP6pXVwCWv9y3JJn#9HxTra*vCs^-i-Ici*fDH@GInSZ4nq zjRC28g4bT;O6D!l&AWm;Ccc=?n}&#l8m}`}4lz+t)g3*$KY=bkd6@My=K3HZvR|3; zRPDxys#J;tzB>doRvX0Z0?1dDy9~5DwK!ONIkAPX7`DN6${I9j(!mr)+Mcp&GhHgU zbfu>7P1K!KpDug5iEACRxBtd%3czo-O_Mu@F*(~|jjGVev4f1l982ygjbiTLv-U-V z>%N-^OlK`hQ1k-8UUNw6>q>3j@gb`3wIR+DKillwGHn!TrAL|1N!Tx3y0s1jvNIw% zT7#w3!;MW@T_~y6YFufUAOf~uAi82)??{Fbw)KwgkT5;<#WShSrVw($$~X!YL-wxC zxYUVON~bS=yQ1LjiMPq-inE?QU~rfwsSL%6ch{k6;HZ!LHO%c@-xqshtS)aXPm?Tf zU;H>|^C3bz-MRLhQ15#Rhb;vRy4{^p5fA89^@P!?b1a$EUe}nlyA_{=?_dZrb4dRA z&a8b8HtR^~*X8>PUUqCUrO6orTSFx{*%2y=xPUtay-YreRT>GSLrO9~(B^;5%o#g?0T@t!fWUJSW(P0yuUAE@bM&eJCeBEJke= z=Z$mKvm*k4*ZLdz1-`R5X>~%&iki>6F7@ofDX8J?>exX+7$g^nIyHUyxt-BWug7o4 zEJRGQ>za38;$82CuedUoJ>5>E85NP?4<5oY<$C{IrDyIf&G-#Z(ZEJE!Mjbx_zj4Z zOVgZK#^wtWN@vsFi0aGieTy0INA@~kliIDP9J1S_npue%2Y9SsGV#`kA5iH`(s^0a z3a%9}9sSW3zAQ-!Z%8I=_4_ETQ@Fnm*T|46PVxfM60`$(PbD~rmN^_a%wY?riF=M^ zGt_l!jSqW;?5-775cAFVru>1fOhHGRTn8ixG8tb;@bEn!nSUfECI|uruqJ4ey`iC! zAnIbnrsx6_MqfZEpRK&e7LI0WKjr&KJhrZDQe{IEefq)k{^kqC8&~p@mEd{lIxo!{ zJjnx^_&TBi;+YClg^7WaY;8g#ovL+kBug%1z<_3%EO3FP6v8xdgE=go6el`zI-D$kb~vhnc0GdDS-EdCuR|0)f3wKEfOY07H@^?d<4quGERK#c{sXv&|XRjVo;5 z>j3NBFrx?&4uBE)X3)u<3aE-mcj&>Nc5HG}g zwkQAFkOeP(_Z1b+1H7u)dH$oJ@-D&?j(ZYWzSR;fieKGt)#m(y`Duanh7EEjW)DtH zi`mii4i4vlsM~j+n!FDuAMV=vvdO`HpIdz{jD@V{UHF`jvbaMj{EQ2cW1^1Ps{sm( z7Jgk=uBH#ZbH?Gm)Yn#0bX9+U>JiKT)8*Y-frsTS&Ip#2d>sYDfzVb zlfUr1jDE$Tc^9nTc%R#`v0yFp$I|4Q-`rn5@SX~NkNm}2(cz}PkMo>*AXOf&M^9>j zgLl0k$!$4zFe6G1Y0wuN+U{22l_K5Yr5Q!$X!Hr@_t-4GApLtOvy#^Lj`Gs(I|$B` zC9ij_(pUD(rue?$;n{(s<(0`tC9U=<8aw4<`uLIF+aO5<7Gk#70NpS|APJnZJ<49e z*9xKILNqq(QS_wh2NVw3h@(bP=*Bx6A9ec|RQZYB`HySJktRLIl|Z zu>(zv3s%L~J2jy*t{@C6hxSpK{}1a=9#jr6Msiq+gj(-BZ7W_(^NgT_0DS8*(;c0s>h4xzI`eGW zbsbbiGdCk}&-(~o5iNo5L(J%=ctwboXLbLu%BU2kphNG$uBe!fn4KN5*GDP>JCXt` zxaH(`eal=V=Lzsz?F=|3HH*6!?wlcNt*t=o(Hjvz2Zj08)b9~;7gi`KXF`o{tl~~H z)_cz(Yoh>s%bkoSo`>!S{s<5~@$2x9My^l>+1ZU;?<6X%xN+b-=k`*2c^Lz0YoN^b zZvBu4zt){y6#^!9Gm{tI#BhFW^_Yu`I3K%2-AMFzt=nsV_lO_(BXEB-eOcGI!E>C6 zc_UOf0Pi46yn2WY6NH3YhQ3nKmj;G_gwlWbjFm%mWFQ&2bHQ`GFuAFHY$48K&x3 z?)p=RQ;@p>v2l=zLXg~ct2Jl7c3mL}WL?R*a=HNxzuf4R)j~!H)YV&${XpK)d#~-S z)+c02R8LZ7v1-6GW2w6PKE2$ErZ(@yibV`+hw&bnx$nlPP){SlT({_L$!1cLy?!!k z=#7^pUc%OWLyJrUO8yLN2Nq?e_h=YV}s*IZTI4z9vcHUcibLspLk@= zv*)VgPM*M3R>LTQ?r)bv^+&$kQ^915x6oOxH0THAg^-Q^cZ|V>W8`qXYtWF0X24^J zo2<$zjJgB?kNTiI4sQ_$+(nL(B^eG*=kUr20Rg6tiT)I8?g<43i8FQ-!1m83hUqt+ zwqVglK6CI@l+si=?B8=99cE?a&Y5ps1ME@tMF^>A>g%(!3U=vUu3SF=esNjIfHSvb zURZ(@rpkkSikw!O4q3fjD8}#O$OHfwq+a6&0rHiXqNA?E0&_r$*Wx1lST?1Lj?xxQ(bL7-DQmBEqSAaVn24GJ3(OcKdThKX<#$c!1!5qaF`Uw_{S&Q;*ECz5bMweiO ziD72HW&kTnP=!9uhMQ4&q(dl0h-eI`^16XNz46L-#5B=D52-lxO7T z2SnqHRZAtNrwq6POS_Q1>R!3VAb~CMSf6Ms#=dJJa+ZD1=9Ss+YvP!2SVE3*xP$Gv zm*EDO2t)Sq^J)&{Lu8bR&#I*Fo0PSi8T-C5&tcwt>f7#&+WEAztSt}p{Z^$AYaN0k z!tc{O0FM9llg)>)i<_(&lQ*Q$cB+ydjZMsWp53mFPS1vce2pHI$45N? zQh2*C89&V10?{^i;Q~htD0a$)FlBHc+BOnl(WK-Hr0ZMHL!XqsS#u+^n8_HeT`*>A zR-|Y>40>ZjY0;d4-R9R2rJ=+I?N(uA_sW+O2I=Yi@E09u2IHMFl^4`P31V<9uxkBv z?lI-qB%YXj53N6y7M-5f$}{3*h3!ny8reo0?1z{;!&dOsn6OqHwT(X|tl2ybT~# z3E*TxT$O_X@t^tXDoTvKm4-`jRx-f1TUSir6t*D*wbR?VS|1=M2D7QMFuhZ%esv2E zf2A3MuPa6yr9injWM_+V*Ncf0kF~|IL)&P*vOI$eY7X*O*wNkra8S7a6%lD&?m#$M5aNuWXyVyZ|({2636nC zc&`q2w-g~wLVKKY3vuU zm%=DXR<(!|IX+~i4lojc8O zLz38Gz0Fuuk`!2swUQz`XIdFSE%%Hz>TAB~yaJFU_S>LP5%V-vc)^+qb*XLY?lqXNAaTivH z5Uq+|P#(dT3An1g*JwYxp}TuGYr^}ei8pVtl&wc8?^0QoF}#2e%tHi=ipsG8wk$DS z#+BJ>B`90z@=i~>icFlU)jn3^+NH|VApkGNLwKB%h2B#i<4xRH+nlHWCkWP(?=FSnGPgenKaRL+Ug(jum;!vZ1q9{%3yVuZ~k2 zwpWtz@Izw8$#V#`i7RY-9^jWhIFSb?`{4d-894cDWS`nsq(ytZEE{D7c0^9bW6zH=5v-I!CigdqmvmuegF4o+;TZhSEA~aHe}|N;%7WsaJZG-dUOt^xKK0j zfAs|_{2pCR?=!D|e##$U0H-sT9327=WtLM>#QFf*A2&G;HS2{`z?2PPI!V(rf+6Zf zu)_{yN!lR1L*!|{J0xgXlY3Gt%^B8nX{XEO&zszw5cA_fJ8D)h#5INvC+tB^1jEtD ziTexx!jMLp(}eC*r{QOaB+ww4Vd@y37sh$Db|c@V2VSOWl7v~iaDjI>>T$Me!a7uc zsn5aTt64%WWL*z?ebNT^ac}Jl0t}qa;8mmiLOJ^8l&!!vLt&T&U)gh*8jn*5pw-c| zjym(;7Qc7V-4k>apu`F|EB+x-eioARW`tmba4{wYt3~G+3p5#PQYc~kA!?wc7g^TBrK(} zR0TF4G2W3_C!x7{XE>R=i&w1yoSpNc01}%W_$ix)fFh4+^$nsZuH!VEyp75tF5dw2 z`wh4^l#cf^s+^%$?gB~6#ENT(5*HpsYU=P4x}CHQap)u(-Wd7>IbLE;lYJZ7z#yZ1 zc-AuA+3?1_=Wa3D6N~nO2)FhEd3+3OMc@XCUVO_3f zNz&y=EBlGpUj2*O1_Ocly6zqJY%fBZqtc)-1yqCs7l;LEpHYbm7S5Eis-w8OD;TZ3 zyyJmPtN6_C@Y0ZSGAV|(HCFg0p2bGzO_urDk!R|A$X;V1Zx+N29Hl5e>e+>%4_;)g zor^i)0N&YI0@*j`XfABjd|!BACg;0;G4ag?tRr5UrmuiAV93Py5z+VQ+|Fl-3t;Lf zo}QWY8H5PfjGiI+j>$YNdm&D2DmDb<*Vq>tS1C>Tu?R`U_V$$hO2H=1>aJ^5O5R91 zD;3Eos8HBWM%M&zf(pe^j$;Cz`Up&5#=V|>I)NXu?Ln)}z*3R9)t5%;IhY=>>8GGa z$at0afToSJkJYnRyKnsrH42KU44pJ$!K!a>_f6r(F@`pi*7N2M6L;^$U8xpB^IWM0 zlOgZpTAkcP8Ly70eYd{FckON34(v$w_7PL2Xyp%$DGH0l-JI3{kTjRN+~+FwL@8@T zzs{UP2*WP2^=#Y}F|`At&ow5&ymA5ebxDLrJn%-ga!F)rR+rLTzgQXFTkRh%2@ zhNV;K|(8qe%y7F|YoP3$c8nB*4+CyjIDjsm> zu4jU1h%7h{GwyBAw6uG8Xdf>y$s_gprl1yReX>-75a?#J7b9vWBQesiwHM$y$0%Z!A;M z8etQyG!qEQumd^`E$(YA+sjOT1j@&;i~{=25vLcYm!^k$S~)Urzx9EZ7~Q>z8#_0A zvRD?nX4vVpPPj41ICek* zuKgB6o8j7oi0IF!@vb#S1sBcJyiV?o%Qv^1WA`>sG69>q*XVxik!cEM5DvYE zvox`i!G5c#4t_sNjUZabYmGDQg$;xC*CIyF?(-x0I9-BB)=bSLkQ@@Czm)bC3gwd1sRr@T*Pa0-9*;(oAT zTBMqgg(xIbqIA_jPS^P`)j)c_8@w>Ifs0bob`+C`A;#Dx!3ay0F_y ze_d2z$LqlLt|v>OnfKBy2Vbbefkt(<@?IL##qC=7#}P-Tz=POK39_+d-vF%UIXTMV z6kqUOo!sU+?`j2JM)%LIQ%h5J8VI9_O)yI;Y@ZmBt`~y33^gaP8k-K{cJdNhuNAU_ z2}Z7k9_xVC*71t5lqlNiDFELtO_hU;rx>nWJA}s{wJLegb%t%t*IR)F|3>#ZiiQgc zBIPheYR%Y@tAi8ZJqf&2gN+3oQQX{ojl|4uk=y&p95YwK)$oRc?D)C%IU5GeAMdy)g)R3mZ~`Z$`QBo81KU~8vV z$y8zC`+esfQk(Udi9MCQ%=2JLLC|t7Y~*9Jgdk-W!%v&68JD>L41<+H?su1fU0=sx z8L0=lbS@Ph)*VmcE=t|e^<1k@#m9ATF&;j2es9s+ns+t*QXFW|L`G~{w6s?kab=r< zv`ahmF=N8HHV406uxZa%zy${-YOe^(2=t(8~j$KF-BSdZ_7~+ z&P8h~8LL68ZZe_;B@o3f$@dQY=UKPTTe_{yzo|VIGYVpWgic>N#V3r3TP{4eh!x3F ztX+l?eKh(oZxeZd7jt)oip+C!xYb)Omjupl3PtF$cER|m17qYIZvd>`Ij|yRV&_0c zSYQ%yO=gs`&!ld5r(?6`bJSKXjA?6ej_Y!ZcHcyTd9gxGd({q|DiS zF&W{A(LpxwiwN0*o6Q&x9plJ{*={)2L%f2WG8GaETolarsmx42O@lh^KreJ!kKHY> zb%6mZJ9w!U^prH1qzRAJWrH~`PDku=UdM~&lWb-@!)>)ZzR4sNvS9JG%jVGpANylD z@P;FgitPN9GiQDK*v=}wh9ZGu#j=t(0f0*U?o?d5H5zGYgLFU{!fO>qED2!R7)x&n zaGiBhRZZuSSxea90n*@s&ptL@fX+v`@_&5&`Y!FfKj^S=u3BXdbZ4c`vh+0MwF5_s zz^m%eP>%4NB~g+!zHvLUlxz?6j(3>5YXeSs!pR@37*q!NBLF{Z!|JZBUclXBv;0G% zLnijdXguZV@f7CASet;hHxH^a1;~Q-M>Wno)G6FSCtSC&Su6BTwm|LhECEq)4tvLF-@+K0F_UgUuC)Kw z3l7vblJS|hZL-ztAjw|zYn@Tp2y>2`Dfd{k*6IJX7b}YhiIYRz;=ZBc=2= z(13vyy1(7j|IdlP&qYnK#70SGS8%LX?}cX%2+eu0Dz}0M!*5rBAxKh6sY+u8iG;5A z(izZ**yAO?0@|(2n`*nHlr8<#)8{(iW0kSQ?dOq@o$&Lf#N%$r$`_|KmKu4nX)F>0 zX>^X0J6aL3hVN|FSwU#%ya+t#lVBw}z%cnquaSFmDSSk+*|k!?-j#p&C@ghs-Urkh zX=cn6oTw3@JfSbqcr;TUE*tC>I^dV0g3LX^6qZ~u4>jm%OqUrQ*62EJ#ikr{ydX2_ zrCW~MOkt*Wx>RPM{C?|eiFC&r%S3q8MZ|7o42H|V0T2ViA2ZGc?Pcv4rJf;uhIF~q z)5mFQ$efp0zp*-7sW9Y+Bl_H5&xYAn&6rEi1qrrADgBPWxb6nPaPn|wy$8BB+QD4wA6~js^1PCs>_Bx)i>jp2TKAhtsQ^)Rs0BT zHO{7_*tvrpKnT{B+&hfFkPvd;XPFLIZ1!r)9C`M&}%`&0TtqIVlO$q`QsWj13wT zQJRlg=b4}|M`x1y8-IkFEP{MPKOqR-mIRX(0l6r1!eHBcjs1`JPYffpa6QEA8)j{h zrnJHYbAf(t7}VpuIC4XK)RpQ_xh!NZSLD-_T}RmZjfU~$hSmZ1f|)FLQ<*DlWI3e{ z7SVLc>bUR{?!*IndW0iAa|jPl;}yR zKxZ8;jl}hv-}cSle~_pOG?(SDVJxHv7cv?@7%b}&(0y(1BD=_s*!cEq^HXm?F)X)m z=V{}BH>5ml<3{7~>VXL+o{ESh2O`Nib22g*?u+?eErz5yp<++WR64Pv#KncnGpK5}7q z__rrII)Rct5zyTLsCEawXb01#^+idSg=ryLAZk;&~DtBgDvv840Wn#5E-Z{{*^gyTKU=m$h&yTP;*!H8X z&`3DdULUMUI%XZib+n~)IcH@qQZw`e^U!DZ!9bMruq4k3d9molihM1Fp3*CDi9vAO z%D$&Nxi`6?&3RtuO25%g;y(z3ezwpH=C| ztPXVj#K9*bp>#IYfys^Nm5VGrb?B=n`+UE`e0i1V};?p<|Yj{vAbQk&Xdh_Ic&4mEXA?i-9E*Tg2ZjoAJ!_~ra0^XIm1<+DZI zUX*BkPm~B1mkd96Znx+OCR;`glP_9@JZ1KVABGGHDgY9iiJe?DYe#;{W}b|9^)a{8 z-x_#7U=V@yxiuCG%}j&YzE6`GfsA>)d9*;J}keCa1D0 zt_GQcyw&P20qlGgP+ZVzW~74eayd2wKf&Ee$ph7=a%ADoT)K@NH=(DXPe-bw(5c7C zC2Q2XTWf6)0%l>trJ=;w=xjzSecPJXq|f$v&|@Bs-iv{fbuMQ#D;RS%EP3^i4Me`w zqO61$@5v8$dS^BY+^VA_I(?m6z8id>m53#LzA6hvq+LdlQ}8swc{%c)BSSt*Cq*bL z15`Z6<~!>sbeNbm;UemZw#f>tIAK*kF)H-UqkYlr&avifEJi9AfEq}Gw9z`mr7Omk z=MVzhFu(@ese>xT(kf!S&4@WDAx41m=}R*8wS5Zj%j<2x%$Ozs%`dk6es@wLSg ziOG>k4JP-c$j$t|^D1~e^UYoSm&!M)oFGd$bEP40+ za?l2`>LTHWRrc)Mn=i9J251==1a9x%YFep`OxZ?I32cE3P2Ayy_;555G=!eJoRie8W#(Pt4gD->*cyYLFy{g>Iu`7j6;sa$bkIhJv!a7pC zLG!2n5x#Bwdle2=eX=4ux3203AIfSch??)Xh}6(|`+ynR^W~aO@50=t%4tLKXaR`g zOlzRvbGErB`+vMbiJ9EbwR={>LOu!-+ggs1zjr|RWYgaF6U225+iUUcVW~8z8{On8 zgzJnh`m1_x?%KEzuhz25u;c(+K%~FzP^ks)eF{pM!YVVk8CqF%$!xMk96f|Erb!k@~71>k6Ze3An+n`^Dv#Ud!|Eo38Af2<$wz$H|Dmh!SdUyW*&)BVGSyHi*3jW zvW=U8Q_+QT>uA7J$o0vaJ2EI%CG8P3FpFm#Olh1*EL6ZNHKfux1YY2J2S{WyaE}o^IV<E@}R^!V&8Kv03Ob)Bl2H)eSkdcja)HQ zP486u)K+48lo!x|3YzhRfM`F(*$c7oq<2PX=7N50mlk%JB!Tlz?)9T;Tkth*VS04H zEafG3dC5d_&2unYI452Jjb^iLLC{>t1rkcUc{vi$jo~V@SiByTLx$D|p*L;nDMMsO z#NiC8ju-+-CLxnamFtY|4-13K3;#K<@X=1UY3``-tVGjRo(Yb&$Kgn`Uow7&cnlgb zF9%(@^NpBS?^J?e)ID0+^mKts#~xUeXDSdHzUkPeqF&kd5Tk*Ag+1YV+*X8@{%(DR%A!J3+*bffm~YDBtSP`*(+m+Jsd!B# zuvbL6#pJHgc^-)P1aD)mF(tXAI`@B~@vmm*q=Z+!mGwlWrPZ$RK4`s9lY)I}`vnrQ zdUZfS&s)pbXe_@=sy6DWFuWnr^XwYb6ww13q1b`ZfECUxoT&Hh(86w=MYvqlN{h(& zu--IQl_b_7#)`68Sta+g0KrSrTxsLQZ(-wo;*lI{=|+0Th$+^~HP8zOx6+^ix-q*O zAeX4z4zDcy2yb8XUxuG#=Jk*>^$qr-2X!rQe#OAxmkyEou=}3@1&-;fUh!Ms%gE8C z05<|`Xd77Fu~S-U^u@?p8qM*(T3wbKTRPr!z)=s^q|+FJ#G~XOvJ8Q#u7}PP4Bs<( zL2JN6ALHOu`;Cbk$gpV@$k`Rhj?fiXUTgeHX6}Mi(ihL+Sx_t@q#U8OdqEE$o3HMQ z!7!NONZi$P-PtNFw#K*}OSS*%VZeyuaSuH9RD>o{r|Hn&~t(7_jwq8zLRzmqK@{fAk9 zB+(<7)AjNxi*iAT@h}ozE~w3~H-BxDo0~mKEC#ed5^p@RA0RmB?`IG-V^MX{HRdau zU6mO($?nzDrJIrW4(H#R2<>)!teemA;2jSfAb^Ex+df}=>@ffwL99%41fIJ! z(%eJD$YTOF!c(!3SMTgIwH)~2)L~3Vp(B0)wn- z6L$WQ$lv%Zl+bo|rB4W-(^95j#8_xfG&inxpC10cqv)hd!rak8gQYOAE1y&^F_7Gb#?MHqJ4923vNrf^gZLUVxFM-+&Xpfk4wL zA`_k}F73{H|5``D6Rl9*wzFn=X4MLCU$HsPDx|RP15OZy$w=x&~ww59H2u`{?Yw`pd>rpNl{*3fd=t^(eMA1gY8%EPy zE!ANlPWT469 zHKl>Bi0v{vW8dsHIo2zAlb-VeqK7jYL$wOSPTu0ev&x_YuQ`oNc1LdQv^MEcc4hTx z+{HFq=Fqt!x@oM^x=6TEv3noKWylkhY61+(wlEk=Ayq=m9Q@w^3BWbMfMxn7XM?X$ zlSFQ@p}2?Ptt6jC@ z*}4A83lFr+3|>)&@*LIaTm zS3(w;GRc_Wp+>mAp%(GTDJ)owLMsP1h7r*Bd)$WVr!nv^b>r3m<3oGYi1y*)1y6M3 ztfrxOX615vq&h!^G4WV^Ww1w9h8x^2m}IhzA7hRSn>zrHXv{(og_WyojyR7RrQox~VsUI8zwuK*1uVG4S3kk)ZWqhpd>Z5O z6tgLeFP=CREu;6+Ato_co=}iLJAk32@pY+*3|5Dy96X!LErB<|mj))@sMleiU?0mj z_ctsWOd`N?KB5?p@9p(0C&IukTZ+(LutK0?Fwj=?@c`ncf)}BB3-Yf+9d_cl2@k3m z|BtD}!CD7euw+H7zRpS{nED!Nd;i9^Ha%<0vx6k&o{S-m6k|}=@wUfd_T&yXbP&gI z)W(C^?3+$;g9z!^34^(8IF$(myf=YV4R9~cI-N2-ZWV;3h3>S9J?qvFOyVg$(LD~w z3wG~}F^jSXQTl&(v0mL<*Q)UUStMI5BQ$;93r%?w7!~f%NxV*wT z*fC8(sb`ZBr#O?aADJ&~GAF_eYcA~%1s zze6bpfkA;TQtEbAZANE)0NlQ4jrgNu6wViKPZY)^C{GLxz4F-hkeuborN0< zQFcQ)cs7J6e5Y@pc#JAxzWHFg2M`z)-(-^7dDh=bA$h8qkzrr&=t5{zNao*-nitI; z_Xr@jxt7J$eW$htE4LFPZ@YGuAJiUj0tbKt@~2PRxATIt8X=3VWOOBM-1$bqLf~ss z2*^AMf})1j%RrqxfJTxLp6fjwDWzTPGq+gx>}Zf1#K?uhUHfEUO1-O4I4{o>d(5f? zfJh|YEi(Pmg?g~T8-rgN=tJNxCg2dH4ME3>|1J0f6den?!<)Dz>pLX(9O>Gzv1M=4 z3Oy<~1nQA#lOX)neb+jg%SSE;FHE*$)ryyb6uzqZ&S~(q_Hj$UCVS-CA^VYf3g0X> zK{E#6jz7Wy%F4uI4=gKZSE@Uu2|pQrx8#Yi$N(2xv*5FCM&(Ga(oam>7Vu&oP@JP< zJ2}vp@U)TE#IT5*GTF;86cGf`#GRV-H~I|LQXAMZ6ZQa19~;=)nb2V%^)fZ`VOBss zPhI6o^wq0gVcL!;CcqK~=xu1H$;q$rlt2J&fdxA=w(@*AkZb9?ty*5~zZ_k0Fi}i} z0sUH{k^pWdCqX%SFDg9VADqeo`PYzhEzXv<#k4d?md})^8hqWxT=-WYvn}36w@-5` z!_TWmYBW27M3kQb`Va+!!aqg&VJ^BH+--7Tm(A6XK_e)qSB#`kxM6XRW{3#gm?F6( zU^J`%9lA54^9|O4t=k+;S5yXbJOWeuqg!OWC^q40=u_ZC6M@%8YUfJnuxu#rg@`WvGJh%n1&q+Gp`)*uTHGAs;Q5_X(k1fvOi zFR9+Gbr`n_S1mTZSg}PyJSUt!m3~s~Ee*#Cvcg?yC9PL@?{I*K)RPFf1Lo?2#r8gA zIv-&~8frYGeuVN*D@@F5vUy<9b(0uz0m2EVjNUk+3a9;{hkc$y0)KqTy%d-};I#=1 z^!2Q%RbSzKDM6!^=}xw}sD`?s@xixMN0r`6SqF*1%sDrpzyngQ;+%`_IJ-(OUVIYy zYismzUQi68@SF$CbQDC$G&Bwj?|9wXRfU=nFF$gY?SQg4_p0SGnAvb{*nOMUIeNdY z%1TI1UBZ~3I6FUNIC5Pe(CI2&_QU~ngot9+jzl;LPBb~P(Co64fBXeNV2|*?Ib8Y1 zNUw_=kr`XRb!Qi1bdhI(BUO4x0Z!~t#9;{Q$rqV;5=HO1W@}Gw*kC+9XO+qk7ka)T zIJ@LsN{&9g`qXk|Gq4P9Lyf+^**&;nI{AK@Z+4U6KaJt3T}tCnBE8TpN!99(F^=~U zSqv2pVZ}+)S!`1SOu*XA$waXj(FNJT$Ah%fh?mk`-4L?RzQB5ci$bwjCYoI=!|##L zAp}iGc{nOj2Lms)Q9^7CC}6-mW=DMxY2UXJ+1GV zyjlDRkbuGJcS&FMscmfg019+0853QaP? zwE>sGNqBL49Gtu;Q0$DXjt!JBF}4cqyyx~-ODS>`I$abp5W$1$a=&Zm!e^)}K$w11 z>>v0k0CczAz?skn(i@cvd84x z0*`cZIM;JaZ?fAdWx~p+c`ipuS-u}cZ5`NL5@4fCl{Qniv`1hphGHNKDD7EKzh|%I znok@+6VQ)4#4D~%jjE`T$g$EfTCH&h+}M7Uo^G&yuY3|Af}ZAF!{6wWmw~_>DYpSM zB2*$o3|EP2JY1E&SzTr%7e%;5Q<=VN>IG9VSw?kvq{-e(VFCvlRm;77QQw{b-qA}W zsEX5~{__`&cY?O}FN`D!hU)9Rt#wy;RJ;S*Sn;af2Wok5`W)$prT#OxJ_d7TR*TA{^g2M@ zC&QN_{dLBb6pVnir!DInWTW_F&F+)oOF;0(BFYNGt2hhZT8Tn*;`KT6wM52keq=9b zfqlSsHL#BLKAFhqw+t--i4AmJa!v>;{4lfM?qe%+W5k#Uuf*-uv#hRe7iwZ>>to>UTX{jt z)eHftQEI5vQ#ti{_PuqtLLVS$*q)+5w0CAe=iKE@UzbC7B@RwDc?GxSu!=R7t2w$Z zI;ck+57WHSUh|B>a_e(On;2i1H_qC(4Wp%ZU6L{~l3+w`y$gYA{u6){p>W)SpOtR} zL?ooeECncEFL?F**hsgHO1!Jg;sZ_f#MtzL*fBTt=8b|ap~<7{;o3S@8kCOIr1`g3 zEp}^%JOdJtfmIc66RVr(dPbGOvgdiQ$q+;EI20ArZ5+sT8(3(aR6qE(j!bHc>;mWUNOj1}^vb4&G3 zKJMPml+n7P1)Chm3scKvz;dyDH0c+4OlYm5VHbEEJn$oKkr)@uUOYmDop`yI@31sHK} z<-R-^(aucxUgymzM^&4->Krl5=J~>z6 ztpfo;Dwhu`CB#za^9P=r+Nfy~OCfcuT{@dk5`D$jUUx1vW}VpRsFX5tDVY2!RL5-l zyaI0W_}K25j|bhFk49Stl*7BujkvNX=Xv90Xp-?D{Gdk3;R@g8Y_n|# zAj(pcM;eGsZD0|4vxho0RwIN5I%x|Vi&*pfQU+dzDuJ;>s>`hgLLhI^+0K^Lh;yN5 z)dgt`9G4gP*ESuS&|ns-P!xg8gReUGLhY|enxbQBC;ic8BpQul4CcXlfWG;S&jO1I zdU^;PI+BgHm#{WDZy9<5jM!h2lxx%2Al`<8|e z<$*A;2a$hWlZ}dIQ6u&nBB8`l*B){R%t`9m*u^-L7Kj_#%h?OIn^w_PpH(w939HT1 zb9HOM8*q0RllOV)IOhSkN4mKllA1^P@yr1XZ0ew5`WS(`g)&@t_vj03zA)u8S<2-b z!rH*0wn#Y*x+b{?3n;BKeQvnh%pYS)+1;GgJS@+RH>mHA0gP06_PYvOU8Hx^ zhsexdUeR8HvEHzijm-xa4?<@j$GVQNtNq=MTY1Optj(BY>s;lVjUa%Y4TS79wZgZZL zXY0emzK{~Os`^GcweAT3V&|&UeH4LaXFDqk32@0Hp!1;RIHdh!^5~|}^now}hsdrK zmVL5q z=;O)hj+v4U*I4W1J2l;;4@<8usG;TF{Urxl>3yUVB=Hpm7GN8Du3pzElUFd11EA0) zvR#hRji20MS_4ReZ)~Z3F)f01SqRM&g^*V z6FI_A0Fa;tL8b$U2GuG&6pm-p1&UeA2s|Ky{;c2T1>4-dU(C)nBUMM>Q(X_R>Qi|) z##qA6FfhH_rEaRZeJLW#$o~&_PFzisn+sy5v^!`4)T%3A8 zNrvwoS=xi(05^J=Eppr_DDk$FgV4SpmK$Sk3{T)|OK)UW*ty{9cHS$M)@tzBM6h}CB)yhlnEvjxEtI&32mnHuRwV ziO^&?`l9KFUSSP1h#YoSMeI}RR*nZx__JZ-_pE43N#0hb_ou?JwI}!irHNpfbKNYq z>w;RBS9I zPzPWDDtKCbERGwe!QmQnRMx**P&QrBE#Q<0A~P(`}Ll>Fs z!h3YYS(Yx`HOG|s@(dWUxu;Hnj~jEAG>yt_PF%X`Fo1t(4x)5H5gN--SeVVw*m&n z`$d9qH$AM3P^tv0mhNixho#Ffw@9I?=4Ue<2I{Ii2IK~{2iiuG^ z-IxEQ!M`0%4+V3P81I2p#txEYe2b?YaQ9Q&Y`k-xQd?snXYyGf)h<6VpdJkr<+cY| z3>Xa8CaT=EEjo5MJ39xu=3;=St1^O{H(BWNFF&5J?nHB-uZW^IG!^3^I_P}v%C8a03P~m%$ydIXm%2Fd6q#mJb=JP=g}5d>S))TH z3E_E8X4@`W*rrK;K=d_@>3Id8vdL#s$*N}}7t(4v7RuyR{JkkFPcFig6;6{SzzfIH zSm+312vY6P)Cjq|)GT^hf>vt+k${W3-8qV!)?|Ss!2TCe8nY2`U~0Q2?|%fJlh+2y zzSg9?mB^Oe`!dH;!HJXAK){(qa$n2f&~(6i(ttJPMNy?_j^3(wXE5uh7%}Zq@8r{N zHP(2_(hB83xJ?n1TFB$Y6+mGptQ!6MIPMn~xDy`)TP3Qpd-MQ&e^m#l>_~yY9SqP4 zy7rp@p%1AF%u<{v+1n$Yxpj|%QiSwDJ$s{j*3*a_^KX}%>6!J{7+ufmy=t7BGg|`> z@W`R1{m0&W{aTt_d3G~BESe^#yOTq;07(y23YrH2mD~}r!(}%c9AF^KiwvX&^mZCM zVn-BnSe2Q`OgeC$WB^H!1ju{uy&rk+y|<5gk^T%}#m!`8oqLN0tm<1W4fs-d^YZ4o z-}z2_5qtmkT9kfL@_vku{5p^_dW`O9sCj5Muc3Dk`_+7VOH8SyKsVuRI2L1U$#MZ9 zu;XZMfx%9MRi51{BT+ZIrlyOYUt-@r&@%#Cyt;uo`U?CB*GreNvNp(wvunkvAEkX%@yT=UpH_N8Gq zNK=5Ja&vI99vipTdzir z5+SdXcckUmcb2L$Q>JUe{BKT0qf&{j%#zO}1qA_5(y0d`&0uf998iXztaOg*!aWBk z;D}Z!-=Eny+SUlYP+tl$96LSndKf+UHCAY|skMf*2EI81dpYqL!>2OH4OvT}6^K+V zK_3QZJSbl^U|S{EghCD_6#|NR;t?U{P0X$*rcPCuzjX@m(EWNs+m~-b$YjOR3VN8} z$X|x^1O4%a!?&ZsL|-}BU$1$p-6XYn1c0EbENknCjk406rB}`zz@!NU4Vw^hcB7IF zv;=<2iI}gWS8t%TGKyElLPO?)iww~`0dnrm=)5BgYPqsT?G%JZ8i0N@AKfQGZ$mDC zQkx;ST<1w#XX<+x9-+fUxKh-AhUYnbb=vam7s$)bSs5_g*7+<_QvvkYeXe6m#OxVZ zX|+0Q-^v6Z+bTp$ZBoL|IAMqkv%eWc%8uT)FP_jOFdaMrywAlxJ4;JIcW=5fHF+L9 zuY*MHB_ zFc#9bE)<{~Vl~4(NvX1&I5#>4Ae^;(gK@S^**3NbWIUX3MF8cO2d>Q+v{DXl5DTgM zg)(~yvw|ltERiT4K;;mmYALPbsMa0ZtcM!!Y=(oWk9an2)Z`^kTgtHNMnytnS3BGR z24+)3DHRtDK(P!3lg5dWKZE5C0~911XdF+4u9?+9Vb0*8_D0#>3#Z{ts5_AbsImtG zai_k}IYYU`vA6gcJ{TbDh#91oP7$oJMfWgfW06m>O9)hO#0sOv;Sd;V$Q?D1)kU~A zDRw|@#JTViqhe+gbJ#H+X!C<#ia5}&Z`w%NP#Kn%k5>40;ORfUy$Pm8l?@l7mlYz_pb zGP10Lxzu6zmBJ8)c^-a+-gf5`ba)O{O=r#N$@OFmgLnhslBFYSV~GyGkn} zh<0E!m^WOlohT|xx+M1TY7K(`({H0Qbu~|ukWy*hISw<=aZrhgAO(U>&rs43B}&OL zqaLK3)b_;BhwK1{@j~@gREIW(at9iOt{GJsz3E(?w5|pm1~cbaGn4at-Zf!WbQH!EUpb!6o-EfWgS=pfhTbdKEV+A#21!TE3-`FT znWd*udz>c?1ghA4xu6JgsPF+>#SoGus~=bzLdGUS}jNnO02Dd=sP>glwCT8 z&K}5Xv1@YXz=qBV)kn%~=IuajR|ssyb^=hkyOJImJgFFcIzGsBV67e$K>Lbog*eVG ze2RoaMIds9rg>6owYazTA!H~)X%;$Ur$e_%Jg-2{jm0*smb1eLAXW>SBw}uX_*qx5 zgq=6m6l-cU9L8d%Tn;!-dW;~x(0-&$Be14aD{OVj*3dCIrSHfI$8)Akbnsz0^fN-o zjwQ*6owW1Lc(TTE@J{yqNAbANKr@Yc7C9VqWWG$x91CeiN~o%>A*SSC!xLJ7f>}I= z`ia#s87fz>9yQ1@Guo`0(mE9t-?4`qx>3PzJ~Hrh3k8GgZoQF-$bn%7M_MWD$!4>UZ{Ek zR;Ak92iMTn4op18OjUZKZU{Jmn9n2=i@cn|PVWo0zn11BSK21*v%Km#JYvJv1xoQ~ z5yLKvZa(jEZN%8JyJI`SeB=#xrymg_!>_b_dJ5AxHWB@B2QbIxQ~}25vSGwy_{>@u zO99i%l=z@&@hA?`;bRB{7k*Q;MTzWq6 zIVYQw=^~X}h;8C%IE;|f`Ah|6J=9%@?%L~CmMIdozP*Am3kNY-rsfcK9XsT(QIw>? zL9#WN>fCP&updJ)SxH?|vzNT)-T)5up!~dNWUV_fwQH2i@vU*k#li?5vs+~eO_l;~ z-KMt8V!@NLFweoj-YBt!8d$-)&ejV21D8ptI&N24&HlIq&hzz9!KGq-~sxCK*h>(|@WIvJ^S%k`g-!vmT$S7-QEz6|xg|sV&Ubpy$h*K+a zdSWK2!yGM*5INDa^NgSjOYcpiB{Ei3yDSvLsIofeTq%L=#4>A<{Im?2P;Vg+al|a# z$&6j4Gpr)1lp3qfsNB8aNK=xMn<~#fLO>c>TGE+YL-Wj zm4!xIg$$vaM8sTPDsj1JRlEX3WQ<@&!x9L@m_Q{*$r?IycbP7#b=MuG3@5I|4f3CS$8(V=Z^124&?7R^hcOUsAE~R%GYh4+1F;3dKqfy=&Tp}H;&cBEXHE*7`o8g$fQ}0Pn z%>xL^q`EiHL+)5rF`+qx43SLs2sRID7|OV3fK8Nk0>Z8V<;N-OV^ynZm@k93W}uyc zsiD_4K*r1*jyiY4ycI@?vehhCtCgl?Ir6B)VLXE=VLUPsDHy9Xa-`62)l01LpyZNJ z08Skx3VulTs5G?jrbI0FYsExZb|d;CXgD`q&=G=5*3^V!Vy#4M&;R|*H1`oOVy9|= zBuP)Cvmb&cvR1N;l5D3lTRRCfjxxhkP7YyMD$Qe!A!BKjv>DDrcO^EMarEPPfmYFw zWnr#H5TCr0pl@AV>0^uvOKD_-rR+Ijb_C_r`pLM$I@@3(&O9YxIcG22dDM)+JWph2 zsW#kOn$ejI;l0)8_9ey#P5E@0!J|$Vz6u!FmegoxAnHxr%tfI6)rfxZb=hLFwKnqr?1vqkI zMgc|_LnvyCf?PiwH;)CL_pGhh)Uk}ooyDBoCXKaw9;qMx_FBbD?dH)U2k?yxmNMD| zWxwMZA%-~s>k>G_83skJZg^S{8z3l|HK9C%VN`RndIZ9&ww2A<)mA|^%4WT$lB(rt zQVTTK%!Zm~9n(UAtqFkPfWfmadbUh_AWTOZa2$cH!&hCH{XqXN35=lAriT?`4&X_twX<=P)4g{0M$_9nJeo#TMx#p|RO#V}cP(R_nYFoR z4>b_zb6yh#Pmr0w*nkAIk`v({pE`3~l=9%uB3Y+Vm33LRB54Q72bMIp?szPa8C!zJ z^Cp*xlggYuayZfIIRTm&o2cq6Kq~}ktyKgI;;e8jF`UVk-5VqE20SmQ*NptRv4Vy; zBKvZn+zRsiyo4A^K&4TrfWtNzgizanOExL$Gh>_6YKrm27ZupldfIuhre#m)h|6Mw zK@bX%12a~Ve3Ai2ry;zjDO84~CxC?(3sCH}4xU`kNtNxaZzS`R)P6!H)tiKzAX4{6 zQnfQm6j7}c42}rH#>~5@;G?9nR#1OBK@MCm5-~t9V?Wtqtu;?y;&jRwKHOm*@<3Is z0>~lJ_|>4SZzeo7h@QU8*xj#Yw$L2_aK4Z-7R)7Z&PXCbWBpcnih`r?e&Z zQKa|hneNpZc!o0GDG9ALIuddR4d!e>cco=nu3Zh@PuBwri#UE-_K|5~KzH{%3tI{T zflDX=)5WNL$UY|Fs?f=4gm)C)i~;b|+G^}slXI?#X%pAm2g=|ifqL7d!$&z3l6<%csK{Tv>{prc5}l~Cq&%Ntwm&~WW!E`k&`W4dd0bX9+wD&jzktzx>{K! zkqwKv9`FgdKUhR_lO9W@Z&P{-N1LW;*Ctv|Z|XBpaVvw|%)pGc>AV(&ddp!rhD75M zAK!)vP$T1E%0r%0Nm)n)`7GqtRAfxo)o#Y_wzhF5QAdGZxZo6QUI66GxY24T>C@La z==+}%QK3m3b7Lc}Tl$8=F=wbP(5+m-%H~8e+MZzC$SX%L)oU1YDM&|rhnSX`?aZN1 zjL7tPJ=aOA%-A7|rWB002^BPo&{4I07CsS=|Kt}R{>sZ&&t5G5i*0_#-dit!jk=gvRgl=uC>x+tK@XhL007^D@qFP8K^;xVO&8m;P?zTHZ2bdWiPRvgl+0A%L{QYMy zzVq_A&Gq=v!!LYqy?FWL+0%#b$fNiuJp9W0_Vm5)+I#CS9g-YefY)q zpFI7}Z~yT5dic4&^e_7JfBWGt&u35l$*U*Np1zcaU-9*PJ@xf;KDoI|N@rBw0+Rv; zDxCRtGKt|RW8%o2vI8C(r5p{BdKJ4ln7WQM_ZfIcKt%aXDYcwv?OrV(xI(NA@3q6r#M)8H3}z=)GnpE!6c zmwd_+9?Q52jV8+)g6k1mZP7DUD!!-zN=~hBs?Kevx!2{dcyJ(mu|P2Jya|*s4`0Vz zk-k}_lfZlnSx1m{l|XkMVJ*fHL4%aoc8I%h56={0SalD2p3FVbxjW5ui70X5v1IG( zWK*%MgtqqOuRO0J8pTP#I~;WhOPemwT32YEIXggpYYY*%ZzLcYS<0DGTdyCt z%^JSZ6P=-+*`&0CZtM(dB;TE!;L5&R_cjg-uU`HtUd3om9V%zeRZ8F}wY63D2qT7* zcH<}nG(VhCo+M@aiX-v4hC{%V0LVvBRkQb0*MN6E#=;2BL&8N1=lDKx%4Dcw)U=Nd zjeVY|E}UD>U@WCFUr8*` zQW)fob3WGs6|ZyTP$=;&AORZi;Ry)M%m2fx*sj@XgjLSSQ0ItLNtMz884c)+ml`55 zla+k1oE;N7;|58zS@szRQ#HkD2ybc)t3u0!!o7N;HO3m>ePlM5b>s>krD<2W{M8Rm zl-d#pAnOBwM_S2Oz%qwlIfo9Iu0z&zr>v>PE3n3xYM3?0HI~$qfU!bToNV13rchq! z0yAb6z$meaG#2DtVYJ&A?F^(`{+b6j1yuNuR*(WQQZrf)aVqsQ#*!C<$Z?nooVXe3 z3?Hj+49uMGp!s-g2>5Om9n#zo)_0k#k1|RbQW3!I1UD(g$%&ezM@VH~{@MqRzxwdk zp0D-dkG{Q>J^ptH?Jrobj4yue`a9qJ#UB_?p8m$;-}j?mIj+Q%s2?qh^m?cz z#uhj_HBN8d)>!G7>#EY;=p1`Ek--w%q&|r)n2lBk%*$Zd)M)de57xFAYG(|iAnfs| zEk`yvjTlr5e)Xul?-k(cQTcg)_G&%--t}|xzAxI_&&gkY`uu~(p*$*&!iSH^&%ge{ zN1v0Qd-}}R+YiY<_DBAbKl+m%lH6IJ?Cn+?S%d=Rapp*l-zs(ztMqz`oZ+MeD$>Xz zF-(KZfN-%kS;QoY;WwP)v<#Z2jAb(f2vR^t8apNkJ-{DEKTo`=fE=fXd3C$p_wsgi zyZwPzFMn`-uif_*yLGSWqbQHcTld=QFZ_b{+9`Al6lw6))<~x$RAVF=b<(bmRYv>3 z2{*KX3koPavN2GtZA6m4)pjQu;EkjyeDg%zv0-M@w$kV+I?cHPrm>fGh84zGGB1DK zgEKDDtVW1K2|r<*bak>XcUlD0{C7l`(qdh`*Dh#3W+dqo=O`URWJ@!r!Q|N}iKsjC zA8{<0Ic_rt0F8Ykyz>E!9muG4macU9>mS@S2D(*XIHQg14#;@zUOX~Y=!^o4TpX=% z=b5tc*h_8H5Q`yFrVJV9;gdy+=ubjta&PG>oTM;yb>eO8qE&Abkts~rhU$fhf zrbi)t^wD(lg@r3Ov`2fG>63ymFc!lurv?N7~Dv%u`l#B=N9O} z4A;i)AkqzjImHjU<_omstR?NX+6Ys&%o=>Slr<7VHU53#w@8~Q!P9=MuM_PyE*s(IM`BREfXjiYuoe` za)5Q;GFiO9oQ@S)tL_e43@2-;LlYB{9w_CH&@O+|&#_$mteXWUBSY9TkHjPb!sj@< zN1{(dZLT&jvsYgeg5zJM0WN0|H7-6@BZ=i^40YUaNk$$)(Q~&BYl+LS^-{v;TK;4LZfiV z(vyryFhD60!RKDP$FMC4^q9_QL1f}zdIduOkR~QBwxm>sGkQ*Vze2*MZ3b~FZJl{T z;UH&GPBPIClUgvNhmrE-Z+>vb8pjN}D^xOv)rF*&DT^ezGG&O7v+JJBFYa9OTso^| zOFL?4-cs%aDY6gPI2Nm-fTjRmdIZL`m(6nU0yHrD)UveoF>jdQm%rs~TM#UOO>1co zFzvuicH;d9YqEnvc>#s8924A1NkcE1IZNRtM>E>V7Iqr+3^D*W&x>(}Lh&zUSOT+{ zuP8P^Js7d4;Wh1e`CA{{Fo7xL7u%Ggn4gT%vuc3K5%ZY|D>?_8Ih-Ks6Q;SZa^|+; za95ALRPe=#M2}B^gzT;z#}uu*gwSh^otM(R63y09*SUvZ{=scbAx~l)y>uB#@ow@`4{jNTHrdZ|^UOD< zJXk7~#$mnu?KhRZ1CT`s+!_R`k{xF-c`Wlz(GP{U5MhMy9_t`cXF8IH!Xhz%BQ;Kz zX?F(SDVqcJb%vbDzizY=jO4jQ0nSdRZK7wja``)W6$X=_M`hHqfX(Q|kPpnd%WhbG za{&HChG1!_U~l(GtHsqkERB-^)E-DJE8~XVutQ3oEjyI!(a|)@q~%3p(dPYYRX2tZ9%z!GsXJ6=<-Rzx(bA z&LLUPVg&PGrUC0XsQ*9*J3@Lglpbsua=~;V=oS`(7BE*Lv!2JE>mI(tU%&tQiTAnr?8SQcE52UN7f+sl z_{1xgWXxWVbqGO6gK~}&XFBQ;nkmfC=5`WAiR_Fpa;yw64aB@l`YK_H$*u_rTwlHQ zvm7k|uY6#cY1ubQP>IZFpEQ6;e)!G{d-~pb_~5s`Ss%$Gd3UT=_DH_|o9##M9LG*# zs=bZc7ZZ)(nR+{}B3UsoGEM7`;Z2P7ZSaG4*cd`GqysVwhq~uwOPX~RdZf0BLSG-u zzs8!`H72?igrUxKrKTmtu4^9m{c_&CwVykim)9++S1;`8%l+)d2Y0-^AzOlKIT)dw zK#43l$ns5eaXN;Fk^51d+t@)k1>`kSFEBbKX2Y&8mcR`${5$s9upEp1k7_(=toqU zW~Zq@Y9pXtg9p+>?be{a#+lnM`Og&D;v&OaYV zBYf!R=wOauX!f#WU(w=-Ld{BBwc=TO;Gk>_j0Ke=0btXD7%wn{=1y4WjPYj9?`sea zCX%VQ-rM_qIX_;OZ{E+FH}{v%8hvvXx#QDIB(UrOe~`fX-a7a+M%?q6JZbNlc|sVC z+IihKhNd#RvY)#a|o&L<}mu_Pyn35P!#u>_7jq%mvrgaJxEA8B;k(3r? zLm9wU;T_sn@2IR;Du&z<=B!i7F1>H#c$1=gM})pNHgKlDnJY{~YGc}{tzA%B!Mx`c zPPU7UUSPCkyQj=V(FWm<60oA$LTdo$@_lCyNS5E zjNBL`2fii%9l~Oi0}P303y>EUq9i!Y3^q8(a?Fhd@vTMI^J%TU%|^MgWJ<{Djj__{ zEz3S>zr4W_&w%Xbs2xMT{(NGy%F@PSJI5K5S?K6fy30yM!ekCUj;4vWUJYk3U^3bU z2AfcMAFFZkJZfIY3c}gO+2xEmMCi032HY$(xl>*Pv2WPf zMz`HW$v}tPLma8W9N5;njClC|5#BxuRsC?c^!ok0?~u*a`+46l=g#-@b072QOf_Sw z%Mk>jr#g;FoJ4F6wgoRs@g9v`>|_UEm(|9Hacj9CB5X_r&bYXLW`ISRL(GzL}kih z!Z7Td|0y@X8k!68f@I3!(tDng>N+Dfg^wi^;}g75C^&VPGj$_nd3I-r?T&%ei|) z^!i=>m_tl~Kt#~GBy|IVzHr3G6e^H2qK!ef3we%CsTZAao{3a_X~)B7)}{bBRh+<0 zBZ9=xicGCMZwF1PI+^6IM&(+{#xQzVELZO+w9G7h%^McbXhRFs$YM(VvZw_OHO(Ly zQ4q**3YbNcV)$m{&CA%7L&=+D1}qq=8`g?!xD-qo1JGd7M^{<9r_~AcB7(gBoZk1# zx%NCoAuPQRkHmsImjIRb6VM(q>s}&bBI#_Nq zu8MjTG)e_k_H@XNtwkN>%+^Kq99J?DtdUqMlNV{KgBVu?fHbhY(?Et0cfIJ|_sh8+ zIrvE@7UCwnj(8418(=&i`mCc5#)cV9i;m}H2Cz96oixOrsg5;k+71v?ncg09W*#Tc z1h&HhkYxAaiJlh5^Ryd{&5~wL!h|j5Ws;;$x{4H=vo2aYE~#Pm#|K|=^A;>{=Jg`MJ%jy5QFW7Q>NAPZ*&{r-Wx7O1wIP5RAy z`^De-ranqv|IPBFcOHNJ=Ls4;{PMTXuHhS$I6sN_61{V(11 z(!c!HkGT4)UwiAX?)oj>{Ok|!rK@lFmDk^J=hb=qXT8pc{y6CLdE%izPKRbG%20lz zL(QZn(pTVOB0uY#ZBW z+9hs?-nBQwING4{{2r<-T?fSO`NDl<%I|eREI$hRVM6Q+Z@%)2N5q(5WMp=OS_9yV zJ!Kgac0%V{;Eo;o^8oIgwwIMiPYt^J)CAzOAalpe8<|*5wo)%?Vl~N-%43Ns*$fI~ zRVQT7yuskRm&@OC!dWPIeeB8Pt3l1{IT)UF?<1_h*1AKbZ9XSmbBr(%ogfeswKBUT zD_*45oh#NKT{u9nkyqI(kj)Ju@!e9dl0xFB>`;N^mW4lWI&ll z%}$R3YiRN7#>;1NUv%}+yYEYOS2nXgl8Liji5>* zVUg9Lr*xdY0OflsUNuT6Y%I2b9uMIROiUo#FtmZ-qbO3vO0Wn?BG{_H-mz@WRa#q@ zzwg0kAPjN&`%gj?k`^ttQSu}zywVBFGM}3yX7pdhbYK}TD!i%~wji_97E;flECzsb z%cIrmWrq+r6=f`Db^54qT?%!nCL1LyG_UGgOU-#-{(+Oh3t?%33suI%1p#MeB$Gg1 zU4zKUh*#8Rcrzt$O)0teolC31lHn^hZ<(iTv=)rookf$? zyxOsB8yFxa7wS&Q)(YFF+Zqx;qF;A%&1)h05r-Ub-IM^d0e@#>gtto58cPqJ(;$z+ z=OBp?F;%R-f`ke{mu5g4Xkt4~ULR$sdSQR0fv0rMD~#I0A`c5VXZLZP-oNjcbM<)m zsqZHB&{n2O9F(*8M^eF=%}TeXdYtYKby5|L`gCoKsA%RfQdofCVKq|RK=VMN*-Di@w1(}7nG4&3JwtMhg56*>bY>BP_-<=#m)5TDx_h2cy1MIr zZ9jYe{b%2Q_r>xjFV=i@dwlGkFW;@RL3kAMqwv=J*caY><BQ$gn)*N9^h z&TLC?j04(ep)Qb3saT$i9q%f3M(NkKkfu%#-2=-2^8!a9)?ylU!e6&F!~Dp*_;WsB zZhoh$2g_GpKUnVgyEhM%H#7`p780?4Vl)ub_8E$z&^mQn^%QLMs-n|4^pz$vLj8Uc{$N`*dcxbs?)p4C&K?(AHe}Ryy>)hrq9Hn6JFIUcLM3 z<$U&ZKY8yK6XTvQ-5s2QkUny>ef@=B{Aioo)(yCrIfq&nT9XmsF`8*+)@~u{uyQU$ zC(44tGu1IVI#d3K-lD9ys0XgF5=+|Ldmf=H2(MjPvTe*!*RE1a?AqqCSjy!edhqy{ zK5;TfsSrkJ6XX<2-om*Yg>IO3<5IvV+jj6&`)tvpx8B!^6a%|zr=nkoEw+(T#n-fI z;9lIbS?nS00Fl{x9LBWqtS9%;M(e$&>!kZVk9J-+FvrVx-+%Vrd+Wt5KF2*@x3};6 zFLB>PNGn&wv`>Q0aqnZU|L~`9*N>fbO$1`zGrqUZgEsl%m$Eu#x1D^hW_6MPvf4uq z4DpXV@X>XKpd;kA(lOWejy#ks0l6)@&;b012d_PS*TUPDB$hF($#vo3z6(Xy3;vT2 zo>Rs;m_pfjK`@VFyZv6BpzP;YRbMxm<;KrX2(hI}*ZG@)4&1>&o<}4Y&tWhth zbT8pgF{TuhVWgfG!bj#=duTOaQdBK@EM%I)*}yJgpF8>l+dC@H$gM5bJu=iF@s=+C z$f@2b-Io>HmLhSO$Rt#=D&~<1A0*_h4TM7iFOY|g!!@>GgP>Kz1gp?rF^0#@1g9_0 z8{~bUaT8;-W2e~NV{wYH0@u{TPVMrKev&POhhKa9)_Qk8`N6C2zE}@`_4R+e{KiLG zeNZ2jQ*nzwol_kGcR7kdq>x3-uU;?atC zmpLQ?5EN1Z1=}*m;B&Z7_odbryT)jkuW`t_a$wq)E!P~ZPa7?iiB(f8Lbi!Wstf_a z)t18q2yJv&2|D-XA3MmVkXJItk(E)hf?^jxyo`kUD^-hiB^`)m%aEkqr|^Iit(7Vx ztqw7qd8s8laUPei9QT z;$A5YV*ahBv)2giUpDf>X@QA$_=!|M74>cpcx~|`crWnx7sS1y-VkcEKzSz;E8hl7 zf3}Iare6Mu2giLBoh#IAZX0=7NZq_HHvJ7*e6)&YZcT*5%zuxvq2PD0&j^Ot=IsKw z7-5ZCp8Eh)G!(6E#9`!50$M2KnK?~arMcpXE^_%NAAAN7T!Q)^4q_-@LIaWb2 zPQSjYO{NAUS9ZRF5{D%w*Amm5L3%5p$0mghWoxeH(Zkk(IdNK6INCl&7Tsm(5EAkd zlC^{#YZtA#?cqJoS`aB+Ck^lUFmzqve6e0Wd;fdu-RIwV@7)jV`K=1)eP6y?+m=8j z{jF`w&7VJWu&#jBVljl<-Wh3zWU+2Fa0~$H{5++ zxH}Gr@+f`efXJUeb2l8$?jd^{s^!*qvcdrxEJiRO9MR~KSvTrrUhzfNU>#}WW!I0Q7g|yhM z@5Ky992g@R{bI-66xPcbzmeFgrINIoE|uyjY3{S<284C??x^n|I+eM+X8OFBfBI9X zOq5aZX|@_CVFEQYz25#_x&80^vb}x#|7FkZ)%^D3H!t;DPoIDA=cYe$ z?*BjMO%LMFCi(j6$qF!U^yF@cCVHEWK}L;&SRX)@mY%J~SozXmRY(%1RxT;R>--c+vPo*)ryN zl0Y>|X{3!bBaIZ;Q$fS7o4iiy=+(~8A2AE0=R(yuh2=6n9M?XF?f31~dim-{?|kwL zQ_3;*G?foWM5D&zBQz-^&7!fVS$2*NnaL;wCt#M7fz90`wQUL7ORi~V6pdZ+Wm-2I zs&Ru#n*+>Wi>-#ede`216^xoSi(WsMKdTdKSL@P!U$tAo3V9UsqY&Q;R=oMjCqU*k z2Ih4t2SCFx>>)&KZVca{rxx&jbK21smrf0u%5MxUY$hpl?4e_gjAepb3{`WLN-d>_ z;D#s(GE9wqX&6J1x>idyX%W5rGdHw9+Kzb;e2A5S+b&Z%nKzfv3MjZxcCQpbjp5bN zcZ7hD9V~)or=F8HIDv6OtTWWnjG;oZ*3h509K*)$=sJX`>;5d>ltBW7F)>dTzyO7Aqu#~a{riD^QuQ|Fb zL{nuZ9X>?HKK3rGqAjnE4$_I8EHD#If}f#TDMw2fdej(3sh5BL)UatU6Gp&YXW|8C3R z?NKh49GFT9ZC(C_Q=7uQJf<4_H&{u_`r37-DrfBn$nP$>JaLegfggt9v>SE8) zW{sjdHV~5RF5*auQ(ElFC=OR2#AG>{W-QtW%J!VJxy$8WJg=f9nYw}cr?s%#%c@4Z zzSPzZauW8{ai8x{Qx9WjB7MPdq>D?diA=MOltL(t0rb3^IdXW9D=6*7SypqNjGLfU zr7E$<%Godf(u0$9^_^$3lvCK9u8WPPIoq*-Q-szy3x|c(1w^&CoT|*q!;7Hcnm&tc zXatnurY!Q={Uiux)e;%KtbNJ!ywDPiyxR^5jcFZv`Ipaq!LfRhLoIHxgLSJWDR#I~ zCQx3}1W9TdnOT`N`PjUMN?&oWmJ*{7+LlB?&%i3mPGJB&)gmYGBxUEi0${2_9y}d? zQrhM6uiSWlq*C_gM_WVN0C|Q z$lXpNy~0q1kl~9aj`iWuN@{EF(xAY!6scNNS=qJmOV!>ek|JeOi_-9u3}9O=7lFuH zE`Rdy#L;o4no{mJ;ECABnXWZ0A?KZTkrrxqg*hBi&1T1ojCU-vGRE9;QL))i{uQr% z>KI2EZ>qf%Jkp>y)8eCpK`;vUX~;AAWIxgBx&Ja8d=UH>{rM@(4v79v0R+lq-(PC1&{OgC~ zn`6p0Hfv?gK53`AfU8|o+gj4F%gfr-4?D(JIKfr-O11ekw-(A_^(yCwF|+L?&R8TW zj*%>YLA1G-smJsG>3w>YMK?w+|HgTa^n=g{_?qUtx)$0Yxme<9BSyKi_g?Us%usE#%fERuPcc%z z2_0JYCy%^++mKGf@Tu8$ zp^Y_jl$d7gT%MgT|IW>;@B|cQGqoXoS&fn=M{abday-1-7ec;+>Z&ai-<{D~Pd#r4 zuyyC%OAuJo=#F=WsW}S3O%BIJ&pu(Sp^kkpX&XHms6( zOA&C@vuo-j*F`5em)W#>%Ckxi*$-i3ZRSv*ZO2_>$$`9^X}4nIz_*2ZLj%ST%mXy? zW|)}kqQ5mR|K6FiA!Wc)LK|}z9`Z}#t_pyBi6#wISE{ z3p%$P4k~MsSn!>q9hOM8Zad)6ah#o1WsbpVa_`H(e_ll&8hi|Z6BA$Xti@ZLD^AzG z0cR_;OI_16>@OFXay1!@#=5QD%&f8Ko0bu>RtXCK-2!c?uH+RU15k+n9}V7<{E zNp|@UcojZlE~{|0l(awf3y3v=3ZNv>ZdKb1&MXr~PR#P)huY*xWnNM_*iY$kWmdIZ zL9oMut}Jzu`2@99YZ7&~FFG0!xGpNIUjD*c4TB-2;>edlW7Sv7E|C9ID++vGc&tCO z(&ww+dVP}phCTVgyU(A`qPOKf55M-|cRlqN&z|_Z_Tqy(zVFxX`o5p>C;s5h@B7n! z{Czi-tdISHf9U!f@BVoozQX-tt?}|_d4+Gj^X{Mc;T3%U$~8(;?M9)-+bT4+&N#p`nEg&(Z~AJf?XdLz!=VY{fE~% zu2r_K*vr^7oRZWW)aEQ!LQEX=ppM2we4v{(lImm1v?fUTS{y#-I2QAcMWbyZjh-RJ z)yC$>hqf3iNsK`DU`{7fH34L+UVEAEJ5qO5I{fmR=)(N|t@7c0U%5NNmU0!g`~*@9 zr)alq8r3A5k{d8vEyME6BMkKJeK%P(bAm9e;bE0Rqnk)kPM&9}lU&+Ji>&~7p~6V~ zsC@?NW4-8b%2$$GX^Xnm_KH)v%iNd$^i$~N#gSdCIr0|>kwYDlfGnHZrHt6HO{@S% zSn^SzutnUH*{wDru%uafVk#@O9VxGHJeiEo03A*%gILtC`t}*hiatmrDW&3BuT#eN z9B92RnG@CVC%2OI_kGoF-Sc`CFxF2fV9ZK`Nu_N~GE0dm2Oks#Yc)c4+PYiO&cIyT zne0fR4>ki9u8W-uJG0B_IHv-sN7zl<|kj8bOD z_an1HY}gcK;DXgQat|=6aJb$YrMl;E=JojZVJ4k7k2QKG+gEOPukSmIdv(`+_1twIkV;rD4zcT2e&W6_;O}Z` z944WLUVF-^5nnZQUoh{-3{<0gZ{3GkG9D~SXkH3E4un^&(rvPUos+rN?kklwVo~5< zG|77J)T@Ds;(fJRVn$<~yVc z>6%ASP9BL2(g^Of5BdOB)rO5|dCZyKL_bbv|8lc9-}sB}8$9-3-p%~^#iDTt%Di@t zYXek2faYE_)SB>@=h$pIunO=7i*o0N)Qrw=dTXT>mDobiy>=OniaF;PC249Swmx() zZf0V-Jf&7>at}ISbm-eVxtm-^yk_Bg8 zPFP&x81pCwb4Yoc8Ab^A4d%!#x4I#cSeYwI4xU*Od@y4k+%RBe8W&#M)|$W^p~%fStiXcJ(Mj3qj9_ zpt4V54pO@GwF9n@Z7Y?XOJT5iE=@j&n2}gQW~l~yMQAhBlRyY`;DR47t7a0c$NN1m z|J`X2Nmvc7(wy81x%ZB?ptzMb>CmU(ZH_f?9`3oRIL+iWZ!$`Q?G%aHJ)@Sn9Wt)! z5Fwf|dtlwo9#$weSgCi?B{p^mGli8`x%~H^2{G*daML(6o#rj%oKh6Rk)uW$m4ing zX|S_hS~1tE{oIpn;Jk63X8cohUijdKiAWf`SfEu5Wuo`7Tfq^$2~@Cq09ll^rrimR z$>o1Mtr>R9tA~{_wk`u&GzxHuHH>yo-6T(T@1dZJZGm7A?)DI7D6-;2-!j*k8!LHF z!^A62CSfejX?4-hj#6<-te&PNdcSBav|RqD^NvJHc5qW;Me>DgoxW_WWzNJpmFO9! zut^ul>`Ewc`>>s$e5^Lpp+o5+bTGpbV;a1)?i&L$H8kX?$IPKEhwW%TI8PXycjqUG$HcuUJ;RMVO? ztf>hhKR z%1mz>(Z(KK3h%k(QbwakSVyO7xT;h?Ng~|ub;^>e1^sokhP8qQHUs=eG|H&0_%eYF zoLXlgB?L3~x|`s8o_^P1(tEyew-0Ihs6UEtAJT5V@QXjmJL2e?MQS(EIr<#3hnzqZ zuvYBgnnoI1kPXk)H;;fm^U5O=!!Q`-fx$2YnM z1kVaw2^jwHx_26~6G&2A2_8q0>Py6@r8tQ7^?JR5z3-a)HFe@mA7sCH_Q9?3&3nFd zw~E5~su7Yuo8y~ow6H3LO5e)C5=@d?O;clkpc@fs-#e2Fska&;Mv?o9K`XB!KeE!{U-u(8T`fz8OFos*sBeNuhFH{)(QT;ui70Qv2fK93!ljO9m`Vh$wG`O(QU?(&wrtZYt=^x2H8up zMH{tf=`qHb=0fFES+vQE9d@P#iA(_!@6_RW8bFWTn6?I+o>E_qq*YMN4ezV>%l~?F zLdu&oSuxOEv0z3ZT#61-e00@jqZc6T$5xa>9l_Q@bFImHECeLQ_HK=;CH#@t6O-!X z^jxNoHnAR8$4q`^Id(|cAycjW^1pow)c#>@6au}VHUd;{DRU%mOT%6!-O2QY6oVg( zbhKTE0bJm4pHg6wWTHE4Vd!RZMm!x?X0ljz33ZN@>z-TIfGSGekR7tjwbu2f`@W0t z*G$a$ZF~RL2>*RwvpYX`@#=H;N$j>m3>gMlj74Kf#XEDdP9_&^-y$==31nkiDsFVo z2Ra``Qfmm*RwJVf)*rxssB5j{JB~W}w2oQH$;>^9jV!Bn#Ek;o*d&F^|9*xKI`)u- zU`U8(&&r`UZ(NY2*xGS>DNW0uL{YOxuS|1MdXL~1Fqv!s+QR>3GCl!LwPPa~bNB{r z9?}dwXm1*nV_2FjB2uef{*O=LbC)oddFNt)Y6a=7&g}_%kgTvE92AOzGj#C;pDDxp ztV@$hnt8P|^TD(Prk2<^ze%%NI_66vMmf5~+Ufb)str(_kwMS5_=@*Dmi93lurI$A z550Bjz2__VDQ>~O#un`6H-EhiwBKp z{Fqzv4}K)Ed>eavzt`|nyeWVEuAB0A;cUR9^ODdRwWw=rbbwtB3v%UdXg`a>x!l@` zs`<>JT4_9;^GLJi<*l^gqlP)RHszD-ee@MZ$pwr>nmm271f9J{*Dh{()R3fKQ@iiG zL4T)8)1T~p>sGwy>-PVn=*I7fP3#?b{%wJ5vN9(&vTg>NQ*W_k2DJ9(#2b;&(A{(E zPLYO{wUhrTzAU4i>%HXZ8p|@%n8Ez^T)TSdCR3(s)k=S)rdez2s4DD z-6eaiRzxxC1!NHuwLRy*KN%{K&HVAgQXyt?1;a=`=V{PWB@FijhSb?Sts`!iC{S`Gte6|@ z`0a$qA_pkT2b4FqrJX$IYUJ?bG23#6^2%VeL8~dYY(2NXk=O77^jHAea*$qjjE zC6t=|N@tC+6e*qioZ?(oG;wglX@P7QcvVx`nKW!TqHx$1h#{)#XOcrywva<^8WZ)tE)j1!vQIsG4h{`8(a zTdUcC#JKGAs-`so)oQt!%@vfjfyQ2dOUEJ=BtDVjJZs7H#TP&90s)TMG0Pz!H+xtx zB7mg}lFdn@PwI>jdol45g!|oMJMXMYzxCe#{Hxe?e);)}^Q6GJ_sTt!Y$xwTqW9Y{=a$Ve(>t`(_7@dm+Z;*Hf|2q@t!0; zNO$q_qT)8TLoQ>;&p^I0xbx6SZCT5p?-^?XFJR>u-zl)i*~GXJW`0W<0zm@xFniGs z_F?dw7K6A4ZJpLp@Wril*-1nX|MvS7_I~qWJ__Bx{8k{fk@GihgWlAn63YF4i1!-G z;gcEcM4J~JvmxL!S`KUAQ*{|DeU6p0wE!y6h5BMbu(a%@-qy4+Hn>}Xu}$9xn5-aa z^t8;sxA)}MtoG$suQ!qvpA`9bUbgS6&KF;6t24JQ836ndjX6qNs|_k+-*Ji#SZwo} zJF%XWc|yR!+y_qv;=f&FPY3!{jv?HSf)MG%EF4$XW)88_phL0`cbqnUc8*=-H5rw$*h30(@c?;_5Ro zHEXnIIcyKUsM>**VbQ+LKmToXxnE?wjVHSDJFnX_5-<9xy(96$&wuiL_XJ3*bE1uq zEs%1<-l`)i3|x-oBB5GqnH>ZQ4mvz+OmBJwBT1-Vguom6e9`Bj^a?-8u+* zLpE{s1-)s%qBMD`;MXp<}V4ycAMj(29q;IJc<7raGSNr4NlkwA-&UJxJaWNEJ1 zReWA4#K7)Kt^+x6(N-keCF027=yKQ8g}jrNxZBjah0xsF1bed^{_Yp?d-dYf+x?3d zzlblttXEG;pF6MLQ_Hx$8(#IJuYd6#LcK`|v&Vhy%R$3-GxI%{dM__Cgqf4hD=!9; z-nrXKnC&Dy1CrNCNtz5^r+1o2rD%s5xaPwKx0(x+vFb&hmfL*>SD%zk9{$7YTWGb1 z6>mXNnZo?t#Z<=`^6(#DHtF5E%F+cn zu&^~Qw?Gb~6#T+WD!mQFysdr0aX7DJf|E)}7W49XpN!j^sFSZX4O zMY{0P2tUd6YP$v8b@(=(98K{W5jeXxQDXSt&cc}94_L;Pyn0Az4bQF7{Uoo(Vyp-H zCA3eLkDV2@=;3c&Oko9b7&0;faeKA%h=F!P*mFB5;)u2qdU6PlZTob9s1nb)wMG+U z#i6Axz|tbPg_?Ar=nHc@N#viWRm-!dHALruPPN$DY7hU}Wy|O`J>}6Qo@G;1=a#+< z>N!SO4k^<-gI>Uf{ zEVpRph84&q<7_aSuUg;1#q2CgqYZCe3(pr7)I_Q_z#_yc_-z%M|3-z@*NB(+Yok*{Vi^&YlwyhdIgA4-k>~f2-E#@;Pf2 z6s*Q$w3sP5C2q|R_XaK8>NWr17cciOo;scHyJjD!1A;27A689Kv||E!%Lgq#Y5?G` zE$&EC0W{r3QwI`3eB1FkH}kd`8LPSX($x^@1tah*LUgMcYi}B3Rvu54Hgq|XhLl#Y z;Ue_#U%l5(;EylR#p6eM&7H5m{G)~-RUaCWD`nXl)lMUCq`GOzBqRe&Nm1CIJR{vY z42=a?@mQ&4p!VX*6)xZihL56_xH;nsZ2_BV?CA!l6lgBFn&<4?%g=2?@ZRW?CjyI? zuYUdW&tI?g>nHm5J1^XmVuUbu`Ia8yM_>QqPyUrqKSvL4(tg&qDSM9=5WQ}sS1n~E z1Bul^bQaPoq_^3u!Q7@xQ_}F~&RXv2h?fx9m}XFQj#?X?mkq_YUvXg81I`18ggc2n z{H?!o9Yx3vI$L74#XKQS2UQx0HOK=?IQ-BkY78mf%<$RQ2|5iip(kRrD~)OrvGZ7gl?k9mzSSoZ0G(T)hVZL02lK(@Stc$54`Fxo7Ytz;cR%IQS=Zdt%>1`!UrhrL;Zwf^wm zTy5~-%XFZa!=7_4t*di#V>?~@L4^#jW%fa^Eruxq=aWHcC^<$Ln(Rc(59BukeKTWs z!~#M^i-w@}>J|$rPujO$Iglpad_4TOpG0%vzq`u%=FkwUhYJOmS1qSgvwaYEKB0MH zu)AuD`SwmRlTZ8v%N z?=J^D*GR}(QACRL*{0zUh=Z5xF%~|`(`6C_P1|Giy`pv8!+1lzq~gk1$RI=zS%4QE zNW*Jajk^!egjgD|uZ~qblXbXPlcb0L;R7_|sYKxx7gL$SO_yv#+e``?i7N)vkq17H zT>*QJfHjN?FzMKU4sv!%nv57V_R)=7AxEwwCP~QQM`N1QF`zLNy(j0+*+}Jy;Qh{I zv0LiZFJI-${qn^l{O!rr_r6Q_EB z7A&{(@Oy)8Zm)aSV^){3=ZOO2&MWuP`VR<9L=N1g*;nYQ3Z7HI_Mwit?1{q3hUZj|EJHsXY9TA0l$b ze0Ri&Be0XveuCftW0Y9)1R}>_xB}FYc30xrSBDM@S1yRIFeaDEX{X$z972Ud&BHC_ zg6^$R82&r*6)}m&IPaii4u9vZ>G95BncL?+UcGtw;?3J%fBtl@z4yvJQ|9PRnWOLJ zxraCfG0xh_z(DC^7E&)qHOMP)m4lnWw`^WZp|vg)Z$|@wI=i0y0g!>8XhBnq{LB;C zO2^4fnz0cuTxAfC5NVEM-RE33#>4;g0iOFo2Yio7EO0lF;c6cTeRss^nh*?yV{E34 zB;X#Y3t>XJf}4sRS>E8eCQ6=bLStb)o8>`@cgR?ywT|w}+!%+1A%Gczc|?TXGEMHR z?YMdFfAouZ^ZE~-jQQ`qXwO(U>79D(@#pu^SL>bA5=Pq5;1{%Ro}6uPqc!EMOgduI zW}Cj9Fid)!wzs@a(LU!WfV%|k#Gw!^w1{>_OeC@wlrsfB)v$;;ga|%;U$y)^{LdfY zk+)`nfUDqEI(vt72@$@hPuK2aj@F4#dvAjNe17D5eLvg*#Jxv2Z}+eiN1k@DX~miks$=hLgseOK@Ulcm0X=U+p7e)SO$ zK8@N!5^qMA(g+Xqnnk3`IP0u3gbH;!pbXn)8M&hGoZ)rtW7K-RBnt9g z5(Ht4*xh)s7OX%Buvjo3<@Ja?3B0>EQ0~@S_vV*he);;Vw{KqT*Pp+B+Woro;yu&- zdN=p3zo*>0(rt?uMtewjCaXaVt(1@BYk`}!6F8G2KmqI(22o{0YtdW3ASZ)%EA9J4 zFvTieXh=J>38Q$lS>79x1f?-`3`NG-g-Tuh;eYuMZ0`|E_MA2+7{M6Q=rp&jyNCKz z9>_RXxO_%Qy3eU;-U7bf8C5j{CSswOE6!R|w;6hG2tovUuTg{O2buRv$vf^2oJ1Ss zja$j#ozXhCk3PUvFW%HY@=H8kPww9LUcB#d@Lf_Tcozf0fIN#v12stUR0`S2QihNI z;B-ba)m&Rs9spG@aJL5&AU#ezscBsl6!aO_4~kl@9TYkM6{$8jBK8IriqR1!`m4N ze%`#;=s+c6q$!)v(b|Zc>ZhORKzhI;sR7UC1~9#(yr!WA3ymv;iD!XRWwY@KSdKNv zrnzP;ciy+c>w63RZ*v&y&5Ji6X}x~)_N$k#e*QL|`k(H+fX|d<@A?4ceWAW{YGFERfh-;os0|H%0~B*^yt^AbM#Bk1rfCuZ z${U~Zm4Y%D0dq}#AmIgCY_y|^hBbwXPn)bcwy%f(;{z0TyYmq+?LwIK2Z8Eng_5Qp#T9pSEP*4%<3${%_~8C%-v^SZ6wkl4#AAtp>|q&95~!8 z)w3|X@`)XA1Qdes?!&w6YSMLsJ5(};sKs}55dP9*2jPpCU%qKppFf$T-FXo|U>o7@ zxoIQ(W(hugYim~Eawk3}n!VU(2rMQJuW^onFYQe187O8L;yNX-L%UE2aS*^C0`lXg zm?z5`$*EFERSmZWx!hdp5VCKkp+Ibh)3`l!?`@R7HB5Z*@{4+2HFocXd)iF}8tvPL ziLZb09%w?Ra0kK#ctU*812udBb1!(e#GAH6)t<4V7Hn@`3X?Mna#4rwJ;_3B2prQx zpfvX80?&Gax~Y4!a~_lp$au9jV)(F~Egt^Q4>3wOPCBDHI-rJ*MhDy(+>x;@vgI0z zm=kNnC>quR<6GO%@z|0Sv*g7~Ok)#oR5jc$?jv08C!i}lN}7oCSxVSpw8!qc&uyhO zN9x%<4$Xa#AOPXi-U}{AY`NRvm?_T|2XgX0xFtN#g%*^bj^WaA812Z$U^Bsx)kdu* zt0IM>Sw%m#Y9YNgN^LxRy;2K_Uj6 zA5a(@T=F1LLqQ3rVdGZ8%TQ>=q%aGdt{N~Ei_KFz5eGyjCt)yBpfPwg%_d`Z9U{oI zYCZ>d#M(j$J8exQEN&?N#&+P;EoO{42EoCWg*tUJx&iPze3#PT@rv+9C;jS)xa`g= z_<@xM-@YF_zW)#XNUAa;`75(4SxF1CH5P$f0Q$uSQEDum9p=77xB@k}5a1w(z8iwg zd7Lw(PZ`AlrU1_ln@K~?39XP4s5wKLZnPeeXDn@t-s&7Z)N@nzet;BjQQUQVYlOc0 zo`_lTUNF#m+rv8Kyq%mq1sNCUX22n_Fy@rzJeFtJ47}!r=-M4k2FTGI$sLE}iTtcxX1e z3^%Qa+T68dRjR=~3cHURLCo4u=th;XHpfz;rK<_NHKT*MwgPk?i<5{hF}@OLS&@f{ z0HY#Cnx2FE+&rQ=ySwrDuA}>RGQRqQm#?0GD(}67AMmOCyI#Nf>yK~!qdt`35ikG~ z0*YlBBC=tt@1je**A|1IqlJ(!o}e(b4LQcq0j$j>23E9nA%mv1Jju`ISdu+1*5Z@yB?f05bfgTKF=+H4m07!5TvK%2T0;T`bcg}bhJ;M8kA#yP z1YjP=#zkEn8|)?^L&n+|hBacbhNuwlaQRt>atJ59ZPwHN_Q&_L&*Z&V@FO1IALo(O z?ME?Jb@Ilw%Gu~dWSzlE%t&;{`PYX{8bqpHHE9-ZcL$z+fW+0N5DcPBTQ=@Hh=l4s z*1_B^3DGJ zXO8bXui*zizQ6rYezO7}9+oa1a^2k~_qMhSbn0r4CTKC7@(f;pUep*7fTrLchqOF+ z|1OqJ{zh}zU#~EWOiV~pD;RR)5^XDd(Bx9z!G85 z4?G8H&rYDDgTyDf`S3ibyLI8T6J#;SnY~?VmB94BXAovS$ZTNfS5#MWDVdL0M8~#V z-H|m$|IXw4xBuYfE0yO8?|ZM`2Ub&E@B1Ux-RynIu`}Xu$M&J@Cg6<2!HRF?t}$gt zOU0#}U?`t1J7uJMKc2Z{>`D;)ju9S|(_|nx?$AlZ%3_0Hg(@m4hjvj<)6sR^Dl&i| z0Es|$zlpUCA?8{GgoatCZ|zi7v5~*TbXvw%z+ysj`MSW7Z4Fw$?(Ggyos2=eQuo9o z7(Ow844EZ8*R17ZhB^)OT6RBs!}R!F2ltP^zD+*Y2)gqEe&9yXJ9o*C@j$Kyr}zZV zbe~|+N`x4kA`Ek-*?=^@^*9`62-{d5GqXt8ulrD7yo`PY^?@($o`7s}gExqwe?Y@E z+cuq2b1*~?K&3>WZ~G*Fbs6VE2DtC-&``7-vP(9~gOsxkcpyN%OdTL8AaNLjA4c*r zXj)SRz^UHR&+lvGN>9xNCZHZB;~pRsL}54{W*ieun9}c>75y$M&tJq>U%Y*w#2 z_g=>j_+0+guPg7b-~UIwRUX2{#nA@ab4SVA(Z@;207LCS0J*%MuCc5@(6d}-tu3iG zd0P`b8X*_g&rXfAh7%;hh@3NkTmy;=Zkz`2!$Cm+wrXuXx3|hQlVteD6z`%fEt)NB zT&-?n5*)gO6i}#I`@i{stcL;!HB|10^D+jgF z5YjWngjeg|Rp@*ZZ2ruKdG8hcz=h7cvF0CR$E3bHFweV|)2Igbx8~qpyt@dX&M7R@ zH6REK9?;kjUHP6Dj@U+bUtsDa0A428#+vRucrz_2TF8$Vo(Lc3L!li7L5fVh4Hxc- z?suFXyyZB-P(AsQjBYIesFvClPHT|8;!=hfvLT1lrR{}o-%RA3GaOZN+}J=OkkyWG zRW`xX4VeTkX@meM^)`2BO8?vI^PhPj@4bE>QJ?=Y9!FhBPFQEHhR$xn@dncwBSi!8 zH)D0+V|k+;ftCxc8BR8m2SCvS(X#DO*J%y##;%hK3amL5lhJ10XaSYkK;*k7&8P1X zJj8ErlpCnBF+q&t1lrCu=0#%3vl{Kbm(NI-^gbb)?ywId$~@*uiKe4Av_xmMq0%pK zU3uDo`vmygk%s7E0}QA`E*=F`S)(x!vGg4`%E!m?WvDzUy6?PzANWT3?dS1&`yXC? z#GR|EBWh_cl>;U?C||zdTik5`+1(0Rhkbs zNlhl6L>duQJ_#QhsAaoRb8)?$b<X+u;c)lr%qB+^@?Wf#6ZwvjP5b)=a}YIdNfXeAPl;z(?6 zolp1BvjD{o=#tQQ6o%S@@E^8u)iJR8lyV`5D}@9J`kMT zzpK#s@na+Cxqb593;2Qe$!~XpKFU71Qg&uXh&8&mj=YC6+4s4UupHbOEOq)>EG`u* zjiyvdYp_3!Ot6{eo+(YST3lPY5)a-+fNR9>=Ftu*j`^3EUttsfPpQtna(asj9 z2|J8EzyOU2RmSeLobW2)0aZ1%GttuR@ULuZxC%xfcy&o5qYjKQFKD(w2bU7aD6{p^AcFwg z{C1bjEsm>KB-aD&2Mw4w&X-M@+()MLKiyxp#4)vKjBApCjK#A_!X1W4BXqL; zfE;4I0Bz2U9aaoGd&tvd?{#Ej+BU(27YWYS3Prc7G_9odiluPB( zA1>Gz96q_#rZS=+sx=*8c+QQ=xC0eQ)ncBu=X%nWEL@ciMlLyKbOHwp+y$zAaMC8X zy%qr|PSY0>kl@F|E%Ru0o@sfUPI!2Cj=4b|ZkU#{b)YC=wvV=GyCB4VS(`l8tO@1O zH~iC|{NQiYo44Pb+x4q2YrlQ*%eOB-e+mb=^ZGpp2kGxXP{01gd*GC@qa(6`R0DpL9eYAc#&TZqreO#|@&c42X{F>i{tICUtn{wbB^g2*sN*vS@hEiv0$ zHL`$MK0pGjXtxLIy4>liFxsJ02HvGPo3Bk7gA|-vH{_QN|&VM4Blv?fHzr` zz6eofO?dNY4lCis`Xt*MFEA5e)rs&R$cX}WT@ccH1NhtqGM;m7q%ssY8A!wnXeNH+ z#QqD9PV5UA^M^lt{|14Kqg)p#eH>I*J78?rNWAzn3IheS_vSq2>|(lAC7P{O5pF25DOlJPtdpnwkqr9z)T+KtGl z&7RrxSdN~a7%EJwli>vd+*e z8*0*bsb~JeV|Ds$EpYD@{J?XLZ|PCyi0_+muBZM>CJ40(0$$XMYu7EX_Oih_}%2T(t- zuQLvNV#09_k_7i!Mm>L%^z`JB{6>%cOfhip75u=Dv*#R0%R0m8EETz|94icc zx*f;Ovz=T2po@B}gXwSg+{@)cwnwXNql(5bYg8ySbE5jJIgmqE+DC2#jv+A*Zb3Mu zaR42Kj~P*~311;ka1-{au$1f1Or!t+o+)EJpcp)79o-#51ueyy<%k^fRx7ojk-_5i57D-Dd087B%S&KGh6AXc|!3!P;kS+8n3fdNogsJDv{qC=xc=Ptf-+1%- z)r&W8V|`vP9x+)j&(ln>J1^wN!DM}aWBOE|nCG_y&4C~YUBmO7HlSM`2F6AUfkb0m z!Js+%G*;`YX)%~NX92axj@S&~l3|6$6C@5RF5-a>kA5C$IvdG5(7BJf)~$f+-XXiU zl*%t&zIyp(ym|BDeE!QfPm&Sty?DL^pynXxSiyiwH_2Nx^5wG69+)p|&_g=zhA`;{# zBH=v{ir@dP>(U*0+XC-|?Ag`|YE-@#4yJ`G}@v$nQamywjg=OGZwp}kf!GKpJ7P3_iImM*Z^g{^V91-l|4o86gIdK+VQ zU;Big>3tYG5Le_F%E8sIW`g`37X2DpaKnKnJ1VsHu zM|{0~8oqq*#d|jElHb|k-UCGH>e<RG+ zbdjEni-#QC>DNq7(x9>T&QqtIofA|j$!5F{#uy{1Tl2kO2O>V`=pQwO1S{5bAYv&I zL_BMDE}6N&>UD5&?BW0UBoYY!-%lce@E`l^j}Hy~$#2!G{W@R1`uRUVuYdAeufN1| z7N7q^fB0v9_Gf?gXaAVeKQILo#ai3POsp>=(FtBrk<98t(owY`ILo*710a2kE<={4 zE1_8&BmpA$9y58gRT%k$#0w&52Jxv$$Ql?|qJYenJtCj94DX%2c(YOc`CrH9pTB(b zgsFJ%Rr@&cY#%@z(6dV~=~YT-hb~^grQ}KRV=SRIyEg9P2S{jkTDy1%kK=s-6Ughd zX~h6KAKZRh_fcQ0^i>fuI{D?`5~Gm*_S<0I_9dRPCyIbOFWj?LFWpqVpWp-6+Mrb@5n`?Cs%|VTfiTsUxCHc5`{?#8 z>$5pQ!P%zInNT0iahQ;yfZ>F1_#ngB);hYN@UVrpET?ZDb0z6qZCP%T!OnGi>A&~! za?6axJ?tO-{N;L*f^+9(d*<5DH`o661Hixct>acacjuS$-1C8Z`ZHsGkdF=W%w{J8 zm+-lw!(CCCUeyWl;fx{Q7McpGQAYyI0o7ZaN_ctB5jC%*rI`b-3sgsQJv7NXFpoTY zrEc}^UHb~e%fIUw-xai9rHaP=;UE7Do3`;_Fl%c^!!0G&2FmWtsYh2N*jNTF^K4ZS3l; zU`8BEmI;@-i4~xY36LNB4c=_50MrT42M|}O`B92I^WmTP>}NlC-`~Hvi5gc$t|>eh z#+4Xvf%w=+2@olO53=o<#D%n&Q_EuWm}wK+%sH#AK<&DZuMD4JYt1}hq94XP)m*E? z5rJvx$nK1Wht=)(&-!7g&~*$5dWQh((FQfR*B7*!7@dL?;-aYo5M|$X9MPM+ZAQjw z?g*S{VPlzhnnksV%vgKV81wq1RN6pPid}H*V5?KNH^v{nd{e)w+wa}I*X-HTn{Q6< zPY}Yb)AvF`PuncC5ti%F_I4>Ed|;bfqpsd$UwxK-U2}}k#RPY-d^+GQ4J_+6lh=t^ zJP{cVKpOIEk~}eIBZ=H-s_Zd^&FBeX6U2mJ#alq*%Hj)CX-jNRP>$7`S&PSjRDzff zn&kz9&mJHi!dpSpQ8BJwfC&PwE1+OYJGlQ(^@+!7)iwb(yX}eebAn0owie!TO(ve0 zG4H%;Pn4lN-`(ba^z|>^LuTT-)ZSBJ$Ibx|Er6mMK_}XK8`Y0WyCTdHcgF}fpRrW? z=9Y7`)6%4+aYEk+&-)Y(OzT)mCfLk7Ut6a5uNe8*Y~0n-!B7ArX@db=Z59$9X&@jk~g z+h<9QJnm~bL1z5$PvKQ?;I`(8a+z0|4%0IWk10k-cvkm8Ws3W$qng~p0DR#elaPZJ zG23thZdj#Xsc+7wvtZ(SkX$g^acNK)YG)Ka_15+{uRA zyM^J^YW(L|xMlBTL9Vj=6mYfC4?>h7CL7^%gay$+F}2T-AS$s)F6rQH89JNN z;qe$vCCp*xQ-9YcII=E^t$yv@|Aefay*7;h+8N6PV+Fzhni^L`Z=sxytv-H?zeod;~6-IjApKwU;PAGskE1H%ZnZq<=P+}hk=+MR5aO>)~V zI;9s{)~ZI^?9j%D>~|}gOGfaAKfD55RuHx96JdExBxcy<>{EnkrdQi7$VU^Tv*ZA- zIOd|Z7iNplyj@Xa1g*|dspN%WiDI(1HM*bV)mV%baX>)_A$4PCMLofp-uva;e6GLy zo6q&jmtWTBFJC>UN#{&b@G)3eX=W%`Y|djM#5Z=v!HpfJgf6)R+;Ru`l%)5QK6Z7C zntZz#jFH!A-u3?XxBcJ**J_Wg zz2Pnq060`TTW3v<%WJZ(tT9F4>9MMk-L&e=c|3g!4xl03O-~y~`Vj3~0B-_OM{6lD z5KyaQH$K+ToQH90E$z4M2ZG7q^2tyL24I3t9gcx10xh#FHJCPl6`jeh2HDZ<#bfE{ zvz4ee3)+ZN4@pESo5h~7X70ieE=^~U?~!8ttk!EEeBrDk-<_>oAO5+|E`oxerqn6+ z8bNB}BY<8TIhMGt;XJFKrh*Z~07Hn|P_-g6-f)M4C)`tpK8y`P4br(?9OG(eX~m|}W6 zxF*eJ{j|Q>1X3|vRzsE~jh4*NS4tKb$;dnwPaTKMX?2jvt@3Qv+SbcJ$)OqC-*v7q zx)XFgR32eF5|esWA@7FBFbpjgJTZL8ySt1M@7-peBXcYX)dWT8Ao&5dnGR*!I9Z}# zN2u)`$OT?!AW;O--fO{DRI8U;*E5&tlR(#dznq(o^UuAFub%ldqYV8dU}6hJtI4X< zO}ApLamrXj>YvOWv9)y#?qdT9Gji)9i=+6)ckz_fAhJzYZmVVwi`Aw#5*vwxlqW1^GOEci5!}l!@EhtIV0Tci0uK-76JQI zNG`>}x_ZNCl>3~psD`r*7`}oqxoNblg-8YkLS4b)dHCl)``O?7-rF>N6Vg%P3LJ8L zsjbapb=F!VpN3J;#B?-DHP~0ur(IO)Oot)g5uSzM@|^x30P8PooL)* z7I`&9R|TQdFdCfnw=N;N5N2mfKr6-5WZT-bVebJBGD#5bS=P8Cc?<2)zK~hix@kM; z4qU9MnS?F?#_K2nLpwu=h0IU}&s9u(d)=N@ z%IS?#PCva)@0I=o{1;+Zt_Wy1Robh#C!igI{DAA2cS2BwMID_9N-XuTYRW64TAbwF zb6suMVc5l~_C6wluxJth@I-WM?OBE?cu+n$u8t(!`6KoL8a7yGWJgDI58G2EIyj59 zjp5zJB=4|Z?U0Z%=Q_v-J)5W>>K4AwEJ-(R*mq>bneG>*WOqBRn+jOIfy9|7CG}j=dhKxB}v=CX@`ay&^Yq8CawMOFI?T$o}CNxB$Oi% zDh;lyaNMg;WFsWx-#J=wBu=Tb-8d&UsBsX=JkPoqj%XLlA@wsm7(AE=2MBY+LaiGH zmpMB(&!_-sj?S%c>fSHsIef(rA7dDw>FcSAu)+BWwBthV*f@LY$^b!yk@3~5QRhc05^$;8;=N7_YTcvL6kqtOY(Ve!Y#q%lJ$r+Z;k+r=oU4zX;r=|305?GL zK?Ta@$a65eZ6NzzqeRKEc;d-{yVF83q;ou8T^C}KaM%FcCk5q z@LC6r@2%SQiZy%sLT08QOz+`eyjtipRs%f%(;$e6y$8q8g)HYOoI3{<_EN!)8a#D1J=-L5kILTqBPJEah1=esuq^i8}8h{%DPJJ1^9>w|x2R&N9=^o%_+ z_~Bo|L#4n()Sh_PyJHqI&w+ZaOxBeoJ}MS(sng(P6+3%PG>T(%VAA248p$@cZH#|n zBiTAt1lCXd=g}RgJd-#h$CzQ!!8JLZQiCT z-}~h}74OvBx4(XIUVrsPynW^ohab!gLqi&vCWnusaZr3lIBhT?4SoE*l?AgC(D}B@ zfoBr_Il-GL^mb?f7t~NRVZN24amW}8{){d|8K|GGrlS>9x1&}(**N>x&v?(Axe(1; zTL;^*5a#ToqZQ@7JNdL-oe=o5RHhA|*e3%}iCURR*{h)08d9J8>PxU+IwK$Dw2c-Q z>-L?;`Dm|*jX(mDzR$zI^4Y}_Sg>YMlTlVP1%#CuG8SIcsy>zv7&&x~wun`j`@WKU zu1{zBv8XG<7W8?NbugouLQ(6yIC zrN29=+N!kU$mNnke>L*fps9Y29yl%iEZi$GUqLnL5)IoDhM?&>D38 zx-=yXf9|a1o)G7!oZyY2OlP3TN76(fX!(^6U_BULI9k+6ZuK@lIQjC4Hv8U7_M`}F zKlOLSvX4K1h$0M4a{#z&kfBSC9FKuCIA{(zv&OO%&8u%VtX)QIj@b_fc}81>qXrF-!+cB^-^k+L%iUrwfkkqRroD39PMz=la=y8letjE#QoujmWd|_7 zt~t<|+^2j<4qX5kAq4p>JBs8x^KvbRX>VknngEOlOnSLi8|er86#SyGx4MGg8^~^%8hfgkQ4863USg?=8IrG?bf)jAIfh_w}>r6SMOWflq+qG zta)#XybeKgP-NB=!jaHetL%Hz@4Z#h-Fexb93+>j{#ysh3Og!QNG9hoqG{*$-x?rkc4_}4yr|09!SQ(>p3zF-6) za@{2oypdrcwUD!-6W{y2F{OtEW9^uoO_t1H#&vWc2XMl4a2knoK|Ee{*%WzYSFMA9 z=UkeMGmE2hw|2Y7-g}Mzn8w|EuiCQ%6S^6ge1bkoZs=CXv{MV=-<7DBbwM@@w#2kX zf$;f)%2f&K$=(Ugn7$WRb2b>BlNypB(SqG*?IXUi=W*Ci5n{R4ISf@D?(DoBVh{+R zZxtw{gm%HkmF^0d+Re~$h6|{m-+_LDbPi1+<%yZr%B?gcFki1}lae$UDXs8e^gPiH z;i}w*4Ms@XQ6$emMQypErRB(Oi z?4vcwYMclG+las&36u0}vnnnlJJOdFDB@YRj}xjfF6!vi8eRE$8_D(4AMLFI*}_<- z#&qo?kVk>!07lMtshO7Uy_!Az>sQZDk1S_&1G!0{Te#sVRizQFZ8oNM^l_Jo76YDr z(X?^(@8@#Z6f?Q29Ie&c?1s2r*V3SZ;CD&si1My;jao_IXS8tvtRMc3&#ssYh8qK# z9GGcl5y?s)j8jk?jAgA=7DY;VSf}yg#J=PMfck-P1H?qm4Td40a&u2<39K!7#WFbI z7^-An1~W%Nw+f+>wTFN6Q&7j>w)XG*a&Bw6&%gTRBW&xLTCVv5$yU?MN(CB9x zF5zhDAxTB*h+Qh?W6Mr1bT@a~Hb6CG%quKn9}eHi*1*5Uu_ZtQIIr!~kue&zToHXr z{j7Py#*G$`;9z;|??b$SZqU$zL`?>)d2})E)Ua6uxQWGJ!i4r_u@R6`PP6MgiH@_P zjS*18EwJVXs1ym2l&fy^Lt-`7qZLE)452TQivZkV`A$AomPszlkM;$7NVTu`szO;A9`;9Y>M3B)99_%W-kY75P{Ez{G9 z*@}T-7^#PEiHM)R#Qhf2b?5ba1`i=WwRi9k`1wzjWOwxIuOUblBj_{``LV8{TL5)E z56-?-3S9z%Llfyy`^ehMGdj|c+s3J+Mh;`sftqYjuT!$Pt%!rZ^%;hMyAy*r(63yV zip5B8{QCMhuYCVyQR|)H7(*mANGF+dbkd1;nJt^n|Bt;lTedSfvh>W_x>&7ZmAV>M zCds5b-6JbJ+`~PB4|B}iJ;F&;A%PSCmYV$@8oD*l^E}To&5~)B-ayiO$kvY}o4L=) zYRQPqeX<(Hn*phm`p zCpYcQz2qWS;OY#UpBN_9;+C=jRlMCG$TwP*NHm936cg;_m@XYXHMgmE%+wC!uGH6% zKG*OgvWHvXnvCZ24g_hBu}^nzNc!-mr{kRWa~3G4A-?y*9g8dwekJbm*VBi8^yBEdlim7d-+jjUizY z!I<=#0xgdBM$ow=Hl@_h?6FQo8x^?MqyHq;I9nxZALEF8xTc4$5-+`2D+Td1WCO}aK4Xd)# zSU6x*jMbD7wK!Cv9U5%02;E$3z-3C3jX^LZ0Kd{4q=2dYoB$65k;p@3)Rbz-0R^Fo z=YlE-xo27D;qU(}CHpfcB`aPetW6gfJoreq&YrVqln*tJ)i8jDvpr?w7TXztjh%@d z*Hg23boXKVnBwlFr%wbn_ZFMgZJlZbQnu&b{hTwG*GbS?w>07@YQ2$p4vUo+2q@;)xTKJLS^vq55D-x?|yRV zv(26b%ty<0x)GXKZC%PdD1+ulrpIZ9Rh>gwpy&~Ffh}W=F}zJvF6j10m*JbVb{LTH z`v65hycs2gXQ-T*)^uavCc|%~F!x^L|IaR#d#~FQoG`xOgz>ZF6?Lx#jF|c|i3>R9 z2Jp&85@_p!*q2i|hNXmQYVB;}q8C^!UWGa%V{0p(vu#xj9Q@41bmr=_FnW^(*=}Fr zxXLMHE*!QWwRbrsC_ukLj9im58)2F*C794z zj@m5_U-4U`dDJ|J^Ekt_$3Qa+wN%QiJgGW(+%`jg=3ssJPanxF?!0V2)EVG8snhyk zLyVB@J{`m(lNFVPKIR;=f!|1(qsvsFjN9qiJx7BX*$vH70Dh+K2%lwOo^DFlb*3Bm z?rMR`#B0aWrBj1f-}6>xfgUCM6%n+B)9S)5S&qeBd|hdhn_^h^Nsb}mxG*1xb4v!d zZ8OX{R6zG^hp;v=JBi)U``*)pWL9^Ez_%w*&XqGbX$e1KsebkH+GdY>v-e)MC$<~i zY`0ItQWfX3MqdX~#9Xt!<&*R{sMzWe< zIKqaz!5D{DU^dm#+nQ_2n6Xzt%HxR%7$zNb?EqxMjIme)vA|o}7_GJ2 zP0z!Owjk=uC%k`44B5e3Cuxh-EB0>HWeIYPay06YP5=?78<`E;)|w{)mJ(r^P>M1} zjWvBu<2ndKIvddo;=X2Y4FR(wPK?`z%J0?B-z4_K%Xsx>KXM7)dF`H2XfhZZm0onyuAvlcNN5Og_ynzWD0t0!U=xy@u zQI~QiJ8+<_Y@00b|0Fmpkkj%=+T(k%Q9qk~S;yUgR+NG#@iFYuQa7~tJFYqY?6emj z-Nviynt1?oRfJY7>gO1mCAQn%XJn_Ael!QX=rci;M9L=ylR)J})7u-*-*Vo+Jn!DU zefKyS>CWr+#D3!&NIE~q7kdH?DoE)bgFr7Oa}^%*jF3XMeAAt|TJLQ_%vVEBm(v_- zh(#FKPX#kzck#g^I@If4le3M$q1^-s#FLErZx64wDxpO6qFcu5P#)_VYIq*4mV=%7 zxS;V`03K@VU5pCE!mDl^LTN+1D?-J+1;WzZmvp5%BX+NXIjNWO0R6CmkX-EA+7#tZ zv$6I-H}MfTZlBlwi?fk~c>K#pmzO&)-Vc?`ZwRV}5P9u`i^7#eZN>)M_c$)TWo`@^ z$&J~##HG?U_o!lPWX2gjP~*5T;(Mwo@QWBRg;r;buAqZTqjK~{g)iw)(|t?kpPPDZ zSXt_wv@%x5Xv^24bB33S6A<9 zq`|qDFR}@-S?H)Xfo)y4o9-{-^77&B$LP%ukMA(|UcD!GUBB6NzwxUT-wU*Ey@kf? z)wd_Y%P(VSP|dJKM<5Put3l|F@v|?T$!jJhp_MgPKo`G|J~mEY!)*B~Bw{7U7;V~c zAs)zR>F7#c8lqb4z90VDcTiMzI2}vc$r&_y`U&-O(E?%=$SqgtV`K_oy6?6?UZz;0Z>S--v3m2)?i@g+sOz z&lsbeAO4|_;EC{lZ1Oy?k9qRi^Ps0q5Kltl1XX|fu|2CHFdL0RyxMTlB{{I!Qj)el zTbm$I3pwt+6m_Wt80XHMfsV>zaM8Cg<^W1lAO7JNAH^#xutj^$hJH&5A_yBWDKcVD z3>jAR(V0D?`E<3JWZB6jiJ8TkV-g|0tazU60H`iKC%){VKB`hK0T6&+y z0c2rllM!|?hchws2m`|)LgrmIU$8AB72)9@een#+@gL0X;PEsBBrF=OpnXQHwhQ-JcR#cQ8vPMBQ-V#wSU56dH^%~zah$y*f( z#(a?OT0Dt*gdLIWKpBTxU(z5v#9T(1hM+s%VVs|85C7PUXV6>tLA5#_Z!RI4r&kXp zJtGv}+~p3-Q;0W0v|@5#rVKk2$oRsw84=Y36E+=7JUNJoPHQ@pbO^;(ha&elD(@lMDL0051RDI`tWGNV!kP4}FYJ;b~WnEHLd z-_9KY^!R9p$6h+d!#{Ct@ha#V%fLHxIw=e2v?I}NQS-f<4xBF=Ii}UsFgSDPsojDN zfon5;Z^K25V#Ms(XeCb#T4?90Xs-rdPlt|ZB1EGPk0Vz0@K3&Y4mIsR_2PnPn3~H( zaj$Y#df%<@z95ZQhUg|d9OE)F>DYC&YmS~1hkGCduPG!@mFh<0Hw-iTHwM%XM-6i+&EA@5|Cci z5af!J8IpkBv41Q8cw49c#1cjT6AI-~UDaUMGk_X(p#$0^c4e36MnE!YW@ zg_p>}Sp4>#gxJTa2u4H@d>>G+28wNqxDX}#K!Hdbho?%Tm@c*pcKC zqG&XVQl2#tqBe=v0u8Pj>=&yiMpz11xJcV&x2>tyZ@0hy*%x1)FW{WH3c8W)aSZh!%_GyYT-V8cGm%=VvmW66vAuSxmF>^Wm*p3dHQCODNyP%CNSfw z!PlgiFkknY$ePvO%9i%qY3Hh=&G%}X7PhK6no|cV$qr9lBcuxXIk_B-AaJmBcSE%Cg`h-K8ba!Y2$=FbXW6bP`_gMJTEAh-YS@W`^#5fo|pSkTI#)5 z?J>#wi_yPH^8WZ6&+nw&%q{xy4xJ5e9edh@373((TuVEs*G**^MBsc7feehhGj2ak z@zf11f%?oyvhi%wbIZ)O0&Y^$-8E_nZw{F>%_=|_IDQ*!@Vo(iw}8IqzP$%LVcjrEWNdF4FLn1gRpS zF(IQ)sc8-9gFzh}!Kv!#%3?yDvC*JHss^EfzYxO)<*~POkS>Z{+B0iNq+|P(Ra;~= zpeu5cJ!HVTqD6a!KK%19e)6MFeh&0XYmE=j<1IIO664qi$*zs0ySC^-ZJ`H-44j%V zgJW0)S?^Njg-4V4kXdYEjol+~gI~Po@G<%z-fRbY!kkmrw5_b6x5L1Df77=bZ-4Xt z)ywxEe)0M|(mdRI% z)~?wEF7Atp52Pp}+ZIdFMCY(G1@%4(oqu2*AbK@MtC$N?1cT3JoF=%=uR?zcwb-}%!2_4%4-D!K8m56^{Gc8nG4JTfXD9zSX=67&Ktyh%6Yxhgk(r# z1)7q2&1~qEFP;&I^^HeI-1D{F-E6pfFWgggj{bVc#gD%JjURrUb1Ue-^T&B=kNo!g z{Mq@^pPKIZ@KFQCM)-JpNhJ(QUSp9Wdp3kZ58%~vC6!6025wy35lifJnYzbzur(w)nlqCo$SSCsQ!_B?oawgWxETS^GTVTw zs;#y=W9pN&p1t#L!<$%7$>O!Zk#uKg#^Wk57@eGWrkKViY{WwqJfB&_XVD~lW8IJ$97x>44@s`7? zpcII@#tm37h}K_j@ZZ7)|40kAIZitb^BJ?F>p<=na64;)nMP#D9a7RMm_4Kq0Jxd6 zB_HjFNdRVU%|?NJWO0^f;`9IswPr{;KA}uA)lx#NnHLM^+5Ye^efAyy+43EKdRwNU zch>Ak3+`REAYG+(U1LY@&{R>Q^yc21x(ldd1#d!bCS+LLwp`TW zbRu{Rhg5H{FR105cvX*OX`$`NCE=iY6ely+s2;TjG%m-6_tH3~80L<)4V|Yj^q{t3 zltNMIi*=hIJJfWoi@u=1g;GiO(-D(G+pc!?7O^;fTvt~xnhrxCgNQN+ah@vA|9rlE z_h=4%?{)h=;W~#Grgc!?nRX`Mgh|t-YC2k8)`6I9VSKb1n8KJB8JpVBEk?I=0j4u| zKKv_Jr&`b}s!Y(p82Q(2I+M#joKUq?qe(r9YO)`o=xBF8m1;`8i9rOU5Xs=JF&azt z4tzzU$tB$NAT>ppnzW5mZk@U?s%w;vhky0z+6QZqK~{A( zrI|bfGR&eH$B>mdVC>Op6TMYnsqAR&iR?nD!1JXp-Nv{w7(kvKu@JslP-Cj+!@u@9 zzwa}2>GNIo`QK&9#;J~Z%u>*AfLPAHRpA#Lm!wyD!+h7lj>w|vL|SIo7f4n}7>k@y}q%L0|jMX|@&Y5|di z`_DcWjZCA+8u>nXfP7wzQF~K>x8^zHq8QPp2FW%YQ#l)wo4c<=y>~aHzd6HOjQ5aC z;<)dqJ(7D-n-0Ug&?QVmtchx{^LqFvI)vAFaijjF`?tZCzMo>0=EzJfMBr+k{|s z)Q5lT#YHrC-LOR=0KHAP@scOF_V5I?ITVJJ(%r8KGm7}@CgX$Pkk2}@C-oS?I#Fco zGdoN(B}~11z|b-}<&w##N+WzU#3TD`hyCH-e(?-~*?(|3@sA(2*z7x0M)%dJZSE{f zH;m-d$Op(iEgCW{z}?8U$M69yN=LZP98t{FMqD?EP*{$d&c&Ce5}m9~4BxU-CDLFf zW(rU`H=Q%vw}!|&!RhAj;g@nYP3 zRXC)m^{rcQ)kfUM#7u2<>kQ1$ zEowddyVpLCAb?QXwt+~n+E9`2U2AA3jV7BHvYmG86XkR(bB3W)$Yh_yO`aO9b#MjV zmFiVvO3)BxJ~GlKWZ}c1KB|Eia-XwKb!L0`_pY@l0Dc-G$zahlDYTt8PMGeq4=-z5 z#?%Eh6THH*Xw3$YK~Y1NLO2VoX6O_F1Fa|5oV8C#W+@Dhjcwy^^~u1-L0U3``WoZm z-+yr>e{7-MXCnD5ctc3D;aG+)*VusHDiS*?0V@qy3rD2qY2I7Ojx|KibUke*EgiN; zYqY_EpJ2*WgbQtL#N)_tat#?d}r47dz8DT0-Ro6k^Uc8}XnX4ft@H!tT)%d9MQG7%ZkeQdqN=CU82GO6 z7bNAb(=h!Ju}YZX#AEV^1?#HsnFEfF#e2`m-+Jz8;u$yB*fb4qMV{>1VIytm+F$s# zaI(O9pbcywp@<>Ccp{XTdtdvMWVOCJkF6v@-aDWp2aciYbL=yK-eXz0TOYWfqs#K} zAAJmn=Qt&Ril|spSREf!o!}=u%{NGrxeU8MF(uoB+Xg}`GUo9$eIVcoWsvI1#Y~sa zJ`!pK?+A!TqV{UN6%&zXzjAR2u8oKP_&LPX-&&sU{Ba(s0AJ<1Z%w=1vJ(0#w>?rA zdl6PzgnTv0=Ev+1ngV!-oSr!b)K-(uhLQyD>ApH@Occt7bmrU#bq7WRl5LRTf7lFl zYCw=RyE4JW$!Is--nivs8|Tg<{vVX5;PKaLu1%z5QJb_XeITHu9DHDh>w6y;U_UaM zdX5RS$j;Ggr1=0r4L{5&!UQ8HiDCwcIW-uTFhGX)4C|MW3Mqa9=c$cZ^MrrvxrHQ> z9Zgn0$&&=^0-|lxOim1#y~o1Lr}k!2xufrm2yu5>tl^cg9t80 z#Ii^d=STo!fF*R#%{yARd}IZ^^T)YujJs%#7*Z6<1bcT3@zFT$+^j zZHm_1Ohg{S7JLeKCf9uo+>${82t#m&amP3d6<esr{Xir!I25qRhyUcoPv+B+_C1jezvEC09h;Y_H`;|_;UF)~ zVCO|48CX?9>?9?UMJtj!?m7*x9G3@J>&JmyZ?1Fa}Fx5-Lk!RF-Sr z_U!Kcah~k!{~r4KFW6w?Yx;S|zi zk{cZWmzHYlg2=*w%;ya1R-*~}XlJ$^1Yafesne~P{oulr8|i7p<>EK7_Pz~72JM(1 zBxJtS=2d(2>3rDQ6zjTZ4~|SHq#tu@2agQMM$NN1Vl`y|@!(R>x9+_|L*!$BM+m4I z8)%74I#AqKn;2f->izHiac)b)X+`6;ckMRc5NB22A% zgUJD*dAn92S#THn=CZBE#$^q0jTL!;qN+OtSA==z9;1j(-@OC3)+ccNu7jbzMN;kU z77HQ7lH$^1V9(el=!tp-)MsnMvF~kW;$DHC&|a$uie~sNCMvFtNgx7?pirhlp5`UI z3=xlojW^pqYDiQzI(_ZHv}^$3e%tE*TYsf9d;jXMoJXwSdoSLTKtsL(8h#3m|Gi~h zKU|gB-y{i!QAw>~l9EbLZejM;bqx4><(dv~L$8P-cS4^BgF10N7Gq>KLTE8tb59H> z+X<*%bQWn$pc6=NtDN1T@81h(AS17sOvJZxRl07`qgndAy5-A=F_8eYKuf=wjaCyr z$9gryZ4Z;K9z~s0s$&?}>%i@ZqhT(Dq=qR1;R$EH=W>8)w!*1qZ2)zTMs?o~o8d9w z6K=t%KY#P;@A>(8S+8E7kF%Z|FaDiZ@B0aNxccf<@R=rXmhJQjuD&U-TQX*^BD7Wz z1(4I4&CR5g{kn7N_Kx?}%P;+_ z+Z})JHG8zp@cuOAjyZNkap4`=3|#u6MEV@q`kKmkWQ){j0RAa^$NZf+C0yG!tLpL=QVq@ z*ZAgi<>v`IXK11V?Jpt_zzY*r%CSse)~x1uf)vk_~KYFk5QLZF7m>qw5Ji9ytW z+Tbv!b4Q{W(wA=M zD6ilB{AGIn?9to&-s|?5tkb@bZ+L&d{*7n1<7Ri7Y#U_v0$qXy@&Mn=V=$Q!f1NNO?hS_7zS_Zhxc1mNV%pN6H0} z8RO8N9T&O1d28qd7mRmTWWzA~Y;2&?wy8EFwF|tm78_)1GRO}(=V@1?i(R7S;%sfX zjDc6Q`hs34l^QO8$i1`Pa^1=Z|H65bZ}+P=kGT5xUbaUYu6;pY(64W}uYcn=FCdL_ zpMen_8c7>SRu)3I89}(+(1?p(t&OQ}1kfZE!>+K91`WWN6Gq%^v=<@1THeP?HpfQs@#=xZ!TArLD(6NRax1H)IoRXX_jQ z5{YJ_8Lc^^R;|`gIJvTCoTUOO%t`5Ev_ohuWIJwkj$ZmS#D=l9LLGf8w_L-B3_@wz zstf=wUx9NYl1EH|+~Lv?0^ivNz#NFCt2W2j&fAB_ax??mzfsS zZC^X&2x4kGB0gfcy4iQskYN?MaUx-+26<;VBFEfI$|MROfow33is9PK4{h zCWH~-eY3#x?cN|79f-b?81ppV(rbtF#0g+8Fi z+K-Z&0=-ttG{96o>IP3y+tct^>LBqbXy|Z?Iw-TAPy(FMmN7sLKAq`2?yD)XyJjvMJ${3IhZ!jb*YN6E`Cw-*FMs` z>C_x!$Qra@x#)*4ap-|~%%&&Gy3>-p!)qYIhciRv;Xl7(6#Cf66oRS@1RsYxi;l`- zmoqVRZy-}@0UR5%V5zbaYfH-LK=)~2RFa4~EwzGNuTVRRL3kpvG4cT#0}e#ng88;8 z=29LH|IZ&_mJlR@1pyNox*GJ7`$#=dupzsn*IKy&XV*nz9XObq&k5l6KvIMbE2los zsFE|g$Sx?_4Y9Dzci91Dxr3pk)lVGTC;R~W?+^dQcR(=PS0l@lpuIH>(OAu)J1N*H z?EuxJLo=Ig!KVT5R~5DPIjf=Pn2_2W6EVdntt6N(_7Ocv1-!SGvNM5%$>&^&3M!ZP z_U0r&PQkts_x9R|%-UeZ`%pMMf!c;K+vll7zz7}F2_yMz1C#$V!2mu8F@TDHSr3=f z%fN?+F{ZD>-2pCL;Js%>2YelJr_s{mwrls}djIlQo!y%=;NC0u)kxarf@sC8uIKW-ruLYvXTi1Oi4be!=JQ1R+M^WeM2#H zny6>2={2-yXa|FNw}@EQ&n_(pyvJ=viX7kF*x4;8j_?Fp?(9QZeau8+aurCsZRSV^ ziKDr~^5!Tk!P`FQj)NaA1y^=pj;ogiTO?Xg69NPEFMV zNq6%D5$@^H9{#IK9nEN*`$V#Vo(&114{kipxJUp!HW+a>hK2JLAR}kTn8Fk3G2kCG zXvw9Qf?_o$@SELK+t|K1{E)>SWX*>4M6uNp((1$1^x?mL@eEGTAMSzP*D~qHLj}19 zH1`U(*~8$nILBHWj>r$8>}|2&!mIF6oXd0v=YEX6rXT3X9Cl88E~ID+ZqEw`!l_Bi z&SvCPj7z#teNipGJE7< z_+LWuY6H{>J*?ww>1RNIwmbRha~k4J9o}-BjcvLv>szEjp8W9NT*)jwtae&@Yub2i zr3?pIVyzB0Bhp0?I5~F1qPe5niS>}P;2{xIJ_@M@&t97jK_5q6FmeuXxG*@dI*5(w zH1VXY(;2pizVhL}eenq?OkW?|zrSC-|L}+B{g;0juikv|CqEM5hr}$8Zt^?9YjXE8Um$z?~_WT21JLRk$u~ku->)qmQFSh!&$b*oOvqy zf#NMGaKZ26{j+(HeHV zqfSBRqbKco;LBg2RGl>u#jrOArGX?~6 zZEpZk$M1jfWxRd;s5fx$m3!iRqnq=Mp5u<=%4;*FQz=x_wc9Z0P?~Q( z@Nvv8$2XwiebBMp%EzeXTHw`2f&UWYOwn8j?9;kD+>LliLQ>aLU{_ygA+=i%%)NtC zZ+6^^^Zw;N_3F(*Z~CkA?!zx04W943fKR?y>E^}y8$%DjgN=vY+Ht-*xdZcD?wc87 zQiM279;w5v!)P2rZ5Dt_18oJQ@UaZcu2w8ZwcikfhO>r?HGz2|DG=x9+@9X}2)dlH zjlDP5ajSv8cW&^_#{1jTU%$TcLtpw=U%mdt%b%UsU!8Z4j=g)Y;`f&Be(&($&soNw zJj?jrvAv&Dgg()08vg2WogFKM+M-Z|acVXIDCdq`UaK%tn?a#IM%7$fz5sC1ckwq+s9Et@Cv z;$<;6@vR-}x4(M%`qh`O9*xWIy=qU$H253k@W)?&0&P;0ZjOenGC~h}FE8H?hmvwl zbeh}L=r%*Zlik7uoNRA24zzuMddeuAy?|9NYX^uG&5>(pQwB+ez;&}x;b6`qPN8Z- zfb;O*eFxek6oR4%j=u1^Y&)t9OgU>FYRDe6?2B}E1RH}?H=%ml{1J|jhImM_gMO`D zsb7ldu0-cN%Inx!v>C7}$^xV&bd9)pzgrG znfu_$YtC@*f;9l+ZG*>VZF00rSBDhMkZ;`2yqzaLW4gudhP(5^J!vAEHzuO_DNID% zEbU}mxg6b214Juf5E-#?{%fs;AMbbpUy*$sZQ-XSEToO`r<_ZK^WF(3m-tli|1wUwc&S8fs0kR1?ni}$IwO4Pr2-oJbse{}N0OaJip z%f~n1JFni8jX%0+{C$ehiF;o;Ki_~q?G50x{mt}JA7%*no=pAF@$T)MKDR3M5j=4_mb)nA*4bBa>OK<}h%ot?kIds_>R*zIc z7KqrJJkKGHW}&huDt2SCqP0-(|x^YUP}B;9Lj4a%Gc zXGNGFuXYk7Kw^Q1arOF!Ie770O$+8P5PvVGLq zF*lNpYirV`6g^_w=jMF+(fjk|pFD}wQ6%wH(|LxuxXB@~ zM8PyU6WnK^rMQOn5<(ho=nOjJAckcNMYIleYb!S8gdkds+W;e22cy0@C8Of3HW=_) z(9&rwo7*SGu;0``@fYK}czvnx**HvjMiyZ-(f5otFy=4C??Ey?WbERpy^kwuyyY33 zNN}CtjyY6mG9BX6JU)uS3{+r1I&xgXhsbt?&fTjJDUgV5>5p=6xj?AJ#SrvJTpW`I z9k5khHA$#xajb+hMSZf3)p^Uj;z3pn2+{T?<6aC_#4!_GTxp+71T{j-)LYmi~m7 zKos2$yxC_wmQ#M51>N0m^nd-qr@z=+_p|~}+WX$XOed_EVQ5E!lXDinYfy;^I8!kB ziy$amnBxM$0ab1;?X{D(x5Ili?tAoV0xlw#DXH01^ehm|mLz!?2}-x4iwmiWc$<^1 z1J=1n*s5wFSS2!F2s%(|9H|&FIG!#-9 z4Yowpv^O;!#V}f}TW-X=^WohiImNx#>?vDy|3(7b*T3=X%5Rz8ym1HB(qOcmLjow> z2CN^Nj}4H=lW}#{u!PK19!TwhOBgIQWLij{j%J7MGMr06a`XV$b`Tm`bTVTR_zD*& zJNsFjw}xi)S=zB(F?SU<-gP_f5=aG|u(5~H!tBUdCt8QW$2hXI#&R*;eJg!5dw@tj zM-4cf*`WU$xStoO6UnR@9t)WaXZY@UXgtZH{PFt_o_~CSxF40__g=prtg{)pN4P*W z;~g6;$%P&`h(_bEtsqZ|W`I({+ka>r55T6p3uK~NSU%NS2bQbW8JUj++6-UUXf(pt zS+lC6UE>hcu&Qrmy)D~fleU_Gh9R_Xoz{A6OnC?~O}@|M6G!|sgdsvzbp-)7i!lS- zH^jd=nuDaFW58gzb9LPeUGaKxFcmcXezQMdKyQMdiy-$C654Uh-mWfff;2thM+ z`&3(|XN}FKt%*oC5F@8oc*LO;tOSaW-3M@LRD%KhLzqh<4R0q`PjPl+9-+&*24SRz zYafE|m++$#O)zbC5D^haqJ|up4j2v{%(P}-Wedj0mF#$nCV}6Ee5mfg$xOUzGdn_T zv`**lpkFQ?%cg?p;zL_D0X-O@z3t%3xJs$WU%g4gdWxaa>ta$I`dsM>N z7u|k+B=e)Mf8#el(mL`98LiuO5OG-*=>-DHP=sI|UhT9g8ZG*4l`wGaM0zeVMH5(! z&5B&0jno}Rn9N#Ny4zS$(l1x+GWa$)0>oS0|DZem^ z1Mo8}kcEw+ym7a#^6Xux+@==Vze8kZb9W`^?=`EU=>Q0Ug!KAPh@`Cy+d;*hKh9I%>5o6)(SLW||NQk+*)V&+ z60f?p!viK`&4hGfc@Y9~F=yYQ-C{N)T!ITXHgIwsF5?9QJ_4@Vm{(J3`dUoQ;b1LT z^`)N}-lG|m*=L~BSYsX{z$L!*tG#!g`R91`?;u|N-qF*aldwN&5;orM6-e~qJ@!`M zA{BA8jF=d_wJ6Wg&ON#S{KliuqQS6&u#Rr6tp-jg9I1J_%#K93>0@wuUm!(rHcOdx z@*ofq2_>@5;ME@fmlw|x>Vnkg<ICwkN6=Einc!3@>W6X=7W45($ zFN)Ej204~Htnp5C4fkw?NX@J9u}jp(BeT)HKhDj!`Ma;a{Oawy4=+*0KNV4F$Q^YU z{-$;_m~)Yga?o~wB%7TGk&}J+JOn;asLY&YwZY?~-UZhWO2Z2qieP6TO^p!8xT5t6 z1*=!UEn=Ge7!U&3=UnnQP@{jHgMHrw>PJYB`+l5Tzx>DR+1oeu>Zeb9sSU!)8b*sx zCq_`Pb7*pps#>X?SvclGMTq#VBLIBJp{@e^wH4AuPrG>Y2Z?JqUg0wu8i^n7Abl3C zQL@>3vt2B)6=&}J_8RTp;jN#uWdH1C$==Sw@BDFY&7RkH`X~PS)%FihU6rRTTadhJ zFTP@G4{p>iEy|pbxUCRCX*59x!?w{T1Ppw7aDvRPBH~y3N*Y={AALsMl%>9p>NOHlRUU^%Y>=?TviRib6*xCdo6F91@NQF zNtnBIGR3<>u03VNRp8a&Ndnjd9)vlkp2#^sL5F61(_9b#>x-ZKZJ)y#KZi4Z4rlxv z&iI>!Gk)C!`Ek5@^N0ASFMdUyTT6S6(Tuf82EkR_xeZpETr<+eMvOLb-ja0Mdd14k zLZJ+Lb*PSjx^_(X=V>P#L~s(I!PBUED{))Ue}lhfeNUEQt)XdlE3G+`$Pm5+zRa0n zz3(AHXCCRJbqrD^VHn@teaJ>+Z|wuIZz5x2%kE3fE{ntH2g+7qjNSHH;5jY?o7Fmi zh6>91c9B9B0M55qrr-Lb_ix{fMCZ||^UHPoo!7785A*e_zrOui zAGUfR6CtrYwsXg3rZ(cNu?Sq6Rl!}^?c^ptk%N5XBoy#N{j72s(oT^rr-8Ql3~3YK zNFrDTc0nSH@GrZfmL!l2P=4Fqf|{$5&f;i=xpGoFv^yWa6e*bQDFXStJdFu@tsM}0 zHPMY*Xm;xu>|$u?rNM%(0jG^`521JQOZ7$2_$|$`7GV#>tKcb0M3jA?@jkO5hOQE>{0fW?dRFqwijP@RzGg}lxXGW9E;(+0V*02h@6*4vIq$+i$Hk;7tY zRL?or?M2bumLUJ>K+k}*E$S1^Q3VdL)G5s*`X*fccP*W*JGy~87gO39XtK?DXwsG$ zl`?3$;~m&x=_o@6$3Bb`bw|vJ(8vSDfR1t7Z~E!^0R8HRN0irluiN*7KD-205DnB! z$kPN+fxIYqD=W-5NTUK5avufoHu8WGi93Dffu@ekcpck0%x!XqA9cchWz2JAaR+dT zI0c>i*y+Pg&V$&(;oTqpw-?U<%<%BPe+Tf315YBk8g#8nJKfhHP+BoMx?(*W5?Ji? z@-`9BG&&IITC>jC)L{eX5q-^oyhHaYT61?pa>GLIK*91V6f>$r8ij}&BzT-rx9Nk= za>{n|*xh@{9zAx~lqM4ga>2?@x<-kgF_Er3xftQ=upNVN(jb;Qm<%B! zmKuiTS`h29hvpTeRr5$Ho35s88%2ZEGpxXdYP!C-zh z1{I%X8-|&gFv4j@5eL+-rv=2y(TUv6$1n+GW8g4G<4%{U5=74MZ`+iQxND@8>w;0>Xh)Tu$DWH^1v| z-oJWz-lwB0ehU}6^U^(mX5eoewI6@|n{WI&V^z|C(6a5NB5TgHA$e8|RQw+9IuXr@ zt_NmYTAmHFd{|AKjG{#qsG_Z{tr!8odI{Z6qWlZ9Sl|kHwb@Mz(SCD7jF}Jr=XZfo z^o?wkkcPPPT@7xP-VY;_hB}?nl0K&sbrE>{EB6?;T0eMCb0u=ynUG`!eIyEb^|LYRZ(S9tr=CZ3bemAY zc!OperJ^OU6V05NkTP@4i~EGgk4N*K5cy_JW<`w5^64j=@Ziv}N1Bh{dH?^i_h!AG zURQb_+-S*8x4Ye-+yN2;fzg)+ioMs~d#$|}bK?(@>jSL42C5{I#Z*yp3-(3kdA!RP z%RDDYklC5%3C~-UO#aVdTS1Ea7v%%pu#SqXx889L&+~h}c>VJ87r6Z&QSI)0;vU`h za#PsLJ1XpV>N*}+kVbE6uBpXqw?-2})b45qpN%2@q9v^cko?}XlOdIjV$HmuAsZp6 zAi*Xu5zv}V80Ha)i20~t!;Esg0}@{Y*ogMxIg@{BQ zjm5|S;lqx`ZH`t{Lq^|oIKUO^c=I89_cYrVD^ncmdWqAmXvgZZ`_3~w_guxy4gbyC zlKR*nh8KzFx}X3dV3u5&vqczKaBI+h4jcHk;qe8u6bFhxUYiL64btZD8Pu6xi zX%?q~eLx(zt@ES_G}LIbpDxI57`G+$2X93&KgJ#^UewD^9>4YPeFDEj_X12I(MDS* z_PRd6qq3NXZs>>4xq`Xz^4|;A*G({zLN8h+LVQa5X2jfS^*!2H6Sscb8{fjvg&dA> z>BdM$NGzpw!fQX~B9(`K?SuC~Ve>5bdG~^!dxNqc{`GIc4%Rq&MvhgEacBeE$Eg!l z3j>If@UFo3Vkrr!r8WpMecG46*un@tVkS&>m=_)HW;Bi2!bYLThi{=RG=ykBD z(a~}uiFO8s?KYi?PU(QcSAd`!gJiglYSUnO)>vcUmCT(Dl^I+DHa241=3aFk{*7;; zoQQ(4)fTKZz4KA2=m6iXC?_9z0TN~Pus*ICr3xWHQV2O^G3-nr=?pejEoSXxzF{!Z z3-`PGT-6gP(rsXiPeRo_N2X@pD)&a!M4IecGmcUER3K||p1zct!HmX0g@&HD+YhME zaGKyY8jB@rqrinAnvoN}yEjrFTMnt$C@68NflAV)M&HLOJKM>*>K0G?+aJIBJRSvA z-}#h1F&OVR8^HGxVbirQJQcHxb+}M8ab5OE#q0}KqDEAwBe7Q_Dtyp7qo=u~wv`j} z^O1#;EG2A|M+a_Zi!9-0L8nInQ!x2LZV04T(GmFd$j1X=8rFG1KKj_voRsl#Kh&V^ zF6-!xIgNn47N0X0_i+|48BlT^Y(oN#-jTwvpg;p38$&MAoo5GvoKW9dzv5MW3~Tdp zL_KBB`m=BR$N8x}9?{+T)IC+R%2)L^Km76s|Nq~z$QF!sE{j_-)F|Pow{v?xl=~W} zAKnNMWXI5LQa=@kLGZKgZf&0tPq>`r0iI z|K_*wmR-u`3^X}B1QxqiPDB$k8}2~ph8ykHin}5(Y_6(6QZH;`NIKhA`?AE&EciDa zaw$mtdNwhx zvkLEG<`!2XmDAuuX+*O|!uK-}W4^OS8Jg(9n_OOC{xK7T!>+~jyq$tC% zy6?U`5|L32;W)d^hkxsX_rSIKY@&UqCfY#^vxnyl)~>BMy@jWsl981N*j+j1F=1>{ z#?Lpwl?r7!1yDd|8Oeu{FdQI)!1tx}EB#TrsUF0t+gS z?&F>J;)T$;10Xp;lIot@p#ni14P-_LrlS}MPIT7^wmtwAD;#j~XfzhSrJ9fB_2`x9FX}8&B(ll{x!z84wRlHU>&D738 z`=X2_4d7^6gVr6}Zl?i2IyB@{^fos3-iLF0cYXdkzxd)8FY49nPwgp}^fGC4)>LYn z6!@);rKTaV#`v=N+C)HtBQe%_BOgATd$BL$zNq6blSSxHeA5))*i0^qEo2>&%kF3O zJxELoKA>>mrL}Vo zuF2LmmZ49aMG z+5$;rO;fQct1*qgV+~>qM12J#*rXjGhR!T%80E~uUq=&JC(X2zQcRUr zrcNU}^ZrWvG0dfAV&`dsElm`|N#JJ>9z>BqWd3A$L`n$betmI>xM; zNXoU100oE;OVgY04hG#wqYlI-pLv31Yg-H4AS}6Cs_%hRQ0!>vcuUu=IZhATs^fy7 zlgAjs^f=E92zI#nVGVOSZ^Pya>4RhB)mr;>U0X-F)|zltMebb3&rVZtKcySCV%>%RMI$TQ2=kJM#%K6T$=Gj(sS(lh4i z8T0hqC;$3=@?Jbz!E0<5c^q|3HZUr>ojTftxV*6l8Y3R-C=o$2y~2Guz?rnXWy3*Q z#j-6u^8jkEfa%KQ0);Np+RnycdO}ja3uxb40q30$=Sf5N+xOrT7xh@TeITsQ*@htJ zPQ9`29Vv5YN9+)s$Lz>L(mE=ec);15m`kk2@Qb9IkE$zgNcT=Q{JXu5(K*|AhVoLbQH4jMPW6v??a*!vuDH;^t2Mego4GxkKZ&m{8 zU3NKHm?FH%QT0d)z?}L_;0CgYZey00q|J2 z-5J5tF?ow(aEJ)asd&hTA1i8;Mxh3WBQXhKJc9)Ocfcf&(Nh9*7z`cwui73WJiJ`_ zP}fIR!nZ)O*FXF0v&Vhsz0cftxx~wXv~Yp>Zb=_xK{Vv8pEISbR+j^d`x+^2^@C=7 z#M-iA9F7g!u&r&F{&l=Wpqic{>8BuAp2dg6=je&1X@aGPw3A%Z>`~!!=finY=HRbB zd-Lj(C!;WwAewjes${xCTqLmhkKISqs3~yjVGJ>hVYNf{uU?RowAt$nWPf+$Hs)ot zA7{0O5P9_&*kCV|PSRkf8XO0kYk^{YjEZl3p(!J1h7j-3W}_N_T&J8JN5+$+t;>P>|LHLg=99U zh2-o5(@h+NF}H@yi$mDQ)j}fN@P$wX1lXb1TSB?QK)VOuN?d2h9@5YU&eO2Hku~R} zWhiV_krgHE*xUpn#d5;u{XDIDo>o0itG=hxs(TL-p643BQFD#kiNc)^=Qh|UKYjVd z7y0@ZPoT=D+TNC>dGBW$$%U?=LSe?$%Ydf_hkwKwY=4sc;HUpH)$?uzR$Uo zC6D6e?|nG8z4ynj&9i>?$%}gGGdha;$vlT-@}9feLXn-58AKDJ*udmbI$UN zEi=r@FS>vB-t3y&#IcZ*;M~X|89Hs~JUt5%h0#H!Cw@ye1!_j;csx$lw>GlPBFkni zxGxp(w_5W!<~-mqxWyrik;XaB7hPyhXX-gt5TekNjLkQkLk&1D7)6Q;HxkEW_XUm6V!N(?4LOi?Dhn;4|H*;zigjAPV{#T!{^h}BA# zwp>M27oKbPYL;S_J_2v>y1XEO#GY;JBy&ykR&YR#29Fey+aLaeYYM6+0k??n=?xx` zj7l;1l=r!fUvdF6~v{qPyG@o5bRyGvWmLA?M9ZIe6XsC#4; zBHQ?iC9vIc+yc_>eK>&zxu1nXIQFgCg+=%$3|_UbU9b!xUZS zH;+P@Ky887xSOnoFClElQP4B)bpf;vn11idMNF)&C4!R%TSAz0(i`H9S{)re$pqY zo60y+G^pu>x?|$?uf3$a0ZO$%J1R|}X>nU4HQY*>$wb}PECwM=c1)lTyMqve7~#-%99gHvBWd+f(l(!Z zODDY=qXP(UHq5aGNIGrj#5>JE?kl&LzH`vzGHJ56e>0{XaE9s#V1%zjXFZEM>@$kHBh7MG zRv+V*0dw!ec~TJdI^Vqdh9Y z!O*Km4kUe62aKsCtpmQ+PPIlJ9Iglr4V79=2>w_=YZC5`F&%Sv1=~I{04V0__-S`$qTe4^+Cd%EBUwKwWs#f}e zHk(f8v^*X2pg0&_B8?UF_uZ9Zb+|J3wfS?4i++Vz!XjynXQ#ba=LY$<_1xz<0Ojwb zb?3b`px-A+>J#mW&Sam|3Q5b3L=dt#kejaN15H*&8`F)$dqeD-D_f+R%4B9kgOp(q4JITtn8S73Tvac`P zp39T)39iHE;XnT1qrdXb-5@^XO87mVYiEwO%Z~QL;n7jbwS!1F%(sScA!GpCu|qH} z3GYr#3S-)~N34DjGM`-nTmCHsj%uR6KbCt4CL$x(Ax~27e0!I^*G1^9739vR?mJXR z+{pt^*KP%QntfF6{~sntoV8b3*-c_QT)&i|;|h z`P~0L2Y@~Yfc|;`pjBgNpW3lz*bN~VEK;&YtZ6YpNmxx%q(gOMBh6YTAXB$lDC8X7 zpwXmFfa^fS%Y%hvS>bj?9pW(BWJ1YoikOpeXeGDghyUbS&!Oam~oE*!mO_*3D zxt7{AECsuqhAif;HqYYdo6i8_DmJwK7c_YZis$VL`Rm}w!k5~BTwZn-)5L9ihMzS$)XV74y0@0C$nek=@Qjhc zVEJ!Du*_EeO@O& zd38my$n2w*v*;LzhB(Ht4euZDkQd^0;Y!nh0o#*KT+wQq@i-5a4F#%*kv#SCLmjZ-h zld@vZzR$3}pA>}s!OJ&a*k|WwpS*aTNTh$nxx4pCe1av~z82~C_Sf%#$ZygcA!10_ zRC*+$1sI10oP%214d;=joxlzRp)v}BjIN0cUV;KXcNbSovw9Cj2A-@S#BDZS;EAkK z4>@xivGd8CTc;G$!+-WIQ0{ENW*|^th%ar6@SsQ6YFm+3b@24F?kXRI%8B8;+%9{R zLl%xaBE~3-ExUOVs5Q}7PB~}5#FC*FX2;fqC!{%;tSbyzX16cM&DpZ)TC`S*X4TjS z!cg%Uj@bI8sK{hb!f1dGSG<)sg1xts1D~|3tvT& zh-EeA@C$R}Dbx!}j6$%ANmbfBBPlfaM=ydz;5~v+G`! zIeBw$noLLvU`AHPlF|i!k*v14L!``epGziI4H44^hNa*dJOP%!fK3fMJ}_Rp_Bh^K zk1hz!W9a&02|fJh-@?7$(~!ht@H42@S-PiWSSa_RIt0QLV}6a^Atp_A9x2iL!gp;@ z*We|mwa)DfZ)AMcCjE?UW5FeL#f$|3XEZz8*gU!;0gxZX8`5U{zo=BP`~-&7ZRttF zhGarA#h4W|g&2jdYzduLGT1q^Vh@j)7>?sJV$~IMg?=C|hR6iDHcgQ2)3COgamsYI z)d1)GRs7J`@BKgg)$9M0m*<7Q`gy*#j~@*~?|mk}n>eC(PsLdavwqrAB(_G50n4~U zb6{N#66qJ4mcbyECngPVvL-dEHa0E3D9H{kEZNZA+N@An6Js!x+GoXDAZwnWqf4vz z0-G6ubt2y<-`Oo<^v$R+or~tfi@QJSF%NO?5U9KA` zw!nFED|5QWTQ5Gh*KZy}VD5eD9=BQaA$>J@@`qpk;JxeZ)oYz`CRDGeR?1q+3BZo? zfJ4sG_-yNQ;dzRhM?uv%Yazgyle3Qv$WF89CKYKp$TkFSeJ(mvYc5eo#eF5#MDsQA zXD&6p#eV2P4KNdmT#qwVY+o^%CAB?UXKGW-W>HRAM0?g5xqBkybaqDywh|aE%xTs6 z(!K^HvK8VK1;?ML>w`8`-HeC@20wQBbrUYf8V{1w8H_F2lpBZT@|uxSvz8l zy^TgPASh_5C%3_>)fIDQm*p|QqMJwR9A3s_XmbR;Z+rMJKltdkf89s&kN)7Ve*V*s zfAZ#!uMZ|ZoqvCO^+$j1)#o_J_Q^l+*Z<5%zxB~?{d(UBNXkd2Mn{GWK)sJCo{qlz zocLPCX|5(mmNhiJ;eB-Vm9dIPL`|rO6Kc37W8=1GQaX}6RY39cQZwn5l@~F56lhvw zpo93np`mUb(|e!3XF}b3xheP_5$f(eOMf2ie+#4idoOao$9v@`gxTIF0NO6Cb(r(a zG@D0D6S0{Utr#upZ0mUIC|6dI0ix6U^sqG@!!V*w=OAARWdepB%6R+8fxH`L%7u{z zp$n3B61zat_Vp1(|J8&TnM{b77g?ti9eU*I?soR-bI0`4WFM*NyB||s5H^mDiKero ziwWboDTQmKm%!7BwmD(HTPM8|$yEnJi{)a_2_?%K+qTNXfAzsff9_rPtP@mBg!$5> zdQ0JxlfkLSXWvn4%2w~l9T7f<%T8G;jYciqfo^Gz{G~8HC*~A{%B#yoyG0vkH8r*s zuS4OzcBd_^EkTUZZ9THl%0Zdm`fO$E%-PyGGp!Ef0w`KzjzHl*M7evD=Ig4?b+%p5 zT_G2YnjR40gEp@CQGr}-HvH+l8xmo!AsPude(gV=MPb(ROuy#}t%l#NM3bfnVn)YE+RUVZr45*Emq zohyP@?fvjye+$yHDHuxaDd@X9x-3!j+)Oa5+CW-zmwg(U#sMb1twwqr>Nq4K>uGb9 z^4c84d%>07VT=vVzPas4d^W3*z5bEprU8 zsQ+*o|P*T@ACn>)%YWv3O8z$susAc3ht((aEy!%ZJT|+Nogc+a|ht%-H}T zxVi8D?$6DCiq+yz-n{zkMZJFY>5F*z=5hOX=acxvOSj#;bldy*(p57Zp$ikNB@@Fe zXklTZxJ>m?+|F|LDnYn7t>(e*d+AY_*Aq#$O8v~S8g|OLX&u7!3j_%4VATg+JnU!V z-*9Xm@v-aFZr33+8e@Y*%#en9he>3#!O65`c|S;wuEh*eGk&Mcj02|g-Xv}IMkoVN z;|m1uyrs9%mq_Cem_u|oT`p)O=(fy_$ zwh#F$_uJcFzk?VyAMR;@kw}A^XhZ%3w}DQ~Y~A(-o&e@0_;8V!x}67CI9?TO-6n6V zIWaR*S-cRg;{=t-VNjNIj}nm+O|(ncqUbErT4Q?nZ@vw+?>yTq`${KFlBY7!KC&|q z8IB8-V+Xb7q&2fQMz(F)IDHo_KT1l==Tz>kb@zj|1XuHn#v0v0zmN{z;ZQrE5K_AB zvB!F}_D8;6GMs1)Inm{Nj|qKj5&Gk{j@ap_CAZK*9&g8tiybodHOG|UZUAyOxDp_u zJ(wPk$%P!s-D%C%D%K&zUma{1bQv2P{B_GZ_??&j>a(A}_~hl|F!y_(xJS2r`+DZ( z58Atkyu3`yzD}(`d{d6$RGr0EP(hUMho6zyuP=l^TOu&z9S#H}QwR`7PY`jT*a9hbs1h;?KcrYVEmgC$epq zm9=q#7KsusJHVvWXj+?B!}aA9X*+t14SflFo0*__7Ufxx@aSn`TjTnEA{n(WS~2?V zgsFFqh7*MSFy0XuHzO}bht1qPy|oE7SqYTjyD%eOH5cL)7U2xTSm}f26eE>Y5DwK0 zc&;H6nKN|s>Ibi5D0nBbhDF9HvRe?%4pCaQCsJgH>j8vy-52yDjGE+ekL0u}}%hWLVJ?22UGc_yZ88I3xR z?R#0NkOdY!5+@%1+o$h%Os)1Y9!ewPdX1#FEy&-1U3RN=^7-Fm{M&ST}qorDM2g z?`^GlYdOF3;oMRx{DG5w=I z{Hxb}{l|aWZ~ExBzh2J);uXu9Y9UH&u6}0W%vadzzCnYjjwo@2L(<%N#@I%X+?DSP z2fZog(L`qB<~1+f^BnF69}*f1gpmTCrDy=54tjc0z@&K_>}6-JhPOn8&CSRl9~7-A z!d9eXd?yJ2{N@XF(%L*-t-*lnwITbPJ5hf0MlP~01IuaAW%a(NC037ZPbl!T5PE(| zzbdg`e>!{Rtz|bK&nxeJ^1j2(=~`e3U^6jfNQb~wbv5$Q71hY7Iy3Ne55n3nBp0^{ zljtDAqG0z%m8|GShaqV`*3z`>V_}O`bA?P|vui*ri!7xV1e3juhyU(__h4cAyubZc z_P6&|Onl!29M9Qa&)Htj*0i9~`To=NSXDrs6SWNkPoTPPr4F`K z#-;&r0Vtf{CsfuNoY)HSIURAj7m-h$TW`^tM75FagzQ0G&ZKd=&b|(e8rHRZ37D!K z!xxY>^XnIvesysjWvd0RUF)EH&FRH!sAx>|2D3%3(`d;lS`BC0bD-25E4()WzjY%6 zc#bhCsCBGVU}xJ6hS_eKKswo~!^5uRG<=hwD(JW4fO{X#&Bgug{F5hX>lE6;iIMW~KYZ{WpoyPJ$=?Pk zc?#TaGgoVE=HgAVa!;gW@R`bIA&efI{gLF88@wdO(g#fH+hd%SIkZjazIGw&tFx#! zYke=rw^kvS>OK2RL;|$4y#i@7#t;7^ZY}ATP!<6SZDAES(-TG)c!p-XWM;7w^!Vfj z;~kPQ#O;K4w=epR|y`$A{*b?kx=s#vus6rZ+pG@$f%g0b_^j zB$iKJ5!)$eC=HlRTZ0LIYy#;EX*pvo-FmoN^7K9Dz*~Iz^>PXM}!oe6RjU_|WLlcYLE?$ONp65rg{nAUVB zHh}9mZg6iAZLZd*fOy!%b6Uq_zZs-@T652J2Ec0gQ`tE|JxHHT`dAPD%N5hkDEC+Q z27NSb7Cz&U(;jnAqlT*UOc1A9A~Om}M~Lr?Ktjnf+1&wN-4Ia;g~40ZgVVLt5D2e1 zR-b*Pahwqfnp)xgs2oR2krp+nLlMRPx~?`i7a97!3Id7y3CJL$BC#I2NibMQ|9MG5uC{aPPyp zCEdUI;`PhVK7R2@e)jPfPhD24MT`ApZD~2qsGYq~zO&P4SOY^bzdI=Q)tSLNrWvV6 zTO0-+R#tD8CUgoa(yLOJ<)~HB^fp~nKs%X}c9|JDtmmR{i-6mC4t*J+D*F%J~4+#W-q zWLMjk-sa$O$V@tr5Z{C)Ba~V#(z{`*} zc%R9+z4u@qy^XfhH`ECf6Ez@QPZ3;VIq)np{Pycazf#Qt(|84goY#QVWE(aYTfcry zG&`0UjeFYD!#pZreL&w)Ub8xBe+aIlJ|tojxhZ?Ks1Gkp%9Bp|0p zKn^_{)_qrgVMMo)$pnE_n|OufZgFT^;dRotts28Jslow(Z8XZJ-3Zbwmh6teSSa^v zdqY|W0yz7&kz=(>=B^Yxj=NFEV7xW(Z)RY>ZVvr6>tq0|ZI&to@o^CT^L8LHNt|PG z(pj7GRF7)gO3!To-n|d!_RH|MyPA-`ZSmRqnR^-jkRhvzr>#t%i0zFqZ8m4yUidn- zYCajh4(tGVdi33`p&y6_A-N#bJ+h$=X+&7(&XvDrdGnw>KtmuB|Uy9Z#frt~vWG0b9;bm$p~1+t?5P z`!#ctITr?7o#AeaT>_IR)oB>A@e=k-3dIy8sjYy3l`Z_Zg1eioKz4YIsQ!=SSqDa8UB!E{X+Kr`DhmF={K&k}Y^S>xgV{NOz> zqdojzS9p>OhiDC)Z_MdkYacaRXTg1tAyc*4>t!jmRuKaRW;juQwqu`>$k&fK#2s_uQR zVt58TH^Mu%4B0-r2j^wjfT1{5ye~x2NsxD_%55&BXY9lrf5m7!ka98y?uvaHt3Uid zAG~`Oq|VFdpbbzc9kIi~8kDx_3a46%F6S)Irf9n`#a+}EVUh_UP7Ut`1x#-T)fM7z z{Q8`=t}R=TvIN8uD_9$sY!P#KCs1mBZ_ST)K5tJT(dfheH6$8-{TpC@{D*$@EyVm- zZ3J?ol}E02Uk-5$_Fe1bXy~~*=vcN--_f!c61AgjTz*$9H#Tc;5qmUGvz&35M%Iyn zkR2bi{ z6rnL2t1|%kAU7YoS5OlAWwOfP&PWEr_-j@2T9CBh34&uKXY{VON|xXK+`jnni#PtW z*ROx^DCXzRXYP?wo<5|n15m&G!8;%=%()gH-CXTTpz^-pt2>8%92JLci5It)BS~Vd zHm&jKhhahhoVGyV>t?x)b=$Po_8t)JqQ-C8r-2r`tB=I+bPY|H3Y5C8CwuIZTb zWawMlprzpTDa3s|TkXQQT6=3gTG%A9p%@6Z?I$1>2D?XxrtguEC&z(e9kkhH9fhB3 z^@!b31xvu|CR)PSMID-QpMjokq!kmz|f zgZz@4keRy>h%@$*F&hTiXS3Q~8l_=dPFp+`HIiv0Ch2RE&Kwwaw}#QY;bkAU!az&O zwYb;Wu%r^h)hnlvE(yG<(G2ew^%aS26B+6Kn&#ADtjGkZ>NC{sOtkVekWCfRm|``X zKoXN`B=)nqV8GP9huMHox8FQ}e^9Sp=f|&K{p_=N;Xi))N!&h!_db13e0;{&NDps+ z{SF#}ZPxe6UQFA4!hXl2WmGYG_cirspOSWR;?bjtHfB@UXi)02dygcHKvsu68$Qmi z@SH`EK&VBaq0sKvQeN}$^r^(X`-q2s^hXzkcVr;Yv%_y@zS`sgI;XfTeCaQrQ^!m# zYH1&qcBY-wNkzR0cHR)~wY0s559c!$P%NP!gB*-+PO%cKf&?s$HW~c@X5)Sy{;_Z2 z5zIDFuUc*0j0nY^o{2?eBdF*Y6S5!}RyIP~Ty}#n{cO;ZlSXcY5kg+&)Cr5^10oYd zQrMNsX#2=oh$Zas1dXCO^YleC`=hwq)n-SAA#WJ~tMy)17N&}KXl?Lt+eW^8c)P+Y)&=SzF^5cf0zK7s z+A*2CrxkM0;q#La5*G?Mua4I#-9CfUho+>RB`XvZu7^9sOf#7Y<>pv4@j<2dB1zG^JO#$a`D ze-ZVm%5)p8{KEs`*dtHky-(VcL89X(Nc3GyeQck##}$5O)|_LUG1eTYU+3<J<%2KZ8%0JDfZXS_jBHiI{qg?hpU? zx6olUgE}iUyTyV&?pPl)d+DOy zSaVc28oo1qn{ylEu+hYqK1vY&+`{TMOmR6}v5h&Z=bnuTFfTpiYx`+)Ow)Nu{m#T! zEDsF(pw2H~IeOQTZN=eJDR3+`teeGgr0PTzm33xwfZO^uUrQ~tD{Y_2k5S`qUVQQD zr}^2VyZ+wi?FrVz*Ew$UU2xpK1#+PBh^f&Jn|3%iF~%EwMr$q!=_&MD-MVHW#Sin7 z1_bFp^_{kM13OX|&fYW8d9uB%NL z@()3Z34aa-ztYdIws9Dte)8pA_m_U0pM0LLf0<(c>h+83kl$`|Zh3-tKA(^J-1TAK zU!`09@XH^(cXy&yZz22eg3YGQqq}wts3hi!4s~ls<)&@rN{DbgNQ9{!%p_8&Cg&Qq zypYiiL+5H^7?jgUx92tjkt(F5VoNSnULEr-tMB-J8AWf$D|bG5-yw)#vWvB4l9$w! zdg!i2bK)F`An2zMrXCF7Xu`1t8b?^C5gm!{u(TiKOBnR%XP_r!p%)CmFp znmu<01$0S*9{W;VL8}0^<5UM|Cb0%^4mUjmgWKLd}O&Fs;c*Tm$IsEUI()cC+?4U~MN$H}+bcaS8OxJMGy@`5S1Zgu`u2$Gpnh#>&M95cotf18bsa(@LVF zV{|kg7y8VYf(?VZ8JqgyGXy4pjNHAIwwi-FFv|#L0!D1^kyQwMz!L(0IjkPHhNe3o z&MnUGGQa%T-h6Qt98W#0h_>(?Qe7PuO*Bwsr_%}CNe75c1Y!<^c#gBIQx1oRW2IVN zzj?|yn7?D5yDs18oM$5(O;3Z%I&slxH3CjB9oGOE@7{wr+A2s$Q8glqH4GGScgxw2p?Jl91ZSiKbqc6=M~6c+x)M1eGXU_OFjhdb zYmRMhjNV5@;44{M=M;rxeZ= z#}jzA4?*9w(S};Cg=h<#%F?qtNG39AQ$}J_gD<9b=@9PiTre|wB)rV$V6)zs7XCM~ zS!MA)$99)NZfc|Qab-T=IuOz8T9m`}kkml1?hcdWKHagLAJR8I3$>^zqKi`VgtrNY zqz?DZCxW8s5m9J3MAqOwcDtO=X`5_>5PtVmzlK<1ArJq|k3RbQ-u3u>m>5!L$C=JY8hW;|tY0BCXle#|O~<*) zB_Va9;Y}=@CfhTGfP6?jfoL$x6WZLzT766`2Rkpt1djpniB38i#wH!w+{)YT@x;Us za5fo%*k3?$>%--*P=Dy4L)aR-9Z{F1V-qXM5VdOg< zM&28l_Dpblmjt(aPuQLZe&52t@7M$$y%4ePeJC9R{yhj17q|c#;ltzJkxo(9?0Hm2 za6!;H2R>2T5Qewlf@yDracf8SKq;Tp)FFJCot0hM7!$%}NYr5gfB0Aa@I4qBJkK!R z{S3npcoP>rj$?bk6 zs}3%y4ePl0l}R6>OIlZP%c)DcjM&fSuyupSu)8P+fOoNxsrH zcye-s#UL=77Hl`$B?9#5z#hUMib^8wxNAEVaG8|E($@P{8JU|6Aq;2`p{G@NgC|Tw zWO;3rcQBIYrN_fR|D!9(s`bL?Oh5*jjV6f6g}MJ&J+|3u)=>|)E+%e`XV4}P#1t>o zKHChG)4O}$i1`jfy={W{-;51H=Jt)XD5PS;(aLW_NZVQU@Gsyfm^d{ckv!xHVf6`5 zM`{-Dw!t|ZT{cGx5=JU{q}=i`P+L-oIqim^}8ffJeL!4zA!`ZU-$zqur#}snSD~m(m&OJTd!Rn9Le5 zQzH`Jgwr~8wn^yBRBKiO*ErnQB7mysq{%^?Sk}Y8bQ$$d$~Gtk3t*T&M-bRDZ3yBU zTzAwME$h&%7;vRyOV##}=AmniD?5n$+==~L1=YcXwbh~OBsN*v#g#`?dpq;cDVaF` z(mfvj}y+)j|Rm2CiMM@nLK{0JnAKy$|Q+75e9|SLln+?e&`{0WMMfzz4WR znhn}HaPe#%&N0_j#|mz*Gov=FJ7vnVcw#4YY$PA(JxbsO-)o$G&f*QZXzMXy=2@p9 zXSws?nW#ECt&1ozx8J6(Tq*T`{Ri*xOZ-cBf}qFg1!#u);<-)-rvQ4hX=%O(uNeTIr_V4*}q50<3CqK^@Up>i>+zNL-kKf_Q@ZL-3=N`9Man2h<6)Hr^&{Qy_XxX8C_-0jdvLG@dj!UMxv?1 z2;T&qk#M7F4O6164KBD#O|r+t{QS`{_|AuO3;nvT?3>T*^EW?!_0+_v)uk?96TZ@% z2jhPD1$ovr?d(|PItUn2Okyx)gNHa~)3sJ=M+-;uFdI2RSr`s?KEyf0SCuXn ze1L!)m<@vAu%i8R5Bcs5!wLb;Ml^e&VqF#qK2Fma)yojYor}eRp*nV&`>rhp!`2l{ zma5s-U~}ii|1W!Q*6inzocVwSy`D`nY1-A{usVF5mi}P zY>r5R2EY#W{d@wi;eFrteczYxc==9_=LOgz|L4%tvcUd>5-tzWXujuNs8*mZjpd;((*?`Q|PgH%2`;<8TXKqsez6tvgcIdxQeDIFx!-m05^ zdw>1qu2;{$diCN(U`>PMB5DJzgz@LI=r=R zn>7|Iuck;D;Ci=Lr-2ziy_xatgf?tbmy@rX}R$ zAUt;965;t!>%HN0-W(np#JQ7%GhjJJ0o)ZG{6FP5XC8wjfp}?eol%p3#Cr$_z1x_% zYDe0hZH8nAK7PWKEbb7dbikdcgUQ#NbhKV69hgYq0hbhpNeh+c0wH3KsXDGAkMRzo%5@2Wb$uo)UO`-4)1&mpCDV%4cX#@v|Xba zAqagv2awrWeQoiA5@=w0K{Q)T?uTL_l&>0a<+uyxAXnxP%n?!T8rWS+gVB=Pb5AKX z3`QYZYu?&M6dK_D(8VC|Mjn}6KXA$SEl%amH}9k1=A+=|k0rR7o#&p$(q#-v?|snb z-jH?=ph<3ofCOxsV~+*sBan9h#J0saX>@qd1BA93h|$6?wH77CWN3Of@c)Ro>c2I{jtj1KjZk6$Na16JNuIp4s8Hj8gaeO@ zPcPNo+6H2{E7;*7G6~5Ush5CY?^@N=>$F<#NVd;8&0PJonmkvd`S6cjBNd)-)RYXw zYJ@asay1)pj7t^!dp|BVNo;Um`|Rtn23S5uv1y%bbed%@Qq#F`YLgZbm6g>vmUW$E z2d&a$dtJI9X^9|$hkyJUwTVw;e-7z(WzFTp7!$obskInTmm*T8kxj)UZa`$$|eKhL5f1{opzZh=NiK8@h9==Z*QhK>JgrLU8BGOuR z;+0VlG=lbCREA=$1;hOVU{_x!3hn@ew@<{Q8Mwu3ZrNvncXj5*AY5jf0^-`kKl$vF zzxc~`dH&LGp4auW`tr@|zn^YGYkuvMU;E`cKpEDjxHSz$GID~k3BKa#9U&B08qY9C zfQae_!%|02@ADdJoCZ6=uA@P7jz*AAO=p){U0sQHjEyLk5rA@ohq*Q$=bYYJ+;*nD zVk{u_ZEmKR85Ku|6EzvLIoiLI4S38gOw|Tq?Bw1+4@LCx(WufI&?Tx}5a=t{7mh2* z(j9|W!}3Mw$z0~W)(#MMd)zKfe-3$TZwrar?$5n%+@qGG-VDX`eGJ8Z0MaAVnI?@f z$V55a=0xd-__-Z*#*sZBUCg$#^(*pMdbqSED4)k>kfQoIFr!ged&`Zb;*ww_1eQZz~8^EZ+`o2<@)uPZ$87$cms93 z^R4?8HXK74DJM{vk$|@aRdN7qPI}PRB~7fOO~yC^#U+f;j8pxT=%=?#ItRIh$xM*T zB3|z7ma3t>+tCzexOIa<&H?fj@;ySD-fdUt-k0-K!|}K3%b$Jr>gAVT)R#}{IwS#k zUt~I&xSwJMNqJ*=Eo`g+i}>zq75P4hbFiG7eeEUKrvf3SA+)B-@wG@)!mefocH&Xi zMoc3d${Y}pP#5C7D&%MUhmMnb;UDk$4P zTAv`fL!IG**^L9bJXuke0~t7#-I^67dl*APC{5gAjI*R6p;3~!)t;g}_JP5HrcpxE zF}&p-=v4XPwjTazT!rkT>NOiMZ!?z<5o6(wWya3ZgIdIz^6JI4wt-NESMjvDQ|WTG zPsaEy`tm&yQ3IiZWm;7&(1VLZ>e4b03V6R@UTYqj5C6<1IFQWc2Rj(;4sSU5>}|@f zo)aK&%pf>hJKkp{27;SW{@bv|BqMUdUk53~38fBu0s17=9727z+69_TBka+N2)Y9l zU4$Of+h)R@FXzdR?aez)<=3A-^|9^inV7|%V|s{&C#-`pPlJIHYJf7+ zXtqza6imnw6|{UI`FF2&MiSxF0{ws|Fzv}bk(5BO7DDXsBG!OzUM4iUmLY5lna|y( zESl=ahKRH=1rc0f=niRu62GzKBFj9J)~d<9<}^Knwy_;!Kd~V|nu7p`(L?Bf66D@#4Z#iLFm?zSs6n{$<~K|_VQ^d!-savVEusKXxD(kaXDs4vLgvk zPsBj{K=($vQj-)_BGP`!^z_PO8Ax2yRw9H3U!H1sB}&vs+O)A-!FTD?<5tIf@5{M) zsh;J_&p)qx^ZaN2JYW8-Ud>ORS}e{%H@Y=K*n(f@Av#FYS{=cIeRq@&6QUO$Sg5AP7cGQkO!29<+E;;h2Okl_l|S^ zF{DdBv0yB7!~&c)v*~g$2j;mNAF$nRJ_rl0gsK%;fgllJsFi7YbV?Ot5ZzQUkc<%F zmc}y#oo|eK5$bi|L}m{h??Rnd>##7W-vGMCi}r3izxSy7^&dr1U+pY)uMZJDKKdtW@z=K1+7f9uhYtZi8C2X&Y zP>HxeXNbeEu3r!eAl0e;3Q#!+B3-9z z6~u{9F+X*<_uDDzy)WnKq1IbN`cun>7m}Y&4WEahMqsDzyVmZ894SCoGw4iL@JxFj z4NX!sh#8UFmIi1Alnpg``RTL{5wh8L2D00B*coIEa1R~9>b7D+&ip8)<=aiRkJjQp zdDh|&K-Bh8WB2|wcK4=9e}r4VSGYA?n%+S&CY@Jk`GrBjO@)6~MDlPTZ(A3V_ITIW z%le9JQv+QGxn}hV7h@_4U@*dr<``$35niZ%#()K&52861#2mKI=CX%>{@Evg-}~0S zBxqM-FZ7jTiA^sMv)Wn*^r+!uPDBZt5vW+a>wp-;T_#O*Vp<0;$;ehZUpebByY4s` zFK>+Axe`-j@4XphbrK7SWDBFR+x|YDi7Ipr5M6mDwsb@acdn+V0RhE{s?IQ8rjo() z$ZmT=rPoedCwhrD%VzufPiFK(2ol0D6lb_KM1i7`RTrNNMmJ9Jan@}^;O8&%&CBQi z@YnVABk9Y%@7yD`70{^PHh8}M`GZqim6q_N-PBcy-7v)2Nn=s=K$K>6T5c$p;-G^D zT6tYS17bR-bZav2$^pl24ev`vcRz$FI!Bz2qLPHn8h01%tIs*KZ+%pl;%f|AqKbiw zoKuopm9~y?X_j;~s3GL^0y4BCB;4zC>Q*PGg<{ibxoII0yklU$L=IBv{VXPnLagl= z!VqufE-PI$T+!mX-RW|EQJ?30{pfwW_kDZxz8P2o-+JHP{`|qcZ!KC!$o0{KaPH-D zR?HQZBLyaEoa1G34p1>t7jwfDWFQ4YFgT83VLld!jW)YgXf>WK7(xgrD{AZMw%U+b zNw&LM_Ri-p-AYM}N8i+GtnFi#kannnwTEM@jKzuQAa33V(0<-VRABCOj#<-nf?aDL zi^JZj4;&;XIVw@wF~H#4=oRZoYh@?l@$2;mmGf~{^L_8x6H3x{qaaoF$3!EAeWf`Uggc>@(gJoo_a&=qvg z1XZ{h1~?$AjOOeYbg`fXhfI$-`+oQr(1oGV0_OuFKVZ6GcraEEh;|RTqu8m9u4l># zF%OTE;A!tIYV-6nz!h+J5PWDbaDF&!rp)3FOW(5Nyr@iJ*R!r5Y9Ny_Hb4A}S1)MH z*46g#Xs{Pr$1mM5Q7s+1C8uG8lNeX2KESLrXv`pj9xi4Kws}XX zx%6o4vNW;?4)((VbfdTMhkxnWMfTYveRkEobn7IC)#B7Xnq1^yc}%yBLx|-O3uy~H zJJE^y>8LGkE<2>7)ZGJ$97lV;k&Q3|@3Lk~$|!VU3avP{gXiJn;a`4sP2*b43{e99 zXLPH^loJ{EQv#GElfwxz9>&x_2#<|JA60UmLestv9fq2;u@ub?US&tWbmu@xpgE5v zQeA~lQPsG-Eipva!@qLfi(Y~L0P5}`$>J;EI#4d=iO6cNKKk))((sXOSW+RS|QQbVALjX30MD#x0-&j{|bCd?vGhMvY`S_y%^ zQBC)b0(|wceM6_bh1cGYkZ82%1C9w4WY&3E9M4=2|N50Ax}lRcx(N4uKw5pkbQvNL z8K7f{PkwB8HV#l!$fPG5!wBb(32Bb?MnjNPU+Lq3Ls$kK83K3LnBy>0BecaXf)$!$ zaG#9yhkxVQC%^OFIb>tIitHi7Gf$-XN`SE^S@IbZN}0vnk>di@dEa=eMFvuqWu3jX zW3}^REPhsiDA@*>>{#?Ys+MAYNk|u-a8sj0Vv4@H-tLh1X23t`1T1E`Rfq-1~BVAq2x;e-r-wXY%E%r@G0y8OrhQ9@?@y1`=&5LmR$TtB3d!gk*1S ztD+mY;3M>8VlQ5k05ffD%Dr2*tsd1ibgpAXrspIE9>k?h5!`m|70?)Onm1b9@uIaC zcC|Eus}iY9dKto^1?^7kkZ6l8J$)Wd2;``P7Tb64IPS_Sc12gVUjPn5#B>>VJrX=jTYkNNYo6kM~rRGQB=no(qUBYMcP!aJOLg~q0<9AUJlfdHPH-q?UYH-u^sV)xVSmCEK9tol9J07i*<;w3r+&gaO>Iwi#b<0 zLsszcZ+(oD{}ZQoJUyCp93BLfruTqq-~BW_Q*F!@#BeB4V7h?$4R@56+#3QSNXGC2 zGIQ)2)@^Jn_R#}H{O&eK)S;tY&dj~Jsyya-TRQIBarM0~=jL(#Mt=7EvoFufryeLq zGPw)61(K`HHVf(T!tm8OQ$>z(eB=2R!Z-#j*Sa>woNKDPwY{gq??4!>rj@ka2XgzU zYq)Go0x6nrhJ#zPYum-LfYrX~sq?!B8a63??nK)*ag+-heaG&zf&1;v#^8Y4!i=fm zwBU_J10#op4ZjimO1#EcW4D<>ZA@N*Xi~OV%4&KjbMZ*)4Hd#Z1L+~PAO7uUAAqRv zqsH;0#_^-Z@&8lf=;}s&x~IDLWhjDOS;;yQN~?Ku-kvdalg1=J7#GqEG%VQcgo%<& z!pzT4EVLRiqdXnNgPz?GEx>#R*dV$3T(J}Fp;EGkf9Glot=_E@EPl{qPpUdq?6unB znR6}_xo7I`Fg~kODhAvEcH+n|ix}Aghed*La9-V=WprvCIx^UnPfh6IWF}OP4N|j) z!|$Vs?!7PP=GFS$>!kcG5AgHvF~)SwR-?{R)XX}Vny~CZ16vj}^yNiO@LrWK8ob~^ z#F!eI0d8ob1*X7)?ur6WuxCHuymm)B8S$~3q(K=^$PO4I6dC%g^8 zK}RcTXBqqfHVVepQC-$F-L?o5yrk>D2%9y_w$|`pUu}0JUN72QyOe=LYk9(wNqezK zX76*CA3KM8qctB*L+^b#PpWG^tvAnc8hPTmMkFA%bhb&c`WiTqGAevg1-KceQ_Q}a zgmKH}23z_h*eM7mTjV_Lj#TGv8OzYXmdY(Uhh@M$N{nv~ zBlp%7ev~-1Tt$yrGFFxnXOo;b^_ z28dD3S?M6ikxGm;fl1#s1e3?{QRMiiNaSdVl@4^V-9YkSFsuNT#ptd8L(l``VjBzh zgU*&Q(a{*a3wgPm&K$drwDGM!$59y-Moj0$A1&a#$`t_U*-AotKV1ZGvFND4wP z4RvBjr)?V<+^ZR)#V0%dI#2jSpJ)1*z{Y5)U)+oD_ov*O-S-hC`2JCX5JZlnKG(2e zn~OCL_J%c&XZE3pq^T*QT?KF>QD$#ow_wP)Q~79)sf;Gz1yya_$GOr%8PD&+eFGk^~e}JY@NN3#)fQZ z+7JKU({lF@fCBSlhSES0)ttEO%u#JGayS$y8QA6Kr@2aWOzprVwq8iwMSl)s;oJ!D zrFozNNCblS3FZChG<+JQ4aQ?Mq?0+~4hmD2Ept06j(PSsuiM}97D&@quR#%s@a`sf z--g4knrGS^v;q{hMJzz;HQBm1qgx>3;#MW(kZwzD;aCPfv_v5Vuqh(@3Jf-0$Sou! z#^Ly8s|ph*%pY&dj5}Y>laKN@-n{<4PAZ?RGmg@jyoqN)pNXFJgccmZ5H2$3VT)u8 z@}MrPu@Y_y=?iYWK&O1f*|vPQy%U*!{$sSWNm2+DcnnT9h3j(r95thx#yXlBTUyC4j_kkj zSAH+v?f?jt`{fmdzxdt03w{1ezx7wI7x^zg@mGKT-CsTV4?p?IcNB_i7~IPw^SUm`mFG?4$siDWugUSb!vqp9ovVFQaC>H^mfk7%=mF z=}*dK2^}f*b_w}ow^}9B6=Fhc24h_D;ovA4jz9=5}A0RSvwZ4?1 zL+Id3q5@*5#6GSlZD%6=63v9ZL3o^cFf)#w{eVX6B-r4lh{Lj2?J^p5W@!6X< z_3G!3>~MF!ZI7g|^rH1|dq#fp?hih=7tYYm>2Q(b&Rm`kut+*Id6L0&7SN!s)P7^T2_rfK4M%Q0Ee)Tp4_>eY2k(+7zuaan#9+ zQMzuIo;|3kA$2%(b$K+L`diD_0J{@Q}se(Bg>_!0ZBAQX#%%KsJ_> zM%x29;3It_k$LvsI#peradv28yAu3lrjiGbsTx^KpOqwC`?59k_K1J)%eid|;#K|X zIRYAa(`ZHzIuJTl->KrJ+YLH7yg~4 z3_t(zmok`kPWp+k*$~3a(dY;qXc^!p6!It(P4HSXkemK;lMvll*+I^JCf^nHaSP3)|QvmX9~i?$yedTJg}KOv@b7;~G0-8PqP-h+mE zD(|wRaLnbtn7asV?y*UA0TKpb>E3n*3K*r?7H_!6$e^s5Alhs`iZB;%nY&k1YCZgi z7dn-7+TKB#SGknZe9D$!8jwO}uW`_f)&oadYm#WnrvkL5AkZ8b#M;cRMKqXF%a<){ zk_xWaWhQ|DYM2M8-gEf@HcX-5e)x~Bj(jo_V9?Bgj#dJ_9maHF+1Aysr259$(OUqq zXR|Zr{9B+d!D6~+vpym9G=&$_S{S>)p<0qNc`zJ=&_Dp3Iu0*9|I|8%AO7Pj6%rNg z!KB8JRFOh6aX>QdjBiy=9?1J4^%IL&QA;Q;9KxB07%%o<$KaLuH&!nsyd z$k-CQjYi%PFMCedz?bhj9{!VOpZvLBI_T)ne*Nj^pPipS|7-t$l8(N!4*dD`*_VI$ z4}bpT*RFN6w`p0*+tGm=eAEGCpDT~kY|SwC-Dz`SP_w+77j3kUdz)d)*5Ni0hVE!~ zyHl%)?}3+~%3hcXn9P4n3v;KGHUL?fMRa{67uE#4%R*ZZQwOMmy4RWVklK+gUk! z2hR@-GB?ZUz3LZQ(>g}SU zI|pW97?q#on|}4>SKkQuUfsTV_r8CRO2+nrzy0F<`rDs>i1!Y^Jygxx3jy3N`06(A zz6dZ3u{F-v$U(~uISqzO2}8})k3@H!+q) zz$c>NCt2jd#0axn8Ha70g}^_UHUk|o+X#8c7=7cM*!SRdSZFuDhRsBsA=B+FvUXlM zYNMm6%P6N&P{R}0yRgk@{o4-{jfFqL_~<*o+RdQo*}Fl}_y12m`7__yRs<}eacUzM zZMLwMQ6HybY`eG;P09Lm92kuH>QDfzBiv6||v zQTtq4b{-2>{N0GhZ3q8D&NjZ;Q0{%_euX@Xdy6)H%o>spFxcqcTJDe1^7k(-zc+;I z_CR{)%ek!vzNlB9*7MhIUe$amClGD##LTn{W4f^Wm~#SC5J&^&y=;)fOv%}B1|{T| z4q68dvl^*OOx2ilA1dI-iboOv0Io83Xm~8PtCupCCJpT{mMqtCt1IMR=n5^?*;$a( z5cPKDsX|h8tcyW=$!D9nV1m&I`9ynIqNU5q3`I0iI{<+Y{z--`l*lL63A6?F;c>L} zY|#W}biq0YARjZ0ArJrQvrm5Wy-z(nDmrY9LOTN=k&H=nnktZtlRDlCTpaY^A=V+A z4sHVoMOh2P&TeT9&I0gJ43cXeek~Q+SPwNI7QNQc5eIqRq-t`;V;97o@9}K}%j>Vd z`s(GYH?N=P%gnF9!{*7oP+~g8m1w#WiyNp_1GF0g#6*q;ywTaEPV7pH z?28C*z%0nCcZaPQ$eGRS!fJwfJM@UU!uBQ-r$y)^EWz91>94)-Wu%X>4^n8`f+l?R zbGSAt!_isS!AztfSg0eGwGPORp;kD4I)vH^5=7r}x&6kXxmdvC5CT1frA1iZZTr^P z!P{e17i+YfY~F%Me9Brn36QJcvQ%~j6K2gNy;>(byVJn1X|9cWjrH*9bGHSaCPO`f zt)CSWuytZzD-g73ir8*KY;{6%>TxQU!zkPkVSkq1?s&iR`sLTJ@=9@f{%%Ei)cwEn z4Sb>(t1sGjd$HFa{P7o)(Ez7FSik&|ci}^&O7RKM1FSp~%h z&Z>e3aJE!ntUWKK5w{2dF;Ca+*-%`~#zc!2jKIqhkEIlvs=?fH?uB}8VYIIvfz0+) zv~&j2si5{oV1d(4Be+InVgEjf71B&=)abnwp#6vN{=#f0I*Y-?yiOe`u&`x?C$9|@njXg>TG&))wQ6b-N@)sA;fxj}%DL$?7u z)ic=F0dJ$hy~rlk5XYlzNbQ-;*1%~LUUQ&Uk3m`wQE*35>4;#hCC-gX8jd#OS`yCY ztuU(I67#k;3erv7dD~;bI~bhm z!%ZNbC!6SoWRvJ?CP)S__W`}09ehws8*eMw-?`rX&ujkv^IdN$-#o5n?|lP*g&)AZ z`7|GKIX?_8=iZjsj}F}*z@hsCNIjS41jAg433W9(n?kI4`SM9RE78>4&Gy>1F68W< z8~}CY+^1nSsCoDd!(5uSLyjF=kApCW;ryo6q1SEwhx9^As#lqgd9sIoC=27A4J1G>_~!O^YKvG|FnQAikK8=4rfBvcP5%;rAU zS~nizT@TO>E&Jljk-Ky?A1g(h$x&tWUr#PO`=Bj+%)!e`qPc;8sG1#sp+bDFx%IaZ zEr93uhyVH+OnvWZ4fxjk4gKP~AKr-OS&s628wp!0x)O5r<=?k;6|nUw`)bo6o-d2lC|?U(Gk)yaa#c zlTY3)CBOIXU;Mp4ov(lTd$8ih{u8;*+>ZS3d^xxM_s`IIe^t-Fc)7p+{K-P z(IHdre4UpW`gv{8XYtIkp({;B4~NcFWDA;#V!=u^!2!k@Rc2l1k$%OS2y(mt8i7D} zw2fqkaH>EE3mG(!n{C^7o968Wy%=v*UU%LIZ&hA*zMPw9`gi_fSoYPcdR?!6R?lDm z{0ppx-#Z;Si)t{??ZASsM8Mo!BSg@AXoptXZ0G~-sn_sD8;ehM&U8;k+yW{^jib`l z+iq-oCIs=_S-H=-IVLJi#y+$2>`JKyD1<(K(C+{OzlvG|ly_yZ*))2m-3sYcGXcgS zUWTkP8f6UZ6|d$DF-FsDtJ)YDGR6+-3zamD0f%v_RMhmePb8MiU&6NQC6! zVtQPS024U<5f@#Uc+TfuFNW6U5}0K}E3}%}ykwj?^(b zdu>5qO0Dzs-8Bw+ggH^5UIDSWH!KCW3z;kgzrm%AH1&oxAe1$&){^kG2cL-CS~`*5 zhg?apg54ViM1azmjx!s3={bUpK=whn#XzbfO)PG!SD-nM#JpNHcCA_GxXnkztC#uv zk8FZRQE)v5sOc>YZjd5ck#q8+hfjI(<4Gkh&bKG(t&_y`~*m|1j#oZ_6s+>}M3 z*1-7uc!jUl6s#vCXFmM5Kfru0#vnzIC1HkC8Gt`-x>84|_J&1A9sGQD5K3DGVB9Md*Yi7;_vw>% z55yUgLdox>xlre!%PdlbCT_9y<5LiC-4X*N7`T&}@+!9)pWPDE=?-pv3NzSmK_Tbl z82FwW9_cTt{qF=u{nocI{Et)X?tA-wl`3CqvAG6(D?CZJBL@M%)ODqAf%GRMQ!yKY zN(!x6?uhaM@Dlt>9S%o0cwZ~`_V7cba}v_qd`m2mY+MM!0Fc!))MZz5dX)ck@5_1e zO*!-T>-n3{zNlAE1%gmX*=$jc*wqGEP2VeLTI20o#Bz|+n%sdd#mr;+=H(I875VimTc_tF=50T}T8D)0O4tDQkys z492rsW_%AA{QWDZrzX{b+ac$))|HWV$N}Hcf^@LUwl!-Z4|%ji1a>PP=q!TRd)kSS z3);>;j;!6K$k>rRK0=Of_<8p+5R&%6Zpw%=T9kvjJ>ncp#LSJzV>%HrR75gxI>L?z ztEJNdE(!4P+QS?4(ip185O_43sd+hDhT6dE6Q`eJV>iT`K((fP#);gv#Anmgg(nvR z8rqXz{IkzqznNdIuRnkO`Dg3-t9nZLc<=l81n%!UhxlLb@8b*)mt%8fp%jGNB z;e}l_$7m+dxhW#YC?FMT7s4q7`Cl|ZGpKxZF)%6X-T>3lBwfCzLak7D!#aX~BD}!f+A__a zWVVs(6o{uM=E$B-ZOyG?jt~^NW6g5JOT%K3m~hcXaodG=^OVsSn4!c=mqka!X+@nx zLaHNZFJ!A`-ImcKrolPJ2)(9YmWHf9PpAnA1^CzV^UuEi?Dmzr z_pN)vxAI;1puZ>hVB58&L$|oA2tmWv)`XnCa{>bnUY5ExKk(^D@2&MH#6ePQALv2t zXgo*1kS!yfqaT}VweAgm`q8qF1u5KOJAg;6L5zN;RDbyI(aKV!f(=9Figq7!w;TZV zZ9QB4Bp_go2+B@A>zr7vp-Pq6GuH-v0MQ{6_{zQuu19Q!tWz2eFA+x$ECJFJuu=dp z+bZz6TX3C+|KZuy-*31!n^VsM86WI0q;;;M%_}xEy)aH_AJP%I))u2P8Ls2NoRZxH zKK!sMnXqt*4PT?)o`F7%y>S9_FH5s!x zXUxggY9cJ0strnm!lXe@Lc8yyQKdC<_)Ix!h?Hr&C z2R;0+KR_LPc$-D5)f~<|71@lc4MTWzO^A4LMfHVv!nPZAOdur2tlFl1itpV3$6Zax z6B$M0BtV1`NZdm+P3^5Y8^N%&G8VXCItSm{`0ss>Z(n=7@Na`UAJrmvzHyIUdwap( zdF|i+{K1vKE5~V=Z)FE$>10)1*=jE5M9U64<6$vadScoNlrHc_!%CpMmWOjk>9=8a zqK2(%odsj9GfnWm3{Vw8Z1r$K;oua-O)GEJ12Zx5n+F~RIvuhaYkIA`0-<6~cbFs* z_=bdVDEmFNEBZsQMNdY`*hJv*I21M%$*Yu2Dce#6a{^UhX6RZ4R34*kR;0O--o~8$ zg@v&2=k*6);mv#bIAh?>ckhW|?sqF-eoqxJ`l;09Y|sX$uNanyYn#yutzLD~Sqha_7sr zRoAZh`TR0#KmXo5NE8a)R1v=sW>C;7DK{9J5MHp6N{|0shi+08D92R_%?1*i;6tJb zA&jnW1HcUfnW4IdM8W3?qT?~0}PwMloo>@@@eANm#je57y+2FH| zBV*`{XxHIx!DNEQ9eNwPUq{(fxcUvk&q1N1a};cvU>1SHur|;~a-@y06MWDZ(cb!m z(1(`$!~gyRh(oMVDw$835JVU6El6F?8P^Bu6Fy{yiiKt!X$AzmLvXjmp{+w+^6YF4 zX?jDJ4x|TmSkzhkG_l$UQ=K&6{q2{TdU${Zcy3#%6`|Amq}kNkU>ufCE=9OP6QC;; z6u^GqW3#4pjCeKp=mmTvxPFn>oLj|5pKu45BU)^8lDI=Am4o?k&*g@LOA$0ZTgUNR z^V)BH_Qlt)zWDkT1o@A`H12%o9_{AzqP>uB?dETP{@`jz-&VUQCou1mv z99=v`MABvEoM?_6M3y8p;hWn5O;c$iU8Fb6jFyUR8#NcNCJnySko4ooVy%qJ0FI#W z(Yj`Tlo%8_7K-%kQN3q7tTqRv#t0vuOV(M_&p;Fv!82^(%WJmNGSKR(a6}0$=*CJ< zZe;@$b|B~YAPyEs{nP`EA%YPaaS^NtNp`DI|LxcF)T`&~>vJA!Pw#!}o+u#OO#%5H zPV4Xgm8;cz&A}Dul-DM+wK&kF=naA~ZW|QrW?*>*2u`8f5EXY#l^v=hNEIR*qM7Qn z*=@Ul54=-#^F$~PgUpDCV6e`5gOHTZT(`QWgK~`}fEi1tB@7(gF_1-NZo%UlNNO^M zie&bhlNj;M;&bkRJb@=q9E{uK9lf=qU9H)e2LQS`g#im0RWw6p?2O)58>LjYgZ01g zP9grH{@_y5KVnqe`R+Y=Z0R@0mJe`Nl$#MRjdAhL-GT1d$W0#*R?OUna24aaAT7B= z771^3(+YXE#}_DE#u$U|QOER3FNw8h%&B37BuYVIo*FP?2$SowBe~?9+l6i)bSSiW zhYhbK@lKu*Fh%uR0j#xSI6+G{V%?Q5`KstuWd%=z^0HI24(}gTtnzDo$bnFuMBr&h zc$F+WYoTuJJqS4#-G4DF`t`4V|I@$r&8X0{NXbJcMp2{TplybN!N%kCej1^o%*25eF6uC`EJAJ@5eeuF%|^Mb zoLv{ILyfPO-P5?P*7;IPs1 zJlm1-b}N3n_vPHYwZHqFxAqsRjwfguB=fjKR;SP@u4SeRX_K>!UdaZvosh%QxRFW- zPa5s*i@g>m<&JW3aq8d$1D~xqJ1CHAB=SvFbefsUI}rNb526ucfi!wAQofhwB!sg{~oMY`wYLrNfrT-F~+;D?3t zY@WabX$D+&NRw%|`<7rtp1Y@>OCx7tSh7PnI^5@SxDgpxYO4?vKP?>zcfA3r1EG1r zaj+-T<@D~BLtN^D=6EfEFuXQ3*6!(Jp0GAI>NB8BZeEdJ`{L0Kb?+PYrk-W6MkXBqey2Asp z5j|i;&5%4WJGIL=ARq};#07Rj;4EAcje)z6C7Dzcwu{w_gCz;o%k7KycYJ57`RvQr zZ(e=UWQY_MRlPqG^-Hw5m3^H{RiAG?952XW?mn+B^tuu1!V#oKZ*i z0w}V`2A%}Kr zfw9)XnLT^Yv-&0)hG$Gz=2^f1Y-_Bv7(38C*xFYV!7{l@*62=WAFNG-W%p`QC#{F| z#-l~7;+h*gt^lEhEgt^HrC}mzKKjvFJ-K7;Ib_%n$6P(Kx4yIO-gO=_KcK>iLr~vB z2m^E_pEJgs##;rDe(BaZ;FDz}No`a_vNt1WlC&KJR>q*gXRn9<^VtVboIU(sxC$WR zPQX5LrFk!bf9w)396OE+)P|$Zl+!L?XLC8LmvcehBb+PoHQNYPt$A3lIFgOjlCv$_ zZYfqW_K@0boY9oQZQNLc+r$6;M@V4&r6>Gtpo(8CfmrAT7Y?%_d}U^BA2Fymydea6 z89vU&BarOVlX9<00bFk^K1&ac%^1WLuhR|?yTc)MOE8RSt|j;t$C?`?=yssWBGA zNv&^38cd!#NnJ$t+mWQ+0xf?TYr(zm;FH#Zc4IAgALqt@8X5I^_ z=u_*ERn1Af5@TkocL-2Jbm!7dYp({6>FCjN9Kcu1ym4$azTk*I(DI<^f>8Pi<&I{p zRYyJGz%+=&cGrHZ0{C&PMYl6ScYcP?Y+Txsm?H7;mm#cl7@BFfl!a0wJ}E(Ex7uV zP$aM7sTV%aF#abT6u=?VG!%?5&Kxs`XshxO@W&%$ySEJQ>S80&pEMK=q@!N~!8@ZN zyd0sMRip!dEhrRdFVLIL&U3+aZ{EGX{_VT>cwBl?#klw5d-kcFavFe9{Y9skyqB%9sjG?Q30F`+qVAH*4H&58aKY%oXmvuC#V z9}XivSK~C7l`00kId(Rc*-T-h3*9;URV?pF+0`=7Mmrm!(?3CxowK`^=4!2C7%h}g z26RVC8e`7U#2ed1XLs)*$iG>fC%bCNX6cA)?Ojqnw5xY>L= z%^UM1@p|Wn_hemLAJcc%wa0({{_C2L3*drCV^h}1 zK)oXBB*64GrO=!`{P6M7B!T~%Y}u&GGBHG_j`RThk7HrXQI>Vy>gVBK`shO#bpMyH z>AFOMYMsWz_H5We#~wioET5@kN9Xc=0)h(=?8^#%q-*-GFGu zTFB}2Bzb$@e*C8V6_CA8qCt0la?ipG+6}zm0}KXrFY8;`6Vq*lF^}#`F^bLyr{r0+ zP<;XAyt!@wZw3We)J=|AZ_|=Ol{?xEV}ap}>l`gV5Tk8?ahQb`m`Y0qs4kfbqUOBC zMcsSf_$H9{^IyJsxj(6|>eZ`noF(tBVV2MQi!WZj{^SV(_Rf#-nPeJ$O#M5_wCfMv z1Ij>C>a@{n!y1+9psgb>&}boy+8VdhI}044+Rr&#qxCSAzyz_hy<9z`(P|E?cEb!m zcsTAsM;i^ea;=Y*x=&wReP19*tTd z0PB$!tG9v%60lQ2EPEm*t{ZZ<5vmQcgwYH=__i(rSx^yk%mY*Of-N~|QypvA#CTQD z&U5hU@I!8l=8VP_MF$#V4CRg|CxsqB3r5Mr^%`i76B-c{2|Oa$DUFchjeeE`>K@Ja zV320})uoLL1@Wel4xGZ!TRvHwQ*cU}0B0&<>n(hVWmn31gwso&R1JRi^7W_n=H=6B z!Mz{bvti_U6Gr|3r!Epjj~T03VuxJwLe(=i>z=DxEdcw@u(1lRSiz;4`=v=E;L*{C zFHCT2s0QT~=CqC9^BRP_`XSJPkRNR6+;k{J>8`Bhx00$Rb1G_3gAG?*J0fEf8eG_f zF9usx->ZqO>P^|P0+&#RZ8eEOuBckjpc>`_B*jvDeFR{E2$yrJBSAA*8kaV(bObK_IhmbonZ zuC;YxC+o5Lv6j$q0qSEdFp*+?8}X*hskt19sIA?ID6$v>fru-h6ceTu-bbx9pV+DH z{BdsHk3aexU%+#{JBmR<8C3~ZXAJP*cb+oT6wnBQP4T$&GpG4v#%Jw|kpHzI6Y$`( zbAx#&T60+dw{A)kJj)``gEWjP@!hSP?ZiYlMPJ?UE-lrOY=?BpS){KDr(mi-!hbV!oqUV-M zFD@Z~DPuSSI_Szjs?_ zzvLz_-@fp8`}wOc-#uyX-23r8yOi~trR;kjT7QV06H7Q+35V7)%ClD+y~SksENPu7 zGp_pmz!VcHX!R-w;-1{iIsjOsmm|snBq}UHE_0p)Viefjxj=Y~6wi^!?Q&26n??+4X6W;ofkyqVg*`jkC z^YYZJrnLsh{_$gyHNc2m)5R)xjFV2O3v!NWT~!WTDKJ|wg6hdMqKU{V;nu<5E7WFN zk}QC=x6y2%96l@ief!$Kc>C$+PY&Jpes;e{tHox~HkPv;{OwF~65)mG-T zevo=LU2W{yy7^gaP()EXBi4by8jb@Ut%y!HJaXPh4jjuRqed&YHI=~rtc?*6JMBFD z>!_M-q$2?LT;$|~mg0Am9at6}1HY98r9zJ#qalGdyu+BXuT_1ZXGuM|lLG_42Jo#d z2k*7kqC$Dagp?}qYnpqpjgC6M5jD|=zyFJCNi%& z9v@&PgMM1b7w*g7E-JLpV*)l5kdGxi@oRT(*u3^q469%c6Ua%bWjJggP2egI{{Ww2 z$6^ckfW}@Sz2<6rVrSFVyP8DHI@4^Mtev8Rmbd0DR!d#N7$)tj32n}BfE%KBvjwil zK#q5H3T`qB>Tow{`1bD~A{@Nax{!A;ES@XE1mxwgr>J9HqGX8^F@B_mqzaoXZA zRU2!Lfsj1`vb-k-D6zz`a`%O&)g{M4%|slxk?M}W3=h06F#$!21?a@g+m6q@KhARw zjz6nkeF1d!m+xM_dQQc0L84F@FVr1(Lb_IS<%xoTYqvVo(WpT#^^AsqBI-~ODnW8Oz_hEj(ny(! zt#$xkHTvl|NUz#E%n@n{7(Y%wT)F|Q%{H!IO1mc8DKEaQZ7-Q8f`HJSLzyWiob8~+ zF0MLfQZ?~g#KgTn&U4@GpS*kHuiwH0|I8OV9JvT|@WKL^)E)h3w#GRrz>~_O! zAZ#*$>ND8NrQ6YEY=)EWnnMC0S`wepaLg2)b9S`#Fo!7{q^E>Qem4lACK=}+#5wP_8fH^~RT0@o17g=u>Vwi2 zpa7ux(B&-Te~;;*oEWT|BWLcli=<)*mdGR8a;=2qZ=9Th0Qpm?4r3_#J6!|fcv#<#C+ZBLv(7G)jTV67sN&1ExOKc2PSfkRb$4fP0Nh-s5<2^AT_MN zt&Q1Y%)TyQCqe&4mskjNsLia~);V2#Gz6JCM6!jMyad0Gcjq=_5Iqk3>PD5V4?c}B z5GoJ<=9NI|bebALbiI~{>FKSza9e#^n*rIwz{IaFYA1ONP&R;wJY(??HKHAB)HErS zjO-*NOWaEIz|wnY;vK<>tL7@W5G`T>5bn3@)xAH?ZLH)IboS4euU?$z7A%ZnMZx1N zP+LGPi}QO;W{)1wWCVb1jY${8Lh#0I@Rq6=0RIkEWOEh6dB?XzA#)~iML3Z`j!|bF zD?%G-Bcqa_35L>|bo*+JkJqE<%bHPJ+AzkcNZ6}}f`RF)O?X4v@xtRv7#fbGz{nGd z)pI8nZ>AMv9g2XDX&*gf4#RP}AIs=9c8Lj(g$%>Y)IRN0T>|r4(DR)?&a-By{qmgW zS~NWcl096e6pfXZT?30TlEG`@v-E>gYpR(Z6QhEB@*p}S4OU)UGksK?z7{f%>c}kg9UYbf}Oavt+5)olnpadp!tgyDIhrnzAJBu zMsva0x*{9Qn1HqQp3QOEA;eaZ0j-VM-~vwmpsUcBYRs8Qt&StW!WKSGAqXV4FnDy;4V6Ga@k-urZJvm!km+D+4C12UAjDvXw=W3cDdcqOZGm}JlRHMnkDP2xAy0A6vkIf|(1TeF7#5hj z%gWSw5XC7$IDOWT+aBb-KhDjU`!^oH+eQtJQlkbqp!`J9-)1bL9OxV)2 zJG+f)@hE&<4dZa2IMY>-#6SoKPU(%~x}b!Rwn9pTsExBw(%!($opiti_e?{slaEUi zv-};ZKGYL=hR#4i5h&h(x4n9cUe~PzM)tB1==wH3F_s#yGbZlG?O^2bYJyG>eLK^b zn@0g~0HiWbf9^OS@5|<~q{r6odpY%he*CsPbMKGy>?Zp=zS99c5Oai5=1yGC`s#yD zFY2-lOv=&s7^Sv$4he`bn`@%LUl{C4@1S5VNW>DP+!3XPH=&I_GTEv!925>!Yjt;$AxtKhEw4SWNu=U2P0Rq6=lGp>Yf- zYcy0keD=NJGDY*mnyGUucrKbfap>g)-5TL)DMy zjl1`gdzLk$H>?@`0N*%lCes9KZCVGPz-V`x%VKRBDh=$iDnc?>6@A0L&S~Z0=aA=a zy~ZMK7qCrTeU;}}tpmsw(R0k6$|)^^WT=)bCsijNw;QrssFCb3)V(Ed3IZ3)y2IW% z2IiK)3{SR&)O6rpM%KAF1`}>_!+PYp#^H%f&=$Z>HqLG+qj?=x?7t%#PFHhq_Rf7A z8n>0#pP!enUcLBw&%1fy?)>1M^~LoYU)=kce6irJj_ks=)fv8}1NA8I!<&gX22BpY z?>4vsXoX`W1vTy2d%Dt0iauR20g*-h6pHD>JeT%k(mINXqvw@O=woK3oJtHn%EQ0& z11OA!%-H*^(Pu~3ZX=|LLQKbEM-J_u#}s5?n$cVU4nomGdRlL(daN&)2H5xt`-B<# zI{R2q@!ADQAp&FrUs;o}K+ROLP10{m6ClA2iyDW!WzGONo?7jL)W`wrDAt%#9yL)C zzZy2v`gUsQLvtpI777Z$I0KYTMyLW~fE%oN?!e$_w{gw?uL_>94DlGy8Qd(i`R4Pt zZ(qFq!oPZ=FS_@Wd*;3W?i_%=r#XP_S+fhfcw1-A1=Q!8VFa+ z%-p?8iEkunxb=!F(Tdb)r!6+zbVFDKJfgJ?N_U@aV~Pp1oT#aeBb2scgp8`^uB8*Q zognWyjjn6n9>%EpR-g0X-@5>RBU}20mrcVC68$J+cCgBmHg8zp!GAhO=V@p???ymA z9O983V0|v;Im@?$Z2|uho7mb1C~%G*ZiIjiGw%~?o&%Oez#$#z<*cLqTHP&sF2SFk2L1uX{#tpWsKoLD7 zBL_1$CHSH8pp6tl$AI7AwX*k|3#)=K17jzS_#JD*m=qB5vy%$Bt=fk-4KWI)$w=5Z z0Hie^{)6|q>-}Rt$0K<0_?7JW2`MbHDmm0rf>GtIfQc}I_nvN4okb2wu7 zIolKJ^qs$f+uy^>xAm*1r@%WuvuA$~?dJFJ0bX>~L-3QIwXzS}u{t_bqI2M~h0ts7 zW6fh0Q+6QYqCLS%(1^YTMPH1`lVR#vVbewMzHy=2)HAXLOjCBaO;;D6crW&XO5;h( z??*rfxq0#K{Q!TgFW$bW(99rhdf7-JjCMC^1P~v2$2Y%?%RtTRZoO^(g>hvFSHebu6K;gF0enDTO4ZDNkf; zmGBpYmGQK))`lgevTO*h1x?m$+uV+dS-KcC_uW_~@7kCt=u54f zAO6FS9)~~#hb*m-#eLHRiK(NneB?k|0KR=kx4{e;C)n@$LSe2aQm>?m0Q{f|9g`c1 z<^x3uYsun{3^B#ZZrH{EOB95udN_j-^za{j5WMsM_@fWN5b*Gy;8SSA*ru3fN0Fk; z6da%`MaFw23M5WTM6XP7BHM#&9s+`6wzCc?0>ntU^*w0O1bfyd10zJ>;%?HFi{X-s zmTmg-g;7$1ANb)v{Q-FAJ;;$|cbIH3oI9k?xrGrsXnPWmh69wLvej2cp4HdhrZxJ8 zX}hN>6li^2Zsj(qXjSX8s}*J{CY{=+jj29HQAsu2_}7uvZdb;8f7AajT@d$vici)? z{&;+6ZG8OaAOF18!+-WcxFG)X4`FS*%}d<*<9v&g`sO$Dt>o~hZ}Zdo%%ACO8>JE) z#0@{zp@tB=!`0nX&{i7DbuA2OHe0!%hDPg8HLn?oVH5(19O~>Navj35Aam8M7U(Pz zj^8fH)k3T%(lUwPrMl&<*{Od#9-}aSK>NQBw12}GMqB2Qex+J4M;$oRxbMO*_!Ll8 zQ&5)D1!e>*0;c{oA^ATmYEON)rNX+b|`?G_U| zK9tIBS(!$d_wa<5(Z@{ET@4(if!J9*PfVsM9gIf z;Y*k&52S|snkuGZuF>Y27>Sc>Vqj!drp#8iCi8ngKj zOy1E|#7ufqZCayr9@?NC7J133HZq4_v@3-xuCK!r7fCNPRvFsD+k3XCZH;TTtN0wu z*Qu;kmILb`9KarIjwL70*fRS7vl?4up^iS!;n<2J1-RTJ7mvB85Yt5)o-1T9s)%Qd zDi9n98AQ4A*57Q2KYRP~b-wbKZ@zvR{}`F>`21H-x@>oTe9w>-hkk6|AuC>g@Zr3V z-}orTH9#3xsZ|?g|E{?~{%$MsJY44)l1+VkE*fn5HMFNVK;# zc6X4}aPD`HwJ6g#_U^l_5Lr2Ch$!(OYgbUX+`3P`Hp|19H#h(;wacD!J52D$U%Y(d z@9GIm@ZL}DS;ep3D1JY{_>4#o_nNrEC|@Qk9G3Nho$(H7sn`^B?iJds2Begpn5vxQ zLf#SX#W>jJF+m(YWVw%>vI&*HV+&*5ZZn z9BiB&E^etrK8Uy9vPU1-5vk# zx$>Gd72k53g8%Bx%XjtSynIzJ{N3lDz04;;!8<>{XWzSV^WMFWeqt?Db_tLsmaYTH zpM%0-arLPa4jV5>54OSc(SQ$f0v-x?w%9z3nZX9L?TVH<#u=1h zf~yq#0J=BpvD=*0y+6)v;N<0JU%vV5%Qv6m(>*f;)8<)gUi((qaa4g+)gdi`yJUvV zjzQ!+4IcE4L0JYiy2Mx21b9At$dGEmCn|rLY ztJt$fgXahVo&g!~OaPr*6$fo}NH;Q<>xczvDr;!U0jl=44a@_P85v!MY*^>dK^U`P z%pb8n8z`R5YM6@{<9L_3#@b!O<|6JIyVjt&gL6*DY3kJ3K^Moj?bdg-!%+V2W`}xM zuNG^g>(y`TfIrDsFTZ^GBo=Y!XZBAm26%4}W7}st2?$AV zt)oqU;+z$|m-LuUnX%`X+7jy8E<(F7EE8>XSb#cs25UiKfcY!RRKTo`_9&OAzDAvg z|LW1)1K3~AH83_VWnE;UuYyt#ma>L3(rhxa@MBiP+@&||*eaAXaj|TQ@fB)S*Wk}E zFdx7vAE}oU!-xcW@#W@)LM&5AD4&P_`kF6~Jsf@p!toh__I*ua2;Raq7XCN!C{DK6 zIeje&ZZbCpN@g5`ihQ))oq=ekCgQsKK|cW4j=6&JqCUS z9m&K70{LO37R^RbyUwbo*b6MS+X0=iwgJIYjF*4&|NLyN%uNX5o<3Ojr0GHclJQ^(uGMI3851ZkyF1NVqMh<$XQJH#4b+qa z(Ae>oxGIUHwlEM&cqMSyAYu^-M$=n%6gM}L)wiSH)y8ofBDui!>kxPP=`_G{-{$bW z51=~Q5SN5#1;Q(mRtrOgW45_L`mh229}`;NIsIZkDJX!^0oq%8a$gwZ4V<$*nt14K z2Jaun)OY%;SM}yPL_g8q-}&i18v@~*5D0&GZ{6WNcypEO=xmAUfqq;fF)$)YEC@9$ zKWI#Ck2UkKU8&xR+R4DKbeheUnJco(ZWrYa61IrhIOCx9jB}gz4f_MU?)YBlw$I7$IE1i@4~k7;lo;~Ab&mf4RQ6Qjo3 zIZYA;Aeo>(tTb7}wV{$a$CDbto6kS{;;C@p-cRkBw{6~JKj(Y7tF0b7kBn$rR(PD) zsxfvL9y2UymU~^U6-7?BZIU&jUEZy{mX4eTkJ>;xO?i{oTz2Lbj82SkX!GUP8QC_$ z*0g6Z%8lww4}bTg3vUdI!%pWj#Zd;|XSQerO0mzHnrzs{>65eMNSV6!q z?a@JRdr}tua4Da+An7|lxF-c+{dm}Kuk}Cu`VYSU&o3rOLf!*0wh439kU3}%=|zI= zc^zGa0rn)gb1FN23hoiZ(*pHK?U}Y7k*I5IU z)QA7}qYnXH`u8uFpP2V_@Z7E<%`re(d*QlsPLAy6Xn{_~*_f!670DP#lK{RXvG!rw zBUKy1%>_{OnH&D?)k4BsI}`5^y5n=9Byt&I#??80_y-q26~@_Jh>bC<-Ya=6z$=cd zgY0M@1Z=+=Z|p(vmM%0{oEFAP47mvmH6VL{n;lRE9mJYkxflKxV@QYR)*9-UTfLG; z3k_IdAO0>NabC7;H21Sn{t=r4GjmO5^x$S^Az7%iSuM3eV{wG(#8T@BN6x$mfg2d3 z(f8ae++vOxvJ^Y6v)W;zN@T@H8wJz^;pP=SAO8CfB60FRT;B+vI{4MAFsC)(j!)$ND0fa?RJLmaiZY5<9QWX5BME803TWP_}Mo6Gc&x?fM#gr zM&3OUjM6?Xm|ZN8%Ig}G(Wp6U|K^zysYNn1_6sqBsTgUj#^scXtzt4 zdI~D*bB_fdI60P<+Hjs>@*Gs}9VQq$ZRe6%)!YNKs*LfunJ1p0Iqv*%Zj02veEa!p ze&*E{Z{5be;$Tqo^zgzLhBO?D(ZRobw5`Ln@tJ5eE9qxJI0k+oX89%|wVWnfAt2+~ zcpA>42F|W$UkVp<^-*okK&_-khPQqDYLBl;arcf0J^XJU{l!1}-fLTk8&+|PZ4PcH zW<6|gAzO?H94m%$vV%Ei2k75YGhj@|QNeq`1K2&DW9Y%# zr2?_51@Cl_%WfMfogvEtz^^A}e`oBh1R;*C8OUdtgX7(H7Xa?4F^tjV?vw}nw~mW( zS%@EiLOQh1DkSgr656sb#Ed+2zNr`c<(tZPpTGI_ zlj_!;pWid}hVPD2rMn=H@_wUMlf!4QlTh~tnwShJyy z05EaIK|zU+vD6XQvFhYpaU8jm5k%B*;w^DCvq?zYPsdIu9shUx-rc!nbo1W*+1qz- zUcUb1#aA!)Q=js^AKf!?gz+(bCys!Beh+X1TO`^*N(orb7yzn3Rlk5aS+X5jTA$d> zVK`j_4$m7aVkK2mp7W*-3y6wp0kNtQM&UU^E26VGJEBY~>v1px@;kS&`=b z;eWs22FTCl3>poyvd!@OMq~h%wbry5+?NC{ZRsVqv07UMV@|UP?zur7fJQl32{wCy z{9-^GB2$w*4_&+{`ZsIKq$Es&Dv4cz<@!YgKa10EDRg$bv)r(sJ#q2auS><5>-%M(QymF z5Q7on2Z%t~8twG9J*u^AYuucb1zqkR!cZSa8dIkUv@9l}%#~4Ye6hFY>fJ42_1Jq%=2J)L z$buB{%z+eOE#pEQs>`VS4e|NsU(39Hpe1$sl+pkZU-AqjHv*E4YdTyH{1x7b@Ln0Z z7SL#@I;d?Gu6~p>CVnaHlsAASvyQi+r3FrVYm05tQBPHEj)+AE4F`~DzMYxdZRbh% zX|4o=V{h?TEO!?^+O`Z7R_tKPw5CI~1=T^rJ+r|Tn9_*?j$3?TZA%Ai8xgcgonmvt zU1dyKDX2~vyiiN0qU3+;u+3k-eev1n`^#7L;#K|X>A1?hAK$ZLQMwU}e(#g&`@bA5 z-6ZNVcSrfZ7bxg`oX8V4Ff!kvTE(p6$vtzZL8%Cih|-MQyeS zxQ-WL%*Wy5y95|rX%C$kuuH$y3?k%g*G|ybuLNmU0XhsQlf|4f&sd;1aiAADb|DLP zP3t?a(hdm0bGH$sQd1yL18tm_#_A&xn()DVg95(Q*raW49ogEbfE2Tg+K*0h!*%vFL6D{(W1x)=#9>E%N*CVDrP{ZRh9>1G5z)3s(?ds3>^zg#6UNkz z5_3RT&VYz;((e19Dk-q`*Hej8tLhABGi8iOeT7-higS95J>D0)w7pd}Q7hG3^43Im&U zUzjEpSTpIOC-~&3Jf4e}43U6JW*-C;)^W7CZF+}&z;CHiKmE#I{pB+g*LQws&m3XD z`?B@-@v@=ob`f(A#gguN9PNmmJ{&;+kaDw1dL0|kaM8g0ni)iqylR)nsoA#0K|%## zm97d&$5cu2UISE&;x&8g#28cNINMTkzzfF@|I9DmKS3FiN1zv|&yg-1jC~6^9@wV^ z#yOt}CTG5q z=tuhD6s=k%T%l(?{Ifs6dtb3-=_w=cC+5MNo}E$Ru3X4;wPAsdcpvcVLju+{fWBTY4~;-lcs7*Bf`c? zozGC@2XY@w!7?OdsIKGbC903;{tr>~q-ylFXrUH}=SQ&v(6Qx1qxL1U0aS~Q>?UVv zNgkR84d}NC)<^U0Gj7S7xBuSH?^!j-x>19y_rc9qrgqpcBfl#W!-_DVQedVtR+DQ1 zViBlRnKV}KJxgKRhMpb(Z_QQ>`d>d=-O%EW7SutE126E{JZ;x?>SO$n7WK44d2WxN z_x?D~z9^5+^%-4qT){Vj=nH+JDA_9;FSCuIuQi6AdG_9%vMzJ%66;LS0_7{}+88Cy zN>48-}cH6UW{J%<%>&v3F%zVB_mB8R(q*oVVrAN5$G_pXXmb>CoT#xjo6j zKT5EED+mAeAAJ7>l!F2`Mx%`)Au?1BFc^MzUrDuh6gJ9j5VN~84PB^Z8pAbO@ni02jV*oZs`q#G3O|F zOriIXjpa%5Oj#2+G49B>*ELy$p@6y9BqTUCJZJ~VvEG{i{e+ltc~3+z3Dhc_W>HN^ z^t5i*q?d1BynXkk{7H-R-p}pXx=g>R%Y1#8;+zDS7ek*tV$0OZ9b`=S@qnR&Nkbwu$3!9uCmODlH81);uBrlI?WA zn&`Hd4pyLHr-Q?}Vm|!sAE5B8Ua>7aXwRC0;eC~n4JZg%7KMRxMi+n$q=98=qgSC~duo2U0x&6z_Z=mS^0N#B0 z32M>8+B9h3lnw_#6CbJ+bHL0)O*-v!4hD0^nm}b>!XJ{H0TM$Y9J@1m0ho`Oac&vd zIkgf=G!VmZQ}lCC-Ws>ekOrph_S3HH?Y0mj4O+4KIRI$L%-Xw6$ml@DTlW_7J=s8h}DxTe1XqR!pY3FpE z48WXS5?q#XCiPZr?^0eo%P08ZG%3r^W?r{)U|=YTfiqqBX@?M8u3({5u`)1`GT{u3 zF$Wi>1_E-|aUwk1zzd1lsoW^hNt0-%HZeZMRn+^|VDRfpaFK>*6CJsQ5R&zE%WD1e zPrv-kU%z;Cu|I`G-TB!)JG9wuhBiOI6K$pMy6WLs?jg16bT^=+Y{}8VnnM| z5GVyW9%iI%u%x@JepIQqgz=GPbCJ0JsMPOI~aSC-vLmUtT=byp!^<=5L z_Y-_Jqug&Y${*nNI+Qwt5wv7ZP_LmK>KIbOoZ8-uN{m_1?j3*gn#D1NhG=<}XPyrF z;mD@Su$o@sZ4R8 znK+mcsRJbgn<@@MHF0;$Y#0+d(+;@$fboQ6;`E8#@jZei$oXLTt0G*Q2a2*iskT4%V0{d<(yi7E#%qA4P9#B%eqxq;&TSkgT5Am`qz&9P zj17UEZmD9hr7wpIGtAEbzm$Peqgs>0VO8gI7>CZdo&N6_RmIPhz~%%BupI!h8jsAc zv9w2~v^`h5dgVOM)#vHp=%Z|SoL4CqV6HS13<3<`tcclR%X97nEy+0+JSj3v4>|+h ziZ-ECB0C=b`CnX)4G(FvFI~iBLs?NQ0@5G?tp~j6wsv3`baFeBTlNM?EPCk&|IIm3 zY{EEBg2qV#w)9-gsLkX8p2R##;Ti?{3utOsdxquh8g}oG^F*ZZslWQmXI?4?nWta$ zL`1jeQ3+J2hcKpE&#BTJZs$ao=jHvw~H*@q+go zT@go7YZ|Y%RWE}qcL0Zvs(~dSYZ}U6% z{y4Y4(YLRDhmhyAYch-|PC8hj2bqkqboc4d^&s;pSS2i191LS%uyUfOie$Eja-V64 zb7d$ElHDs?AK6;9(_Mxn+F`Y8^Azj`x+Ao4^tjb|Ucb@5_=ldkseAyC=N}Jq`k8Yi ztr&uPInIAtodirj0SyCQSVrgqf4qw|WLBLvb^_l*stDpsI@)h_pnltH1MNHT)3y-< zg-C=ns(^R~wccx8f~bT?oxVLs{`5gVw(Cp&Yu~4BJX_AAiH63J%LsOmSq8JCt8_Qh z4kLF`WXVRSld#k92?!zKKp4JaqHiT27G+zBkfwZMk_s!Jnq%vn*hM#Z%*kChrui^C3%({dQHA4tq$8Iq)Z2xaf&ExP97P?s z4aN~N)b)(fdK+CrQUa=H`~XYywy^tk&Evd$?XOlg#X;c@{=sAJ za=W$;ALYg1N~0aNBsOj*DOD96V5YHVNzURnA-}qiy#Yq*bNAVw{}z<@wvlz`r}tdp zLw*|v@YApV;QJRod|c7`gGC<2$xKdLImSQ(dV%lbBRj9XWCiNw=<~qts!p;R)M6Bx z^U_lsA2`6Tx`0uQx-1g|+Wtt7W;{3+U1TBaj6uEI-qW2w&bKQ0U%q*{KdGBCznyzjK zdO8CyFnT|8z$YOA#sCExd*cKu4ow3t#<)nHeNMQ8WQ!eXph@)B&gRkQM1A2vff2VA z3FZQh=0?aSB34bWKZy*g}3WPwR z@J*B?Mht7IhK&n<5^Mk8?7dm9p4pM5hi;VAs*<2~cV_{>+mO%0I%_ zrx81LM2ZrVOp{Di$vF$TZyo%;i}>TL)LgKTkus6Y?_>D^$dDllP?>a_iESFH|S zG?J@vs94^u)x{{QIx-_f2pOF@Sn6<$VWYK)NCgp`A`K|}3RPSCFa`R}x4N`DU(Qpd z&5!ftub;nu^%7&mr-*+&kQ%#b4!`myQX~&;g9z{RM@%A`#cDB4m0Ah8f+(sU8r5u zRy2Y!&mR8OEBB@2JXsNQ(rL)4rsa(Ffy&5h=s_Q$~&)8g*U>)&W#70#KlF0HbuX#^kxa8 ztuq`Wa&ODLlD76V!#)Ek-HArME$GIn8%-RSVu)IS*e?gUc*rmV>UOdgA(3h!8q2|o zg+{LW@GYz;!48X!eE8R{+31kj`@8T^bd!%-PDfg)5jswOb(m@w6sQ<5#EckXm3g?D z9Q>*zfa#507@H8)Xf+T3Ux-s`=%VhuTend*8fLvIh8c+6!_mu^q7JQ8okvjv7ml!#%WT>|wxS0z8&T?}l}->p+j-NJB%^I|X+>JwOCU z%Fin112yiHVU+stuYYzW4I=5(1cTf z?APSeELH=Q2?8PXH8fp&`Q>><^XJM;b3UDc+eJ2TW1i-{XG44^%^hRHP}}KO^425r>IFAm72(ge6M2cJhhomu)amBNP zQNO)x42B3YwAW}s3CF_fDf3oxckj!&jUsyYaP!R@|2*G^E7&lA?%9VpGGR`W)@=fI z8B5u(ybIbSPU9GX|2>9}cFp)|5>zj(F^zqdepsINT}NIt#7xx!D6m5uu- ztO9EVz4zJ9aXKGaAsZ%sfDjm=oX-E?D*;jTIR7LYl+pX^;C$pzV;@QilQdy-bL zVGK2(&apz4=g@$Upks~VHu7>jK?S$O0<_wjXM69Tl1t@Wgw_w^OljGTOgD>8^=A{I9kbGVtiDjYpn~iffM>5skP}8 zPomL<*HSdBfMAzg`yX>Oswr`G!67uPa)8~Tbp!0tj%0bQ87U3E^zL)P(I^$(kSl#j zL|JuWQESMu9}bt@XtHU7nK1`3Huj85u?$e4bR^VwDv3u&qdQ;DtqJ9NtZ!cWmv4UY z>dBr;U9)fPQ;~7L70xI8Td=&MPH4d%V|mRQj7W<$5Dn2fnX0AV#Pcd=Bfq&-LDjmQTc(4@``?^qVbhh~*iD$QD^*mfBfW zU@-AW*~N4AjRL(>9Y0DN!0}^hp>{@xV{a?3npqQ4yYrbOUYcwQw;%^pT_dL5I zR}{)-j1MxTxIW z8a)Y6G*LuDWxGVyIWdp`tUg3p@XK6*_OxPgpWtNpR6lF73l=MhtyrWd8al1RD5FR$ z%I)v3gMqxBn`^eg=%DO8NqfZFYb@r*Yfrw;1_G-@^*J_(Ab{h?9MJ}!g#`gf17rkt z)nn+-o^J3=Un=bK1H7S3M4h>4^t}*|TMz%{XCHye?~~~8!-)>BvE)WnIZavF(+*}y z-CPzjX?drvJr;t{n<0ywn=osPb>)g5o;C_Irq$!1G->Kt2(3kWJb`_lP|e}ta2=eG z<_50%66~OOdNd`y@8#T1N#DHn_|^N5%oS)y@>O+jhN%~{9h|3#0Wt1{0D}{?R!)Rt zEQ^NycoIzV2gBZleOuRTYq{>dW}av#C#+0(yfo0~Fq!C%^3|fs1bK8k5w_j_`UgM% z7e08}Rq0@-)jJkEIA_`M4jZ5pJmDYIyf#CzP3LUyq%Ie483Q-lW~Za#N?#%k+K7W- zj|1Ckp^x7YuC2rSv>aicQH+8Ph52oTVACm%=}s)7_~ol~y7 zxVBh2h%SaupWd0EAVY}U*25k~tWXObL|jkXL&h9M0Z(nr#*nw3($lEtt=saCPv(~w zC+Shl)t&F#6XcF|L+r$U7ItoezjWH_LdzCIOUxTOrL?_@7WWo($(a%PoMl^X3z!KU5QumlhE1%WsRapkJ2F9* zC|_cwmdl{ScE2JuVk`^>Hn3&;EWXmcWC00KXn{K&oz{lwnsHF~O$r1Y%jhEzE#hot zXr{-*zlBl=Lh;!TSj^~roi9gg}FJq&3!ufBU+Mq18t1*d5R+!US-#HJ=0SSZfJ& zy3?9`^)O-qa3#E^D+x6MtVLi8ZPgkC^SlO9vkprN6Q;bqAy73@d7Me1NK#K#P_*X5 zzjJlqC2fZC!b-fGgvnXxmR$s-z@VyntDaD<(g7rqxB*Bfv7$B1_B9Xb+H?C!Y|#hH za^kd(=v+qzX34C63JGn?T$lE-nUveZzx&zGfAql@qFKm2Wxhy`9cwwDj-=3v3Z^z} z5I&r3r+T6saUf+X`e=1nuM~(ekw1zCY2hsh>SrI*E74S;m+v|eiU-x4RdxVOum0<8 ztsA1lEdt~0Gy<_#KL@sO!Pa`ve#DWBp z^*%&TeXYTyh}x=)<3O{StK^%7=sOeszxDZxSNjQ+%Dr#hCk@#r4cYf!Lv{`D=11{h@ClVUzYEh5e$VBOQ^25V0Q=2P>4C8b{;7-Qm zH9La>ig%EGp+4`UHjmzP4egk&HY7fFJ*^pUS@l@s^GUe%PqA?8-XS30n@p0&&$Mi& z+HM65$f!CH8~_8-9P3FP9N*^Jy@){57fP2$?QZvBy$w6 z8U;rmU9zDSeIHu~-FDu8CF2^0`v=U)EP!TbT?+5NV22h zyMZ#ZCQzO`Dn@oCe6H?`W3DY?6Y*`M6lw;hrb|v+BrCxZG@~lzV{}{29T`3${)yn+ z*#q&e{d5!Low`L!1#fPSlIF?W14qjkkQWTh^$M0q_GlxCR47KGe4gB6;H9$$U0|U~ zTJRy7?{zsI2h>}Sg5BS1VY~N@dvva(pUv+yGT#09qiba7I1|{lHLb7Q+uN8cb3-9; zRA+an_zDbd)J|dZ2%K1++dv>LsQif5LVeqaK%wQ42nmDOxqJ2#E2^gy*QA<`0UhZp49P|ShMq653{$$8DKBF-hd+<|TN&=?zv5cI{)nWe}~ z805U=;2cLdu|odl=SYoaaTW(aDwZ+wc1?Pjub%mv-@J@R$lE*Lw5M&4A!SU%{KC@ z$YO^=kpWtKG?j%xyhz1{EwgmS>FY4;mT6s2H+0|$`_XDuHZ@Q0Yuw7HXzwkZLwJz~*n zT{L-&(}0M;#xc!WhsXlzafog-ra-Nd#Rz*5WV_F}sP2t!=K{#stypD%T*EOf#)RI2 z&9GH039%K%N0QrN()Ghe$z=`^9#bDHl>l=U^NV-9DZK_Th&Xt(?AbMIL4dr#XM_*3 z&)Q~n+o%1}7tdcl|Kj;$65hRU+Y_&w+(ZY<$Cy)14fsgV{I;Nr(Qy>+5L(zQJP{w> z0B|4C_JQQdVRdzk%q(|wVC|4t--;IrMsKsGIJAtrqicCEDj$;w%E)rn6^Xh3nmW$y zZmPUML5#gwDWfmow+@B^ka(t#*hI{!jct!TFhlRV@6MDwYxLD822?rSt}x|XN^^{Y zW(9If#|WU*d<@H_39mHrh_HF9-|nVA-d|Pa>u2@))gzYnz3o3Bo{e&pL(7mx2xn26OV$82@~4tk9TgueoNE&=w^yF5J9v|NNV;zWnml z>$h*7efc`y+|Or4qfdUo8bHNG;AXZD|Vieiz^E z*29ENhPc=92=ayFU@Qy}4D`*2v1lNOY{#7Ne1{~)ND9CTz=JW=$C!Gp5$bGcE3Y=l zpwGntCC=3*P+&f<-@SqP>8QUXZ@1Z>Zhzq~BhNd7!=u{n&NuJ-O4#<%S5pzout1L9 zLJ2`Y*Cc}t+%~vRyRVJYm0PZ5-P5WBjxKpO-<;KZq$oq*v>=K%CJQ+e-acrkIu+W9 zS4$Y_B}_-U-X103{v)S`zJXb;QJ7!|9-5)Qly>$URs^REq(G2RjoP%!H? zB28lD0Gu?oOi>~d(s3!?TvskoJeoxgCRBI{DA4Uo_x#N>K*yea@#=i_;*s#<-Z$^@ z@at#%orcK|zy87RKK#<7Q@t-n3|>#T!w(4rEx}@{+#3{Wqh{}kiF87yHYC=JmHUJ# z!DK{ddTVGl4r)X?p?_bbu1?_y+u62r2v6zYO`wg`PLoG+!24d#&3p30U-+9>fBEvM zK6=c48XLA_xOxfVHbZA-PKE}d2%}kOV3BXXF98s-2*7lu*}#-t5u+oHNcaqRIEn>3 ztTn85O=o8wi=(1o_LzBp(s_NhboBn(ZWgY`P1@9A3x*BXj%i?%GzY%mHyOj3bmC_4sJBdQ-O z201L24NTzASb-1;6#huHdo1O7`-^9np65}?e&-wa&KJ3t_CMp{ZqR>OioYbsw*$_l@RqZxP z=2&9@T0Wb5jI)KtJdls+NYFO>=mRNPeQ`>4s8BcE_V|B#@@>Z3_W=^`ee<3Sg`k^I zh>x&BUjw$vtqB=TPK6#=bakEvV=kg%#)32@*8s%{zVi_Yea+TWH~^j5vD-|@o)vc3 z9L5Of0?Kgq;|cU76J%yc0Er8oi5$Ztw=dmTNeGEsHbC7%797r3m;vF~4-t_up}C1C zv#4~R>UP>1idt&HTLeo{HOLHH(GeAxq+k-?2VSdQoz*6sta_@C#tqs!p}lS$7kCum zZ=Yl%-ucEoF<7FT!O}+=^0lVyoNR_{K!xUIaP|r8+=19sF|X;UBhQvOVRghICRbb3 z)Ljs8*&*{pWMpe|o_E$iWuOO+gB-bBR!o;pL~zZmGT=Psh}%{e9FhV1`QCHP1g!rc z8!_j$UBjUbl*Jec?ZH$v5nq`to18_Qy^q}@64rRCvjkk-j2$%_wJUZQA#`V<4HbPJ zf+D33rcq(L-@b6qzkKHByv{d|WNG)lagT$!Z{D~c@<;m0wUuzLBaqk5gmE-L_?U>; zSl#<@#hKrUQGn)LwxJ20d+F3;LaPZGhiv$6#&Niw%s66 zrNiH6x0T$u{L3fTF&W;0bCyEpniuR&Za#IJM*2{knkLUSJ3^L#JjA@62K5ewqE1Xe zQ^$rYg929*@KVl$`9Vliz-%OE)^1p&YTOz{e)5aAU%YshZ^FOK*N?cvcfNH`a);%H zJNyy$AY@`w@RT+BPP0kS5SuEk)TA?W?|$LM)u)y*=E05NH`I=N5#GXC&^hjOZ_jAw30pSp+fJeMnQij<=dF*%5!h62F1 zyV=}>umuGaGPRm^bm7_Y>qx^vQ;kbd?j1y(&ejZ7UFZR-1(Da~tyITEg3-AnZ0TILjLD(2Mq;opPw9ds7exw!R# ziOJ#6DQ%ol;J^fih>RD50L84b%?x-|_lD+BN5>|#JbBJ`68^ZW`kV_~shHC*d4Pd%2&!FCLM&9~JtA6jxc_ePS@bK5y@`V0) zh!cl)IP!98L(o$o2(nEOyE+ELhOj1$c_rt9rb6?ac@8kre8sAv6%^f=9o_3e2Mh6l zhqNJ_3}mw|X2a9g1wm>&CFB1?-@I$aC<=hz2NBl~6r{)w>f+uZZV+R~Sb3;7nIV_3 z7(q^hOnTeMHh|6s(N>8bID^PM&)S^mlXlo|IwB7VD6ccqrAv6&8t_jqk6nv8_hq+U z&+pB8dhh%8Xg$@N!Igf9!PUpGp8f|P#d`W5ep*j|xAl}88O&l35U&X!0eg@}P)v;D zir{A^G>V|Q3XwBLyS!)_Yof$H9W<@%8VB8a&jvU97%dTai=O?G1FXNzxn*d>d}ldS z@yl+b)!rrSeDL*jR%p23gxfrz5aP7mjC~CJ_dZ$%I>lp(a+~1sFr?b+)H#JXdcf>V z5%HG3`0_Fm=G7CQlp$55S*f$`Rmhn0aA_uc;cR;ABe?U|dn-u6%kk{Z+uyv%N5}Ac z-?=Bk-R0Yn7(aOT=a240l+i$agr?RtBhZ#xZcER_KA=KM4O(<_7xG#M+a+eJ_5))(;Titt+3G`q_ZyDZ0x=dW15K^;nVgBxNL>CH{|bZovlvm=VYG?#C-Ua zkD>L#!*8c;Kl;LdmCw%eM+fkG-?k@=_}|^Y`v=;<-8SHYJ(1rVXLp;3`vuE%)`~=u z2K9*|=4yK}uU@<55@=tuOMtUsJk`b+=_RlX?scRB7>(e=(Pv)f%RH>5Jn+QxfI53C zSi1M++)iWPVnL(IH$ddM!rE7<4oN356O$y|+ z&Yo@8Jcv!e$Q3AY#jnT(n6Dv222{Q#qr=6gB$^WyEws#fdjJ?0$m4@gV+XLxbFRI+ zD{Vb-#AkMIv_WGI-j-gw4A?+VbfYrNg@$^WKyKY?7~9%3Tkj2`>s)8C8C(QwBw)O) z7R+a3*g1$Gg;2}dqu6wsYq~K(g&R%qukXtm(nY#p>O~zk-|R>`;n-)FE!Yh_8}dvq zpJ(fPI~`E@ssZjh;CE)Pg1H}?n-kTt1-cS~b9n6LwM}l@#y@%Ug};9L?46GCb_u!n zt$Sh#k((vt1E3W?{EpS<+^40xCp1??1g&T`?>w*LG)$_H0m8`v#q2~n@(PRrI+zT( zYkAqKjUZ)0jo1%H)|hZT zSu}1Z__Q{>Xs!}O&LJY&*g7KZbkK4)b)O)%0v6cYY+@}>Ge^HEx&wT0794|nu|OwR&Rc|&zXDlKcx-Du5})u@{_-*R%VcCuQta!3aF^Z~p< zU=x9K+sBbUrEN1s8GTu#0Y(Swyb)w6Svu)fH2FjHI==kP?aOxWoA!MbOPX#Sy8+B( zwg4+Mu1!;&aFlAC;{@;J14KclzPi~k)DlZELX?7dejy@j*8q#xcAbI4@OH$k4WgC? z))}EKl7JKXz}VgUxFtYTZ@V;8r6KzbuzAbLrwg2LlnOq~w9_rAfK^zDqG<>o6AjiL z8WeeE^s(XkonxSJFc)DB*`t#J@vJb~^Ozk_a30aA@zu`!&dc_2& z{q-Z&$-VF16K`F=(S`SqaceDUefZo{#%vxkD4=Ve;#Keo>u!@K^oxR!E`T5a@aALL zdS_T5p^6k`T|iU^oWf{1ZsqC909$f_B`KoooSCEL&Y9dckGwq$N^|bC(4vDfvKk%d zI>&3b0}18W+(~;~u@W?R>yBx9EFE^awk-*=fDPhtTU4j)xTy5gk~=bpn$5Z&$@Ao#YQsdK?F_Thl1Ab#iR5hFV(shAq^gUWmf8d)wu)Z zcYw!l9Xerd;~WdT~a zLovDVM|{}G4MQB^a2K`V213CIjpz{PAA&5oIkeYGEgKpsr%#-?I>2p@MBXscDgbn? zMNwkZHsthkndX4Tpl!oRc9}DG>3gdr_#(5TgR{sM9auoE)~daBn>+SgyGL>&x@918 z)Dcp?K=3=j6OHHtnc%m+;y?TProjaD_E~)O`gOj1`wXAzvp2ta`PTpH(LCwSxARE@ zDBT!9KSVofKxmL-*7ESZ5Sp>ZMj{4>`6<*NeS=lowb5SWsT5TOyBGPW9Ie+z+$q|) z)iKf|Jp0wF>z;!_@a)dWUOk)lUVXBTo~q>b@E>841494k3_=yCEVQS!Eo*rjvJP~N zSH6KkR6pPv3BH@GlV=P+b+vvKr59O;gZ&vG3b%SS%^ zr&nlD1|19{9R06Ewhdwk$J|IPgSH*$%IK;)48PQLq%qGc;L4$9-$;__RgQ(XMeAcZ zEDyVoD8!Bs-9iP~V(gjLU#Vl^6v=W&4HClXW1CmU@lx@^1qz(%%kGrRkG_|I__ zjgwKCCPKn}jmhDKerBU%k;DB-FhP@Y#89 z>wPlf^`TB~S=%xD_= z^wtc4*0bm6olad2t2MaXu-s>1E$oJDv59~g&)CW0LmvLy>+LLG$e+^a5m8GI7(uAX z%@=n!oK1)3+31WkqilQ-pNOs9FQC87oa|Nc}_X z%oM`#6)_z-8Kdox#8x6+1XH$dIy^*zQ$eV;RuBLE^^G8TX)`2BiTF6%F5`61YI%5I zfJ!_`kYB_CQUA>FMA}eCnp?#LKZPlehbm4YH+5jZX z@NO=5A9J@Ff&H-txOHf6HN|(gQE?$zs|sA=(`V3Zerxu+^W{8w)c7OVMxTm@F|dB8 zL_i)qq+#V=)HTN$eh|)vcyG8`eduX}MTne54njnt7jH)-uG3h3@2G4*F<=P?FBiV- z(T$^}4=lqTqKwHQ7iEJg<%=P=n?t)rANM{_#Pu0(%e=E7meCgBV5>0J+>L=JJr z1um_yBPy3fcPhfw7g&G6Gjc5;S!Jf3>FS9gQ+NZ$w__Lzqs$&>_it2&f8+1}^$&jj zNB<8U`!B>C&qgP*|@b?%0(qI3Lpa0G84jOlK0QXJyrq+`amdaQ) zE}Y<*h-5Y>21Yw*jSmFA_(oL-(+)Z%*+~&H@^Zaleh<9&qP_`%B%xQDQ}Jk^5(vy67QE{%XE;9%$`FGH;_A=|Ll3;S*h zRAKklqnY+>t0OltC*Xw>HCeVg7%kUg-)kvicVsHjy2w6xyHr`#UcO~7O3wwlCvr0v z8<;`5L6m@Q^nklBfPi92Ux4jIuEu??v!u_<5i)m7b{r_$Mc&iXpfjnQsM$@>v8OgW zLXvpPyqwl+AQ4sx zq&vX%>)@>87=**uUU0)o4@9Ikg}xE>g#e{HVP}F$YF3=tDMbJ%`wsOP3?i zxes+v7YIq=&Gby)uDeDo%+wDKfasJ?KbFu>p0$?>T>rN6K;eCQJIChe;M)5js05BF zaUdE2IiJ9-B3~TCx8*vY{QmygFJFB1`SX`wcc`CTU*lD-KKdl@d^4Z=B=tLv*{^@_ zyML0s85MvX19@G6)VQ{10FpmCv$3`@ZNwg}AeAQglyP1=TlbvJYBrzFC1dY4LILK1 zMqkW0j&?qRv+VczXuVoi@6Ei~8E9-kCfapO z>f=iLBHsyoK7o%7N^l=Y23!EE%xVp2DYm-S*+!<+7zQI&xVjtE_OUy-D#+jMh+If; zq!z+jXMK~B{G)eA>rV&jPY3FM;sdqRq;>^w4OB)4O!s$4A=ZenX)U3VXqBrncs1Le z6?7JG@>_xn=%aK1i#CJc*P`~AhfvxBEw*b0s({(DsuLYdJds2}k5Id3?lEA$vgQrG z3Jl45Fc5tz!s~({^WhCpP1!DSMq13dbZMeW+(3YA4xo`qn|)FU)_udTBDB_Q+Hwo9 zdzc;xUqh{i0CYf$zX9Nr-~ZqF?w0n;H;)Fd_r8n&KibP~H;g-9&XX_9-}^^te+Uo^0lMGqS&Tcl>p3T+5r#A&}ZL}-uukQz_7uX||g1 zP&+w@(Iecn_iUq+ck>~zEjeJgpx*@iw8yL$EI4cIQwAyel!F}Yy#U=hNTlS2I7jQm z(85K4NCOp8F$)?ka`LwIemt`C96p__IywPx=JVK_A$Yln&Si*EcBmdQXOX3}E8-B7 zZKp2YCnKP|&>l=fd%G<(E{?(r%9PSYF1^mwlQcY*^gi@9toKJ3aq(CANcw*7+xBF$ zoo|}$A0ZYB*^n}kV$qwS@!S6%)e(azkLN{;qa7h8CZZ09Drtuq$7OO6fVEaP#Of@nvFX5b&x#)k5D zQ?Grxk3^M;UcBoCat&AXt2cLt{%8i26nHJ5fbXVU3!#-88EA2(E3tI+6)|V^id!ty zPv5?J_Bub$zk2rd7Jf@azwga^BCq$m_`C5TSY+1#u0XA{wPA!ggFK<+i?LRlIY{@| zg>1*Y0gc<;C^b(??L!S-U=EJnpw^Qv2)vyoLq#33*^Y;5p^ch~caa>vbyF$`>q;PX&Nc<9@^t%*{)d&^vtMf-&ss>8e_K3Sid2JnEU9ha-sCYbpbMUQo{oeKTkJ zqaCmEx7+fs*Ry!_>wN8xU;caFz9*b*a^r0KC>a0++=u6chL+31iUV4=vI6_Uxfh+D zY}wF1*48>Gtb6wW;FuuY98@OeRx%JY$#ZMvo;WLkX-s=uSzEliQ}YG!X+lRi_q=sf zGBwxZw1nIAK#Z6JuN`x4cs_I)l*ynqv|MT=r$ZH6W`aD|Mi_2X@IvVQP=S)Nc;PgF zm|xnp!ltB9`hts=gnPoL26|3CS>XTi=lL>U<7IoaM0 z@X*CFR(0y3d8+xWiy5&t(tap+Lx%fA!BE77+`EJM2HG7`Z6Z>0=E>T*XEd+uU(M6#RDqshyU%f>y;W~H%dp$p8-U<-~(8_;SOVQLhtjxcqMCC<0;GsYe+( zDhPF6t874B8NoExIDmn=S!43taZ0zhF6e{G2I>bD4TAq_tYoGTesB2v=2oQZ64IH? zxxgN0pM#A1qP_#XsTjd-jVgx7s)X>PN^Ho~g+8+hTm-N=O;{@oalSdV5am`4NBjmk zNOqX#2xN8xHuDjp>E4%f3yu5ywMW)hFP_y?+c#1Pcjn$aJ2>7&5alBLV)*9Ge9)Vj zOrxnGyIjwVGu1tFlr=%VfRO84E6?^bcgnFdH_v7rw5JVkUm+xP4hGzP20|3JHtRR3 zIY92%^-vLZfgTK)u|Z3^YP2OIf$YE%G!J#Jd8AIYpr~9qtt0nwctvGDi)90Yu)5%Q zvoJTM>W!t)F{M7xbLyB;)ZE(#=^5J><)fj?y)Wms3wDLi|H9wAeU~o&1Tb>%9Fc97 zSn%asn9jb1_raUACxdK>OE)VTkOXlt!Zl6AE1C>LG z#|}q@OnA9Y26F4+3V!d`s^{3*1ng$C#l1RkqUi5xPlPWH8ir{mIWRv>tiu?1)^xDi zbD!hA?}YzrBEdknZZSZ@m?3+zS-y6Qtxej5a18hv zqNHL+ZdWP7yz;<7ykVl+`@-<;?|!H4YXInvK70UjgC_@88ptYl6EyUfgKRkij-12i zZ1z=XU5O!NxK+QtO5U~*NMbb$t>>0CaSZMiTuTav4W0|$1&KAf2PCa52+KT@XguGx zVnXVWI5(HA+U+XcTN0uS#%>FaWB`0%#YRxjktMqb=QYR@)#h=Y%@55n$KXByijf5h z%*h`3MJ0En@Z1>JD0(+GJw{gD;u!zhPYov<(#OLABoYYG&PfpVkIqfNU-?-*L_|RGq_}rpUT1xV;BU zVuv5#N(M@{le{RNJYD>_KnH#M{EK}3=!LxZ?fU~BEm)6o;>=qW*J*!2oz#{>w>vk) zx+9R>ob1Ordj+Iiu$LgoX2mcxYUK<%ousIZGA&RGoxzh%Tisi~9yHERJO@y6G{>U4 ztv~O5IZwSQ@9iFC!{DzE5bGz%ueN}EMQ!WRmoen~no4N+b}1e-w54)R#h7Z6_RXlq#Rs<1oeS9mh!D+|D+OLRD*!aDHF&s>D1Zk9Kzg7(b3!l)@2qq zG`FWqc4Quz0JuP;!0r1$iafBHJiD$f+sg)^6LxV_MhnWhPG3D`-s+C-eK|MP&EL5W zHDBbLH~x8E+QBE=%?(K*eF$>y=(MX{e0EYSWgosIX}{Yd0o^3f9Y?#Qay4ne?+rKR zz80@No5KCStTn`x(#n3gEw6B{@Y4b1<37qK+~Yy-J=b94iXGWoIDicYYPM0;a>blJ z=BgSAU5j(m)ei@piF5fiMDEdAE}vcm-i>P~mz8TDz#CB8gP7yF7PF2Cayuz>Q)9V$ z@3#%6dtc6N<@)Z~zKUNx@k|SV9@`D0og7ss@Fi^kNzieq;}vo`1j5xp#lbkBgZ4X5 zoIa3UGFYs+4+U9vxbEarn>mV+W-aKySLGFhzK^W~D^Mgy*!!R9Ks;jKyRC(U#_d>3 zm^SCN3)N)FCEGA501d}<4aCzGHNZ=bQ{QVz2RVpG6NKC*0Jn&64&$IP`#EFMd`)fYGd-vsQchng0AIANs(G_eWq7 zO!3u$mjX5{lxd#A^mHW#v^Yz3$ZIa>Fpi0!heS+0rR`+X4ul$BX~Cp`=W++O=(Mft zBG(34A0;UR>8>~`4y|*Wj+^BR{Btjt-Vbu}BFh-jx1urXX!gsP2tA)3B50rvj<;v{ zK4Zr2D|ns_RCqTm@rIZr(B3Rftnj@`aqF3_Gv04y2V$n%)m0yktt3`cUR!5M920= z`&^U0^cZsIL;G%vM$XpxXbwL>kTSwry71&2L^lGXCHDu6_HR|7U*7fu?6W-}<)! z6hHaSk3XJX&2NQTvqqcU9Jiq%V0I!RcDHfXg-Z6`a-=SWWI#_SuQiTgqBK`pIOon{M7>G9s0`r^+6&5rMOm zkVbKV&tR~F1!7@*nX*=vO{gp+4NZWyZJq;OR1M+X+mWW+e3{aM=0pdAX>XAey)Xd8 zdj@f{kFAGR%~-0S4IEXfVd^GI8-u`72bt8-s%Z)=nHNS5AQ6~K$PC|s-VOj+=<8ep z9o`3!2W0Ctgvq3a5%|hCwO{y)7jK@weGHtq_kH`mCf>K&)Xub1-O)j5FvsNDxw3p- z0~+0P0jsyi0ulf~Izo8TvVG8g=n@j+_)H#*yyMfrhsmfT0Pr1E4?NWXh+`3? zyNuf|qQ*QrH6>7gj6Vb9TMJR}AsRnW(kF2(5#u`v( z$_}fRL$SeTPugYK+L^R`#z;g=a-hQm#%x!IO6%KmR7AbV)oNg0NH0Ahx_M`BtGBW| z$pKMxtfdgOvM4PWQv#A0%h>p9;;0mMU1XTt{WMXC7w6zomQY`np3`Oxx#az4!3d*( z4YQq=^Wp#c>|M;{z=)W~;F%}H%147S zkg0SvoNHMudjJo~JVG`EZ*5nu1$X_t{PWaP3F}AidZ26_a&}v-4L)%g(%P^ASda@G z>r4B71dl4qm1DvT2{}xSQ)LX_M!)7LhHqdXKD2xe#E9p_zX>Pf0i;WAIj~T1TP+a~ zh|@GjE?>T|uMg)bjdV&Ce0O0z>{@M$#;t$vr!QZ<{=#28|5x%EoP3XRCGULmo-7~f zrhNPew{xUi7ojkl<$Vd79UE?$TE-1WcwY`&V4_RAp}U6pZLyZkp@?GF@)L@#oIsz1=gN^eIco_b zV!)g_wH9V_!!FHqWv8=tZTGPSXgo#KP1hOIIRy)54(m+ZMnNhFgf`G&_>CX6gOMwl zuU|iQlid5hJ(?TiM9kkhBLDE~AN=mSIc+)Y=5(y@P)VhwcEnp1{P#S{A{g**Oehxd z49NyRrCyL^$1tN5W=cOs?wlkR%cR4mhcg=D6(?tU@Ul6(GXc;&tXhBge|`_`p*3lb zl#y{*8yEHgK>|?%^np|CjLV3gik2SOg*n!y4ly}xgg35gc#*aomEOIn&F*alK|^Y0 z=wBCQt-*_EDGVdcSjL=>P?5D;n~fl$y)d1WS(&nO^A-;W0lN(VA{rbcV^It=zwz>r zhRul_Ft!y@1XY}8wBvhH!DLrmWgYEY>1b-YW1G*7EsD;wY*!a#t~G7 z`05a$=-qR$)ZrMz028PYfaq5PET>n6sv)=n`Iz%|zl9?et1kq+Cc9U2`IE(nur9! zRn;y}(-s8EQI6^$ak4uVOeNkUZNR`?r>WNVe&(Wi1w*XPF&Er-J9>|n?|roQmKc3f zJpCRNPxlu0e9{_yP_5Cu1t6dFD4+BwpY$kya6QVg(*Kveciq)AIkNL0LF9}mXhwzz z$R0zMFz^rCz@{Q2Gb1wQVhV_ejBIYIPN*t!#DBgf8$O@U=d*nmz6fKzRo(3R_NFld zc5_!#n?FeIVzcV2{N6V+GGeXuOi`pm=V82A2hOE=j1eDQW6P9Ss3nYg1wtad7@BEq ztW0?*&cM*HY45EIE+U(9Ia0i4E?qhn<~e9uNwhgO+-L}-NxHp%In=RC?g$50h4;zT z4W0NF^SX_+HFVG_)5V=_Ml3~o@o*MeBd@a@@`hq~t)@(j^U;G)SOk6QIaO0r2IS;4jea#U5wLT%EH zjZyBxsWcggzcp=azh)?i^nlPgnA!${kB?cWu>m3LOW{!3NTBTC6Vz(LamEhrT!(LA z-cS8;9(_#y_(Q#V`_ex=cHj?k*Pha6K|2aM-s-X^geaD4E0PlfDFb5DvC~lKLYrnL zItZ~9qklbyG#-ZIoaa_Ygmy zT`QUZoQ;$d43}F!YMUr)&2`OJXeFW#kmIh}+H^*DvOM?Z+L%9g0Vi+A4ipV*j3eH+ z2t2L`4m+0}Ya*dR76_nRwOXg!tE9z>gAR)XaC#f!ESR2kOzjQD0WuuB>*StV0Cs@3 z7s5CbFkJC*CfSGsrdU64xlHJ#D~nPV#`Cp(md-2aL8#7zuzF3Vc}q+Elk)c;{QbSZ z{>%IQu!H~9i}z?M6y2mkeSsZ(1Qd*lk3F6iBm^>5%PRCD1!3Tjhv5=4z zBzasx#h^KPDA5!*Bo-lvKjid@41|`~)NuqjocN>2<7~K{P!`@IdiRi?BRZ2?hXBpj z=EKNW97Kv#hC;*=G#fmZwuKZ;_;Y!X2-NPqL6|QGq|iOR(xxJT0@J(h!pVk6JEPGd zK?B%sO}n&(w>f^h(iZ(oOfBc?%z^Bh@y^TCY(`j8`5ACK)lhPDyjI`gz< zxvADnB`e+RX#$=mViAxXQ`HdMh#_?o!QTsqjD9Pk_VWY!o#T6a&_I9c#rr)*lEpwA z1Ei^f05{QtOys^9{X#ju*bd+!MwT69waS)r9rwThWW`=Bv?Z`npkfw-oVpe5PSYj1 zPx_QgpVJsP(xR&=d5mMk?Jo7yALr5Mc|Q*;IA=AIo9 z7FOj^z$q_Nxa}L{xnL;6;lK8x$wwO`l+|ZSl@=0{oUU;I6D?^S;gOe_wHK}ys22K4 zUNRoWl3iisUqBAv4=k4O;Ww*jthQNlAY(*^@b%~Jb4C}1XCLZtp&1jRYv?29+!8xm z42(B`OTa99j3Ve<=_I`R!-G1Iy{zm_j)!0i+!LzIjs`8N_N?C;O*T(!0@a6J$x0B` zAVQ_%EN=LlV|wk`vA$bd&SIpzvr!n2e!Taf@{N@5Tmb&E0=|m?iyfPy+cXCAmzp@W zI;Q2n8tz=mD zQEQGQ8rxM4K<)victe7oLO!6aFq%}J+1nT>ghUTK&u46eHlh1G#5bbJ5R|@`0i2C)m zyI&cE+heh=Q}B0@H%|&~9nrruGz@DqOlAa>+leVl&&>~9k(V$WF#85Z>{xM5nh(a) zh}=Vgl?7_V*=e@sb&zCFz4zuUy8BV|aA=;%j*`Mk3+GRbBLa59PWMY_%UuJuzWX(n6&bbMo(7e-Di(T8E6*6<(j6Zh0B_uz@MpYdl5_K!b*c~4xxIcnVY91|^0N67HpkQNLA z8f|!02JU`4SGh+`TzAFgp=4MSIYyo(i+4%|Hq* z%WWVg;8Y8uf2@6z65r?wOlqLgqSMUM8AppO};hyWORAk@1(QvdY*&nx`(S9kg5)hmC!A3SwWyn2tEtaNj- zem52|n(fsIzK-(yg zs?x12(OB7FwJZ=B8a{CoHmv-3$XfGz?!rFPsH8M@f)i-1xA z8;%O<_H}Jp-h==SqEU`y+%q;v0@cC?uD1(oRE`@hm2_R%Q2|QL7-tSz2in>wmSye5 zzmHE5LGH89PJzssU4?va8iR2UJ+?W|2IAG5dgqD6YX|6l!_Jmx4wi97EBrRq4+oM3 z0KSZce~qmJa7mx-I4(0?V)aB+^MV`x#eZ;pBanRc&8f`|Q26O$ZaY<}qty%RXB&m1 zXb<<=Okpdq;lU1R7T6gIZvz+A*obr;JA%v; zo@@v5i+CZ3;$UV&TUeS=s8qDNtqCyW>l11&I_O}~WH8*o7~Kar;ysKm(coklWrN#+ zEaD9OLsmKq*%*D~N^pQ>S_D{s+I=>lHDth%+NSW*(|xN`_1!@)lyCgN-{i?%JL28j zclEwL++Eu2+kNqg*Y7c-jeM4x`{@_HgE?XNc2%;=k*gg$i(@0tW}}smNzBbnbCM+@ zqK~QfhGVKa4Rsc7AU#iwi_QqeTc(;#TVjn+UpX8jw602n=f;u8>tJhp@gM#4D*n6Z zYNPj_hiV{QoA=n~YP4)^6gHhWj(KZ?M}%@g*e;_jG>vW14!31ztrH6`dxoqSS*=b# zF%eqfVB4-?V{MpYW{#O2a(j?J^~bq+VE^%F4{ZMO-Mgu3e$T- zLA*BsyxDa!GPU$`KYRO>3;vh_>#WVk}*lp(yfizUUu+ zBq=|0l%F}ue@%|^03$LjqjiJ03v)nZ(MKX?cFYs_hKBIfz&= zC4(oYK|>chFBG{?wuZcl-N6f+#JvI^pLSiF!cv%s#a%kSH_Haj*dT)wn!69El<3V51JY6W=zn&i!s54U$9{mV@_D4#yK@|&q;f# zww;)0w8F`Z5Eh$AL1bHnuu7?uE;ixy0OKuWOY2}C#lV;a7U@8bwD=(AcrY)(tqNBe z(lvqVdGQ}#p(uzE+HfchSbPK|?TsX)RCOixv242xn5z2%m80CI30p#a=|gS6mC$xi zZ)Hc-&o+m`(i>fGy5#D!>9pWAAc(lf=LZlUsDl&-{9N~ zC%ep0FuTvrJ#e2J$i$jHq_>4!=F1!^wl^Gt2;y2pPx%DQhix9%5cMdk6Nb&vs#9)R z{l$NJUFJ4*2iTUB5hJ>@l@{%S?^)a?VquVzDEL6J@c4Lg3(x@iX+(nl-Z6wVo{5N% z9@W~}!V32r&KnfgMN4p~0=6tc;4)(qe(|6E^b+>q3fgNMLYY=4^&#OiK`NQtx}8O( zlXD#ii*_pkg8*|-{FVqUO-e23&yJqUeq~xM)UugDlmS8F#2>q4Rc))Y6{~0TkRkKL zALlkJ>s`Hn^YT|vyuEq#$dQv1p_hDV)kfgney+hQAkpP3T~Z&eaW}|Hur@vu#s#)y}x~m~}ae7c)Ym zP!^vqy7#7LStQYWaZ6={!l#o)a&*LLcQN0)cfxq&->jEXf$9A z1o0RV0Y!Zeh9FFe9pkO0?2$UeW}!_6b?G#f-Fb8%#up^g(R}aRJTC+wQ=Hb=NOBc} zO}}k*X?#LxwFMeu=seZqf$nNYoL#6%=Gh{a(+uJHN9;6pZ`?1{;F>!R5Z9l?6lm*C~H^{3ECFPq}+;g2V$u3-vs!5e!2Mp-bkV1dl+a@wakDl7x4KmK& zskc7rYN2fx_{Yy$=G6Nk;$1Qw4t7uOVP@M8_5<4xv=l<#+J?@E+XU5i0YO?kUi{~m z7_@>BBr0ZCI`}~mc@P#ld#D0tCHMWZC??1kiklmV!jT!{PR8HkW#GbCQa zJ9!3Q;dBObrS^!nEKu-F_qBv?qXnP(<2?HG{>z`9-e394`;CY7?)u30=l)TJs5YLu zF;JKX9{~SR24&%1tz&OhU{IT#)zS-*KH(u|XVQu5($@PtF?*JE<9V2B`f;MYr=`Rd zK_Y{eln*d|M~vm!wr;cYTZQFMZRU9KUp$`j_XV_Mo;yU(9irzB(NlGZs2_%sCxkW< zA>n9%F|auLo^3_Tl^4Ezr&KdV7aBf%G+kshZ~%1crJRJ!exKU13e04k`0b_xVtA+$ z&_<<}k{#i{ONh@cb8k;wM%mXOinXWX`}DrdPf_S7GtiVBFv#pQ`r2zajjO_l$O)t( z44ZsuV=zyqElm*V7k2u>$QHf#)iw2ui4mkCaBMfWSvMv7-^@3+WzthG*n?Vq{7gRU z1bzJZi>uW)4!y({3)>&2x^1vKlxL1CQ#*lMZ5fh@Cws#Uh7@K5nGJbDs!6?HtT#u_ zJsqjJdGE$;c#~1bJ0O{$IFrv~jm9R|hUw64kjj$1F)o@p@PcE=9}6H8Zd_+}1rt6u zd&jf)u=G`u7y80zg^bNL3EA|tP;s*&ZAxX~_@JD<_0?jygl?VC4N|qK$Wa=Cv}*$a)P#vtFZiO4lL`yp9x0xAk+8|Mn>EZy zi$K_IJ8mx>3C2Y_99PN_+c^vUC{hiyH{&a!H^sk%`hk z>%_UE97O-mDA1xM7&G`FB79hNL`z05zT(3lt@i%x)1@Qdyn1{8((#nueeic*)rSX{ z=BHlH$1ctKZEfw3KmEdYFd1+~=6Tr2j%#+%yS0!@HT zo^!Q(RE8L_~W4!opueCsO$P8Qa&=xSn7#~|B zW+HYvQC&=(MAfSafF&^HbdGsy1$_CZNoRJb%%&|LPJ{sQkyk7=xDviwu^v-~RAI5Y zyD#bN=f!__ZIc!NmO+0QDA5OEI44FmN6yLu(u9V%kJD<1wzkFrzXqM}R)aILL(rx+ z=PW;r+}A+T2J~@~Z6gQ0hC&pyn;u2AESUWvy6!gq>WM$jO$GVm_x0*mkM=6O$KkT* zMOFm;zc+}4tfGwx*`asDq0JJ2Zt2WYLuwx-9N->OXd6rtur;7)> zgv`2V&*}i5BqXf8?F!4S%H4VI<9Q?m8+*^wY)6w3gh0fMjiYEmmBpK0{P*93d>-#9 zhIKKHMPT}hMn~!jYo#V~9Bx4o(AaS+H3NnLDhETT-UOkpYIUpb7Q;`$$lRGxv z_XKy2yAhm+h(XwrJbb|-cI(D`;x)cS_WjylzPx`Z4t?rXdlY2VZa`LF;2dn6Ykdq- zhTTXox1Vbf%xKvsdx!peuThifzyvRbWMu)JQMsujP65eNxdi|wge)w!&VrB^9;*y0 znxmtmxbxw&%uZm?S$wPU9Ee(2sf=Ms<;c<=l0BC~4q;7^9WXOyKU9l|7kD&Nc4&xn zJK#xqgOfkN*JNB>M=;}#z1_Hbx~xv_8y^3;YojCFOjr4Qw5b34pNjgoFMs*f{p%~U z^g%WM)a&?oHQ#Ql`7iJZ^do2|AU$lH+&$(PU`L^&O>4{+Q*|aU=$40Uo~YL$_BX_- zG@;&3qkf&NIP_$Cxz5$1pT5R0y#Fa`$4SEY(%l}UskeRfRvvP)D~3}(&k#pZx6v)8 zo;>j1ujL{e=e+eQ@I86?jyB=3U25y}E{4{Tq9yO^ z5Ck3s(eG^=@h9)^-+w4fUhf}lc~87>j|j^?vkCp^kPWpl?y!h9Z5OQC(j*iQsA`n+*$ zQv>pG+)g>Z@W_?hQU4P!-tVz%@zm*P&tYxfTUgtZ`wstyFT!{DKYkDVzG2AF#VLvy z+t_{->cly$ueAt-MbqZsbg1#zi56yIOOjQ4Zj#wIQh1{^qDfZGO3F|*1xY_QO4(#e#W zkPj~e!Zb&PPYsLFKg61)oqeANk z-&!+=v;lo1wo|p+f&Cg&Y}Q54TkGCNbY?%3kGDe+(iM?N5q;P^Haq;8#nuX1@LO`m zk9Xn2JqTEM;zfI;bkrM9!goL{d-P$$zFW+vvf&*&NL85uoye77sYl58kP|T1wH=~M zaz-r^UG_OHYHOI6n?dLiv)t!_IRpEHLs$iz#$kq_ze~F1aug*&e^iRs0(tF*<611+~UwNee~Z zjTHRwGN7Zy^EhoG7X$HdPF;oq8iEabn08^M23gRN?Y7UN%{*wE#Zm+Fb@Y8em@3KB zm^M;A$7pbm+q#9vKJ~}B*$n=Q->L4N2%Vsn=|Cphz|~SgRO#G$8_3X~^Y~W8$45}_ z=#2*=SsJv4+Z=>oX3VTvMvRk?xTFlTWQ5Y%|v7h3px00s=X*Y~1)-W%W zwr$HkP&gR+f=K{CES z;aI1^Nsv=`8r7{M`cLoQ-+hzt`$%BkQ?K3+H89WmP&qRY{S^$0RrN%$FdKl)8%msx z345Cy+30%pggK#kaEJu@>9Nj%2H=XnoeeSmdrW0rvxsxA4WY4uKx&XDvBjQUOdd2W z8num6354Mp42MDx?{Fd6vz=o^QxjXJ9wp>2PT=LH@jKhkN%i>5NI)AQdYB*ADi;9Jn?N&XL=8b%9l5AQDWJ(hN!? zkJ5Pr5<}rRyXu_09xz#-`s3WZ_dm*?`^(3GfR39|yE-@JF~?Cv3>hxxqgz}Yzhqwr zk{v=}wP=s%V_MHTvdib9SY`q(Hv^nI;IqITT5W7GC&-qD4xJ|#lEoEZ7B$cwM~ubMtln-D?~Fsy^J|J$>YBHA~tIOPh@1 zxdH`5G3+?w0=`w@N)x1Qm~aESU|zvlZQ`nc%LnwTa8_8Cw2&NLqX2<)m23%HLA1Ri zC$vCF*$WT$8JQ26fM36+PYqUl<~)AKoJSmB2ccqdGFLV~n1ta^cFAqgt{ETv;|s@s z_JOjx6$etPWgvnzjlh5xQaw`@RGTs|xz=$-N<}w8qt1Zc+D)=`q@k|K9k=+~^Yn>7 z&h5MU_FaAW@asF6LH#kzxw_C82X1tD9-BEaL_emMRb;~5m?2U6S=CyZDJ~P!P zYh(On>NM^IDfjqjPZ#yQ1Q?DL&Kb(9Hvw$8kG`Z7akv%!Tlk&dxk9atvEir^ln5 zj(UeKd~pP5y!+f5;BxAL2Qg#lM97!5Ce1o_@Y4eWKxA8BY|<226f4)pm`;$4K^=86 zap#nNdWWa8tqGIjhT;dl*11QoLkK^}*n%;Hu2rfCn7pNq{lj0pfAjk8VshNouj=(( z)Q1oC?ylawd-IUz`P6Iqs70aOSQNfM{lu2k%!z2XJ_LIw9Hv9+P>UncRwCBBheW51 z6K-$cJkA0lYc=Al0-}>{V-pXzHk^5=%&t2^4{W?Ac$e)qjW^E!>WQyiZ)N#|%Ougk z>)WC;MAyJ1oMlCpDEiLmXH=;$?S|mzhK7@IE|dxCOKX!ZDDZbNC>=&k3nvuD8E!f3 zu$-|^vdS_CsdYvpZMQwIf8pi*>w16ZulHTPdHKs%uOD(`pLqQq>4o#RF|t4U`12R{ z+-dAh=d|chlnj=s<$x3vrWUbAVwA6EjSFfZi5UikA_OHY$ixYnJG{if=4~gZv^5qo zBk}a~$iPCL!>jFcn$3m_{6^m0?Ugg?8o0D0DqDi_o$k;vB#a`WLGPc5(93>i+X{{x zQZR5Fx{$4TWnOO=WT|@6nY+~j-w>YljjyhwWtjulZJh-;a<@0en$UpwnTKpIY zc$Y8z{rkK3AN<38-o;Ds%pW8vJnf=BBClxUCj0mLh2Onp@zhek7yr}a;@vO6Nd80i zwJ&(6MmO(>`CSwFRBh-Kg7QNwkRgxG4w=U)IyNT!HLGyE!z6SCw;e)+R3}s9XteE3 zw4(TZ(=NoUrAAj_<-#t6qpPlW0U1xhL^tOWrfw^mkF6R#0 zIeQE;8+@|y*%`xa5lrC3E{7N#Uvimq5Gw@e2v8c(1jmlqr$Xnmc{Nxw)|xfPl2|Hx zA3mq6nmvFCXRMO3iSYl3lR6b((+P39%FG;$B%Rg`soI=)w~nt>OXO4~foeCVjmZIW zwDf&^^*#EU02K>OBnVRjhIJ$?h$|TxbDMi_w_~0^zUue8hp>>RUbaUnseV&Q_20dc z`iK;_!qs_^#hKur;O?qPqbY6={honqG5j8Ui{DBgYN{%fV{gpB~F*wd;LqEY@|!IY+HC^K8$%vD=SAYpmOLjA*6y^LmV0ALczDft%h!- zLck!gM*(p`%P)$1Hr41#M`vQ}oRAD6&yavOMIYI@?~K;O#yJj1T+a?%Tj$f`U^l5hY#=Wf;$8FPnfS%ik8UN|QjGK}+tvC+ z6lM7YHaprDe}`O(l$B;KAD2aeYo_>t*P0^ z2`d%kX&!W?I{`eg#uUR z#Ug@)f)%?RX1S1l0jF`Fy!IJQk^4DKtH;C;IJHHTL=MY31n5#bhY|JFp+7q%+#JAymPh?G-h*3p<=va{Nm)lH^7$YJ>U44< zYH5{88>wT#Bd=t3ncNS?e*%g&t@F8r4-W`EUx1%0h387)xl(w9l;xMk6g}C!@N+xH)KF`6TKTAa4_9(c=pYmB!!;Am*`S$yKrahl&&u7|$GtF=V%nAo9jIw|lI<6(Mk94vcP$57#mz18- zK^gH0`#*@h=NQY#MaB+86rYiGxN}JFNUAbu?3$j9EX`4n3s}-w1o>#qTcay)o^k9z zbbKb(AZsRzQMzv>)UFlCU}H*E-E?qoVo!EY63=g=iMfEFXZL`C=U7MgdY>J`EBf>8y+4&IjO7d zefy9+^~br5-uU!7W+CI7DOhN1w6f>LGMn8uEs7^`)A`bAv z-T=MtJIYKEqY!331E;$XoxTd`)o@H|ZibLX8Q3-{q2ExTA91}1=M^Du%lbLq7J}0k zqA>Ak>iAibfChH8;eb!<;FI1{jZMZ_m$86ZI|2=-@6~~~3_=5|WKsijqf#zbhZxLB zP#w|XeBdH|;*ayFL+$-*fBXLDZyx(z>0Gsg4gr^J1j0@kf66$QO_F;yPlSZanN1vN zkBy~pjH_xH+$=yg%?YW8%*8v^nP|XrB{60I-bbcW27Y6mGzcJp?We8Z;(GbcK>&me z(l#>Y()KJWJ@~tAf*_h!z*&KCZOWHIDTRnS z;OH6I8CwX@)46@YrADXqx!SEc>ZH<&j^w+-`@6Z3@|>ve76cDMdx4p2QrgI74Lv9y z#;V>y|7BC*3fm!Pw+7aO&mf9Zh}i&JeXOGlK%X*1z`t4KW?|i!T@Xy+}+N6K<^{@N^+~w>1#iZm|2X z#0gL~RTC&88B#WpxZ*O_CRya50ce}CE|Vzv?!v7{JJIRU_y5m6KiV#n=lc)u?q7fP z;8=U=<$Rv~JJ|6ih=bB~5tPn!LttqG76pK-j_;ovrCed|11;HF8K-o)q2tD$Yec$om77JD!l|65_dpcrGEHONfUh1fXMjb_CBh zED?pf7E*1-7RN~&7)K24zM1Cfl)NIjPum2W;BGVPM58(BC}teV4R6J0yAWx~$g{H* z-cQG1bQZS~8QMDLh_^W^>o9|pzG6%$a`zl0gX63&h^rsH_W-CxO!QPP5}IgJ^F}T# zP`ikS#FR#u3d1M%T>>2MPA+JT*$?T#6pS!t<7}m1lGr!#ai72c|Jvsz#M^iGzw!_D zbwB;rclWRF-o!5+nZ`c#;{J1#r}76>K+NT>`?~&x`8u*+uK-x8!)KSJ_A`fs0}VZ7 zwHAmB9n$8o3a3re>zIpb7n?fd3}9ia0oEfqr!@mCGj$Kp7)JT=6L5z6d{97)pUvk2 z;<HE1NZ9j6;A<4E2qmW};S>X#G1< z+=HwvJ$-q=Q?w8p+OtMGi$P`Eps{<87LCWQRwMF32qpMbs-kU!{@`PPcVp7mgx|*& zw>B1c9Zjjb4FW&ztcH8Lg1wp$Q8Y%F#X$%q0|2N%SHDuYG3`J=Xg}>-(Uob&nRA>e zkz<~jO=CSC-0`n}UO>G5B_OgtzsooNvfk(Y>#x4)LEKglPrbU&Ba9zj{qQ`(crG8F z%ZKOk;RjJZWc99tb+0{?fJ7YT(h;}2dh=6du<%BsW<%B_^(JdD^plmNF;lu88?m$X zL(=%Dcy`G{n|$wMymv@o9ekhcqj`lele>-wbeW^fowl4NJ&$SnsYDQ~^bq8IpKX1N z1@#?N0ZrQ!ZUq#Gk(iz>)@_|UG73=SeMF!TpY6CI?4u4eg2R9^5}qVp8P(V)Kl=Xv ztDlz-UoYle`iK1aUEIIk_piTt5Qq1~3;SF-JXa3SmBVx8@LV}OR}SA#g<^kcbH_f z$|}Ie^&WisRsiQ8k_U>rcd3@$&fwW+0g_xJ+?l!79u^xfuoUu9q{usgdDA9WO{9g| z1b!qBOdGrKWtr5lY*BN`)GN1j&;*7*c&;0s>xSpL;fGN-2>vcytH;hU)@(aWXUy2J9VlC++sdx(beae) zTf%LZ_)_-hB1he_SN0fVcf@*c%oK)kc!Q+CDkeF?9yPRIVTdBnJi!z-T;lISD!To;K;oJVu@v6jn-*_2vJ+&>rA$Av1Md< zS9>O0s@V-mEL#Qu*pI*e|M2s=;lrD^cQ5N#_43aD((fP09G-ebpJfg|#H!(0=I~rK zJXa0RRl^UZYKToU#6g&`keD*LUF1(Y&4%^pXSA_x8!(TxJ5{gQ38Y$I!&2%jMo_4? z4hr`eu^Tor0mQqtp^CmLkF}yzi7eW^@9n(itu>P;h#`m#liA4pR5;Lqqb5~?M7gpb zCxD16SD_zafrQf?)!PBqr1NU(3dD)F6Zb9Jnf=B&nSL)WyAA~;<;*gt{R@Jh95-La9{>hq@>9R?t`HH z$MTP!-s^0qLmRwkk-pGQ9|cT?1rMIyR`qS!rqL1C<~hy`J|)^n+OcK1Ni4jsi+0Xh zqlQ@nrHS>n*FeWtsfXss%(HYeXk7z*`qhS8?+wgXxC#b$qv}9@g&|{ggbUt5;5&#~ ztP{r5aQzY<-80;TNrr7bYZ-bFI$BPdjeAS!`B#}y{6^jIbH9K6h_K!2vxIG0_FZ`VR<2F8uL>ymiUAEgG60_seByedV6y1twX}wYtUlc7)GVFi%)Foy=1p+K)j#Pc(9&65xu0W9z1k#9}~S^;(-Xn8tCsgo#b7H z$k#=~*EyJf`~E$23{eln3s1dnj}!*9QM=QHmtYU_o*Yl7$LzkH;Az%JA)&`58EC*b{yxhlR1tKmkwfRn|dm8 zR%RIQvv>EpdER!+8J)_437I%$<+L^Li%y9F81Y%yf!?to#zlHFd!AenAe zo^6@P@J29^O*?(uJbi!b!>hM19{?Jkc*!0iozu6+tv~ws^Oy7ReSNU*MA~u>X16|& zVvHH$saWDYqv7-MSAZZ=tm4==%KBB$+6 znr&OpzG|1Ph}*a%9vV)A-FO{89VzNgwP~%asbbNZ@ocMkxGPY}ii`LTnDeGvZ8NsM zK~00MZVy((yW?_IronqJa&^tVQ+f>i52stG0R4UQsQmBH{tWUgf4<0!B z+4yX?`}p%0_rUEov=vQT-dtEuDihD1z@qj}Gq=ykDj)NZP}h{09G!Xc=(w^LHys&= z7tEehj-3@NB~MsuNUmIGkE2ruh&DRy%?0@_-Ar z`#{pC;PeWcbFli>y|+;}<^=Z!cW7LX_Gq&@&6$S|8a+B_fa+&^#$07c1)s=DA2=D? z<2U%9e!9Vb%<#N>>+jw_EbX3pA%9;a`|th{gwOdbpml9Vg_)gYp!A*-z6S4Ob~-dT zQggNem?6^Ce34QeOS3Jld-NI9wN_|0;njh`Fx>fgId?(A|2)g1?OK|W)Fw}Pke0r* zjziN!6FLkr?-4W$U&7(wjhSXY8ntZA;*D~uR&fKI;y7(|DPg|atbj;S9nu8pLZ+T* zbIV|_?xRCBQoAjRzW1!4WJI|2@7K0|qV z(L82?aJ$QUzq2`wK_sowB^0N2=CG5EifuvJ_TqnkJR1FXdIQ#0%f{CU3pjQ6NxAJf zsA4j55`fn*$y4!aQ3<9Fti02M5aZ0t-PuneZqa85@`d8d! z_T>mi_I^tUKds3**0edVEt)XQXk+_iBqeyqxmQqYmT`dpWOe+r%m{)mv6#fK6nM5dI=xfe%EKO zz^7mM;d3Iad z_nPC3!L_+Yw_I&6RhdQTw~pSDhwtshylx>iv6`_9o}5-i1HC>}aef6}*XFgjTFXt^ zS0(85iF1_C*j$siPSCPQXB~&O%0d&6z^urxCn}@(9PTLG4Bc`r^a`WWzA>r%nRyc(>$KIueX(s~QAU(}BIgpt6_*Bh zA(%2YG=q;bNfP2%=1S^KY{_cW{YVR1lPB8g)x|E{j-Q*S_NhP4Z+~k4?uU1t_04np zux)*{gm`ixMCNp(K3a{fN>T%1ug$8%g%RE7=_0k3v5t}Qm{sE_LUm*;-F~QPu9@iS2TlqUNOYDc4I6Er&3?Pj zxk{ai8Y9*mDusK@nkpx`jg}Hl2H(AOFZhvqoJ~F&!uK4)__Z!*x4M>dV%W~c~(2%TI|ebwWB3;jC`O&SVs;; z7p8O68?FPAGMcPqC;+7a#D;HKw(X3a%kXrGm)V?X?Gbt;4Ox%5at}Iv>Mb(t{m(1> z^;dWA>Z|%^4~n`cUb{zH*mTpv{vyXEVX{&H@|tDNeR5c3#cre5u(R#(idETZjK1w8 zm-xXnHCJu88FF?~<&1gGrp5EL>@B;(8q0GXu{vwv3?OeZOsvM*>66B7!x}?2_rnV> ze|6lmN{e=7q8zgs-m`_4VAqRO{%>!)6|2Q^%W;p5vKoKL^-yVr1i)EK6++H%2> zZ3!+M*qNnGc46qbblEs`YT_EDD3#@Ol0@UvSIi6rY)7XW9pAA+01|DwDf8rN5q({o zKl4g$!w8M7qx|CkL=87f=Fx1n@e-H6Vk zzj*&?isaKz@5sI*UVv?))L$bM$EenDB=%M0nq;{oaGh}V-nnc?uQFVFTH70A?H+zT z<^7~|P3`>%jWfG!^cXjo;KK@#v5g+fe(ruUZyXbW7u(@Ja25$>#g^9*E-KSD(x&-jtGuGNmY^NyW z9!Ut7M8iU6<)CIHea{RZ2@hvm%L*z7;(o04P_o^n961ea>eA*OqZzdq|M&OM=^Dew z$`(xclc08}xjn|I(6JZ#l5L*Y(>nI^!-5EEv0Qadn}@iq7EM|^W7$4IVY5;|EA_P# zI~Zm%jLTP~n6PFKuMTnkLh=VsKw0`!V;<+U81-R3Ci_{`AvJ@Zp`~sd`X} zKlK{^zFJ*h!aMN)d>`+CG$!wC$_KG$Rz8iBcY_GXe3qW3lRInmNf3kiDn5$weZ-#o zvS7O`IcG-In9F*tCQ(R!B^X4{J3Y7&MEG`9vWYl)?N}>6lOmgq zRzkq%ZEl*_Q=?}bQ}4|#pB4>u7H$^nOpV9}WUq3jnoV0`je?rFjkaiAcMP5zNR$QcYpeP%kH|$DoF@QVP=?vm~l)pu~NBIPxjvH zviF`UE&h^k)mnS4HR;&rQr+hS@*ARsRs3Lq1cihGq{O013Y1a=2_}$m@d81VyUIlY zgQ7tYk(<{0(|u;ndAdh4H9bBL%$Xmis-JUC_qX@=^I3cEwchX78{1@XVm9TY^*{_T zR20-WkWEAj0wD=VqX|*CScBok;e$rjShqjw{|8I05v0;FC8v@@|<)krALSN zq4vdm%s#qERXK*pvzy&jchhI+BiZlkk^S<7fq>6dH7T8Jw1Mj*X2P_*16Xxp4n%Pl zS6a^jU2mR6m`z!oJTsLfR1r&hT2HOh4PW1V~y+1sFor@aIT_)O>P zyS?wj&FxQp;db#I>JMYJaZPcs+t=w(d+n>N%rREpR&SBQ;5At?%(Y!zdNsBK%r zs5J#&T|y7&Pd>&9wk5qOGyWw{fh1(ou1VRLdmm=ac;8hXgB-%W^bAT7pR>hP#+Yed!Bh*Ys%o9qn206(lo4cpPXWd@}JS<=_&g4xy@ z&RwDS+A=h|>O70F zbIfYDKmE}L`ekmQI-46w9Xr`%7EO?RD@kjMSe?N!n05xKmk}?Am1O**URqg zYs+l=9OIQf%hMEEvQ%{a+TO=lgHDT*>cbZy199iLTV?TNekG<<0|vf;Na!@kdMwF} z>nz?mlah{@*sAJlICmpcIqTGHU?zE|%4Jb=?q(B%ISn&Bu!=9vJ93|cPdiwk%`0^C zq6PhW*TZ+6RomCjzRFhHUNY8b96Hb((YcoG>F3hiLF&=`sP*1-YqUCTZ1ZseA#+s& zMT)(RF?zI3TNsEZ>wDx$99r|VhJ*_~N1J!vd-Xe)gRg)5?2$cvYCrJ!+4sJrcfaSA zd&Piie6XDTtmnUeaKnNkPPYlWQT4rf&M6D?!xhURfI=Qw_1v@XDZ<+hkMO=}XEte3 zrjfE7S>;u<&Wsb<41*#b`!cS!W7SlWXA9U{Aq5xkH_zQkx_d(hU#NMVHNY61doLcLiTQd3PJ5TK0ms&FSy@s#w_3#Ioq(AHVufP1AbPy~nD`b_Y;CLO@E5gbt zTAL~kNgmf4+;)@h(Dd&K!5F&3F+=mLe_eP|kg5Y0Sy<*a$tX zJVwoI8wIm!u8~p114Ew_Sqb{h3>|X){xm#VKslr@T}9hvG=A+H>2w4i(O#B4tqYy3 zL>}RBFB}DA9r(RFB;ZrYpeN(YNh>U9i;7!x)4f+5=o2-(&l87O=FB>Mk07$W*1!|% zXS>8kL^4cxcb}0;X}wf>=g6sOnOPqaz|Zy^I*b-Z+QV%1n4UIx?dHvRWbQU0_9myv zw%wZH>eV`LT#ctgJ>DAiwoB)xV_IilBHpffrr$N~e1kuI`xiaSr_Y|eqP2G4OZU>v zfbR}j_;n3g95&s>A!0h8V-)Iivp$;i%5wsjZ-OPr|*s7lUNKAXb2 zJ!SPoc-JsJGMZQRsU0U!BRCRH?5+4BPgUIh>?fXc2FK|K!in9M9I69O)Uu?bTw8I} zSZyCryEh%!!h6}-AYG-Wktd(@xuz_(oMvz&mc!q=qPABSeyTOMP_p+jUSp2owtL?G z96p81>LJpVX1Hk!OwR_i>ft)~;T*eH+aMz1n}WQ(&*i5zpB=_^Wmko*mHotKSyN}^ zEbSB%eXlxaA(9;Px4AZ!TSzhD=PkGY_7e8VXw$s~fE;aRlQX9GsH4LJ-u`X}6G!kf zL~Q$UNb8|D4qnOC5&PlNYZ}^~N~sP7FLMNLa`5$&on1WPU?Rxycp}~u8vWaU_lavm z_jAawMb&0Rkem=%?Tk5;WcH(JzM3vJ+1ieyX$9FmPQ0u2n5$*?joh;yEs|r~9s!fS z_NhBFaTduH$~czl4i~lTdpg(cfBwX0f6nV0O@H`x|C;mU@fYUONLLGV$$?|T>4|8- z?hKu2i%C1F!rPcbt|hb80nm0DQd2=%gH8kbH06G{uX1T82a`;>0&O*qY)9c*YfLCz zV>%n34XMptFSkt_pd3^O-XJ}~BtS^hexN{`Im}a`8<;M{gmWF8xvq}IIM^&Zv5Vt_ zMo}CCb#7xy29ZM0c832o_7omldyCl2EqAt8cT~Rqy#3}o_U@ywckQJ?#67RytH*J2 zcO3Ts&5rYkQZ-mG2T0T&Q3afVe9pXsb#ik7#R(D#Sx3Bgb5pWz+Kn zdrR~(;N@zgoNZ1pDJPFnLl-yQ#X8Izn)bEeoh^JDCWQ{g_Ll^j_iS+bBKEVdJ#WAH z=G$+*)J4AU)qABxv)_?uzK$NU=9WpmFGG8W{7+^TJVnPVabjAl;M&+ns}ES61$&s< zJUXOT_>7vWeT_3MXo5cCwt;%-u{-o?v>E6HG$OGo4YunlFWYtd^Irief(-N*Qg#TQ zn47&h+xVdGWwO!XV_Lz8gwzwrd(*=6Uo(F z_2?jv5V;ub1tSVZpF-#M7rp|I{Y4?(Yt984P#ta5a>&u0r&Rd5Sb>EyqUKqEy@hLE zy$kqZ!2Nc7{pFQ zYsnZ@-g%Bol8Y>E>qL~s=50_6U|3*O^E~3N7VU0=*nPK4?mVf#!0lN+dHhyBdU3z~ zV)o4YUdETjVxL)`86OghJ^#T2dU*d|7B?P0d-r=j)I<ng~b{i-#l)1#X1UW4o@Z62|GaDxa zG!4kV6#}EGj=25BtJAoUMc|OA3~soS;A-TKbDPUlcWVu27FUouwv5vhMu|FQ`?53S zWPGd+c&NsRzNo4D*0BR~GTg04=?Y(0<5HFo6sJIa-pzHs?~ikrwe-&8^Y(fB$=gp~ zsb>@m#{>vK(k;@n8)g6_=3Wh;T@C4dAHq#ZSEWaSkmnd7ZNxMj?TZLwsKsrN;O_|M zKa-Bcfa5rH0)1Gtf$oDIYHHT%to-m03D4yhQ)8eSh)$bK^N2ty|O7jv5}OEW&qag1`r2S-4Apga z6m;Jo=am!g4|j-P5rrg;5M~j*CLmc|TFD**pE8v?1yV#44-*-M&q;l$b3<0xI@Arp zLHrZ5H8-DB=uC)v#N3?Cc=u5H?cgQ1Mp~Zza~yOkqo~h_eK8-mpJf@gx<^#oxFwbWv(2+f zY-*FWx7IwC%~l11;CcVc{JMYfU-%aO%;@h=fWHJ{?azCkSo?v$>8p{oUv&5V@E8P8 zMPHE&0Jtkjmy@7|?FhqNrA5a##h2rzbT(6-vRYh@R`43A4;?vdb?Lo#wC4g0=MtN; z(pNtxrxDZG9MPI)UrN#TZgF=vxaTq0U7z+v-g}x)(w^nZO~89zyH^~q+h@l7(DC~E z!NWOTf1dob`k203Z=)`S_tZU0j;sx>TFkY58U{rzML?^`HM6yr+y+-1)~y^&JUMoS zaV16o*jY@pXZZqHOln{b3)WIMg3G|QUdn8`?4js_kN>%cb14|*m3}YS!!Mes; z>b8LiE$e~1KdX4QAkay=6i9c`th&Ec=kB||c=yzc*4JC_)}!xx8M1fJ3-?N-E!{!d zKBNx9`*ufJD?2DcX!F#JJyH)k-76SsZ3uu?J8jH_;BT*n1ERDQQ)Y{!x~e#F5&=Id zfn7vL{45N_H#L*hn(l_2*%^fKK^ZKGzJ}gCec!j%=I&AL*jta^dzO!$JbqbLdf!X; z!AI^JKmW+J*7}qWJbB;np&viE2QZ^M)6|)09rOX`wCbyC7Swh?P85Zn-|4(=@*L`@~y?plWKTV{3V0sKTh z$@A{hx8Hj7?%R*f_db35&ByP(dG|rQ?gw!in0(IOi+;Y*@g;of93!{y?PghMg+1;Pg%V;S73t=zE<3> z31ma)IbaAi_*am!otyXFBc91_h@wZg>~?04Oxj~_SkP|LUu*ffTI}F2LU?Jh{ zZD8e|D)&Bk1-FSw-2tmZ!KN$f_$s8Y z!y+Kp0j~rYr_vv{@*#7!oIGeZt_coh5ASuF&#@H6=m+c3wbQNyF8#hd}_NvM)n zH^2S#8((6x;%7zrd!M`g%{M;%4KLaj&wuc@@Ed(dj}f*De0+G>#v1O)>1rfHTc2ab zoYVFeuON%z2}d(>>U}sk2I`Uta^TZe|ebh=`9%uz_=-cM8!u6Y@#b~x6<94Lv z+{ORj^Ge^%Ik{HtrK!n1uh|C+#J}kD4mZ3`I7D!>s=Wuo4A&g-ZO^Zy{Gl7d z^IyM)*gqd6C+J9>)qtCT81ig14N1zm2B2+wGkJQVmYuZ_wbWg;H-$kY7K}fLI);z| z;dGpxqU%a$BqL|EK7`g;(`w`9w@AB&$L*&-{>75%&T*OJ)ohfj}QT=R|zDzgG9 zPg|2{%!B=S=T`4)Mn`B7j8rP{?@kFo^kFp_cMXIjRaDVyN%`SD&RJ?#hqUdsobb)c zfYoe)bl^U4j9|sGl2hPWIJ^tFAt5^(rmp>LYk8TD5!AJjMF9br!W3nF8;|B~w((Lt zPQ~MwF=qF?WUsDS$O$CGug7rqm0H?F8)UzZF+jr3P>|IpGl6EU z!(>EEFo31%wZ)*goncs? zzIhz>(~gsMJ;c$56EM68@ihcDJOH}`IFX00me zZryFVxt9{i3puY{qg$@FY8^C01v0JC>9`0cOrvY(wUlPY^4pJo(?eLGAN!^+v1WZ8 zM$~WGyXSjvKmJXh{>B&O>I*;oiEp}7sgkZYEN5d87=bV&K#lQIX0PSIF7 zH_qopB~+V-j(s6W?^Y_nwqCmV-}91vuu}c1&sVDLJ^DN#{Q6AX>=@iTeRx50**PSMc6?W9yZ^Wml-jiusLt?=xYr8rsW9y1bOm9GC zBYO{x;}vpc^AZInXgYxQ@3@9svL!<83)wL*Q~Lo$rgLMHqK2NRFAQvXRd?=JO8?J)7 zI~V}xKpas@ttH|CVpVH)njxVB*=>sVcyH91aCPR;gU7Awk(eOP&ehXvM70G;iQoRp zmwG9GKGJ^c?ROv7<9vGisW(3Ti5EM_hyTG}`}`&S{R(;Eee>D7ACN!pRE~C>W76D? zYXqyMq<5>iCwjVYF0^xnkQrU~7>(Ud&IWxV-kWu58D7;ykabh1**AnyrGT0Af$6&0 zmd4vj2#d53L3;Pzj>u>_)3BdJsQ??$vWkb{6*6DA&qzntiZ-rCr^~|Ks6$w?6X(*i z3M7Y(T?(HV__PpFw3B@#Jd-G>9DVhD4SIE<-}cf_?Q7qC_UKi6%YCof!`@r?Lmti- zKX?s3rakgPIbU3>162Q5*~EHC3`R?Mw5`)gxTV8(YNpmae_)2XeOwKsEGI&vqho2DdeJ5e54$K0R|x~kDk#R2=NF6=uUF`RoC7k zemVm6I5JK%2WMpn`p7b)mNhflTxSTOQ6wk%OcSFT+*d4;J=bm$epbH{hX{f0tk_s_ zp{ul`2$mNBj?g4cMmSNBv>CS_e7+XE*!HkR?$XDuwn4d8s4tdOhb5}DS&&=sv2{Yw4-{L*LC;2G zNbDWHu3lBEonDe0L#&}WN1IQ1-2TmvU1r)V?V_Q3KV%3`Mm)jM>3+2pBH>6!5a^o9 zt@}dk3HC>!vCp=F*&QZ$)17rUCsqudp`L*O0iZF_YT5~IG4tr!g_yZT&D+0)PqF5u zf|`@YTD%SUqzodf>OgL930Tk4G@B%z-RV*N7(2RXDBZp%@mh#BFPKWt>D@50LlWVk zYS=-?><6`IwD8$!wt?KVVS4*D_!PDsuOufQ2UHUd9ztd%c z?iE{^_gZIy+_xPav9ycjYv;7qyPq0M%MKbfTctpY>fXFcWitXl6{AwZG9E-3GO14h zbOS+~ZH=kLH2cDLoagpK_!OYS%~qzpSYT-Jwfi_sJdEHJFKBGtxSccTjMJRPsvM&u zumWx1L!!uU8ifKp+iGJ(mL6;l%@wf~y7Uxj1kpHVxnl9|q;>n{*VEa@23~3hG=gol zj-E;!s5!5Kkf{MRyy1l~T^^VE7JxjPo5q9~1O@BCR&x72IE!|e@i8)=J7Xg6 zoX@DYtvPGKO0> zF^fqjhc`~m+JxDhXxzRl3jzbXS6zD zjeV^FhDz%~g9AMo^ux~uI~`_4hXbrU-r609%GkJSQ*TtaKm5i+IGF!uZ#;yf&wu{L zXTRl3>hFC0FT6N9-vey>?T@_i>3`}Mq6hIk?>@D+p4Hn=-@N_NH$MIKFMfu$&+RAQ z`1H?t9zKB|-u~Dd@NfHjkDtWtzk1`-Uw1`Oy!Yu-@O7{Ui?x2%@_WQ7ysz`6aT~;pZ?eff1~Gr@Snuz`oh0_`%`axezx(2&+w&%SR*f4>j&Vdo3dnG8L*BOA2q1;g{gW6@+m z)iVd=ryPxWjbn+Nkb`jhmO3%^G0^Q#D4PIYK!xKKw_01btZ_~*nX_dZ2meI`W=8Nu zu}8Z*zrF9~_xtv^=gqzsqmhgKf46;g&+GQ;_SJn4Y`)T?5m0|b)X|&MLEWNv(m-S? zrIyu1tgtnol-lNSB$XncSYca~Sh9$1BCND6w1h4(F01D8G6OtV96)E>v^^2cIv2Gl zpyEw#zxCs&hUPpQq$coV@|Wlvu42;^w} z;DDx640bOCm4+>;h}&X`tc|9;To<)UoUYF8mtH-0KFCx(2T=@!7GqmRuz@BWyRyyu z>f`iY3n8**16>m^c7a%EJomAoq;kNbLKmHJITmSthua*r|MY4{YMf$M~NG=$K!@PVq?SfzrRbR)1rf($pCV1oL z@absEPmt0lD>`7)7S2YFGwUW+QI=ZBHBW0euhW9^r=L~Gfw}$pPhM*wS;KG&)=a51 zXDG}S{0m8OAc)}BgabzH6#6V(Yt9o4&Ak=wtIZzQ+5Htu_F5?W)*H1r`#3^7ro;mWsmxEUEsE0%UTynsleu38g^ zBkO?L9biBrNz;ciE-PqIZ0Ow(NIWr1f(~(r5D-aYopbvOpS(yAyE6plo0m86{PCEs zh1-k4i0vDdtev)T6jMvT)Wrf%tRb@E;@!j$NbD7-Qq8d@?LL|ZhJHJ*?S{)v!~hs# zTO~48M)2(~;!_;FWd<>R!Oo2UxNK50Sw9MtxxspuoJ;TL^fp;5RgsHyRS^} zE{Qw3*@qDHmSG9@HzvrD!AY@!u}XB8G-Gtw}0ij zVQkYN27I1RTY~|AT0^q;;An`_ZfvCiq#qqr(rY_0>4+OTm5fWBi<5%21NqHpwUJiY zN1;F7STNM%MKA%on_S~_TP?|M{~^|*A?&0tUv|n|(mHL6nYtQ2*QQ|;_N6?GwgzxK zS{-(DRvXFE(IGBG7PX0)p~QS>oC&t{X{jq9`5fAA|HCIQP28*{ zK(8qEjJ6oTojhQPSEL>_=`>mf+hJy$v`5u`}0B=>D4R z(RUBt+RFCnl%o|I>{{pW?LWHK!oAl3X=4f@HYvp03UG~Zjq)or4W_+lW64NuHH~m3 z1o18MV9V{T@15AI;McZ7d&;}85+%!-D>sRlFWha%!A)sZ7UI)y|M7LcfJT+C?_^_k zxK|CF6tuO09b-v9Lvox>I#233yyXDElr$B~_*{60qT;+AR8YxH*(-?JNgzU#HM`1UR@HP?e4tM2ogLS84 zK1FOOk#OhQMS$3_5U2AwrK1?a1mJZr{!$e>bnPI)O(GX*YsF7R{Q>@ds$_!~}W7Vl80@)-2Y(rZoNfzsd zlMKe;5>>a~eVs1~MF{UM&Nfxn7ZaM0yf94|SyoFAjCwRTo31=@nL^No8JJkCjwfx5 zNmkqha^@p6yn)k^Dy_3M>;?;7L)dOOV-dF+r{DgQk3WQt#Q%slRS({cY3k9}M8%;+ zrbE`MmN>pib#cHM@f+gCHIa?RlW?ZZ#YJQ6$l_CN>?=U3vv(UKa6_?U7~n{xfCxa~ zjzH?eI`lZ*eh=1y8kF=9{y=4d{BUqVdks)fDVs%iKx!wxud{1%Ah_`|sKM1~dzp05 zMRNnBcQ#SqyYcj6WX%Sq6P6f04+vy>w=)h2Men-m_9M?f#VokucC3bZ7R(6sehb%d zI9X|q%<3BayWc{7k@J6mTt@R;Ix(}l7u>BO2o9d;uyA)pMYnUFEdx768>*8V%-O0kCTPjW8WdVvC(VPoWkYCmr#u$C%adyT^-q2gsn-Ac z$vcAI?Guei*&Q+`@1f!BxH|4IsQ8r(f{i%QxYb6^YT{C@)|R)6yRtVxB{LvBL3?4Y z%N!mtFyCp-=g0i zdJsLOU-PMl(9QX^pLz%#j32_M@Zeq;_#qxDLUHd`TyV*K6P|>AFx8{s1B6{6sU8Pz zA#B-tY&IC5h)k0V$r5Ye9JEY?jtvZY;qjS=S6x|r;Z?vwrqFJ;pZxek=wSTtryhbB z{MUWzA@mM@_(4o3fBmN(!d>7ueClHJY}oOqsI|*^|TC-M2sX@z4JJ2YTlF zw?Fj|&V0Y=Q(xYh?>B$yi=6rX-B100%kwi`_vJwbiJ?m>R^DPTJ1k{*qW^^ zeauy3Bb+Qqz%E51Ub5m=(_MkLTMVs%pp~-#aH{6fXzyl$Ad5yA1cG zv)r~=xvO@PsWesxr-PuGh5lIfAmDGp@A8!*+$%BzZK`?k?T3*Qs)1fkbWs2A@ zc#$IZ=G*b!lYI1fVbV*qrTbpYSKs_k=sF{CijvMvx?HNh21)p+*>q4=A9OG`ny_t< zFKT-Tv=f3c1naRaxX(ys_LV&M<}-=+p3|!;+gh_EYGg@3=iv-Jc5*L0gHpsH=ibjXEi)HSc(i)!YD5kBin*Hz*fYAi6xz~_s9GEF z;uu5;b_V%|w6;bK+kx7iL8%=lXKX3kkF9Yia`5fPQ052j$FxMjhFu$A*kfgQJQUZf zq}{TCoYH)(RtM;oI1tu|g&t)zgcUQuz-)^!I70LiU!gO_kOK?viNQX(_qAOhyD(cz zhu?nRci^@w#9gLvt-|apY}K$B2m0W@p z`J6EfO}c3lv-TL#GJ9jVlr%eDr^PU8&T6;c_eJf#_x`Z__;)-6LH|#D$CtR-yh^e8 zhrZ+ez2<#Zsp0A!v=6W03!<1cIW^|$ATl;_%xxh4GC-y#8yaYlduz0go2p@ifpo+{ zfr0z93_94=L9sPAC3Ox*vXP!$I8`Syv~!HRK3*F>+nlptgT>G!q6;CsQ4lN+92Ahb z%c{Z4bfgSqSvVC=r^Pr_p>^aVC$0-n4KSik=cP~5vn|_|t)p!fAx^|)SIubyjfp!K zg^ykR;&CX+nR8`QTV)P7dYpja1()JBJGnGc zfSq(X&YIx99+fqE!%!U>bL18cT>D zwbm;m@ioTW8z?NHk&}^mqby`BpzcqZ4E;1Qsjt(AiCvlqukxAz-Hf)hFOCFj%k!Y+ni}=HciY zWKD+Fc>ss7G`Gp(MC8is2n+03W)stX;lyYHJs74{8AEvQs@+<3Bf=s!Tt{`CmEO~; zM?h+NdjGbsV5ILuIMn>IZ^Ngc-D;gVaGuQrr2=7pJ!=a0j#MMjEeBgs%hlRght3py zv93z!Ga&(^hPacQ2|hA*-+>EI*dAnX1yVycqFfta;4jtpTxoLqJKz4rB8={Rf&T8d zKZH}?-~0C0aO(Sq-+t%Rms5O9n|Xm6GG_L(%vlexbTIZo@jGYpIMn3`A`0yEn5b8Z zi5>Jb0(9-dw+!04(_4B76ME(35ucLnct(WSjkxiEojh>|ZkE8bR1FwyObX(fa@cM#Kq$=RaT8iV^6-@mGABq5NaVoW z*#VU8Q#db~|Lt$01B)S(a0fN!Qck#T^05|x>MM%-gbe{iesU=i5abBP?J)|z?!5sS zG3L%rXARZUk2b&u=E&L(h0f*vuxg{t5{q^iS1a`F%^mWwzU=n5@G0uRUrAujClu8& zdYc2ex8Pg!fIMyS*s!=kFDc2hP#)pzr*=fgo;u)kcddXVj=G6ABuvkJM7K{~H3w!j z*RAmifO}NHvA?%*YqXmUZbA}@i`P9XOT>Y0iXK9W!5BbfBPE1<^dc37*sZ#u@&wn zq-?`6I2}BzDF=3{v+8(x$N zN#HmQ*<8TMXqXv55FN4sgcf_NCM@C}-@&Iqo=oo(tdF%*c4kLfQH~=_ zKt9a9YO4#4*=Qj^e)I)?SnMv7hI%=M1ryWSHkFZi2M?nuuV|Qh4FYyW9KfxjW1#&t!oWnif-7yBd0rdjvHpucv z@4Vna@3W!x)ewkR3qnkqww+<-nn+$;yD)bdy+Kckq=NwrM2D$sopT9{A+%6G$YDEu z`qJCqyPk_2WYEGN+Q`fzN$~0ud9Y)E0>;||#ZME(LbDk)NYJ{BOu>`6WuhxmsX*~% zg99LW!_y~A!SD-$XQpecnNGtRK8F*Je*62^+z9q2;ytEH2R|<_4-zy3El;c2*P*gD z`hnsw@j17%!7`ZC3$GRilM~QD_1OzBwT;)M847zenWMwBG4Y(NGhGp5ypRjF$L$|n zZ)z);{u_jaK%H!)M&!W@57Qh%VJbE;FH{*}EM!L;GND7=4GD&!n>LJ<%7~Y5QL4}v zLNvHh?i1+>lM$b*dcouKcy>V7Z~yRmI?Gn#L~!6NtTkh-tij^jR%e6JMP()$ZG2s@ zsD}>Uc;PV7vI&u=X#?4=Aotwcbn0NTbvard89Rfn22t zXRPAj9f+R_Eyou&uvL3^Wb8_u)s4)}d*|K)h3;zVkKI z&_Dd0cWS6R2KN){@L^_*V5Zh-E|@frb5q%q8o&eF*P6N;6oUI)&Kh?#Rw{j@FYxOc z!*q2TOk`k8w1e~!gkV|cEo3ICt{xSlxFg&Rr@rTl=__mKCq7(5{qg4>zx7g2{Jt0R zfmcqtQ#t?f(9}JM%K2Y@=Yy@BfAm3A&Yyf8mGh6^t(@EFAOM^N(Yp+_^;#iFAza%V zF6&DV@)Qi_Om1T}pRi&!hC6W&^=4;I_++7@Le6Mgz=3iTL?slg9wu{*Imc8^3d=d8 z>J-^s!^u52(|#tW&-28dJ$v-d)3@Krr|&+_mrtMfyri$rfqft~w2#m94^+{weg7vP z)zQ~fM}P9+oUGr7|K)BS1?YzXvujh(M!rJGQ?`#ufK?NO{k*5O9W3yn z)I5W9w9Qi+oc>nSWz}#Yq_4_JH0=?00|qkkA*5BGC7O*%5sUz{t$;O5cLUq*c^vS{ zI{GcIs-w@|wRaz%NB-pP^Do`4r1!n3Uxe=PKq~2nV|QNs;G;VFn(F9(@o?+tzxN>O z=x==;b@aF2t)nmk+iG*$mP4?ux0RBup9X$Dc`KyeqaEKs=w<^x1^7Or!Me^1fK|g} zX5lVNTn8f=AdI2529x!SH5%~8)|&RQ%tj%9ChjUU?t7s5$~yYZAFiX1-$dx~BYXGV zr;q);cV9k`-uIe5=ra0|(CsT)Mt}Fiz1IJp2T?|UG&#U>M3utd294LLwiywScKwnb<{i6@} z9QvmoL;?NNucLtexw{3lZE!29HrvnD z2dNAK8rJV{`A8=fd20fqJI9(*HJ(J_TBn91*aWEu@Z7qccCjM zV{{*oD0XR+$aif&Sv(r_k0YJBI<-P*>AsiuqZ8>@ zZ$4JLovF4ZwiUIK0nl+l|0t#0;D=hMo}!BD`42 z0BgV7fcXp5sHMR2YDnyCs(@1It-rh5hQJITJ!Fe{=OysudJxw z`QeKC)_YH$Jbw1QkIvinB%htfZ+-6b74;<^%ssE}M+ele)^hre(`RPiaG8*&&K;Lwe!O_1uam+vs#I!On`=H`vHLEh-je z$4h!t=#ok%VD$t9*4(FtBTpRl$GH811y*KmeI$@Kubr$02 zK|ee~>|r)hDwj^6j8esmc9YOSKb^Wj#}-}NA>=f`)$L_M=Mr)mlk^&BLvvKlC6f=?}k-O8V>XR?kkfB%ChqCfsRis&D_TSRjb zq6+IkToY@oaH7?nK@{iG2=7S$#MpZcQBxM=R0N;4!e+M6$aY+iGXw|?vU^r0f}K$% z5Wy#NofIUhw&k%x2!nM+Zr)up(>?QfURgxH8l62i1tU*8R}WI_88$oqJ~nKwy)Lx2PD%ugP$QX@vz6yq zcZ0v~n>6;yditq5*zULAdGsW|Kc76ZUu2J8Dx&wjq8}B}uihg1TOV!_{cR7Ti2nB1 zQAB^oOGQ*9_E0O2D|fi7nIU~C4-!h&o}xs|O$1>pZLNm%WE+Bz9AG#0$=-UK5EV6I zAU6b=NeJ1rBSLa|jVm!}jf(+jFMRol&)@8y zM+rZ#p`^`iH^c(1OP;#`K1<|7+nbgOz_3$JgJOGAb(^kk04yvDJ_@%@Z8 zq@}_krZAx931yQBh*nkZX!UGi?`9_nA`%b&K8!TVOwwT2^zYE6C`S zAdUIhR1|aR404Gji`eFZL1YbNu!l%z)jVEiLorJ1dYDF*r|{Ids6`=x(B$@OzZoM< zKF3#`1A-3`a=Moha$}Q@oihvJRpazti!6`X=rJto=mgb_=RP)+bPvgb5fEwVc3c}2 zg-k;eu0eFDxCP1RJF7ctla$Kshwv%76MTBh=T1xmj>4(;|Fm~*KbL1|T_;>H#t8(O zsS7bWm5zghvB`5-hiCPrCjJB7?_{m#FjLUeJ?W~!5O2J|;Uox(M-&x75oW-6VI+`f zJjFzX#6;zMh5!*Tpm>NT=DWLRoPMjsnWW6SGu=twRCRUre%Jo}zUw)DKT8GFHQ{1% zJV0okf}mz+((vNyIitfjg5-)kArIg-eF7VAv2(OKM-L`gWcIG7X#<0+V>3FdnkJ3y zmv6a#iW!qrZBmt=wnU9V4zcNHg4a~hy05U2ykm2=a`*@>o~v0c^SYsLF!1p1wp>JlsFqSpm|*l3 zYpj!t$fb^V8*}TxmOD*FVUuws)D{@MVHC8Rlk!+Lj7fJ5K4hTFEp4e|8Fx&1UVZ~l zr_HWZ-Tcb=0}!odk~TfEPn|`BdpY$nj`{97&thiJNi!UfuGu?JM6|OF+7)x#kjz6z zd1)KCz{_CGpPMYHgVni|-AcXk^4D+{x%L^D$eas>0-1eo-lo;}InF}3F>S@!TX*YJ ztrNC1osw~j+bs3Axu}UZ2a#0=g5I;j z@%%9nln3v~DGnRfDb1q!p#dY(<|YSP0&1ulQ$OAvW>H{;8|Uby=>_WGM9VE(gPx~X zGJd3N-KLK{W^nc~)wZp1`Rn);j<;+_pN7h_^vvefr>?Q0rH|1lavtJ202w2EN>AOh zFGV$l#zs>u;RCA}K422plYxN?z)fBDN*0kl>vTnuKmZf=W>aNd{>Jqk*%mE(xXi;R zn_AOa8OdJK&CRA)VLyY+yKg7Q8}A2yOkh0_r>+3iJS|ja9kS86CX3H)l^Y9U1)`}f z3LB^$!RCe+z^|9z#M60LizbX}Q`Z_8%V6R?IxTKsqdFr9hqd8SD(@mz36@cnfR;K< zHO>-Lp5XK_&=FnA*9)v{Ih8g%bs!uic#MPG&RHntY`*+WoJDWLlceP&qL#B850Gw; zZ|$coKnNKu%rP|CTc?wT_)+vYg?Z?~2;HK#4yV;rR{^+|Hi=EgGrZaY(ITZK&B1ic zE6k?se)-Qh3-Iw;93u^yJFgEzF3J${*$61}69z|1%0AVgRuS3nyFw0GQ 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 diff --git a/packages/twenty-apps/community/fireflies/CHANGELOG.md b/packages/twenty-apps/community/fireflies/CHANGELOG.md index 57e5605a05..675a2453c9 100644 --- a/packages/twenty-apps/community/fireflies/CHANGELOG.md +++ b/packages/twenty-apps/community/fireflies/CHANGELOG.md @@ -1,5 +1,76 @@ # Changelog +## [0.3.1] - 2025-12-08 + +Import all + +### Added +- Historical import CLI: `yarn meeting:all` to fetch and insert historical Fireflies meetings with filters (date range, organizers, participants, channel, mine) and dry-run support. +- Fireflies transcripts listing with pagination and date filtering to support bulk imports. + +### Changed +- Deduplication now checks `firefliesMeetingId` before creating meetings (webhook + bulk). +- Shared historical importer pipeline reusing existing note/meeting formatting. + +## [0.3.0] - 2025-12-08 + +Subscription-based query / Full transcript and AI notes for Pro+ / More + +### Added +- **Full transcript capture**: Meeting object now stores the complete meeting transcript with speaker names and timestamps (`transcript` field) +- **Rich AI meeting notes**: Captures detailed AI-generated meeting notes from Fireflies (`notes` field with 7,000+ char summaries) +- **Expanded summary fields**: Now fetches all available Fireflies summary data: + - `notes` - Detailed AI-generated meeting notes with timestamps and section headers + - `bullet_gist` - Emoji-enhanced bullet point summaries + - `outline` / `shorthand_bullet` - Timestamped meeting outline + - `gist` - One-sentence meeting summary + - `short_summary` - Single paragraph summary + - `short_overview` - Brief overview +- **New Meeting fields**: + - `transcript` - Full meeting transcript with speaker attribution + - `notes` - AI-generated detailed notes + - `audioUrl` - Link to audio recording (Pro+) + - `videoUrl` - Link to video recording (Business+) + - `meetingLink` - Original meeting link + - `neutralPercent` - Neutral sentiment percentage +- **Meeting delete utility**: New `yarn meeting:delete ` script for cleanup and re-import +- **Debug meeting utility**: New `scripts/debug-meeting.ts` to inspect raw Fireflies API responses + +### Changed +- **Plan-based GraphQL queries**: Completely redesigned query system with three tiers: + - **Free**: Basic fields only (title, date, duration, participants, transcript_url, meeting_link) + - **Pro**: Adds full transcript (`sentences`), summary fields, speakers, audio_url + - **Business+**: Adds analytics, video_url, speaker stats, meeting metrics +- **Action items parsing**: Fixed parsing of `action_items` which Fireflies returns as newline-separated string, not array +- **Note body format**: Enhanced with Meeting Notes, Outline, Key Points sections from rich Fireflies data +- **Import status**: Added `PARTIAL` status for imports missing summary/analytics data + +### Fixed +- Missing `notes` and `bullet_gist` fields in data transform (were fetched but not passed through) +- Proper fallback: Uses `shorthand_bullet` when `outline` is empty (Fireflies stores outline content there) +- Summary readiness detection now checks `notes` field in addition to `overview` and `action_items` + +### Documentation +- Updated README with complete API access comparison table by subscription plan +- Documented all available Fireflies summary fields and their plan requirements + +## [0.2.3] - 2025-12-06 + +### Added +- **Meeting ingest utility**: New `yarn meeting:ingest ` script to manually fetch and import specific Fireflies meetings into Twenty +- **Plan-based field selection**: Added `FIREFLIES_PLAN` configuration to control which GraphQL fields are requested based on subscription level (free, pro, business, enterprise) +- **Main entry point**: New `src/index.ts` centralizing all exports for cleaner imports + +### Changed +- **Auth configuration**: Disabled authentication requirement for webhook route (`isAuthRequired: false`) to support serverless deployments +- **Signature verification fallback**: Webhook handler now supports signature in payload body as fallback when HTTP headers aren't forwarded to serverless functions (production doesn't work for Fireflies webhook) +- **Improved type safety**: Replaced `any` types with proper TypeScript types throughout codebase + +### Enhanced +- **Webhook debugging**: Added detailed debug output including param keys, header info, and signature comparison details +- **Test webhook script**: Includes signature in both header and payload, with diagnostic output for header forwarding status +- **Documentation**: Added README sections on current twenty headers forward limitations and utility scripts + ## [0.2.2] - 2025-11-04 ### Added diff --git a/packages/twenty-apps/community/fireflies/README.md b/packages/twenty-apps/community/fireflies/README.md index c1e8148e2c..91ef7c4a0e 100644 --- a/packages/twenty-apps/community/fireflies/README.md +++ b/packages/twenty-apps/community/fireflies/README.md @@ -2,6 +2,10 @@ Automatically captures meeting notes with AI-generated summaries and insights from Fireflies.ai into your Twenty CRM. +### Current Status +- Doesn't work with Fireflies webhook yet due to missing headers forwarding in twenty serverless func +- Meeting ingestion utility scripts are available for individual meeting insertion and historical meetings with filters with yarn meeting:all + ## Integration Overview **Fireflies webhook → Fireflies API → Twenty CRM with summary-focused insights** @@ -19,19 +23,54 @@ Automatically captures meeting notes with AI-generated summaries and insights fr ## API Access by Subscription Plan -Fireflies API access varies significantly by subscription tier: +Fireflies API access varies by subscription tier. This integration automatically adapts queries based on your plan and falls back gracefully if restrictions are encountered. + +### Plan Comparison | Feature | Free | Pro | Business | Enterprise | -|---------|------|-----|----------|------------| -| **API Rate Limit** | 50 requests/day | 50 requests/day | 60 requests/minute | 60 requests/minute | -| **Storage** | 800 mins/seat | 8,000 mins/seat | Unlimited | Unlimited | -| **AI Summaries** | Limited (20 credits) | Unlimited | Unlimited | Unlimited | -| **Video Upload** | 100MB max | 1.5GB max | 1.5GB max | 1.5GB max | -| **Advanced Features** | Basic transcription | AI apps, analytics | Team analytics, CI | Full API, SSO, compliance | +|---------|:----:|:---:|:--------:|:----------:| +| **API Rate Limit** | 50/day | 50/day | 60/min | 60/min | +| **Basic Data** (title, date, duration) | ✅ | ✅ | ✅ | ✅ | +| **Participants List** | ✅ | ✅ | ✅ | ✅ | +| **Transcript URL** | ✅ | ✅ | ✅ | ✅ | +| **Speakers** | ❌ | ✅ | ✅ | ✅ | +| **Summary** (overview, keywords) | ❌ | ✅ | ✅ | ✅ | +| **Audio URL** | ❌ | ✅ | ✅ | ✅ | +| **Action Items** | ❌ | ❌ | ✅ | ✅ | +| **Topics Discussed** | ❌ | ❌ | ✅ | ✅ | +| **Video URL** | ❌ | ❌ | ✅ | ✅ | +| **Sentiment Analytics** | ❌ | ❌ | ✅ | ✅ | +| **Meeting Attendees (detailed)** | ❌ | ❌ | ✅ | ✅ | -**Key Design Pattern:** Subscription-based API access uses **tiered rate limiting** rather than feature gating. Lower tiers get severely restricted throughput (50/day vs 60/minute = 1,700x difference), making production integrations effectively require Business+ plans. +### What You'll Get Per Plan -**Pro Plan Limitation:** Despite "unlimited" AI summaries, the 50 requests/day limit severely constrains production usage for meeting-heavy organizations. +**Free Plan:** +- Meeting title, date, duration +- Participant names/emails (basic) +- Link to transcript + +**Pro Plan:** +- Everything in Free, plus: +- Speaker identification +- AI summary (overview + keywords) +- Audio recording URL + +**Business Plan:** +- Everything in Pro, plus: +- Action items extraction +- Topics discussed +- Sentiment analysis (positive/negative/neutral %) +- Video recording URL +- Detailed meeting attendee info + +### Configuration + +Set your plan in `.env`: +```bash +FIREFLIES_PLAN=free # Options: free, pro, business, enterprise +``` + +**Rate Limiting:** Free/Pro plans are limited to 50 API calls/day. The integration uses conservative retry settings by default to stay within limits. ## What Gets Captured @@ -114,11 +153,6 @@ The `setup:fields` script adds 13 custom fields to store rich Fireflies data: | `firefliesMeetingId` | TEXT | Fireflies Meeting ID | Unique identifier from Fireflies | | `organizerEmail` | TEXT | Organizer Email | Email address of the meeting organizer | -Then re-sync: -```bash -npx twenty-cli app sync -``` - **Note:** Without custom fields, meetings will be created with just the title. The rich summary data will only be stored in Notes for 1-on-1 meetings. ## Configuration @@ -160,6 +194,29 @@ The integration uses **HMAC SHA-256 signature verification**: - Twenty verifies signature using your webhook secret - Invalid signatures are rejected immediately +### Current Platform Limitation (Headers) + +- Twenty serverless route triggers currently do **not forward HTTP headers** to functions. Fireflies signatures sent in headers are stripped, so header-based verification does not work in production. +- Workaround: the provided test script also includes the signature inside the payload; the handler falls back to that payload signature. Use this only for testing until header forwarding is supported. + +## Utilities for meeting insertion (workarounds) + +- Ingest a specific Fireflies meeting into Twenty: +`yarn meeting:ingest ` or `MEETING_ID=... yarn meeting:ingest` + +- Fetch all/historical Fireflies meetings into Twenty: +`yarn meeting:all [--from 2024-01-01] [--to 2024-02-01] [--organizer a@x.com] [--participant b@x.com] [--channel ] [--mine] [--dry-run]` + + - Filters (combine as needed): + - `--from` / `--to`: ISO or date string range filter + - `--organizer` / `--participant`: comma-separated emails + - `--channel`: Fireflies channel id + - `--mine`: only meetings for the current Fireflies user + - Controls: + - `--dry-run`: list and transform without writing to Twenty + - `--page-size`: pagination size (default 50) + - `--max-records`: stop after N transcripts (default 500) + ## Development ```bash @@ -247,10 +304,7 @@ Client expressed strong interest in the enterprise plan. ## Future Implementation Opportunities -### Past Meetings Retrieval -- **New trigger to retrieve past meetings from a contact** - Enable users to fetch historical meeting data from Fireflies for specific contacts, allowing retrospective capture and analysis of past interactions. - -Next iteration would enhance the **intelligence layer** to: +Next iterations would enhance the **intelligence layer** to: ### AI-Powered Insights - **Extract pain points, objections & buying signals** automatically from transcripts diff --git a/packages/twenty-apps/community/fireflies/application.config.ts b/packages/twenty-apps/community/fireflies/application.config.ts index d690541fcf..9736caf2c2 100644 --- a/packages/twenty-apps/community/fireflies/application.config.ts +++ b/packages/twenty-apps/community/fireflies/application.config.ts @@ -1,4 +1,4 @@ -import { type ApplicationConfig } from 'twenty-sdk/application'; +import { type ApplicationConfig } from 'twenty-sdk'; const config: ApplicationConfig = { universalIdentifier: 'a4df0c0f-c65e-44e5-8436-24814182d4ac', @@ -9,17 +9,25 @@ const config: ApplicationConfig = { FIREFLIES_WEBHOOK_SECRET: { universalIdentifier: 'f51f7646-be9f-4ba9-9b75-160dd288cd0c', description: 'Secret key for verifying Fireflies webhook signatures', - isSecret: true, + //isSecret: true, + value: '', }, FIREFLIES_API_KEY: { universalIdentifier: 'faa41f07-b28e-4500-b1c0-ce4b3d27924c', description: 'Fireflies GraphQL API key used to fetch meeting summaries', - isSecret: true, + //isSecret: true, + value: '', + }, + FIREFLIES_PLAN: { + universalIdentifier: '57dbb73c-aac5-4247-9fcc-a070bb669f16', + description: 'Fireflies plan: free, pro, business, enterprise', + value: 'free', }, TWENTY_API_KEY: { universalIdentifier: '02756551-5bf7-4fb2-8e08-1f622008d305', description: 'Twenty API key used when running scripts locally', - isSecret: true, + //isSecret: true, + value: '', }, SERVER_URL: { universalIdentifier: '9b3a5e8e-5973-4e6b-a059-2966075652aa', @@ -36,6 +44,11 @@ const config: ApplicationConfig = { description: 'Log level: silent, error, warn, info, debug (default: error)', value: 'error', }, + CAPTURE_LOGS: { + universalIdentifier: 'adbcc267-309d-49b2-af71-76f1299d863e', + description: 'Capture logs in webhook response for debugging (true/false)', + value: 'true', + }, FIREFLIES_SUMMARY_STRATEGY: { universalIdentifier: '562b43d9-cd47-4ec1-ae16-5cc7ebc9729b', description: 'Summary fetch strategy: immediate_only, immediate_with_retry, delayed_polling, or basic_only', diff --git a/packages/twenty-apps/community/fireflies/package.json b/packages/twenty-apps/community/fireflies/package.json index f17f487b0a..3a326042b6 100644 --- a/packages/twenty-apps/community/fireflies/package.json +++ b/packages/twenty-apps/community/fireflies/package.json @@ -1,6 +1,6 @@ { "name": "fireflies", - "version": "0.2.2", + "version": "0.3.0", "license": "MIT", "engines": { "node": "^24.5.0", @@ -11,12 +11,15 @@ "scripts": { "test": "jest", "setup:fields": "tsx scripts/add-meeting-fields.ts", - "test:webhook": "tsx scripts/test-webhook.ts" + "test:webhook": "tsx scripts/test-webhook.ts", + "meeting:ingest": "tsx scripts/ingest-meeting.ts", + "meeting:delete": "tsx scripts/delete-meeting.ts", + "meeting:all": "tsx scripts/fetch-all-meetings.ts" }, "dependencies": { "axios": "^1.13.1", - "dotenv": "^16.3.1", - "twenty-sdk": "0.0.3" + "dotenv": "^17.2.3", + "twenty-sdk": "0.1.3" }, "devDependencies": { "@types/jest": "^29.5.5", diff --git a/packages/twenty-apps/community/fireflies/project.json b/packages/twenty-apps/community/fireflies/project.json index 31c31e1d8b..62935a607c 100644 --- a/packages/twenty-apps/community/fireflies/project.json +++ b/packages/twenty-apps/community/fireflies/project.json @@ -1,7 +1,7 @@ { "name": "fireflies", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "packages/twenty-apps/fireflies/src", + "$schema": "../../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/twenty-apps/community/fireflies/src", "projectType": "application", "tags": [ "scope:apps" @@ -13,7 +13,7 @@ "{workspaceRoot}/coverage/{projectRoot}" ], "options": { - "jestConfig": "packages/twenty-apps/fireflies/jest.config.mjs", + "jestConfig": "packages/twenty-apps/community/fireflies/jest.config.mjs", "passWithNoTests": true }, "configurations": { @@ -36,7 +36,7 @@ ], "options": { "lintFilePatterns": [ - "packages/twenty-apps/fireflies/**/*.{ts,tsx,js,jsx}" + "packages/twenty-apps/community/fireflies/**/*.{ts,tsx,js,jsx}" ] }, "configurations": { diff --git a/packages/twenty-apps/community/fireflies/scripts/add-meeting-fields.ts b/packages/twenty-apps/community/fireflies/scripts/add-meeting-fields.ts index 637ff65d95..594c48901a 100644 --- a/packages/twenty-apps/community/fireflies/scripts/add-meeting-fields.ts +++ b/packages/twenty-apps/community/fireflies/scripts/add-meeting-fields.ts @@ -50,7 +50,11 @@ interface FieldDefinition { options?: FieldOption[]; } +// Meeting fields based on Fireflies GraphQL API transcript schema +// See: https://docs.fireflies.ai/graphql-api/query/transcript +// Note: Some fields require higher plans (Pro, Business, Enterprise) const MEETING_FIELDS: FieldDefinition[] = [ + // === Internal Twenty Relations === { type: 'RELATION', name: 'note', @@ -59,11 +63,21 @@ const MEETING_FIELDS: FieldDefinition[] = [ icon: 'IconNotes', isNullable: true, }, + + // === Basic Fields (All Plans) === + { + type: 'TEXT', + name: 'firefliesMeetingId', + label: 'Fireflies ID', + description: 'Unique transcript ID from Fireflies (maps to: id)', + icon: 'IconKey', + isNullable: true, + }, { type: 'DATE_TIME', name: 'meetingDate', label: 'Meeting Date', - description: 'Date and time when the meeting occurred', + description: 'When the meeting occurred (maps to: date)', icon: 'IconCalendar', isNullable: true, }, @@ -71,39 +85,107 @@ const MEETING_FIELDS: FieldDefinition[] = [ type: 'NUMBER', name: 'duration', label: 'Duration (minutes)', - description: 'Meeting duration in minutes', + description: 'Meeting duration in minutes (maps to: duration)', icon: 'IconClock', isNullable: true, }, { type: 'TEXT', - name: 'meetingType', - label: 'Meeting Type', - description: 'Type of meeting (e.g., Sales Call, Sprint Planning, 1:1)', - icon: 'IconTag', + name: 'organizerEmail', + label: 'Organizer Email', + description: 'Meeting organizer email (maps to: organizer_email)', + icon: 'IconMail', + isNullable: true, + }, + { + type: 'LINKS', + name: 'transcriptUrl', + label: 'Transcript URL', + description: 'Link to full transcript (maps to: transcript_url)', + icon: 'IconFileText', + isNullable: true, + }, + { + type: 'LINKS', + name: 'meetingLink', + label: 'Meeting Link', + description: 'Original meeting link (maps to: meeting_link)', + icon: 'IconLink', + isNullable: true, + }, + + // === Pro+ Fields (summary, speakers, audio_url, transcript) === + { + type: 'TEXT', + name: 'transcript', + label: 'Full Transcript', + description: 'Full meeting transcript with speaker names and timestamps [Pro+]', + icon: 'IconFileText', + isNullable: true, + }, + { + type: 'TEXT', + name: 'overview', + label: 'Overview', + description: 'AI-generated meeting summary (maps to: summary.overview) [Pro+]', + icon: 'IconFileDescription', + isNullable: true, + }, + { + type: 'TEXT', + name: 'notes', + label: 'AI Notes', + description: 'Detailed AI-generated meeting notes (maps to: summary.notes) [Pro+]', + icon: 'IconNotes', isNullable: true, }, { type: 'TEXT', name: 'keywords', label: 'Keywords', - description: 'Key topics and themes discussed (comma-separated)', + description: 'Key topics extracted (maps to: summary.keywords) [Pro+]', icon: 'IconTags', isNullable: true, }, + { + type: 'LINKS', + name: 'audioUrl', + label: 'Audio URL', + description: 'Link to audio recording (maps to: audio_url) [Pro+]', + icon: 'IconHeadphones', + isNullable: true, + }, + + // === Business+ Fields (analytics, video_url, full summary) === + { + type: 'TEXT', + name: 'meetingType', + label: 'Meeting Type', + description: 'AI-detected meeting type (maps to: summary.meeting_type) [Business+]', + icon: 'IconTag', + isNullable: true, + }, + { + type: 'TEXT', + name: 'topics', + label: 'Topics Discussed', + description: 'Topics covered in meeting (maps to: summary.topics_discussed) [Business+]', + icon: 'IconListDetails', + isNullable: true, + }, { type: 'NUMBER', - name: 'sentimentScore', - label: 'Sentiment Score', - description: 'Overall meeting sentiment (0-1 scale, where 1 is most positive)', - icon: 'IconMoodSmile', + name: 'actionItemsCount', + label: 'Action Items', + description: 'Number of action items (count of: summary.action_items) [Business+]', + icon: 'IconCheckbox', isNullable: true, }, { type: 'NUMBER', name: 'positivePercent', label: 'Positive %', - description: 'Percentage of positive sentiment in conversation', + description: 'Positive sentiment % (maps to: analytics.sentiments.positive_pct) [Business+]', icon: 'IconThumbUp', isNullable: true, }, @@ -111,69 +193,48 @@ const MEETING_FIELDS: FieldDefinition[] = [ type: 'NUMBER', name: 'negativePercent', label: 'Negative %', - description: 'Percentage of negative sentiment in conversation', + description: 'Negative sentiment % (maps to: analytics.sentiments.negative_pct) [Business+]', icon: 'IconThumbDown', isNullable: true, }, { type: 'NUMBER', - name: 'actionItemsCount', - label: 'Action Items', - description: 'Number of action items identified', - icon: 'IconCheckbox', + name: 'neutralPercent', + label: 'Neutral %', + description: 'Neutral sentiment % (maps to: analytics.sentiments.neutral_pct) [Business+]', + icon: 'IconMoodNeutral', isNullable: true, }, { type: 'LINKS', - name: 'transcriptUrl', - label: 'Transcript URL', - description: 'Link to full transcript in Fireflies', - icon: 'IconFileText', - isNullable: true, - }, - { - type: 'LINKS', - name: 'recordingUrl', - label: 'Recording URL', - description: 'Link to video/audio recording in Fireflies', + name: 'videoUrl', + label: 'Video URL', + description: 'Link to video recording (maps to: video_url) [Business+]', icon: 'IconVideo', isNullable: true, }, - { - type: 'TEXT', - name: 'firefliesMeetingId', - label: 'Fireflies Meeting ID', - description: 'Unique identifier from Fireflies', - icon: 'IconKey', - isNullable: true, - }, - { - type: 'TEXT', - name: 'organizerEmail', - label: 'Organizer Email', - description: 'Email address of the meeting organizer', - icon: 'IconMail', - isNullable: true, - }, + + // === Import Tracking Fields (Internal) === { type: 'SELECT', name: 'importStatus', label: 'Import Status', - description: 'Status of the meeting import from Fireflies', + description: 'Status of the Fireflies import', icon: 'IconCheck', isNullable: true, options: [ { value: 'SUCCESS', label: 'Success', position: 0, color: 'green' }, - { value: 'FAILED', label: 'Failed', position: 1, color: 'red' }, - { value: 'PENDING', label: 'Pending', position: 2, color: 'yellow' }, - { value: 'RETRYING', label: 'Retrying', position: 3, color: 'orange' }, + { value: 'PARTIAL', label: 'Partial', position: 1, color: 'blue' }, + { value: 'FAILED', label: 'Failed', position: 2, color: 'red' }, + { value: 'PENDING', label: 'Pending', position: 3, color: 'yellow' }, + { value: 'RETRYING', label: 'Retrying', position: 4, color: 'orange' }, ], }, { type: 'TEXT', name: 'importError', label: 'Import Error', - description: 'Error message if meeting import failed', + description: 'Error message if import failed', icon: 'IconAlertTriangle', isNullable: true, }, @@ -181,7 +242,7 @@ const MEETING_FIELDS: FieldDefinition[] = [ type: 'DATE_TIME', name: 'lastImportAttempt', label: 'Last Import Attempt', - description: 'Date and time of the last import attempt', + description: 'When import was last attempted', icon: 'IconClock', isNullable: true, }, @@ -189,7 +250,7 @@ const MEETING_FIELDS: FieldDefinition[] = [ type: 'NUMBER', name: 'importAttempts', label: 'Import Attempts', - description: 'Number of times import has been attempted', + description: 'Number of import attempts', icon: 'IconRepeat', isNullable: true, }, @@ -414,13 +475,9 @@ const main = async () => { } if (createdCount === 0 && skippedCount === MEETING_FIELDS.length) { - console.log('\n✨ All fields already exist. Nothing to do!'); + console.log('\n✨ All fields already exist. Nothing to do!\n'); } else if (createdCount > 0) { - console.log('\n✨ Custom fields added successfully!'); - console.log('\n📝 Next steps:'); - console.log(' 1. Re-sync your app: npx twenty-cli app sync'); - console.log(' 2. Update the createMeetingRecord function to use these fields'); - console.log(' 3. Test the integration with a real meeting'); + console.log('\n✨ Custom fields added successfully!\n'); } } catch (error) { diff --git a/packages/twenty-apps/community/fireflies/scripts/debug-meeting.ts b/packages/twenty-apps/community/fireflies/scripts/debug-meeting.ts new file mode 100644 index 0000000000..0814e17d6e --- /dev/null +++ b/packages/twenty-apps/community/fireflies/scripts/debug-meeting.ts @@ -0,0 +1,81 @@ +/* eslint-disable no-console */ +import * as dotenv from 'dotenv'; +import * as path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +dotenv.config({ path: path.join(__dirname, '../.env') }); + +const FIREFLIES_API_KEY = process.env.FIREFLIES_API_KEY; +const meetingId = process.argv[2] || '01KBMR1ZYQ34YP8D2KB4B16QPH'; + +const main = async (): Promise => { + if (!FIREFLIES_API_KEY) { + console.error('❌ FIREFLIES_API_KEY is required'); + process.exit(1); + } + + const query = ` + query GetTranscript($transcriptId: String!) { + transcript(id: $transcriptId) { + id + title + summary { + overview + notes + gist + bullet_gist + short_summary + short_overview + outline + shorthand_bullet + action_items + keywords + topics_discussed + meeting_type + transcript_chapters + } + } + } + `; + + const response = await fetch('https://api.fireflies.ai/graphql', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${FIREFLIES_API_KEY}`, + }, + body: JSON.stringify({ query, variables: { transcriptId: meetingId } }), + }); + + if (!response.ok) { + const errorText = await response.text(); + console.error(`❌ API request failed with status ${response.status}`); + console.error(errorText); + process.exit(1); + } + + const json = await response.json(); + console.log('=== Fireflies API Response ===\n'); + console.log(JSON.stringify(json, null, 2)); + + if (json.data?.transcript?.summary) { + const s = json.data.transcript.summary; + console.log('\n=== Summary Fields Status ==='); + console.log('overview:', s.overview ? `✓ (${s.overview.length} chars)` : '✗ empty'); + console.log('notes:', s.notes ? `✓ (${s.notes.length} chars)` : '✗ empty'); + console.log('gist:', s.gist ? `✓ (${s.gist.length} chars)` : '✗ empty'); + console.log('bullet_gist:', s.bullet_gist ? `✓ (${s.bullet_gist.length} chars)` : '✗ empty'); + console.log('outline:', s.outline ? `✓ (${s.outline.length} chars)` : '✗ empty'); + console.log('action_items:', s.action_items?.length || 0, 'items'); + console.log('topics_discussed:', s.topics_discussed?.length || 0, 'topics'); + console.log('keywords:', s.keywords?.length || 0, 'keywords'); + } +}; + +main().catch((error) => { + console.error('❌ Failed to fetch meeting'); + console.error(error instanceof Error ? error.message : String(error)); + process.exit(1); +}); diff --git a/packages/twenty-apps/community/fireflies/scripts/delete-meeting.ts b/packages/twenty-apps/community/fireflies/scripts/delete-meeting.ts new file mode 100644 index 0000000000..65ef786d3e --- /dev/null +++ b/packages/twenty-apps/community/fireflies/scripts/delete-meeting.ts @@ -0,0 +1,59 @@ +/* eslint-disable no-console */ +import * as dotenv from 'dotenv'; +import * as path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +dotenv.config({ path: path.join(__dirname, '../.env') }); + +const SERVER_URL = process.env.SERVER_URL || 'http://localhost:3000'; +const API_KEY = process.env.TWENTY_API_KEY; +const meetingId = process.argv[2]; + +const main = async (): Promise => { + if (!API_KEY) { + console.error('❌ TWENTY_API_KEY is required'); + process.exit(1); + } + + if (!meetingId) { + console.error('Usage: yarn delete:meeting '); + process.exit(1); + } + + const response = await fetch(`${SERVER_URL}/graphql`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${API_KEY}`, + }, + body: JSON.stringify({ + query: `mutation DeleteMeeting($id: UUID!) { deleteMeeting(id: $id) { id } }`, + variables: { id: meetingId }, + }), + }); + + if (!response.ok) { + const errorText = await response.text(); + console.error(`❌ Delete failed (status ${response.status})`); + console.error(errorText); + process.exit(1); + } + + const result = await response.json(); + const deletedId = result.data?.deleteMeeting?.id; + if (result.errors || !deletedId) { + const message = result.errors?.[0]?.message || 'deleteMeeting returned null'; + console.error('❌ Error:', message); + process.exit(1); + } + + console.log('✅ Deleted meeting:', deletedId); +}; + +main().catch((error) => { + console.error('❌ Failed to delete meeting'); + console.error(error instanceof Error ? error.message : String(error)); + process.exit(1); +}); diff --git a/packages/twenty-apps/community/fireflies/scripts/fetch-all-meetings.ts b/packages/twenty-apps/community/fireflies/scripts/fetch-all-meetings.ts new file mode 100644 index 0000000000..082d764629 --- /dev/null +++ b/packages/twenty-apps/community/fireflies/scripts/fetch-all-meetings.ts @@ -0,0 +1,222 @@ +/* eslint-disable no-console */ +/** + * Fetch historical Fireflies meetings and insert into Twenty. + * + * Usage: + * yarn meeting:all [--from 2024-01-01] [--to 2024-02-01] [--organizer alice@x.com] [--participant bob@x.com] [--channel ] [--mine] [--dry-run] [--page-size 50] [--max-records 200] + * + * Required env: + * FIREFLIES_API_KEY + * TWENTY_API_KEY + * + * Optional env: + * SERVER_URL (defaults to http://localhost:3000) + * FIREFLIES_PLAN (free|pro|business|enterprise) + * AUTO_CREATE_CONTACTS (true|false) + * FIREFLIES_* retry settings (see README) + */ + +import * as dotenv from 'dotenv'; +import { existsSync } from 'fs'; +import { dirname, join } from 'path'; +import { fileURLToPath } from 'url'; + +import { FirefliesApiClient } from '../src/fireflies-api-client'; +import { type HistoricalImportFilters, HistoricalImporter } from '../src/historical-importer'; +import { createLogger } from '../src/logger'; +import { TwentyCrmService } from '../src/twenty-crm-service'; +import { + getApiUrl, + getFirefliesPlan, + getSummaryFetchConfig, + shouldAutoCreateContacts, +} from '../src/utils'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const envPath = join(__dirname, '..', '.env'); +if (existsSync(envPath)) { + dotenv.config({ path: envPath }); +} + +const logger = createLogger('cli:meeting:all'); + +type CliArgs = { + from?: string; + to?: string; + organizer?: string[]; + participant?: string[]; + channel?: string; + host?: string; + mine?: boolean; + dryRun?: boolean; + pageSize?: number; + maxRecords?: number; + limit?: number; +}; + +const parseArgs = (argv: string[]): CliArgs => { + const args: CliArgs = {}; + + const parseNumberArg = (value?: string): number | undefined => { + if (!value) return undefined; + const parsed = Number.parseInt(value, 10); + return Number.isNaN(parsed) ? undefined : parsed; + }; + + for (let i = 0; i < argv.length; i += 1) { + const current = argv[i]; + const next = argv[i + 1]; + switch (current) { + case '--from': + args.from = next; + i += 1; + break; + case '--to': + args.to = next; + i += 1; + break; + case '--organizer': + args.organizer = next ? next.split(',') : []; + i += 1; + break; + case '--participant': + args.participant = next ? next.split(',') : []; + i += 1; + break; + case '--channel': + args.channel = next; + i += 1; + break; + case '--host': + args.host = next; + i += 1; + break; + case '--mine': + args.mine = true; + break; + case '--dry-run': + args.dryRun = true; + break; + case '--page-size': + args.pageSize = parseNumberArg(next); + i += 1; + break; + case '--max-records': + args.maxRecords = parseNumberArg(next); + i += 1; + break; + case '--limit': + args.limit = parseNumberArg(next); + i += 1; + break; + default: + break; + } + } + + return args; +}; + +const parseDate = (value?: string): number | undefined => { + if (!value) { + return undefined; + } + const parsed = Date.parse(value); + return Number.isNaN(parsed) ? undefined : parsed; +}; + +const main = async (): Promise => { + const args = parseArgs(process.argv.slice(2)); + + const firefliesApiKey = process.env.FIREFLIES_API_KEY || ''; + const twentyApiKey = process.env.TWENTY_API_KEY || ''; + + if (!firefliesApiKey) { + console.error('❌ FIREFLIES_API_KEY is required'); + process.exit(1); + } + + if (!twentyApiKey) { + console.error('❌ TWENTY_API_KEY is required'); + process.exit(1); + } + + const fromDate = parseDate(args.from); + const toDate = parseDate(args.to); + + const filters: HistoricalImportFilters = { + fromDate, + toDate, + organizers: args.organizer, + participants: args.participant, + channelId: args.channel, + hostEmail: args.host, + mine: args.mine, + limit: args.limit, + pageSize: args.pageSize, + maxRecords: args.maxRecords, + }; + + const summaryConfig = getSummaryFetchConfig(); + const plan = getFirefliesPlan(); + const autoCreateContacts = shouldAutoCreateContacts(); + + logger.info( + `Starting historical import (dryRun=${Boolean(args.dryRun)}, plan=${plan}, pageSize=${filters.pageSize ?? 50})`, + ); + + const firefliesClient = new FirefliesApiClient(firefliesApiKey); + const twentyService = new TwentyCrmService(twentyApiKey, getApiUrl()); + const importer = new HistoricalImporter(firefliesClient, twentyService); + + const result = await importer.run(filters, { + dryRun: args.dryRun, + autoCreateContacts, + summaryConfig, + plan, + }); + + console.log('✅ Historical import summary:'); + const summary = { + dryRun: result.dryRun, + totalListed: result.totalListed, + imported: result.imported, + skippedExisting: result.skippedExisting, + summaryPending: result.summaryPending, + failed: result.failed, + }; + console.log(JSON.stringify(summary, null, 2)); + + if (result.statuses.length > 0) { + console.log('Status by meeting:'); + console.table( + result.statuses.map((s) => ({ + meetingId: s.meetingId, + title: s.title ?? '', + status: s.status, + reason: s.reason ?? '', + })), + ); + } + + if (result.failed.length > 0) { + process.exitCode = 1; + } +}; + +main().catch((error) => { + console.error('❌ Failed to import historical meetings'); + if (error instanceof Error) { + console.error(error.message); + if (error.stack) { + console.error(error.stack); + } + } else { + console.error(String(error)); + } + process.exit(1); +}); + + diff --git a/packages/twenty-apps/community/fireflies/scripts/ingest-meeting.ts b/packages/twenty-apps/community/fireflies/scripts/ingest-meeting.ts new file mode 100644 index 0000000000..a6caff8bd6 --- /dev/null +++ b/packages/twenty-apps/community/fireflies/scripts/ingest-meeting.ts @@ -0,0 +1,93 @@ +/* eslint-disable no-console */ +/** + * Fetch a Fireflies meeting by ID and insert it into Twenty using the same path + * as the webhook handler. + * + * Usage: + * yarn meeting:ingest + * Or + * MEETING_ID=... yarn meeting:ingest + * + * Required env: + * FIREFLIES_API_KEY + * FIREFLIES_WEBHOOK_SECRET + * TWENTY_API_KEY + * + * Optional env: + * SERVER_URL (defaults to http://localhost:3000) + * FIREFLIES_PLAN (free|pro|business|enterprise) + */ + +import { createHmac } from 'crypto'; +import * as dotenv from 'dotenv'; +import { existsSync } from 'fs'; +import { dirname, join } from 'path'; +import { fileURLToPath } from 'url'; + +import { WebhookHandler } from '../src/webhook-handler'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const envPath = join(__dirname, '..', '.env'); +if (existsSync(envPath)) { + dotenv.config({ path: envPath }); +} + +const args = process.argv.slice(2); +const meetingId = args[0] || process.env.MEETING_ID; + +if (!meetingId) { + console.error('❌ meetingId is required (arg or MEETING_ID env)'); + process.exit(1); +} + +const firefliesApiKey = process.env.FIREFLIES_API_KEY || ''; +const twentyApiKey = process.env.TWENTY_API_KEY || ''; +const webhookSecret = process.env.FIREFLIES_WEBHOOK_SECRET || ''; + +if (!firefliesApiKey) { + console.error('❌ FIREFLIES_API_KEY is required'); + process.exit(1); +} +if (!twentyApiKey) { + console.error('❌ TWENTY_API_KEY is required'); + process.exit(1); +} +if (!webhookSecret) { + console.error('❌ FIREFLIES_WEBHOOK_SECRET is required to generate signature'); + process.exit(1); +} + +const payload = { + meetingId, + eventType: 'Transcription completed', +}; + +const body = JSON.stringify(payload); +const signature = `sha256=${createHmac('sha256', webhookSecret) + .update(body, 'utf8') + .digest('hex')}`; + +const main = async (): Promise => { + console.log(`🚀 Ingesting meeting ${meetingId} via webhook handler`); + const handler = new WebhookHandler(); + const result = await handler.handle(payload, { + 'x-hub-signature': signature, + body, + }); + + console.log('✅ Result:'); + console.log(JSON.stringify(result, null, 2)); + + if (result.errors && result.errors.length > 0) { + process.exitCode = 1; + } +}; + +main().catch((error) => { + console.error('❌ Failed to ingest meeting'); + console.error(error instanceof Error ? error.message : String(error)); + process.exit(1); +}); + diff --git a/packages/twenty-apps/community/fireflies/scripts/test-webhook.ts b/packages/twenty-apps/community/fireflies/scripts/test-webhook.ts index 0f4b3a962b..df4a97b4e1 100644 --- a/packages/twenty-apps/community/fireflies/scripts/test-webhook.ts +++ b/packages/twenty-apps/community/fireflies/scripts/test-webhook.ts @@ -40,11 +40,13 @@ const FIREFLIES_WEBHOOK_SECRET = process.env.FIREFLIES_WEBHOOK_SECRET || 'test_s const _FIREFLIES_API_KEY = process.env.FIREFLIES_API_KEY || 'test_api_key'; // Test meeting data (simulating Fireflies API response) -const TEST_MEETING_ID = 'test-meeting-local-' + Date.now(); +const TEST_MEETING_ID = process.env.MEETING_ID || 'test-meeting-local-' + Date.now(); +const CLIENT_REFERENCE_ID = process.env.CLIENT_REFERENCE_ID; + const TEST_WEBHOOK_PAYLOAD = { meetingId: TEST_MEETING_ID, eventType: 'Transcription completed', - clientReferenceId: 'test-client-ref', + ...(CLIENT_REFERENCE_ID ? { clientReferenceId: CLIENT_REFERENCE_ID } : {}), }; // Mock Fireflies GraphQL API response @@ -119,11 +121,17 @@ const main = async () => { } // Prepare webhook payload - const body = JSON.stringify(TEST_WEBHOOK_PAYLOAD); - const signature = generateHMACSignature(body, FIREFLIES_WEBHOOK_SECRET); + const unsignedBody = JSON.stringify(TEST_WEBHOOK_PAYLOAD); + const signature = generateHMACSignature(unsignedBody, FIREFLIES_WEBHOOK_SECRET); + const payloadWithSignature = { + ...TEST_WEBHOOK_PAYLOAD, + 'x-hub-signature': signature, + }; + const body = JSON.stringify(payloadWithSignature); console.log('📤 Sending webhook payload:'); - console.log(JSON.stringify(TEST_WEBHOOK_PAYLOAD, null, 2)); + console.log(JSON.stringify(payloadWithSignature, null, 2)); + console.log('\nℹ️ Signature is sent both as header (preferred) and in payload as fallback (headers are not passed to serverless functions)\n'); console.log(`\n🔐 HMAC Signature: ${signature}\n`); // Check if server is reachable @@ -178,6 +186,31 @@ const main = async () => { console.log('📥 Response Body:'); console.log(JSON.stringify(responseData, null, 2)); + // Report whether the server appears to have received the header signature + const debugMessages = Array.isArray((responseData as any)?.debug) + ? ((responseData as any).debug as string[]) + : []; + const headerMissing = + debugMessages.some((msg) => msg.includes('headerKeys=none')) || + debugMessages.some((msg) => msg.includes('providedSignature=undefined')); + const signatureErrors = + Array.isArray((responseData as any)?.errors) && + ((responseData as any).errors as unknown[]).some( + (err) => typeof err === 'string' && err.toLowerCase().includes('signature'), + ); + + if (headerMissing) { + console.log( + '\n⚠️ Server did not report any received headers; it may be using payload fallback for signature verification.', + ); + } else { + console.log('\n✅ Server reported headers present (header-based signature should be used).'); + } + + if (signatureErrors) { + console.log('⚠️ Signature was rejected by the server (check webhook secret / payload).'); + } + if (response.ok) { console.log('\n✅ Webhook test completed successfully!'); console.log('\n📋 Next steps:'); diff --git a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/fireflies-api-client.ts b/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/fireflies-api-client.ts deleted file mode 100644 index b219c2b0d5..0000000000 --- a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/fireflies-api-client.ts +++ /dev/null @@ -1,426 +0,0 @@ -import { createLogger } from './logger'; -import type { FirefliesMeetingData, FirefliesParticipant, SummaryFetchConfig } from './types'; - -const logger = createLogger('fireflies-api'); - -export class FirefliesApiClient { - private apiKey: string; - - constructor(apiKey: string) { - if (!apiKey) { - logger.critical('FIREFLIES_API_KEY is required but not provided - this is a critical configuration error'); - throw new Error('FIREFLIES_API_KEY is required'); - } - this.apiKey = apiKey; - } - - async fetchMeetingData( - meetingId: string, - options?: { timeout?: number } - ): Promise { - const query = ` - query GetTranscript($transcriptId: String!) { - transcript(id: $transcriptId) { - id - title - date - duration - participants - organizer_email - meeting_attendees { - displayName - email - phoneNumber - name - location - } - meeting_attendance { - name - join_time - leave_time - } - speakers { - name - } - summary { - action_items - overview - } - transcript_url - } - } - `; - - const controller = new AbortController(); - const timeoutId = options?.timeout - ? setTimeout(() => controller.abort(), options.timeout) - : null; - - try { - const response = await fetch('https://api.fireflies.ai/graphql', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${this.apiKey}`, - }, - body: JSON.stringify({ - query, - variables: { transcriptId: meetingId }, - }), - signal: controller.signal, - }); - - if (timeoutId) clearTimeout(timeoutId); - - if (!response.ok) { - let errorDetails = `Fireflies API request failed with status ${response.status}`; - try { - const errorBody = await response.text(); - if (errorBody) { - errorDetails += `: ${errorBody}`; - } - } catch { - // Ignore if we can't read the response body - } - throw new Error(errorDetails); - } - - const json = await response.json() as { - data?: { transcript?: any }; - errors?: Array<{ message?: string }>; - }; - - if (json.errors && json.errors.length > 0) { - throw new Error(`Fireflies API error: ${json.errors[0]?.message || 'Unknown error'}`); - } - - const transcript = json.data?.transcript; - if (!transcript) { - throw new Error('Invalid response from Fireflies API: missing transcript data'); - } - - return this.transformMeetingData(transcript, meetingId); - } catch (error) { - if (timeoutId) clearTimeout(timeoutId); - throw error; - } - } - - async fetchMeetingDataWithRetry( - meetingId: string, - config: SummaryFetchConfig - ): Promise<{ data: FirefliesMeetingData; summaryReady: boolean }> { - // immediate_only: single attempt, no retries - if (config.strategy === 'immediate_only') { - logger.debug(`fetching meeting ${meetingId} (strategy: immediate_only)`); - const meetingData = await this.fetchMeetingData(meetingId, { timeout: 10000 }); - const ready = this.isSummaryReady(meetingData); - logger.debug(`summary ready: ${ready}`); - return { data: meetingData, summaryReady: ready }; - } - - // immediate_with_retry: retry with exponential backoff - logger.debug(`fetching meeting ${meetingId} (strategy: immediate_with_retry, maxAttempts: ${config.retryAttempts})`); - - for (let attempt = 1; attempt <= config.retryAttempts; attempt++) { - try { - const meetingData = await this.fetchMeetingData(meetingId, { timeout: 10000 }); - const ready = this.isSummaryReady(meetingData); - - logger.debug(`attempt ${attempt}/${config.retryAttempts}: summary ready=${ready}`); - - if (ready) { - return { data: meetingData, summaryReady: true }; - } - - if (attempt < config.retryAttempts) { - const delayMs = config.retryDelay * attempt; - logger.debug(`summary not ready, waiting ${delayMs}ms before retry ${attempt + 1}`); - await new Promise(resolve => setTimeout(resolve, delayMs)); - } else { - logger.debug(`max retries reached, returning partial data`); - return { data: meetingData, summaryReady: false }; - } - } catch (error) { - const errorMsg = error instanceof Error ? error.message : String(error); - logger.error(`attempt ${attempt}/${config.retryAttempts} failed: ${errorMsg}`); - - if (attempt === config.retryAttempts) { - throw error; - } - - const delayMs = config.retryDelay * attempt; - logger.debug(`retrying in ${delayMs}ms...`); - await new Promise(resolve => setTimeout(resolve, delayMs)); - } - } - - throw new Error('Failed to fetch meeting data after retries'); - } - - private isSummaryReady(meetingData: FirefliesMeetingData): boolean { - return ( - (meetingData.summary?.action_items?.length > 0) || - (meetingData.summary?.overview?.length > 0) || - meetingData.summary_status === 'completed' - ); - } - - private extractAllParticipants(transcript: any): FirefliesParticipant[] { - const participantsWithEmails: FirefliesParticipant[] = []; - const participantsNameOnly: FirefliesParticipant[] = []; - - logger.debug('=== PARTICIPANT EXTRACTION DEBUG ==='); - logger.debug('participants field:', JSON.stringify(transcript.participants)); - logger.debug('meeting_attendees field:', JSON.stringify(transcript.meeting_attendees)); - logger.debug('speakers field:', transcript.speakers?.map((s: any) => s.name)); - logger.debug('meeting_attendance field:', transcript.meeting_attendance?.map((a: any) => a.name)); - logger.debug('organizer_email:', transcript.organizer_email); - - // Helper function to check if a string is an email - const isEmail = (str: string): boolean => { - return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(str.trim()); - }; - - // Helper function to check if already exists - const isDuplicate = (name: string, email: string): boolean => { - const nameLower = name.toLowerCase().trim(); - const emailLower = email.toLowerCase().trim(); - - return participantsWithEmails.some(p => - p.name.toLowerCase().trim() === nameLower || - (email && p.email.toLowerCase() === emailLower) - ) || participantsNameOnly.some(p => - p.name.toLowerCase().trim() === nameLower - ); - }; - - // 1. Extract from legacy participants field (with emails) - if (transcript.participants && Array.isArray(transcript.participants)) { - transcript.participants.forEach((participant: string) => { - // Handle comma-separated emails or names - const parts = participant.split(',').map(p => p.trim()); - - parts.forEach(part => { - const emailMatch = part.match(/<([^>]+)>/); - const email = emailMatch ? emailMatch[1] : ''; - // Extract name properly: if there's an email in angle brackets, get the part before it - const name = emailMatch - ? part.substring(0, part.indexOf('<')).trim() - : part.trim(); - - // Skip if the "name" is actually an email address - if (isEmail(name)) { - logger.debug(`Skipping participant with email as name: "${name}"`); - return; - } - - // Skip if empty name - if (!name) { - return; - } - - // Skip duplicates - if (isDuplicate(name, email)) { - logger.debug(`Skipping duplicate participant: "${name}" <${email}>`); - return; - } - - if (name && email) { - participantsWithEmails.push({ name, email }); - } else if (name) { - participantsNameOnly.push({ name, email: '' }); - } - }); - }); - } - - // 2. Extract from meeting_attendees field (structured) - if (transcript.meeting_attendees && Array.isArray(transcript.meeting_attendees)) { - transcript.meeting_attendees.forEach((attendee: any) => { - const name = attendee.displayName || attendee.name || ''; - const email = attendee.email || ''; - - // Skip if name is actually an email - if (isEmail(name)) { - logger.debug(`Skipping attendee with email as name: "${name}"`); - return; - } - - if (name && !isDuplicate(name, email)) { - if (email) { - participantsWithEmails.push({ name, email }); - } else { - participantsNameOnly.push({ name, email: '' }); - } - } - }); - } - - // 3. Extract from speakers field (name only) - if (transcript.speakers && Array.isArray(transcript.speakers)) { - transcript.speakers.forEach((speaker: any) => { - const name = speaker.name || ''; - - // Skip if name is actually an email - if (isEmail(name)) { - logger.debug(`Skipping speaker with email as name: "${name}"`); - return; - } - - if (name && !isDuplicate(name, '')) { - participantsNameOnly.push({ name, email: '' }); - } - }); - } - - // 4. Extract from meeting_attendance field (name only) - if (transcript.meeting_attendance && Array.isArray(transcript.meeting_attendance)) { - transcript.meeting_attendance.forEach((attendance: any) => { - const name = attendance.name || ''; - - // Skip if name is actually an email or contains comma-separated emails - if (isEmail(name) || name.includes(',')) { - logger.debug(`Skipping attendance with email/list as name: "${name}"`); - return; - } - - if (name && !isDuplicate(name, '')) { - participantsNameOnly.push({ name, email: '' }); - } - }); - } - - // 5. Add organizer email if available and not already included - const organizerEmail = transcript.organizer_email; - if (organizerEmail) { - // Check if organizer email is already in the participants - const existsWithEmail = participantsWithEmails.some(p => - p.email.toLowerCase() === organizerEmail.toLowerCase() - ); - - if (!existsWithEmail) { - // Try to find organizer name from speakers/attendance and match with email - let organizerName = ''; - - // Extract username from organizer email for matching - const emailUsername = organizerEmail.split('@')[0].toLowerCase(); - const emailNameVariations = [emailUsername]; - - // Add common name variations based on email username - if (emailUsername === 'alex') { - emailNameVariations.push('alexander', 'alexandre', 'alex'); - } - - // Look for organizer in speakers by matching email username to speaker names - if (transcript.speakers && Array.isArray(transcript.speakers)) { - const potentialOrganizerSpeaker = transcript.speakers.find((speaker: any) => { - const name = (speaker.name || '').toLowerCase(); - return emailNameVariations.some(variation => - name.includes(variation) || variation.includes(name) - ); - }); - if (potentialOrganizerSpeaker) { - organizerName = potentialOrganizerSpeaker.name; - } - } - - // Look for organizer in attendance - if (!organizerName && transcript.meeting_attendance && Array.isArray(transcript.meeting_attendance)) { - const potentialOrganizerAttendance = transcript.meeting_attendance.find((attendance: any) => { - const name = (attendance.name || '').toLowerCase(); - return emailNameVariations.some(variation => - name.includes(variation) || variation.includes(name) - ); - }); - if (potentialOrganizerAttendance) { - organizerName = potentialOrganizerAttendance.name; - } - } - - // If we found a name match, add as participant with email - if (organizerName) { - participantsWithEmails.push({ name: organizerName, email: organizerEmail }); - - // Remove from name-only participants to avoid duplicates - const nameIndex = participantsNameOnly.findIndex(p => - p.name.toLowerCase().includes(organizerName.toLowerCase()) || - organizerName.toLowerCase().includes(p.name.toLowerCase()) - ); - if (nameIndex !== -1) { - participantsNameOnly.splice(nameIndex, 1); - } - } else { - // If no name found, add with generic organizer name - participantsWithEmails.push({ name: 'Meeting Organizer', email: organizerEmail }); - } - } - } - - // Return participants with emails first, then name-only participants - const allParticipants = [...participantsWithEmails, ...participantsNameOnly]; - - logger.debug('=== EXTRACTED PARTICIPANTS ==='); - logger.debug('With emails:', participantsWithEmails.length, JSON.stringify(participantsWithEmails)); - logger.debug('Name only:', participantsNameOnly.length, JSON.stringify(participantsNameOnly)); - logger.debug('Total:', allParticipants.length); - - return allParticipants; - } - - private transformMeetingData(transcript: any, meetingId: string): FirefliesMeetingData { - // Convert date to ISO string - handle both timestamp and ISO string formats - let dateString: string; - if (transcript.date) { - if (typeof transcript.date === 'number') { - // Unix timestamp in milliseconds - dateString = new Date(transcript.date).toISOString(); - } else if (typeof transcript.date === 'string') { - // Could be ISO string or timestamp string - const parsed = Number(transcript.date); - if (!isNaN(parsed)) { - // It's a numeric string (timestamp) - dateString = new Date(parsed).toISOString(); - } else { - // It's already an ISO string - dateString = transcript.date; - } - } else { - dateString = new Date().toISOString(); - } - } else { - dateString = new Date().toISOString(); - } - - return { - id: transcript.id || meetingId, - title: transcript.title || 'Untitled Meeting', - date: dateString, - duration: transcript.duration || 0, - participants: this.extractAllParticipants(transcript), - organizer_email: transcript.organizer_email, - summary: { - action_items: Array.isArray(transcript.summary?.action_items) - ? transcript.summary.action_items - : (typeof transcript.summary?.action_items === 'string' - ? [transcript.summary.action_items] - : []), - overview: transcript.summary?.overview || '', - keywords: transcript.summary?.keywords, - topics_discussed: transcript.summary?.topics_discussed, - meeting_type: transcript.summary?.meeting_type, - }, - analytics: transcript.sentiments ? { - sentiments: { - positive_pct: transcript.sentiments.positive_pct || 0, - negative_pct: transcript.sentiments.negative_pct || 0, - neutral_pct: transcript.sentiments.neutral_pct || 0, - } - } : undefined, - transcript_url: transcript.transcript_url || `https://app.fireflies.ai/view/${meetingId}`, - recording_url: transcript.video_url || undefined, - summary_status: transcript.summary_status, - }; - } -} - diff --git a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/formatters.ts b/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/formatters.ts deleted file mode 100644 index 6238228b2a..0000000000 --- a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/formatters.ts +++ /dev/null @@ -1,227 +0,0 @@ -import type { FirefliesMeetingData, MeetingCreateInput } from './types'; - -export class MeetingFormatter { - static formatNoteBody(meetingData: FirefliesMeetingData): string { - const meetingDate = new Date(meetingData.date); - const formattedDate = meetingDate.toLocaleString('en-US', { - weekday: 'long', - year: 'numeric', - month: 'long', - day: 'numeric', - hour: '2-digit', - minute: '2-digit', - }); - const durationMinutes = Math.round(meetingData.duration); - - let noteBody = `**Date:** ${formattedDate}\n`; - noteBody += `**Duration:** ${durationMinutes} minutes\n`; - - if (meetingData.participants.length > 0) { - const participantNames = meetingData.participants.map(p => p.name).join(', '); - noteBody += `**Participants:** ${participantNames}\n`; - } - - // Overview section - if (meetingData.summary?.overview) { - noteBody += `\n## Overview\n${meetingData.summary.overview}\n`; - } - - // Key topics - if (meetingData.summary?.topics_discussed && Array.isArray(meetingData.summary.topics_discussed) && meetingData.summary.topics_discussed.length > 0) { - noteBody += `\n## Key Topics\n`; - meetingData.summary.topics_discussed.forEach(topic => { - noteBody += `- ${topic}\n`; - }); - } - - // Action items - if (meetingData.summary?.action_items && Array.isArray(meetingData.summary.action_items) && meetingData.summary.action_items.length > 0) { - noteBody += `\n## Action Items\n`; - meetingData.summary.action_items.forEach(item => { - noteBody += `- ${item}\n`; - }); - } - - // Insights section - noteBody += `\n## Insights\n`; - - if (meetingData.summary?.keywords && Array.isArray(meetingData.summary.keywords) && meetingData.summary.keywords.length > 0) { - noteBody += `**Keywords:** ${meetingData.summary.keywords.join(', ')}\n`; - } - - if (meetingData.analytics?.sentiments) { - const sentiments = meetingData.analytics.sentiments; - noteBody += `**Sentiment:** ${sentiments.positive_pct}% positive, ${sentiments.negative_pct}% negative, ${sentiments.neutral_pct}% neutral\n`; - } - - if (meetingData.summary?.meeting_type) { - noteBody += `**Meeting Type:** ${meetingData.summary.meeting_type}\n`; - } - - // Resources section - noteBody += `\n## Resources\n`; - noteBody += `[View Full Transcript](${meetingData.transcript_url})\n`; - - if (meetingData.recording_url) { - noteBody += `[Watch Recording](${meetingData.recording_url})\n`; - } - - return noteBody; - } - - static formatMeetingNotes(meetingData: FirefliesMeetingData): string { - const meetingDate = new Date(meetingData.date); - const formattedDate = meetingDate.toLocaleString('en-US', { - weekday: 'long', - year: 'numeric', - month: 'long', - day: 'numeric', - hour: '2-digit', - minute: '2-digit', - }); - const durationMinutes = Math.round(meetingData.duration); - - let meetingNotes = `**Date:** ${formattedDate}\n`; - meetingNotes += `**Duration:** ${durationMinutes} minutes\n`; - - if (meetingData.participants.length > 0) { - const participantNames = meetingData.participants.map(p => p.name).join(', '); - meetingNotes += `**Participants:** ${participantNames}\n`; - } - - // Overview section - if (meetingData.summary?.overview) { - meetingNotes += `\n## Overview\n${meetingData.summary.overview}\n`; - } - - // Key topics - if (meetingData.summary?.topics_discussed && Array.isArray(meetingData.summary.topics_discussed) && meetingData.summary.topics_discussed.length > 0) { - meetingNotes += `\n## Key Topics\n`; - meetingData.summary.topics_discussed.forEach(topic => { - meetingNotes += `- ${topic}\n`; - }); - } - - // Action items - if (meetingData.summary?.action_items && Array.isArray(meetingData.summary.action_items) && meetingData.summary.action_items.length > 0) { - meetingNotes += `\n## Action Items\n`; - meetingData.summary.action_items.forEach(item => { - meetingNotes += `- ${item}\n`; - }); - } - - // Insights section - meetingNotes += `\n## Insights\n`; - - if (meetingData.summary?.keywords && Array.isArray(meetingData.summary.keywords) && meetingData.summary.keywords.length > 0) { - meetingNotes += `**Keywords:** ${meetingData.summary.keywords.join(', ')}\n`; - } - - if (meetingData.analytics?.sentiments) { - const sentiments = meetingData.analytics.sentiments; - meetingNotes += `**Sentiment:** ${sentiments.positive_pct}% positive, ${sentiments.negative_pct}% negative, ${sentiments.neutral_pct}% neutral\n`; - } - - if (meetingData.summary?.meeting_type) { - meetingNotes += `**Meeting Type:** ${meetingData.summary.meeting_type}\n`; - } - - // Resources section - meetingNotes += `\n## Resources\n`; - meetingNotes += `[View Full Transcript](${meetingData.transcript_url})\n`; - - if (meetingData.recording_url) { - meetingNotes += `[Watch Recording](${meetingData.recording_url})\n`; - } - - return meetingNotes; - } - - - static toMeetingCreateInput( - meetingData: FirefliesMeetingData, - noteId?: string - ): MeetingCreateInput { - const durationMinutes = Math.round(meetingData.duration); - - // Build input object with only defined values (omit null fields) - const input: MeetingCreateInput = { - name: meetingData.title, - meetingDate: meetingData.date, - duration: durationMinutes, - actionItemsCount: meetingData.summary?.action_items?.length || 0, - firefliesMeetingId: meetingData.id, - }; - - // Add direct relationship to note if noteId is provided - if (noteId) { - input.noteId = noteId; - } - - // Only add optional fields if they have values - if (meetingData.summary?.meeting_type) { - input.meetingType = meetingData.summary.meeting_type; - } - - if (meetingData.summary?.keywords && Array.isArray(meetingData.summary.keywords) && meetingData.summary.keywords.length > 0) { - input.keywords = meetingData.summary.keywords.join(', '); - } - - if (meetingData.analytics?.sentiments?.positive_pct) { - input.sentimentScore = meetingData.analytics.sentiments.positive_pct / 100; - input.positivePercent = meetingData.analytics.sentiments.positive_pct; - } - - if (meetingData.analytics?.sentiments?.negative_pct) { - input.negativePercent = meetingData.analytics.sentiments.negative_pct; - } - - // Only add URLs if they are valid (not empty strings) - if (meetingData.transcript_url && meetingData.transcript_url.trim()) { - input.transcriptUrl = { - primaryLinkUrl: meetingData.transcript_url, - primaryLinkLabel: 'View Transcript' - }; - } - - if (meetingData.recording_url && meetingData.recording_url.trim()) { - input.recordingUrl = { - primaryLinkUrl: meetingData.recording_url, - primaryLinkLabel: 'Watch Recording' - }; - } - - if (meetingData.organizer_email) { - input.organizerEmail = meetingData.organizer_email; - } - - // Set success status and timestamps - input.importStatus = 'SUCCESS'; - input.lastImportAttempt = new Date().toISOString(); - input.importAttempts = 1; - - return input; - } - - static toFailedMeetingCreateInput( - meetingId: string, - title: string, - error: string, - attempts: number = 1 - ): MeetingCreateInput { - const currentDate = new Date().toISOString(); - - return { - name: title || `Failed Meeting Import - ${meetingId}`, - meetingDate: currentDate, - duration: 0, - actionItemsCount: 0, - firefliesMeetingId: meetingId, - importStatus: 'FAILED', - importError: error, - lastImportAttempt: currentDate, - importAttempts: attempts, - }; - } -} - diff --git a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/index.ts b/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/index.ts index de6383a1bf..15a583e4ba 100644 --- a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/index.ts +++ b/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/index.ts @@ -1,4 +1,5 @@ -export { config, main } from './receive-fireflies-notes'; +// Serverless function entry point - re-exports from src/lib +export { config, main } from '../../../src'; export type { FirefliesMeetingData, FirefliesParticipant, @@ -6,5 +7,5 @@ export type { ProcessResult, SummaryFetchConfig, SummaryStrategy -} from './types'; +} from '../../../src'; diff --git a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/logger.ts b/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/logger.ts deleted file mode 100644 index 758740574e..0000000000 --- a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/logger.ts +++ /dev/null @@ -1,95 +0,0 @@ -export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent'; - -export interface LoggerConfig { - logLevel: LogLevel; - isTestEnvironment: boolean; -} - -const LOG_LEVELS: Record = { - debug: 0, - info: 1, - warn: 2, - error: 3, - silent: 4, -}; - -/** - * App-level Fireflies application logger with configurable log levels. - */ -export class AppLogger { - private config: LoggerConfig; - private context: string; - - constructor(context: string) { - this.context = context; - this.config = { - logLevel: this.parseLogLevel(process.env.LOG_LEVEL || 'error'), - isTestEnvironment: process.env.NODE_ENV === 'test' || process.env.JEST_WORKER_ID !== undefined, - }; - } - - private parseLogLevel(level: string): LogLevel { - const normalizedLevel = level.toLowerCase() as LogLevel; - return Object.keys(LOG_LEVELS).includes(normalizedLevel) ? normalizedLevel : 'error'; - } - - private shouldLog(level: LogLevel): boolean { - return LOG_LEVELS[level] >= LOG_LEVELS[this.config.logLevel]; - } - - /** - * Log debug information (LOG_LEVEL=debug) - */ - debug(message: string, ...args: any[]): void { - if (this.shouldLog('debug')) { - // eslint-disable-next-line no-console - console.log(`[${this.context}] ${message}`, ...args); - } - } - - /** - * Log informational messages (LOG_LEVEL=info or lower) - */ - info(message: string, ...args: any[]): void { - if (this.shouldLog('info')) { - // eslint-disable-next-line no-console - console.log(`[${this.context}] ${message}`, ...args); - } - } - - /** - * Log warnings (LOG_LEVEL=warn or lower) - */ - warn(message: string, ...args: any[]): void { - if (this.shouldLog('warn')) { - // eslint-disable-next-line no-console - console.warn(`[${this.context}] ${message}`, ...args); - } - } - - /** - * Log errors (LOG_LEVEL=error or lower) - */ - error(message: string, ...args: any[]): void { - if (this.shouldLog('error')) { - // eslint-disable-next-line no-console - console.error(`[${this.context}] ${message}`, ...args); - } - } - - /** - * Log critical errors that should ALWAYS be visible regardless of log level - * Use sparingly - only for fatal errors, security issues, or data corruption - */ - critical(message: string, ...args: any[]): void { - // eslint-disable-next-line no-console - console.error(`[${this.context}] CRITICAL: ${message}`, ...args); - } -} - -/** - * Factory function to create loggers with automatic context detection - */ -export const createLogger = (context: string): AppLogger => { - return new AppLogger(context); -}; diff --git a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/types.ts b/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/types.ts deleted file mode 100644 index b1596842d2..0000000000 --- a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/types.ts +++ /dev/null @@ -1,130 +0,0 @@ -// Fireflies API Types -export type FirefliesParticipant = { - email: string; - name: string; -}; - -export type FirefliesWebhookPayload = { - meetingId: string; - eventType: string; - clientReferenceId?: string; -}; - -export type FirefliesMeetingData = { - id: string; - title: string; - date: string; - duration: number; - participants: FirefliesParticipant[]; - organizer_email?: string; - summary: { - action_items: string[]; - keywords?: string[]; - overview: string; - gist?: string; - topics_discussed?: string[]; - meeting_type?: string; - bullet_gist?: string; - }; - analytics?: { - sentiments?: { - positive_pct: number; - negative_pct: number; - neutral_pct: number; - }; - }; - transcript_url: string; - recording_url?: string; - summary_status?: string; -}; - -// Configuration Types -export type SummaryStrategy = 'immediate_only' | 'immediate_with_retry' | 'delayed_polling' | 'basic_only'; - -export type SummaryFetchConfig = { - strategy: SummaryStrategy; - retryAttempts: number; - retryDelay: number; - pollInterval: number; - maxPolls: number; -}; - -export type WebhookConfig = { - secret: string; - apiUrl: string; -}; - -// Processing Result Types -export type ProcessResult = { - success: boolean; - meetingId?: string; - noteIds?: string[]; - newContacts?: string[]; - errors?: string[]; - debug?: string[]; - summaryReady?: boolean; - summaryPending?: boolean; - enhancementScheduled?: boolean; - actionItemsCount?: number; - sentimentScore?: number; - meetingType?: string; - keyTopics?: string[]; -}; - -// Twenty CRM Types -export type GraphQLResponse = { - data: T; - errors?: Array<{ - message?: string; - extensions?: { code?: string } - }>; -}; - -export type IdNode = { id: string }; - -export type FindMeetingResponse = { - meetings: { edges: Array<{ node: IdNode }> }; -}; - -export type FindPeopleResponse = { - people: { edges: Array<{ node: { id: string; emails: { primaryEmail: string } } }> }; -}; - -export type CreatePersonResponse = { - createPerson: { id: string } -}; - -export type CreateNoteResponse = { - createNote: { id: string } -}; - -export type CreateMeetingResponse = { - createMeeting: { id: string } -}; - -export type Contact = { - id: string; - email: string; -}; - -export type MeetingCreateInput = { - name: string; - noteId?: string | null; // This is the relation field - meetingDate: string; - duration: number; - meetingType?: string | null; - keywords?: string | null; - sentimentScore?: number | null; - positivePercent?: number | null; - negativePercent?: number | null; - actionItemsCount: number; - transcriptUrl?: { primaryLinkUrl: string; primaryLinkLabel: string } | null; - recordingUrl?: { primaryLinkUrl: string; primaryLinkLabel: string } | null; - firefliesMeetingId: string; - organizerEmail?: string | null; - importStatus?: 'SUCCESS' | 'FAILED' | 'PENDING' | 'RETRYING' | null; - importError?: string | null; - lastImportAttempt?: string | null; - importAttempts?: number | null; -}; - diff --git a/packages/twenty-apps/community/fireflies/src/__tests__/fireflies-webhook.spec.ts b/packages/twenty-apps/community/fireflies/src/__tests__/fireflies-webhook.spec.ts index 99c0ac4317..246d8beb8e 100644 --- a/packages/twenty-apps/community/fireflies/src/__tests__/fireflies-webhook.spec.ts +++ b/packages/twenty-apps/community/fireflies/src/__tests__/fireflies-webhook.spec.ts @@ -4,7 +4,7 @@ import { main, type FirefliesMeetingData, type FirefliesWebhookPayload, -} from '../actions/receive-fireflies-notes'; +} from '../'; // Helper to generate HMAC signature const generateHMACSignature = (body: string, secret: string): string => { @@ -39,10 +39,12 @@ const mockFirefliesApiResponseWithSummary = { meeting_type: 'Sales Call', bullet_gist: '• Demonstrated core product features\n• Discussed enterprise pricing\n• Addressed integration questions', }, - sentiments: { // Note: Raw API has sentiments at top level, not in analytics - positive_pct: 75, - negative_pct: 10, - neutral_pct: 15, + analytics: { + sentiments: { + positive_pct: 75, + negative_pct: 10, + neutral_pct: 15, + }, }, transcript_url: 'https://app.fireflies.ai/transcript/test-001', video_url: 'https://app.fireflies.ai/recording/test-001', @@ -81,7 +83,7 @@ const mockMeetingWithFullSummary: FirefliesMeetingData = { }, }, transcript_url: 'https://app.fireflies.ai/transcript/test-001', - recording_url: 'https://app.fireflies.ai/recording/test-001', + video_url: 'https://app.fireflies.ai/recording/test-001', summary_status: 'completed', }; @@ -404,7 +406,11 @@ describe('Fireflies Webhook Integration v2', () => { expect(result.success).toBe(true); expect(result.summaryReady).toBe(true); expect(result.actionItemsCount).toBe(3); - expect(result.sentimentScore).toBeCloseTo(0.75, 2); // Use toBeCloseTo for floating point comparison + expect(result.sentimentAnalysis).toEqual({ + positive_pct: 75, + negative_pct: 10, + neutral_pct: 15, + }); expect(result.meetingType).toBe('Sales Call'); expect(result.keyTopics).toEqual(['product features', 'pricing discussion', 'integration capabilities', 'support options']); }); @@ -565,7 +571,7 @@ describe('Fireflies Webhook Integration v2', () => { const createNoteMock = jest.fn(); - global.fetch = jest.fn().mockImplementation((url: string, options?: any) => { + global.fetch = jest.fn().mockImplementation((url: string, options?: RequestInit) => { if (url === 'https://api.fireflies.ai/graphql') { return Promise.resolve({ ok: true, @@ -576,9 +582,9 @@ describe('Fireflies Webhook Integration v2', () => { } // Twenty API - const body = options?.body ? JSON.parse(options.body) : {}; - if (body.query?.includes('createNote')) { - createNoteMock(body.variables); + const requestBody = options?.body ? JSON.parse(options.body as string) : {}; + if (requestBody.query?.includes('createNote')) { + createNoteMock(requestBody.variables); return Promise.resolve({ ok: true, json: () => Promise.resolve({ @@ -610,7 +616,7 @@ describe('Fireflies Webhook Integration v2', () => { expect(noteData.data.bodyV2.markdown).toContain('## Overview'); // Markdown header, not bold expect(noteData.data.bodyV2.markdown).toContain('## Action Items'); // Markdown header, not bold expect(noteData.data.bodyV2.markdown).toContain('**Sentiment:**'); // This is bold - expect(noteData.data.bodyV2.markdown).toContain('[View Full Transcript]'); + expect(noteData.data.bodyV2.markdown).toContain('View Full Transcript on Fireflies'); }); it('should create meeting records for multi-party meetings', async () => { @@ -624,7 +630,7 @@ describe('Fireflies Webhook Integration v2', () => { const createMeetingMock = jest.fn(); - global.fetch = jest.fn().mockImplementation((url: string, options?: any) => { + global.fetch = jest.fn().mockImplementation((url: string, options?: RequestInit) => { if (url === 'https://api.fireflies.ai/graphql') { return Promise.resolve({ ok: true, @@ -635,9 +641,9 @@ describe('Fireflies Webhook Integration v2', () => { } // Twenty API - const body = options?.body ? JSON.parse(options.body) : {}; - if (body.query?.includes('createMeeting')) { - createMeetingMock(body.variables); + const requestBody = options?.body ? JSON.parse(options.body as string) : {}; + if (requestBody.query?.includes('createMeeting')) { + createMeetingMock(requestBody.variables); return Promise.resolve({ ok: true, json: () => Promise.resolve({ @@ -645,7 +651,7 @@ describe('Fireflies Webhook Integration v2', () => { }), }); } - if (body.query?.includes('createNote')) { + if (requestBody.query?.includes('createNote')) { return Promise.resolve({ ok: true, json: () => Promise.resolve({ @@ -694,7 +700,7 @@ describe('Fireflies Webhook Integration v2', () => { }); it('should handle missing payload gracefully', async () => { - const result = await main(null as any, {}); + const result = await main(null as unknown, {}); expect(result.success).toBe(false); expect(result.errors).toBeDefined(); @@ -703,10 +709,10 @@ describe('Fireflies Webhook Integration v2', () => { it('should handle invalid payload structure', async () => { const invalidPayload = { invalid: 'data' }; - const result = await main(invalidPayload as any, {}); + const result = await main(invalidPayload as unknown, {}); - expect(result.success).toBe(false); - expect(result.errors).toBeDefined(); + expect(result.success).toBe(false); + expect(result.errors).toBeDefined(); }); }); }); diff --git a/packages/twenty-apps/community/fireflies/src/__tests__/historical-importer.spec.ts b/packages/twenty-apps/community/fireflies/src/__tests__/historical-importer.spec.ts new file mode 100644 index 0000000000..4e829c7326 --- /dev/null +++ b/packages/twenty-apps/community/fireflies/src/__tests__/historical-importer.spec.ts @@ -0,0 +1,84 @@ +import { HistoricalImporter } from '../historical-importer'; +import type { FirefliesMeetingData, SummaryFetchConfig } from '../types'; + +const summaryConfig: SummaryFetchConfig = { + strategy: 'immediate_with_retry', + retryAttempts: 1, + retryDelay: 0, + pollInterval: 0, + maxPolls: 0, +}; + +const sampleMeeting: FirefliesMeetingData = { + id: 'm-1', + title: 'Sample', + date: new Date().toISOString(), + duration: 30, + participants: [], + summary: { action_items: [], overview: '' }, + transcript_url: 'https://example.com', +}; + +describe('HistoricalImporter', () => { + const buildImporter = () => { + const firefliesClient = { + listTranscripts: jest.fn(), + fetchMeetingDataWithRetry: jest.fn(), + } as unknown as jest.Mocked; + + const twentyService = { + findMeetingByFirefliesId: jest.fn(), + matchParticipantsToContacts: jest.fn(), + createContactsForUnmatched: jest.fn(), + createNoteOnly: jest.fn(), + createMeeting: jest.fn(), + createNoteTarget: jest.fn(), + } as unknown as jest.Mocked; + + return { firefliesClient, twentyService }; + }; + + it('skips meetings that already exist by firefliesMeetingId', async () => { + const { firefliesClient, twentyService } = buildImporter(); + + firefliesClient.listTranscripts.mockResolvedValue([{ id: 'existing' }]); + twentyService.findMeetingByFirefliesId.mockResolvedValue({ id: 'twenty-id' }); + + const importer = new HistoricalImporter(firefliesClient, twentyService); + const result = await importer.run( + {}, + { dryRun: false, autoCreateContacts: true, summaryConfig, plan: 'free' }, + ); + + expect(result.skippedExisting).toBe(1); + expect(result.imported).toBe(0); + expect(twentyService.createMeeting).not.toHaveBeenCalled(); + expect(result.statuses[0].status).toBe('skipped_existing'); + }); + + it('supports dry-run without writing to Twenty', async () => { + const { firefliesClient, twentyService } = buildImporter(); + + firefliesClient.listTranscripts.mockResolvedValue([{ id: 'm-2' }]); + firefliesClient.fetchMeetingDataWithRetry.mockResolvedValue({ + data: sampleMeeting, + summaryReady: false, + }); + twentyService.findMeetingByFirefliesId.mockResolvedValue(undefined); + + const importer = new HistoricalImporter(firefliesClient, twentyService); + const result = await importer.run( + {}, + { dryRun: true, autoCreateContacts: false, summaryConfig, plan: 'free' }, + ); + + expect(result.imported).toBe(1); + expect(result.summaryPending).toBe(1); + expect(twentyService.createMeeting).not.toHaveBeenCalled(); + expect(twentyService.createNoteOnly).not.toHaveBeenCalled(); + expect(result.statuses).toHaveLength(1); + expect(result.statuses[0].status).toBe('pending_summary'); + }); +}); + + diff --git a/packages/twenty-apps/community/fireflies/src/__tests__/setup.ts b/packages/twenty-apps/community/fireflies/src/__tests__/setup.ts index 47f5b16e55..79263d9b5b 100644 --- a/packages/twenty-apps/community/fireflies/src/__tests__/setup.ts +++ b/packages/twenty-apps/community/fireflies/src/__tests__/setup.ts @@ -9,6 +9,7 @@ process.env.AUTO_CREATE_CONTACTS = 'true'; process.env.SERVER_URL = 'http://localhost:3000'; process.env.TWENTY_API_KEY = 'test-api-key'; process.env.LOG_LEVEL = 'silent'; +process.env.CAPTURE_LOGS = 'false'; // Reset mocks before each test beforeEach(() => { diff --git a/packages/twenty-apps/community/fireflies/src/__tests__/webhook-handler-logging.spec.ts b/packages/twenty-apps/community/fireflies/src/__tests__/webhook-handler-logging.spec.ts new file mode 100644 index 0000000000..0fde2f1e11 --- /dev/null +++ b/packages/twenty-apps/community/fireflies/src/__tests__/webhook-handler-logging.spec.ts @@ -0,0 +1,40 @@ +import { WebhookHandler } from '../webhook-handler'; + +describe('WebhookHandler log capture', () => { + const originalEnv = process.env; + + beforeEach(() => { + process.env = { + ...originalEnv, + FIREFLIES_WEBHOOK_SECRET: 'testsecret', + FIREFLIES_API_KEY: '', + TWENTY_API_KEY: '', + CAPTURE_LOGS: 'false', + LOG_LEVEL: 'silent', + }; + }); + + afterEach(() => { + process.env = originalEnv; + }); + + it('includes debug logs in response when CAPTURE_LOGS is true', async () => { + process.env.CAPTURE_LOGS = 'true'; + + const handler = new WebhookHandler(); + const result = await handler.handle(null); + + expect(result.success).toBe(false); + expect(Array.isArray(result.debug)).toBe(true); + }); + + it('omits debug logs when CAPTURE_LOGS is false', async () => { + process.env.CAPTURE_LOGS = 'false'; + + const handler = new WebhookHandler(); + const result = await handler.handle(null); + + expect(result.debug).toBeUndefined(); + }); +}); + diff --git a/packages/twenty-apps/community/fireflies/src/actions/receive-fireflies-notes.ts b/packages/twenty-apps/community/fireflies/src/actions/receive-fireflies-notes.ts deleted file mode 100644 index 6c1c09fde6..0000000000 --- a/packages/twenty-apps/community/fireflies/src/actions/receive-fireflies-notes.ts +++ /dev/null @@ -1,11 +0,0 @@ -export { - config, - main, - type FirefliesMeetingData, - type FirefliesParticipant, - type FirefliesWebhookPayload, - type ProcessResult, - type SummaryFetchConfig, - type SummaryStrategy -} from '../../serverlessFunctions/receive-fireflies-notes/src/index'; - diff --git a/packages/twenty-apps/community/fireflies/src/fireflies-api-client.ts b/packages/twenty-apps/community/fireflies/src/fireflies-api-client.ts new file mode 100644 index 0000000000..d60c28fdd1 --- /dev/null +++ b/packages/twenty-apps/community/fireflies/src/fireflies-api-client.ts @@ -0,0 +1,823 @@ +import { createLogger } from './logger'; +import { + FIREFLIES_PLANS, + type FirefliesMeetingData, + type FirefliesParticipant, + type FirefliesPlan, + type FirefliesTranscriptListItem, + type FirefliesTranscriptListOptions, + type SummaryFetchConfig +} from './types'; + +const logger = createLogger('fireflies-api'); + +export class FirefliesApiClient { + private apiKey: string; + + constructor(apiKey: string) { + if (!apiKey) { + logger.critical('FIREFLIES_API_KEY is required but not provided - this is a critical configuration error'); + throw new Error('FIREFLIES_API_KEY is required'); + } + this.apiKey = apiKey; + } + + async listTranscripts(options: FirefliesTranscriptListOptions = {}): Promise { + const { + organizers, + participants, + hostEmail, + participantEmail, + userId, + channelId, + mine, + fromDate, + toDate, + pageSize = 50, + maxRecords = 500, + } = options; + + const sanitizedOrganizers = organizers?.filter(Boolean); + const sanitizedParticipants = participants?.filter(Boolean); + + const transcripts: FirefliesTranscriptListItem[] = []; + let skip = options.skip ?? 0; + const limit = options.limit ?? pageSize; + + const baseQuery = ` + query Transcripts( + $limit: Int + $skip: Int + $hostEmail: String + $participantEmail: String + $organizers: [String!] + $participants: [String!] + $userId: String + $channelId: String + $mine: Boolean + $date: Float + ) { + transcripts( + limit: $limit + skip: $skip + host_email: $hostEmail + participant_email: $participantEmail + organizers: $organizers + participants: $participants + user_id: $userId + channel_id: $channelId + mine: $mine + date: $date + ) { + id + title + date + duration + organizer_email + participants + transcript_url + meeting_link + meeting_info { summary_status } + } + } + `; + + while (transcripts.length < maxRecords) { + const pageVariables = { + limit, + skip, + hostEmail, + participantEmail, + organizers: sanitizedOrganizers, + participants: sanitizedParticipants, + userId, + channelId, + mine, + date: fromDate, + }; + + const page = await this.executeTranscriptListQuery(baseQuery, pageVariables); + const normalized = page + .map((item) => { + const normalizedDate = this.normalizeDate(item.date); + return { + id: (item.id as string) || '', + title: (item.title as string) || 'Untitled Meeting', + date: normalizedDate, + duration: (item.duration as number) || 0, + organizer_email: item.organizer_email as string | undefined, + participants: Array.isArray(item.participants) + ? (item.participants as string[]) + : undefined, + transcript_url: item.transcript_url as string | undefined, + meeting_link: item.meeting_link as string | undefined, + summary_status: (item.meeting_info as { summary_status?: string } | undefined)?.summary_status, + }; + }) + .filter((item) => { + if (toDate && item.date) { + const itemTime = Date.parse(item.date); + if (!Number.isNaN(itemTime) && itemTime > toDate) { + return false; + } + } + return true; + }); + + transcripts.push(...normalized); + + if (page.length < limit) { + break; + } + + skip += limit; + } + + if (transcripts.length > maxRecords) { + return transcripts.slice(0, maxRecords); + } + + return transcripts; + } + + async fetchMeetingData( + meetingId: string, + options?: { timeout?: number; plan?: FirefliesPlan } + ): Promise { + const plan = options?.plan ?? FIREFLIES_PLANS.FREE; + const isPremiumPlan = + plan === FIREFLIES_PLANS.BUSINESS || plan === FIREFLIES_PLANS.ENTERPRISE; + + // Minimal query for free plans - only basic fields available on all plans + // Note: audio_url requires Pro+, video_url requires Business+ + const freeQuery = ` + query GetTranscriptMinimal($transcriptId: String!) { + transcript(id: $transcriptId) { + id + title + date + duration + participants + organizer_email + transcript_url + meeting_link + } + } + `; + + // Standard query for pro plans - adds speakers, summary, sentences, and audio_url (Pro+) + // Note: video_url requires Business+ + const proQuery = ` + query GetTranscriptBasic($transcriptId: String!) { + transcript(id: $transcriptId) { + id + title + date + duration + participants + organizer_email + speakers { + name + } + sentences { + index + speaker_name + text + start_time + end_time + } + summary { + overview + keywords + action_items + notes + gist + bullet_gist + short_summary + short_overview + outline + shorthand_bullet + } + meeting_info { + summary_status + } + transcript_url + audio_url + meeting_link + } + } + `; + + // Full query for business/enterprise - includes all fields + const businessQuery = ` + query GetTranscriptFull($transcriptId: String!) { + transcript(id: $transcriptId) { + id + title + date + duration + participants + organizer_email + analytics { + sentiments { + positive_pct + negative_pct + neutral_pct + } + categories { + questions + tasks + metrics + date_times + } + speakers { + speaker_id + name + duration + word_count + longest_monologue + filler_words + questions + words_per_minute + } + } + meeting_attendees { + displayName + email + phoneNumber + name + location + } + meeting_attendance { + name + join_time + leave_time + } + speakers { + name + } + sentences { + index + speaker_name + text + start_time + end_time + ai_filters { + task + question + sentiment + } + } + summary { + action_items + overview + keywords + notes + gist + bullet_gist + short_summary + short_overview + outline + shorthand_bullet + topics_discussed + meeting_type + transcript_chapters + } + meeting_info { + summary_status + } + transcript_url + audio_url + video_url + meeting_link + } + } + `; + + // Select query based on plan + const queryToUse = isPremiumPlan ? businessQuery : + (plan === FIREFLIES_PLANS.PRO ? proQuery : freeQuery); + + const planFeatures = { + [FIREFLIES_PLANS.FREE]: 'basic fields only (no summary, no audio/video)', + [FIREFLIES_PLANS.PRO]: 'summary, speakers, audio_url', + [FIREFLIES_PLANS.BUSINESS]: 'full access including analytics, video_url', + [FIREFLIES_PLANS.ENTERPRISE]: 'full access including analytics, video_url', + }; + logger.debug(`using ${plan} plan query (${planFeatures[plan]})`); + + try { + return await this.executeTranscriptQuery({ + meetingId, + query: queryToUse, + timeout: options?.timeout, + }); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + + // Detect plan-specific errors + const requiresBusiness = message.toLowerCase().includes('business or higher'); + const requiresPro = message.toLowerCase().includes('pro or higher'); + const planError = requiresBusiness || requiresPro || + message.toLowerCase().includes('higher plan') || + message.includes('Cannot query field'); + + // Fallback cascade: business -> pro -> free + if (planError) { + if (isPremiumPlan) { + logger.warn(`Plan limitation detected (configured: ${plan}), falling back to pro query`); + try { + return await this.executeTranscriptQuery({ + meetingId, + query: proQuery, + timeout: options?.timeout, + }); + } catch (proError) { + const proMessage = proError instanceof Error ? proError.message : String(proError); + if (proMessage.toLowerCase().includes('plan') || proMessage.includes('Cannot query field')) { + logger.warn('Pro query also failed, falling back to minimal free query'); + return this.executeTranscriptQuery({ + meetingId, + query: freeQuery, + timeout: options?.timeout, + }); + } + throw proError; + } + } else if (plan === FIREFLIES_PLANS.PRO) { + logger.warn(`Pro plan query failed (${requiresBusiness ? 'requires Business+' : 'unknown restriction'}), falling back to free query`); + return this.executeTranscriptQuery({ + meetingId, + query: freeQuery, + timeout: options?.timeout, + }); + } else { + // Already using free query - some field might still be restricted + logger.error( + 'Fireflies API rejected the minimal free query. This may indicate: ' + + '1) The transcript ID is invalid, or ' + + '2) Your API key does not have access to this transcript, or ' + + '3) An unexpected API restriction : open an issue' + ); + } + } + + throw error; + } + } + + async fetchMeetingDataWithRetry( + meetingId: string, + config: SummaryFetchConfig, + plan: FirefliesPlan = FIREFLIES_PLANS.FREE + ): Promise<{ data: FirefliesMeetingData; summaryReady: boolean }> { + // immediate_only: single attempt, no retries + if (config.strategy === 'immediate_only') { + logger.debug(`fetching meeting ${meetingId} (strategy: immediate_only)`); + const meetingData = await this.fetchMeetingData(meetingId, { timeout: 10000, plan }); + const ready = this.isSummaryReady(meetingData); + logger.debug(`summary ready: ${ready}`); + return { data: meetingData, summaryReady: ready }; + } + + // immediate_with_retry: retry with linear backoff + logger.debug(`fetching meeting ${meetingId} (strategy: immediate_with_retry, maxAttempts: ${config.retryAttempts})`); + + for (let attempt = 1; attempt <= config.retryAttempts; attempt++) { + try { + const meetingData = await this.fetchMeetingData(meetingId, { timeout: 10000, plan }); + const ready = this.isSummaryReady(meetingData); + + logger.debug(`attempt ${attempt}/${config.retryAttempts}: summary ready=${ready}`); + + if (ready) { + return { data: meetingData, summaryReady: true }; + } + + if (attempt < config.retryAttempts) { + const delayMs = config.retryDelay * attempt; + logger.debug(`summary not ready, waiting ${delayMs}ms before retry ${attempt + 1}`); + await new Promise(resolve => setTimeout(resolve, delayMs)); + } else { + logger.debug(`max retries reached, returning partial data`); + return { data: meetingData, summaryReady: false }; + } + } catch (error) { + const errorMsg = error instanceof Error ? error.message : String(error); + logger.error(`attempt ${attempt}/${config.retryAttempts} failed: ${errorMsg}`); + + if (attempt === config.retryAttempts) { + throw error; + } + + const delayMs = config.retryDelay * attempt; + logger.debug(`retrying in ${delayMs}ms...`); + await new Promise(resolve => setTimeout(resolve, delayMs)); + } + } + + throw new Error('Failed to fetch meeting data after retries'); + } + + private async executeTranscriptQuery({ + meetingId, + query, + timeout, + }: { + meetingId: string; + query: string; + timeout?: number; + }): Promise { + const controller = new AbortController(); + const timeoutId = timeout ? setTimeout(() => controller.abort(), timeout) : null; + + try { + const response = await fetch('https://api.fireflies.ai/graphql', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${this.apiKey}`, + }, + body: JSON.stringify({ + query, + variables: { transcriptId: meetingId }, + }), + signal: controller.signal, + }); + + if (timeoutId) clearTimeout(timeoutId); + + if (!response.ok) { + let errorDetails = `Fireflies API request failed with status ${response.status}`; + try { + const errorBody = await response.text(); + if (errorBody) { + errorDetails += `: ${errorBody}`; + } + } catch { + // Ignore if we can't read the response body + } + throw new Error(errorDetails); + } + + const json = await response.json() as { + data?: { transcript?: Record }; + errors?: Array<{ message?: string }>; + }; + + if (json.errors && json.errors.length > 0) { + throw new Error(`Fireflies API error: ${json.errors[0]?.message || 'Unknown error'}`); + } + + const transcript = json.data?.transcript; + if (!transcript) { + throw new Error('Invalid response from Fireflies API: missing transcript data'); + } + + return this.transformMeetingData(transcript, meetingId); + } finally { + if (timeoutId) clearTimeout(timeoutId); + } + } + + private isSummaryReady(meetingData: FirefliesMeetingData): boolean { + return ( + (meetingData.summary?.action_items?.length > 0) || + (meetingData.summary?.overview?.length > 0) || + meetingData.summary_status === 'completed' + ); + } + + private extractAllParticipants(transcript: Record): FirefliesParticipant[] { + const participantsWithEmails: FirefliesParticipant[] = []; + const participantsNameOnly: FirefliesParticipant[] = []; + + logger.debug('=== PARTICIPANT EXTRACTION DEBUG ==='); + logger.debug('participants field:', JSON.stringify(transcript.participants)); + logger.debug('meeting_attendees field:', JSON.stringify(transcript.meeting_attendees)); + logger.debug('speakers field:', (transcript.speakers as Array<{ name: string }>)?.map((s) => s.name)); + logger.debug('meeting_attendance field:', (transcript.meeting_attendance as Array<{ name: string }>)?.map((a) => a.name)); + logger.debug('organizer_email:', transcript.organizer_email); + + const isEmail = (str: string): boolean => { + return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(str.trim()); + }; + + const isDuplicate = (name: string, email: string): boolean => { + const nameLower = name.toLowerCase().trim(); + const emailLower = email.toLowerCase().trim(); + + return participantsWithEmails.some(p => + p.name.toLowerCase().trim() === nameLower || + (email && p.email.toLowerCase() === emailLower) + ) || participantsNameOnly.some(p => + p.name.toLowerCase().trim() === nameLower + ); + }; + + // 1. Extract from legacy participants field (with emails) + if (transcript.participants && Array.isArray(transcript.participants)) { + transcript.participants.forEach((participant: string) => { + const parts = participant.split(',').map(p => p.trim()); + + parts.forEach(part => { + const emailMatch = part.match(/<([^>]+)>/); + const email = emailMatch ? emailMatch[1] : ''; + const name = emailMatch + ? part.substring(0, part.indexOf('<')).trim() + : part.trim(); + + if (isEmail(name)) { + logger.debug(`Skipping participant with email as name: "${name}"`); + return; + } + + if (!name) { + return; + } + + if (isDuplicate(name, email)) { + logger.debug(`Skipping duplicate participant: "${name}" <${email}>`); + return; + } + + if (name && email) { + participantsWithEmails.push({ name, email }); + } else if (name) { + participantsNameOnly.push({ name, email: '' }); + } + }); + }); + } + + // 2. Extract from meeting_attendees field (structured) + if (transcript.meeting_attendees && Array.isArray(transcript.meeting_attendees)) { + transcript.meeting_attendees.forEach((attendee: Record) => { + const name = (attendee.displayName || attendee.name || '') as string; + const email = (attendee.email || '') as string; + + if (isEmail(name)) { + logger.debug(`Skipping attendee with email as name: "${name}"`); + return; + } + + if (name && !isDuplicate(name, email)) { + if (email) { + participantsWithEmails.push({ name, email }); + } else { + participantsNameOnly.push({ name, email: '' }); + } + } + }); + } + + // 3. Extract from speakers field (name only) + if (transcript.speakers && Array.isArray(transcript.speakers)) { + transcript.speakers.forEach((speaker: Record) => { + const name = (speaker.name || '') as string; + + if (isEmail(name)) { + logger.debug(`Skipping speaker with email as name: "${name}"`); + return; + } + + if (name && !isDuplicate(name, '')) { + participantsNameOnly.push({ name, email: '' }); + } + }); + } + + // 4. Extract from meeting_attendance field (name only) + if (transcript.meeting_attendance && Array.isArray(transcript.meeting_attendance)) { + transcript.meeting_attendance.forEach((attendance: Record) => { + const name = (attendance.name || '') as string; + + if (isEmail(name) || name.includes(',')) { + logger.debug(`Skipping attendance with email/list as name: "${name}"`); + return; + } + + if (name && !isDuplicate(name, '')) { + participantsNameOnly.push({ name, email: '' }); + } + }); + } + + // 5. Add organizer email if available and not already included + const organizerEmail = transcript.organizer_email as string | undefined; + if (organizerEmail) { + const existsWithEmail = participantsWithEmails.some(p => + p.email.toLowerCase() === organizerEmail.toLowerCase() + ); + + if (!existsWithEmail) { + let organizerName = ''; + + const emailUsername = organizerEmail.split('@')[0].toLowerCase(); + const emailNameVariations = [emailUsername]; + + if (transcript.speakers && Array.isArray(transcript.speakers)) { + const potentialOrganizerSpeaker = transcript.speakers.find((speaker: Record) => { + const name = ((speaker.name || '') as string).toLowerCase(); + return emailNameVariations.some(variation => + name.includes(variation) || variation.includes(name) + ); + }) as Record | undefined; + if (potentialOrganizerSpeaker) { + organizerName = potentialOrganizerSpeaker.name as string; + } + } + + if (!organizerName && transcript.meeting_attendance && Array.isArray(transcript.meeting_attendance)) { + const potentialOrganizerAttendance = transcript.meeting_attendance.find((attendance: Record) => { + const name = ((attendance.name || '') as string).toLowerCase(); + return emailNameVariations.some(variation => + name.includes(variation) || variation.includes(name) + ); + }) as Record | undefined; + if (potentialOrganizerAttendance) { + organizerName = potentialOrganizerAttendance.name as string; + } + } + + if (organizerName) { + participantsWithEmails.push({ name: organizerName, email: organizerEmail }); + + const nameIndex = participantsNameOnly.findIndex(p => + p.name.toLowerCase().includes(organizerName.toLowerCase()) || + organizerName.toLowerCase().includes(p.name.toLowerCase()) + ); + if (nameIndex !== -1) { + participantsNameOnly.splice(nameIndex, 1); + } + } else { + participantsWithEmails.push({ name: 'Meeting Organizer', email: organizerEmail }); + } + } + } + + const allParticipants = [...participantsWithEmails, ...participantsNameOnly]; + + logger.debug('=== EXTRACTED PARTICIPANTS ==='); + logger.debug('With emails:', participantsWithEmails.length, JSON.stringify(participantsWithEmails)); + logger.debug('Name only:', participantsNameOnly.length, JSON.stringify(participantsNameOnly)); + logger.debug('Total:', allParticipants.length); + + return allParticipants; + } + + private transformMeetingData(transcript: Record, meetingId: string): FirefliesMeetingData { + let dateString: string; + if (transcript.date) { + if (typeof transcript.date === 'number') { + dateString = new Date(transcript.date).toISOString(); + } else if (typeof transcript.date === 'string') { + const parsed = Number(transcript.date); + if (!isNaN(parsed)) { + dateString = new Date(parsed).toISOString(); + } else { + dateString = transcript.date; + } + } else { + dateString = new Date().toISOString(); + } + } else { + dateString = new Date().toISOString(); + } + + const summary = transcript.summary as Record | undefined; + const analytics = transcript.analytics as Record | undefined; + const sentiments = analytics?.sentiments as Record | undefined; + const categories = analytics?.categories as Record | undefined; + const speakersAnalytics = analytics?.speakers as Array> | undefined; + const meetingInfo = transcript.meeting_info as Record | undefined; + + // Transform sentences array + const rawSentences = transcript.sentences as Array> | undefined; + const sentences = rawSentences?.map(s => ({ + index: (s.index as number) || 0, + speaker_name: (s.speaker_name as string) || 'Unknown', + text: (s.text as string) || '', + start_time: (s.start_time as string) || '0', + end_time: (s.end_time as string) || '0', + ai_filters: s.ai_filters as { task?: boolean; question?: boolean; sentiment?: string } | undefined, + })); + + // Transform speaker analytics + const speakers = speakersAnalytics?.map(sp => ({ + speaker_id: (sp.speaker_id as string) || '', + name: (sp.name as string) || 'Unknown', + duration: (sp.duration as number) || 0, + word_count: (sp.word_count as number) || 0, + longest_monologue: (sp.longest_monologue as number) || 0, + filler_words: (sp.filler_words as number) || 0, + questions: (sp.questions as number) || 0, + words_per_minute: (sp.words_per_minute as number) || 0, + })); + + return { + id: (transcript.id as string) || meetingId, + title: (transcript.title as string) || 'Untitled Meeting', + date: dateString, + duration: (transcript.duration as number) || 0, + participants: this.extractAllParticipants(transcript), + organizer_email: transcript.organizer_email as string | undefined, + sentences, + summary: { + // action_items can be string or array - normalize to array + action_items: Array.isArray(summary?.action_items) + ? summary.action_items as string[] + : (typeof summary?.action_items === 'string' && summary.action_items.trim() + ? summary.action_items.split('\n').filter((item: string) => item.trim()) + : []), + overview: (summary?.overview as string) || '', + notes: summary?.notes as string | undefined, + gist: summary?.gist as string | undefined, + bullet_gist: summary?.bullet_gist as string | undefined, + short_summary: summary?.short_summary as string | undefined, + short_overview: summary?.short_overview as string | undefined, + outline: summary?.outline as string | undefined, + shorthand_bullet: summary?.shorthand_bullet as string | undefined, + keywords: summary?.keywords as string[] | undefined, + topics_discussed: summary?.topics_discussed as string[] | undefined, + meeting_type: summary?.meeting_type as string | undefined, + transcript_chapters: summary?.transcript_chapters as string[] | undefined, + }, + analytics: (sentiments || categories || speakers) ? { + sentiments: sentiments ? { + positive_pct: sentiments.positive_pct || 0, + negative_pct: sentiments.negative_pct || 0, + neutral_pct: sentiments.neutral_pct || 0, + } : undefined, + categories: categories ? { + questions: categories.questions || 0, + tasks: categories.tasks || 0, + metrics: categories.metrics || 0, + date_times: categories.date_times || 0, + } : undefined, + speakers, + } : undefined, + meeting_info: meetingInfo ? { + summary_status: meetingInfo.summary_status as string | undefined, + } : undefined, + // URLs by plan availability: + transcript_url: (transcript.transcript_url as string) || `https://app.fireflies.ai/view/${meetingId}`, + audio_url: transcript.audio_url as string | undefined, // Pro+ + video_url: transcript.video_url as string | undefined, // Business+ + meeting_link: transcript.meeting_link as string | undefined, // All plans + summary_status: (meetingInfo?.summary_status as string) || (transcript.summary_status as string) || undefined, + }; + } + + private async executeTranscriptListQuery( + query: string, + variables: Record, + ): Promise>> { + const response = await fetch('https://api.fireflies.ai/graphql', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${this.apiKey}`, + }, + body: JSON.stringify({ query, variables }), + }); + + if (!response.ok) { + const errorBody = await response.text(); + throw new Error(`Fireflies transcripts request failed: ${response.status} ${errorBody}`); + } + + const json = await response.json() as { + data?: { transcripts?: Array> }; + errors?: Array<{ message?: string }>; + }; + + if (json.errors && json.errors.length > 0) { + const message = json.errors[0]?.message || 'Unknown error'; + throw new Error(`Fireflies API error: ${message}`); + } + + return json.data?.transcripts ?? []; + } + + private normalizeDate(dateValue: unknown): string | undefined { + if (!dateValue) { + return undefined; + } + + if (typeof dateValue === 'number') { + return new Date(dateValue).toISOString(); + } + + if (typeof dateValue === 'string') { + const parsed = Number(dateValue); + if (!Number.isNaN(parsed)) { + return new Date(parsed).toISOString(); + } + return dateValue; + } + + return undefined; + } +} + diff --git a/packages/twenty-apps/community/fireflies/src/formatters.ts b/packages/twenty-apps/community/fireflies/src/formatters.ts new file mode 100644 index 0000000000..ef0c69a61b --- /dev/null +++ b/packages/twenty-apps/community/fireflies/src/formatters.ts @@ -0,0 +1,259 @@ +import type { FirefliesMeetingData, FirefliesSentence, MeetingCreateInput } from './types'; + +export class MeetingFormatter { + // Format timestamp from seconds to MM:SS + private static formatTimestamp(timeStr: string): string { + const seconds = parseFloat(timeStr); + if (isNaN(seconds)) return '00:00'; + const mins = Math.floor(seconds / 60); + const secs = Math.floor(seconds % 60); + return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; + } + + // Format full transcript from sentences + private static formatTranscript(sentences: FirefliesSentence[]): string { + if (!sentences || sentences.length === 0) return ''; + + let transcript = ''; + let currentSpeaker = ''; + + for (const sentence of sentences) { + const timestamp = this.formatTimestamp(sentence.start_time); + const speaker = sentence.speaker_name || 'Unknown'; + + // Add speaker header when speaker changes + if (speaker !== currentSpeaker) { + currentSpeaker = speaker; + transcript += `\n**${speaker}** [${timestamp}]\n`; + } + + transcript += `${sentence.text} `; + } + + return transcript.trim(); + } + + static formatNoteBody(meetingData: FirefliesMeetingData): string { + const meetingDate = meetingData.date ? new Date(meetingData.date) : null; + const hasValidDate = meetingDate instanceof Date && !Number.isNaN(meetingDate.getTime()); + const formattedDate = hasValidDate + ? meetingDate.toLocaleString('en-US', { + weekday: 'long', + year: 'numeric', + month: 'long', + day: 'numeric', + hour: '2-digit', + minute: '2-digit', + }) + : 'Unknown date'; + const durationMinutes = Math.round(meetingData.duration); + + let noteBody = `**Date:** ${formattedDate}\n`; + noteBody += `**Duration:** ${durationMinutes} minutes\n`; + + if (meetingData.participants.length > 0) { + const participantNames = meetingData.participants.map(p => p.name).join(', '); + noteBody += `**Participants:** ${participantNames}\n`; + } + + // Overview section + if (meetingData.summary?.overview) { + noteBody += `\n## Overview\n${meetingData.summary.overview}\n`; + } + + // Detailed AI Notes (the rich content from Fireflies) + if (meetingData.summary?.notes) { + noteBody += `\n## Meeting Notes\n${meetingData.summary.notes}\n`; + } + + // Bullet gist with emojis (if available and different from notes) + if (meetingData.summary?.bullet_gist && !meetingData.summary?.notes) { + noteBody += `\n## Key Points\n${meetingData.summary.bullet_gist}\n`; + } + + // Meeting outline with timestamps (shorthand_bullet contains the timestamped outline) + const outline = meetingData.summary?.outline || meetingData.summary?.shorthand_bullet; + if (outline) { + noteBody += `\n## Outline\n${outline}\n`; + } + + // Key topics + if (meetingData.summary?.topics_discussed?.length) { + noteBody += `\n## Key Topics\n`; + meetingData.summary.topics_discussed.forEach(topic => { + noteBody += `- ${topic}\n`; + }); + } + + // Action items + if (meetingData.summary?.action_items?.length) { + noteBody += `\n## Action Items\n`; + meetingData.summary.action_items.forEach(item => { + noteBody += `- [ ] ${item}\n`; + }); + } + + // Insights section + noteBody += `\n## Insights\n`; + + if (meetingData.summary?.keywords?.length) { + noteBody += `**Keywords:** ${meetingData.summary.keywords.join(', ')}\n`; + } + + if (meetingData.analytics?.sentiments) { + const sentiments = meetingData.analytics.sentiments; + noteBody += `**Sentiment:** ${sentiments.positive_pct}% positive, ${sentiments.negative_pct}% negative, ${sentiments.neutral_pct}% neutral\n`; + } + + if (meetingData.summary?.meeting_type) { + noteBody += `**Meeting Type:** ${meetingData.summary.meeting_type}\n`; + } + + // Speaker analytics (Business+) + if (meetingData.analytics?.speakers?.length) { + noteBody += `\n### Speaker Stats\n`; + for (const speaker of meetingData.analytics.speakers) { + const talkTime = Math.round(speaker.duration / 60); + noteBody += `- **${speaker.name}**: ${talkTime} min talk time, ${speaker.word_count} words, ${speaker.questions} questions\n`; + } + } + + // Meeting metrics (Business+) + if (meetingData.analytics?.categories) { + const cats = meetingData.analytics.categories; + noteBody += `\n### Meeting Metrics\n`; + noteBody += `- Questions asked: ${cats.questions}\n`; + noteBody += `- Tasks identified: ${cats.tasks}\n`; + if (cats.metrics > 0) noteBody += `- Metrics mentioned: ${cats.metrics}\n`; + if (cats.date_times > 0) noteBody += `- Dates/times discussed: ${cats.date_times}\n`; + } + + // Resources section + noteBody += `\n## Resources\n`; + noteBody += `[View Full Transcript on Fireflies](${meetingData.transcript_url})\n`; + + if (meetingData.video_url) { + noteBody += `[Watch Video Recording](${meetingData.video_url})\n`; + } + + if (meetingData.audio_url) { + noteBody += `[Listen to Audio](${meetingData.audio_url})\n`; + } + + if (meetingData.meeting_link) { + noteBody += `[Original Meeting Link](${meetingData.meeting_link})\n`; + } + + return noteBody; + } + + static toMeetingCreateInput( + meetingData: FirefliesMeetingData, + noteId?: string + ): MeetingCreateInput { + const durationMinutes = Math.round(meetingData.duration); + const hasSummary = Boolean(meetingData.summary?.overview || meetingData.summary?.action_items?.length); + const hasAnalytics = Boolean(meetingData.analytics?.sentiments); + + // Build input object with only defined values (omit null fields) + const input: MeetingCreateInput = { + name: meetingData.title, + meetingDate: meetingData.date, + duration: durationMinutes, + actionItemsCount: meetingData.summary?.action_items?.length || 0, + firefliesMeetingId: meetingData.id, + }; + + // Add direct relationship to note if noteId is provided + if (noteId) { + input.noteId = noteId; + } + + // Basic fields (All plans) + if (meetingData.organizer_email) { + input.organizerEmail = meetingData.organizer_email; + } + if (meetingData.transcript_url?.trim()) { + input.transcriptUrl = { + primaryLinkUrl: meetingData.transcript_url, + primaryLinkLabel: 'View Transcript' + }; + } + if (meetingData.meeting_link?.trim()) { + input.meetingLink = { + primaryLinkUrl: meetingData.meeting_link, + primaryLinkLabel: 'Join Meeting' + }; + } + + // Pro+ fields (transcript, summary, notes, keywords, audio) + if (meetingData.sentences?.length) { + input.transcript = this.formatTranscript(meetingData.sentences); + } + if (meetingData.summary?.overview) { + input.overview = meetingData.summary.overview; + } + if (meetingData.summary?.notes) { + input.notes = meetingData.summary.notes; + } + if (meetingData.summary?.keywords?.length) { + input.keywords = meetingData.summary.keywords.join(', '); + } + if (meetingData.audio_url?.trim()) { + input.audioUrl = { + primaryLinkUrl: meetingData.audio_url, + primaryLinkLabel: 'Listen to Audio' + }; + } + + // Business+ fields (analytics, video, detailed summary) + if (meetingData.summary?.meeting_type) { + input.meetingType = meetingData.summary.meeting_type; + } + if (meetingData.summary?.topics_discussed?.length) { + input.topics = meetingData.summary.topics_discussed.join(', '); + } + if (meetingData.analytics?.sentiments) { + const sentiments = meetingData.analytics.sentiments; + input.positivePercent = sentiments.positive_pct; + input.negativePercent = sentiments.negative_pct; + input.neutralPercent = sentiments.neutral_pct; + } + if (meetingData.video_url?.trim()) { + input.videoUrl = { + primaryLinkUrl: meetingData.video_url, + primaryLinkLabel: 'Watch Video' + }; + } + + // Import status based on data completeness + const isPartial = !hasSummary && !hasAnalytics; + input.importStatus = isPartial ? 'PARTIAL' : 'SUCCESS'; + input.lastImportAttempt = new Date().toISOString(); + input.importAttempts = 1; + + return input; + } + + static toFailedMeetingCreateInput( + meetingId: string, + title: string, + error: string, + attempts: number = 1 + ): MeetingCreateInput { + const currentDate = new Date().toISOString(); + + return { + name: title || `Failed Meeting Import - ${meetingId}`, + meetingDate: currentDate, + duration: 0, + actionItemsCount: 0, + firefliesMeetingId: meetingId, + importStatus: 'FAILED', + importError: error, + lastImportAttempt: currentDate, + importAttempts: attempts, + }; + } +} + diff --git a/packages/twenty-apps/community/fireflies/src/historical-importer.ts b/packages/twenty-apps/community/fireflies/src/historical-importer.ts new file mode 100644 index 0000000000..ebebef071c --- /dev/null +++ b/packages/twenty-apps/community/fireflies/src/historical-importer.ts @@ -0,0 +1,161 @@ +import { type FirefliesApiClient } from './fireflies-api-client'; +import { MeetingFormatter } from './formatters'; +import { createLogger } from './logger'; +import { type TwentyCrmService } from './twenty-crm-service'; +import type { + FirefliesPlan, + FirefliesTranscriptListOptions, + SummaryFetchConfig, +} from './types'; + +const logger = createLogger('historical-importer'); + +export type HistoricalImportFilters = FirefliesTranscriptListOptions; + +export type HistoricalImportOptions = { + dryRun?: boolean; + autoCreateContacts: boolean; + summaryConfig: SummaryFetchConfig; + plan: FirefliesPlan; +}; + +export type HistoricalImportResult = { + dryRun: boolean; + totalListed: number; + imported: number; + skippedExisting: number; + failed: Array<{ meetingId: string; reason: string }>; + summaryPending: number; + statuses: Array<{ + meetingId: string; + title?: string; + status: 'imported' | 'skipped_existing' | 'failed' | 'dry_run' | 'pending_summary'; + reason?: string; + }>; +}; + +export class HistoricalImporter { + private firefliesClient: FirefliesApiClient; + private twentyService: TwentyCrmService; + + constructor(firefliesClient: FirefliesApiClient, twentyService: TwentyCrmService) { + this.firefliesClient = firefliesClient; + this.twentyService = twentyService; + } + + async run( + filters: HistoricalImportFilters, + options: HistoricalImportOptions, + ): Promise { + const { dryRun = false, autoCreateContacts, summaryConfig, plan } = options; + + logger.info('Listing Fireflies transcripts for historical import...'); + const transcripts = await this.firefliesClient.listTranscripts(filters); + logger.info(`Found ${transcripts.length} transcript(s) to process`); + + let imported = 0; + let skippedExisting = 0; + let summaryPending = 0; + const failed: Array<{ meetingId: string; reason: string }> = []; + const statuses: HistoricalImportResult['statuses'] = []; + + for (const transcript of transcripts) { + const meetingId = transcript.id; + + try { + const existing = await this.twentyService.findMeetingByFirefliesId(meetingId); + if (existing) { + logger.debug(`Skipping ${meetingId}: already exists in Twenty (${existing.id})`); + skippedExisting += 1; + statuses.push({ + meetingId, + title: transcript.title, + status: 'skipped_existing', + }); + continue; + } + + logger.info(`Fetching meeting ${meetingId} details`); + const { data: meetingData, summaryReady } = + await this.firefliesClient.fetchMeetingDataWithRetry( + meetingId, + summaryConfig, + plan, + ); + + const isPendingSummary = summaryReady === false; + if (isPendingSummary) { + summaryPending += 1; + } + + if (dryRun) { + logger.info(`[dry-run] Would import meeting "${meetingData.title}" (${meetingId})`); + imported += 1; + statuses.push({ + meetingId, + title: meetingData.title, + status: isPendingSummary ? 'pending_summary' : 'dry_run', + reason: isPendingSummary ? 'summary not ready' : undefined, + }); + continue; + } + + const { matchedContacts, unmatchedParticipants } = + await this.twentyService.matchParticipantsToContacts( + meetingData.participants, + ); + + const newContactIds = autoCreateContacts + ? await this.twentyService.createContactsForUnmatched(unmatchedParticipants) + : []; + const allContactIds = [...matchedContacts.map(({ id }) => id), ...newContactIds]; + + const noteBody = MeetingFormatter.formatNoteBody(meetingData); + const noteId = await this.twentyService.createNoteOnly( + `Meeting: ${meetingData.title}`, + noteBody, + ); + + const meetingInput = MeetingFormatter.toMeetingCreateInput(meetingData, noteId); + const createdMeetingId = await this.twentyService.createMeeting(meetingInput); + + for (const contactId of allContactIds) { + await this.twentyService.createNoteTarget(noteId, contactId); + } + + logger.info( + `Imported meeting "${meetingData.title}" (${meetingId}) as ${createdMeetingId}`, + ); + imported += 1; + statuses.push({ + meetingId, + title: meetingData.title, + status: isPendingSummary ? 'pending_summary' : 'imported', + reason: isPendingSummary ? 'summary not ready' : undefined, + }); + } catch (error) { + const reason = error instanceof Error ? error.message : String(error); + logger.error(`Failed to import meeting ${meetingId}: ${reason}`); + failed.push({ meetingId, reason }); + statuses.push({ + meetingId, + title: transcript.title, + status: 'failed', + reason, + }); + } + } + + return { + dryRun, + totalListed: transcripts.length, + imported, + skippedExisting, + failed, + summaryPending, + statuses, + }; + } +} + + diff --git a/packages/twenty-apps/community/fireflies/src/index.ts b/packages/twenty-apps/community/fireflies/src/index.ts new file mode 100644 index 0000000000..4549f1b1e1 --- /dev/null +++ b/packages/twenty-apps/community/fireflies/src/index.ts @@ -0,0 +1,31 @@ +// Main exports for the Fireflies integration +export { config, main } from './receive-fireflies-notes'; + +// Types +export type { + FirefliesMeetingData, + FirefliesParticipant, + FirefliesWebhookPayload, + ProcessResult, + SummaryFetchConfig, + SummaryStrategy +} from './types'; + +// Services (for advanced usage) +export { FirefliesApiClient } from './fireflies-api-client'; +export { MeetingFormatter } from './formatters'; +export { TwentyCrmService } from './twenty-crm-service'; +export { WebhookHandler } from './webhook-handler'; + +// Objects +export { Meeting } from './objects'; + +// Utilities +export { createLogger } from './logger'; +export { getApiUrl, getSummaryFetchConfig, shouldAutoCreateContacts, toBoolean } from './utils'; +export { + getWebhookSecretFingerprint, + isValidFirefliesPayload, + verifyWebhookSignature +} from './webhook-validator'; + diff --git a/packages/twenty-apps/community/fireflies/src/logger.ts b/packages/twenty-apps/community/fireflies/src/logger.ts new file mode 100644 index 0000000000..88d49cab47 --- /dev/null +++ b/packages/twenty-apps/community/fireflies/src/logger.ts @@ -0,0 +1,142 @@ +export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent'; + +export type LoggerConfig = { + logLevel: LogLevel; + isTestEnvironment: boolean; + captureForResponse: boolean; +}; + +const LOG_LEVELS: Record = { + debug: 0, + info: 1, + warn: 2, + error: 3, + silent: 4, +}; + +const loggerRegistry = new Set(); + +export class AppLogger { + private config: LoggerConfig; + private context: string; + private capturedLogs: string[] = []; + + constructor(context: string) { + this.context = context; + this.config = { + logLevel: this.parseLogLevel(process.env.LOG_LEVEL || 'error'), + isTestEnvironment: process.env.NODE_ENV === 'test' || process.env.JEST_WORKER_ID !== undefined, + captureForResponse: process.env.CAPTURE_LOGS === 'true', + }; + + // Silence logs in test environment unless explicitly overridden + if (this.config.isTestEnvironment && process.env.LOG_LEVEL === undefined) { + this.config.logLevel = 'silent'; + } + } + + private parseLogLevel(level: string): LogLevel { + const normalizedLevel = level.toLowerCase() as LogLevel; + return Object.keys(LOG_LEVELS).includes(normalizedLevel) ? normalizedLevel : 'error'; + } + + private shouldLog(level: LogLevel): boolean { + return LOG_LEVELS[level] >= LOG_LEVELS[this.config.logLevel]; + } + + private safeStringify(value: unknown): string { + try { + if (typeof value === 'string') return value; + return JSON.stringify(value); + } catch { + return '[unserializable]'; + } + } + + private captureLog(level: LogLevel, message: string, ...args: unknown[]): void { + if (!this.config.captureForResponse) { + return; + } + + const timestamp = new Date().toISOString(); + const formattedMessage = + args.length > 0 + ? `${message} ${args.map((arg) => this.safeStringify(arg)).join(' ')}` + : message; + + this.capturedLogs.push( + `[${timestamp}] [${level.toUpperCase()}] [${this.context}] ${formattedMessage}`, + ); + } + + debug(message: string, ...args: unknown[]): void { + this.captureLog('debug', message, ...args); + if (this.shouldLog('debug')) { + // eslint-disable-next-line no-console + console.log(`[${this.context}] ${message}`, ...args); + } + } + + info(message: string, ...args: unknown[]): void { + this.captureLog('info', message, ...args); + if (this.shouldLog('info')) { + // eslint-disable-next-line no-console + console.log(`[${this.context}] ${message}`, ...args); + } + } + + warn(message: string, ...args: unknown[]): void { + this.captureLog('warn', message, ...args); + if (this.shouldLog('warn')) { + // eslint-disable-next-line no-console + console.warn(`[${this.context}] ${message}`, ...args); + } + } + + error(message: string, ...args: unknown[]): void { + this.captureLog('error', message, ...args); + if (this.shouldLog('error')) { + // eslint-disable-next-line no-console + console.error(`[${this.context}] ${message}`, ...args); + } + } + + // For fatal errors, security issues, or data corruption - always visible + critical(message: string, ...args: unknown[]): void { + this.captureLog('error', `CRITICAL: ${message}`, ...args); + // eslint-disable-next-line no-console + console.error(`[${this.context}] CRITICAL: ${message}`, ...args); + } + + getCapturedLogs(): string[] { + return [...this.capturedLogs]; + } + + clearCapturedLogs(): void { + this.capturedLogs = []; + } +} + +export const createLogger = (context: string): AppLogger => { + const logger = new AppLogger(context); + loggerRegistry.add(logger); + return logger; +}; + +export const removeLogger = (logger: AppLogger): void => { + loggerRegistry.delete(logger); +}; + +export const getAllCapturedLogs = (): string[] => { + const allLogs: string[] = []; + for (const logger of loggerRegistry) { + allLogs.push(...logger.getCapturedLogs()); + } + return allLogs.sort(); +}; + +export const clearAllCapturedLogs = (): void => { + for (const logger of loggerRegistry) { + logger.clearCapturedLogs(); + } +}; diff --git a/packages/twenty-apps/community/fireflies/src/objects/index.ts b/packages/twenty-apps/community/fireflies/src/objects/index.ts new file mode 100644 index 0000000000..00189441a4 --- /dev/null +++ b/packages/twenty-apps/community/fireflies/src/objects/index.ts @@ -0,0 +1,3 @@ +export { Meeting } from './meeting'; + + diff --git a/packages/twenty-apps/community/fireflies/src/objects/meeting.ts b/packages/twenty-apps/community/fireflies/src/objects/meeting.ts index cf83f35cf2..ce78df3dc2 100644 --- a/packages/twenty-apps/community/fireflies/src/objects/meeting.ts +++ b/packages/twenty-apps/community/fireflies/src/objects/meeting.ts @@ -1,6 +1,6 @@ -import { ObjectMetadata } from 'twenty-sdk/application'; +import { Object } from 'twenty-sdk'; -@ObjectMetadata({ +@Object({ universalIdentifier: 'd1831348-b4a4-4426-9c0b-0af19e7a9c27', nameSingular: 'meeting', namePlural: 'meetings', diff --git a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/receive-fireflies-notes.ts b/packages/twenty-apps/community/fireflies/src/receive-fireflies-notes.ts similarity index 82% rename from packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/receive-fireflies-notes.ts rename to packages/twenty-apps/community/fireflies/src/receive-fireflies-notes.ts index 5293d1130c..9f8492fcfe 100644 --- a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/receive-fireflies-notes.ts +++ b/packages/twenty-apps/community/fireflies/src/receive-fireflies-notes.ts @@ -1,4 +1,4 @@ -import { type ServerlessFunctionConfig } from 'twenty-sdk/application'; +import { type FunctionConfig } from 'twenty-sdk'; import type { ProcessResult } from './types'; import { WebhookHandler } from './webhook-handler'; @@ -10,7 +10,7 @@ export const main = async ( return handler.handle(params, headers); }; -export const config: ServerlessFunctionConfig = { +export const config: FunctionConfig = { universalIdentifier: '2d3ea303-667c-4bbe-9e3d-db6ffb9d6c74', name: 'receive-fireflies-notes', description: @@ -22,7 +22,8 @@ export const config: ServerlessFunctionConfig = { type: 'route', path: '/webhook/fireflies', httpMethod: 'POST', - isAuthRequired: true, + isAuthRequired: false, }, ], }; + diff --git a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/twenty-crm-service.ts b/packages/twenty-apps/community/fireflies/src/twenty-crm-service.ts similarity index 81% rename from packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/twenty-crm-service.ts rename to packages/twenty-apps/community/fireflies/src/twenty-crm-service.ts index 051ca4573c..de713ecdd7 100644 --- a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/twenty-crm-service.ts +++ b/packages/twenty-apps/community/fireflies/src/twenty-crm-service.ts @@ -43,6 +43,20 @@ export class TwentyCrmService { return response.data?.meetings?.edges?.[0]?.node; } + async findMeetingByFirefliesId(meetingId: string): Promise { + const query = ` + query FindMeetingByFirefliesId($meetingId: String!) { + meetings(filter: { firefliesMeetingId: { eq: $meetingId } }) { + edges { node { id } } + } + } + `; + + const variables = { meetingId }; + const response = await this.gqlRequest(query, variables); + return response.data?.meetings?.edges?.[0]?.node; + } + async matchParticipantsToContacts( participants: FirefliesParticipant[], ): Promise<{ @@ -53,21 +67,18 @@ export class TwentyCrmService { return { matchedContacts: [], unmatchedParticipants: [] }; } - // Split participants into those with emails and those with names only const participantsWithEmails = participants.filter(p => p.email && p.email.trim()); const participantsNameOnly = participants.filter(p => !p.email || !p.email.trim()); let matchedContacts: Contact[] = []; let unmatchedParticipants: FirefliesParticipant[] = []; - // 1. Match by email first if (participantsWithEmails.length > 0) { const emailMatches = await this.matchByEmail(participantsWithEmails); matchedContacts.push(...emailMatches.matchedContacts); unmatchedParticipants.push(...emailMatches.unmatchedParticipants); } - // 2. For participants without emails, try name-based matching if (participantsNameOnly.length > 0) { const nameMatches = await this.matchByName(participantsNameOnly, matchedContacts); matchedContacts.push(...nameMatches.matchedContacts); @@ -126,7 +137,6 @@ export class TwentyCrmService { const matchedContacts: Contact[] = []; const unmatchedParticipants: FirefliesParticipant[] = []; - // Get set of already matched contact IDs to avoid duplicates const alreadyMatchedIds = new Set(alreadyMatchedContacts.map(c => c.id)); for (const participant of participants) { @@ -152,27 +162,37 @@ export class TwentyCrmService { const firstName = nameParts[0]; const lastName = nameParts.slice(1).join(' '); - // Try exact name match first - let query = ` - query FindPeopleByName($firstName: String!, $lastName: String) { - people(filter: { - and: [ - { name: { firstName: { eq: $firstName } } } - ${lastName ? '{ name: { lastName: { eq: $lastName } } }' : ''} - ] - }) { - edges { node { id emails { primaryEmail } name { firstName lastName } } } - } - } - `; + const hasLastName = Boolean(lastName); - let variables: any = { firstName }; - if (lastName) { - variables.lastName = lastName; - } + const query = hasLastName + ? ` + query FindPeopleByName($firstName: String!, $lastName: String!) { + people(filter: { + and: [ + { name: { firstName: { eq: $firstName } } } + { name: { lastName: { eq: $lastName } } } + ] + }) { + edges { node { id emails { primaryEmail } name { firstName lastName } } } + } + } + ` + : ` + query FindPeopleByName($firstName: String!) { + people(filter: { + name: { firstName: { eq: $firstName } } + }) { + edges { node { id emails { primaryEmail } name { firstName lastName } } } + } + } + `; + + const variables: Record = hasLastName + ? { firstName, lastName } + : { firstName }; try { - const response = await this.gqlRequest(query, variables); + const response = await this.gqlRequest<{ people: { edges: Array<{ node: { id: string; emails?: { primaryEmail?: string }; name?: { firstName?: string; lastName?: string } } }> } }>(query, variables); const people = response.data?.people?.edges; if (people && people.length > 0) { @@ -183,9 +203,8 @@ export class TwentyCrmService { }; } - // If no exact match and we have a last name, try fuzzy matching - if (lastName) { - query = ` + if (hasLastName) { + const fuzzyQuery = ` query FindPeopleByNameFuzzy($firstName: String!) { people(filter: { name: { firstName: { ilike: $firstName } } }) { edges { node { id emails { primaryEmail } name { firstName lastName } } } @@ -193,12 +212,11 @@ export class TwentyCrmService { } `; - const fuzzyResponse = await this.gqlRequest(query, { firstName: `%${firstName}%` }); + const fuzzyResponse = await this.gqlRequest<{ people: { edges: Array<{ node: { id: string; emails?: { primaryEmail?: string }; name?: { firstName?: string; lastName?: string } } }> } }>(fuzzyQuery, { firstName: `%${firstName}%` }); const fuzzyPeople = fuzzyResponse.data?.people?.edges; if (fuzzyPeople && fuzzyPeople.length > 0) { - // Find best match by checking if last name contains our target - const bestMatch = fuzzyPeople.find((edge: any) => { + const bestMatch = fuzzyPeople.find((edge) => { const personLastName = edge.node.name?.lastName || ''; return personLastName.toLowerCase().includes(lastName.toLowerCase()); }); @@ -215,7 +233,6 @@ export class TwentyCrmService { return null; } catch { - // Silently fail - don't break the entire process for a single contact lookup return null; } } @@ -225,17 +242,14 @@ export class TwentyCrmService { ): Promise { const newContactIds: string[] = []; - // Split participants into those with emails and those with names only const participantsWithEmails = participants.filter(p => p.email && p.email.trim()); const participantsNameOnly = participants.filter(p => !p.email || !p.email.trim()); - // Process participants with emails if (participantsWithEmails.length > 0) { const emailContactIds = await this.createContactsWithEmails(participantsWithEmails); newContactIds.push(...emailContactIds); } - // Process participants with names only if (participantsNameOnly.length > 0) { const nameContactIds = await this.createContactsNameOnly(participantsNameOnly); newContactIds.push(...nameContactIds); @@ -247,7 +261,6 @@ export class TwentyCrmService { private async createContactsWithEmails(participants: FirefliesParticipant[]): Promise { const newContactIds: string[] = []; - // Deduplicate participants by email to prevent duplicate contact creation const uniqueParticipants = participants.reduce((unique, participant) => { const existing = unique.find(p => p.email === participant.email); if (!existing) { @@ -276,7 +289,10 @@ export class TwentyCrmService { }; try { - const response = await this.gqlRequest(mutation, variables); + const response = await this.gqlRequest(mutation, variables, { + suppressErrorCodes: ['BAD_USER_INPUT'], + suppressErrorMessageIncludes: ['Duplicate Emails', 'duplicate entry'], + }); if (!response.data?.createPerson?.id) { throw new Error(`Failed to create contact for ${participant.email}`); } @@ -297,7 +313,6 @@ export class TwentyCrmService { private async createContactsNameOnly(participants: FirefliesParticipant[]): Promise { const newContactIds: string[] = []; - // Deduplicate participants by name to prevent duplicate contact creation const uniqueParticipants = participants.reduce((unique, participant) => { const existing = unique.find(p => p.name.toLowerCase().trim() === participant.name.toLowerCase().trim() @@ -311,7 +326,6 @@ export class TwentyCrmService { }, []); for (const participant of uniqueParticipants) { - // Check if we already have a contact with this exact name to avoid duplicates const existingContact = await this.findContactByName(participant.name); if (existingContact) { logger.warn(`Contact with name "${participant.name}" already exists. Skipping creation.`); @@ -330,8 +344,6 @@ export class TwentyCrmService { const variables = { data: { name: { firstName, lastName }, - // Note: We don't set emails for name-only participants - // This will create a contact without an email address }, }; @@ -346,7 +358,6 @@ export class TwentyCrmService { } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; logger.warn(`Failed to create contact for ${participant.name}: ${errorMessage}`); - // Continue processing other participants instead of failing completely continue; } } @@ -409,28 +420,7 @@ export class TwentyCrmService { }, }; - await this.gqlRequest(mutation, variables); - } - - async createMeetingTarget(meetingId: string, contactId: string): Promise { - const mutation = ` - mutation CreateMeetingTarget($data: NoteTargetCreateInput!) { - createNoteTarget(data: $data) { - id - meetingId - personId - } - } - `; - - const variables = { - data: { - meetingId, - personId: contactId, - }, - }; - - await this.gqlRequest(mutation, variables); + await this.gqlRequest<{ createNoteTarget: { id: string; noteId: string; personId: string } }>(mutation, variables); } async createMeeting(meetingData: MeetingCreateInput): Promise { @@ -442,7 +432,6 @@ export class TwentyCrmService { const variables = { data: meetingData }; - // Debug: log the variables being sent if (!this.isTestEnvironment) { logger.debug('createMeeting variables:', JSON.stringify(variables, null, 2)); } @@ -456,7 +445,8 @@ export class TwentyCrmService { private async gqlRequest( query: string, - variables?: Record + variables?: Record, + options?: { suppressErrorCodes?: string[]; suppressErrorMessageIncludes?: string[] } ): Promise> { const url = `${this.apiUrl}/graphql`; @@ -500,7 +490,16 @@ export class TwentyCrmService { return json; } catch (error) { - logger.error('GraphQL request error:', error); + const message = error instanceof Error ? error.message : String(error); + const suppressByCode = options?.suppressErrorCodes?.some((code) => + message.includes(code), + ); + const suppressByMessage = options?.suppressErrorMessageIncludes?.some((substring) => + message.includes(substring), + ); + if (!suppressByCode && !suppressByMessage) { + logger.error('GraphQL request error:', error); + } throw error; } } @@ -525,7 +524,15 @@ export class TwentyCrmService { return response.data.createMeeting.id; } - async findFailedMeetings(): Promise { + async findFailedMeetings(): Promise> { const query = ` query FindFailedMeetings { meetings(filter: { importStatus: { eq: "FAILED" } }) { @@ -544,8 +551,8 @@ export class TwentyCrmService { } `; - const response = await this.gqlRequest(query); - return response.data?.meetings?.edges?.map((edge: any) => edge.node) || []; + const response = await this.gqlRequest<{ meetings: { edges: Array<{ node: { id: string; name: string; firefliesMeetingId: string; importError: string; lastImportAttempt: string; importAttempts: number; createdAt: string } }> } }>(query); + return response.data?.meetings?.edges?.map((edge) => edge.node) || []; } async retryFailedMeeting(meetingId: string, updatedData: Partial): Promise { @@ -564,7 +571,7 @@ export class TwentyCrmService { } }; - await this.gqlRequest(mutation, variables); + await this.gqlRequest<{ updateMeeting: { id: string } }>(mutation, variables); } } diff --git a/packages/twenty-apps/community/fireflies/src/types.ts b/packages/twenty-apps/community/fireflies/src/types.ts new file mode 100644 index 0000000000..373e5d35dd --- /dev/null +++ b/packages/twenty-apps/community/fireflies/src/types.ts @@ -0,0 +1,235 @@ +// Fireflies API Types +export type FirefliesParticipant = { + email: string; + name: string; +}; + +export type FirefliesWebhookPayload = { + meetingId: string; + eventType: string; + clientReferenceId?: string; +}; + +// Transcript sentence from Fireflies API +export type FirefliesSentence = { + index: number; + speaker_name: string; + text: string; + start_time: string; + end_time: string; + ai_filters?: { + task?: boolean; + question?: boolean; + sentiment?: string; + }; +}; + +// Speaker analytics from Fireflies API (Business+) +export type FirefliesSpeakerAnalytics = { + speaker_id: string; + name: string; + duration: number; + word_count: number; + longest_monologue: number; + filler_words: number; + questions: number; + words_per_minute: number; +}; + +// Based on Fireflies GraphQL API transcript schema +// See: https://docs.fireflies.ai/graphql-api/query/transcript +export type FirefliesMeetingData = { + id: string; + title: string; + date: string; + duration: number; + participants: FirefliesParticipant[]; + organizer_email?: string; + // Full transcript (Pro+) + sentences?: FirefliesSentence[]; + summary: { + // Pro+ fields + action_items: string[]; + keywords?: string[]; + overview: string; + notes?: string; // Detailed AI-generated meeting notes + gist?: string; // 1-sentence summary + bullet_gist?: string; // Bullet point summary with emojis + short_summary?: string; // Single paragraph summary + short_overview?: string; // Brief overview + outline?: string; // Meeting outline with timestamps + shorthand_bullet?: string; + // Business+ fields + topics_discussed?: string[]; + meeting_type?: string; + transcript_chapters?: string[]; + }; + // Business+ analytics + analytics?: { + sentiments?: { + positive_pct: number; + negative_pct: number; + neutral_pct: number; + }; + categories?: { + questions: number; + tasks: number; + metrics: number; + date_times: number; + }; + speakers?: FirefliesSpeakerAnalytics[]; + }; + meeting_info?: { + summary_status?: string; + }; + // URLs + transcript_url: string; + audio_url?: string; // Pro+ + video_url?: string; // Business+ + meeting_link?: string; // All plans + summary_status?: string; +}; + +export type FirefliesTranscriptListItem = { + id: string; + title: string; + date?: string; + duration?: number; + organizer_email?: string; + participants?: string[]; + transcript_url?: string; + meeting_link?: string; + summary_status?: string; +}; + +export type FirefliesTranscriptListOptions = { + limit?: number; + skip?: number; + organizers?: string[]; + participants?: string[]; + hostEmail?: string; + participantEmail?: string; + userId?: string; + channelId?: string; + mine?: boolean; + fromDate?: number; + toDate?: number; + pageSize?: number; + maxRecords?: number; +}; + +// Configuration Types +export type SummaryStrategy = 'immediate_only' | 'immediate_with_retry' | 'delayed_polling' | 'basic_only'; + +export type SummaryFetchConfig = { + strategy: SummaryStrategy; + retryAttempts: number; + retryDelay: number; + pollInterval: number; + maxPolls: number; +}; + +export const FIREFLIES_PLANS = { + FREE: 'free', + PRO: 'pro', + BUSINESS: 'business', + ENTERPRISE: 'enterprise', +} as const; + +export type FirefliesPlan = typeof FIREFLIES_PLANS[keyof typeof FIREFLIES_PLANS]; + +export type WebhookConfig = { + secret: string; + apiUrl: string; +}; + +// Processing Result Types +export type ProcessResult = { + success: boolean; + meetingId?: string; + noteIds?: string[]; + newContacts?: string[]; + errors?: string[]; + debug?: string[]; + summaryReady?: boolean; + summaryPending?: boolean; + enhancementScheduled?: boolean; + actionItemsCount?: number; + sentimentAnalysis?: { + positive_pct: number; + negative_pct: number; + neutral_pct: number; + }; + meetingType?: string; + keyTopics?: string[]; +}; + +// Twenty CRM Types +export type GraphQLResponse = { + data: T; + errors?: Array<{ + message?: string; + extensions?: { code?: string } + }>; +}; + +export type IdNode = { id: string }; + +export type FindMeetingResponse = { + meetings: { edges: Array<{ node: IdNode }> }; +}; + +export type FindPeopleResponse = { + people: { edges: Array<{ node: { id: string; emails: { primaryEmail: string } } }> }; +}; + +export type CreatePersonResponse = { + createPerson: { id: string } +}; + +export type CreateNoteResponse = { + createNote: { id: string } +}; + +export type CreateMeetingResponse = { + createMeeting: { id: string } +}; + +export type Contact = { + id: string; + email: string; +}; + +// Twenty CRM Meeting custom field input +// Maps to fields defined in add-meeting-fields.ts +export type MeetingCreateInput = { + name: string; + noteId?: string | null; + // Basic fields (All plans) + meetingDate: string; + duration: number; + firefliesMeetingId: string; + organizerEmail?: string | null; + transcriptUrl?: { primaryLinkUrl: string; primaryLinkLabel: string } | null; + meetingLink?: { primaryLinkUrl: string; primaryLinkLabel: string } | null; + // Pro+ fields + transcript?: string | null; + overview?: string | null; + notes?: string | null; + keywords?: string | null; + audioUrl?: { primaryLinkUrl: string; primaryLinkLabel: string } | null; + // Business+ fields + meetingType?: string | null; + topics?: string | null; + actionItemsCount: number; + positivePercent?: number | null; + negativePercent?: number | null; + neutralPercent?: number | null; + videoUrl?: { primaryLinkUrl: string; primaryLinkLabel: string } | null; + // Import tracking + importStatus?: 'SUCCESS' | 'PARTIAL' | 'FAILED' | 'PENDING' | 'RETRYING' | null; + importError?: string | null; + lastImportAttempt?: string | null; + importAttempts?: number | null; +}; + diff --git a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/utils.ts b/packages/twenty-apps/community/fireflies/src/utils.ts similarity index 71% rename from packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/utils.ts rename to packages/twenty-apps/community/fireflies/src/utils.ts index 969c655c9e..48cfa1d9df 100644 --- a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/utils.ts +++ b/packages/twenty-apps/community/fireflies/src/utils.ts @@ -1,11 +1,11 @@ +import { FIREFLIES_PLANS, type FirefliesPlan, type SummaryFetchConfig, type SummaryStrategy } from './types'; + export const toBoolean = (value: string | undefined, defaultValue: boolean): boolean => { if (value === undefined) return defaultValue; const normalized = value.trim().toLowerCase(); return normalized === 'true' || normalized === '1' || normalized === 'yes'; }; -import type { SummaryFetchConfig, SummaryStrategy } from './types'; - export const getApiUrl = (): string => { return process.env.SERVER_URL || 'http://localhost:3000'; }; @@ -28,3 +28,14 @@ export const shouldAutoCreateContacts = (): boolean => { return toBoolean(process.env.AUTO_CREATE_CONTACTS, true); }; +export const getFirefliesPlan = (): FirefliesPlan => { + const plan = (process.env.FIREFLIES_PLAN || FIREFLIES_PLANS.FREE).toLowerCase(); + if (plan === FIREFLIES_PLANS.BUSINESS || plan === FIREFLIES_PLANS.ENTERPRISE) { + return plan as FirefliesPlan; + } + if (plan === FIREFLIES_PLANS.PRO) { + return FIREFLIES_PLANS.PRO; + } + return FIREFLIES_PLANS.FREE; +}; + diff --git a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/webhook-handler.ts b/packages/twenty-apps/community/fireflies/src/webhook-handler.ts similarity index 60% rename from packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/webhook-handler.ts rename to packages/twenty-apps/community/fireflies/src/webhook-handler.ts index 901d1bc5ce..2a8ae38591 100644 --- a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/webhook-handler.ts +++ b/packages/twenty-apps/community/fireflies/src/webhook-handler.ts @@ -1,9 +1,9 @@ import { FirefliesApiClient } from './fireflies-api-client'; import { MeetingFormatter } from './formatters'; -import { createLogger } from './logger'; +import { clearAllCapturedLogs, createLogger, getAllCapturedLogs } from './logger'; import { TwentyCrmService } from './twenty-crm-service'; import type { FirefliesWebhookPayload, ProcessResult } from './types'; -import { getApiUrl, getSummaryFetchConfig, shouldAutoCreateContacts } from './utils'; +import { getApiUrl, getFirefliesPlan, getSummaryFetchConfig, shouldAutoCreateContacts } from './utils'; import { getWebhookSecretFingerprint, isValidFirefliesPayload, @@ -12,17 +12,28 @@ import { declare const process: { env: Record }; -const logger = createLogger('fireflies'); - export class WebhookHandler { private debug: string[] = []; - private isTestEnvironment: boolean; + private logger: ReturnType; constructor() { - this.isTestEnvironment = process.env.NODE_ENV === 'test' || process.env.JEST_WORKER_ID !== undefined; + this.logger = createLogger('fireflies'); + } + + private addDebugLogs(result: ProcessResult): ProcessResult { + if (process.env.CAPTURE_LOGS === 'true') { + const captured = getAllCapturedLogs(); + result.debug = [...this.debug, ...captured]; + } else { + delete result.debug; + } + return result; } async handle(params: unknown, headers?: Record): Promise { + clearAllCapturedLogs(); + this.debug = []; + const result: ProcessResult = { success: false, noteIds: [], @@ -31,19 +42,27 @@ export class WebhookHandler { }; try { - logger.debug('invoked'); - logger.debug(`apiUrl=${getApiUrl()}`); + this.logger.debug('invoked'); + this.logger.debug(`apiUrl=${getApiUrl()}`); + const paramKeys = + params && typeof params === 'object' + ? Object.keys(params as Record) + : []; + this.debug.push( + `paramsType=${typeof params}`, + `paramKeys=${paramKeys.join(',') || 'none'}` + ); // 0) Validate environment configuration const firefliesApiKey = process.env.FIREFLIES_API_KEY || ''; const twentyApiKey = process.env.TWENTY_API_KEY || ''; if (!firefliesApiKey) { - logger.critical('FIREFLIES_API_KEY not configured - this is a critical configuration error'); + this.logger.critical('FIREFLIES_API_KEY not configured - this is a critical configuration error'); throw new Error('FIREFLIES_API_KEY environment variable is required'); } if (!twentyApiKey) { - logger.critical('TWENTY_API_KEY not configured - this is a critical configuration error'); + this.logger.critical('TWENTY_API_KEY not configured - this is a critical configuration error'); throw new Error('TWENTY_API_KEY environment variable is required'); } @@ -51,28 +70,30 @@ export class WebhookHandler { const { payload, extractedHeaders } = this.parsePayload(params); const finalHeaders = extractedHeaders || headers; - logger.debug(`payload meetingId=${payload.meetingId} eventType="${payload.eventType}"`); + this.logger.debug(`payload meetingId=${payload.meetingId} eventType="${payload.eventType}"`); // 2) Verify webhook signature const webhookSecret = process.env.FIREFLIES_WEBHOOK_SECRET || ''; const secretFingerprint = getWebhookSecretFingerprint(webhookSecret); - logger.debug(`webhook secret fingerprint=${secretFingerprint}`); + this.logger.debug(`webhook secret fingerprint=${secretFingerprint}`); this.verifySignature(payload, finalHeaders, webhookSecret); - logger.debug('signature verification: ok'); + this.logger.debug('signature verification: ok'); // 3) Fetch meeting data from Fireflies const summaryConfig = getSummaryFetchConfig(); - logger.debug(`summary strategy: ${summaryConfig.strategy} (retryAttempts=${summaryConfig.retryAttempts}, retryDelay=${summaryConfig.retryDelay}ms)`); - logger.debug(`fetching meeting data from Fireflies API`); + const firefliesPlan = getFirefliesPlan(); + this.logger.debug(`summary strategy: ${summaryConfig.strategy} (retryAttempts=${summaryConfig.retryAttempts}, retryDelay=${summaryConfig.retryDelay}ms)`); + this.logger.debug(`fetching meeting data from Fireflies API`); const firefliesClient = new FirefliesApiClient(firefliesApiKey); const { data: meetingData, summaryReady } = await firefliesClient.fetchMeetingDataWithRetry( payload.meetingId, - summaryConfig + summaryConfig, + firefliesPlan ); - logger.debug(`meeting data fetched: title="${meetingData.title}" summaryReady=${summaryReady}`); + this.logger.debug(`meeting data fetched: title="${meetingData.title}" summaryReady=${summaryReady}`); result.summaryReady = summaryReady; result.summaryPending = !summaryReady; @@ -84,8 +105,7 @@ export class WebhookHandler { result.meetingType = meetingData.summary.meeting_type; if (meetingData.analytics?.sentiments) { - const sentiments = meetingData.analytics.sentiments; - result.sentimentScore = sentiments.positive_pct / 100; + result.sentimentAnalysis = meetingData.analytics.sentiments; } } @@ -95,29 +115,36 @@ export class WebhookHandler { getApiUrl() ); - const existingMeeting = await twentyService.findExistingMeeting(meetingData.title); - if (existingMeeting) { - logger.debug(`meeting already exists id=${existingMeeting.id}`); + const existingMeetingById = await twentyService.findMeetingByFirefliesId(meetingData.id); + if (existingMeetingById) { + this.logger.debug(`meeting already exists by firefliesMeetingId id=${existingMeetingById.id}`); result.success = true; - result.meetingId = existingMeeting.id; - result.debug = this.debug; - return result; + result.meetingId = existingMeetingById.id; + return this.addDebugLogs(result); } - logger.debug('no existing meeting found, proceeding'); + + const existingMeetingByTitle = await twentyService.findExistingMeeting(meetingData.title); + if (existingMeetingByTitle) { + this.logger.debug(`meeting already exists by title id=${existingMeetingByTitle.id}`); + result.success = true; + result.meetingId = existingMeetingByTitle.id; + return this.addDebugLogs(result); + } + this.logger.debug('no existing meeting found, proceeding'); // 5) Match participants to existing contacts - logger.debug(`total participants from API: ${meetingData.participants.length}`); + this.logger.debug(`total participants from API: ${meetingData.participants.length}`); meetingData.participants.forEach((p, idx) => { - logger.debug(`participant ${idx + 1}: name="${p.name}" email="${p.email || 'none'}"`); + this.logger.debug(`participant ${idx + 1}: name="${p.name}" email="${p.email || 'none'}"`); }); const { matchedContacts, unmatchedParticipants } = await twentyService.matchParticipantsToContacts( meetingData.participants ); - logger.debug(`matched=${matchedContacts.length} unmatched=${unmatchedParticipants.length}`); + this.logger.debug(`matched=${matchedContacts.length} unmatched=${unmatchedParticipants.length}`); unmatchedParticipants.forEach((p, idx) => { - logger.debug(`unmatched ${idx + 1}: name="${p.name}" email="${p.email || 'none'}"`); + this.logger.debug(`unmatched ${idx + 1}: name="${p.name}" email="${p.email || 'none'}"`); }); // 6) Optionally create contacts @@ -126,7 +153,7 @@ export class WebhookHandler { ? await twentyService.createContactsForUnmatched(unmatchedParticipants) : []; result.newContacts = newContactIds; - logger.debug(`autoCreate=${autoCreate} createdContacts=${newContactIds.length}`); + this.logger.debug(`autoCreate=${autoCreate} createdContacts=${newContactIds.length}`); // 7) Create note first (so we can link to it from the meeting) const allContactIds = [...matchedContacts.map(({ id }) => id), ...newContactIds]; @@ -136,13 +163,13 @@ export class WebhookHandler { noteBody ); result.noteIds = [noteId]; - logger.debug(`created note id=${noteId}`); + this.logger.debug(`created note id=${noteId}`); // 8) Create meeting with direct relationship to the note const meetingInput = MeetingFormatter.toMeetingCreateInput(meetingData, noteId); - logger.debug(`meeting duration: ${meetingData.duration} min (raw from API) → ${meetingInput.duration} min (rounded)`); + this.logger.debug(`meeting duration: ${meetingData.duration} min (raw from API) → ${meetingInput.duration} min (rounded)`); result.meetingId = await twentyService.createMeeting(meetingInput); - logger.debug(`created meeting id=${result.meetingId} with noteId=${noteId}`); + this.logger.debug(`created meeting id=${result.meetingId} with noteId=${noteId}`); // 9) Link note to participants (Meeting link is handled via the relation field) await this.linkNoteToParticipants( @@ -150,20 +177,19 @@ export class WebhookHandler { noteId, allContactIds ); - logger.debug(`linked note to ${allContactIds.length} participants`); + this.logger.debug(`linked note to ${allContactIds.length} participants`); result.success = true; } catch (error) { const message = error instanceof Error ? error.message : 'Unknown error'; - logger.error(`error: ${message}`); + this.logger.error(`error: ${message}`); result.errors?.push(message); // Try to create a failed meeting record for tracking await this.createFailedMeetingRecord(params, message); } - result.debug = this.debug; - return result; + return this.addDebugLogs(result); } private parsePayload(params: unknown): { payload: FirefliesWebhookPayload; extractedHeaders?: Record } { @@ -172,16 +198,16 @@ export class WebhookHandler { // Handle string-encoded params if (typeof normalizedParams === 'string') { - logger.debug(`received params as string length=${normalizedParams.length}`); + this.logger.debug(`received params as string length=${normalizedParams.length}`); try { const parsed = JSON.parse(normalizedParams); normalizedParams = parsed; if (parsed && typeof parsed === 'object') { const parsedKeys = Object.keys(parsed as Record); - logger.debug(`parsed params keys: ${parsedKeys.join(',') || 'none'}`); + this.logger.debug(`parsed params keys: ${parsedKeys.join(',') || 'none'}`); } } catch (parseError) { - logger.error(`error parsing string params: ${String(parseError)}`); + this.logger.error(`error parsing string params: ${String(parseError)}`); throw new Error('Invalid or missing webhook payload'); } } @@ -197,14 +223,14 @@ export class WebhookHandler { if (wrapper.headers && typeof wrapper.headers === 'object' && !Array.isArray(wrapper.headers)) { extractedHeaders = wrapper.headers as Record; const headerKeys = Object.keys(extractedHeaders); - logger.debug(`extracted headers from wrapper: ${headerKeys.join(',')}`); + this.logger.debug(`extracted headers from wrapper: ${headerKeys.join(',')}`); } const wrapperKeys = ['params', 'payload', 'body', 'data', 'event']; for (const key of wrapperKeys) { const candidate = wrapper[key]; if (isValidFirefliesPayload(candidate)) { - logger.debug(`detected payload under wrapper key "${key}"`); + this.logger.debug(`detected payload under wrapper key "${key}"`); payload = candidate as FirefliesWebhookPayload; break; } @@ -212,7 +238,7 @@ export class WebhookHandler { } if (!payload) { - logger.error('error: Invalid or missing webhook payload'); + this.logger.error('error: Invalid or missing webhook payload'); throw new Error('Invalid or missing webhook payload'); } @@ -220,7 +246,7 @@ export class WebhookHandler { const payloadRecord = payload as Record; const payloadKeys = Object.keys(payloadRecord); if (payloadKeys.length > 0) { - logger.debug(`payload keys: ${payloadKeys.join(',')}`); + this.logger.debug(`payload keys: ${payloadKeys.join(',')}`); } return { payload, extractedHeaders }; @@ -235,8 +261,9 @@ export class WebhookHandler { const normalizedHeaders = headers || {}; const headerKeys = Object.keys(normalizedHeaders); if (headerKeys.length > 0) { - logger.debug(`header keys: ${headerKeys.join(',')}`); + this.logger.debug(`header keys: ${headerKeys.join(',')}`); } + this.debug.push(`headerKeys=${headerKeys.join(',') || 'none'}`); const headerSignature = Object.entries(normalizedHeaders).find( ([key]) => key.toLowerCase() === 'x-hub-signature', @@ -249,32 +276,40 @@ export class WebhookHandler { : undefined; if (payloadSignature) { - logger.debug('found signature inside payload'); + this.logger.debug('found signature inside payload'); } const signature = (typeof headerSignature === 'string' ? headerSignature : undefined) || payloadSignature; - const body = typeof normalizedHeaders['body'] === 'string' - ? normalizedHeaders['body'] - : JSON.stringify(payloadRecord); + const payloadForSignature = + payloadSignature && 'x-hub-signature' in payloadRecord + ? Object.fromEntries( + Object.entries(payloadRecord).filter( + ([key]) => key.toLowerCase() !== 'x-hub-signature', + ), + ) + : payloadRecord; + + const body = + typeof normalizedHeaders['body'] === 'string' + ? normalizedHeaders['body'] + : JSON.stringify(payloadForSignature); const signatureCheck = verifyWebhookSignature(body, signature, webhookSecret); if (!signatureCheck.isValid) { - logger.debug( + this.debug.push( + `signatureProvided=${Boolean(signature)}`, + `signatureMatched=${signatureCheck.isValid}`, + `webhookSecretFingerprint=${getWebhookSecretFingerprint(webhookSecret)}` + ); + this.logger.debug( `signature check failed. headerPresent=${Boolean( headerSignature, )} payloadSignaturePresent=${Boolean(payloadSignature)}`, ); - if (signature) { - logger.debug(`provided signature=${signature}`); - } else { - logger.debug('provided signature=undefined'); - } - logger.debug( - `computed signature=${signatureCheck.computedSignature ?? 'unavailable'}`, - ); - logger.critical('Invalid webhook signature - potential security threat detected in production'); + this.logger.debug(`provided signature present=${Boolean(signature)}`); + this.logger.critical('Invalid webhook signature - potential security threat detected in production'); throw new Error('Invalid webhook signature'); } } @@ -284,15 +319,13 @@ export class WebhookHandler { noteId: string, contactIds: string[] ): Promise { - // Create Note-Person links for each participant for (const contactId of contactIds) { try { await twentyService.createNoteTarget(noteId, contactId); - logger.debug(`linked note ${noteId} to person ${contactId}`); + this.logger.debug(`linked note ${noteId} to person ${contactId}`); } catch (error) { const message = error instanceof Error ? error.message : 'Unknown error'; - logger.error(`failed to link note to person ${contactId}: ${message}`); - // Continue with other participants + this.logger.error(`failed to link note to person ${contactId}: ${message}`); } } } @@ -302,11 +335,10 @@ export class WebhookHandler { try { const twentyApiKey = process.env.TWENTY_API_KEY || ''; if (!twentyApiKey) { - logger.debug('Cannot create failed meeting record: TWENTY_API_KEY not configured'); + this.logger.debug('Cannot create failed meeting record: TWENTY_API_KEY not configured'); return; } - // Try to extract meeting ID and title from the params let meetingId = 'unknown'; let meetingTitle = 'Unknown Meeting'; @@ -314,7 +346,6 @@ export class WebhookHandler { if (payload?.meetingId) { meetingId = payload.meetingId; - // Try to get meeting title from Fireflies API if possible const firefliesApiKey = process.env.FIREFLIES_API_KEY || ''; if (firefliesApiKey) { try { @@ -322,7 +353,11 @@ export class WebhookHandler { const meetingData = await firefliesClient.fetchMeetingData(meetingId); meetingTitle = meetingData.title || meetingTitle; } catch (fetchError) { - logger.debug(`Could not fetch meeting title: ${fetchError instanceof Error ? fetchError.message : 'Unknown error'}`); + this.logger.debug( + `Could not fetch meeting title: ${ + fetchError instanceof Error ? fetchError.message : 'Unknown error' + }`, + ); } } } @@ -335,10 +370,13 @@ export class WebhookHandler { ); const failedMeetingId = await twentyService.createFailedMeeting(failedMeetingData); - logger.debug(`Created failed meeting record: ${failedMeetingId}`); + this.logger.debug(`Created failed meeting record: ${failedMeetingId}`); } catch (recordError) { - // Don't throw here - we don't want to break the original error handling - logger.error(`Failed to create failed meeting record: ${recordError instanceof Error ? recordError.message : 'Unknown error'}`); + this.logger.error( + `Failed to create failed meeting record: ${ + recordError instanceof Error ? recordError.message : 'Unknown error' + }`, + ); } } } diff --git a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/webhook-validator.ts b/packages/twenty-apps/community/fireflies/src/webhook-validator.ts similarity index 100% rename from packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/webhook-validator.ts rename to packages/twenty-apps/community/fireflies/src/webhook-validator.ts diff --git a/packages/twenty-apps/community/fireflies/yarn.lock b/packages/twenty-apps/community/fireflies/yarn.lock index a891c93643..59f7e339b7 100644 --- a/packages/twenty-apps/community/fireflies/yarn.lock +++ b/packages/twenty-apps/community/fireflies/yarn.lock @@ -563,6 +563,301 @@ __metadata: languageName: node linkType: hard +"@fastify/busboy@npm:^2.0.0": + version: 2.1.1 + resolution: "@fastify/busboy@npm:2.1.1" + checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 + languageName: node + linkType: hard + +"@genql/cli@npm:^3.0.3": + version: 3.0.5 + resolution: "@genql/cli@npm:3.0.5" + dependencies: + "@graphql-tools/graphql-file-loader": "npm:^7.5.11" + "@graphql-tools/load": "npm:^7.8.6" + fs-extra: "npm:^10.1.0" + graphql: "npm:^16.6.0" + kleur: "npm:^4.1.5" + listr: "npm:^0.14.3" + lodash: "npm:^4.17.21" + mkdirp: "npm:^0.5.1" + native-fetch: "npm:^4.0.2" + prettier: "npm:^2.8.0" + qs: "npm:^6.11.0" + rimraf: "npm:^2.6.3" + undici: "npm:^5.18.0" + yargs: "npm:^15.3.1" + bin: + genql: dist/cli.js + checksum: 10c0/646d4da8986741a8f1b610bd8cfb5bc26cd9a856de671461e4ca87fb05443f37dd0edfb3b30ceaa34cd049077873afa07febfd4714dd2e0681fb07484e19a080 + languageName: node + linkType: hard + +"@graphql-tools/graphql-file-loader@npm:^7.5.11": + version: 7.5.17 + resolution: "@graphql-tools/graphql-file-loader@npm:7.5.17" + dependencies: + "@graphql-tools/import": "npm:6.7.18" + "@graphql-tools/utils": "npm:^9.2.1" + globby: "npm:^11.0.3" + tslib: "npm:^2.4.0" + unixify: "npm:^1.0.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/f737f14357731ad01da57755e1cf26ce375b475209d6ab7e4b656b56191a8979d2ab7dd5d1c54a1f11e04374f7a373fa95ea5ec6a001d0cef913ea208fadc65b + languageName: node + linkType: hard + +"@graphql-tools/import@npm:6.7.18": + version: 6.7.18 + resolution: "@graphql-tools/import@npm:6.7.18" + dependencies: + "@graphql-tools/utils": "npm:^9.2.1" + resolve-from: "npm:5.0.0" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/d33e37a1879dd43ac2851c9bac2f2873c58bb3687f1c06e159760dbb5e540ef074d688df70cc6dbd3ee5de48d437878df8f65a7c65ae80bd025bf98f2d615732 + languageName: node + linkType: hard + +"@graphql-tools/load@npm:^7.8.6": + version: 7.8.14 + resolution: "@graphql-tools/load@npm:7.8.14" + dependencies: + "@graphql-tools/schema": "npm:^9.0.18" + "@graphql-tools/utils": "npm:^9.2.1" + p-limit: "npm:3.1.0" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/1fa036ac596ccf48f350aa545d108c173184d9b53247f9e21c0d4ba96c5cba4a0b44281f9154f122e1e8e9d9d6eab93a5b2618ca8a797969bde1e75c1d45e786 + languageName: node + linkType: hard + +"@graphql-tools/merge@npm:^8.4.1": + version: 8.4.2 + resolution: "@graphql-tools/merge@npm:8.4.2" + dependencies: + "@graphql-tools/utils": "npm:^9.2.1" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/2df55222b48e010e683572f456cf265aabae5748c59f7c1260c66dec9794b7a076d3706f04da969b77f0a32c7ccb4551fee30125931d3fe9c98a8806aae9a3f4 + languageName: node + linkType: hard + +"@graphql-tools/schema@npm:^9.0.18": + version: 9.0.19 + resolution: "@graphql-tools/schema@npm:9.0.19" + dependencies: + "@graphql-tools/merge": "npm:^8.4.1" + "@graphql-tools/utils": "npm:^9.2.1" + tslib: "npm:^2.4.0" + value-or-promise: "npm:^1.0.12" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/42fd8ca8d3c8d60b583077c201980518482ff0cd5ed0c1f14bd9b835a2689ad41d02cbd3478f7d7dea7aec1227f7639fd5deb5e6360852a2e542b96b44bfb7a4 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:^9.2.1": + version: 9.2.1 + resolution: "@graphql-tools/utils@npm:9.2.1" + dependencies: + "@graphql-typed-document-node/core": "npm:^3.1.1" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/37a7bd7e14d28ff1bacc007dca84bc6cef2d7d7af9a547b5dbe52fcd134afddd6d4a7b2148cfbaff5ddba91a868453d597da77bd0457fb0be15928f916901606 + languageName: node + linkType: hard + +"@graphql-typed-document-node/core@npm:^3.1.1": + version: 3.2.0 + resolution: "@graphql-typed-document-node/core@npm:3.2.0" + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/94e9d75c1f178bbae8d874f5a9361708a3350c8def7eaeb6920f2c820e82403b7d4f55b3735856d68e145e86c85cbfe2adc444fdc25519cd51f108697e99346c + languageName: node + linkType: hard + +"@inquirer/checkbox@npm:^2.5.0": + version: 2.5.0 + resolution: "@inquirer/checkbox@npm:2.5.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/figures": "npm:^1.0.5" + "@inquirer/type": "npm:^1.5.3" + ansi-escapes: "npm:^4.3.2" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/679d17ffe3aef0825593f3bc8d193b6c37b860c6cf6e0e9a10d4e60cc254a2dfc5da4a982bf5b9b5147018e456fffcb0b0dadf93ee1914b9d600b0c814284e22 + languageName: node + linkType: hard + +"@inquirer/confirm@npm:^3.2.0": + version: 3.2.0 + resolution: "@inquirer/confirm@npm:3.2.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + checksum: 10c0/a2cbfc8ae9c880bba4cce1993f5c399fb0d12741fdd574917c87fceb40ece62ffa60e35aaadf4e62d7c114f54008e45aee5d6d90497bb62d493996c02725d243 + languageName: node + linkType: hard + +"@inquirer/core@npm:^9.1.0": + version: 9.2.1 + resolution: "@inquirer/core@npm:9.2.1" + dependencies: + "@inquirer/figures": "npm:^1.0.6" + "@inquirer/type": "npm:^2.0.0" + "@types/mute-stream": "npm:^0.0.4" + "@types/node": "npm:^22.5.5" + "@types/wrap-ansi": "npm:^3.0.0" + ansi-escapes: "npm:^4.3.2" + cli-width: "npm:^4.1.0" + mute-stream: "npm:^1.0.0" + signal-exit: "npm:^4.1.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^6.2.0" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/11c14be77a9fa85831de799a585721b0a49ab2f3b7d8fd1780c48ea2b29229c6bdc94e7892419086d0f7734136c2ba87b6a32e0782571eae5bbd655b1afad453 + languageName: node + linkType: hard + +"@inquirer/editor@npm:^2.2.0": + version: 2.2.0 + resolution: "@inquirer/editor@npm:2.2.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + external-editor: "npm:^3.1.0" + checksum: 10c0/b8afc0790a7a5d82998bdfe469cbaa83b0cd0700be432cf95256c548e2a6a494997b5e93d65cbf94979c17b510758cf8494d85559f6b9508eb15d239a7f22aee + languageName: node + linkType: hard + +"@inquirer/expand@npm:^2.3.0": + version: 2.3.0 + resolution: "@inquirer/expand@npm:2.3.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/f2030cb482a715e4d5153c19b3f0fd8bf47c16cdc16e1c669e90985386edf4f7b0f3b0e97e2990bb228878b93716228eb067d94fc557c25d3c5ee58747c0a995 + languageName: node + linkType: hard + +"@inquirer/figures@npm:^1.0.5, @inquirer/figures@npm:^1.0.6": + version: 1.0.15 + resolution: "@inquirer/figures@npm:1.0.15" + checksum: 10c0/6e39a040d260ae234ae220180b7994ff852673e20be925f8aa95e78c7934d732b018cbb4d0ec39e600a410461bcb93dca771e7de23caa10630d255692e440f69 + languageName: node + linkType: hard + +"@inquirer/input@npm:^2.3.0": + version: 2.3.0 + resolution: "@inquirer/input@npm:2.3.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + checksum: 10c0/44c8cea38c9192f528cae556f38709135a00230132deab3b9bb9a925375fce0513fecf4e8c1df7c4319e1ed7aa31fb4dd2c4956c8bc9dd39af087aafff5b6f1f + languageName: node + linkType: hard + +"@inquirer/number@npm:^1.1.0": + version: 1.1.0 + resolution: "@inquirer/number@npm:1.1.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + checksum: 10c0/db472dab57c951c4a083b2a749ce58262b1efd9889e7603de6e9c3f9af7d8dce8fbdfa3859f65402d3587470e0397a076e5fb4ed775db33310f17a42c9faeb20 + languageName: node + linkType: hard + +"@inquirer/password@npm:^2.2.0": + version: 2.2.0 + resolution: "@inquirer/password@npm:2.2.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + ansi-escapes: "npm:^4.3.2" + checksum: 10c0/fa4b335164b2c9c3304d29a7214ef93bac8d3da6788146603ea3d0485b8d811151e49bf66cb0dcc729a9dc21406c3a8c2718c5beec572a91d07026d22842c13f + languageName: node + linkType: hard + +"@inquirer/prompts@npm:^5.5.0": + version: 5.5.0 + resolution: "@inquirer/prompts@npm:5.5.0" + dependencies: + "@inquirer/checkbox": "npm:^2.5.0" + "@inquirer/confirm": "npm:^3.2.0" + "@inquirer/editor": "npm:^2.2.0" + "@inquirer/expand": "npm:^2.3.0" + "@inquirer/input": "npm:^2.3.0" + "@inquirer/number": "npm:^1.1.0" + "@inquirer/password": "npm:^2.2.0" + "@inquirer/rawlist": "npm:^2.3.0" + "@inquirer/search": "npm:^1.1.0" + "@inquirer/select": "npm:^2.5.0" + checksum: 10c0/2d62b50ca761b2bd2d5759f48c03758f1af0665ac602c26ae1ae257ac512cf5c27fd82cde108ee0c6371ec39187adc6f45637f31ca79adf5bf96579f23e77143 + languageName: node + linkType: hard + +"@inquirer/rawlist@npm:^2.3.0": + version: 2.3.0 + resolution: "@inquirer/rawlist@npm:2.3.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/d49d5e12b7a54394c140b27c8d8748ba1ab855c67c01fa72b5a63810f12865df3bf4d5ae929f54fad77b5fc2f7431a332ae1e5fe4babb335380c28917002f364 + languageName: node + linkType: hard + +"@inquirer/search@npm:^1.1.0": + version: 1.1.0 + resolution: "@inquirer/search@npm:1.1.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/figures": "npm:^1.0.5" + "@inquirer/type": "npm:^1.5.3" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/20d7e910266b9e3f0dc8eef8f3007f487e6149fa8421d293eaf7c11a1e35c3d82aa30af118b3a6e35eed1048a27d7d806f45722abb10005db5d099ea64b00b17 + languageName: node + linkType: hard + +"@inquirer/select@npm:^2.5.0": + version: 2.5.0 + resolution: "@inquirer/select@npm:2.5.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/figures": "npm:^1.0.5" + "@inquirer/type": "npm:^1.5.3" + ansi-escapes: "npm:^4.3.2" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/280fa700187ff29da0ad4bf32aa11db776261584ddf5cc1ceac5caebb242a4ac0c5944af522a2579d78b6ec7d6e8b1b9f6564872101abd8dcc69929b4e33fc4c + languageName: node + linkType: hard + +"@inquirer/type@npm:^1.5.3": + version: 1.5.5 + resolution: "@inquirer/type@npm:1.5.5" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10c0/4c41736c09ba9426b5a9e44993bdd54e8f532e791518802e33866f233a2a6126a25c1c82c19d1abbf1df627e57b1b957dd3f8318ea96073d8bfc32193943bcb3 + languageName: node + linkType: hard + +"@inquirer/type@npm:^2.0.0": + version: 2.0.0 + resolution: "@inquirer/type@npm:2.0.0" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10c0/8c663d52beb2b89a896d3c3d5cc3d6d024fa149e565555bcb42fa640cbe23fba7ff2c51445342cef1fe6e46305e2d16c1590fa1d11ad0ddf93a67b655ef41f0a + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -880,6 +1175,33 @@ __metadata: languageName: node linkType: hard +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + "@npmcli/agent@npm:^3.0.0": version: 3.0.0 resolution: "@npmcli/agent@npm:3.0.0" @@ -909,6 +1231,20 @@ __metadata: languageName: node linkType: hard +"@samverschueren/stream-to-observable@npm:^0.3.0": + version: 0.3.1 + resolution: "@samverschueren/stream-to-observable@npm:0.3.1" + dependencies: + any-observable: "npm:^0.3.0" + peerDependenciesMeta: + rxjs: + optional: true + zen-observable: + optional: true + checksum: 10c0/0d874453f6bc2460d71783292291f52feb36c2a75314b1072a6ffe6206562f33e9d664a554348d565a6b54da9041d75070371052545bc329caaa52f64216987f + languageName: node + linkType: hard + "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -1019,6 +1355,15 @@ __metadata: languageName: node linkType: hard +"@types/mute-stream@npm:^0.0.4": + version: 0.0.4 + resolution: "@types/mute-stream@npm:0.0.4" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/944730fd7b398c5078de3c3d4d0afeec8584283bc694da1803fdfca14149ea385e18b1b774326f1601baf53898ce6d121a952c51eb62d188ef6fcc41f725c0dc + languageName: node + linkType: hard + "@types/node@npm:*, @types/node@npm:^24.9.2": version: 24.9.2 resolution: "@types/node@npm:24.9.2" @@ -1028,6 +1373,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^22.5.5": + version: 22.19.1 + resolution: "@types/node@npm:22.19.1" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10c0/6edd93aea86da740cb7872626839cd6f4a67a049d3a3a6639cb592c620ec591408a30989ab7410008d1a0b2d4985ce50f1e488e79c033e4476d3bec6833b0a2f + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.0": version: 2.0.3 resolution: "@types/stack-utils@npm:2.0.3" @@ -1035,6 +1389,13 @@ __metadata: languageName: node linkType: hard +"@types/wrap-ansi@npm:^3.0.0": + version: 3.0.0 + resolution: "@types/wrap-ansi@npm:3.0.0" + checksum: 10c0/8d8f53363f360f38135301a06b596c295433ad01debd082078c33c6ed98b05a5c8fe8853a88265432126096084f4a135ec1564e3daad631b83296905509f90b3 + languageName: node + linkType: hard + "@types/yargs-parser@npm:*": version: 21.0.3 resolution: "@types/yargs-parser@npm:21.0.3" @@ -1065,7 +1426,14 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1": +"ansi-escapes@npm:^3.0.0": + version: 3.2.0 + resolution: "ansi-escapes@npm:3.2.0" + checksum: 10c0/084e1ce38139ad2406f18a8e7efe2b850ddd06ce3c00f633392d1ce67756dab44fe290e573d09ef3c9a0cb13c12881e0e35a8f77a017d39a0a4ab85ae2fae04f + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -1074,6 +1442,20 @@ __metadata: languageName: node linkType: hard +"ansi-regex@npm:^2.0.0": + version: 2.1.1 + resolution: "ansi-regex@npm:2.1.1" + checksum: 10c0/78cebaf50bce2cb96341a7230adf28d804611da3ce6bf338efa7b72f06cc6ff648e29f80cd95e582617ba58d5fdbec38abfeed3500a98bce8381a9daec7c548b + languageName: node + linkType: hard + +"ansi-regex@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-regex@npm:3.0.1" + checksum: 10c0/d108a7498b8568caf4a46eea4f1784ab4e0dfb2e3f3938c697dee21443d622d765c958f2b7e2b9f6b9e55e2e2af0584eaa9915d51782b89a841c28e744e7a167 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -1088,6 +1470,22 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^2.2.1": + version: 2.2.1 + resolution: "ansi-styles@npm:2.2.1" + checksum: 10c0/7c68aed4f1857389e7a12f85537ea5b40d832656babbf511cc7ecd9efc52889b9c3e5653a71a6aade783c3c5e0aa223ad4ff8e83c27ac8a666514e6c79068cab + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + "ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" @@ -1111,6 +1509,13 @@ __metadata: languageName: node linkType: hard +"any-observable@npm:^0.3.0": + version: 0.3.0 + resolution: "any-observable@npm:0.3.0" + checksum: 10c0/104c2b79c2ac7e6c75b35f8fd62babf73015668f22bd25336c6f848350d91f9e7daf2fddbf1c1b76fe795e89fbc91b49f70a2aec5c69f1acf0562c344f36042b + languageName: node + linkType: hard + "anymatch@npm:^3.0.3": version: 3.1.3 resolution: "anymatch@npm:3.1.3" @@ -1130,6 +1535,13 @@ __metadata: languageName: node linkType: hard +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + "async-function@npm:^1.0.0": version: 1.0.0 resolution: "async-function@npm:1.0.0" @@ -1162,6 +1574,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:^1.6.0": + version: 1.13.2 + resolution: "axios@npm:1.13.2" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.4" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/e8a42e37e5568ae9c7a28c348db0e8cf3e43d06fcbef73f0048669edfe4f71219664da7b6cc991b0c0f01c28a48f037c515263cb79be1f1ae8ff034cd813867b + languageName: node + linkType: hard + "babel-jest@npm:^29.7.0": version: 29.7.0 resolution: "babel-jest@npm:29.7.0" @@ -1355,6 +1778,16 @@ __metadata: languageName: node linkType: hard +"call-bound@npm:^1.0.2": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -1362,7 +1795,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.3.1": +"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 @@ -1383,6 +1816,30 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^1.0.0, chalk@npm:^1.1.3": + version: 1.1.3 + resolution: "chalk@npm:1.1.3" + dependencies: + ansi-styles: "npm:^2.2.1" + escape-string-regexp: "npm:^1.0.2" + has-ansi: "npm:^2.0.0" + strip-ansi: "npm:^3.0.0" + supports-color: "npm:^2.0.0" + checksum: 10c0/28c3e399ec286bb3a7111fd4225ebedb0d7b813aef38a37bca7c498d032459c265ef43404201d5fbb8d888d29090899c95335b4c0cda13e8b126ff15c541cef8 + languageName: node + linkType: hard + +"chalk@npm:^2.4.1": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + "chalk@npm:^4.0.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -1393,6 +1850,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^5.3.0": + version: 5.6.2 + resolution: "chalk@npm:5.6.2" + checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 + languageName: node + linkType: hard + "char-regex@npm:^1.0.2": version: 1.0.2 resolution: "char-regex@npm:1.0.2" @@ -1400,6 +1864,22 @@ __metadata: languageName: node linkType: hard +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d + languageName: node + linkType: hard + +"chokidar@npm:^4.0.0": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad + languageName: node + linkType: hard + "chownr@npm:^3.0.0": version: 3.0.0 resolution: "chownr@npm:3.0.0" @@ -1421,6 +1901,43 @@ __metadata: languageName: node linkType: hard +"cli-cursor@npm:^2.0.0, cli-cursor@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-cursor@npm:2.1.0" + dependencies: + restore-cursor: "npm:^2.0.0" + checksum: 10c0/09ee6d8b5b818d840bf80ec9561eaf696672197d3a02a7daee2def96d5f52ce6e0bbe7afca754ccf14f04830b5a1b4556273e983507d5029f95bba3016618eda + languageName: node + linkType: hard + +"cli-truncate@npm:^0.2.1": + version: 0.2.1 + resolution: "cli-truncate@npm:0.2.1" + dependencies: + slice-ansi: "npm:0.0.4" + string-width: "npm:^1.0.1" + checksum: 10c0/c6caa5e2b70d841c42f4a2270d6fc7129df915f8911e4afa90c79231ccc857cd819a2c90e0707fde04e51ce56b4d71646b843f6cbaff4f7cdcb3b91ed51f6e89 + languageName: node + linkType: hard + +"cli-width@npm:^4.1.0": + version: 4.1.0 + resolution: "cli-width@npm:4.1.0" + checksum: 10c0/1fbd56413578f6117abcaf858903ba1f4ad78370a4032f916745fa2c7e390183a9d9029cf837df320b0fdce8137668e522f60a30a5f3d6529ff3872d265a955f + languageName: node + linkType: hard + +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.0" + wrap-ansi: "npm:^6.2.0" + checksum: 10c0/35229b1bb48647e882104cac374c9a18e34bbf0bace0e2cf03000326b6ca3050d6b59545d91e17bfe3705f4a0e2988787aa5cde6331bf5cbbf0164732cef6492 + languageName: node + linkType: hard + "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" @@ -1439,6 +1956,13 @@ __metadata: languageName: node linkType: hard +"code-point-at@npm:^1.0.0": + version: 1.1.0 + resolution: "code-point-at@npm:1.1.0" + checksum: 10c0/33f6b234084e46e6e369b6f0b07949392651b4dde70fc6a592a8d3dafa08d5bb32e3981a02f31f6fc323a26bc03a4c063a9d56834848695bda7611c2417ea2e6 + languageName: node + linkType: hard + "collect-v8-coverage@npm:^1.0.0": version: 1.0.3 resolution: "collect-v8-coverage@npm:1.0.3" @@ -1446,6 +1970,15 @@ __metadata: languageName: node linkType: hard +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" @@ -1455,6 +1988,13 @@ __metadata: languageName: node linkType: hard +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + "color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" @@ -1471,6 +2011,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^12.0.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -1513,6 +2060,13 @@ __metadata: languageName: node linkType: hard +"date-fns@npm:^1.27.2": + version: 1.30.1 + resolution: "date-fns@npm:1.30.1" + checksum: 10c0/bad6ad7c15180121e15d61ad62a4a214c108d66f35b35f5eeb6ade837a3c29aa4444b9528a93a5374b95ba11231c142276351bf52f4d168676f9a1e17ce3726a + languageName: node + linkType: hard + "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4": version: 4.4.3 resolution: "debug@npm:4.4.3" @@ -1525,6 +2079,13 @@ __metadata: languageName: node linkType: hard +"decamelize@npm:^1.2.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 + languageName: node + linkType: hard + "dedent@npm:^1.0.0": version: 1.7.0 resolution: "dedent@npm:1.7.0" @@ -1565,13 +2126,29 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:^16.3.1": +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"dotenv@npm:^16.4.0": version: 16.6.1 resolution: "dotenv@npm:16.6.1" checksum: 10c0/15ce56608326ea0d1d9414a5c8ee6dcf0fffc79d2c16422b4ac2268e7e2d76ff5a572d37ffe747c377de12005f14b3cc22361e79fc7f1061cce81f77d2c973dc languageName: node linkType: hard +"dotenv@npm:^17.2.3": + version: 17.2.3 + resolution: "dotenv@npm:17.2.3" + checksum: 10c0/c884403209f713214a1b64d4d1defa4934c2aa5b0002f5a670ae298a51e3c3ad3ba79dfee2f8df49f01ae74290fcd9acdb1ab1d09c7bfb42b539036108bb2ba0 + languageName: node + linkType: hard + "dunder-proto@npm:^1.0.1": version: 1.0.1 resolution: "dunder-proto@npm:1.0.1" @@ -1597,6 +2174,13 @@ __metadata: languageName: node linkType: hard +"elegant-spinner@npm:^1.0.1": + version: 1.0.1 + resolution: "elegant-spinner@npm:1.0.1" + checksum: 10c0/df607c83c20fc3ce56c514175dd5d1ee7f667da00cee13d04d32c70d55e76555091fa236689e691cf7dedba17b0020fec635e499cdde84dbea2ef8639314e5f8 + languageName: node + linkType: hard + "emittery@npm:^0.13.1": version: 0.13.1 resolution: "emittery@npm:0.13.1" @@ -1781,6 +2365,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + "escape-string-regexp@npm:^2.0.0": version: 2.0.0 resolution: "escape-string-regexp@npm:2.0.0" @@ -1842,6 +2433,30 @@ __metadata: languageName: node linkType: hard +"external-editor@npm:^3.1.0": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: "npm:^0.7.0" + iconv-lite: "npm:^0.4.24" + tmp: "npm:^0.0.33" + checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -1849,6 +2464,15 @@ __metadata: languageName: node linkType: hard +"fastq@npm:^1.6.0": + version: 1.19.1 + resolution: "fastq@npm:1.19.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/ebc6e50ac7048daaeb8e64522a1ea7a26e92b3cee5cd1c7f2316cdca81ba543aa40a136b53891446ea5c3a67ec215fbaca87ad405f102dd97012f62916905630 + languageName: node + linkType: hard + "fb-watchman@npm:^2.0.0": version: 2.0.2 resolution: "fb-watchman@npm:2.0.2" @@ -1870,6 +2494,25 @@ __metadata: languageName: node linkType: hard +"figures@npm:^1.7.0": + version: 1.7.0 + resolution: "figures@npm:1.7.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + object-assign: "npm:^4.1.0" + checksum: 10c0/a10942b0eec3372bf61822ab130d2bbecdf527d551b0b013fbe7175b7a0238ead644ee8930a1a3cb872fb9ab2ec27df30e303765a3b70b97852e2e9ee43bdff3 + languageName: node + linkType: hard + +"figures@npm:^2.0.0": + version: 2.0.0 + resolution: "figures@npm:2.0.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/5dc5a75fec3e7e04ae65d6ce51d28b3e70d4656c51b06996b6fdb2cb5b542df512e3b3c04482f5193a964edddafa5521479ff948fa84e12ff556e53e094ab4ce + languageName: node + linkType: hard + "fill-range@npm:^7.1.1": version: 7.1.1 resolution: "fill-range@npm:7.1.1" @@ -1896,11 +2539,11 @@ __metadata: "@types/jest": "npm:^29.5.5" "@types/node": "npm:^24.9.2" axios: "npm:^1.13.1" - dotenv: "npm:^16.3.1" + dotenv: "npm:^17.2.3" jest: "npm:^29.7.0" ts-jest: "npm:^29.1.1" tsx: "npm:^4.19.3" - twenty-sdk: "npm:0.0.3" + twenty-sdk: "npm:0.1.3" typescript: "npm:^5.9.3" languageName: unknown linkType: soft @@ -1938,6 +2581,28 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^10.1.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e + languageName: node + linkType: hard + +"fs-extra@npm:^11.2.0": + version: 11.3.2 + resolution: "fs-extra@npm:11.3.2" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/f5d629e1bb646d5dedb4d8b24c5aad3deb8cc1d5438979d6f237146cd10e113b49a949ae1b54212c2fbc98e2d0995f38009a9a1d0520f0287943335e65fe919b + languageName: node + linkType: hard + "fs-minipass@npm:^3.0.0": version: 3.0.3 resolution: "fs-minipass@npm:3.0.3" @@ -1994,14 +2659,14 @@ __metadata: languageName: node linkType: hard -"get-caller-file@npm:^2.0.5": +"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde languageName: node linkType: hard -"get-intrinsic@npm:^1.2.6": +"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": version: 1.3.1 resolution: "get-intrinsic@npm:1.3.1" dependencies: @@ -2055,6 +2720,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + "glob@npm:^10.2.2": version: 10.5.0 resolution: "glob@npm:10.5.0" @@ -2085,6 +2759,20 @@ __metadata: languageName: node linkType: hard +"globby@npm:^11.0.3": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + "gopd@npm:^1.2.0": version: 1.2.0 resolution: "gopd@npm:1.2.0" @@ -2092,13 +2780,29 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 languageName: node linkType: hard +"graphql-sse@npm:^2.5.4": + version: 2.6.0 + resolution: "graphql-sse@npm:2.6.0" + peerDependencies: + graphql: ">=0.11 <=16" + checksum: 10c0/e05f0b5c8539d61e5ce34af8e0bb418c02bf922d6a7f9232a9abd53c77df5654684ca14f674ac771645c8fba9c37ce666c5d06f46eef54ea07e63653468065b0 + languageName: node + linkType: hard + +"graphql@npm:^16.6.0, graphql@npm:^16.8.1": + version: 16.12.0 + resolution: "graphql@npm:16.12.0" + checksum: 10c0/b6fffa4e8a4e4a9933ebe85e7470b346dbf49050c1a482fac5e03e4a1a7bed2ecd3a4c97e29f04457af929464bc5e4f2aac991090c2f320111eef26e902a5c75 + languageName: node + linkType: hard + "handlebars@npm:^4.7.8": version: 4.7.8 resolution: "handlebars@npm:4.7.8" @@ -2117,6 +2821,22 @@ __metadata: languageName: node linkType: hard +"has-ansi@npm:^2.0.0": + version: 2.0.0 + resolution: "has-ansi@npm:2.0.0" + dependencies: + ansi-regex: "npm:^2.0.0" + checksum: 10c0/f54e4887b9f8f3c4bfefd649c48825b3c093987c92c27880ee9898539e6f01aed261e82e73153c3f920fde0db5bf6ebd58deb498ed1debabcb4bc40113ccdf05 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + "has-flag@npm:^4.0.0": version: 4.0.0 resolution: "has-flag@npm:4.0.0" @@ -2190,6 +2910,15 @@ __metadata: languageName: node linkType: hard +"iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 + languageName: node + linkType: hard + "iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" @@ -2199,6 +2928,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + "import-local@npm:^3.0.2": version: 3.2.0 resolution: "import-local@npm:3.2.0" @@ -2218,6 +2954,13 @@ __metadata: languageName: node linkType: hard +"indent-string@npm:^3.0.0": + version: 3.2.0 + resolution: "indent-string@npm:3.2.0" + checksum: 10c0/91b6d61621d24944c5c4d365d6f1ff4a490264ccaf1162a602faa0d323e69231db2180ad4ccc092c2f49cf8888cdb3da7b73e904cc0fdeec40d0bfb41ceb9478 + languageName: node + linkType: hard + "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -2235,6 +2978,22 @@ __metadata: languageName: node linkType: hard +"inquirer@npm:^10.0.0": + version: 10.2.2 + resolution: "inquirer@npm:10.2.2" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/prompts": "npm:^5.5.0" + "@inquirer/type": "npm:^1.5.3" + "@types/mute-stream": "npm:^0.0.4" + ansi-escapes: "npm:^4.3.2" + mute-stream: "npm:^1.0.0" + run-async: "npm:^3.0.0" + rxjs: "npm:^7.8.1" + checksum: 10c0/09bcff887a968ce29d3a8cba749ef35b6531b7fb7bf5b28aaf3e10aebae07af2494dd3ec67ae6f1dabe76da1064cfe4514098d4c7658fcaf3fd480b2975d7163 + languageName: node + linkType: hard + "ip-address@npm:^10.0.1": version: 10.0.1 resolution: "ip-address@npm:10.0.1" @@ -2258,6 +3017,29 @@ __metadata: languageName: node linkType: hard +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^1.0.0": + version: 1.0.0 + resolution: "is-fullwidth-code-point@npm:1.0.0" + dependencies: + number-is-nan: "npm:^1.0.0" + checksum: 10c0/12acfcf16142f2d431bf6af25d68569d3198e81b9799b4ae41058247aafcc666b0127d64384ea28e67a746372611fcbe9b802f69175287aba466da3eddd5ba0f + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^2.0.0": + version: 2.0.0 + resolution: "is-fullwidth-code-point@npm:2.0.0" + checksum: 10c0/e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 + languageName: node + linkType: hard + "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -2272,6 +3054,15 @@ __metadata: languageName: node linkType: hard +"is-glob@npm:^4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -2279,6 +3070,29 @@ __metadata: languageName: node linkType: hard +"is-observable@npm:^1.1.0": + version: 1.1.0 + resolution: "is-observable@npm:1.1.0" + dependencies: + symbol-observable: "npm:^1.1.0" + checksum: 10c0/cf3166b0822f70ad06e7851e09430166ce658349d54aaa64c93a03320420b9285735821b23164bdce741ff83a86730ac3e53035ce4e2511ed843dbff4105bfa2 + languageName: node + linkType: hard + +"is-promise@npm:^2.1.0": + version: 2.2.2 + resolution: "is-promise@npm:2.2.2" + checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 + languageName: node + linkType: hard + +"is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 + languageName: node + linkType: hard + "is-stream@npm:^2.0.0": version: 2.0.1 resolution: "is-stream@npm:2.0.1" @@ -2861,6 +3675,26 @@ __metadata: languageName: node linkType: hard +"jsonc-parser@npm:^3.2.0": + version: 3.3.1 + resolution: "jsonc-parser@npm:3.3.1" + checksum: 10c0/269c3ae0a0e4f907a914bf334306c384aabb9929bd8c99f909275ebd5c2d3bc70b9bcd119ad794f339dec9f24b6a4ee9cd5a8ab2e6435e730ad4075388fc2ab6 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.2.0 + resolution: "jsonfile@npm:6.2.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7f4f43b08d1869ded8a6822213d13ae3b99d651151d77efd1557ced0889c466296a7d9684e397bd126acf5eb2cfcb605808c3e681d0fdccd2fe5a04b47e76c0d + languageName: node + linkType: hard + "kleur@npm:^3.0.3": version: 3.0.3 resolution: "kleur@npm:3.0.3" @@ -2868,6 +3702,13 @@ __metadata: languageName: node linkType: hard +"kleur@npm:^4.1.5": + version: 4.1.5 + resolution: "kleur@npm:4.1.5" + checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a + languageName: node + linkType: hard + "leven@npm:^3.1.0": version: 3.1.0 resolution: "leven@npm:3.1.0" @@ -2882,6 +3723,60 @@ __metadata: languageName: node linkType: hard +"listr-silent-renderer@npm:^1.1.1": + version: 1.1.1 + resolution: "listr-silent-renderer@npm:1.1.1" + checksum: 10c0/a13e08ebf863516a757bce4887f05290070772113d89095e9f51a07cf0b11a43a7563a67ff3b287c752c08f6d781fdb2123b02957534e3e0675fb564f2a42e1b + languageName: node + linkType: hard + +"listr-update-renderer@npm:^0.5.0": + version: 0.5.0 + resolution: "listr-update-renderer@npm:0.5.0" + dependencies: + chalk: "npm:^1.1.3" + cli-truncate: "npm:^0.2.1" + elegant-spinner: "npm:^1.0.1" + figures: "npm:^1.7.0" + indent-string: "npm:^3.0.0" + log-symbols: "npm:^1.0.2" + log-update: "npm:^2.3.0" + strip-ansi: "npm:^3.0.1" + peerDependencies: + listr: ^0.14.2 + checksum: 10c0/8ade44bf3dc6146c8e0178000619439e8889792c4689b66be6ce82bd459f5fe462ecb34b05147fb206a8ad60e6d4e6f34c9f48038e18366f867fd972688b8edc + languageName: node + linkType: hard + +"listr-verbose-renderer@npm:^0.5.0": + version: 0.5.0 + resolution: "listr-verbose-renderer@npm:0.5.0" + dependencies: + chalk: "npm:^2.4.1" + cli-cursor: "npm:^2.1.0" + date-fns: "npm:^1.27.2" + figures: "npm:^2.0.0" + checksum: 10c0/041cd1e82da7054f27ae0a914e98b40d15faf9f950ef850578fc6241d3fff3c2d7158a4f6226006e566b4c47bf445be2d254dd1ce5c16569a3a5dcd575bec656 + languageName: node + linkType: hard + +"listr@npm:^0.14.3": + version: 0.14.3 + resolution: "listr@npm:0.14.3" + dependencies: + "@samverschueren/stream-to-observable": "npm:^0.3.0" + is-observable: "npm:^1.1.0" + is-promise: "npm:^2.1.0" + is-stream: "npm:^1.1.0" + listr-silent-renderer: "npm:^1.1.1" + listr-update-renderer: "npm:^0.5.0" + listr-verbose-renderer: "npm:^0.5.0" + p-map: "npm:^2.0.0" + rxjs: "npm:^6.3.3" + checksum: 10c0/753d518218c423f46bee8eeacccecadfd2e414ba9c0f602e7f85fe3f6fa18404dfab0812433aeda4683ee2548358488f597ac1a3d321196baec5d3149b200b10 + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -2891,6 +3786,27 @@ __metadata: languageName: node linkType: hard +"lodash.camelcase@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.camelcase@npm:4.3.0" + checksum: 10c0/fcba15d21a458076dd309fce6b1b4bf611d84a0ec252cb92447c948c533ac250b95d2e00955801ebc367e5af5ed288b996d75d37d2035260a937008e14eaf432 + languageName: node + linkType: hard + +"lodash.capitalize@npm:^4.2.1": + version: 4.2.1 + resolution: "lodash.capitalize@npm:4.2.1" + checksum: 10c0/b289326497c2e24d6b8afa2af2ca4e068ef6ef007ade36bfb6f70af77ce10ea3f090eeee947d5fdcf2db4bcfa4703c8c10a5857a2b39e308bddfd1d11ad35970 + languageName: node + linkType: hard + +"lodash.kebabcase@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.kebabcase@npm:4.1.1" + checksum: 10c0/da5d8f41dbb5bc723d4bf9203d5096ca8da804d6aec3d2b56457156ba6c8d999ff448d347ebd97490da853cb36696ea4da09a431499f1ee8deb17b094ecf4e33 + languageName: node + linkType: hard + "lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -2898,6 +3814,40 @@ __metadata: languageName: node linkType: hard +"lodash.startcase@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.startcase@npm:4.4.0" + checksum: 10c0/bd82aa87a45de8080e1c5ee61128c7aee77bf7f1d86f4ff94f4a6d7438fc9e15e5f03374b947be577a93804c8ad6241f0251beaf1452bf716064eeb657b3a9f0 + languageName: node + linkType: hard + +"lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"log-symbols@npm:^1.0.2": + version: 1.0.2 + resolution: "log-symbols@npm:1.0.2" + dependencies: + chalk: "npm:^1.0.0" + checksum: 10c0/c64e1fe41d0d043840f8b592d043b8607a836b846506f525a53d99d578561f02f97b2cba1d2b3c30bae5311d64b308d5a392a9930d252b906a9042fc2877da7a + languageName: node + linkType: hard + +"log-update@npm:^2.3.0": + version: 2.3.0 + resolution: "log-update@npm:2.3.0" + dependencies: + ansi-escapes: "npm:^3.0.0" + cli-cursor: "npm:^2.0.0" + wrap-ansi: "npm:^3.0.1" + checksum: 10c0/9bf21b138801ab4770a2bfa735161cf005b869360eaf5003a84ba64ddc5f5c3ce7217f4f1fa79d9c1f510d792213b2c9800327228e94df05859d19b716215d90 + languageName: node + linkType: hard + "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" @@ -2972,7 +3922,14 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.4": +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4, micromatch@npm:^4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -2998,6 +3955,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^1.0.0": + version: 1.2.0 + resolution: "mimic-fn@npm:1.2.0" + checksum: 10c0/ad55214aec6094c0af4c0beec1a13787556f8116ed88807cf3f05828500f21f93a9482326bcd5a077ae91e3e8795b4e76b5b4c8bb12237ff0e4043a365516cba + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -3023,7 +3987,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.5": +"minimist@npm:^1.2.5, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 @@ -3106,6 +4070,17 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:^0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: "npm:^1.2.6" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 + languageName: node + linkType: hard + "ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -3113,6 +4088,22 @@ __metadata: languageName: node linkType: hard +"mute-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "mute-stream@npm:1.0.0" + checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c + languageName: node + linkType: hard + +"native-fetch@npm:^4.0.2": + version: 4.0.2 + resolution: "native-fetch@npm:4.0.2" + peerDependencies: + undici: "*" + checksum: 10c0/e3b824721daaa628086d9dcd02e8eb12f0a6c5e13a1d182682bae238d80c9bbf3dfd6314a94692ebe20316aa354476804b4df148201d066b46fc552a5794cfab + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -3179,6 +4170,15 @@ __metadata: languageName: node linkType: hard +"normalize-path@npm:^2.1.1": + version: 2.1.1 + resolution: "normalize-path@npm:2.1.1" + dependencies: + remove-trailing-separator: "npm:^1.0.1" + checksum: 10c0/db814326ff88057437233361b4c7e9cac7b54815b051b57f2d341ce89b1d8ec8cbd43e7fa95d7652b3b69ea8fcc294b89b8530d556a84d1bdace94229e1e9a8b + languageName: node + linkType: hard + "normalize-path@npm:^3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -3195,6 +4195,27 @@ __metadata: languageName: node linkType: hard +"number-is-nan@npm:^1.0.0": + version: 1.0.1 + resolution: "number-is-nan@npm:1.0.1" + checksum: 10c0/cb97149006acc5cd512c13c1838223abdf202e76ddfa059c5e8e7507aff2c3a78cd19057516885a2f6f5b576543dc4f7b6f3c997cc7df53ae26c260855466df5 + languageName: node + linkType: hard + +"object-assign@npm:^4.1.0": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.3": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 + languageName: node + linkType: hard + "once@npm:^1.3.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -3204,6 +4225,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^2.0.0": + version: 2.0.1 + resolution: "onetime@npm:2.0.1" + dependencies: + mimic-fn: "npm:^1.0.0" + checksum: 10c0/b4e44a8c34e70e02251bfb578a6e26d6de6eedbed106cd78211d2fd64d28b6281d54924696554e4e966559644243753ac5df73c87f283b0927533d3315696215 + languageName: node + linkType: hard + "onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -3213,6 +4243,22 @@ __metadata: languageName: node linkType: hard +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 + languageName: node + linkType: hard + +"p-limit@npm:3.1.0, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + "p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" @@ -3222,15 +4268,6 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.1.0": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -3240,6 +4277,13 @@ __metadata: languageName: node linkType: hard +"p-map@npm:^2.0.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 + languageName: node + linkType: hard + "p-map@npm:^7.0.2": version: 7.0.3 resolution: "p-map@npm:7.0.3" @@ -3311,6 +4355,13 @@ __metadata: languageName: node linkType: hard +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + "picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -3348,6 +4399,15 @@ __metadata: languageName: node linkType: hard +"prettier@npm:^2.8.0": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a + languageName: node + linkType: hard + "pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" @@ -3400,6 +4460,22 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.11.0": + version: 6.14.0 + resolution: "qs@npm:6.14.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + "react-is@npm:^18.0.0": version: 18.3.1 resolution: "react-is@npm:18.3.1" @@ -3407,6 +4483,20 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:^4.0.1": + version: 4.1.2 + resolution: "readdirp@npm:4.1.2" + checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 + languageName: node + linkType: hard + +"remove-trailing-separator@npm:^1.0.1": + version: 1.1.0 + resolution: "remove-trailing-separator@npm:1.1.0" + checksum: 10c0/3568f9f8f5af3737b4aee9e6e1e8ec4be65a92da9cb27f989e0893714d50aa95ed2ff02d40d1fa35e1b1a234dc9c2437050ef356704a3999feaca6667d9e9bfc + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -3414,6 +4504,13 @@ __metadata: languageName: node linkType: hard +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: 10c0/db91467d9ead311b4111cbd73a4e67fa7820daed2989a32f7023785a2659008c6d119752d9c4ac011ae07e537eb86523adff99804c5fdb39cd3a017f9b401bb6 + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -3423,7 +4520,7 @@ __metadata: languageName: node linkType: hard -"resolve-from@npm:^5.0.0": +"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": version: 5.0.0 resolution: "resolve-from@npm:5.0.0" checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 @@ -3470,6 +4567,16 @@ __metadata: languageName: node linkType: hard +"restore-cursor@npm:^2.0.0": + version: 2.0.0 + resolution: "restore-cursor@npm:2.0.0" + dependencies: + onetime: "npm:^2.0.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/f5b335bee06f440445e976a7031a3ef53691f9b7c4a9d42a469a0edaf8a5508158a0d561ff2b26a1f4f38783bcca2c0e5c3a44f927326f6694d5b44d7a4993e6 + languageName: node + linkType: hard + "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -3477,7 +4584,59 @@ __metadata: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3.0.0": +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa + languageName: node + linkType: hard + +"rimraf@npm:^2.6.3": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: ./bin.js + checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 + languageName: node + linkType: hard + +"run-async@npm:^3.0.0": + version: 3.0.0 + resolution: "run-async@npm:3.0.0" + checksum: 10c0/b18b562ae37c3020083dcaae29642e4cc360c824fbfb6b7d50d809a9d5227bb986152d09310255842c8dce40526e82ca768f02f00806c91ba92a8dfa6159cb85 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"rxjs@npm:^6.3.3": + version: 6.6.7 + resolution: "rxjs@npm:6.6.7" + dependencies: + tslib: "npm:^1.9.0" + checksum: 10c0/e556a13a9aa89395e5c9d825eabcfa325568d9c9990af720f3f29f04a888a3b854f25845c2b55875d875381abcae2d8100af9cacdc57576e7ed6be030a01d2fe + languageName: node + linkType: hard + +"rxjs@npm:^7.8.1": + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 @@ -3502,6 +4661,13 @@ __metadata: languageName: node linkType: hard +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -3518,14 +4684,62 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + +"side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 languageName: node linkType: hard -"signal-exit@npm:^4.0.1": +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 @@ -3546,6 +4760,13 @@ __metadata: languageName: node linkType: hard +"slice-ansi@npm:0.0.4": + version: 0.0.4 + resolution: "slice-ansi@npm:0.0.4" + checksum: 10c0/997d4cc73e34aa8c0f60bdb71701b16c062cc4acd7a95e3b10e8c05d790eb5e735d9b470270dc6f443b1ba21492db7ceb849d5c93011d1256061bf7ed7216c7a + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -3637,6 +4858,27 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^1.0.1": + version: 1.0.2 + resolution: "string-width@npm:1.0.2" + dependencies: + code-point-at: "npm:^1.0.0" + is-fullwidth-code-point: "npm:^1.0.0" + strip-ansi: "npm:^3.0.0" + checksum: 10c0/c558438baed23a9ab9370bb6a939acbdb2b2ffc517838d651aad0f5b2b674fb85d460d9b1d0b6a4c210dffd09e3235222d89a5bd4c0c1587f78b2bb7bc00c65e + languageName: node + linkType: hard + +"string-width@npm:^2.1.1": + version: 2.1.1 + resolution: "string-width@npm:2.1.1" + dependencies: + is-fullwidth-code-point: "npm:^2.0.0" + strip-ansi: "npm:^4.0.0" + checksum: 10c0/e5f2b169fcf8a4257a399f95d069522f056e92ec97dbdcb9b0cdf14d688b7ca0b1b1439a1c7b9773cd79446cbafd582727279d6bfdd9f8edd306ea5e90e5b610 + languageName: node + linkType: hard + "string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" @@ -3657,6 +4899,24 @@ __metadata: languageName: node linkType: hard +"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": + version: 3.0.1 + resolution: "strip-ansi@npm:3.0.1" + dependencies: + ansi-regex: "npm:^2.0.0" + checksum: 10c0/f6e7fbe8e700105dccf7102eae20e4f03477537c74b286fd22cfc970f139002ed6f0d9c10d0e21aa9ed9245e0fa3c9275930e8795c5b947da136e4ecb644a70f + languageName: node + linkType: hard + +"strip-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-ansi@npm:4.0.0" + dependencies: + ansi-regex: "npm:^3.0.0" + checksum: 10c0/d75d9681e0637ea316ddbd7d4d3be010b1895a17e885155e0ed6a39755ae0fd7ef46e14b22162e66a62db122d3a98ab7917794e255532ab461bb0a04feb03e7d + languageName: node + linkType: hard + "strip-ansi@npm:^7.0.1": version: 7.1.2 resolution: "strip-ansi@npm:7.1.2" @@ -3687,6 +4947,22 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^2.0.0": + version: 2.0.0 + resolution: "supports-color@npm:2.0.0" + checksum: 10c0/570e0b63be36cccdd25186350a6cb2eaad332a95ff162fa06d9499982315f2fe4217e69dd98e862fbcd9c81eaff300a825a1fe7bf5cc752e5b84dfed042b0dda + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + "supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" @@ -3712,6 +4988,13 @@ __metadata: languageName: node linkType: hard +"symbol-observable@npm:^1.1.0": + version: 1.2.0 + resolution: "symbol-observable@npm:1.2.0" + checksum: 10c0/009fee50798ef80ed4b8195048288f108b03de162db07493f2e1fd993b33fafa72d659e832b584da5a2427daa78e5a738fb2a9ab027ee9454252e0bedbcd1fdc + languageName: node + linkType: hard + "tar@npm:^7.4.3": version: 7.5.2 resolution: "tar@npm:7.5.2" @@ -3746,6 +5029,15 @@ __metadata: languageName: node linkType: hard +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: "npm:~1.0.2" + checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -3802,6 +5094,20 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^1.9.0": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 + languageName: node + linkType: hard + +"tslib@npm:^2.1.0, tslib@npm:^2.4.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + "tsx@npm:^4.19.3": version: 4.20.6 resolution: "tsx@npm:4.20.6" @@ -3818,10 +5124,30 @@ __metadata: languageName: node linkType: hard -"twenty-sdk@npm:0.0.3": - version: 0.0.3 - resolution: "twenty-sdk@npm:0.0.3" - checksum: 10c0/0a3c85c27edb22fb50f7eb0da4f9770e85729fce05e9e0118ad0cdfc36e42425c93340a6cd1c276daf30aeeaa612db0cd905831c0a8287a31bff3da5be9b0562 +"twenty-sdk@npm:0.1.3": + version: 0.1.3 + resolution: "twenty-sdk@npm:0.1.3" + dependencies: + "@genql/cli": "npm:^3.0.3" + axios: "npm:^1.6.0" + chalk: "npm:^5.3.0" + chokidar: "npm:^4.0.0" + commander: "npm:^12.0.0" + dotenv: "npm:^16.4.0" + fs-extra: "npm:^11.2.0" + graphql: "npm:^16.8.1" + graphql-sse: "npm:^2.5.4" + inquirer: "npm:^10.0.0" + jsonc-parser: "npm:^3.2.0" + lodash.camelcase: "npm:^4.3.0" + lodash.capitalize: "npm:^4.2.1" + lodash.kebabcase: "npm:^4.1.1" + lodash.startcase: "npm:^4.4.0" + typescript: "npm:^5.9.2" + uuid: "npm:^13.0.0" + bin: + twenty: dist/cli.cjs + checksum: 10c0/bb7a43331c61d34e250c7850e1746e6aac09fa8c552e0e19598b8ad44f56e3a9d51dc985d07da4c205ed179f49ba1ede52c6a9ed8be002689f70b571d1ac9c6d languageName: node linkType: hard @@ -3846,7 +5172,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.9.3": +"typescript@npm:^5.9.2, typescript@npm:^5.9.3": version: 5.9.3 resolution: "typescript@npm:5.9.3" bin: @@ -3856,7 +5182,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": +"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin, typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": version: 5.9.3 resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" bin: @@ -3875,6 +5201,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 + languageName: node + linkType: hard + "undici-types@npm:~7.16.0": version: 7.16.0 resolution: "undici-types@npm:7.16.0" @@ -3882,6 +5215,15 @@ __metadata: languageName: node linkType: hard +"undici@npm:^5.18.0": + version: 5.29.0 + resolution: "undici@npm:5.29.0" + dependencies: + "@fastify/busboy": "npm:^2.0.0" + checksum: 10c0/e4e4d631ca54ee0ad82d2e90e7798fa00a106e27e6c880687e445cc2f13b4bc87c5eba2a88c266c3eecffb18f26e227b778412da74a23acc374fca7caccec49b + languageName: node + linkType: hard + "unique-filename@npm:^4.0.0": version: 4.0.0 resolution: "unique-filename@npm:4.0.0" @@ -3900,6 +5242,22 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"unixify@npm:^1.0.0": + version: 1.0.0 + resolution: "unixify@npm:1.0.0" + dependencies: + normalize-path: "npm:^2.1.1" + checksum: 10c0/8b89100619ebde9f0ab4024a4d402316fb7b1d4853723410fc828944e8d3d01480f210cddf94d9a1699559f8180d861eb6323da8011b7bcc1bbaf6a11a5b1f1e + languageName: node + linkType: hard + "update-browserslist-db@npm:^1.1.4": version: 1.1.4 resolution: "update-browserslist-db@npm:1.1.4" @@ -3914,6 +5272,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^13.0.0": + version: 13.0.0 + resolution: "uuid@npm:13.0.0" + bin: + uuid: dist-node/bin/uuid + checksum: 10c0/950e4c18d57fef6c69675344f5700a08af21e26b9eff2bf2180427564297368c538ea11ac9fb2e6528b17fc3966a9fd2c5049361b0b63c7d654f3c550c9b3d67 + languageName: node + linkType: hard + "v8-to-istanbul@npm:^9.0.1": version: 9.3.0 resolution: "v8-to-istanbul@npm:9.3.0" @@ -3925,6 +5292,13 @@ __metadata: languageName: node linkType: hard +"value-or-promise@npm:^1.0.12": + version: 1.0.12 + resolution: "value-or-promise@npm:1.0.12" + checksum: 10c0/b75657b74e4d17552bd88e0c2857020fbab34a4d091dc058db18c470e7da0336067e72c130b3358e3321ac0a6ff11c0b92b67a382318a3705ad5d57de7ff3262 + languageName: node + linkType: hard + "walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -3934,6 +5308,13 @@ __metadata: languageName: node linkType: hard +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 10c0/087038e7992649eaffa6c7a4f3158d5b53b14cf5b6c1f0e043dccfacb1ba179d12f17545d5b85ebd94a42ce280a6fe65d0cbcab70f4fc6daad1dfae85e0e6a3e + languageName: node + linkType: hard + "which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -3974,6 +5355,27 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^3.0.1": + version: 3.0.1 + resolution: "wrap-ansi@npm:3.0.1" + dependencies: + string-width: "npm:^2.1.1" + strip-ansi: "npm:^4.0.0" + checksum: 10c0/ad6fed8f242c26755badaf452da154122d0d862f8b7aab56e758466857f230efafdc5fbffca026650b947ac3fc0eb563df5c05b9e2190a52a4a68f4eef3d4555 + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c + languageName: node + linkType: hard + "wrap-ansi@npm:^8.1.0": version: 8.1.0 resolution: "wrap-ansi@npm:8.1.0" @@ -4002,6 +5404,13 @@ __metadata: languageName: node linkType: hard +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 10c0/308a2efd7cc296ab2c0f3b9284fd4827be01cfeb647b3ba18230e3a416eb1bc887ac050de9f8c4fd9e7856b2e8246e05d190b53c96c5ad8d8cb56dffb6f81024 + languageName: node + linkType: hard + "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" @@ -4030,6 +5439,16 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^18.1.2": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" + dependencies: + camelcase: "npm:^5.0.0" + decamelize: "npm:^1.2.0" + checksum: 10c0/25df918833592a83f52e7e4f91ba7d7bfaa2b891ebf7fe901923c2ee797534f23a176913ff6ff7ebbc1cc1725a044cc6a6539fed8bfd4e13b5b16376875f9499 + languageName: node + linkType: hard + "yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" @@ -4037,6 +5456,25 @@ __metadata: languageName: node linkType: hard +"yargs@npm:^15.3.1": + version: 15.4.1 + resolution: "yargs@npm:15.4.1" + dependencies: + cliui: "npm:^6.0.0" + decamelize: "npm:^1.2.0" + find-up: "npm:^4.1.0" + get-caller-file: "npm:^2.0.1" + require-directory: "npm:^2.1.1" + require-main-filename: "npm:^2.0.0" + set-blocking: "npm:^2.0.0" + string-width: "npm:^4.2.0" + which-module: "npm:^2.0.0" + y18n: "npm:^4.0.0" + yargs-parser: "npm:^18.1.2" + checksum: 10c0/f1ca680c974333a5822732825cca7e95306c5a1e7750eb7b973ce6dc4f97a6b0a8837203c8b194f461969bfe1fb1176d1d423036635285f6010b392fa498ab2d + languageName: node + linkType: hard + "yargs@npm:^17.3.1": version: 17.7.2 resolution: "yargs@npm:17.7.2" @@ -4058,3 +5496,10 @@ __metadata: checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f languageName: node linkType: hard + +"yoctocolors-cjs@npm:^2.1.2": + version: 2.1.3 + resolution: "yoctocolors-cjs@npm:2.1.3" + checksum: 10c0/584168ef98eb5d913473a4858dce128803c4a6cd87c0f09e954fa01126a59a33ab9e513b633ad9ab953786ed16efdd8c8700097a51635aafaeed3fef7712fa79 + languageName: node + linkType: hard