From 62fc27a5cc1733b2a60b7eeb310616a6e51ba819 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Wed, 3 Jun 2026 09:16:25 +0000 Subject: [PATCH] S0380.193: suspended-floor (12) sealed rule fires only on a SUPPLIED U-value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RdSAP 10 §5 (PDF p.29) "Floor infiltration (suspended timber ground floor only)", age band A-E, splits on whether a floor U-value is supplied: a) [U-value supplied] if floor U-value < 0.5 → "sealed", (12) = 0.1 b) [no U-value supplied] retro-fitted insulation → "sealed" 0.1; otherwise "unsealed", (12) = 0.2 `_has_suspended_timber_floor_per_spec` fed the cascade's COMPUTED default U into rule (a), so an as-built/uninsulated suspended-timber floor whose default U happens to be < 0.5 was marked "sealed" (0.1) where Elmhurst uses "unsealed" (0.2). That dropped (18) infiltration 0.85 → 0.75, (25) effective ACH, HTC, and understated space heating ~450 kWh. Fix: gate rule (a) on `floor_u_value_known` — a computed default U is not a supplied value, so it falls through to (b). Verified against the cert 001431 sim-case-2 worksheet: floor "As built", U=0.43 (matches the worksheet's (28a) 0.4300 exactly), (12)=0.2 unsealed. Golden cert 6035 (also a suspended uninsulated floor) is unaffected — its U=0.63 ≥ 0.5 already routed to unsealed. Promotes sim case 2 to the e2e harness as `001431_rr` (Main + Extension + Simplified room-in-roof — the 6035 archetype). All 11 Block-1 line refs pin at abs=1e-4, locking BOTH this fix and S0380.192 (Simplified-RR remaining area) end-to-end: SAP 69, cost 920.5046, CO2 4566.7090, space 15269.8593, main fuel 18178.4039. 2319 passed (+11), 0 failed; pyright net-zero. Co-Authored-By: Claude Opus 4.8 --- .../tests/fixtures/Summary_001431_rr_ext.pdf | Bin 0 -> 80681 bytes .../sap10_calculator/rdsap/cert_to_inputs.py | 26 +++- ...60-0001-001431 - 2026-06-03T093549.591.pdf | Bin 0 -> 46448 bytes .../simulated case 2/Summary_001431 (1).pdf | Bin 0 -> 80681 bytes .../_elmhurst_worksheet_001431_rr.py | 124 ++++++++++++++++++ .../worksheet/test_e2e_elmhurst_sap_score.py | 17 +++ 6 files changed, 161 insertions(+), 6 deletions(-) create mode 100644 backend/documents_parser/tests/fixtures/Summary_001431_rr_ext.pdf create mode 100644 sap worksheets/golden fixture debugging/simulated case 2/P960-0001-001431 - 2026-06-03T093549.591.pdf create mode 100644 sap worksheets/golden fixture debugging/simulated case 2/Summary_001431 (1).pdf create mode 100644 tests/domain/sap10_calculator/worksheet/_elmhurst_worksheet_001431_rr.py diff --git a/backend/documents_parser/tests/fixtures/Summary_001431_rr_ext.pdf b/backend/documents_parser/tests/fixtures/Summary_001431_rr_ext.pdf new file mode 100644 index 0000000000000000000000000000000000000000..34934393bc9fb32ccffb4dc95dfcf1aa7392422b GIT binary patch literal 80681 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 literal 0 HcmV?d00001 diff --git a/domain/sap10_calculator/rdsap/cert_to_inputs.py b/domain/sap10_calculator/rdsap/cert_to_inputs.py index 0d99af01..2f4eb570 100644 --- a/domain/sap10_calculator/rdsap/cert_to_inputs.py +++ b/domain/sap10_calculator/rdsap/cert_to_inputs.py @@ -4103,13 +4103,27 @@ def _has_suspended_timber_floor_per_spec( if age in _AGE_BANDS_F_TO_M: return True, True # sealed if age in _AGE_BANDS_A_TO_E: - # (a) U-value < 0.5 → sealed - main_floor_u = _main_floor_u_value(epc) - if main_floor_u is not None and main_floor_u < _FLOOR_U_SEALED_THRESHOLD: - return True, True - # (b) retro-fitted insulation + no U-value supplied → sealed - ins_type_str = (main.floor_insulation_type_str or "").strip().lower() u_value_known = bool(getattr(main, "floor_u_value_known", False)) + # (a) a SUPPLIED floor U-value < 0.5 → sealed. RdSAP 10 §5 (PDF + # p.29) splits (a)/(b) on whether a U-value is supplied: (a) is + # the "U-value supplied" branch, (b) the "no U-value is supplied" + # branch. A computed default U (an assumed / as-built uninsulated + # floor) is NOT a supplied value, so it must NOT trigger (a) — it + # falls through to (b). Without this gate the cascade marked an + # as-built suspended-timber floor with default U=0.43 "sealed" + # (0.1) where Elmhurst uses "unsealed" (0.2) — cert 001431 sim + # case 2 worksheet (12)=0.2, dropping (25) effective ACH and + # understating space heating ~450 kWh. + main_floor_u = _main_floor_u_value(epc) + if ( + u_value_known + and main_floor_u is not None + and main_floor_u < _FLOOR_U_SEALED_THRESHOLD + ): + return True, True + # (b) no U-value supplied: retro-fitted insulation → sealed; + # otherwise unsealed. + ins_type_str = (main.floor_insulation_type_str or "").strip().lower() if "retro" in ins_type_str and not u_value_known: return True, True # otherwise → unsealed diff --git a/sap worksheets/golden fixture debugging/simulated case 2/P960-0001-001431 - 2026-06-03T093549.591.pdf b/sap worksheets/golden fixture debugging/simulated case 2/P960-0001-001431 - 2026-06-03T093549.591.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8888b35ae39f1342912566c4eb1f2be6db76b748 GIT binary patch literal 46448 zcmeFYbC4$8w&aX@c0McKTq2Pd7NudJWrkwFr^mO^H|OT2Q+Bg8q7%|{)U&iPp_A7$F>=6X{3BH4 z*eW`ob(<4 zu8Fd}lhHqm^N$8m20B4K2cy3l|D!e$YXciYGiwt%H8X1gYX`G`AB&pVJ2(oN>e>ID zinQLp{bpcg`hzrdG+x~y{{-5rg_CIX<@65#iht&Vh;=kPf z4=ny`LVrxn-sq1B{bOr%GDe1GdVjh4cUCMMEVPVlEUftK%nY>b>>TXce;8-&_y_HP z&-zEMNT+Dz@Q3gQMh<`M_b(&=?ild@lKGF>{(b$M>HbCkORuPzrK8awgR#_eG!i!Y z!&xIbX(MYBM^k(zdL~9*UI#~eBRwl9^`NPrnl|g~sNUB#I}<=Sy#sf&bvA8nm$LC- zVe7iSZhDq$OUlVW60)rC=g-(@`drS<(j{E#OSKCtUoWRO8)N%pSfZpTox45ex7L$k z#p%*VHpE0_JIchW@naX4H9i9`Mt8><4PzPm-?HIU>7<0QgafS{?Sz>Mq@yK!-kY&X z%j|a}>oJGzPd*=r-Ten###@l2(i_~=MdK&m4Iw7}j9Flc`%c*j7JNO_V}5<;YVl%z zq^e2#qsyt+S0~!jk{gbt=Atx(E^gW37R1e4A#+P&cxM{)1$foc z=rETrAg<~w(~Yo;WlMEcuS3o59D8P1)%PHlT%OJc)siyaMj_E<6t-=nGV1T-9&sJH z46(Bnm49|gy_oKfF_><`ZT*P-R2$e%C}7u3lg}uonJb#X`t^#@HfH?Au`6DXn0c1i z;(AUvgE|qsLA}{ch|Tjd-iMTkqJg#@e#f9V5?IWw07lk&Q>~-s4O(u?->KF;u8NCm zDm?54IghQf6(!z*eNZ4~Zl`pYNJ`4kb$;YDpVzsa#ZaUe8M?dJbKdL&@Xh*AG3lZH-RT#{6MYiJAZvz|s~3wrBBQZ^ftFeIez6A?DXU4$sfF z91{U-7;y>pr5WZphHOxIfZSr|cq908h?(Oly{?&k%68Z)l0imhHQ2y2Bfa(0|l9=4&#!?#)ag4(QQ^*RsaRW@EjSH-9=- zA!l3A!XyZ4tz}FLlok(McL zbmKdXitPADul5}v<|B@Fb@Wy!jduK2!T*AJL<~>DD7!~w0s8Grj<`mOZ(#HcQz*!) zSpf)bGq2$D$_of~%NGw=048}c0KKdNr~?_^2+DF%pV5?ja%Po;{Kxm zgl`DfDSoz*M$}G6zK^94^*+|s8cRF}r@8Li7}m*x0r&^=>KWWr5fW6fyi2#+LpQ!p zvV6i~0d9kgu@6bY6`B`n9$^#sUbz04K)xo`GMOr023d@ZW)q~yU|CIxit{!$ZJbcg zL9v#a(ss>$$i^oYwQVb)nkyd=k2*jvyKDXq0L}qT5|!^&t3PGOyPXH$3BW66){<%H z+8W$t)_iXGxqiWZmM)!ET{bZ90!rt3|L^_nQ% z-z>qQpyH4s{@>^_!Y)xoxy&-G-nk|CU$RiY71JQ1v3UdH`{R4$EnIS(rMz@xwa+1% z(;;{A>y6um!yCY8t&&2s4WhDvx+I7xMth@<=qiNRno)N61tEMuV#0vp$PsXLY_ZU| zo9L1Mkl$<+&*n#`1%3RK7@aLd6pH=1CMk@0L^jlxm?GdYoXAjiac4Z#3a9*OkUxdI z9O(6asVxFN$Zd{LQA#)j-AzqR)3~&fH5A$`afNn~@YR1v!9IknBb^(D{A$Ayf4>{<4 z=+TzV_t1gG;QB=P)}HGcNv_%TK>|uCnS55i_ae{zH{^`R`FhtI6z5jLIT937jM*6i zp+A2V*I`dN=lPr6u9Nb1>of0@%m-|nKD<>|0xb+$+3)&(+g;^Mq0$X}%T6!%O(6*L zJ5EPetR?~IK zIfkx4z3rTF#t?sNZCcUqWP=?b83N(D#vH92IvpfH->i&d_jcY))o+|tkM!LJVw$O> zbQnhf`G3wOt)&nz&(T6svfG9O-k0*~n7BEhGj^wxrskK;c3_FTEO(c zzICSB?Uzfb9xcu#`z63s?`cv&x@IRyMZSM&4Pa$460FOB6IDWE=wr40%}!Uc4PfeS>!p87yjX1Y;nP2SM`?lSNM%4i?+qeH zg1pyimf`G_#q*LI$ydn@6^>XXL)U}-tjyQSS!wYJ?5e0xw)S>eNIlSfG=-$TbH>r* z>hS}zDLlhD1R&lYEh0~<)PcY;F-AQmYwB3He4eb-VWTU`mC)_i*N5}1%22opn%!nVp3y+yfYpd%wHPfNB)$M)Gj>2|3Qek|I9!?G%cy6MiG9;+gQ2>|Q zTVvoh9uO0-icpb5RjS6l*FOR)NlhW=Vz#VIS@u5o0vo*I&rLBP zN|7jIXQE^jkPS?!vdzN?fd|Y<#zHk^cL9{a z`q4tj>6Cil!Z1I;XA-eHHUxg+x~PlWO65(j=eGM}3s6Ict+`r^FuQBF_UwkVoPPWGcfW>TA4vl$d1gNj+;9{4)?wIC;@71aYnaU(80 z`=QC45@5@|w^KOGL?1wa1GB_#d)l71C+lOUcl$9>>;>L;zEfKpyAQR8a+Lyx7a*q; za=~U#>Sv-CoHpIp{&UW=%tbM6)U~&*kBM%tV-<`(2E@>HQp7TnGRFy~!&{aOj6t}a ziuAT{Vzx9b5f*uM2=jS`o}$}fs$O)&Yg^^f?sk#XmDPy<6T*2rp2y9<-;mXH#Wbr4 zMlN~uNsAyEgAT`cW8CVIpNpC@e?2ipP4_Um^ zdu4UJkj}{x5!HA!x25W{P68JkMR^ku^t*SP+4#`88w(vak*2_rQdg)3XVseew{Qs3 z!2=0QKv~5tYHTB=B;jq{7J?BZc)N< zAy#5e*;Ra*jVf8c;vzcPdrV!fKbk1jBA7qTiwbfLfIoW-hwPa|p0`QCp?@?^jiMPW z@77B%@+iumKI&rXEG?RI5Z%|8pS=g00m-GCnlGajk< zd_T{|nUtjl7H_oy7Nd!5Ha^3eg_^YoNhqS$M4Tcd0PL5vUSGqf7MG>AmSA$nz!oQX z{@ncLhLo#{PBrGbFWhrtz|sZMQ97=?`U5i_OC>&3#Taz_D4I%{i;k90V#Q`!z_h^q znFxul&PzKktA%EC15%nOxFM5>!EKr9W~zXz+fF+E)J~2>K%O$bC6O4FvS4BM_k>m_ zOXa?ocU|FPMJ%x-pnwcgs*gE75C|AEogffw43B)M#P z$-IV*#S<-cbNQSNu?*}|Lvie*6>#wxkM$=C^ihwz157=}dNI+b(NSECRU(fkaYMOO zx-uGc-6+OVB?1jlOwARsLkNuhQe;j967pA;U(F(EO{Gxhl`;;Zk-G~H&!fI(Cl1y< zejzCfsPS4yEN!K#PMDwLO4ADkc|Nm(r0broPxV zg$xex2J0*&mki4)R52;J9f;VE4$avF?rPZwA)=Kvt$SPSWv_PB<%SyIWR{v&9|&{e znhEFY&2!o4&O8>{LIYxU#GAJT6^*9gqR$7}R5SoCD>{iyR1}V$&uU^bj)_){9i-B3 zJ?xY(LCd4C6K}nQ)c0fGIHS2Szzc>$aj;E{SU!OPJUfcK=RGHt?C3>;mb|gV>Oh+5 z!cqGJk`I3Uob--$YxZR4XRCzID6eS*9}#ZD!A{YbN6xXogS7SJ>f#C}Qu$>zW6K)n~jj0FxS(9>~AIO5R zF|bMrFPg8pE9bEpl&7qP&*$j;M4w(ZP;0Lxa`L=RGI2XiBT_3fj!5^vQyF zB7E}9GRW+_o|CI%O;`7At8^pA-^n2^U2h2r{Y=04SX)QVZ}@_HMC7YYeY$)`L2pV| zF`b1MA!+Xp@#sPT(ToeC1j|!Jb{j%!idyVdtfjbrff8+D)h9-Be{*mupj9 zmIn;#5tk|OWJka?O@{yvj%8}9X&1`9d40P++YE) z!%cQhp$omL8bTawfTMF4&(i?KCS^&tz1)11vEp7FsMhavr@tj$|HtEkg%%5D+e+$*=Y9$5diUnThHhg69*H)ZD>rZWf;ctw($@ zwN28m032qpR{AGhz7P#i(y*w4=0{I>`cYILJk^WR4nCm@Vnf6%m!-0~aZ$U!-h7r+ zYQc6E5Y^J*y}|QEdA%zU0?aB8k9VNg5kaLmu+w8l4L9-P2#90@U34XH~hGuo?z&5HxBdUQe%{fq*l>7+tK7?`rEk(LmnZq`OJT`OPIW0!a3-4PX# zn}Cm`D#i(CLSE_U#T3o?tCwz}XSMbyPF%Nliru*f1#1K?9aK-%xu-t9Od;73q3%|X zVqLV-e9&S44ItR#x#@J}E!od`?dQYrnwR+jD}7~QFol=gqQ!6Z@vcQS3Ru^nO=UN= z)h0b)tTO~?s)qZRp5Y`-a#5X_5ctfXNX@x*mu#`m5>O|T^i{xT$L^Edr@gl`VF zhQuvy0xs^p6uk?TtymI-ryqy+5J3V5gVt-(Wm`}G~8=b)8!BCL@=^&01YZTZ=L zw&Ks!3L_K4)@nl=T{Xb6@*0}Q^E1jdMXK2HAgX&ZZ475)dzu1_QRkpZg(m2uLqf^y zCwpNv%6uI%Cer5(x6MRprZVi<@W*2k`>~0(g+AI|mjmfvYIARw5=^Zc&vQ>pAcE|| zf*Cr?8+R5!;>DY;T8K1URqBa@IS)HX7mh8kLv|Wbw!xSN8`WUZ&sSzT3%un2Y(_go ziM}S4L%mU@u8487k3#F-$VX83?b%7gpt=0uDjXIFFT3NN-DWb}WOqUCln`k*U?v3# z%A8QAjWP#7^>?9lwfUi&z${uBmD;Vgj#Xth#&Uwt^`rwOiB9k;x5~yc9X{k6s4sLEPbf(``a7*5^m8 zjWDs*0EqIdVOzR(##!k`5G3EpjrP9ZVF0B@C47N^%C~!oG4V1ylTG(+RaZyT#ole} zx#w?L2t8JbO`Jv1j>jwT zJZ!H<*m%-57G6G7Y>%tfEx%5$8wqUuTn{vI9h59`{}gmbcv7$SWhVvKKrXdW<$%r^}&?&)zJ=U4) zezPyBlbQaYJ0;XqOkmmA)u6XS`ZZnuL>Pw$H?UbJbP5;A6q7MN?R$@|6sG>uQuxB& zTw3{bNy)aQUjB4>=-wfBt&;vOfGLL=U_M2cQjX3E zF**H6yj$Uc@-d_|pgsq+vc>^qYWc*zIATeK66xA7DC%@oz>qy%Ik#3o>3A024SWLh zYx}x^tE1pPgMmJQu1Kx)kV+}xtp&?%}jz|qut1Pw|5_H>NtJiP(-|Xd3Qr_rDmaYYG}f*R0m5Oi=S&<@QsFt$ z3|We!(Nf?rfw(?x>8{40nc?%(S4IZ$%s^8M@@fV}3Qtz{_7=$f?5j_rqEh27@~dFFGIIdj-<>^%+?d@R+6Cd+1`ilpGQr%A1eR=C>y^s@9-Ee+X%wR~{4j#-*Rt0m;pRq4TLmH0Z~+ zFRIU+_LqZ^g@nb9thYl^W>{o9KGMd>z)7DaXZBs_bLS#1Ta9iw-|kblrsuQ}P73g% z^-MOLib!9O;))MCR1*MHU2eF1##G20WKP~nL z%;62}i5c?5gW$>Dp5L7ejLE|rfjJeW@|Gr(PROOnSK8?4AzJ;ei!2(o-=; z<@h3Q541bfnar%mbnhR z@0Zi?TAmh;WqNG|{mSR_cAimjEUe$xja;+5Z1j8iB`6kzBw^x+p4@drH26+`Em}2V zOq{yrsHY|3zGPxepw@M|yz7G<=+(KYn8_WH?fv%r=hFF5rMA{q_+vdzL`zHU&j}T# zf$vMtF62vG(jF7N3~wVo)Tm?uaM641^~yn`fHFs@^;oG^!E-}rH^P(i<@?og#fYpF zQGt2qRglly z?^U{SSp}g@SyFp8F{9UV6%h$lG(3cMnkv?;soXpB1{pu7b7daS$PQ*0H~mzFGb@Uw zy_nziVQI+bw%UF=s4$*O__ayRTGcXOalRUy3Foz(!t>hRbvlM8R+0Uo_f<{yy&8Sf zVEsioicUC#*N;641``uJsCju&LNt*`8AomwpifLkmZD~89^8b(GC$`IMa3NK1+s0k zw(5Ep;_61Yw!Ksw0T+R0X&9g% zKUv<03A-Mjwg5;FXmSs_D;Z7%pO-bsiN+{oQgyrx#4TN`5z(M#W3c3PMgwRR{_DI6%=x$s0s&!l(6daYMXWDF)6o+}Q91X%{`ZIx(j zOxB2L-UN{)C@W3a3Oy9B8IUQ`P}VZ65L%k%Ct&{TEuQY?0@X5@PTWXK2sdBcsNBfd z5mA&CG1BJf{uexoBs$em;Wu<9F`23722nC@_F^Ky(R}QVVf7(#roHIGRM^qmo3R@q zE#^%eUI*kL905G!4KMr3>wKxX9RL?dv|VQ=U5b2_s*dDbw}tglME%9FoXI80s7saW zvh=bQb$}>(%k*c-JYR@cY7yJIJGVw}Lg&w-8ts%P2Rd8H~cZW5%Y1a(xw zI=S2n5O%~pwqXE~I)Q9>mzZKE((Tm148}-Z8=21m%WZ#x9;_cH2z_tSj$18p!Sf-~ zO&CF4=*mwWd^NS&J24cCegVL;T?tT%@#x=xQU#gJTgL_c2M)r+Ij)M|B98BT3a_3` zrWv~_{oxU(Z!w$EDO@xqCF?{{2ocmR9iEy~D)1&(nbRRA8_P%2bVGZAaKFzpoSEDB z2^p+auWin<%tNk&Ea^uIdrJiGk@A)R8ku2`d-{bHUY)!4qp<21M# z%c6t*e`GJf-w&OYNBg-WfjrR6x@tb*1dENCHhU-}tXYLWr&kJ_j~UlG+f0GeDXm@@ zqFXg+h4FbI>>hZ~??fSX^nv^OWlj=-0Y?4=hb3OB;?)`kY2X14Uf^yW3rzy%3* zQcP$7ja;K1_u%4x>8kSEaRxafAaGUZJv41#T@u|82P&c?{Q(MvQO5vC zuV@8w8b^1A47U)$bM{$F&-i;G-~kBInwxdrEWh!Gz?QACs=vKEV^)mqRwXbq=52K@ z5-LsAUh8i{4BKD>%Lo{hQ`R7VbQ#hKF3crx;nDJIEQ6i-RDLW~KcSOE0sCJEO25zQ z-~C*<2b|+W7er%m)4bqxZ1PV5#S|Ok#+YP(*q{%`MHLW7lO{4uArmD4HrRIlN}!?6 zk!cLdL~tZFIcYk;QM9{??d3Gl$Rw->QrZE=5Y!MwD}^PK2*`1W)+{L;^8$-V{YX(1#lLDcbBGtBYtorcbu_LhK0$_tC9KT{a62R_Ej8dc$O1C(C$V;kk zGRDigSqxq|73WV)F$g#+I_$b=fCTYKV*s$5ZkeqfD+)12R+H#8+41)&IBI`vghCGbaT!y@{YOhLvzIGpc+A)%rJBHjrbS`SF7Q*J!^@A+_RPC=nv;a^ z5n*q;;>|X2?Hn^yv)-1Fo#?C}*xc;`d7prADzSu@SM=y{zzH6W5x#cFf5|kRf*ON( z$p;v2X)DT*nN?H!7wn;}$5Ehw`h$>^xVy=GMK=a{U*h|hp>19n!r=Hf=b<^2$gri> zXCW);;z}?&Tn2X+$h|5K-`Y?34G6`TcxE2&9jfg~**yo$Fj$PB;B1DU3|8|l8%yef zFSI4vUaUY-2T-7<`Ag$?jc{Cg`B;`YQ8WRhG}(PJ`d+Zq%tWf=aVhzdNR2rW1x_pL zYgI@Bf_bTn{jSsM;D`sgUOX{$BD2O ziPj@9zo%@4T!FogretoRz{jB}qL2t*W}7O-0lE`;Uw5xJ)exl=D=6^t(h8zw{rSS% zQe$}50Fgt3XqHvbljGp%o@j-J>CbF;BT4zJL!lsGFP6UIQ5zaqNyM|rjl!7Pmo{Vw zHlrT>F+p~5!%~7X=3~Vx>jc73;cu|2Q^|$}J?F8udk70u^+U^+!pvTL)^pV=7pYlM z7mA6tYtNOJn3L78<&b94InjWHbKyZt0ufss4Y3cNBfbouu{_i>eBRd-Xn}98Td;Zx zkmgd8c!FK$qi(NK`|12_RIoI9k|#{JhHQQoDmUQJuCZ;N>xQdv-Eo$uEEtXuuIeS7 zqRp}zHkc+g!GOYQ7jx*;vkmzM&gu{lh7ha}-=ka+dy=JgZYf%c!AY+{WRm=cltH&{ zcZnjlR8pUEh_P840;!S&CbW7zvcUb5;`nA9$VH7`(@_@bKDP>9!l-&iX_6p;I^%dQ z&?4c{n(o@qNfPwnI;(GQFD11^Gg!RUE5?4;)aAiY7!*+~88X6NK}oT42;sEycBGst zA;|DnJo(5xnuAe0(AZ)x){<%3uiH{y8Ih9@ZSdZ|+N$c{|(DU*t!gUj@;(d~}( zz1&fFWB+L6y%CFIzhVu0YO(UPre$?$LCWHOT-lAq$s>PB|K!e+R!y-?5*5}F6+@wASHU~(vW?L%%0V1J4MBwNoTxaG znB~~uUEf_)ip9q}VQJ%nQ+H{Z<%Bu?uc1E=^UBXgIfY@Tqbs{*;p+E=vhSNAuR-c? z^=h&x$u!DF8`Rc0bjxgPO2)|E=dFy13ud4EN4E5bqKnod_$z({c0N#tn7fW_*Y+)k zad=&RiXB*b)EbNS_V0Up`i$v~4RbVp6bajmFq??8V8~yWcrg&BZM^*m;|}-WpPrlI;`T`l z9hvO$qb1G)ahKp-WJG3c`tDzeC|BK!r62y&iJaF7sf`qZoPpfLwcj_ov7Xu;x3X%s zN*t+M#tTF3Syv_skE7|;LzncUgncP}wGSYpRZeM0_rhxLg1Mi{0Vf#~?M->W!Zsgz zFuxIa+Ph25a`2T7L9~?{DQ6|H&_FP?yQb&nNIGL;3x94G1LJg^?n`4wRfp)Epyu!j zC!VO%`p}`yC|>oqa8g=qa=;DplCZXb)ad% zJ^HMvw_7xqm>xB}Ie=?Tm~^g2O|mYJuJe#Q#Jmaj#6_%`YFO}EvK?B}sCPQGv1*j* zy9huKXHkbLc8dF)<;60ix4TC6g;NUP9>-X3#P1) zKZyDA7smjsA-LLKE)8y6XhPqs-!nk3!1>9ArrALg&$21ofR(|XK2s7P!>t^UP|{)6 zjD%j$0&;|InO_FWqo41)4wu66S_7V$OvzZvHkc(rNgwm%O{INInIz0o1>OUO-HaKM zhh^`4uINTrD$iW-9t&;9GZfUCR+o_R$0~fl;dX=nvq2YjRr4}LURV6-J{Qho#w#*8V2~MHQ>J}4)Cw) z>HlmwG{b*yW%z%nhh}8^AL^n1t@vQ(Pw_zlJH%B=b_0C1MGHqp1eQm_ywb5>GJXbD z_(Oc6!FTp&0T%#yc=922x@7%q_Gmu2ZFirpF|TfJ&P?_XN7Vtoub#KNM+Ol@DMwbf zVMs=0eIsNsll`uO{-`xhyu(YJcE_TMhNY;vA)L456oZB7vxrVdSk7&()^6uR_8yVz z>70S}-`d7j-utsY#u}^rEi*ZMeDBW<1q~*AKHsZ@`o&hRPp`Q9gj_znB3?wP{2uLm z$Al#MdMl<+UOYORQRin#=e*fIs*4s2WzA5~BpzAgoAYJTi)GC>G-kLbj!V9r6_`oY zB3BIBa`!(@-fmhF@~pSFm#ugqy&ShEDi~Gh2kPRLA0%-vv*X3e)EkGTA#Sw?cwQT2 zkrqL)sy!}mBeLeR(I{Xe5Y=t(ye_Rqz0A$%0nrvaW;W*w#Fq*R)fFDSc&rD!pu#Zf z>T^~*N|e$nm8|IlN!mQF5|}2dw8-5$JtT2U^z{%m4SNAZ%%_~@`FdrW87tgs; z7R@&0BS;SPyEEp`Ee~dsfRmC_Oc@7tNLQ5#a5qN zy_z7}L&1ny(p1NFrwzf0Tidr(Bhv0ES9uXQ0QTbjQ3^DE#N(ki@b0=nL(Y(5GQm&*g8UZJ zE0Yf#N(_YnRji)iS}3oIT~3$4a49k4Hx;gp^T2&@9N1* zbhBzh57B;$FifJB(g@?6%&$pSC*@3t?;@ zKbxpJzyWr&)YD;1ijrqz#gkbfId&N45~Z z79;H*{8PAFKCvbdkR)R1f+@FlZn!4W?KWwe|5+#5> z?{?(+^-*%UiacqzBon1vPuv?OK8(koW>^4maB|~XHTXO;y)}2KHBEQY)I+(mHc@N- z0{U6dff2829q^r0Ch((`r&t-3e+$8eu?OI7PzIy2=!Y3V;!yeuEGvp9~Z$0jKP|R`19NavBcu-W7#PyXc9_0PT;2rUJ?>4USBk0NydyVyd zose}p8!Woyz4kS<+g@pE5c}43TM3U2gfz@1LzZn+5~}C^NArE$W`^v%gN@tu@GCj- zxEzC$`}|!EVe2nCo&-(8*3BV9f2!18(H~#RFe$pCDe>-bYzBG4qi!nZ<>cht{KI?2 zIE8K8X-81_bg??&CHrku!yrHqE0A>r=PG6E@c!bJttim@cXkKsJo1{>g8uFphFyT- z=5KHyc!-#!zfG^UO)Dg-$uj)uViL&OltuB&Bv4ymut5)0Thoa?&RujyL_x+s0Yghb;KT%jt~vIJr#5nCo5E3|0*!?t!p#vvaxIvxS@4 z^?HNr#V#sF7P6BlHzWHzH`l>dQeyjxjMMoIn&s(vf3>rZcXIMMH}dOS+ymxbSnDeF z4ntU1&smzBvJS;@B#;nQ$Qt))j$9PaTI-Un$0Oqb`giZ3)@77a;&3PXZfd={RU;FB zS`f1DkFKE0wSYCF&kQBqx+}PN^PEwd?bk9&W2F>wKEJ|v@Yij(w`KUbxAoU8$47s3 z&)PFiE!ioN)ZG=jKOJ(h=o94V)pi)b3-+<|4@NtUi1nUzJ>Vs3R56<~^v6 zo_p>F=^q`zQaMqV;OKFVn||GB(-jgF&+$lOC%9%s1*fKllMrrx0xFrmQq3bHVM(Rz z3CRk@eY6WOK+h5BW70(>gf6eT`a+uNN|0XQ1-}CqF9756$J8-0CL3%vS4aME4pKJT zlmPZzOqI!C{2ljLLvJ*Io6dLuktzi6!Jw3kj3qNwEaT>T>PK-NQXGk&t%O(PJ(?I4 z8KH{BdN>sSJD!5BS?xOQ?)Rt9RASqZ@R2Ttb?;BK#Z?-!~HQ`0ZM0NxCchg z;jfKXhe(DG1zHbBh)wm|5GfqKg?>_HLgL`0$VcU#NrQD6h**ob13z8v@({7dn^Iid z#ew6qT^%01&enw$-|5|qvIr#@Zh9ooma`@FrWIS1Kz(#Cd!r1rx{a0P0@A0xI$h@x z-yczaxK;)DbY(Jb>g4U^#%9o8I}@LMtJ*(&X5$A-RClVe?>;Tv0Y@t!%d52^u?cgM zudKOLXh6F7gSl<%D4Q(9G5Mxeq0qlpW|k-&xM7-sM9uL_g5Lt#p7kDpZ`*+rnygsc z?F|-GO_i0q3q9hOEgo8M!L$L1Se%t;KGHVc>2b%mltp->#ja_~JJsJYMn^=6ShSRk zY}KeAdC={U%p6MCd0=Sq`o(!9MN#g_{8MbTkQYy=09Lk`eJt5Y%h(Ga!2cXPASv}q zZ{dged0?&CbM=EQ;ZGIk(1kedZDIf0eXkUIbwly3$(s$p$dl(4CHB~~B)t!{>(B?e z)_m?nC8V|4zAiUh9gtXk%ieenRIwa(Km6TV&3aOI>;s(D^b+MyI6NXpOEj(%I3I zhnKbBB{AO0mxkS&7nH=J=QX{273feKF!XXaa@OusXy>YB&ca-@h9@1(4#qP0YTL`Y z_yuDRq*nCHchkQKW;npfkhKXlU2zYdR1CkwiU+Hy!5wl`uKO2;bAQH?fa~)}(mlO% z0w=IB#5Ls6ZM4~vve9J)%>=3AGjRG%mI!*;Ax$EL4>d=>D=-*~#YdaKuVqD*{a7|2 zrfsq55Hxsj&YYyE38-T;9{~Q{wU0j)bIjJ>@7w4VL!pJ%7#jO>B+ugGP*LZWN6S?a zXM20retx4(60hG1vDW;GDXBD%CRqlX%V8CtHVB3(v>%e9I?)w2b2d>_-xfj+p1O3e zkB`N&%!>8uXA;_Q3}4Jbm0yB60UH_FyL!c4fj1TRbro`XIVYkPb zz|lw$yHhYHBInr`k-hm{HHbbaqd8Vb@PhfjsN5J=Az3%+3q|>gKH7}E`3B7I7=&++ z#!;-;0pE$I-n$RBwd0oXlA>7R6fRVP^3N@fJt7AS0|-;GyzO7+rCPEke}P%FB}@F? z#LN4Dx5x@y`M>eP{-@6B|AU@XhJPAQ|IGU_|2Lk4>M2l*3cmQ!wm`91b;qdG%o2)Dx=_7P2!maFF5Brl@-Y>mFtF z@qe>_OR63-eZ+iaX!CfKQIcsn@xF|YQc{w6J`{6a=XkMUz=%a?bfL?Vp?sN@w|`IA zcbmQ~>i>i#>zb?IR=z(sZZtJs%)O#1ZaBML9!gV1lPm8LlK;_9)=osQgZfJmh=N_#EgycdPhq}4h@;6U89?`TNCOw z3!BAl$(BCN7yD-|YLA)wi;v!SQ|O;Qt!;R+Pjl~i{`Xf#LP-iW{S##ElG5h<)$n>H z?6GWl&tEbgkt4bQ@??~Z(1vKC|!S+%9 z>}Q`o!d#O6h=PmfIf(1T%kjJM{SbJH*5Mbp$*>kFANqi{AzS? zQa{MZ{d2w@%JamQe$25f#(ek1g$Q%zteFfq6@yEy8a_3)$4Xo_`fj7CcJe}2vfxFE z-J}^LvxUfvv0+2pp6;wT)Vs%d872(b>Lt7iyo{lH4W$~suaCzN_eRU+9xu4>yZg5R zckd9Ys2JR^IM9T}cX<+2&6zb!hTtUhS0=denkU*VHDE4rA&c70Rmk+TQympNgnfP4(g}2Jq#WKG}Vg zk6Y9N0j-^s!%mdfJnsZoT`xd=e@NZbcI-U47NqSIaXF<1=0gk0EcGJc;xr9N!3KlLnX8b?y$lh*IH z)-l#21j~UHE<4IrVC=Rzc=7L2Y_VZ;ZA+?`WQkl0u^Wrx0uh1jR+^wMe2--k4praM zTEfZp5&NXf^-|%QjQ6Q5Mq?VT2ZK~f+eDieZJ563>J>S*uA6QI4GvpTJAP<3?d$%~ zFg=9gHow)s=Y=ZJCWFf^a)BSs9=`s5(oL33i^l4?(>SZ6R5nCEo(JXRGeceF1Q2Qv zT`+v&5ToYnX7~6)-iWY=f7Zq{CR#0^J|d6*?HKG5oAf8!eLk^T+X4%g&4}~i@o3E< znlNb{0NaN08j!9$r@o zM|S%1CEPTCt2*hoVHjI>r>SM1tL6-9ix|Yn9CU@ol|9)qBi=BShCc7O-U+cjGtB-+ zdshEX0}g zosIOQv_H~)2Hs)BIM%yC=PSgzR1kQxWl@(4G|l;RxH0yt@CQhb$8a|B%N!Lukab)1 z-x`XCwH5n+4t@TjGW6J;K;}+J0CBj?+C(ZKE5?2j85cQ*p*&HBiOYcvHS(J7YaV=R zps`z2zf#1AKhaI4A==g2)>oA~0#;AjYQ%sUUxQF^#o-j4FC>nK4;u;{8wTu+hTuYM zTt^~GnDSH;K#9*G>4%@Xj#xKY=hI{XQz=wb0ikJ3hS`4&F;@M>lJ@(6bySADixtyn z#R$D1wEOH3<}C%Aq~lTK@^>7%$i3yFeoy~oNN%jtB* zX?YZU!)ta1>Kz^o`BTD*nccutGyKgER1jb<=fH?!&6ITN;;cEH1Qd6R)Wh$+423WJq#wp8*=lB|Yn z#wfdv3>rj`=|{4IJwm`~B_=%I?)``RTV2}J#LvVZ)Y@fNSt~Nt9}%I2slSP%5+p$o z@;aCuH0Y`)nDrBYvp~q$7a%&@RjJm1{fQh9<6I+_HI(rW?Wd9x{~K%X6r^d`b!nzi zY1?L{op0K)K4-?1XVK=@<%< zQ)Y$8V{Pr9{K0AUN-&ak8!;)l;N#-INP}1uJJ@X^f-uW(7RH<%rgJj|n}zAJ*mNw3 znBhhS3&1m@TOJP6+^bSCW zM2!7TQNLa1OBP*B*;Iq%;NR%uqewL2eb-r4oC&THB)f2Q1(GL4MX^~hA%tDRwLZ=s zd^2S0(spDcHdC3a(<{YGIxq(9Ew8f)S>twA*~g+Qny3LzRMyBzM>|F{MEbW_55gI* z38)G=tRH0Pw?CZLotj$aSk!5YrzK8F;@l8}A-~(I>04lMX~a__|PtRn7ep)RF~Z8k|lRg3|B(pQupCz&?>MKbqzQ+!!YY{ zmYWgQS8HD&tJR&^t}z@3Fwgwqo;Rf_l+t5!x#22xo!r5Q23m9tTU7UQzwJxT!S1hV z&FIEz=bom=N5vnROr!p2OX8p@Gc51{b4`nX9#DF2B-~?T25r+mAZ0J%49d_0w#%)w zZHCl~31IT+Vaa0#K(S0Q?DYCQ)w-27<91X1tAp}bizftheYq_Y1Zpmt=fcJ<)QxjU z=bB@VaktbAj!!!}aPdom;u(RG{cwIg-fyC0Y5K_b3zF(n0x*U?o3!W5VNDkup6)dA zs~HHJ2?r@GX(WTdKs7P5F8uG(Ypr|j>O84#S`$IEovh9uBeg!zT75B5>7u90=P?RP zTJy3evsyYhGE>Fsw6yc&bmYj_~y;w8=>Xl0aeofHs_n*G*3v+ff{ zL|1)inuCZ;ce?tQSX0oG6;sEus-nrlkjq(k9xI@|Cl%W-jPhI2&Kd!kBO1{b-Tjiq z3K)oHpUC)4aZHa!oNwbfEUt@CTf@1c{>O&q7*jUyCDU|)z_&t|uNtxRFd=cZT#)5H zqe3WG^~oGit(n+c1-Sx!VY8}The~?1AYhMd<~V`l%RBC^rgVZ5mE`EmX;*j}O~U*~ zQey*pj2NWFm?NZ+if76VPKAP+&64~Vh9iu=yrk7c(#Han7ET&ZYU{83^7*=)$Befi zW#~}h4&`HZ%0=_N?8~y#x+3XWajL6RCwFT&yCE7?Hnbq~4lDgo?|mlpIrzOsGIp+c z-&nKxg#cmt0|s5n)Lb&XU2l4Xy&%}F8ghhqGZPDks1Ya&uEc(W@5j|JSxK;!Dv1{y zmWVgxn41b`$Jhy(!&H>~@r7WCnJ|jbJ6F!0biQhcC*x$s_KVkRq&p(8o1GE*89@sR zh%{Jmtmp$5!17u+jRGsddFI)9-P`bbQG3OkG?kjN=|YQxe8^3_bHlCvQm<;>Y%FNb zZ!$rx;xn@3Ds?pBs})*Y_p63u#AcE8dM8mYfUF~G8UJJ=vxYEGx?>D-ZnH7=jr9@uVdAdNN%)nc@N{>- z$wc#d42@GH!`@hlm*Do<{}17ugAwlLv05LV=L{fpp;~?iG^$j^DbPM}X3C+otIU!9 z3>Xx26Vsc6Q96nAIf46Mb#&uLHAL+L_FfV#X#Re2FDT3mU$v6Qv4IX}p9tDK;;ao8mtbQ z%ityjjj0q}&_Y$FoF8(zg(JgL_tp%I-}YHHn7Uzd{)+cW92XfNse~p#`8<)mbHOCI$8o2#+#;=ixO4{0FML{qB;t7 zgG{<=q7DjRgzY_O0wG}WKBq`=6c@G!94$maR>j7ue0vyR)-DLCLZ%hTwmCHjr9dX{u0IY(Nv8Pf>`XsVU=xgcP?m{mLM8jhB-VNAdxrA=TBPrS@T> z^a0XEltz&M+AAm#UyqrjD~Ez#^!vimalAA0rx6viAlo$%{mj=&m$5StLu|XxU<=EV zKZME_^m^rEYJ=Q7<&=BhXa1@O)3joWkWFw+K>ebHkni-CCs*uG+B51=pq50Mn?0TV z6@X!dj#91GkXyfm;4W9XDQgwlCOo>_CMTe5m*LqEql!NLS|TvknWeCP#MO{#Q)m1?ht6XB-(zR}*Z6;DQ!ukKGycy_btfDV^nW(RDMkgX)t?XF zb!vPNQgAIW!MzZS-ss|ZvN$n860+BqOM>m2M{T-s37QBrMt%;g*~dq>_s90u-geKC z_2plFb9|MXlc|B}Q+1W&%){vzDSRY(~?hYv?A1R#j%&^*pXOdsO4ZW5E3Z%F0BVi3K5aCtW4S=6zC zPMFGF!0H0l;6<1nfO0&J9sx*)8g-&AMbI5&%}R7sIJ)|%Cmupvr9MKM7CKVTB<|H7 z?1AXp6w=)4b+QZ3&E?$V=h8Iz23_xa=fJQA%-132;wF~)sPGHL`z#@|ZAoki3bDjo zc zsYS_Sdx?;dlGX|$Ui>IhUE60o(y_VYs-p?8#hS+F5;UGE4riF-jZR|B)yQ_JF09oS z!AJxckpwJvCirx!OZkDj15i+S7>Sg7i<YztE7*5%=Cxq zZUmtfVDRaYpa(c@A)7O5fNvwE>YGT%X~5uc;YBhOzsZ0=Vf<4}BK=5}M!b?bRB{L6 zmZ|%2PLkC%$1G|SjLd}D<*EsQnk&p(<+J%8AcvAfqHsO0kH|$6u{un4Y2{mK+w4Mw zT)A$OQLOP#;A1r-%s?x|1mvQJ!eRSLQDY0U!%9mn^o^z>+r6A`8p5{zhAVmO$IK9w z#0cP2_^nlTFer|Gzbq0OQ*Bfd*4KXqmR!s@?+cw*?6-wrpsBP$^@76%rwJ4?FHB)7 zk$aw52nhv~r?w)}u{mk}i++E>UL!nxVv2Jro8bXmpId<9?xAq#66Ty{E|mpwEQVk0 zI<_RM)hgOZ;%a1w#w%G@46D1)uN_{X=3~u;=b{?|e`HIEMLxo?gNzhw04#3#OkHyz zDf#{@K6lPEhRU!$-mhn`4IqdnL|Zc>s?q)e{+d)KRYMD^I0X>@UD|-84PoE|FddQ( zm(Z2)doXQLw_gdc^-=IN>TrA^L$daeWOhitLTcRi&LBC-0g14QRu#0k-t_tJ{b9;x z8Se^;jeYI{ZP3X=6%PreKNh15&2|o`WM4oxk??O+Zgi6 zt7iI3Wbp)<@#{`RZA@|Qzh$t&uy% z;k-B)HIpuuFHKRZ#~joW@ebcK7E)BN<3|sN54jQ{CXR&Njwu}&;Y=@@5pH(U-;85a zs`d@}zK99hm}L-mOV>aHOkF7c{`CLp!H%^X4h0^;sDb!mVbv6~&vhsslz3~0z=zk) z<0y|ayA;u=vb_ldQ4~P*r5p`U7{w76n*2G(CtB8VnK3;w@4;HE?p!x-ZhL+HSdGvN z#TEB8ysW!LxyZVjWP7VitE)ii?kJN-TcbMgcJb4&NtyIGMEPD}02frCxCnU_-l$tV zOei%a&gUbe)4`SYy{&=tQ#6IHf68=NVieYe0JQ6i-%$9+6bedzo^x&I^gng`( z49WMg4_)uRT`2C7g(R)$`h!S%e-;l*Mzj3Hn!#h%8Fg5%bBDOX`LS=|P;?w0BS?GX zTFvueCj2VeAkkkZ?g9xq_|Rr z!J@9I=)Vu+k)z9@vKYoFI&fq{8@$w=J6K4XCBUU0>=~ygWsI$=njn^rrY~vCE&<0B z2Vd<#{87@Ewlqy@@LaP-8ol8hE`T#y*jdS-zU{Olum)#63d!CXl(S%^wIL*-*ke|w zqq?DVp}iXItd}fOCN+=}l8%8vfGaW*f!?4T)H22aeqj`iYPoD``TtST;{^#T*T>F4df5DPwsm1%}A zvYUV>#M`kFw>cMNJ9^OB4w{!G4H<$Oa9E6`IbRU_tXr;1SHwn@oXG5W*eAPkwS4sC zPFiu2l-1dxn{d&LlpOSTw0UV-p`=y{UCSY&!qdedHStGhZQc^hAhK0h+Fhiw5g|o8 z>LM;DYTa4^5tmVS2>^SSDqABarX&3;Y>}c%G!bnBA=zj0z$QFXbS%umt{gqzt%^&B z{vb<(-w}qUFImB`%tSH_n$8K{OsVvRfJV5oAWT`y?lu{Dbd=Uz)j5{O?!LGotYEUp z#M&mMu~ouIws+lM3mh&9v2PO!H^<_(C0pod8?r3FM`n6QYD~?tt$sDW~{v3H$j=z7)6#34%OyF}m5=H4;J zO|kb>--fcNVpya6Gk_=8pJSA&*q~lH>fOXA{fVyIW&>YGPmM9?5bFeCJLf7oWg| zi2&|7K<(!E;L*2BQyX>q&t@*2YHmX5hQjYE8xKp_Kc(d9rJBYgE7QnAIkwbwC?y@V zD^>2%t2!%QW1G47_pbjouq-#z=qBew%CtH!()iiw=WP~me1}KC?4VmW0GA~hfkDq6Mls!xbd)-jw&Ti zC}DAEGdB+|&ei~^xCBTSnLWHcrT=B%@}<3?kR~4*iWIGBXVt3cCMe)ZcFk@sV#9$~ zhwBK(z_fEz;f70-xxa}ogVxdXF zw?>mx)bvA>r<Y>lN6o2UQ%CKuxwTz{aQa94iCA3xFsvh!s7kgSlI)S3xR+&2|}z9@o^5Y?2#zE zZ!b_H!KR}s0t^X9Lop7S(K~#EXZkgoNWQh4*8_2R#d!5x)^56OT0f!_dyQz*xr{_& z{JBbG$ifBH?eF=UTQ2nr52s73zT_qBe1=fjQMdqa_}^C!gym?0`JmZlDBW1N7*4@G zH2zeU`o`k-9?n9QB>srH9`}sKu#?J`C@FIZ@DCA*=jUh>3kE$LRQ(Up!^D^73d6_8 zG9o2!nHYb&jVD!D3|7s^-}F=Ev*0(z7eQ#zvNJX}Sso&4Q?-ypKD`bPu8oH7n%-c< zN{@0pzyG`^PD*{6e;ofTG|~zVIVF2#_y9}-P2xD$JHowWYRbLRxGM%L+Ol0N3-fj} zWG}{bfBSqi8hfbF>AQ@HcV$yYxkm!dJRtg%t8O0R-0WiEqpjd@)rV>9@qdeok zGFl-0p@)}%#3D&JIk=0?^11Xxu5lkRW0_WK6?5Q!m$Ls0ohlJCT3s9zZ5gLlwi;qR zr(pJXkRijD0!9r^_qcz z=a|@4ac`)ZUwS(2oaQ$Z)@U7FqpfC~YF%6(>ns()IIXaSgFaRu?C&8T;X!q3b2_k=OP}3%D zv3=#v)Z}cpSw}3$rJlYac|oMEKz?;cJfcV!K|khdn}M!IZYr^i-=ArpBYqLxm(K|s z8p3IH3o;Z2)519z!jflDI`@pC^7>^#4B1zaqT!EOC=7N4c<^hepat<%ZX^1PU(m2n zk|(aS)Y@$ z+!%B)VlSKY_6KmfeLYr``33V77W7rI1eWhsT7@x9l}F>wm-Ca-(v5(|wTt2geB+#? zs^J_#{3p{}Sq~Ym6GDMmveW=HL<*X(uF%}ImFxemrId)U(zXYIL(&9Uph1mD#7Lrg zousmY4{Z=YInl4gN&g_BxQ6aHcTjTyY1M-Uo^QrL@1&Fxc|2Jzt9fu#2do=lS6%8E&CQG;aHBCmhoRMvFKw^LYvb-<^AvIb! zQyO!*+XQvcuaT4tJQ7L4+y(xn@qR`SPzTq?y{qwy!9k_R`%_S^&kQwz$S}PvcU)HT zEllO3w;eIH&?K;s+Y4yVGx~{i3=C2AhAHSMDx?7a6UdvKpSSDX$LV=5=SO6`9=^}p z^WIZX*e*Y`aF2)4yRgDPVZZ018VB8O^jYp`^taW!jZkLMOjFXfi6b?jAYN;bhU@33 z5k(le-Y+Mtd347PcByIl51flJmIO2*q!s>Up}8SYRpS+>tha5%PV<~KKK8)6T--os zg4oq7-F#_B8Y83%bD^e+nsUDRx-vH#%pb12?FKxzS=;8=;Rnlm3YxHS3@!uVY9|aK zWXH|5QE^y&0t4&ed}+JGN&R9lFjvT<8{b}QzxmGbq>vLd_P$F20&elq5r#zOkc*RD zRp&B7=Z4s{2K#A44s54}hSUkHy?pxEMTSg>U-t9;&ifF<$8TU<3X|a$Z37fYqw94+ z&;@pL`I>AmkkW(7(i{5V^v?EVy(_lZ)m8{95w%8X0SL`D3Zh)5dS1fobuJ1JKR`}1 zYcCNE32Q@19-pyS;*O9D8Kf635~9%pu!sxhe~HGCvs?;V>Bge^JVfF)?@R=A+kbom zaoti4QIQ;scaF1qc>G%jaT*^+KjObW944L*R$uw9KN&|bxfWGaWYb41S!2Ivqw9Oqm-c+z0ZQ6|!^A|NveTF10t~E{ zrJn>)qxG>Je+(YyWiGt4mUV$sG_sEa#p4iau(s*6^RBBB9)UkQirDr}Hz=YaH8i=D z6a$J`xP|;mi|6HFOArq|-~Y~%WB7Mt=I?LF5V?*~D7iIWMVnZIeFeg5DAiC)=`@0M z(b%VY+DDHtzc3IUbEqT4D#OrMfj!i&GsUK$%^sUKbj(1g*@mBkz>SE2cPr@H${%>* zHbIJ2tfP2sNA*(x-P%iivH3 zlU~qBFq~FhrB?fN;vE*xuFL#37`Z+QgCb&JWSRRh<(e3+g9!BE$ZFRoJ*N4TDD3ox zLci+Mm|pT-y8lp+xE8}}BuFj$al-mOef5t;c(t%S?pZvxc1QQQc@9nCF5mPF z6f!OpF`f~esEEsac!Gv%vSWwlt7fayNnhdc);X`q*+pe8CW#H&V|c+0#ALW(vevq) z<);v?c(e<*AsRTl4Vo6xNca^DZH*eiFMICDR%UkeEAHp@Wuk6VZ5jTO+xeX5)>hdR z5pTdO(4)&JL1nn9O8{|0ZO`Q|Bg(f4lIZzyQ62;gR#fR64q}-GIQ+rf%{Im`Lt89j z7N5XO=D$p#E+A8t9*3LY5faE3qaG`OdoCaU;+kSJkbvR+ zh1KqcDz<%r%+o&=*Vc@gH3D@&i`a7|f{(tb^q88upm*F9cnp62b4|U&$)~79wDnF~ z9PN^zKT?SWhSgl@TXw8Za^({b(MJh8sa>-!lFRmHF_g$=m17Cg4tzYX{=8i8|AuJo z;c_%mm((cT36>A4Q$M!?VXH&T_ncZtYzC z9nIc31pHHM4p&Akp=EMo9-Zr6C!t#p| zRMv1YrZbv$9YY`1sov;=I7`wR98TCFTDNnGyGw-?!J#%|_LS>E0Fv@=(<*Wl8AhiH z`Y?1DIF?m2{HX1IqR#l0%9$Ba3rV;mp}cJ((~ZtHo#)%b*@-pJg}WG}zTUSrpzEsh zoedhO@s|}kyHjr|l<9yXUk-0(UF&v~*(^E%-&c<#8iXP+f1HGe89R12RQ?$3abre| z(DuuVa*f+R0^b_lL@{2muh&DE4YC>&GcIlJ`2a_zm>Qp|s~wLQMzEqaY4a6DNI8R> zPe5&gY)C#U`pR>^I?YF~THz$?{3L@apDhr?lgi!pLQAn^Qk`N?A?uT<3<*qFe<7i| zJ-Jt|cA$ac6|WKq4M``5ce?Buv$kHtU0Vklw6s49-U0_Y9%BN;mcI#Zi&G6&Pc$gFOZx%-b>%! z#nTzPebP*B+ub|+#R^YgF=XwbDsH9P`oLXC37NanyRFHvQXwrlDZ1oiq{`XdRtG?T zp!yA+JEi75F_S1|FvQv=61|$t~nOdv>W+TO(mX>D3J* z){z9UZFN-uusJ_3!vhMkLTo?vQAM1Tn|XoH$zt9WD^%Sr-dMFuYx8}|X(G?QP+^}t zoG*H6rG31ej}rHi^~Fq6x$ls@9Oz0jzY{_5;vZ3bU zNImr!}5e zJXEslo7$_k4w{~Jx+}i6rr&)>D^m(B@)2M0MQQQ$+$TZ$Z%Kjwg&hAs2NPrZ--C($ z*Z6-Y$5|LS*#9Rvu3?8GhWwwsa4HZ}UegBveM|_R`+0z~PIU#L(g!o1Bm!E*(qnDD z_it^5S!j_2clBE28KZuZC^N6lvWvHhPPN@^kNm!Mz|ZO5{qs8|x~|9l%X^qg;RW4L z)G7{~T%OF@e~F!C`XSGC?dE;Q9z=}kbI-Ta%humHSw44HA7YCCcw!!;^4lgEN$LwVHb)})18?hDmyy?ANTwq<;r}4Y=dp%ca2mNRgLH; z6f@dcd=-a-W2n>IWK4QG53@Ge>W1(O;C|w?@L6j~Y0gZ0ROHo5JB$>v2P)GDYp}ro zB7EfKhDdvC?H>9U%~$;`fO(&^A*KpcsVPb7+_XP-x~(wCqiyNZH$zV;ahlPb*;VLQ z_jhgW+v?bDwVBBGN0s+&@zX`l_iya2-}a|b(gB1)X)81ZJGlQGkDEO*H@epr%9=x)8g1%6i3|&)Qp>1(nW~ zB1D%FTH~GZ3VqG>kU2oB8FR**CR^c?w=E!#x4dTtNp|#p8|Y>)!2sE*F`eQj36}i! zkdBr;rM=%>nYxy9E$b;=ZxY$*ckZpC5YpSAq-P??-JaFkE#}f1FTj*0dSS}+!t_0_ z#hFcyRq3wTy}gI3v8NwFUqpam+(c;{>}^;6(Xm0BjvV7+*%*Mb_~u9@j++l#wVOCZ zknL@IKH{p24gS(%*SI2HEM@MWU^$vWm8Z6I(nqQ*L&g%3xU&8fh-GNxL5i^>Q`XdIEKRyR zeJaIpE0%&J+=n*h!Gam8*U`SM`*a|Ff^ua-9GueLn9Wy1+BRcY$1HcWU##X>h^T?` z_@MJ`df0d{&*G)wt!H*RUd@>-F(kN+jIYxSZGCb*l);7_lVa zj-VG^!J>JQCokSIT^)QIs_?+pI24$ilElf|ELS6hmxk@*{&-cXrP>iW;YUSryH_7o z0PAKoKRhWmK?Z-uhS&OV5hf|OrX&_6uNx9A&w zYg;)0up`8WAHtZN0*u;NSavMU`0zAJlt-aqd6ElGqsEt6OR>KeY>ROdv4(s%XGRkF zhN6@LSc>xFHE*DbR=+CxPnb>vTNeOI~V5)RnHFr;$ zB1OaXDc>M8kc)H(n~Qx0{uSX&r$xVuDG5KRtId1KCI)KikRJWvH-Gd0Hi7Sh~ghv?c~Aj*1al z9wQR66$l>4H9$g))p@!AM)BjGb{J@OuWumWO?iYB6)TdhM3d35fy-t6>+|J) zv8>{a9~n5r=!Hd(-axIoE1|$=dus;6WO-K3^a^ckwc36AA0#ipQb@hx1D+@3MdF6; zLrwF5YQ_nG2JNt{n#?1uk>~;Ma@^zDgi%d1x(H-#t4G_let=f$r)ffMg0>))4d-J}FxR)aBVVH|%iBIJ{vc4w$xavaRp29*Yzx8Yy}fyBT7J+N}&`_1o|64krNl0BAc*$s0!M$tA3Y!?#*r| zXN%kMqCmux+hV?DsTBxJM?rY7evaE|)dZ2F(0Ee6?KbBRk;P6?+L|^2h=m6dUo3i6H5XuI z?1Xu}pnpxJnhn~LqD^0@I*Om|hFfic8!RSm>sktqX$Qo^aR3{p?Z|$f!25@-uX9b4 zS$yyWza*lghQw@w{{vZ|)S9@t&;-Cf>0Ei^m;+3&onP$%RiNRmNqoZ_pW|oBg2uC> znJu9Rt)*%Ni3oq{s&Q2;jp%M&`$Q&^O`%pQxd8r-2cYL@Oom2f%w)^N5|E@A)~+v2 ze?VQo9p1*qRBwz3*ht(&Ry>tumq6CZ54KHbtNNTen6CcVe@okl!jGxV!AF(ElE`+( zqjLt*H|TBbPE$m|k}rKq?C4|;pB8cu2?xX$$Mxb{Qf1<} z)tlIrxN-{$9Z}s_C5NQQ65?YY+7#FxrI45qH(&DaRsxDjh9v0t9i>E*y4Yx9q~hlq zTcgZIgQcCV)?x1jxQp(y#1673SMD+sT=@m=pJ&T71udS~RT#rMGt?J~hr5Jd z0=LqJTpluRI3P1!4vKkd05r4JC9u!!Ft&NDZ8dtu<^!T^nH0`97uIyylw!?!15L}l zQ&&%Z8%BF-QxqT1#>R*^tJZ%%e1?4?9sFD|jqQQiH~9^2)oD+&Z!kGsTmfN6$7ZsZsJV;jeAHGs*s31_4SDZ{kFPoEQVlsdpA{Lw7o*LW-$Y zSFK<{Gjg3g-r5th&J4_VSI8Y#`EeKH6>xV&l;C}MBQUM-MlZI>xQ-YYvKX2SC`GZ< z4#+s&^=nomBfhkSZ1Vjv^HC36rO#KlrVs|F7RM7F96rnGr>z_P6TY!pr0{V41p5}8Y!CqD<*}m!y&{P_M z<9wSAlVEnTvG_}x=dobAX4Y z*pYQ0pci1mkPYo&@mNPZPWgA7Ib&fY77e-=~k7RSV66>c$x5oBVd4QsAqDB!9G+=3t8PsIqO5K^p5f(-v zQw5L+o7CN!%!in+cun_np~hvSC%geo9T! zRaRkR;g*X$qQ$3ws`4eMUZgEb%e{YF^!hIcA23kQiv!JQTbMAo`5Ehi>_unA->b(5 zBVfBETCeIYsTVQ^z<1~t$s{CFNl0mmG$qOTrqDu?iIxWIUy>i|9 zdsBPv$>c)5cM}CnM2TWvlrDDIN3BRF1-a3`pAMR>AliorTLSH3&r4rzJu&yIygVxS zi^YarNH7O*8Rwj&TbgA#3A;3uJt6zrIoPLW_>|Lg`p3tD)=4yU*Mccd)Mb%0vy`+0~X~?CpiVxDDfYv0omfny-%%NzpL;Lxx_=Fu560 zoh4fw=G>pOWxApL@SwD74WW1Jg;mOo@&nKZGHqE}y_;VnyKiR_a=RJtYVz;l&66D) z?{)6UMIKyPUGU&^+2KU;A%v*)t09<}=N}=D;LqxIx$ur=n-G&rBM(~Qx_JlwVs+-Y zIpfcHr&;fk4^{v`^Ivh2tLw*vNABE0&n-y5)vc%?zfgfk@u660(NnKJYO==hEea303f<%t13^Z zQ@@u)ROTJ}Qmx$+Sm%>bS=>}JTBs$I9NcG<8IJ|XVjgrE&&`f_J@|p8hFVn_QzAie z{pX4IUbAHG9ZN7bT5Wa(&z|fWnSQ*uC?7JtS%_ju+Y@br0BGW6K96h5`Z1#UQHl_` zRSPO-obF259f6~#cMw>_e?-rho^X3i>T&2W$bDo)XPeP17|7ZjTRg!|g*4*vY1^T9 z0s-0i6^rUMbIl;p*8@sush1bpytlnqY`4cwo%YIvT=w<@&``d!xxL*Q(U^VQ+>h5P zYFHX>-9ScV9V1@Z9f)p$C^7<+I+z0Oc^5S>D>FIAF=ox;!jzF0<|s*^+E=L}>uK~1sCl_w)!{&}MI0_nlsFxk}mROu+gzLm(zf%0q~2*qcIg7z^eHVE6WJ6NS9y%^6BAG89~9&;%;d# z@?X&dP>*J-2upMq*nSb7cxLuvU(Z6wz)aoXB4=-;l*fRRu%H)FU z3}Q0V8&@<2bGQ*H3XsdX;DhOj6hF`0A$3A5&%xyJU#Txe=W3)Tn^5{OLW)LZle9O^ zt@`^C*p{KNwXKpYwxEa@H3T5L7=u}}B4R;)c3p~jP$R;@@kH>m$mtD zwjAebo=bI?Nys1?l8BuBo!8Cfg`9EOr-cYs8%9xoB97c_odR?;QRE2^7pZ&C0k~YLP2VsZugva0{@;qe&3!#5xht^dknHt9MP4-N7khxFS7r~?bq9cq{vV9VgZ$g#W; zZ88qjsv$4(keam|mDHE)YY(H1v7%W$fgUBPS^ky(@~=wWJSS6RF3{h;bk&7zpAtPF zh!}+4b*!mKdAgr30(;@i)Wx;`kYsd30s~7H5^9+7IeNg<@~m{^%sMWMyE>?Y!{tN^ zyVv$2LmI;ptta#KZ{%s8(QsAp9(OyryDE+cYvmVgQQCc)*JvM?4{J1BeUtr-^IS40 z?4dt%%yPmzmz8R+{^|mueWx^`rHXB9Q6jAlu zzvdEcxBnH|!8m5hoO3krJ8dWCu{5=-mLY9nj1??~KnpA_I(7GYTj6Q?X1}Ch{I~48 zRxez$Op>1C(Wlhp4`E@K4Xx7-4WGIOX}PvzbbV$d<;Yf27Yfm=^6uFJKGWx*h;jT)Mpu|6HA`tEUbvy z!0pg4ffH_UQmlU$%5sU0e>*-cBd|?D_xzsgFX1p4a}ewUjmx43!5<0fH|H4_y|vSo z9(~}6jH!*P_3-Fn{wBAMF*Fgf^alN{R?8-sbEoWCVgy!DJ>~5-XghJN1i~10tCsWE zwI&K07EUAORbamd=o!I150$S^JrK+$WksRRzur9lS&K@DuJtthlLKh8J7 z$;`yAP&1d4d3-iW{#NgTINApzz{^ZS)P2+qHG8)SWKR#1L_O`HoY`cYCw6{YIWhu> zip@7A$4{C9h-?OM6DBK_{?0E5InAOEHyb)c(IyBmCp0UvVDv+t(R4dss| z3yK~%$b;s_Ai<%pWP_StG_C#-DaqF(+OX zZeW(m*|W$CIRBywdU?;a8FZU)-L-MkzGM6zUIH|H7p^=`Y0+Y{dh|>@6GD3!ZWa*WolC&kzXk$cmX&X!B%v+=dH@Sxf z@6KPYXxX5r(57ZUpLOVTd0Rt0B%ZB1*hM)Zgu*Yo+Eu}(Vt_}@D-R;kf2bKddOvQb zBzQsrD^gMa&#p>Nt8+f#B>cv(8nsTIr)g>X$%|xpyJAMl8%-Nl_)8FwZkuxe5Miet zP6P zdn?I1+W+uh7is`uUx?Xa8Ty<(znq=jj-kZ}R&T+~@-HCxczS$k9&VNl`AefP@x<#c zHPe%iZ}IUC;mCX6`)MbJYIkE|uzyQoC3|5!``6hTnfG1LokLKup$-@I;)d`-Db4(%i(p{Ay{s!G#OFoW$;pF69ecgV_K+c)2D?%H%sV8Oo2=xQb5{Xav(A8oQ2@ z+__%2T$B^<`Az*&+{;(*OY!CHozkAV)>EgcUX}hlPe0XsX>+do>5oii(~Oo}dQ1h+ z*RhxqWH4kL{_QqI{36n3LaO>uEMr@o`a@r(nU7jb!Bw({2uE@SGZ&JeIE1yD3iy-?h}&1 zje6_@W1VT)QQ4YrAPA@`=#y}&5L>dh+{)`#L3o-S$TI z2I9;g-%5^e0GJgm{hVaz@LXAObmXUpl=Y?GsNQR-dV}9>3G6N38Sx;*Y~NUCtz?dq z>=aLZ1MyUB2tH|KlL?xH0T_5P*RVk~pD=A3q~t9mi`CLU47QY%@k$>t$;oGDQpF?; zV#?Cql6CZJ-K7M_Xx$Ca+`gv}N=$ehlrUMwV5XC^%ae=V-hO$W@;T+_Z@rz`qfnA; zawMHhh|yBo-f_RoW%wR(ECF6H`V@G8Y2+c6LW)@=c|Aqx;6b{D9tiAFHd{|-AjG1b zbwEFu(6ChcL{JO7Mcf9PcAj&X)B$H{45LShXwdnwm6t4KPStP`gq~DI7#6cNezY z2v@Wuujh?Q)Xt}l^N-$0!5cn4^4)hh$0W9>0Vh%?MlcgY3c;tp3vAQnS!=Z>)d%ZK z2y=Gby#jdg9IG*jr!0vhEsK6Q90S)>#nD<=>i|5EH|gCKo24J5b(+M=nDUvtf%(>~ zingXXk@kdLNFj>9z_pshUH%l?I^eNz>jze-JCD3Jd;Z-CFc?$bc4I&`<&XGkqaj|x zv5HRd6jy5T&I$A)B^iyjfundvgASNws%TKqbP%EA;^z7kKibl(msn|i{&Yw(j#JJl zi%Xw-@7L)pjVqj&rqd8Cy)8pjuY!9Z){`irM_x;=Mj;QC7U0`N*A zFX23-^_0P))tB$|_&C6@h!mFjm7H!6LAaj}5fDzc_tG6mmU0f0vFm+`P@xmNweD5L zTdv;U$AVTUW=Z(LqIEc}u}sNo$L!rAck0bW|8|K@<5s@T=Xa!g07pyOP!+&BICa!X zmjV&yYQuj;{c-pzl}~1VZID(IhD#HjbT(i@lYAC~+7;@uu_Afui58<%q%R-5W=c)_w5?t*Xv+nB8$FB_#&~bn%>}~d>ZFS{1fBO0}+59 z(xvwx+RtdIzy5NT zyLmE8$wiQd`#aK|+`c1{TNV+xSZ-wx-FdTk#DM1OLM}UbJTLw!-IHUNo_$56CryZ% zXJRZx?#*4t!f-e}q8v)8jTss|tq48I`XLjV~*#zB@GC|)9 zLFY>N!J&M5%`Eql=*K;I=r`Jk)?_@sTa~eRW$HY?-)Cbj?sfWp!+5iX36ngMkEAou zeF2`c>{zJQYnKA~OXZ)WAUu6;R@NG?t;_OEswB_Qojv-c0m)__=F}>GU>W~*Y5Qd% zp6hqjmq_Aky##NzjF5Q@0(@#^ zV9eHmXO^EcGKDwqNpT9nY66b==a6ajOH5^%nFKrI>_ z6Vg)DuTc#6f!&i5+%p?!-C!3QzQza?^g68*XZpIk&lx;%{W-CBd}5TOx?vfC;Q0Sh z>mZ%`!1w3!`NIE|>*?*~;d0I3M_Uk4%~OOQi^rx(EcJ+K9g{NXnh9&58ugQ6Q$c`i z-)yj{4-DpP4SeL@vP`T#=0UMi82qN9G}lD%b=)wNR02@62}E}FX}kBL zVg}biM;B)cjT-A8nP}sT>Qe<{njw_?J@U+p4Pg~=J2nYh$d%7tvZ3L{z_id+1cP5n z$a~5l)|li^@maW9m!xdAGRRV;4&Mr09+%{ZS1WKZYcXR2r1KJ=QKETuIuH(5Tyk#w zaOID^iI>(c8w62C>CTx(jO3_|O&G@DlSY^2Z2Ql_3v>BsV?ysz|u&w=ct zb3s;Sv+yTS__d@;A2P<^0e8LI``Z+Ex*^e8hIXL|2zn_2QpO4R${!s{G9)jV_#syZ zys&QjD;@oVOFQp^ujNk~6vF(gaKlH~RxY7Zx1JY11V|}p7NT#3jfTiZ!TVoz3pg)3 zARQMiIhfoM{rn78p_GufokwCEHF~BnR-sb%BQiO`=u5A+t3m@4BcwNCtlM=c!rV|$ zoLw<(cJ@UIQR_eBk;;Pk--3RwLVv{hsV^BvUcGt2gQO4KM`DtGq zc$DI0p?6)}-6qF_6TjeNM{3>mMPhOCBo!@@V%{jKwzUe$ZGrDO$K*(tyTW+}`Qqmh zrI93>xJU=n8A33=5shnD4>&gqfY3i|&$HxO_V8y!TbTT~$toev*6xMq#%o z3&B5@U~M>Kl`!8!ClVl2n=HY2p*vAWlBdaxzg{KVb3w0fS}!HE$ST>yt48Q4TNZzt zB>dStJdgkL^cT&uVFD$=(G4={(s(Lv^q>+U*R%#Clh9ssonDs;R+VO2)Ga>vFWX~C z4SXrCUH>VPN7S#m2Q6YKYNMY)%_@5+IrX6&xy`az|IhZgeB|&7QZV-NW8~;B+vDfQ zm(4o{*`xUiS^_0r9Q_rNc@a!RfBrYG%C}}nd&7ou@fhj8U|fG4 z_WQ559uhom3R7T3YOOzoJjDIVK z^Y=!)IF5I#(D-~DK+0LHu}==JAV*LE_QkR4l@Ktm)0^Ci7!1|528SM|L*&VHPUE7; z2tWQ=b>GkrW!@3CPh(5_;88nPdp9LJZobY+7|w_<5jSd7%B{j^!PIf8E3+>lr^c!? zf!3%MEx3A4=1fbt3C_&^4rUJU9TAbb=qhn7WZL z<6|gM3Y#eF=kL21TDmAS^a1PKcJG3H_regeG9*PYi#Bbtf20)9aa27kToM_F|$#kcZ*GF|HGCA&&UU7fDp6k z4(7WWhvCdg?W#Z@BcUTPAnF2HqFeo>_2b^)yNbtRbIWpvb_{yoa$m1{m)aAVQYB`z zh`G+s_YQ^nMhPJ1A$DPyZM>DNETF%VhTPZ zNepafDCbCkTf7O}<-+71wTL$y{H)hI{~&A8*Mg>+Hz_KbeufL!kl*wv@bd+qf{|$E zHDrRozKm>?ouHh?{jyLnk}o3F$sEC%Kf!w{+KgZi3VdO3`ww9Uha-4?6twh<+_Ffy zLdV~eszKPN>!O>;L?trM#B$LcZG1i#V+L}kulPJPwAw+<8P(C<>|4R>hE|31D(ZhK zG6`_`e~n-wPh_(SWYSJS0IU`Ql*)}(`doud={qXfxSz`adUD>|>m>@ydYSq2%M@;a zK&MlY8;>@rBZ%wE)!Wgz+=GM6g_(BXg>wUV7(rS$2sd|DmJ7_A7&6j%&QfAqq&dC9 zdcUwO)lWLcPWzs0sB(PcOWgLzV>%hP@u;x*o9Xf7fwb322U2+zTdQpWukz&|0Po?^meK8@E4uePb!71gy>TO%+}43jaEA6lm!LU8eoeuiD+&scroTHWno=;%PfS^y7QnL9=7>>}Ej=Q@%TdNM1hH_Rgft z%>eG*h)Zb|Ayz}DC3&H!=p6(-$+D7$%MQrRL~HVWk!uo{Rkvkv2V;=gObst)I*drV z(8FIcdsY#}$rMJMJl1&#xpz)`p)c*&k2(^J@`%Dw>-pfy8hyQjh92iXb&S8Y<^+w*>@M1xYHwbSP13>5L};1|w=A2*|P_Re~0SrBy`AFNMgs zzX*uCzY?C!k`>e5iHsJl^tclsO-!CRmG0IHal ztxDn@hIPoh<2UV?1e)QV^h9gu*FyTcdw2p}`*>e4thT8~cwY#7pHwa{jo!VLS`# z)8Lez8%e%;x7&@NNXON7mQ!(TG5mrXh1!?Me>{@tUd!^Kgj~VB&miN_GW6W%B~)q7FADo?pfDbcwTpx#>Yiyaz!__R6oWv zC`(mQC8)cRFvayD78U}OCF-rMIVljc0SO-}`m6z*59*y9VWb&(7MCwWWeojFR1 zK~=iJ*y>{zAdz5&y%=UJ#{pQ;D+;yt$1zM0>S?*WK}=wiDm#&~ z7EuCpN)ZCDVkL& z(`=IS`fegPG6bU)Y(zuuG?~@x=f9*QF!Hy(8_t0Yq?(%*i!bf->ngk_5>kps)}5uJEWv@{CbOiI1mD;p@7jfbeZfNGN?$P_H78$Jpc?MPZ?!0~9H! zFcfjv?WxTgtwoq0Bz@ZBHYs0#@2>oMFUkLCuXfj>4|07K{m|>y{NnZ63u*oS!~W|x z!gmo&Uk&cR{Zv)+=g>IyWqj&#&i~;(@S*<)lUI{%aKeSDX4K(Kx7-OwWe6kqx^-`_ z>mFts_9!O%^~JY}i^)iYSvL7muG_0m65)X{UC>7Qyfgc|x-31^otv`Y7#`#Z2wjGX zxUX$^X$1JX8V}fC`B5T$${qAgPF;$TBvn|)65b2AUC;HVkLGk^CIIC)$uBU#CV30? z6l#?IwwXUI`iSp~#dmdK)W)&{b2@z%ZHuK_;7u%mL1c-*1}7lGP9{T_z~$*_Epu1> z&EqD;6O62h1-MW`YVoRmcS?8dq1G3IL(iA1uaz4GSSOKkh#KI*Dx9 z2WQDwBLo~!NUMLUZMv+%H!1KdWIsdEhI2u7LRk<@Y7)1d6+f+wZns|)t)@QKZdQ|sq1 zX)qI`vEqC=uL*+eh5FM5#nQh=S~7is{{WEP=t&GLw~UXY!4(BD{)~?jpcwM);X5KdiX7o~sLfJb`y@)3IJ3BY-5|GJ8Z)b_li;s5UhyXk0$3fVl z@p^fh-1Gu!@M1xwvK}9ucqA{We+!~8@1^aO=-jPqOqIbJ3s=S0XN$l5+5enXKCW+x zIxoe&68~Y@?7#1ie$o*wX|j32${PA9c4aVglz9)smX`QQR+|Vtb}X%00evxGU0aDP>5D!$VqR;IvOP!`aOvq+kErPr=6yM#V+NBe!#8Ud8kU@9{ znMYi6JaAlbme5HCP&sZ&V88ng`^E8b`_C^ODpz;`nHcztubQSykR5-+8&6%m@wwrm za)gk=*bV4bm)V=4eUHL7?{&DqlO*<3`IC&P%u4#X&pETXDtqK=#oO!!`mA!tz}+xk z{B1=-gCAW(l8Wx4SLA9 z3%$jY_=8#xePkfaXkb?^b-tBX975Be2dq^ZhAX29%+sojKEYZ=NZ1$AM%e(kqX*RA zJsHxH?JVFW)X4SldAiZ)j{&iiI?c8NYBAngtQy>-<>bfTo@leFlST~^m>P_;hZF21 z)P9i{SECh9Bu*U{O-n;N6*HCVZcB?Rc{Npp$f0-RjoKd#<{6RDAIVAJ%eWdd0isbl z_#ME2L~21`^>KVB_r?po ztlu7ZT{33rWLpYC`r(phX1ZIL9b@{S9ai|S01H%Egvo;G4TUUiIJO6=LiTj%1Z zY&{=$2nJqdtp0E9ZfIWX8B%_#;0cGeE}CIl8*&x-SlBR9&=xmn8w}-{DB;azy-{x@ zu=>=tsj263Bs2Ci3VJ=`Bk+$E2huw4 z9h(%X_|Gr+zj$(HvL@rUh^n|jnRs=T$FDAFN)(CF3zY}UC#FmWegX+`!b;MnYfFT; z)8TYHC`%+w86v_UhGL4QUA2@i5I$t%Y%z6!b1Ah9cd$S3DWfYI$P`RmK;lS0V{;a| zsL%&Cl5!-bEzCFgw7+=j%?9MNZ3roac^`&mbPHMa8T-28T|T*n$_tH4&Go`DP-Uvf&AG8BP_ zG0g~gUE>?cMNs^16U78M%LUNUB`*}{$LN2O8bkP2BC=nCm0C=0#m*{=H$`_G?jVHK zeQ(o{^46Fi!FOd%8uT;(5@SW*H@SFYu(+DHmu!iB*{ybAH@Ybt?WIRQ8}ax=Ei9{l zY@xYL`IV-nvUuc$6d44`jQ210&<nR~oV3^7C z;Q0JO%Y!?7>IZP>&h4P zht8jRBvgO4?ARuMONoJ)Reif>GFmW%L>~68Kz1Jfd>QiZQm9aUi03UN9VGr!q&qw* z76|?2X3{$@iKye?%PJo0cLkHSA7l+ig&+bWPbe_@$WZ!)8!!V@w?V?5K-+GDzet@! zN&0lksxY8fPoyq$!7(EqLKR~yF38Wggrtt-hw9J}whP6GeiE(MHdfZo$4pshWoiP$ z*C42g{l_BoCaSQuwDHp}g`mM~0(9GjhXEF?zo!hIsx#*?v>%9wztyet<7wLh9jOSi z$s651Ed3$hWWXfndGBMuDP*$cSFTw%)@g)wi(OGjkm@35p+V$|psrt7E-~uNt56jd zb&6$Ss~Gv9vUj|=sH*C_tkZEtjDd^ zG6kC&ukN}dl0W@uoV9&W49lsWD*fZ4c&_O3>w_h035kuQBEq&b2gpxhs{y)YSC%KK z(Ir958IqUA(M=!~1m=cogT}@t&|;~K(DWP)vrHoHa(+QsSI4LQ$-!LO!HN!jR_1Iz z#n=ojDp}SBa;@B`#eDAf^88bZr{J6u`y!pa&gG#Lp2|~kbZJE8h2ZN^cfhWkN=kd5 z3OYFfFqcP=l$r``<#=qS#IQAoCB`OxjV}FFX1WyM5i4x1)}X>*3a8@o^Kz5<~ zLw!YsMPiYMD@S(4P`sMn(4ZksHqPUXTGxsR^}Jg+y2YR zF~y&_b0J+k-J9lc1x_Qe(s!aJ&gjw|qt57YhYmku!^@P^64R(v(nvbf-%ZI7LBJW~ z#jR?59_WmskL6PY6<=I-aYpi3ddWKAO!bw0Z0pJ_@(*n*0mv>7-(&Vld;xQKwm+0R zjdZN^etTS781^J`01j$(E8kQH%$JrA7`W2M_JYzFlrA^&zq}hLfp|F;F_Zb{(F;6m zY_?9%X5jBz9Lg`N7}kZYKx3yv)PLJg-oq^hQmircbkJ*!dnUfaOe(j86t8|t->`No;kMC}V8~PMaww+JuDm}>au?cJ zP8+U(uh&DZ10#MgsBVFeWBBT3g0^n1`r!(S59*sF4Qd8@@<$YaUi(NUbRk`@>o$x+ zvH5W({C7LI%Y}X4f|7fGxh!Q0M%9`F0mfen*!#EEtxXvtY5j=+(|Djj4*ilxKUIdW z_&R-3jX$`kqTNj~eC}(0ujlXj_ET?e1HK|LX?78o_?-J+Q`n`9A4;8FYU~t>j;MRy z)AD~-SG$TWe;m1OwDDO^Ix!vbs$Y`}m%YUO(s1EKxxI1l{^zxrOs8i@qmRBL*_;cZ zg2sl&LF%yWl5`fpnMD}aiPl>dizSq`VWi2y6Aj9Xhghp>0|Fb5qu z2Tn`fp4STh#c^LCL;H*@c(YB&(6)p^PhMHquPT`OA;8ZM~u64AB{gZW>ItN)C`q| zll;ugkiwk7Wq4jnREs5PUI7+kqQ~SgXpzAA9IWYDxyc6n9oe7vgBxuj;;dU2k0O zKl{LJkQUrv4umMhjUNJ8EpCsS%NAS&vbdPiuNPdoti0tj6#VOeWBr=?pUhpkjJpBp zaC?CSw`U)i)xDMY6kH;2;Ojf7V;$Ay)#)lFuK-P^uR;zmQgJAOUGMZ@owPm=d{%Vz1>=&n_Ac^Tf6rMNWu-MNPL@@>?w2`UzT z9n_~>4}bi#G?Si59w+ZVVXEc}P|4LqRz8ADlvYAN)k;{2eJ&30N24Dpd!LSb@1Pu2 zCaeVlJz`1ABV^AH?xiFf#J}}9(-UQXy}(;?lhVkiEx$6H0m7>?VB`xklKOcv55gco znbn;#WFo-3ZYM+TXuiKPdVrPI~zOY=02$M*Mtt*SLN`^%$kGu5_~aVxhHjoygLl@Pd6NSGT4m zWILiA%R-!!J6ev~X7%E>)h!>#N!M=h=8Ne(KM z4S62JNa^l${Bqoo8WF6L{lzDZ-NPSzdy7ScAAVq*m@O#!va)$EHNU<0j=IFA)p9c> z<7P3zl~=@l?kw5wO64%*?ht|Qo(+QV&4}WNqDiM0uSmu@e^6z0(Ud=(3j!qP|0+B4 zK&#eP(HbEoTsm-TAEC7T?XhOU*{=wB%??YU!dW3LXSqTahMXUq_RIs-yHa0fzyj?- zO1}-~Go2M{*Z|WYc_0eq34nrIB>Z6~n;DZ8k3~0OgYtVC6_1k1VT;?BX~8>3hJ@mR zG>rL5d{C;eQ^J8wqB$V1Gx#$(qQIrMbjvFfq+O}+cKERJ7_S^ZSx%Iiyu{a_w0j_OqY=9=;YGy!0PbyzI>5p z8GUXtoRt?=ez6|L>f8%s-d>iFNr6TdrXDS_zKzkUL%8uXYmH)AtBgdOiSjo_?f1$~ zJ~@*@)Uq(3T(X1H#7=Bk5u|w~%*MFWl<83&2G^XQdLimL6F+oP{_rJ|w?XdxWzwh3 z{UhddURe?K*|NUF_3M!(Pe|wJo@Q`MiT|z24Brp-sMdZtKz$9CQxc zlv?>MDyPD8)r>+IfTTU$frjYf5bd-Sv78_Ne#|-3+y^66J-iYT1RYDb1VwClz=jDW zXQN1r<@a4iC5;EKn?ubt|F`dck2)T2Ze>gIT(1J!ffDqPcx!d343zX563%Az007T0 zj9KDcMW~R$^bQzuMy5I>Z^;oxrzVyWK!(Kzop-dOqVw`985 z;%J}tJgayHtYuszZtVQA;IHV<=DQL~i!?T~ z313mh&9nk1Vv?5xNmp=>7QO{|J_j2ncG|8aj8(DlFp?jc+&rYh*{FT;p^0@@xwmkZ zun9YJ!s4C(qFwe>_;gYizBWrk#b>il%?kZw!OxfU(wH;2el)ij8Vk*81Lw@iN>)!Q zDl#g8g2;xqu-f^ywz;1-vsHPppkW)MBF+lX0)%e6vTPB5H(9L54}-&WDo5dCKitgE z6(>U|e#^iFFU@PN9O~rwK#S$iB>nqR>*i!;j>JX|$WiK7#|u{%>=@0R)2nIUWZm*Ixw9zvail$^CCR zzoqim-=4q6@$hi|bFM%fJZ%3Q4+LTZ{--%`aWb;9F>^xV<3nOqvGOqc>$zf8wzqd7 hfBO>T%18nNNX{-sPA>m?>Oh=eHXsr;wYY-B{{cJ28%x{BWvxq^ro9TPn(5)%m{iM5^?4-bQ~i;W?J zur5T`!rGWYLD$&Oo`e~;Qjw3((8>Uo1nJ?~-z5Db34^e;gB65?jX~Pfz+Quy@nHiJ z=0CP0VP^f)Gxk5tI3H$Of6a{r_VjOZ`zWtxW~dKgP;$_NJQPII5>^5Rkf{O0goK%q zkwL=H)Yt?wSNwtv{?f4bjf+6FzZo1^3pq{h z6VJY<^ZL2p9w$uli7^L##z0Z4Zq_FdOPXOVu(`>`(8XiL5;U=7^J{Hp2EpYwvsb`I z+cI?a=rWzge64w5d)p(p(t#5@e{VOA>tu4LdgZ7lt=I!1GwAp=!@$FQXJB$-X})WF zef_AfgIU9sGS}l+Tz@vN`5HXv1+_j59iLcI$T%`>?vLPC{n_sLk|`(4P)EY^NLiBn zGHz$)eZ%#~@QynLWeWSJ_L`+Hs;U^#d&wbTp&QvHXn}CWzHQ9Jd~_ue8Z$o~cw>XF z?8ieb<(TX*J62jwFcT5a8a-a&)-+VnzmDo+&>oQDB}BvXlXKXeZH)~bD2hpxppZVt zYf`XK?S*h^)?8bBdOkdN&lB8XWqH5}ZXCjBFneXwVAqYG0{ai107_u@xQjMW^T$yy zDc-~D|AjBn2=7w7NG_Y&UNbn!Br0DL3s)!QEEv z(cx&Tl!3W1W$+o3u8kvF^R_DFS!r~Kpb_QRsKsfpkUiRcY{6I03 zWAwD2;WstD6ci3uZ3&0m{i;G^1O0HDWAR&q&+}uKoTfa6Pzu%ygcD4{`2}_y2mTCh z>cef&)^X72;tsy!vNxquOW|nXUVtxy{Q>OAddz(jAT`R$nY+UHQuV&FlW4NGH zYeF{gYbxNC#)_T$p4d@B^OkXLF3Wd$rL4m@59>vr^h&nSUjHPmmGW#X+e+usXb?*B ztR%=cEx6`+4yBp(>@U3=-ln5ZBu^oiXl98@a4D@u-n+HmZ$=5P-u ztJ0piiJvY*6w(CQouyT9y1#ZiE5?E+Pe@e*&+oiOfr{w3er9E@9_D3InVl|%Yly%S z^Y)0(-M2RfXG%|BxkJjH*Nu&CtFu-$z6xF8E?Q0Gy(7j&{b^xPg~#yHsuw-g+RT%c=Npe-x$$ggg>&qj#&ojrwHJgmWqVvF z0wDvVoBc6lbOq;7MJxJlIV*F-qQVG0u0e0$$8Q{3*DfcgryZPQ16274&LyB9isLfL zpdTEe16K#Cl}9?!r4<_5B2^5rKOS$N z_(tMVujz3=I^$APF1f*=^V`NHJEC()e06B%_`7n!CVwEYQqjMkHh=THoYxXOV6#_u z)s_{*ASBtjn$zz6^%NFy6D_*m8rYyEJ8J^c)fP>>8RxXkPwGFps>SQWPQ_C(iHOkU zBdx|Ig|hP3%-}<$Z=xA?W9zXm)RPo#cl7V8V;B{4MeGEsJs@B~{z+|g{Db~yb-5p| zGD7dNl?D}!j9O`bU9J^g9T+)P2CAn{P7$1TRJe4M;Lp2{>i358-IRAaZlG;lR}J3N z+=5;5PkKd^rE&URlztC0ZN++VotH}<9Z}J%eVuEpgnPYzg5-loVS~?*J3#Bm@B@1S zgV29^I!&3>`jz+>-GO5oy#*zcO7Nb{7cM!@KK$KKO5R>=ON-H>AzuF#;szl z?5@JbqdvM}y4T<$=aenJ;4dHn-9BL@&r_CFv30`Rc~3aj$X?>gzE@KPj5$g1h|pYZ z`km(I$Yj2%Mp#=%Qp9Pb*0kOOJhi92fiwzdZWOuCj5gkjb=_B&kfMSuyH=9Rk5SPfJQBtC7_e8LCW(r z^XJ&9YVHN7ACJ|g(KWPMoL;A&N{53kP_8*mJmZ{fnFXo_S&GE6EPfXmIaHljc@Ae2D9=sGcvLu zyjJ5Erd2#Jc#n{2?^kqa##G*mJ6Q7J&9sad2Nw=KIW)>`r{rjPqAQM#I7QZ$3^Tg^ zxHr-_F2gI8)Y-#80(Yoq>a;&uB%tA{=>vzh@_Vcy3j9+>t@hOJ7yO9s8CaF=G|_^3y89i>W`_L;@|x* z$;a5z&*;{%(}xmKZ|1tD9E+`freFSGN>M(iZ z#ORp3Nu@3vwZA%OFEb|EwOmrPWMdYlYu)H=i!MXtZMF+y*sCagp}P}}2t8bqDI7j{ zvO5Xwys$o^GM#N8&7p0yjtBkdRNeio`-_%Kcge_KnY67=Wb{WN`th-@sAI_fyhE(g z&acC^%t+XE5Oxtfxa-&x*xB2SmCx_WZACEJIK3G%-WV&h;rWHi%^Q zrrD*}2)G_RV19BGH1CO;D9`=fxMH90b!oxNda+14^Q1;SsOFi^d=eel|9qeDP#PQt z;`@!9q%qxJ#2b4|&*R;wnnDLI%d0Xd44N0``=D^FCVI9tDs|&4dpVYPOcNJT6uRO} zo}qb;N!?$NyQ}UU?jGGTqelT2+`-7(wK#lLZAi`VxXfJp+)3_!qqF&R(n0j+kyJp5 z+#3%y`{03osemZuE~(6If^jtML}#4vF6t9)=;ApO8JtYHguARG=STXD7a!YBrhkS+ z4Zt?s8e}LGYGC{rdDlg)#-8Myvx^M-hOP-jgZJ9iFx4qi^Yq3gq$?vzdmKhU4zg10 zU9|AKzYF=XW48!f(|+Z&r)~Jb@7W_sZ>Zd}>e~f0=xcrN>l>Lmm#=1gfq3(JqOQQe z_wLFLY2jJ_si9%>$yjViYjh-)RcXN zYYt~$^V7mS?O$n2@sGZv{Qdj_&8g{vKe*4=)4XcDce`*U7VX@f`;@>#gEVrYmF+Sk z9r1&6M_P^an;tO)w>q{^`-ENP{FGDshS4&8&fC5;PCaz?%e?QC)_AOi>T!JN^fq~0 zPjbRWY-$+Y^<)s`htI!iQSH)(HzQ3Ql zr!33Gjam#IvcIvjb&c0#+}X73dqLv<7itvZ8#gxmTlmjU5dQh&747R} z?TI-gY^6>jSepg+vu*-2#pcr|?te?P#*#*Y(9sGGglDr1>Q|EDBrr6+C z7KHhve!U;e2;LV-pfu>049pEei(k%$#E3J3B>1yd#II|`V{NK8KbU@3*Eq(-4j#R# zfz^2}C0bcNw>L_g*hWh;9PqssVC#$rUr{+A9`xQ9mw+LcE0K6bJL)_!Zd1 z9FbFlu1(HwfeW}EJ_{HOC8E_gP@Z4VqAUkisf)yOL2#3uzW*AIf3$=h_)D19ySXC* z+YE=glaJ&k?~Z~R!i7RVFcWh*Ar8c!q!-WEd+1*^<@0FaVqI3$2o>ZVo_XJUYI$`* z7!bY2v&cQ2n@Do-!|S&8V}#X9KjAPyuuZKzG)WLAZU>(`QC4f#gM=nYqZcS~FWe0e zsD5QDc7M5ffg*WqB;Z0bdrp9yAmealQ^$a3OHI@!<=l^fnX(4$Io_6W85fTa@_b2v zOfXyZz?w_6i8E$zz zP03^^b02mhmy~=4HZeP=r<%_z>D+L}1i#;QAiSkF%*rs$4Hi1hJgfI!jZoE&{hFM8 zU)202t+aux)*FucTZ~P4KEWcMua;BzBH#M}&|zph)-q0#mtVcM%mu+(!#?%?LeJ(Tny=@AMFT4_E zTdmG=`-yo}md46S5En`kuBxXL1Tc_*Ie* zMahw)dUmBK0);WJ<(AQ&YW9d(*^>-R34Kl{)~=&T`{Yh4zou#@bhlEwZxiyC=ymq- z=M6?}BJp?7O*^J*j~>hUZo%6W0mZLED>y~`RXJ~O44se!T|`gVu8W!CdWr-X1Y`Ba zj|3XNmUW)fco5ctzJMlClp`yzRz3L@c4Wx2aF!jAaI(W)&B7$VMoASxNM0!&tJvn# z_GZ5kU@O?$4Hyj1?Lj0vb-Ym8>~HlmaB--E49U`J@V)Rg zSakXPXu6n>BE`Z_2&8QHY#HYau?~BtX`wIyVPr{RkeY?5t77@vVbCu1l=vC1hg1&^ zSZK+PIEqEsgO6-&`seK1R8NN{0Z)mz&%2-E35JX9`LI5N;;zB(pxw6&$<4DXIOgd| z&g1$Y@p2->n4#_yuS{w@$O=-yywJq$f*TB%9iNIwhbV!aukE^h-QDd3(V`iLL05uD z#j8)t5ghUiSksgAE_PiBFOz+rveZJYqjBW5hp~Uh6Eujpw=p1LK#hvlaE^jh8f6-o zi>r4UuJWpv+r0t_%D1eC)v~e@g~mQhc}^X`TRI zaGSC`dq1vNU=d*?X;wm;buh@l0&Refic90X(TLi2q@DH@WhUnWt@iwC8Wd}cygSf< zThid&&}kI?#CJ<&0u@&O_IrjxuZkeR(K{1^4sCa>DTgDS;Qa`W%=+bSt=8{_M?@$} zA540lDXJj(a$(JWw7<4V*WIzAwK#7GWpb!6c|%l{!pul+VL<+6uEP?$EiP#9>~APLS&q3EGZ=aH7(-$z?teGZ@2#sHu;F zUihVz^D*#P1Wyl(Tj!xKwb8op_uXrz4;HRAH5R;`;kt!g50+x5h<|$9=EeImeBFp? zJj*@h3$zX`P+<5i;`wEc@~)wkC+7s|2i34Nn#+==p<7EjNRj~@vK$a*fu+u7s10jc z(Bto;MPt6ctqx7C7eCl!-4}M3t?NV(j;Mj}RS_Bm^*vw>EvA!PEALuPuD(`hZ1s826Zb1QCM- z67jU+r<0?AZ_6~-7#WT0&;}HlHu7qLF9s!=xN@}Kb*Pqrqi?6V96xk_Z*QN!g~vhW zI|3p$lft5%oy{RaF-xhNz2p{Lu&*%5W_{TcR`Y8F4JYTJ$NJj*i$do~?lh9@K|MER zU#!;-7kpw)!s&5wSgVDqv6(y$HC4wmnp&&;9fWa9JY8E_1fTUkPS7cp_h-5^9H5&= z!s5;wUY(u?|6K(qaBk`Tu>@NEBP3W8_n(`A|J>O9(02WAG*81?s{gg-X{LYDJk7z% z#`vF_rx75pCu7IcET>~+%iS8dzBo-ba?7O{ghx*)?s8g1&5`%T(W&`2ULdKKI(@*d zM=B61<0$oR#CrSj$Fmo3+=8W_v#07y<6j~^evI;b6gQal;>K4P?XLfx#s1#y;`UkO z=O^$;*i;G`0^a|)(CYgoF-Ie~kcC?d83`Sq^LAQ|R~4CdgTs_t-=jb7>8{Y;S1}zSOncv!;3Zuwj=s)Rm6Kel6W#VrFLMC0jnlo!h*u zllT?$gFkWHoV{tda_sDDX<%7tDI+H*=X+*8X4bTJmch-jzMX36y-}&v^kw<=J;)x_ zu8NGD91@(*(o$xQ?FaTDj-(6Q$WLjr;(fbJp?jQzM71?zIN7C?Oz+>*U?T+v25xkU zpz^}wY4Fn!L5$ATHqNJ)SxQ!tzdoMq!1;#k(@IfVQ}djX^W8JerKv+@<-VR(B8M6w zqjXe7D}K7N6V}y<)6ro$P+V(T%js#w6k>_4iL;4=P`k;=bMssC=?sJx+P60Ea-?~S zH8v*PyW}S0TNi#zO(nF0=k5LdH#n_7Yh{MAR*u#|qTUao4X__TVySl>i(rq$f=p6G zsF-*sg*aX-m$?3ASJ1PG546>bVI#%q-TZV31@l`$N>k$r>FM$8s(!TC^SC)xb(ic- z>RhYIW5#sS#YAl)cLjn$>e$`3&_G>6qb`vF55xURDC2c8`L9ch%&xA?A39n@9!lc!_fb z0sL{G4W}zrs$H`Ffq|aah4mjYr*N(&n^qPty>NtxT|my0W@jUcbw8!y77CpluZ*a6 z@llZAJQ^EUR#uK1d}te3NPEpLDvPdMMm~LSaBVg&H_7oOVvh}fdpzKDWkt1%Yonnt z&Bk_ndz&$_xtWhrnQL8qisZtMb8nw|5nFShHDR!Jss?)Axbl0OB8PvBdS;S2uJX3} z5vZxO)MjJQgCl&eN9w6yd^eMV#0+S*#&`no!MeN#!;(8gk&19I8YRlW_xRulW9 z+h_1K_T?LSnyE6M$KsPo+G8~7jC9upPj?EY*DO=pP!#>21v=Ncg@lDH9F*5+mQ?1b z2x;Ej(wji_9gUuan627GY@3;DXsBmY>ePsdiDhf)lJd8f?xwT2^&4C*MA8Jhw#IyawwX^mL z{;l}L_Zk1|sWy)4J=`CKKR($HhRMBYdvj4=6t|9xCA^aGnq%KdaPiHd`ap>6cV?FA z@57{-rMY$Lt%bR{6o*Iw!IKMU#cUL~Cw{aj=A1?Vx1R&I0jC@fl4z zMbE(_=3r*p>)JOvwY6(s_G;mSK)oOON_gG2A&PpVj<`s*O<|ym7y09JKi^_JZ|Adp zSyGyPQZ6>q1lL6IlUoAbvBeRdt%>gZ69Z;8S(Nkulnv>e{8+YX1D6U+jez3cR6_KI z&Vw6yZ)-p9+;Y%o2CXQB30xWWNj+s0Tu zswK_+WXZPV7X;V=1D>Fs!J9wdb1HZZM@bWr5`+DU2-A-A@@m}NAKo7et9(B;1XOz8 z&Cg=*w9Go^>Zm%g794L=IhBwcixbPNhzlAV>I-jrfrE+bxiWL6X+)17BcpcQu)V$A zt7D)U8q|dC!nA%Bs!5@ASG2#sA99M~PE$L5UUl9dBD0jCV3+MX=}n7{^z4flB_*Y_ zv=m0r@r+9p&+|e%`-I7_(658}T-{?cqcp!A-7Qc?K)Qn7Iklp515+cBkxdH=a(vpH zocY-li^wyxGd~EJ!IJJ|fn%kN@AS?V6=)ZnvTjAjBZxzy96G#&WqYE7B+gajlj82& zhLq1HXr8rRUtblZe_&x^Jw7^rX1{A;F_iM&(pb6>S{Oel*-7gJ;*fPf-4wnF<DbsP|9c3hRzZhA;qTL|@V>rYa&dt>dA^(c zh9ZmNxj0;71j^9wX2eAA-)*f47`>LJtzH+TA?vBbX$Wda)9qC@G=69u+(}VZS2r^=`ouUd1%#oFdUj@ss>S13s5Edw z8WiKvq|Mi z3Fhb{8Xne={Z$@rZVly+mwS_xU+J~C_O?XZL*K}T%0BkIt5cupk?iSK`vA7xZkOaI zUSzkL?LS57o*0{diu_2*&CPWQyN3-CoRgdV%i3Drx^m3;C{EX`(<)RpME=m32Rq2j z&BggEc8?lkay|=R?3|sedQwxEm6m1d>hpfQ?(lQ?FNMXKrk1Au31|}qh4z-`&+7v$ zGYSLipB?G+Dj2(er6^75Mj;|Yf2Sd6MRd8f`pbE3bS1|u9i>X2FN`eg-dfwc%8a+U zSy^qJy)!L?M4q9XLY=f2PrH@|hb5Mf4N9J(efpa5II!)p*DnzRW*J$zXYgrVwK}P* zB+iDqW@u=dweHj1KT4%b0+f`L@CFf<3d={Cds^sDdi&e4#p&VTGrhZ?e;WRUq5rfE zpDW-;?Zx@IkdQ=}^7n7L?Ju`b$aB1!f4qLIo3W$3q@wgDuh}K(1F=cxRiypdNv~w3 z5!5XG!qjD*BW~z7C3sP}_y@uziK+^YT0nmYO6d1(E-tR9dWCM<=R{MewD!oYR6S2+ zU#ATY1_a>cF+ODpMC8lP$(0KG1Twj1)T^3cXC9RE;W46L$bzKb#JQ}Q9ALb}*xXv@ zV`{Q`{BXZSB@gO{$?{W9{j4QR?ttgi=V z;%0kQ5+3irY@(oNm$QRw5E8VJlmcVbJa&VpqvI-P0~>mS9MKd!40Cdr6G?Rj(~-V=MMZd?c^F43q`lXJm$5=Um#7jlD%)mr;RpR|Zb z-I6R=OS5d9x*a05zJ!Lq6Xp)d`%-`cwUH%Pemf|XmM?o86q!apMEl00Etx~FTTW6= zW^`i)#tjaSVb7%>B>zLxa%=J1o2K?5vBKtnP`X%YaEnk-w(Ts#eHY3hBj+i=f9!n{$zh4!xN_L@t41ms z^##_8BSu=f9s~ ztT{DAZ1;QDG8rmBlYNoOcVD@bj*KsVv9F5u8;N9tDuR zCFS-X`{8|2oj2`)2gd9k8em~(L_$T2Bq%5-7#SOxU;m9l#Twm`Ur_Q4`h)(^T^MZp z+NC&jkB<$ZNbR1yjW)b9Pq6qRHSA{KT-rxj#C7_YJo{vdN&&jWi(ebzoLZ9iu_(B> zxP$O;!-T0$bWoaJ+Fx^6%UIoVwKja8jr4a`e_hVIkYgihrEC$E>|?DsWpz))slH^A zP-WKj;(zp>oSb6az&J~`1=E+ErqsOH_tdPo$wIl?wI%#wDsi(qI}|6<)A$%~07DbcMql__uVW_`>KA3sL<`Wn7D>kT>AD_b}gN=j~8WG?|K zvffAa>Kf|Z&f~KX?&`ZB_#I=f^tWxUE#J3HuaDywEAN*HXP8VCNgIuh&N=Sz3!PL| zig4OL#RX7kK2@&^5l%@+_you6u$+C$Nbe)^d7&akc`Kzp5ais^w7|!RkFhZ-wlcA4 zV&L4q6}`A@x>DBHdxR=}3-mP6H z(w0Nv1>Xe^Q#EI`t^a;zP5#vAoX~AiQgX2Q?m#lvG}o&Tl*6vk{+r!`vByoGCJ9mf z`QH-D5G|f8q_%rMdj_|x>*(YVjng8b?{2@#IVBqR_}wUH7SStQQmu%Y0+x8PSW{6R zCOWpzVPw)#gq`he0d@&-YxE(%n#r?v)2Z)j_2iSGOu6WHYVA(kBU&mXIiOR^bouTwjNBP@QvNo5OwMT_CY&)+h~xI zb3nwHjZ3Ms1e)VHtoDg^ijJ{}i;X=swws)@T+`YrloYy~O=4PMJ8J{~{8pJbZm76IjMHH_PxdHi%mp? zpG=+C)^d$M?b++v?wwJ6$(Y&5+o-fGn12wKxV7bd=c$QBXJV_nGH{Ohs)fP2OILwQM13Kz&o4rJ^6e5>**BcONxtzeI3 zM|W4bqe}*Vgcqn&0+CTsQ45wAo~h)M>w;7~mB5BR;gS@m7di$8Z+YoZ6{SSM^RZwqc>ig`jh#hS+IyVtlafY@>e#o9+4tht zFRN3Vq>;Ek9Ut2TD2vAh70~3-l?x42ZE1(6ao@zP+4^Ub|J?3HKN2m-sa7F=++eDaeKz#;4hMc-+NDsM?N? z%Y!2CzP+TGFn0P{RDtcCxlMyy@HW1qU;na-M?c|qS-ZGdk!t<|78DVl5DV9_WIP8a zr@#Qe7dzND9=DrvgAzI9<A1^YqL@oY&_?#~t9amOX4iyaz7Y`>HKe=7Ane-*bC+qfKH40Qe$0iD(i#ju2 z3cr5a-#t$DfYf881O#Naw+|!~X{yS(DJK?a^)(YAzrW1Qu~2?44R7m^qhl}KXw})i zxwA>F*$#)NZ=@GA`PSpmOqul!9U()X0I2!n2q$y5X+|Msvuj7}zE4F%c1CbhK^f*x zvX3H!`+G9Y*C^dKc!Ezi9W2_A;YzP7QUE)G^s<#I(L9t2D5#pah8 zg|%Ny-8AZ>c--J^)=0*48+75nQ|BChTdsvZFCAw2zh^eJW;Ob3}Zg|oTSEhXBCqe51l>Aqke-CcGV*V zDQBzNT8V;*STfcOZ;Lh-%HPw|mFX1yf@2d7VOM#~fd_hJ{}!FcW(zSwEin;xyGZ?Z zM;}ZI5N?pw!e_x&JW&Y<<8+$C4-&+^3TUgE#cj4sK zYy;SB3?lRqF~h-S4X1zNQiSP5RflM{`TKLS;TnwB%Z3GF#Wzw$_96rEMn&mFcDI_Y z$K#||c=G1W_@I(qhrW#O-?8>w+eXe&o;{TUA6uK*1^Fk|9(#}kBLzRXxgoz_H`w@5 zVEK_4cBO;F{}|poG|ae7`MH1$w`|q9OuH7ZH(6Rt_b$h}xS@z32pKzSNK;iYXoF2VyJ^`8hIL*iHGNHkKjlueqnKB;|jHg_;4Paix16Ru6T~s zzt}15!;?3=WsktDD-c3HM&7kFO|#m!g5Wvff&39^Iy!n@>BbvKp+MYX<~j+PA3?MA zX+@GCl*XE}l7g4L3lsFTC;Nj-8IR?tY2L*&JAcxCB$I!PBv95i(bJEB6->pDn9{yL zG3utvt5d_v)Y9MMy`;XQNMa1q1>4$M8QP3_@~*FVRjTcDyx(*`h1F{o%DH)%Yik>! zA8?hK7Jk9btZxymg86e&KR}dYPAzo(BbIP1K)E$a!9_7{{_}A%W-l4^K;i|XyyqNW97} zGesePPEV?@-Je%+s#+KO zlsrr3SX&JIFgHeB3cx`Ro|l1 zWVpjx%aD+f6r-b+loWNE_E9%i<5{>OQ`%fz!kaSA;;a%n;(|Yi2Y;_BRkSTl_<`$8 z{=!;-rjg!Rm})6jVs0R~We>!9esj_R{v! zwAjt*4(_#H)qS|8MJRNy+0pj)^_9QY`|eXT&HsM)KCg~_G^h95qoG%d?Ja}gaug~2 zS}qwnhk?48=I}XDtuIjv#PXz4(i3Oen7>$UYzhvCOQ&B=mkdr%s}28X{i#`A^s>Qc zKzEXA9Y;Y$EvF#YmWkO;L`vlB?5qX1g|T(x>i1<-F?VoiE#fl#GX>l7h(eDmdTTrJDN;ozl!Si0>0HH^aWsyL|YdWh}2gYw7y( z^41cg!s9|*48%3VwdW~?YDGP6>u5L%t%a3xAaUchY>%3lF)Z_tcqToo*5nOw2Z#tjNzf^q~s)!3m+vW&;DO^K>kCQ zWWYTFSz@~1KX%@-{d=9a|FSJ&{wJNcfGq-S(f?6y1lS_L76G;hutk6^0&EdrivU{$ z*do9d0k#ORMSv{=Y!P6K09ypuBES{_w&?#xTlDaQSpOBah~=L&PXo3Hutk6^0&Edr zivU{$*do9d0k#ORMSv{=Y!P6K09ypuBES{_wg|9AfGq-S5nzh|TLjo5z!m|v2(U$f zEdp%O|9D%(@$Yrs{>!$A^`CU!0=5XSMSv{=#w`NIEwTs3Eds_Z0>&)@#w`NIEds_Z z0>&)@#x450U-*A`3XEF>j9UbZTLg?-1dLk*j9UbZTLg?-^xt~iBF=xWdHP=-w}|bZ zG*1Jz2(U$fEdp#2V2c1-1lS_L76G;hutk6^0&EdrivU{$*do9d0k#ORMSv{=Y!P6K z09ypuBES{_wg|9AfGq-S(f@c`#P#oW-u}zBi2a{*-U7A=utk6^0&EdrivU~n6|hBs zEdp#2V2c1-1lS_L76G;h@u2sS04@S>5rB&TTm;}E02cwc2*5@E<8cua)4$hy`!DMv&VSN-3+N(1 z7Xi8m&_#eQ0(23ei@<;`0(23eivV2&=psND0lEm#MV{q9zitbPjcE4~Rc7(89B~Hu z0J;d!MSv~>bP=G70A2LoTNg3^d+pQzvM%EKC+*XKE&_BBpo;)q1n43_7Xi8m&_#eQ z0(23eivV2&=psND0lEm#MSv~>bP=G709^#=B0v`bx(LukfGz@b5ul3zT?FVNmjC_U zTP8LJ2}4t369@?tJA<&bg|(fMjjp~SgNUJ{slK72xDbPoDa2mE&`#Le(#G1#&3`yzO{iN!=Ijzuybrp5T7MP(Sj_EPt6n;sxVSz$gRLZiP3Ko9?Mo$*?RM5BN}yC>l@tNp94WsB zgVM>^^^^I#+siwO)2pMJ*;M^J39(2niOBaV$$X#`e#JyyiAXNk7NMr#Wg-P@#wstaE>3?RuOBU4-CRwskJ}XLsHMTO;!#N8(an-> znW^(Ghrluy4&_jelZ2&*eQ&V0-96uKo~Nmr!v7(GM=Fv_HATQETWM-z9F{;UT}mm5 zkN*psO1weM>}eN=9*MXNd$>d0bqb@1E>B7Fp?Ji;72b@dvTX zM@uNgh`~O1v2YIIPg9^b#|e}Sl>EN_{gCzzteCT#vz9rgA5$c>v&6KsMYXa-bo0d3(?s>sH41w2 zVF|Bc2_F*UZy)bK`=K5sZt6)YDhcvt*+xk}k|x$BV3}OrBNtkeEOa4;|M`ewW9Rzo5%tkuG-^m5OAx#3p8U$Z-ttU`gvpFIBJC{y z$bd)Ubo8k!hK8wkMNCzNzbc&{F`L*Ma+RMLKS`uQW8v7q7%!fF9ZgN-I5F~=?c_|{ zwJJ})Sm$0m7*n5}_g6gN*pr8EbR|p&PZWM|E3_cCFpZhNulv4f`TeQeo09cbvXzZD zR%xd}OvDCHIf+LGD(F1#1E-t7!9tx~%k*(JCovi!*CZS9T>RN6i5z>?wi-9K3hL(*(SfFHw>9RD?dfO?q+>>tj;lvVgQoN2QELru zb7x$J`Y?SmAupPFo!&)!Dt@ne4OgIEOKOgHnGlaRWV#cfsYq* zpJ&7V7CG0Q`B6B6NN-objhP2#&ah(so*`Urta2Yy3SZ_v@faMQtO-i%4uMRWIDEGgp31Grpo7<)huwlN4TUm7~HUOs6H)LPfj+_eHbF(NB=_;QNIj!uuM# zV;B+6p3K zXs>T)Y6G#hV|aM_M{P#X&Q#aposhMK0R!y3Yiv)#0t;5yN+BU@XAL@54lWWp4h~il zCRSEP5++7Qb}c@>zg!nM{&5csN)CDu7aKzcWjhB$<%fkob|S{eAf#(=_>eEd-|SG- z3RY_}wK8S^nOX^2*_;0LxtOV)Jw(_<*Y2S-GP-|WW@2WBr8Iz;*lRFzaFRSsENpBf zY;5d*Oq`rtB<$=QBurdPBrGf}f0|&gv2n8gDJ|@^zijuHZT`RJe@zd|;~}3vCfNR% z7@64q*xADlIhdLMm>!ndVZxmQR4|*cY$(A929>k8$uHssAq0{^cP1yWvRx z2%-O%AY=NwAY=GzJpFIR7dsaaU;p*-1&d|a0m{z!$Nb>{d-#R_|9}4;qWM1^A%8g{ zV0(Fp@`rUCEFAwB*$<)oACb-ccVi7G=o%X`DCpWf+zdYap|B!@tf7Ia?!%e#Atf6Z z8$B}zEPGB?CVJS}h*Jwz1-62~QrnX-Km728B7>r#y|sg#zM(x2&mRZI!why_eK?aU zGKew3&Rq{ne0&Ta<@L-A^&znJlCTfvkJXY)BoChrZ0*D2&nMwO@`csXA2KqvfEdEg z?EhGMX5!>x|C{P_s=9^~KGzG+4bbKY7p2wCM72w>e)&;J>d}tkUCYtAd$DWQA5 zzIkadD=U&K**?ZOJ>NYOx<}9Q`nllfTT3tEU{s$r=&4TK^w}l!@f(Jx_~fP(h@s3= zPwx*?jw|65$a4_LHPK7NNem3$Hx;7CFiMJzJ;r;t%maTm%K9Rub$NB!wDu#_ce3j7 z3U*|};5t{9s{p)UPVxPU6Ai>+vAlq7J57WcO|?S4nEamqI<gOQv$y6qBTglM zGKprl8jNK9XFmdGo;YOoDow$2lWZj!G&UW_p?zu-9br`vz&}1~1s7K^YcHOD!yt}= z6BSx*pHRtpEmJybFoe)H8?A{UQ9~*j;w1R!l>SGw8@iwIr^7Zkl1H8&g%WG%dynD1 zBOKnBee8siBjQ|3mTS4uNxqzSrt0ynv)(qg+zpyDDGVxi(E=STy+xM#-7b2mJyY{h z*u@EbfGU9HOf$0YX(@gxxVuYT^}A`TXj;2bM?>c zcPIV*k>Rz3ga!9YAr~>LpiZHjpTjqv-V>$GSa68c_lXUi9}oo6bQ7X7Zp+2YgI5rB zHc}XJ1-HX9&8Bd|I3DRa`$5sOuHav>krhdg!?ESJ&*24LoRznxQGU|>*ve<&Rv!wf zWbN)oIc#oHp3$6GIXbQ#PLRSyz`N|u|Mo$jqa$);`&AFo^BT~4eU+;azKR)KZNJBK zO>vU(yxk&I@Cw=yPt(^PoVK@Q>G~YW*POodmp{GJOwS1EpuvMfL#z4)^kzD=4rvkk>_IX{-i$Zp8v0?tkS-c{e0b^|KZ zbygM9v%$uSro5&)%A|{o0ob)em487sAMyt?(9bq+eE zDGs=g<7+iyH5r1BC2~&j5q`O;C~MW}oT8K-WR$j$=OOl)-v8`JI}tN~?a^q`)I?ee zN9@{$R+934+$L|x1VsBQ_w^lWyuJOdEjLeN7tvQsraMDFO3P&g^f$9P3r?6sPKb1= zfx)7M6x$#C`sj7v>&P?BeNwCQZ7MEekELNs5lX>TNyD^)z9mly{w!Eu=~+UvGjsYz z4emr#jMKoP_43L**h#DqOmh11h1I*(f{>T7U!LBT*)W=rj>d%GSL4Oy{XeB$Wmr^e zy9PyKCWX>YUUOONokgY%VA>H;u0S|=t4&jn|?w#+e-yA7H`PATEYT`v~)Y*k~L&eUj; zjhGIehZA#hm~jl$n%Jfr(16{mDzElxk83mmB=*#mkNa}IouRyAVusTgvofBwB=lYd zn8$q=NZ=iybO^62*8fJ>^Yy_Cj&~^UBVv!%Dx{j;^c?Q>c!{?cB=0wyCtJxnB8bVW zV^qktE&H?@KYSfh#V*6y{)2oWr6a1BrQDHtF(VSpuJCCbp!TYkFqf+5vgkgEb2HqYqdxWz zQrr;ve=J1hiM?sEQMkh{Ftg+2l%~KP;E=~bM`!qTay(dX@enK6)88rBW4&0DI5FmleWvY4 z3E|_Sj2DaiQp-pix;~!J6$tMaH%eK$?P?8wgt`frQc}K){<0>f_+E4g-46_!`1Xy7 zCh>B6WUN+cbY3i1on*RYcZs$JYI8*Yl!7co-Tlf#e;?Jx+eG4YK{vBZGUA#*Nnu9_ zclXgb$rTWrZb_^>^8L;t>Q>HaC?*@7cJsvaJ)fXH#Q_ek>A-s@=J3+y!YhGmYAF)k zDNRG0ZqX8IX{IbR-jQY0R}aT{6ibgzOIt8kJmPfLwamkgl;VMV`jJSeM0yno-Y;V; z%mJe0Y>y1z2oeNYcY+rpPbFI@+^MIG$Y&Pg-g!>u7Stz1^gI;ZXow$mDag#Bq*Hoj zT=Ym#%wEDK{JI@~(mkX)FPF}Gw*N;vhFiN^CZRXw8egdCdQ(WgK8_zfYGZ)$20gbP zK&VD?j;Ba2S{zM68O4LL-`G5pi`^s?7loA|k5ZnsqiCRjX@1s1yL)NPLVnTo5_>*L zIG|?#oy-qiCONB5`AQ;L95VP_b)n-|T4HZ1b=!y6M)G%9j#w4QZXhDMJ?Ycy%vWI~ zd?9|%nxasQl^lGY;-(rgYi}P;ey7zU4Bmf002P{Y?u7RZ+f_WLc32g;UVWz{mTDxI z!!}}Ns%LV_B|V5SW{-c+K*qq}a8}8t<<^u3eRb^5Tx?1;%TeNvpM)s%)FkO+o}-6< zgrmo4yerJZf1U8taN5V!+zu%}s*?)MR+&}C;it6HLaX~o#mlE#)vdNn{PYal-bvF@ zn=@_)mB*K-L>+aA3GS|u7NbwQJc*bz^jyCwFTIJ@2=2$wSon0~K{4w7YX`A(VHSY?Bs zo-oxQ(l)o z|45TIT~=xTr3vYGak5StuTRa88DJo)kiN0AzMQNPTxS8qdZXm?T4DN@mcWrkrtJ&% zOF>J+%y?BuTXZ~DfnVZiWkuDjg1k$eMK;9K>+M7^Wkzpjqh3!{zM9vq;a2P_Jdq-n zsb~XK_&@=0AbRpP6gbe%-LsdG%ZY?@TH>pQ8Gdv8RU_yFv)DG;um@RL&Q({InY1+_ zJE72z@xdH5WgOyS#^U&1t__1#%!-yH*4^*>Hk+)EKW`kZ{O4T(Mx^A?NtVK>m<#T5VZVCu&GWfpInVavH#+sdW9qxtbgkaTtZ7<~W<)yG&q7RBB< zxeLr~cMBC;2bXPm0rAXv#QhW<;3a)34%bT3e}c0aNvPtAFkEsBse+x~^Q0+n+CwsfgjA&N~ZJ-%p2$*?{!C8GNMw|Ongb*l$Z{%d)S#3&)2Dgv) zw(H*iFV*rF+37#2mVZ^ef2UeOLKz$bvE$NYWcT(@PAiJHnxAL!J2`2F9%%U zT(}E+4CTq(>|42nd>3iyOZ`>wgPQ&I!I&6OC|;OdtSa#c>5#sQFK+*PYc%mK@lSl(IBK+*Qz%!Wh zZ|ODg@-*=!8Z%KWBBPEe__Yot7j)&3JW}jfB8)QaS%O%P6Xoix7~53IZ$AW1^zZN! z)U)umL?))8WiGJLD5EKSM*RR3&xj!=VZLQuuz{Fg4hjHeRcyw2*t-Rf?s)6#yeAZ` z4m5uV9d5V#6HGD24odb#5^7Dk%B! zVVG__>?I??%gvrReD#&r+gDqX@k9#g#*Hu~PNB7@o{U)-PT^B~u_M z>9tDT;Phpa`+?6jJ>Zl&y}y!pWZptmAF0Ttwf=F3L z!EHuixB(uz&Lb!N->mJwHq&;fPfk%C+K)EV6?-f3q5qg~fjXyDrk3iu!4h~WD6yk) zq{+^%IF5GCXCL-U(nthdWcU3zaW;mV9`+Tz`HEzWewFeB{dE0ZX}8QuAiWghd9kHu z7V?^4eUB(>_nLxCdILzB%|~Zr=dQx2`&|NH5t;Xa)pns5E%Sg=4j~$qm5r3C{G4cR z)Dg%+k$=pD=i|Z?m7;6~Yd)#EjD319C-V1X6Lk0uk3#8*6c;|^RSMAKV5-m7-&EB} zVcE4NCNo=%lx~vk^Oa8Me}KIlPM19ho<~Qvce6w8!uDiQ8jZ;+AZEE{0%P&x{4i?U z(nAoGS?mScg-Acfj=gM>t1WguFvhI=h6}e}sb+brwHw$NfofKsOLV+wvHcOC`2t!Q z#@9aCwzT8^a(YfT%DQ{41^8K)`#h#Eu$=Rwq>%Flb3m#48kg1B8d|{nuN(7Lru8s( zT|skQp)G(gwI*szS2#r<2{>9rmbxDQ@P@9#vH8YfQ-nhe!vn~@HijQUBC=za`e01d z>Q3ir`H^6r+hNxn`IzKsPu$rYp&)t(;&oARr%6064vx4Q&{ZPTodz zdNI4!up{E}e0X3M1J=V{DXg`E6#pF2sDO0~BTgu;5oa(+0MY0XUV9Mf@wO=ku!FES zvEOVcdsg}WiSZB_hL$5LyPhL$E(J&Md#Q!hpt5F3M+(Q1>3KUc2{SB2Npq}~f|OGV zmXN?)8*Oz*3bH?MuiKg*!_S`sG?7wcSHc6hwX&4 z;08uFjbZ9|L~cj<+P{Cs+=V(uwoE%lMy%$pwa+y%4uw70c!ukTK0LdGhD0|!J^NvF zWEeEyYOree6eJ<&7H*$xyI?stdgh9o9u~=c@rlONTsQx;`bOD$h7bDW+A=wQ*a9wB zWJ)G4Bf&y_=8pV?kxb5@*b&06b(jESk6Z+slaTY(J@xNTaxaywnKGA8leA6Zz$R%* z>SctU+P3l2<9IOOE5~23NL4wEI=c?5gPuk45en4SLra>I9wM z0P~gPoY_L+Lkg6mc-l(~xCLo_^AlHi%swT9p=ls~z@q;GsYiDp@x}tK7Lr(rUgMJX zj29u9t=!P~5nTZC)P+wDn_G3s0Y!ce+hL+w`>kiXFwuC8F=+SNvTOu@!7E`Fk{NCD z3G^(6T$%8^y8KmR3zun4yFg>p2Yq>w1T!GqIBW64uyvo=;yJb1;*S%~yfX)+Ji#K= zId~Y#)VDdlPvIho45nTdt{$Qs8dQQ}X-^zAb#;g6uH-wJ^f}!>Qc~#2N+?owdh}m_ z2t8blGP5=iW{Cxs&&tAb2QJ~2rvqNoU5DS46C1c3+>q)+tn9waV-b+Po_&`;z|8!i zypzc+t@-T)!&V-%EKwm;I-jQ2X?!tgSs;*OA9wNOQ}_o32Z%qW26nS7P)nP%F)Wzi zA*+GsybXy~!~1$5C>ga|uKy&bnc@9eBV%h-B3t3K9?l`hkct%7))3JEb>qaKiFP@j z86ty+{?{1SQ~VY44fT-2T!*q^E0adA0-@?fzFoHJBLu0c=J?=M_*gTd(y19}6kbOpx<4g2{`sN!}Ptq};$u!o$*S7`Qas z2=^gOtzHJxL)~>WS47yiIf$O}ZQ+zLJHRbB) zV8e?sx+n0H&xO?*taA=|%G?GVF(JNVSe@=?QdbG)0Y2@xu+r8SPB>qxa}X?5X_q9tYxM{?<2#Jd&7U zk#*Gq8SWQmv&Tl!p<5^zeUxqN7sB}gB#%e&Gt`zx-k(`+a0WxdNUMv zbKF`4?P-NqcDKq0E2IurAo}RZ;`BI|ECb%9vnPCy3w`L{Bu-tU8dip4zE+CqOrsEL z$+iU{JwfRCZ0dquUf0m#OB0=|)A3N>vHvs)+h~R}==nEc)TDBrT(wcApjpNMhEHs- zCWXobmXb&3CQhqXj?f*oF$0pKVzR=)iL4`PRV$z=6c-8!Oy4#I$#}g`^*o_>-5FYC z(;Pw+vZcodA}1e8^rbY&2R`#DT~SK`Cu!y#&&by+eV6o>t3u?{60g#gBAgdIqE8VM zn|;#i=0Er7o_}ZkYv`oZ9a!WXBem6K_zR31 z@HZarXj+-9G4rY{m=rA`y*;27P&t_MI5Nuik0P_(Nk&pxLxOAj@$WAx=0*o3iU!s6 z@bAYkvvB&&;&c6wF()?U4TpE6W;O`lmKwR|lrkT_9^|MQ*{->k;Dz8>Al6oMr@ zRK^;SP+M{}CEQN(&zIXN!MEHK%v5&|g`TDH_|*utN)tJG4DMgOSZ;VC*|<%&ai(V} zR&40xvAOq{S3cO1%*G^#%%zDrJWf>{5muKH8(%NLr-nn6Z%uB>d4tPR^B3QH*GIYVPtP(>NAB*i7 zneXcd(ZW^yi;ID6>d&gINDk(eEAAAlCmD zx$i~rKV|NFpEVok-evO}I{)nm`G3$E%)$8&bS~An-*iJBFPt*K%rn<$Jp~gI4!#`P z<4r54yoG|%LZyU7kcHTHNzYh#m*F%rC8PY>Qb@iYM;Mz}Su_k)?Vg?HD9vBr#;6hVflTPWKdP){y+l+s@x`KddHYwx=1)2!T6H!7C-2Qx>LFM# zn&KkbkoivedYlSSO6ZBx&18c%DNIm=5H=9Lpp>-6^nf?ayM!6C$``lMI3%O$te~QV zUo}W1T%_{t#wcGmqCQfmRo{~VLZn$pzgQ9!9P7wT*MAOE#2Yq0w{yp!q(1@)g7Brt zAT0KR08HcBHAbq)G?M#s0%3qs)2offyGKyDG?MRreC*A^L=^mh^L_vj2K6Q^6k{>Ct^@-C-BQ%X5}8L~ez&)%ZGy=M)8nL2;`HD^aiUzUY~24`O$c z=-jx~##81T(-P#LVBpiyTG4+t^+)MnJ`7Kbd&yHU)ghKJrktG5q%_g1j!*$vFM{z5 zr5dG2kAqw!Bvq@j*~rW9KCC9o;Ki)mYR8+a)b=HaO7AIk6Hl4VA%^UGj!WLzRq(Wm zuHwfQ(Nc^0(1S~R4N>~5qlMyWhT%x=e zerOML`z6)Klk01P1?;{9jWKF9Mwr9}zfx;Pidm{KoMx@I59{lFIUUV?gE&QE*okRnQZT3zU+PA&S zRRMK%ExaUdn_iQ(U&}}?ha=F7Z6y!JH+$xO{CFoN_l-)04pf5y3R*)L^N#C{iPDZS)QR2z-3kq~R#sk&QE1|M zXSQ3L7!?J6;TBNTd4-@lOc@Agpm}iTK8t)x8Ygq7{5w3lI+(x!_huU~0Q^4}2*Sz9 z&Iy8n{*K+l&mR}a=I-s^#Tz~kae##jN=Kj4M+aLbP zU)r&={+9Fo3UK|pR!|OZj$hXv3T40lwSO58$^rRp4lXG8_ZT<$A9FZ47@Av|H~{$g u04(?X)8vnLjYZkk_Wm2BKgt|HKmg$AWa!}Z=bL!H%&eRMDk^aWiT?u9j)ENk literal 0 HcmV?d00001 diff --git a/tests/domain/sap10_calculator/worksheet/_elmhurst_worksheet_001431_rr.py b/tests/domain/sap10_calculator/worksheet/_elmhurst_worksheet_001431_rr.py new file mode 100644 index 00000000..8fc8ecc7 --- /dev/null +++ b/tests/domain/sap10_calculator/worksheet/_elmhurst_worksheet_001431_rr.py @@ -0,0 +1,124 @@ +"""Mapper-driven cascade pin against the Elmhurst P960-0001-001431 +"simulated case 2" worksheet — a Main + Extension dwelling with a +Simplified room-in-roof (the 6035 archetype, more complete than sim +case 1). + +Like 000565 / sim case 1, this fixture does NOT hand-build the +EpcPropertyData: it routes the Summary PDF through +ElmhurstSiteNotesExtractor + from_elmhurst_site_notes so the SAP-result +pin grid exercises the WHOLE extractor + mapper + calculator pipeline. + +This cert surfaced two real cascade bugs (both fixed; this fixture pins +them end-to-end at 1e-4): + + S0380.192 — Simplified room-in-roof. The Summary lodges placeholder + slope/ceiling Length/Height cells (a 40 m ceiling height, a 32 m + slope on a 4.65 m gable). RdSAP 10 §3.9.1 derives one timber-framed + "remaining area" from the floor area instead + (A_RR = 12.5√(A_floor/1.5) − Σgables = 32.89 m²). Emitting the + placeholders as detailed_surfaces billed 1024 + 160 m² of explicit + roof area → a 7.5× fabric-heat-loss explosion (SAP −14.6). Fixed by + dropping roof-going surfaces for Simplified assessments so the + cascade's residual formula fires. + + S0380.193 — Suspended-timber-floor "sealed/unsealed" infiltration. + RdSAP 10 §5 (PDF p.29) line (12): rule (a) ("U-value < 0.5 → sealed + 0.1") applies only when a floor U-value is SUPPLIED. This cert's + floor is as-built/uninsulated (default U=0.43, not supplied), so it + falls to rule (b) → unsealed 0.2. The cascade was feeding the + computed default U into rule (a) → sealed 0.1 → (25) effective ACH + dropped → space heating understated ~450 kWh. + +Source: user-simulated PDFs at `sap worksheets/golden fixture +debugging/simulated case 2/`. The Summary is mirrored into the tracked +`backend/documents_parser/tests/fixtures/Summary_001431_rr_ext.pdf` +(distinct name — the corpus reuses cert 001431; sim case 1 is the +single-part gas-combi variant) so the test runs without depending on +the unstaged workspace. + +Cert shape: Main + Extension 1, both solid brick WITH internal +insulation (Main) / as-built (Ext1), 3 storeys, Simplified room-in-roof +on the Main (floor 29.75 m², exposed + party gables), suspended +uninsulated ground floors, gas-combi SAP code 104, no PV. + +Worksheet pin targets (P960-0001-001431, Block 1 — energy rating): +- SAP rating 69 (line 258), ECF 2.2395 (line 257) +- Total fuel cost £920.5046 (line 255) +- CO2 4566.7090 kg/year (line 272) +- Space heating 15269.8593 kWh/year (Σ monthly (98)) +- Main 1 fuel 18178.4039 kWh/year (line 211) +- Secondary fuel 0.0 (line 215) +- Hot water fuel 3308.6172 kWh/year (line 219) +- Lighting 282.6414 kWh/year (line 232) +- Pumps/fans 86.0 kWh/year (line 231) + +Per [[feedback-zero-error-strict]] + [[feedback-e2e-validation- +philosophy]]: pins are abs=1e-4 against the worksheet PDF. +""" + +from __future__ import annotations + +import re +import subprocess +from pathlib import Path +from typing import Final + +from backend.documents_parser.elmhurst_extractor import ElmhurstSiteNotesExtractor +from datatypes.epc.domain.epc_property_data import EpcPropertyData +from datatypes.epc.domain.mapper import EpcPropertyDataMapper + + +# parents[0]=worksheet/, [1]=sap10_calculator/, [2]=domain/, [3]=tests/, +# [4]=repo root. +_SUMMARY_PDF: Final[Path] = ( + Path(__file__).resolve().parents[4] + / "backend" / "documents_parser" / "tests" / "fixtures" + / "Summary_001431_rr_ext.pdf" +) + + +def _summary_pdf_to_textract_style_pages(pdf_path: Path) -> list[str]: + """Convert a Summary PDF into the per-page text format the + ElmhurstSiteNotesExtractor expects (label\\nvalue sequences). + + Mirror of the helper in `test_summary_pdf_mapper_chain.py` / + `_elmhurst_worksheet_000565.py`. + """ + info = subprocess.run( + ["pdfinfo", str(pdf_path)], capture_output=True, text=True, check=True, + ).stdout + m = re.search(r"Pages:\s+(\d+)", info) + if m is None: + raise RuntimeError(f"Could not parse page count from {pdf_path}") + page_count = int(m.group(1)) + + pages: list[str] = [] + for i in range(1, page_count + 1): + layout = subprocess.run( + [ + "pdftotext", "-layout", "-f", str(i), "-l", str(i), + str(pdf_path), "-", + ], + capture_output=True, text=True, check=True, + ).stdout + tokens: list[str] = [] + for line in layout.splitlines(): + if not line.strip(): + tokens.append("") + continue + parts = [p for p in re.split(r"\s{2,}", line.strip()) if p] + tokens.extend(parts) + pages.append("\n".join(tokens)) + return pages + + +def build_epc() -> EpcPropertyData: + """Route the simulated case-2 Summary through extractor + mapper. + + No hand-built EpcPropertyData — the extractor and mapper are part of + the test target. Exercises the S0380.192 Simplified-RR fix and the + S0380.193 suspended-floor sealed-rule fix. + """ + pages = _summary_pdf_to_textract_style_pages(_SUMMARY_PDF) + site_notes = ElmhurstSiteNotesExtractor(pages).extract() + return EpcPropertyDataMapper.from_elmhurst_site_notes(site_notes) diff --git a/tests/domain/sap10_calculator/worksheet/test_e2e_elmhurst_sap_score.py b/tests/domain/sap10_calculator/worksheet/test_e2e_elmhurst_sap_score.py index 4f4653fd..f2abc332 100644 --- a/tests/domain/sap10_calculator/worksheet/test_e2e_elmhurst_sap_score.py +++ b/tests/domain/sap10_calculator/worksheet/test_e2e_elmhurst_sap_score.py @@ -38,6 +38,7 @@ from tests.domain.sap10_calculator.worksheet import ( _elmhurst_worksheet_000516 as _w000516, _elmhurst_worksheet_000565 as _w000565, _elmhurst_worksheet_001431 as _w001431, + _elmhurst_worksheet_001431_rr as _w001431_rr, ) from tests.domain.sap10_calculator.worksheet._elmhurst_fixtures import ( ALL_FIXTURES as _ELMHURST_FIXTURES, @@ -167,6 +168,21 @@ _FIXTURE_PINS: Final[dict[str, FixtureCascadePins]] = { lighting_kwh_per_yr=283.2229, pumps_fans_kwh_per_yr=86.0, ), + # Mapper-driven cohort entry — Summary_001431_rr_ext.pdf → extractor + # → mapper → calculator. Main + Extension, Simplified room-in-roof, + # suspended uninsulated floors (the 6035 archetype). Surfaced + pins + # S0380.192 (Simplified-RR remaining area) and S0380.193 (suspended- + # floor sealed/unsealed rule). Pins are worksheet Block 1 line refs. + "001431_rr": FixtureCascadePins( + sap_score=69, sap_score_continuous=68.7584, ecf=2.2395, + total_fuel_cost_gbp=920.5046, co2_kg_per_yr=4566.7090, + space_heating_kwh_per_yr=15269.8593, + main_heating_fuel_kwh_per_yr=18178.4039, + secondary_heating_fuel_kwh_per_yr=0.0, + hot_water_kwh_per_yr=3308.6172, + lighting_kwh_per_yr=282.6414, + pumps_fans_kwh_per_yr=86.0, + ), } @@ -179,6 +195,7 @@ _FIXTURE_MODULES: Final[dict[str, ModuleType]] = { "000516": _w000516, "000565": _w000565, "001431": _w001431, + "001431_rr": _w001431_rr, }