From 6cf01e5523c623b72d3d7cd9e5a0a8036a4ff76b Mon Sep 17 00:00:00 2001 From: Shotaro Nakamura <79000684+nakasyou@users.noreply.github.com> Date: Tue, 15 Oct 2024 17:23:18 +0900 Subject: [PATCH] fix(build): remove private fields (#3514) * fix(build): remove private fields * chore: format scripts * test: add test code * reduce package.json diff * feat(build): add progress for removing private fields * feat: rename `scripts` to `build` --- build.ts => build/build.ts | 30 +++++++++++-- build/remove-private-fields.test.ts | 21 +++++++++ build/remove-private-fields.ts | 52 ++++++++++++++++++++++ bun.lockb | Bin 350361 -> 353659 bytes package.json | 13 +++--- vitest.config.ts | 2 +- yarn.lock | 65 +++++++++++++++++++++++++++- 7 files changed, 170 insertions(+), 13 deletions(-) rename build.ts => build/build.ts (71%) create mode 100644 build/remove-private-fields.test.ts create mode 100644 build/remove-private-fields.ts diff --git a/build.ts b/build/build.ts similarity index 71% rename from build.ts rename to build/build.ts index a43d47bc..ac8ae6f2 100644 --- a/build.ts +++ b/build/build.ts @@ -5,13 +5,16 @@ Copyright (c) 2022 Taishi Naritomi */ -import { exec } from 'child_process' -import fs from 'fs' +/// + +import fs, { write } from 'fs' import path from 'path' import arg from 'arg' import { build } from 'esbuild' import type { Plugin, PluginBuild, BuildOptions } from 'esbuild' -import glob from 'glob' +import * as glob from 'glob' +import { removePrivateFields } from './remove-private-fields' +import { $, stdout } from 'bun' const args = arg({ '--watch': Boolean, @@ -81,4 +84,23 @@ const esmBuild = () => Promise.all([esmBuild(), cjsBuild()]) -exec(`tsc ${isWatch ? '-w' : ''} --emitDeclarationOnly --declaration --project tsconfig.build.json`) +await $`tsc ${ + isWatch ? '-w' : '' +} --emitDeclarationOnly --declaration --project tsconfig.build.json`.nothrow() + +// Remove #private fields +const dtsEntries = glob.globSync('./dist/types/**/*.d.ts') +const writer = stdout.writer() +writer.write('\n') +let lastOutputLength = 0 +for (let i = 0; i < dtsEntries.length; i++) { + const entry = dtsEntries[i] + + const message = `Removing private fields(${i}/${dtsEntries.length}): ${entry}` + writer.write(`\r${' '.repeat(lastOutputLength)}`) + lastOutputLength = message.length + writer.write(`\r${message}`) + + fs.writeFileSync(entry, removePrivateFields(entry)) +} +writer.write('\n') diff --git a/build/remove-private-fields.test.ts b/build/remove-private-fields.test.ts new file mode 100644 index 00000000..b2ec3d72 --- /dev/null +++ b/build/remove-private-fields.test.ts @@ -0,0 +1,21 @@ +/// + +import { removePrivateFields } from './remove-private-fields' +import fs from 'node:fs/promises' +import path from 'node:path' +import os from 'node:os' + +describe('removePrivateFields', () => { + it('Works', async () => { + const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'removePrivateFields')) + const tsPath = path.join(tmpDir, 'class.ts') + await fs.writeFile(tsPath, 'class X { #private: number = 0; a: number = 0 }') + expect(removePrivateFields(tsPath)).toBe(`class X { + a: number = 0; +} +`) + }) + it('Should throw error when path does not exist', () => { + expect(() => removePrivateFields('./unknown.ts')).toThrowError(Error) + }) +}) diff --git a/build/remove-private-fields.ts b/build/remove-private-fields.ts new file mode 100644 index 00000000..17663f14 --- /dev/null +++ b/build/remove-private-fields.ts @@ -0,0 +1,52 @@ +import * as ts from 'typescript' + +const removePrivateTransformer = (ctx: ts.TransformationContext) => { + const visit: ts.Visitor = (node) => { + if (ts.isClassDeclaration(node)) { + const newMembers = node.members.filter((elem) => { + if (ts.isPropertyDeclaration(elem) || ts.isMethodDeclaration(elem)) { + for (const modifier of elem.modifiers ?? []) { + if (modifier.kind === ts.SyntaxKind.PrivateKeyword) { + return false + } + } + } + if (elem.name && ts.isPrivateIdentifier(elem.name)) { + return false + } + return true + }) + return ts.factory.createClassDeclaration( + node.modifiers, + node.name, + node.typeParameters, + node.heritageClauses, + newMembers + ) + } + return ts.visitEachChild(node, visit, ctx) + } + + return (node: T) => { + const visited = ts.visitNode(node, visit) + if (!visited) { + throw new Error('The result visited is undefined.') + } + return visited + } +} + +export const removePrivateFields = (tsPath: string) => { + const program = ts.createProgram([tsPath], { + target: ts.ScriptTarget.ESNext, + module: ts.ModuleKind.ESNext, + }) + const file = program.getSourceFile(tsPath) + + const transformed = ts.transform(file!, [removePrivateTransformer]) + const printer = ts.createPrinter() + const transformedSourceFile = transformed.transformed[0] as ts.SourceFile + const code = printer.printFile(transformedSourceFile) + transformed.dispose() + return code +} diff --git a/bun.lockb b/bun.lockb index b77f85b3af21b9d4350e65838cb9b1e03ac72841..fb9062e47ba73a72c6b3417e8eece83011d8d687 100755 GIT binary patch delta 55642 zcmeGFd4P^(`^S&p%iPROvhRdS*1_0j7~J*3dcIL_nTj`KK|>$>l2tld`e z?8_CGH)$|!`?5*D{{Gg9wY$dGtC0R%>9(Wx-r4nwhwtCnYT;a`#688o9vkxMTDRib zT7gHGt(e{{FBI_kuJHNtQ*uU6Nu4~_R~C!P$Y*1GzDnS6i-#=kw0JLAk@V$Y1#q^- z2^I%h>}avE#VQtK4CdvZ3Hp5HDc~cE2QBWfct2Q<^i>vbu$XCaghd}%1H0c#ng-3d z$mAOZmO`Hf@_+tNgwo(Qbi9Hu&zJwP-+178Pz9u=rlrV9k0ZH*9t)O5pF|n5Pef3~IoO54Sb9?voDEiO3G*9Fb?`G#uK$e;s_-t6)8z4tPHm(fU@fpAcnMevRPkpR9d&0)`q?S1V zWK5&Wljxwv?*Gr=%=@24=l?J`oxw5XQajZ*eQF7+FC{@uoW1po2PbDt$yB`UYhcoA zlP=HZrl!xx$(-REGa;GL^ZA}?XvXgmQ0Ze+QZnOGvL@XCw>e9vnI46c@g(xa$RAsbPS$8Cub|iBaF261 zR4Z=>lENn^cWhir`c&US+@i*1wlU$e2UKuAY30WP)Y!NVE2&fLePxTdWOUs-5=S2vgxl7C$6oMGSLOvU5_hsf@X$c{vl5 zS3_VW(Az1&l7yO~@@Y`{GP0As(c4IXX|zsQTn)+-GsYQDq=O~%P%I)ru9^+1f(f8p z#Tq+#5=BMjq39KCSA#03E2s*ZryBhNQ28^`Q*w1$2u?Kmv`LB$pD#MJJ4PG*=+yM& zyzCh%>1$EcBI9&WuHR1lsX?=-TovF1FE*B@8QGt1;`B7K;_3^l&&u&S?yHz#8ki5N z!8xE}=n@*C237#!)smXd;Bf6Ay}b0G zT(<^PZ3k_>zuGUJYsy(epfKhQ^H0O5fNY{r*W!F5r%^*%YEJGPWL5aN<1bY?Z{ZE5 zImf^<$^|NSJgDZ40_EVopqjIMfpOAhHhn&_MlLE(N|}MXe7?6Anp!eQSExo8*vu(u zjIGa?jGprI@*@#mooj1bteBzo8IttGvEus zOR<{`$`jGW%-rDk^6g0E=~VqMhvIV@pc$5Or&-ref|_At?lKh(1WO|yL$4l3J(-h| zHdV{_OXOFB|GK)i_d3q{pFMqIj$$@9XL9Oj@Z<)wv81MFO-ap8$*z8nsUX*cwr?}C zdXx!jtXth{DyE0oV^ebfOU(Q=R-!{yhWsVlQNUjf{<^M5*K^jn)G=}6(u>;${OMd* zwpLlM7)mM3<+LeVD{oxt_$l1a_?p|{{qI(}p%0l(MB}iAwV#okHd#(-v&D2a4wQFI z9I>qi^s&*gfO`Ct1Qu9EKMK-AP@fqv^T-Q8iHj+=l z^61|ImG2p_I{0s{k3;{<0vTNx|GFS{p&;=cX{&IpvWR?|+SwiO-lWN0*vtd`Bl*bg7Fjahhkz={c!U z7e*sw80Ban`htvbUjAR#yo5c*r*G~ycrz$p|M`?@*bkuOFG2Y}y0xWDPZ^^%F8?{> z`y9|48&IL7Tf{j0H_XcYz>+$UO`DMFJqt+9p$H17y3e%m8&CyA_l)TAID_LpW=f(;$xQspIly_i zXU1iWp6ENU-}G>o)jtAWO!@|k7rksNwD!?Oeii9z@M2Isjs`(?%2>sKZ`(nm{{xf< z$EHm7Ia?~$$Se1%X<=p@O`r!^ub8maS!6T~tn!+XOM_a9o(5GwT1xi#l;%F)L&%E4 zamhKkS>(@7nUbS>gWN-AC|bR4DxL?bqqkdo&WU<(;#^s&Y}IEDo3bAUFUDqUMs8eY zc1C8z$*NSjY{fUtd@ly7gvHL=m`xaUK zOi+$W1f1Ld5|Dd{uDWaN!a$y5Mx zJxNCOAWT7Oc}{L}?iB9Rzdd3$mx(!JGt#ho>JwAZeV}G}JSa~^Hx~z44V-5&6I267 zS{(41@o-<{GF?gd1ceMbqEJC~LB(D*P(3egF$8L8aOvQKdYjmd84ET}R z6_T^ZdyXBKN9?Z_vxLeTo@< zbFez{$LLFe>DZUagXsdJila|knjmY+t}kv17>ry6xhAL?7;DqJ(_r=V^RUr(FJT&z z2x{$UO1c_wIjFhSt)xk(F0Y&k8R;2LjT#r_oxI5J#i)9kJUPcVu9T^`08|A7LG|p` zi%mnjT77PErXHR9-XVV_(tjxJ_bPf1R8PmIjGiLjj?Ea8o1L1TvKPHN;*|A!Piwx|W#$~6I@&f<* zXfe_3n`Zo((cB<|3b|(rxd7|BN$mmG)w5et$h}_3RUq0->X0ZGUJo~lA@Mn9rYAb7og)5Q zoXvc`;}q~&)oIW<;!kx_J4eEgFgf~R8RNt+PVk>|3P>64H0TluKS@+KBPFPm@E1tk zkpfOurv!gvr=UwDl*v-t!P%PI&PnYW34Mdq&NJ6H`3!CguCA3iWBU^#K{r8BBA?{+dFY@wu^;P1wm(9+XR1Yr=VBF zKf!6xI}+Z`Jm~FJowYpCU(I>2cL#qzr=WMlztw5bClWqh&F5=LI^F4>fd4n6o6e+F z7ma_Pu~NW^?~xEL%V9&l2smfDB!q_{bwCO^XOa`0f~zB;_t3O+(t0I@E7tV+61`Hg z?nsP9uwLnw5MExC)H5NxA4yFJI$0kj#7u(2`${4(xC_&+XQKy9PLZsGSp-kb>ek89+{!&ir@Q6Rf**rWF zy0roj}j`7~)A@zZLriIUUou?XC$nA!^*3(rYrmhjkB2_Rd;=k8vkQ@nrhgL4aeVr0Q zEnCUeaXpg4nQ(F>`YRLI1R9Kvgbt(YCI-8NN!42Mo2`!6q;dkLwUeGynbpn%i z^O#6@Py*Y7=P^yZEl8RQJ~ykpKQR`m(3{~JxLKa2Rwm6rD>1>lB>0y&4N@ZE7tzU{ z<%0F-cV{!YnQhF(W71>CRy8gXu0a)=jOYl9IY|9XuC@u`SCOtVwXg_RPBP03i}kPs z{~9NCd?ehMtR1l^=1t`W~GS!xD zQEqV|_gW!Wp}V(bVmG9aTVKe1QpjC?Wz=qh;kqP+kHPi88)gjnAwy;auQkYu1YYRj zH0;qKe2!Emh5~~jXxh_AW+fkqBv&###}Z=@*ti*m-<-|ak#G|R8i!D_7KBVB#U4?S zk`R6niO#9k>k`@99?a{BOeb{~+q-0n!6%$HPC5m%BB2ojX`ZunOpI^1E1&qr(JUrs!%cylA+DkL+3I5sE- zu0yik!yzt`>8RZE8Iq#XtVWH7o?r3;q{5OzZy~YD9&Z;rj8!>WVR#X2a#RYPP@0oQ z8;757bSDxOnKp)hMxvjpb8TWQ9mGo}DRdW7Ung!}JOB00#Ceg}5!4w?46j2{R2Fy6 zj7kVUJJRPvVWqfHJ|D$eY280b#b_Umw`mzjxXem#|C5wBIvRCad0%%nFNpZ#oPq_B z@WL^LK4h(a@#-q~_-Bz!lru~oR9M$%5k zK@aKD2`0@u5{9yox;kk;aM->n68;HEZDDe-FLX>b9z|k4EJIS9FdvX!MN;f~$GLFX ziBZdKyAxv(G*y`$Y+>t>l8`QPvts;-F*5Wf=b=d^u%~(F!LUXf6+-@ zLXf6Ko3bs3jS#6VrQnw<6T)k38V+QUsgSM-uQSnTIJSUpN#QMU>IkQoI}>9O;=Ii9 zOAwvRu zOhPytNzGvhSRP++QddR-fn4Xol^ytcpkQSrd~2>52UFEyB+X?`4^tDu;VC9FmE@Kfk)WqlI-KRBDwb(v~nkdq&$(nparS15y(_M&O{%3Iy95{I5h z;RLb5DYz{Xcz>GHa9D?Mlj+eWX|u>iQWYljw<0N<*WA$8NNfsYlERnGi25k2dqVgc zq$b9SW-WIL+(`H>bXwYr>kt&KHY<8x8qW>NOe8G?-k~Y{EYiSe9pUP;jT1=gnh+X< zG{A{t``rVlJl>%#95ctX%bOzM&PcZYo(Z8$q^q5i-IK!4!d>O%kuzfFY6@<>qn(%m zrh2@70!dvoli`XyQlmTa^YaUiKiIFlb$!MkA!ZQPVNpB zz~QO&N#Q#4Oz}Qv8;in7B$Z(%>|IETt74A4@&=N65%w(C-N3C25}s#1ok23oyau_= zd{Z~RAj}sbsgYPRn-3zf!BwEnN!=I;4_y>J zhHF-BLQ>mI;GU4=twQw|n-VF1dSWbsrkBsjVtc(4Nrjp)`V>jc@}^$6_D#`7YO^0< zB@-^|t;CEumKcj*VnoYH`pu>{+$>YUvq+sO(o9z0Ezu&k^-lT35(%HMIy%TL z-=!Vmk3_=vS{=P$W`B!RG%MPy zHum1&g=QeNcH;UZg&z@T8q|ZMI8sr_wsDPQ27DS)Vxi?DNXlpKCXORD_axO^d5y`3 z|Aw(*B5||N>bDF|B~Tt#F>8&N%{tTpsc@c#cOq#H;1M?1;5wggv?-lcDFsQTkk%z3 zv>lVmb$~#V&bYBlJzCW?)grG?UC>c=-PSh&6RF0;IQ z(dEx^Qg?7;i%tPz>;re3(eXyk-`Q!fGvZ(Ar0(R_os?mo-8Qy{IvY$o=n11W5~&|) z%=jJ&p+}U4C))Ag;lZam_!FFhry}8r8_h8m8+Jm@Nl!<@4eyBtC;7OsC_wipI>o%V z68pb#QlE*0JKbwqMMQIEnupZd*~(4Q_Co!(nTfFogS`f7%JsR=IK{a7CM$Uz55It< ziR*PT9J=3hh2dxM>VhO^n$XCzlDCA1o|fdKz0@uirfamSP|^cl40EHH1!p6IHGVS^ zbF*tw_%m_Fo^wRaP0@&@q5f-}f<2M&P3V-9GXZC?y+|5mmTxBQIV7GUA8r@B*;E^J zx0UAE3z7n#ma-TA(CnCnRgOn5xUTJa}OVQxUfk2)vi!dI4?v}pUnpQqD?a%@I7ME=rj2ek-B5a z?#L9GizLsPW$tk#GdNkVCB`DC&8CpH|1gE{An8bAEW%Kdj88+`Op-ZWw@1=cHfeK_ zRGX>$1EkJKrsJ19YMe*~EIq@KRJYfX&}t+$8WzJNa7B44Jm&K?#j1pNV4Q^1ABn>j z+wzY{S9&E#YWKL$mw-gg_b0|8T#LZ-0i5+Rk_?f?@HG7ib86yj{$^q=?kRQ+9r{UQ8EBdH1I@Od|qX@X+)2$CHQ zdROV$!suZk8Hl8AF*c+vLDCpdF+O??$;9|JnjN#-L?qo}46Z_A+&Fx$5?5IBF{Hts zr1HA%G3A*&H%ju3o%`XmLb6^GRxx``=V?2q$-ziUqnB+HLMxF>o;TsHG9}ZtOP(`5 z^d8%X9VA7c>BTXm&PJl$mpyOV$K1hBW02Hej-b?ayG=9sjv{p+jVCC~gU;`+j=E^idV^O4kc zWN$PVl zl3h9I*9%CBPkPD5>OZ72z<#=eadF)iW|Ud6-FP}R`%LDC@NPR_{loCYU2wV_kP7%uvA4oL$=!#K5dIbw2~ z`-NFZvSj6EVD~zy1w8n9!{=*(uB?-_Ga+=vn@lfnnaPAxoA3**coL}-QbkASBLp*h z)cB@v8F$7yXFf}eMUdM$ajw)Okkqdu;aAZ0L&r+T>A%L?ILry}7g@0l`;^BzNzgTmenZ2ErG1v(c^K~fs7q^w7*gez}Mj75-l zOt>~YYTQ%FIm5|%w6pniBzzCLZdjP5?gWyG@)nNJr5|XD>WR;2I5n5X-Y zl)K-CA4WT-#!qxozl((Tpwo0RjSqZOI7Mk-cO(rGbujVfB5BfK$+EKr$?V`7+wYNj zn>3d6$j9XKma1uRJxmG2)ovukNhNP;y#ERB+(h$)J0B~&8^CfEl8GF}UbdCIyVCHpNLOKL(qca|5|K{a4@XidOnR2aHArfiIcA(eYLDc3Gu-5J zQ@a_9TqNs5+VVJ32P{eB9_%|SnY*=S$4x00dG)0sDUQv7@D7{CW9FIk2uY)7+F9WX zV`-jEc14ocP3^OhS|ZUu0_Yz$&6}D26VB$}BB7dJGI_k)=)Q1vycF6<@#JJ7qTPWL zCN9i44@Oe&&6BA+k<=&C`wx&*im9Po%C$-pyCI^Vg>Gu(uE7TZtLcDIsw1YiHuw4&m!g7LNZniG02D z6}msssRzbq-A@@067^jZV-ZZa=xObvR-)rPqBw=bZP3R_;rid2WtCQ}NC=HU;<^9S zr0~6PX1MjZ{Bxvisv$QW9(>xg)r8P0BsIZ2R`~)+wKAl6iLqx);fx_OX9!Yvk~k`G zh`Q6Ju_|&nc+*OJdCQnp_|6n!o;vkI(pG}EdnAOHB3*4NU_3uSlJC7$JlyPi)96?) zwr3!jabW=qJodf&px@siT;>OJ&&w!N+GM1DRF_oo)pg+p~f#}I@19bvvEjDV|txsEkzpONgDGSzea0jvIQpo>ONS^ z-yu}xEGJ5LYcYRPC>^$sVV{N_XxP%f7qVlD*zHAZ$v+AWM#2s-*|x#eOUyUG|`UBs>_WXpaEn}k>V zJ|DUG>8i7#O+Dw6HnF9y2>87asetw(Cu?IPY0Hj6t1yT~8}d>-`*Yz~5}J@;ezx)) zlH!@~gx*Wk?=L$duv{=hK0s3FF`Gvv1S`e(-ASeV?Za2b_`UN8M@0tfZX`9!tc6FB zl!diuWXL55N;LW?+Gc2JCVO5=Z_a4tjo2a=92rtF`QifX!<-^r>p zFD>w1CHJeE{RaZ)u1v^Lr9k}2*p8_Ar?sQ`d`4j|E+@l?Q*nWFf?9= zdidPtwfyDW-nIPtdd*vh1v+ebD@!kn1etgJCn!%6j@~6y#rWStwkYosUIY!-YXUML zn0x{EWG#PX_jff)x>1m>QQqf2qbeC~^+MT?v9eIh-2^NDJE;7r)*j6B+%y@5DoVGQ zX$^$RkY(iyVJvAgY`RePGp#I?Jj>#2s~1W?hx)y14xeg(L?z@~oM-U{P?s^RX=Y8CHKDnjnxu zX*2my#dEAY*P>df3g=n*22j`k98LZIvLMZ##kRu#1m)}H~>jl8g-``=vFZO$SV{)6-O5M6?Ni@h&z)S~o(#6xLe59^ z<_W7mA64mg^d-Q(HvN25z8BCd=|w&yzijPBm8-zOZ_s*e|X8pPQ6f>x3_X9P}hY}`8wP5&H)}!mPFCV7I3vq5X!KxmCwiGZm5yJmRqBdzl@F; zz9H5|s65w!0k?f4&Z@&3`K!3IG3+G65!O&B!;w}NYOP@OmpJ>xPbazppW|nV~ zlHHSt-Xf4@t%NEy-O56-nO2`=^+MTYTgd!~z%d>hg&nqY&g%al3 zj0>#6g-~`2ZMsnMjTRSK{l7w)+{B0QmVn&}m)ML#u}k?-!ON^(D0w+3)k>=uO7B=) zW$`wfE|e$MSXrp?S#Ra_y{+PIt2iH3@CK_FioJ&q74U%7pN~OzSDYQuhe%fTEf%+0 zbD^?t1EqS*;u8|M&PS=XTm6MlNjq)2Q049l@Nh&GKWh_&a=>1&6!@Bz4}-Eh0_qY< ze#6S=W59i)iN96@nZ0e3g))D~%0kKSf&urBCjQDjWq#Bq3zhtVm4#|eft7_y{|c1q z8!Mlb;Pz>1y?V;3zqNQ8l*M=Y_zQZApw<6;9*X_d%0gB9o0Ttwa^4>S7G2q#(}#Pq zsaUP-GLO1=nG&Wo-7-@($@*Ti0cD)y!YnJAE~=$wIZEnUybuDlVRMVRLIIl-vRgxHaSL{+DQzg-UJ%$_1URUZ|#b zx3W;_eL>mxvwES}Yxq#}27yW+3~C66De<4tELp>Cf>0Utw-9v+C65B78pDSQ94q19 zMA@fUd!ZVhZsqjgWh%xfWSC(S&c~p8eRJ!mT$_9$R6D1Vu41NHJE69-8$dbmMw`9} zdLmd!G2_@AIESV2BDc%{uR)TXn}%0i{z9vox##0@q< zsDzDH7HZGjWM!d-d@HDm9Dfcs$!yEr^ylb^K7LKXjvmCr{Nv&-s* zdJu33)J@adR{yV1Chu80&^Y=$1!kj{=KIm&PfF$zs@z{dMcVIHFO>dID_;=Zv{wGg$yoW$VWwuO z4DXSv%Hq}xLpoXP3hKHL zUV(n1O&2PErj;{e2rpHfjY1XV*o6NCl`q%kp8~49X||jTq3oyI^yzsp>d7pt5XwM* zL|g^UwX*E^-#1?$e?i$Vu=)$3(ihrvp_bgGR?ZV6gJo86Ayflb+Vt~L4P0gQLOm3H z(8~WN=KZG`{+I0;f3;LS*#gQFTP;3pdm_}`)-#|yvD>Ea0ToOyg37-i)FqVsvX#$A z<$o2u@O7nYdGi>HYQSMzz#G=^ZBY7ml;JO^g5I}!p(_5s+J6Wt>6kwLg39+fdhd4S z3u_=$MPFK3sQvOgP(gFn>V>lV-O56bWs6Y*0v2PmR^KY5a9{HSqsBmQuxXO*bg$#_21hzrWYgU`&AIm{bW| z;NRbC8CU!}UoXk>f7|Zw@3oBo|LKc0Ekl2QucevF^?&%alUb?%4=eCCqNa328`9t3 zYv~D#&H&ee8r{FY*W&9edtCTeUy$j1^Pha5g}G-hU;q8Rmb{_ww=@U;{$9(>yz{@$ zl7A%s{k@jH&(bB-`g9%m_xD;niLib-ALXCFzt=kd`z%F{iaJp`2YT1%UeYM{$9(3%irH?{r$bx-`{Kb{y+S^ z7QeR8QL5*nHrM*Mx4Aa3phU+Xd$_+>omp@4y3jLM-QBVO?fDxYs8ZiKP$v2LW#uZY zj}*WC>Cr7OS#a^rMLm-4-M--I)f?6{xOjb;v9G*Qxk>})^0QyLeZS4y=QT~HPQ2-@&yu^I z`lw2$#q;vpKb!OZ;}1t>e(+PXZe6P0xwLz;`nTuqI~DWF0=IeH`Q__P%HDM>bAKtf z)Yw3k-f6dAcI7WCmR{e-8FcxQi5*{gY-HyTPTib1{{7OM(^mg+I=5A|zD--aJ2Ip4 zl9+Q#j{aC-TI>(qH{AG9YKAkWabQbRy^j&?b!j(#4!zz#Hc-mFZ4TZo>mHM0dJ2ke zb5WFcSIk9Ge;kS*rKsp`OGfdo6ctCKsO%<>MzMH2iWj7)>XsdYB5?wWDPvGnclSzh zLW;U$QPgy^#-do0isCIPYPoe%Q1qCHVqpr3I__a9evzWpI24z;^TwgrGzrCVDeAiM z<53KmjN-QODC)V#q=-#J(QN{X2JVUpD0WEkqZEzYPN^s+q@%bm6-AtTMv5vKCdonXQ4=$jG~ph4TZn88%_ff++;zbyHn7{ zEt?LsbyEdN?p{GVw`vB^-pvwpa1RI~Zk^8^(y14TMUETKt-Q4(W zpu2mM;7a$HpoiNg2k7ap5M1RJ2zt4la)I9NT0tN8jNodw=MF z_4JyZokvaeEpPncJ^Anb{N?u#JHNbLre@pwZ~dgjQ%@BCX#Lb*?z{1aKlf)IeJ}Cc z#?}YixVeEUdD{*=|K*#hqassYoZhHY;Kk*ApBk|3%}Bz{DHD>HR9N>x?!C{oemy6z z!$Y|f>hy2+f`7&HIUSa*No^VIusSp?YiOf&=LL84H-_Ha`{<3sEC1;FWXFQnhBR+< zX}fzT6&vecR`$M+p6>YCvgP}at{nRF;1B(auCF?3>Yh@SDsFYkrv3Qr+areTozkV@ z;x3oJ8Nb5)kmk8HXE5Z~yQwpXfi-!=z^hV>bgRxp(IX$l94%7G?hGwbzew@nEEHqh zd0JjJ%|mf~Hi{ItQyz*TH=wvL55;)*j1;l+Q4GpQk?L;9N3lbS&^#2A-2U@WOjv;8 z2`SQC{|zXrEJTrV1BwiHn-u${s5l=*mYX~u#q=9dydXu6TXq48`ioFZS%6}SyH|>L zrKr0Q#WXi-A&SL|QM@I^47bjWC=zc%vG7I|v)sc{oRFf`A{2And5ci2xf#WADe~O- z#VC5*g5tKtDCW7xr1(XOZa1Nr@2m!eqVCNCv? zSGqd|j$3vau*yvp+~)2Ttahs|2V6Hxu*N+gSnJkV5qKk1gLp5wz0O;K`2k+jk8$%? z1wJU1L&)(9mHdUgk93hcZ*^dn(!$AOGP3phX}o*pw!kg^&D-a!4pjDsHt=(fi?;V) z8))kHig;yBAU5#MCGOnSfr*~tn-zgre~s;Z)&>sxt0wZSo8SNB>$&FC)Z7&Qg;d{6 zbS1V^Pf34#qxz=qryH4ne=KUJkPkHWerV$5&CZxSc?vJT4&I)&K9Cd$dH)3x`JzswzfR}E(oY8-5y(hY`dKW2dWsy6s32x8d8E6;q%G%!U z{y>dD#VsSf-(TiWOP#5Imel(xOAUA4ra*Z{QqbV1QRW|tI^SYcviWz(&ey%zja^WXfX7|5si9brgo;hyWgO^MPHJ`4Cm_Cke~fp zEyHxTF?#)VlyC5|=fx`ao(p*Y%D%~c)`Ae(&ulF zeJ}9b!y326{t~~~UkmqJ@4mSx*gNlI0!jJx#hk9FtoYK8mvnt%ZL|ke^fdh3%j$Ig zJEae$g%e*gbW;G=G3(FH$r=Nv2A+rjKzG*<% z7QPFmw+_?^HTZWiTwkM;y?$V;W1lX)jUZNUE_jLhWnA=~1pWHXuN+)@KS8X1!yjvP zXFz4vFSJTpo!(oJPA@2yx4Q2^vHD4J1*`iJl%0O(Th;1*l8*ZI4~Y4yS*2cdkfGdM z%j$lyI{ommw$(*ne9)gfC{PA2z5JkL{haIMB_s3$!oK z>MC2Ee$_WGs;pv_O;EPAhE=VuDY_0;R}EBSnn4k(s|AXUhctb4U5Y{tYz}>4b-Z-q z>3H4Fr6`okzb^+4A|tLp);-=Zr( zCs|!j__kIz+3K!B*AAVoG<5v$>jixwhAY$B^@jfvUcsGZb$NXd79c1Zv#s)Kczr#h zz{>&o-}~zzSBl}93aZilpq}uu(_1gn^@n;}yXm0V0Z<V zi*}0mg%~Q2#&WmSEk>b5V>qNY7&QyDkt*-?&{}kw1R)g1-h9+7(Cam_8wrgf zQGx7O-6-n!ja3e=RaTh{pI~*j*#bwS(~G!@Zr9q4f&Y<`Bj6gV8w>v}x{lylt4o2u zMJ?cpzS}bneknTD&x<~$cjMugS;LJs^8|E_t?nMHOGOuFb@y7`M08E8?ml#C|0Jj@ zr0W5zn+zWzSQWIJHU7$z26eQ`2W^4r==9=?BKaY!%YYvYuWO6dWx|hy?+b1PRdE*7 z4_?9eh}C7o_qV#}i%2=@zrG+>H0o_6H6|C@WOa{O-4t|sLs9|yxGiuhyjDtGPg=Wa z@Eg?vuI*Mg9bR=P#&%fU40zQsRQ}&-l{4Y@p;X{KWp%UQ_gmf5RyP~n0jqn)>gJ$( z#p?7v6s&J9q+nGr?zVQSFA-fbxCdQc7$zUOlddZ$4p_r^@Efh}WvjaZ-Mvs54W%tGiIt2<=vZdCjYMyVis-6|KsD;{(mwz|deS9%)WbG5pg zkVnC5{NJ#;o8hm4*Z99_b+^C|w7R#fZV5UKXST-wZIo)^t&raO%>m!FhD*hx)A+w< zb<5!O60yemeRTZqTMj9&#`;5Rw*p?3Xb3+-2kTo2>BU?P*C(>mcsNi`l;ZWO82g29 z71Z16w2sSjw?X=g3;Cedap_h=$zr%pSe*;6MyrHtn2ReB{m3?b<`Rif0I&N{(o!}Mjawj-EuQCd~ z_HhC#fWCshhQ5JLLb{>Q4TK)8>-`bETk;vCIj;9k9)=!){sC=+9)%u*9*3TQo`kkT zy5ZOf>E#=}I&>SfI>zTlRt2kex&z@(=q~7PXalqnx(B)!x(~V^dH~u4ZH9DX(hcek zUFp`mEm%FTA8dbU05lL91Pz9+g@!=aK|`To&~WH_XaqD88U-aoqoFa-SSSS=2aSg& zKzf}m4r&TDgW@4S6o7*CW!P=OZgnalXxcvuX{zsm_Cn7=&qMp%y|)ExRn%nE@9NG% zx=;E8`qTaKwqQLTw%1%8ys}dbhVK$c_a3z&{dJ2IknS<`7dxJWeqj`Tg?@uHE)-B z$S;Ejp;w@1pk>ekNSnq#pgj0_&<#*J?#Muw3F-JW8{HgeIy3{yg<7C*32Dyj9&(~y z{hLI>WGD^Ffaa2r0Jel$K#d^%wUN)D&!NkZf1!|Hq2Hjhklw+p1=WVmA?uY+tred_ zT9~vDX<5}Os#Q~~q*lc@)fz2(+M%=~X$R7Vqs>Go69>{ELx+kr&{}AkyJ8I^r;}AK zGzHQjcRZxCsm`L4p){y1lmxYhbdM5&5+S|+{}H775j`r9Dstg3Cj8(Q7K>Mr{SNO#e?Yt}u<4oLSLx}R7K=@vq_3=N=$Zra*l<-F#w zmqGf=Dc?XRA^nw^9ndq-v(Rp659EgeP!I}1vCvtX@jLVf^fGi1+5_!{o`ar;_CY^E zKSO7r-OvjVyOegHrtk*zmt(H+On>Rr7p#_k3Ds4DAbm%}a%}rZJ(}%$7 zyf6&XvAqw}2>O}s`~oc{41xsvCS0Y%kq$$8U+#BE560I(nb^IG{2Fu!dJG#KeDt?R za=>h83i_!~D|r1a20i0wqe+v5vK`bO(qFte4*ibNA5b-PpM%<$wC8B4pH0R&kj^7I z{^_{40a^wvhn7IMLQA2Wp+(SQ=q6|(bS2aS>J4=bUS^K>`coILLps)%hRQ+Zp$bq% zckAuJ%BeMAb(${$o&)(q58k7U_23=QozPv-8t6u73N#&>0i{7>Af3Mxpt_L$`p);z z571B03y^-P{hV8KeXtgfncJ@qR<61Tjo#7F!B_`j9enj=TLU+ZIhMkS_x7hE_n^ z&_4?4SUdu{9y*LX1Zo0bH^}*~9!x{%GN>k08)}b11kxW|(UJ9TNPpyJJTw97O($N2 zUV`>R2cS=&$DzBRdm#Oi-*GqG5$uvT9ad*Po$;=PhCpqgB&a!57Ag(#2TQ#_b(l}z zbT6Qzo{n}2H0epIeGE#5kB6>Io(49M=lw5lAn)r$FPNhZwCUP<1NOgRGz6e}Q&EdN{Qe(!0*Bp{HobbZ92Diw32F z?VyfOG3YEhJ$Z2gt=M2Z;zl6SmbVSrq?=wh;=5^35&;lrLEFayWp3qfLFQ^aH z8R`OcgHF=OTcATw8RW81CFoh?-H>ipbSHf~vNsn9fNBs2;d0qKTVH^ATe zInv!7>|d-tLPNj1`tIP+ye{3pMoB)$mkhji=qGIS8qE!#?H zEA$8?4@`o_L5WZss5Nw&28;dy>94!#ZtZSp1GEv+UD`E7&HnR4P65bgw&IVpa-FMq4%I+&^=I8ub#^8ZAdpVZ$j!o7pN=L9l8?gp@7s) z%~en@NH;TEXv{;<1CWMbBs2=T9vTYimcIui7pvg6plCz3z`qZj?^Wrd>9Xwy4S=qJ z+79Gn5Yz|SO5x)n6%g%-_-moTkP6Dw9?G?9uXm%;WHzFvqNe0Ds2OQFpcYuggknU& zT@flC+&=W4;0^PVJ2mjS5(YDgNii?oT5CVjMl@m9_yU0bBWcq;r9C;&-5LC0oTeij&w zDp!w3SEINMS_LhK7D96%c~)lxh2(r_9+U^og)}`{C~ ze0-B;O`5qWJA?CE>9MCw*W`UL?d;KUn_~SVS~qFYq=mUhEkVj%b@LlHT9`7LlvXBX zptMVHK_o=6X`K@yBkxKgH1>d|rYuhXj__d^7ght0CmE>;}+hfID z7at1vM>MAe%$XbAjHiQDTP??+BnA!Ki%;zNsY*4^AihZ}wtAa#?D!q?Pd%5oloU0d ztoOUS$Xfkz3`&!AQ^wm*AI>UO+m_v&b<;hAf&XK-qHzH#e(iy<#VEyd73!reaD&_b&0vLMUYl0ArFYTj`*D0Z z^0n^$%99&bK0Y(X->gY<&tL~BO`~tFVjNm1%6z_2Zv1YlOLKbx)n^b8^4cR= z$4~vz_2lo~cqM8;t=&*}?e1Wo>SN2W!(sQqWheW--sY~|-oR5LE0gQr6Kuf`>ssvz zZuK8=Kid+I})r=hq&XR3C0&=9Qh@) z(No1wF2=Z7la?}$E$6214OXc>nyo;*TB~{WWBf;`K!INhm(>Jc`!s3f{OlJ#D@tid$|a<1>k#OF zqG#~#qLdz_)FNfa;cC6d%*!5Glro-_+N88UQ1_iKcdZy>Qy7_i*WLYGun)h;EcHCD z8R2$%o;Kd+4inty_CLly`$6y8xyzns-u8FP?n6J^Z6uiJcH0-^KB0y?b01-U$lWS! zANSZkqR{i8$II|6Db;_cLz>L(zu&X%)nn{j+h4q&+xHGs z%>H1D>fX=BD7MBG)gGBMsnuz3D81?Vu^Tx+6rAKauEzSwE$=2Sm|c5cz)vhGN_=NY zVRGjW*!c2xXHw6MqLh;Etz`Arc0YbOSkv8iAXv%Y(mjf*dMBO;tF$jp_xkke27^+I z^7M5}zZ`579*KdL+-$eY%S6yDH>p`nRsYTI3Q1m@ZMju#k#4zz!D=?8dP#E2m+$@A z==*P{T;&uMZ?o=mXB}kbJmUUwkOn^GR(>UTmfw1oe>GT#pYOJMl}dWLsjmjd``5XL zk*Yt?*eoEC;{C^EFFr6f#^16@^X5%j@`TW>^&0*;ia`ykeB#_U-<7ELa@`_>pKVI% zPY=g8{{7(ZMJeUoG_qE27H3wKnltzS(Fmf#O-j174q^X+z^oW zmSume-+o!yuZk?XyIF^5M5=qsA>4A*J@b38LTxr}9v0C3Qsim$);-yWCp|ixpowqd zEiqnhLP*myIX$7KGbdscQs+L~P}`>LI%8owL&kk>L(lBok>( zzP|s9_0H>8dIqiJobTN0Kc}FuJLd@XdfQct>S=U`|MOQr+3TLzgnd6_PG?vK<7>O; zRNmxvreRZmpB#T~YsPI}d4w8=c(=tHbTs-)&evXQ-r=RAox6A?=m6-u)1CJQ74CL# z2dclw(YX;dwW;t*zr^8l?!``LG#YlsJ*0yE`YNX*PB{+`D9Op{3avL=R71sonx@>%PzeZL)X^bX9+2H|Z^k?s$Q9*w_tpGh}d~ zb=Vk0k5gXV-fC>?zR+rHvUsa;Rrb}AZ&UPz7F}a^){S7$YGp^WUN^=CKkU9z@!lix+^>COVG5AJ1x`Q}me2LAkZ%ZsVkyAk2W z(|tsCS?&SlYV7{;F0Dv(d%Z`l-o4FSuXD8NhQc1ZDn?nYu!8s|l*l%DBU2QE+^w>93*G}`SeJI`4aYJ0K&SwAzMQ#U;I zQF`b46FrxDDL=S($k@0v5Yyj1@_w+lzqDIR-5=z(IZ8*2+y9@v<=Iub1ovHFXj;>_ zLdRAw7+}Wk-sT4$2)>rE&iar$rSII!KA^J?yICJFLTd&ZySFcHlU}Z3ub$X7XN-x3 zzV7Z1h_gw9yr<6j_kR1wpJ!$r$C}r_<({IHJKa(r;=vs@ zYmWsBXO&sG?6M+*H{4Dbuy_rV-Nl2={?qQxQEAKX`{>gmyTH5m5bm zYqu)Cf7$%&OY#rfMY~zX9f?7!Wqg%Zk%B57`MmLOhh{v1qnL17*-w(9wfCcQD?S`w z_fSL6)!tbA>TV@#AoeaZXNxtVk!q)nOh#+`(k45dukIYEqzaqHLg4M=c^CbZ&_-MSCF^fcv;WC zNea2OKjpa9)lK@87F?ZTJbUk;dmmhTaOfB^HgD2Ko7PY_1A|r*FsOhBvhM%TH?>|> z-DB9zXf`R@`2#acJ$dt`Wu}nQ+H6yc++8YrwJrOP$^L(2UfT723=+)Jw9!3-f&YYC z@-ytx`4UY9eKU6Gpby*a>55&v?(v%WX1Eay{Knkf_h+ztte$(&`3df=N@?ys@EPu3 z;2uQ^1Sh&beTLuv`<>m}(yRLI2EW~%_Bpwix(|IGyuJFHY4#jaXZ6gRnt#90>#29J z_|Q#0PGw)Xvw#|>u`5e+Cl37ZtLr-y9{v)@ zar1O1m7igj$Zj(_uX}oLw^CkiZoJ}s*3RB>Rm?Q4safNXycG|AdBC&tp0-@#`oE;r z72ORdib^-RY$g7B?j2NFeQ}lZ%F#Pj%T`?jaFZp!&9KPIv#*F!#+9!3q8?Zutl+w;kMT8gaH%IgT-#yuaOSA z%cQLBE{ln&>URA)Sk3+5t6)pNP2RY@(bvI~{_6gj#+m!tlsr)G?VXw)x&gj??kjF}-BROEMVX*xO|{-?nmm<|75eZrjrsJA1Tk?jFLR zReK6jNFOUxzUlZS6H8*CrHnQI0<)&2nKeD!nx`oH8nSAwYjFL&`;&%`y2O^v0E~3| zW8k0cPLkbFW|#Kbhi=($;|-;L9*Z3i!^9gWSCIsBf)1G?&;U{?vd z2NpNpl)bZLUQrut5eZRyEJa&YO9T;HB8eil+A1wdOC6fnqFNfIX!%)+ z3R)zHB}!~Tzo zKtr*hB~-?6Kf1?{a{9?iawX3v=HAFjW1oP6LcM_IKQW)Bllq8_i0O8`Iy~QVvO);V zh)q^qqWGtn@b*Vyy|w`d+IB1p9RVDhB6hR`O#lF~!4?*-Oa53ecJWfrQ8%3e=g5nb zaqrRrCe$!sKRtemazY6W`~&nZ(8NEmqia49^oC9Fk59C=XJN6U!bVh6F#|>}7F#}F z^I40ExQYq@qD1t|AjdyJ$cb9=V=~>-L7KB@2wJ)Y7{&Uhx%B*vao?4GCoe}<(Bppe>oV?`#yCQc5#@^Y$V%6I5FlQa>A6_2x=LZ1OwLW@BUe`6`PWa@GT+#JTs zyewFg8xgVXJgP&leX#>=dxjlbNej#|a09(UOLt+BP|Y`rQ&UTuKh6T2vo7%CM9H;) z-=bNym@b6!x%C^J;?@JYTZ`ap(jCZ2^3Sy9IrRG03gK#=_Z_Ugc=h9}GBdJEsznc< zwMH3+d=(m8#piDJX7apM7^=#pMlUeo0*ZS9aco>E6ehRA$Dt%OWD4LM6r=F9o-zP< z9hZV=Jx1xK;VKyWsXH4#wl6QY$OK%Go)W+2(bfp;MhRBW!s;1%s8D;n*af%<;qfm} z!b^}fQhSb3Suc@%t)WHys+zujY2Fe?l(R2UH#gz0IY=Q|kDzVNn4)sE@DaI*EpJ4G z^y8qSsCpHBS_gXlXb?YAsfZuSOSu)H8b#OYAcU%2&acd)RjRtryMtn*^!CZ3HAefk~{Ja!U6I!N(SRJWU zQUuO?20RR#lqoN!+HIb5a@hCE5fN%__);wInXT^+u8C_=#|%{76w)dcrYMJP@Tq%q zM%edbt5a9Y+{zn$hspqe!r$XZIBC?FP&WMF#)=zN#Q&jMnr)~n6w7v7Hozu(eojff zAWaGc`;8kD6wkUYtV6;JSpuAo$TpxDkGxjq;G+3!4kDDDM=0P_Lw9152+IQwRBH;Z zR=rM~AW4zM7~U-sLO-@>nw`7)JUk!P$d1KKzgej6rJZBGb)PchEAXx8VhCMf+6|im ze)K>iMd+$PfwQ)vrtcKi&U@t#3W|I}Xov4Y2!juA6E@ZOqohXH))&TOu#ya(qFKQGKVj90PJx0U9Q74e;1&wj7^%$_gt?=}h+4nCmJ9TBG$F4dRyUxr1rF zwbT^9sd0pR8Va$&Xr($;M=9KLrm6gBL7&?| z$7JV2ZnjcSU9Ww@DHwBFtmmM~+qvG<+X7AtlOQ)=(GF+DK z%4LF;HY2~uUfO&x7oe1xmeVQ>g>PUtMW^kgNcmC8<4yQiwp?h3m?{QSojV|8k!PHreCu~z4{)ehw+Yv&^h8s<19<B2JiznNaFt~Z`g+AtBsl_L)*&$Su;MM_Kr|&EiLAUk*)v^HE-zzp*lE8p5p%zNSub?6@Fet zJ}>1R6%)p%ogO}I{%Ce-D6wFR&6d%(!0FZjz$x=sskr>wmVI1g;Y17(XDd}QA-FWg zl>o=*r60;}zdSnhP84v8%2rS);xBwuS7*pbOVc?Tn+VrzYS<7Fu2pi9q@`QV;JlPx z@z7%w;ey9VO5=wO<-35a?8~&OZFGuTFX=A&xQglRDutsC+s74e<->=T=DJEd5l7V(~8m4g6}Y$a!NN>;p&LbPDz zKBZ_e%95typ$j-GzPe{my;5FyvRONfg1|X-dxN$DV0a4vXR!Hfo%7FLx+XYdK~G39wj}=rI$R#d~)~1LYD)_3vD+$y{aH3SS>RKb>d4dGd+R( zfz}}n_vRP4?!tOy{eIfa^VjNH0?OBQV21~&l%Y;^+Y@V;N;(~!nv%aqaLr*AGJc)K zIU%yG=|$&DocFuQEXhK3r7}JeC?^Av?u+qSgV(R39P8V)YiP!)GOju+DO)UhoWRey ziIF3xAKY4n9_7@VPUG~T_xBa>$0nJ{zrS>2C*pHaEbE*8ANYOKIh4y_vBGnQC_QVt zm3M2ps%uWFL?t1tOO4q1RN-gh$;nu z^$K2K2UYq=cTs9Q(F8=565?}ug_c@#of7>eH?J@=`|H9;ow`(XPf5GR=Vb_tmB^El zn__|h0Jt!)cTnl-vVwIE04Nb%=93eEHNL|FVxc5n4)DOPk`c1*u&^FI4@>k`ofN#NQ z{wDx98Z#HP&kv4N`TqkyDN^6?l7)Od;0Xu#OUa|hrH@a~Ov%p9wpcPfbwwLw)bc$U zO!LcavA+jB11$Cq8G2n=I)svkG@Z|VKI$8T`&3u+xerBYP6Wy@hEIC)9Nrr{cCM-b zJxYYTe47%(BoCbt2ri3#V^d!DD(QSAkClg-$>CE@3+B?IFbLCuehQPEn~Ls+`4n|d z^TT(|=t`L64rgE=j!pOdT?q8g+Nq-sy|ZkCT4jwl?wDFGnY;9p_qQ|Nv5pQOP<&{$ z{aOtKj5l2AnT!(^FS7qxqknFO!vHXfGdF8rIuIPC!>k_O3+m(|sa5^)#szOmsEDUF zk&h_qB&J423Mq>J`^x_}QLn&<1~&Hxznf8LgybG&W)z>PviJ2b+M>392!8mpDfsb5 zj~266=2hfu>v_Df+#`QGk2ca}f5}7N9SAlQt;O5^x)$#*146N+w~gcwAbCWk0bvD% zn`VGlPp>&Bsl&0!wmJblPUy+*F{b~}q}lBAIEBExbBr_?V|D9*;MLb$@^f9c>1KkA zke$68MYZBGgPR7v?gt|s4Ul@^XWWn~xlv#<$qUI0Uue|-3@SFDlE2b_fAZ3=Ye0od zHW0yCBTZ{2ja2`~NC$&(u!aFWF;ZPKqyT*=tU2sWl(T3?b6A0>jrstjslqL6P<+d? zOPSBZ9e?{w5L87cn`6}`6q&1~m@^7v*=4voY}=c=csvXbY6|Cqa9TzB7LteJU)8;; zsCNq~TwPX0O#&qkDrg~j>MJmsb?2bn?MYwXYlPmaPWGnv4N7O`tk$H3zT}OtsYT%APCQU zB&J@mEb;KU|9i&+g!!}3Ut;v2wn37UzuRMYQBcpslQ~T})bvQ_71}3&bDY5}Ah<9{ z@?gSvhAYzd(BHra-tCKd&Fb0>%(KJ@mV(-;o{3Mvg?O^)HWc~KdNVt|O1>(F(o2llcBMx<(PF(t8(nyP z&!K1ZA{d5n1_*ZaIX(1UQkGips7Ks`k8 z;>3gc9`{J8|x8qO3!wi?`OY~VwTkRB-c_2#_ERv;SA2Q)0_8O zP-Aws9+6eMycLL>x;7FfFMA$_@{U9XFMl2%x=GwDlzUdzQcoVc1qk+Or`tdB?yi~U zT2H)K>Df`y#0% zxTX=+Dw1J3ug2yonR&C3`wv$wnQ&P)6j1$G!rh@rb7ug_?5x`QXAKRlI0z)y zYT>b!TXyoTy$JK;7&oD{6ox~GHHRw^hp4rDhocw2V3N}x0}94P-c z6n-eFWNVfqruMH;*vnO;l1*jfl)8+FwK`mfhONqx;Tn2uu}J%*P8Ig?RWb4+!wsmY z8qveccXR$vj~01d_?&<*)7bFkY~s z2SBK+Y{)7aac?TcM@w4MIe{D_I@*ezA9erx`)@|(1Y$B69`n)9mKH{X)JR+UDjF-z zqsP%wvi`0zz&oN-%AMTLePxlzwVg$F^j-|OYdFm?Gt!b61ZZ(E_aKK@1g4+tDL7W@ zp}%M^)Mdm%=eW;K>=*{ZeDsRN9~s%wvREu8kA99tB&e~c7qL=D%_|IWq@NNbx5jM5 zDE?|GwT+af9_UCVZNP}hOh{gJw&U_REN!VHdB#aW^_0A5WE=`l_LLt7Llq{dc5$N9 zj8@31n>bNoJG2pRyxZ2lhphXwg)00TR_;t|+ahq8mNcK&tDUJDgp_IZBOzfnELXd( z@1~Br&<28tgk~TqP`Oasc!XFx7s`ys%-HRZp!d(?p!Qyoh%P!iTZ}K8SIin0@T*@=JNjc2X(%}^y#kR;&fm9OsY!JXS3G=6Kv6v z1j$J+ZywP9HUkG$mK*I)ked7@c4cP&rTCL-e~j4Vb>)}y+uwLvPyd7Nl6=%zn@mxO zQU`oho|Kg`K5guXtQ#Fi=X}vl{}8OnS(>_b#!k-@4o3sf=72Nvsipb6Nf*ZbyFV4z zS~;g`Hgu`o!aphxjze3E_WY+aeI^%H`+SHtd#?YCc{lcZw@uCe(H{vw^M2xdb8!Dx z7~58M-!9Xq={+C0HG`#bbLG3~8~-6^oWRV0y}8%d#z`3C4btUq=}(PNg8*mEI@OJ zl}1CEdn89SvVm<2B|rK-N#o`Mt%b?wq~#{2XQ!m3W{0MZO~(&fOWwQYcGQ%qtcInJ z4;_&`Hhp{!eY#KbrUTI$i(NTE8b`Mlf3Xo768hKwL)fk3A~I8yc?_LI>k1?zyP5o5a7^3s-P%{f&l^q2qA@zB!GyDh`7}e5fMD$`@Eii+`7(Ztu<@Sn0w+6_1(??{@mBM|4CapzGR| z=Qj$yxOC<0)LxDro){Mw>Vq_RwsR#!#NHoIvnosr%)hpGIrlr zv<;eG$>uvBtc-p<$p6Jd5vqcpU|%y(6exbnjld(I3dqUM$Rfg~%EYO; zV*}4ol}gFa${asFJAZmFuY0&o(f2e&+Kx0#r7Q#0gZ!+5+^I9O0%y>0wY?!9vO5Ws z-K5Nd+*x#aEFIL`{U17K(f`&v|Ci3`otIEOJN*pXrxu|45(2ew9%^PsaBA+1>GHQn zlWlq((lxS$+0*6}OrH}NHz||Z3k0?{xAS)gsPyq!S<_Rp@}^GDESxkmb84WewcGf>`C!QnS&TCdvca65=A z6yE~kK=q4P!c;~vJ-486TtPu#A094wueUH#r{fVi&GIN+jGrP`L4M0&e6hw$c^bWf z!%g0vNTZ@HNOGTo!tp6t(`E+dGc0P{#E#Z|wu5rc%}&0!lMMw!KVG z`PJB|YIGp*8O>04;?294=BXRyhFTm5%7bz;r(~rlzPaumJ=>P|6)3-c50qWWFx%|H zN%^@mCQkCUCsr%E{Ty4zN2IB)73cnAog1iALsb5JyF|Y{&pOv`hYx`DNWW}^4Isxr z)%hK$q52e5kDnW9N5;5(3v9lk;;}F%W6%rKT0aGpyGNXSaJbdK2+FIsfLhzvgZ05n zz`EdAr|$!*ypjy-EJb5%?70wB?CI#R4%k#X?T@2vg>O21gN(H>EX>L;$jWC;vbMA? z^FYn@tU{d@es%hsDe{d#AU?HQ=zz)@ zn>{VFD1T1Yv};f_Qbtfie-Hkr2GM!H0?P4yV@Zyce+K2J2SNGO2Tq??;CDPwDc3e| z7O09QgO$NrG(rum1V+Kk+(1j88G(Tm4fAZl9;i931ZwCf=1%w5bCH)m}7ZMB&NbEb`(l3nvuvq5 zL6uTxwk^d!NYJlUUUH>YMTh2EZyE=xYj1rg2=tU+RNR4rRB>fc1$j$t1wmx_a6IGB3+?#jx&BT7)s0aO&vw|`;fGh) z1`oZ`HlP=%^5biuBXULlE8c^l61I6ws`M>-Wx4G)N4b;JxY}BM2Fj(z z=FZNVMnB?fcJ~Uq#{D%*`k&YKBGOgPY*6`gLAhw$EhbpGsQ4n6Fnz{!KT0%Y-j%V~ z`9XQlW}K5bbtC)dFa)xo3FDIdJU-Yj91v7bjj~uZ_7XR2Fc!ps@0Hh0sF8>VGkb#*D0VYZq*L|3oQn5pfL7Rrx7fJ;DX0~8!CG6<0I(|ZJLuKp z_(&FH<;+z0euDgJ@Sme=JHO+^|NPmL3*@tf1yi%ff}gIl8%y@IycyZ~S^3pB*a`}* zYX@#cR*xovn(H%fvlY|B{P9_Z|HEhg>?`r9Do_53+Nu6*P#V|0E2=dL{@{(Q)~Lug z#$E8e|_QQJHxCz-4XK+6gNOsfv&!XJWO|}zpKdj;G=Vazg)u6P# z+b^%E_*57TuXQB$b!0hU!Dd@w4P-@-3KXEx2|ApfQjk?xI5q2md#pa*&>Un<+w_$2 zSreG2pXb>0&$iflrcKXDnUbC2yUDv?4fL;o%6C7Q1pb>r@`C>nCF9ZY&rz`x1)oI0@!%H^cJVdE9n#FK zX@!CKSiR|G)~FNIdaM&{?X9fQsHoAS*6GJ*7G^Q41r?Cx^nZ4h%*Sk(?eat9}UW#bf1{Q_ziP%U$CN1WwRz_`ws-N3n+pDPI|_+@Dor4 z#5a!k89A3TKV|`L{bvxCm5_<4%yD zHC{dtxbr2e|2wD=9G^8c;N4y8+`^RU`MJ|OczLz!RIBucUGu-cZc8ZgR@H7)6z|}JXls(^Zcy!73X{l$xNzWoMUu>btg0@z7Y?%0-m}e# zFN%0fERS9lXD}FA|M5p)Kaf#}pm>3wBC7!>Q&D5^seN{!YJFg_5~u;c3si$|1~oX- zXH1(jF1KiW)^s@_*Jd)R2LTFF%L@uK3ukb%{`p?J!%Qw1pPPf-){ksOH-lQ`XMmcK z_zrU=vKlzs;Y3gkJkQ}-pV$%ZgM3mi65d83gESN>=wwj7R}ECp%Q^gQzs*>f->yS| z>xh#}yg7AaMOkc!^3bX!)+*xg9#G>rHEZTH<+{!3S2|n`MoIUd1!Wfme*D6=;!9Ai zcosYjj6bd0hOF{#{@T{V!K|<_YkX1Q4wo^jU`Ao~)Pg`(LEen4{5gRa4_U*kg6a8L z1P2d0jdSmBY{g5FRZ;72t(-Y|rrH^J5V=13^`Ja+Mt*jR_Wl{zYkV_7>3f0=*&2#d zT|zTZE?fsxON+ej^&1scL{c?B9kkh=|K3jDhsgENKLs`f~NaHkq&!>NY6U??w(QgX+i8A1szQeB0r(4j%yJ9vd89>u?dM?&Uii z>o7BaqCbA;@u~W*`a>NjNXPG);`c~b9J4)}1FE2Dp!_X8Epg$D_phjQ>m;^>Z6+E8| zYS2(nJ%~Rs>5NuGo3_XKc8z=KF-Z5<(@3%$|uHChm>-rl-pm*HN$KB*tV2%_m^_NlyWhm zMK9lOaVhtFDOV8>v8h8!IS=k)@6aQiy^`*+;36-%M=bb?m(Ax%-bOwz_DXuhqIclT zXEXc>Uf#sC;E!H*&scDzx3Om|x*0EQO-fiP(GQUNAcefc-P3}nc-g&T(TP<9fv)I+ zzV3Ffq*pBR3A)Z+PLGUeBiydDa$KJmO!qeSjs@@YO8ETIOYRd3W_a0rUhZw=^JK4t z&#S!TzOi5>FPqQN-p0PM=$-hFHlKi(*E=ovwU^v47EJZB`5f=%pPfOMeo6v2m19gKA~Uh zdCdoP4fgf22gQQ7c^e1CqWjn<+F?Lv`lc}j$%A9jTq24(XovWICxyJN{nDa|?C<^k z0`q#MMTa42s3YE1a$nP(x0GwtG@d#Y zZh&vM9qufj(^FQvM73v*o6ql@aBAEtr<8lJlsg93*V{azbHZt2)THI5 z+#97_(&>RfZ$I_oQttLr?#nnA?b0khoLkRIi_DXxnTRYq!_7(bc{uBwhYQjZk`+HN zhz@|WYi8@9wCEK`)}J&FyO1<~{%A%jG!Fzi_<6dCLm&1I|DK+Rpk*1+)CHgNHjau# z%C(?S-?SH;CY{voY0>#e${5mAMxI3KB&%S8S8`!2c%hekQ7m$4OKx$zl#4PVhu|jq z+_`K%Sw8nL9E*h1`c%pyftypxy;I7irTPnp)ay#Q!=>C{`p9A;bz>=)&^8bl>21EK zvt^X{Agc4dl#4qj;8W+wo*COEzq7&gXh(RxP z2!Up7EV2ttH@~NeUh=qDq(6h;uawATaW48QoJ#W-M6jBdJU$j3n8wCn$BQ+$0ZB6$ z@W=84Bs-R=ThbF5V+}J+VZ{t^5=*;RT5z$qF)J2*9G%RG6vUzLz2ph8XkJIV>cZaE zo@v^n(AA&@twePALm|@HHW%^b883TcELtVQMwSHC65p!u&Cgr zUXq?j9cmmSJ0UGN%-c9Q7Fmmq&2uvT0>|bF*Rgw?TT;sHDdie4%+@X&j%}12_rtM` z!W}K;diIR#mX&g^mvTwH;;G|GxlN_q_i${ZYD@1pS5(S9Tgp}J<8PGM4JqZkQts_i zE~#(aZj9x6W<=kC>&Ix=iD>I(=fxPbjd`)qWBt6l`gM)|NGdBrUco$^ewLM3d^pp2 zNE%A!sCQaqGZOptsEpuYFS#HVJ*~fW#sq&pCnCx5@QJLn=sF~NN3|^Y(9iw7=7n9O zc>}D^qhy_LKvD)aVq(GvUP)mrGMU|oDtdKJ6cbO39zjz4@i&r4>p}RN+7T&+>)_=~ zWEH}tdnpAO(Qn}7WkKy3k(R8CZn6kY^O9%9g7--rds^hn9{XetZ!U!(yi* z`ZpxI8a2}Uku(ebrW&m3ZJZm64jvYtI>p%=kX-J^({by`^SVYd&Qbpl6=nqUypnnB z=aT(K5^RE>dfD@1k>TgkR4-+GM({?jWPU9Ax@2t1`SV?Qcp$(6*J!c(o_;<7u~b@& zG%_wl_DS+mKJT13A`qapHjAR%f>^XFb}SvDjwb(XBu$rfsjHD}M-P9Ro`@iK44T8C zV0z*O$JG#>hg4c{^kpQfbS*n&6v4PuS^%3_D((M=v`!ZuXBoL3X{494sB;3$a4%(H z=R`WlFxhe=Hy{o14qf7_84Fikr_sk(z7k2!$l)S0ExK(?Ab`S2r(PTgP_&a){)6;8 z61{L~6KF9*=cL{LAhjABcR>Z-=e^`5vEZp*_L5j+K5>m*au^3>3>*=%nGhx8XzA6?R?rr4raj)bmoHi%kmefM_L!?fWQqD`I_7yIT;q03hsW?sB zhmJ}k;n)m%XGAx^sVDTUFY6a6#m~LB-QK3tLTkoQm?egUP)fcu#9MGUOX1%Wu!$nA<319Ujx$<^0iYbU=4w5ZL49^ zE%G+5j745W*UnE37sP`@YC&4GBa&=GUh4R?D37Q7M%Wvw$GnnjW1(LPyyjk4p2TN+ z9JmTKs;XocoR%}^hFNLRzzmy_QCOK4?S$mw4+s8Byp7kzqFd3qiUy|zzw(l=k3~DN z@he7i;Nz6P5lPF$9{9qu01Tyy}EYPR`SBWZ|P zvbg83NQ04>Uyf)zTv!u}TwARAwT*rR$55@wh}K!-7m?HF^w*_CEA!Z3Q233 z;iJdbBdJv1bE5AeY3j7Z(i5+U&!e{X;ZCw%;yH;%65PH;a=t;Z$hy*Yhnp(G!#1QI zzBB#=XZ<2|SX#9GGArT0FQ+FW^oX}S`U29~rBc1C>{|9mEjrXmHj-a~q)E5q`?yQ9 zP5i;7*(jd8-0lF@aukwcfR$FdG{y%v+=rwQv3pPBt8MLm(20&fa^pkSHX!xzo%35b zZkbkQL|d$g?=&iFIg)0C+#JY0MLG}3KR-n~U1Q54Brtcgku>YvckE41bb=k-@0=mo zmZm4Jv~~y_R1h?k_JP7}Udi3D=zgc8Yje^QuEoI1>6H;V2M#}CcUTN(Z)tbH^|9^o z(xNAMwlKSY_D9kP`TY(Rdx~k1=TO=JTj9D=x0#<78I06Jg-5r*4JI44<6OTZ+3xGM ztc#a@Z!Eg{daGkPIm&;IWPL(|(E0|O=1*B7N3+%bf;5aY->hhxDj zypo5xAHUU}W!a?JYwNDFt+27?JfyS9#Udx--Jvv%L+FonUh_x023vaBkH(^z>+R_j zqd{pp_MmIBA?})F8?I!%Tjc7vaICFs&`v&~}3a|D`=)WJ(RDvlUJc9@HuM5l;ik0F(IG5Q;lhLgZ}O?u)T$ItvsC)s#?pOb9V`39+1 zX?1P>7Wcr^W$B3saxH&TkKBsH(&Ui#o;W`X6Bn&{XFLn-4fgl4cf_K_=#-PKpM%vy zNUmip+aHlM#Wp;)*=Vb`(o7^R034PnycG`!1N`qLXd7fChPQm!qP zaFobvNS(aReKUd;yzFOU(NUXh{mdR?Xpn49jrN;PVv#Y69lh*lW6{ZX+j{K`+=gVw zT=C+tlWbb*X1gi)n{jkLl5MY+_Jc@0X`#JK|HY+Qr)zspyaqY;d?fYSpRCB^O7k{9 z**VdvZ5LZ@vF^s6$f0Kjl7Gh@-2~^RhDr}3sj+qdQ}49}b0(nU>ya+-hfE#+&86A% za=Wc|HQS+{fz-#hR7YM%>ftv}`D)!~hmRWA`_DnbMR;|^AM@sP5{thHrB8^XrByQt;txR4zp(=_zzPfU&7f%-25SX_rzk%ON(S7*^OZ}oO23d`iD-U$8*yYACCLJ z26pg2NS7kXOYK&-6Db|Z?mEB9(o5OdIq?x|ERsS3&x(Xq# zy+~b2@??2ls6dFXm!PRp1zC$JbY(xR1K zw2ig{+XqQS5s(Sb^IaO-Nq%}Ff*YUP(}OR1%|Gs{2>)>`TKJM}njN_ZkmO2M`U6QW zVw>IRWqX%qAGQ}D$-#Zg$n8jc^MfC)jKsr;;?4=L@}Nm~oWTX&#?N_3fNaNA zQSKm8Z|_jAjA;66@x`K9Uy5X>Lap766!V*;r*f6{#Qjt=(+f#c$Z&Exp6zY?A{KcJ zogea}Kf-B_XjESwTI{ts?PimYq~;T_d0g?3S5m^`o7V$@w&<#PhaXOhG#_6%gnnMmkc{XDaA}yIh4NreBJ^(rd zO+``~14)Hl)M;c#MCm)VQZ$j4_0~_G>BdI7qUPS8c z)6&$VoRM&9Dh(ZhPKDKq)C710a`v7zsQhzLM+A$~L-}uuxpV(4Z>qOoa zNNSlqT6}@j1<6L<(>}Ge+lVm*$&R1;unDOvmP|YkDNCGWZ_k>2W=r7_EA@>>lK-+s zMy4maB%T@1qeDoVINQvMpIbxwkTC;o5?lB; zHU?MlU2ZVaV7~^9?afG<1wZ^nze7^16MgsS_-*M7^-2pBd~5EC1iMCGLwg}Mj4m{52tH=@C z47yDfy^+*ld#+fAq;4}n%hD4Nw8%Oqes6hwI`$0R0tCgI3ENt{F^=wu=V+Gl2cd zZyu7?qdz>M$D-!0y0kgSi;6Z>YlBHe(ro#6J)x!*&E$I6+{oLOX=tnZ+uy55YCAXe zebOS0cq5Y&2jBZlgwrtb_EmOT^f@Gr1*@ND@ilqxQj3wgKj(XHBpbst{2tP|etGhc z4!pssO~&8mBZWw#y_CKgp}kd1^OI>y0xxFDOY8>K8L2l?qJKyA0n$aKQWmdro>MA4 zgj8nvJCgcIMfNqSsqUIwRPIHQ+5!1wSj@i=={lDRiu+ncO(osi;oC|LGi` z7DHe?=p-l^(j^Q-XF{^?3F-PTV9|f8pntoZAeJmpze9cX)~*ydUm#%CGzr%68-&mJ zYC^Y<1C-45pP&YEke|z|pnK}u(*YZ_3-(U7haVbBa}8mwb3Y#K}~ zl5M7MX;FoYb+Rx5O?2|VgUUb2*$Xx6Qy|ro<1iQ01s3_Oo^Iv9i7=70*)CnE3g$Rj zD0!~Kc}_2se!i21YQO?WdQFkAIAG?U60G3Q*g|AA_EJdK@hICRknl1{m#{W;vjndH z1zH#WUlj0v+yJf9ZF-SD0p?*yBk&lco<0r*%=M=Rn-$3mo{`A)uTaJ8g5;8KK-D46 zzy9^VKs!MHivmg;p#GKE_WVnf-Pe%D;gI}A?(;3Ak>H@^C;R~F5-OdOlz;svsEU4t zgdA1;a{mBTo-YV{sTsPCL#+#T%|JPj&Bnik%E%_+U&mw6%s8EytV=?3m;C<#?M(hR zDweCYq$9#MuHWrk$An_rJGl(qOr|-5bZ2lP)Qn`1ULNe>?2bq2&vJU9*#1ubr^tzn zHT8S5V4b1j20DA8CT_5kk4NdxcKYK{4ln|}l1A#oEI%Vyr#npG0z@_cB2W%H7F03g zL0v-06P$cJ2F(W)Q&f%Q*)I7+sH8c3sG9kpWc_I>;Q~HXe6f=kO3C#fp!JjgAVX;d zS`YeLS-Soc)NrmKpZv)SIzPGI6(m%TjKfu+dVaG@7e4mb}=;RZj%H8DB zOEJFUOBKf%h`pN+WxU7fg<`ij*+;XvIV)ZrdcdiVM`eEyeFg9-mwr4d-!tfy^ei8e zUvPFpIo2yqJ`pPY^&qiRGx9EmvVG6t`wsVk8le43bf|_MaI#S8pMp|-=JZ0bpF8=V zV+*YQWT*m5$fzD2as>#3rq-FkM!xGEMpOrWbjd=s>t~sPzc~Hz*bIGRjFi+w#ttPn zb+SG*JD?aB^oScLQ~u2$iq9OBYr| z9vI??s)RuqHndDJ_F_>Zxs0o!LL28AP&wzRh)|O?PHOWy^Dz@AN{2 zfw`c3QJNGY~4{5{H*L{l7w)T+WB^N0m@*dJ{$(knpW4nOFFDTW04j+)fbv#P-pwpiSmGqEH7pmOH zK-KrS(}QFE0eA{UWfFFSYUpduaE~(-D&t-!ACFSK;q*e;z3F5hO|8^mqhzVyMy-^0 zo!NWN>>tovlp3s)s@8nrl7-4%0!sCjlfRb0<)hh5HuG{S_jt1X*4Z9*HpinM=$!t? z<529+P8O=1Uz~g*)JXkCx=j9XcAz#Gs|cEl+7Mv1Q${gXc@>n&q2!9l%39g!{~fG~ z{mIyCN*jYJr-{R+t{kECr-TFMXq#X?-T4GgMX4Cp!X=(5W0TU>#f?@HxlV*CtF_CP z>g7d4>yVHY3erI|+g-`~AL1h@?^g^-2_)vxCf=bul z)6=A0pu|6+(nmSHQ28!$vQYAv@HkuWSQN@I&KdkWDEslwUZ{rWIQe)a?z9Wmsiu@X zK9ntAg4vDQkDCQ9mr%``;ml?_y-<7BLQr$R#HC*b@_*n8ef$$tdHUO~x=w&LZYx1H zS3AT11XaN`7|DZACDu@KL8Y9%cBL(+hQz{|cy;^rqAQE0oDQ&hDRK z(LYQ0S9&%0Lkd<;KXMfaC4UU6;h#9YP){kob+S1Q4nHp*sr)}Ud!fqx z36$?0b$X%nzdQNgL2kJyzM5{$>!>V;K~p*1t%UkcEmSL#K-JQ~$qhkO*aXydJj%YQ z(;tt@f2zxWnoAd|oHLvZ*7qw+c81Mef{$ji+IKqkL!DZvSvcRxLe(=8R68zk`u_x# zZ&l|I=K}6`@0h*{MqpTl3Y~Ul7FKD-N~%Q zPCZ@^YGgKm@|le;zfe8j}P{9v5eAH$9S19`@oc#`Ge>|#z zJJGAcXPn*hp!BF0xD^*OFtf!?@jcwf7_)CRna?67HYry z1eA|`Exr6-j0_J+;ZW>hK2+fM4u5dzLKWoiAr94mFnfy1NpKhewarxEL;F^BQ03K> z(xHF4tmP8wfGW5tsDe&$cq*vtcvSjn=rwgMK;`QIs*RnTJ*@wIk-jt1B~$}+dUM|| z+4Y}{LOnPWl2K1c*Z+N-^53sWBhw2~hx$U2`$2zwzhuW^lE#8ds4>zM$SeN(eu+Ui z!PiK3iJTw-^Al$Huj&8#eu<$h@rUytQEvO!_e%p))gIqb*)&Cm>Y8z@v1BHKm zzoeP^>-!~rAEo2UfAYN&=DxkoPk(*CAN6U(z!9fARg&a8>+Y|9)v{#|whn zJ6;gFw1Qcl9U5Q~vqF{4XK=x&Nu3-z-#jG6^^;LlGzX-ZGyz5LDJUwNl~YjEorvNG zDXN<8Q&H@a;`XU1s+q%5%$|f|cn*phW?c@7GqO=crlF{1hE7BAjuhLZsAGb;C@!Cj zA}bd~J+oDc^eHH6O-GSrGN+^XLW*alXke=4p}27>iWzw*8krqZ^vgkUT0V*ErNSu!1Gbxfy>I@VQNpbxQ6fMjF zDJJEi=sgofidi`mMcsT9KS zdoy%S==@*@vr&*{f^&g%Gg8peY!!4e(Ro0I$rN-p4-2}OYV(1vCR-3QI|SWKy-R@Z zCQs1Ayddalnk)c%nK^>qW{;qcNiG8VnuUUX=3T*ACbbyoZ>|swFeM9tfu{Q+V31iQ z7;Fv;hM2P!1819P7BJLg3Wk|=Ql4Xe5u9tPO#p_Qp_c;ZnT>+;P2NOcgn2!=Cb$H}jf+rZEkQBHY?Y$lVidJ5Ly>7RFGKOO6wgXA z&Qx29;?7G^%vg#d%j}S1#1a&zU5;X+$-5jy;$$qWD3I8K(Pk z6z@oJ`*IYs%wZ`mUxs4%)hOnebyuTEzY0ZU1&VoQ=n52HNU=?dOHA+@6gMtMk#!A< zBC}PBepjQYwGzcblerSb&r&=q#bQ(KS`>G#Kr!Q56idtwDMnm_;xrG%Qj_PQNL-2H zO)0K0O|C=nkQ7U4kz&%dDB53-V!2s(J&L*>iqE82VN!2Eu}g~UZ$Poq9JnF$ zdZY&TBNewVd_S}}@qt3%6z zw{GupbEr-*a$|k0wpUvlY8CX0xayWrV(68Irt8h2$-d%l6G{x$*j{;U=%rx2R?X}` zS)`{VGqVe`_?HF)dFU!^r=E(z)TU?Hy6e(>)ojQY`wS z4aYg*?cJUXbq@JuZU1dk=;TnX4P*RQ%8F-Y&(%Ng=YO+X!*stVR3ljIL-L`E?LXFX zyv6yM_TL~nUiXB#e%(%Y<0nIjk)m5Q{3vaw&nU0)sNCooTVpbKl7?x8)WLVQ4|*~5emHXXUd?)G zrp|tOmE-?#(}II)45?3A{p5la|KIiVjxhTwY{Q?&Jav7jqHWVtuhXVek5Q|7GbLC~ z`)qP#`-1mF7lbRv|5=#X{2aJ~N?N>q(*DrSdn%lCxxTvO4NuQJwjw;R=mWe&Icxgb zKp-y5dG>Q~()FRUQO=K?Za+HNNL=l72b@kXf3$GAPh4Idz~Vo)_|)mj>+P4Ls-5dI zms#Jl{O)uIouOWq@oNM0@-+YZZzY!(!}X=J!|MYToG$)SwO$ge?sR&wTC85iuHoxU zxs~B6MfF^|Ub0rzdLg-?(|zZ3dR?WF)9K}F+381CU%0j&L8oNBO&R|I;oqHI4RpUi zx_)pv4LBh|eDMSZQMIHzq$hT`eCxu9d$Z= ze_!9}^k%p6s?sE<``y>^r7J%n4gBn;Os{^+Pz^bX4l!`d=^DV7p!1!G57{+@)}d4O zpwl&i|HwBYKdAZ|LkFC$yt8Y9?p3|4sw>eco5C+}y7+tMr=Tl#I=yqQicf_)I$cGl zI}KeIr>g|2;?tq7PFD>SOC0q58VD5CM56);s=gmeSTRa$VB~{(!CiHvK-W9F2G*`ffA7No5r`bKkuz)sf0Z+A>~yWs#eZ4U z#OYGeo$l3MF zbj_VE4P6ACJiY}wIchqz3zEloM<++^2)zjD8sYMGg1^Am@N%iw9|Ei{~TTpI>zaWx+CZveL2s? zApZw?Kz+n;>9u(^rYF=7UUqslUbY` z9}7r1)fx7K@8t~r=b*@EL6wz*Ynrp`4=?A_mFsi^;4|DDPj|Y3==fob@1S|;lw}a~ zgwqx3WpzTa|F;SB10#9uJePS0{Eg`3we!)z>W_i>KS+|(YMH8cL!mJw%JJgUISjso zGH?~Uy!>4Z|EF+ryhSeWxzr!{JEh3+7CYr|_;1k3@h)|`^Wd*kZCp#7?tJ*=PN&}u zs3RkwtDSDSvm1%7h0|T_baKEm(W(Bx3a1zr<)`o9iCUF)5461*yr^K5XsYa;V##ZVLSKPIrgXO+~lM>Gb0VbtDIRNji=Hohae;kLv{FgmSXGoMA4! zejh1^+JsKWf$7j1O40o5R}d;N4_fDR+ng>R-3F(7(CG@$-R5-L(fO~y7NYcj(+xg^ zQjM7b4O7WnkGRY;;q^>I4)v(h&4O1Cb?Fxs$}$_$6zO{0>E^)eX_S2D38$MY|J&-6 zPdep14DNTjr<`s+Iz_CD!5vO_3A}zhlnL&1x&`p(INj4urxBJfj0K-@x?=dd(2djl zKkJkWQR-K1a-Qd$ZV|k`shtQukBu}pSBWaLT>T@N#te0k!7(b#x>Lu7EDq_;S7J?5>1Yqy1hw-7<7?;6+Mv zx~t&jz|!dp1r@U#I!~F^`gfi3YWSh()YA8yZUy|gPWQgkU4u@epvv~ebsh{?!Ul7} z&EeC{r8kF1^wyi-??UfE??d{RML&Q(gmlXO2-4f)dV^eVmA?TErVzb(t|z+JLY^74 zCfuxO9_)PR5@-RW=exzwLTC}R7`hZ%0$m0zg)WD#fUbm=L03V`p{t=4&^3?_>}NtL zP)jHkY6G=}+ClB14*I!98caIW5z2r%LtUV*Pz>q@b%%ODJ)vGuZ>SH{7wQL{1@(sp zKm(yc&|qi?bQ9yJ_;)j;_@;OkKp%uc2?z;h&@JJ`ZWgRys;v$8?cRWy(y3mjc>Uh|Af(f~epJ5=`iXjehJJx=hSoys zp!LuO=nk`LZTOT(J=i3(V{JI8=oHvfA?@?0L(QOEnwbaXLxs?p5ylj11*Jkdwzq{& zhjd)mEBEyv9n*CzKN)HO{X|}!$bX0afIfqgq1T{2&`X+&mtiug^jYvZXeabF@}uBm z(BsfrNWWT{0_pclb~!UhvCqfLT3n_8OEU-4~>B?hDJec(6@yMR)KG@ABt{R z!WaS#%(>8c&?O`cU>x<^BK_|FW9Sp8De_Nb{u%lO`W32+t|8P2`UClQ=p*O=q@}5q z_=@SiE}WFANUq4ONUgxEK)e#tMy!qZ2FO4+LNlScW;xl43SbMNENB9xbC}Lulc6b) zj$0j}PEcp43)B@#gLLos0rVmC5u_X2k0IT->OS=#q%atQ!jQbO9HhINM2Nek9{w+F zbswgi#qS~A4C>}jHwoJz-2~`-zZAL@(z#ye_%onn=uDHjK3u1$DXji#!B^1NkpASu zcIZ*)ap(!?Nl4Kw2!)^os66y5>Z8za&F{SN(As4{XDNOz&tp&C$4s5VpwsteVF z>O)D8&hk-Ex8%Bi{~cNl-3+aPZh;K61S*7PL9?N$(Abmt7zcHLPKBPK_fJ7PprxkX z?cqkl7Q!xq7DJapOQ6djy@0LLvQEc34D%Q00%t(_gGEuO0#p&I1XYIqU}ld&Zw1Vi zw}-nHJq~{DLHu6i zt&k4W7eN<7uOXigrNEyGoem|3`Mc#!VNQk`L7g$^3VD#uxoe?pXaY15dX^462R#q% zg7!oAL$^TdA-(l`Ei}>Gen+@xkq(JE6rKm252Zt$pj1eIu&D}E626cxzKy9G5P%)M3yrrAVN2q)(m5rj3*GYRDdIy>V&4uPcW1+#&Kxh!u1L_6! z)?e1?3)2rugW5s&K>C|OFt4fO5ogC88DA*3|~<623^rT zsrqp@bQjc~>b{4LK<7gvppnpMXcROAIvW}a4Tf|O*1`8q=q*TppQ07|)1Vmq@##+^ zKMOq%?b07Wc>(4{NVjS$p}V1bAoX)Hlm?|k?V)dJxM&Nczp11P07eL%KoQ3hDmmh=S+^v{E-dnb0uk97w&;$$KO8Hgo}`dz83NJ(SIx zknTTTht&8UP*12g)CcMd^@GlW`a`+}*+gURg6@EBm%ELI#y}TBBO%?)^o1U#g|{Pb z12xR5#U;h`PFvm? z=(Sv;kRq;sRyuawxkka&fA=|!hN zYM8cyCeY{PQNfL&uGp#r+BekLR!|FgHLy8&Ce#{|opf#CHF*8Q=GP~}4T}^E6coBa zie5T6>HygpQbg+nb%fHPG)S>ti*_=U4XNA-;CN^fq`-37_Mkrt{(8U^pkjnSZ#o4;4m*@BbFz$3K z;ID?3LsvmMOy4LR^DPL6Mi%lgXHc@AeFroS`3vBo4rqks~0K%WsuS@h2%Bj z)%dt>8M5kDN3MhvNmc(9klLUb*A;KK>KCs(@iNNlwF9t{bn4CU*Ooe`&R+wm5i(W* z8eJ8l2FgYa@AnWNTxWJOx9kWvH!tr9zijT?8SYa)t!0~*Z8=*W+ZkS*q?22ep}4VV z->jqWPq;HNIJ!g2wo1=8Yo6xzV7}S@ba>&(KVVk@yGaH29Q(EErtF%*(d}BcZpjxE z{CVzkp9vQyX>?W6N6!Wp4qDamnov-&wGx^F^X)U?dhIVkR1u$k{Yd?%8vnj06l~qH zgG%s!gN5G}Cz~o?JoRJU`ebd>GPPxU&Ss{|v*CJ4+H0y{P;utOqBr;d(E@`G^a8Kj zWb!ZwK4O*uC%=W=>DYaI()t0b?|S+Y>{{F2{uVS(JsWP5q-anNiz}ae_@wvueX^ux zP&Z+f(R^Ztwn?ZL`YB}2crM(Aw?aleN5K=#o)5w`%lVC&V^*MQuW7DMh8>@+yt77~ zzCR_x;L8uLyY_*(WhqVrtFlc`YJCO`_2EOTgdP%5TnSq|#DCPad6Z)jy@ZOHHlmTY5su*MT zlvP_`4oJ7u92KlKdHdu2yVtbZMMZkpP@Cc^*XdPq%RMunFDq`JOWD*X`=b0U&Tzwn12!b4J@b>Dn)Z0wbaSlCjyHAMz7QV7 zdo~MSAoEnS`h{>?y|t8)P|tkvLioDi3+9p+!%c#3nzb*|*bl2&uREpbfvjNb@tY_% z71zNt4w52wYw}plgF`-#-AYQj^_j!w5LuIsVbB1BdR;1nI+UMNLH?NT`(uG=@)DK5 zXEFqb&AP9`^~|)F!jp==sKtgvo3a0;Q;52@IJ^d*$PdF^lt`{iH0V z2`LRp+1fQU^oz5?x0a>ENNGgMLwo8E9JerkOj*ikQW}%e<%QGU?zwj5IG4is7hi2g zzRUnsGJkuSkr{5@f0@4Aj8Dra({?O-@P?iTUZt}v4-La5rs{4w(bgpI4lm?2s!d2q z=Oo$n)T`>fe=A)6+LfW;0xdYqGtK_p;kKcll1$B4ST4`eSq)-^H3#0iwEQP+{c;&# zj&vsT70UIYrdjbyIFgjZE{XDAX5mM4@)|1TdWKC+wIH@6v@6CF(dB-6SV?cXbrm=^c)K|l8 zlg2V!TE?qay;wgl=b?(eL2Ao3y0>Eq*T_gsYnj^7-(WOQ2X81mvM%=HqjF)Ja-wBz zQ`VT>uhN7qtk4={ZQbLhG26>k4V7i}mvuc{k_BDEw0tdG?&L3=abmTuEglM9_i~x> z(XcuDwQ$|`Rhdk!+Pc5~nmX*o4q0UuCtB&YC23~OYqUg+xn6YrKZ}gO()eA+d~i{aD;+{%ym(GGl-3#|K8YuQ*-tu&%GQIJrT!zm=JtC?446 z>@zugXwDIrb?U|IkG-|>;qGNw{dh1aINp4_2bbMqy6goWGGpFgJ>9l9TtE16gxL{7hNO5mWhfDi59EzgkiJ?jJ3_ z|8_=yk9l`_>zM8s1e=;sf)=LgdqBEbA*qkq_@GmsfeKtTkKB z);GgPdCPF~TSTvR=GC{TqMHf79iGUWXj9%sy2Y%0o59$ACI?u`c(i8i>KCn8wJ0Ij zu4S7xE!%OoLyDr$wqsu(sZjsL)5=o5F^9;SR3XI%q094EH~Zl7vnrPvG&4=!p|!nC z29PusJB6fkKYViC(!VdPUuIWqaxrLs3kHfz>EF#8Qstzjd&&$RcPaOumT*z)FP79O zOW9{0SJ_7~Q0Pi)wmH4c(bxKv86=s*YC{)O@m=6zbK1MC+r9Kl3%lToet$f0`>FHY zx+N6tGYh*W)K0()eE(@1bR+J^E}sPo{6T$`?UE4(N>2c+Pv9hzE9t_n|T6Xs+~X#8e+DfXn%1hyB0^@`PK8i*1bHd ztTk_BST}C@)g7PT?7i049|nRW4>ip1Dl1?!n2_l?(0r2w*@?IhRE&< zll=j?Y#B+qA<>w8_~DalHnn-Yqtq`mYt0x8D6h$9l=qoAP%EKc@Eh~I zl0T~ z^=;o8y!Q5A()<+vmc`Fn+l>1poW@Jwt3RPV6NlIc^0_HKrTrPdZ!2qXPxC4U?f*%G zxkq_~X;2HcP9NLw)<@S~>jsLhyk{CP@JU~t&7%-6|oN+OnO$CyymX z8`N#z{{F||c?Y-?iKkp*mXkHKyru?l#%bJ~b&{a69@P26FQ34eP5sRJ}U? zuvGl!#vs3CsajswnEOju+*>e^ z&+d4z$L#OdR~xC8Q4QA$6Z|qfG4$J5GxC#1{F-g9ImBJpKR*oEQ$Wz23GOk~z9IJ#)BBt7>flS}z&AAg z4O7%SpILI{mMDJ@W9UuJ^b&NX6`>6Zj|Iv zT3x!bzRHac&shFwH`i}m!EajwbLx?BwQ_#1{YKRL$2Oa3N5YemHWXNY8ZxW-+V*?4 z{NV~o=TW&ie1v|^G^c$J>@~~Eu{N5T0;Ht5Gwq%;ar%~$QP)3pCb``0@Dj7*dpdHB zdH*;lGFAVMa;It4g)-`xo`2`o!6{dnZyP1l+y3F-!*2vbKhH6LR86Q$+TpedH5<29 zL<-K02mkwjf4yMR#nk1V-&HWdpD4D5Ndl4@VyBbzvbA&Dw%z(>E_OOE6b*7W?gO94;u;tRT+OF3{-jaCz{nyhoE78UbSVAiPYm@^oD{>wwNzFyD|1I0HC z`kOs!!+GW_*^R?a-Zgelo2yRW`{0XyLG5KX)HM2;HsoQT<$Gl5x(}XSTe1rSt$YlM zUCIT`c63;H&AEF?QS=fJI z>$vjT$_LVZ_S?`_5#nw0t=e!1gHtgm9`@_pBS&x6eG9i0YQqVe@2~c#>GF%(FyD^x z$I&yl=S*$!Jy~7zH=4X(!X^9yZq%>XoxQ-?9h!c6=*q>P4e;&!*g49qz#urmJbnzj zJnS@H<4#|?_q(wlrMjljry}!#3OZqDn0~$oH`R_(kY8_Y)BR|;0TF-9QMRP_&1R(> zG({)z|x+_>NgE@N4pS zsS)N?WjsOSaWrL|V4kdzaHeVXN4R{jzS&caB{$a${ewc5nkm3P>knCXo3($i*t?n6 z1!Z-5rpYm$5ga|+PHTGq7r$wR%eDnQF)aJ(&>yesiMyPgf_h!g7MwKnO1n9Ay`*yOPx7~OcJ`Ml=LtVO zxb6Do2@{i^UT#Yn+-m3gdM`d*(=~^Fyke>b6WS)-aJ6mD*t}D_bgNiZ@z%NPXXYXd z_zC37Aj31kY!XDx=B7Zd*^ktI_6qAAk9K^rS7zR$&0QNQeGw^&G?Dj?_RhI?_r0!l zq%1cnAxc5NGGI~ zRp>{QaG__TJE~{=FlOMjFJYiBPB6$b>moE{(JFU@y>k7&Hcfun;g{fh|621cl_yufXJKd$P);`K$SYm3luvdv18p@Ksvae09{0 zV9HZF?2=x=bNo}l)8oeNZuWgX20YJK!#*)h>Jc?6l~1UDBKJvc*-=)XneOEiTJZDT zobm}x_yOUH@>G7I8PI^T-?_y;)R^0?#m8+^&edij-zL|m<^$}K2CTJvK>66zD<5h6 zggyQFEB69ZEs=t(UC>HqbYen%z6Y6;NH;&-zBw@=EqL+|>+QhSzHVftf~AEoQ-@n; zf2_ZuLPFj4Cpdz-XC$lK!LUKo1E)L{ZK}u7E^d@JgDTLxYp%2H?=<1A0Cm9eLrv|JTU1$K`mw@t(KmMMdY++xu1|=add_LMlm-a%jwH4$-1SDW{Uc7^9H+ zxpJ7(#*E2v%whC%wq)!#Bj>|R#LOmUhTr#k?x(fSes90e_Rq8Dy}#FWU-xxi$NRYh zy>XU+-uiA4k>qq?uCUPK=JbJ^HA6uPw=8duhwvJy9c{7Zy`~$?)*HTxlfW4d ze;avixI=>=u;uaxY_qls%~v&Sth1WcEI`>PWn>(+wUI}oPyCk+7~Q4Qc+}KZ`jqV= zC^p}deRAMb^9!{MCzC%iCd|2~EyzUv)L+RL^M4-^(cC3t(GI{>d-;HN0jE#iAUjZ7zaq=}0o^)N3>u8T?szlX*>975?cZu+z_-Ed&aD{@|T$ z(x&>DPqlqD*|nqz4zeS?v6HoW6PZ~BcO*}HsMkb-Rx7&!$jtUo{JF=kqWcehmQp)U z3XKD)J{JHkv}|;be2v8eIJ>Aj6HDs=kap1lew?KX_RwbqSvbh?`b(g)1ywuq!ihy` ziB!v0kz0qq-~T81J+L;lH*)+ZT2WHF6Ja zxIjl4U?NYb)r*oR;$f=8oq(&OqJ)iJr>!_*(^u^m9$>!t8V>qU$;YdA$tEQKX zvpgVFIy|#|i<{d|{RkX4>tN(be$FuIPDK2OrZ>*eYy#%vB2gmE1OQocjjQZTJ6vRU1f6g2lQA8soK?{OKM%cg(rx)Pfnx`J(?rZr zEoU*gbM#W8p>oKtgtK_TUS~9sywRUCOA}c~WvPTS<+xqQRTE~GP$y&~{mjEceO-o! z$H-e&J{AE4y%9okIsod_`ZC}eVKws}&W-=!fj&;v0Mu7bUoj)!QUQ1|Z~mN#Db0t} z0#?%#9d`0=tkB2zy`n#@T6Bw}jVfX*3U`CTVvYzU_sL5;cy-4vZnoK9@P(m{nhqlg zR0vZ2FpzR2n>--Ey)d^IH%II*P)sWQ8vy*94OiUcc*&Mp>ES4MjtN;U?+9Os~Lr2&3vRfVTBm|aIck7l!3iMy z<8}kbty@NiHQ!D1UbP=Ml)h}6M`;@az6HP*fY6O*=eOUBF4ExZmy*`auFxF=lxyoL zGQ`KJlP6`r9^wuT0m8axkUvTXwSo}!oR0F`k@%0%a(Aq?l*;*mf3m{^jLg3lyVUni z-~1?xFIhFJCPl2(Zz>b2PQHHhgPl7!|0Oj%rT4&r&uw3Km0jta2j&<#YTVqP>n+N~;*OU+_#$t3+yrIyN?1;&rj6y9QaxH1Ej!}40iU33=x}4$%968! zWR-rDngHK%xtIAG+(I){_)e0h5{hRYE z6kf_mJ9-3O`Vp9n6_{sLF>I3Sac-u0GLVXOOP^CGUVh!H6F6fX`T-;73bE&#`_E{) zImT}ersyDC)tkNoZ+PIAmU#R?Px#H7tZ>FDRa3JTD0u5%7FM17e$fMc^;eu`)D1RK zIR~Muz=l*)A#+gKiZfGHTOQDsi7cdE5_2IN2=b2`LO+_)68kFV(Qmyf4DL|poPEK) zeH%bhwtZ|{DcxuZdum8+TYvwh@aD4m)MXjPl0Hn<{t(AOVfB%LE zI|Z)ANBUQIl&k!J6DPOEUjSf>%*ot!INz(A?>*LbjQb(`_qv<1_WhzZ*i^qIA&u^=! ziXS^j>mvvDu6y3m=z)0Mr?-XePwE$nkNDi?2AY}bfg0Tw!igzptq%fl4?2JeB%IIr zU^?|ph(d3-1wi@#cuA~JUzal5smi2=zH*SE^q%<6ly$KGmJ*H46RcHr!Rz;^T`Vf( zo9$%T@EkA>64#sP>@7Q6YXHNxaOSkCT;?ykYFsKQqKoWmXi+H^>8u^(-pl>H(;5jr zqg-|IucTf;8oL7F0ahLTd-ijid4p>MH8v(OtWzLJlryJ5HN9!EE5|G8P$1gE2at+`)c6-2ev3~{&|}gd>>Er> zIe*q^o>fxAAON-Z#nKy3j@_Q=7+b1{-+?z+ob+g6KsNVjaF86JDY{P!@ieRi4Of<> z*7rV(*_FiV=W+qg_sM;_%E*%YWNU=Dg2L7Ci8@QjvbIZ`9JPmn^VoTyBp`+vL9yx~ zEiuY*ny(+xO}rbr{UqinUK(-iyDta2Vh%pWzygF`T6=#Fgd3!2_gEkkk2E?32 zma1$3c;!Na%#)u~5-hs~Z-i#p#dN2NEUwMjz6EgZ46w}gV8lCFF|YaSup#p-Fv3D& zWY1%I9W0*}&1|5kAar=>Lr`y={FVBIU`tfRLcG->a%=B@KNa6&M^+1`*s#TWW5pS7pnN^EeQcaCJ$gaU317Qcr%uBncbWct0Q;XQG zjw~#j8{eL8meh_Mucq-#dl3kG(7r#yXS4pG$L(6geRZU1=N?{GVZobfM_yLbLC_i+ zJrlHPlkCjyPTqa17UB7ferE0gKsbQ=gAvjc&4RN@wFpzUK>U?;cY8)*9YH$?v`(On ztXGk@qy98pT7q{fi1F&kxh}tW^wj1$)sDRPj0!+&C{_{utLJ53er3L>7P0jil>*V% z)U{Z_{Rn8CF>lP-%=fK-U7S}->-<_sWR`sB*rUZ0uEGLPxv`nHd2L2Ton(LaP!+P$ za>~Bb$;ZD@%t!f1*%y!-on#kd5+JVNKPn@yPvX2)Fm@$I2jkouBOJZ29P0V;4-3b< zqY(S^hYb_CoOHZvCe8P&MYrdFD$@Tmt3m!5qWqe9TVpdjGy~Wc<6?eorP>z|TxMzK` z^OGGcMAq#hNtEa(yY%iQNy;RfvR|hMuGQmqB8O&fDNK}CunBhjCo0WvzfT);WZ=>b z8tF2A;qTbXX{#R+Es8hg=rd{1(IcyE)@n79gkRXi(&-ieMx0|PRj9w^ld9Iyj>yEQ z1Qnk*(b?h_JnwuV`L)Ah#S}GN4yD<+w`VB%K}4}UMj zBx=>bHt88IyO_glsY5u-MEQK6quJp|y;-y-9BqP0lUAzIzup>faSt-H#Gj*b96Ee+ z*zNfAh>;qpH3|X#PgF_NF9HW)!x~UV1j24w1DYQp#~J>&R;!^JYeByNQIm&*|2GeF z@yeoPTT06P#Zza_K5*+Z%oj@x@r73)O);cckr~byw*<8WxH9Q}O4y>^5T_?|z&RG_e(Uz;0Q@9E@-T4u}}$d+TKGGK{nr zZCHU7eIAJdAfH}D%JIQA4FwC2!05!voPT)%$dv*XxeFs4X7hqdEWRBz>o`W#cIU4J zj|Q?V>nbO!EpUM5ULy*Kf_~pLq8U-x5zMzDN=a4aQOI0w)}-ksM`@Z_Q(QETF&}rw z@w2$vO|!b8>X>OmKSzU3U882X4UOo5_kA|hI9hJ467~}fGABe1EryQxqg;+(XPvrt z`Q&M8rLqhqiq`Opwxxm?=>0?FVqVt0lI)@ZwL7St!P@>iD-tPM4Y24ieh`%jR8ho9h02{@EJ6ZP_JZj9vjsW1p3fDC) z>?yK4%peFX*p%ws{l%fbx#MKVKONweB`xkQulQ4C>Jm+B**N*wmEX?Ojxj63c!aGYj_gTK@)b&4kPRBbt(~n~Zci8RxS&P4o2Y7n)6N#<#(8h5N@5K1D!aEBv zq34kOt+P7J3c)*1u=!AApR(MypG1;>oa~7&KYjV(P80ail8W%i4;m{n@$jF@){g6X zX?+CVnYN<5&CaL(htI^~-5T%5A{LI^u&Kq@1J!ZIZAZEmmLCcosg74x9Wz^1esfv| z-mQSoYq&OU^no0^X?SPZp7tG_*(N-7_I$jv0VV}?+F$bZN-u|H_<@5;>5-HY^G`qg zbtB$+!nA?Su=Hmq2>=5G_X{z<>Q;}j*aNxcoX)$dJsOWVr+zg7*NCjbBd diff --git a/package.json b/package.json index 195699ce..80d75a5f 100644 --- a/package.json +++ b/package.json @@ -22,12 +22,12 @@ "test:all": "bun run test && bun test:deno && bun test:bun && bun test:fastly && bun test:node && bun test:workerd && bun test:lambda && bun test:lambda-edge", "lint": "eslint src runtime-tests", "lint:fix": "eslint src runtime-tests --fix", - "format": "prettier --check --cache \"src/**/*.{js,ts,tsx}\" \"runtime-tests/**/*.{js,ts,tsx}\"", - "format:fix": "prettier --write --cache --cache-strategy metadata \"src/**/*.{js,ts,tsx}\" \"runtime-tests/**/*.{js,ts,tsx}\"", - "copy:package.cjs.json": "cp ./package.cjs.json ./dist/cjs/package.json && cp ./package.cjs.json ./dist/types/package.json ", - "build": "bun run --shell bun remove-dist && bun ./build.ts && bun run copy:package.cjs.json", + "format": "prettier --check --cache \"src/**/*.{js,ts,tsx}\" \"runtime-tests/**/*.{js,ts,tsx}\" \"build/**/*.{js,ts,tsx}\"", + "format:fix": "prettier --write --cache --cache-strategy metadata \"src/**/*.{js,ts,tsx}\" \"runtime-tests/**/*.{js,ts,tsx}\" \"build/**/*.{js,ts,tsx}\"", + "copy:package.cjs.json": "cp ./package.cjs.json ./dist/cjs/package.json && cp ./package.cjs.json ./dist/types/package.json", + "build": "bun run --shell bun remove-dist && bun ./build/build.ts && bun run copy:package.cjs.json", "postbuild": "publint", - "watch": "bun run --shell bun remove-dist && bun ./build.ts --watch && bun run copy:package.cjs.json", + "watch": "bun run --shell bun remove-dist && bun ./build/build.ts --watch && bun run copy:package.cjs.json", "coverage": "vitest --run --coverage", "prerelease": "bun test:deno && bun run build", "release": "np", @@ -626,9 +626,10 @@ "@types/supertest": "^2.0.12", "@vitest/coverage-v8": "^2.0.5", "arg": "^5.0.2", + "bun-types": "^1.1.30", "esbuild": "^0.15.12", "eslint": "^9.10.0", - "glob": "7.2.3", + "glob": "^11.0.0", "jsdom": "^22.1.0", "msw": "^2.3.0", "np": "7.7.0", diff --git a/vitest.config.ts b/vitest.config.ts index 27da5b9d..33898853 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -8,7 +8,7 @@ export default defineConfig({ }, test: { globals: true, - include: ['**/src/**/(*.)+(spec|test).+(ts|tsx|js)'], + include: ['**/src/**/(*.)+(spec|test).+(ts|tsx|js)', '**/scripts/**/(*.)+(spec|test).+(ts|tsx|js)'], exclude: [...configDefaults.exclude, '**/sandbox/**', '**/*.case.test.+(ts|tsx|js)'], setupFiles: ['./.vitest.config/setup-vitest.ts'], coverage: { diff --git a/yarn.lock b/yarn.lock index f143d750..225d78c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,6 +1,6 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 -# bun ./bun.lockb --hash: 229521234768470F-a4cd9955ab6a6ada-9D052F6AF60C5C4D-0bfb97a3d93af742 +# bun ./bun.lockb --hash: 77B78F6BF9FCD5E8-99bd6727146efa0f-3A60C19E44E6AEA6-b935857e930aa307 "@ampproject/remapping@^2.3.0": @@ -1210,6 +1210,13 @@ dependencies: undici-types "~5.26.4" +"@types/node@~20.12.8": + version "20.12.14" + resolved "https://registry.npmjs.org/@types/node/-/node-20.12.14.tgz" + integrity sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg== + dependencies: + undici-types "~5.26.4" + "@types/node@*", "@types/node@^22.5.5": version "22.6.1" resolved "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz" @@ -1273,6 +1280,13 @@ resolved "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz" integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== +"@types/ws@~8.5.10": + version "8.5.12" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz" + integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@^8.7.0": version "8.7.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.7.0.tgz" @@ -1721,6 +1735,14 @@ builtins@^1.0.3: resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== +bun-types@^1.1.30: + version "1.1.30" + resolved "https://registry.npmjs.org/bun-types/-/bun-types-1.1.30.tgz" + integrity sha512-mGh7NLisOXskBU62DxLS+/nwmLlCYHYAkCzdo4DZ9+fzrpP41hAdOqaN4DO6tQfenHb4pYb0/shw29k4/6I2yQ== + dependencies: + "@types/ws" "~8.5.10" + "@types/node" "~20.12.8" + cac@^6.7.14: version "6.7.14" resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" @@ -3088,7 +3110,7 @@ github-url-from-git@^1.5.0: resolved "https://registry.npmjs.org/github-url-from-git/-/github-url-from-git-1.5.0.tgz" integrity sha512-WWOec4aRI7YAykQ9+BHmzjyNlkfJFG8QLXnDTsLz/kZefq7qkzdfo4p6fkYYMIq1aj+gZcQs/1HQhQh3DPPxlQ== -glob@7.2.3, glob@^7.1.3: +glob@^7.1.3: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -3123,6 +3145,18 @@ glob@^10.4.1: foreground-child "^3.1.0" package-json-from-dist "^1.0.0" +glob@^11.0.0: + version "11.0.0" + resolved "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz" + integrity sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g== + dependencies: + minipass "^7.1.2" + jackspeak "^4.0.1" + minimatch "^10.0.0" + path-scurry "^2.0.0" + foreground-child "^3.1.0" + package-json-from-dist "^1.0.0" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" @@ -3765,6 +3799,13 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +jackspeak@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz" + integrity sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw== + dependencies: + "@isaacs/cliui" "^8.0.2" + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" @@ -4024,6 +4065,11 @@ lru-cache@^10.2.0: resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== +lru-cache@^11.0.0: + version "11.0.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz" + integrity sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ== + magic-string@^0.25.3: version "0.25.9" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz" @@ -4221,6 +4267,13 @@ minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: dependencies: brace-expansion "^2.0.1" +minimatch@^10.0.0: + version "10.0.1" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz" + integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" @@ -4748,6 +4801,14 @@ path-scurry@^1.11.1: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" lru-cache "^10.2.0" +path-scurry@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz" + integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + path-to-regexp@^6.2.0, path-to-regexp@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz"