From 0c100e166a8e1d407e320ffbce8ee56509d2f839 Mon Sep 17 00:00:00 2001 From: Thomas Fussell Date: Sat, 21 Jan 2017 19:12:26 -0500 Subject: [PATCH] fix up comments, hyperlinks, and formulae consumption tests --- source/detail/xlsx_consumer.cpp | 17 +-- source/workbook/tests/test_consume_xlsx.hpp | 109 ++++++++++++------ .../data/10_comments_hyperlinks_formulae.xlsx | Bin 26858 -> 39701 bytes 3 files changed, 83 insertions(+), 43 deletions(-) diff --git a/source/detail/xlsx_consumer.cpp b/source/detail/xlsx_consumer.cpp index 975906c5..77aa9e27 100755 --- a/source/detail/xlsx_consumer.cpp +++ b/source/detail/xlsx_consumer.cpp @@ -2161,17 +2161,20 @@ void xlsx_consumer::read_worksheet(const std::string &rel_id) expect_start_element(qn("spreadsheetml", "hyperlink"), xml::content::simple); auto cell = ws.cell(parser().attribute("ref")); - auto hyperlink_rel_id = parser().attribute(qn("r", "id")); - auto hyperlink_rel = std::find_if(hyperlinks.begin(), hyperlinks.end(), - [&](const relationship &r) { return r.id() == hyperlink_rel_id; }); - skip_attributes({"location", "tooltip", "display"}); - - if (hyperlink_rel != hyperlinks.end()) + if (parser().attribute_present(qn("r", "id"))) { - cell.hyperlink(hyperlink_rel->target().path().string()); + auto hyperlink_rel_id = parser().attribute(qn("r", "id")); + auto hyperlink_rel = std::find_if(hyperlinks.begin(), hyperlinks.end(), + [&](const relationship &r) { return r.id() == hyperlink_rel_id; }); + + if (hyperlink_rel != hyperlinks.end()) + { + cell.hyperlink(hyperlink_rel->target().path().string()); + } } + skip_attributes({"location", "tooltip", "display"}); expect_end_element(qn("spreadsheetml", "hyperlink")); } } diff --git a/source/workbook/tests/test_consume_xlsx.hpp b/source/workbook/tests/test_consume_xlsx.hpp index 69421b06..e2e464c1 100644 --- a/source/workbook/tests/test_consume_xlsx.hpp +++ b/source/workbook/tests/test_consume_xlsx.hpp @@ -10,34 +10,63 @@ class test_consume_xlsx : public CxxTest::TestSuite { public: + void test_non_xlsx() + { + xlnt::workbook wb; + const auto path = path_helper::data_directory("1_powerpoint_presentation.xlsx"); + TS_ASSERT_THROWS(wb.load(path), xlnt::invalid_file); + } + void test_decrypt_agile() { xlnt::workbook wb; - wb.load(path_helper::data_directory("11_encrypted_excel_2016.xlsx"), "secret"); + const auto path = path_helper::data_directory("5_encrypted_agile.xlsx"); + TS_ASSERT_THROWS_NOTHING(wb.load(path, "secret")); } void test_decrypt_libre_office() { xlnt::workbook wb; - wb.load(path_helper::data_directory("12_encrypted_libre_office.xlsx"), "secret"); + const auto path = path_helper::data_directory("6_encrypted_libre.xlsx"); + TS_ASSERT_THROWS_NOTHING(wb.load(path, "secret")); } void test_decrypt_standard() { xlnt::workbook wb; - wb.load(path_helper::data_directory("13_encrypted_excel_2007.xlsx"), "password"); + const auto path = path_helper::data_directory("7_encrypted_standard.xlsx"); + TS_ASSERT_THROWS_NOTHING(wb.load(path, "password")); } void test_decrypt_numbers() { xlnt::workbook wb; - wb.load(path_helper::data_directory("14_encrypted_numbers.xlsx"), "secret"); + const auto path = path_helper::data_directory("8_encrypted_numbers.xlsx"); + TS_ASSERT_THROWS_NOTHING(wb.load(path, "secret")); + } + + void test_read_unicode_filename() + { +#ifdef _MSC_VER + xlnt::workbook wb; + const auto path = LSTRING_LITERAL(XLNT_TEST_DATA_DIR) L"/9_unicode_filename_Λ.xlsx"; + wb.load(path); + TS_ASSERT_EQUALS(wb.active_sheet().cell("A1").value(), "unicode!"); +#endif + +#ifndef __MINGW32__ + xlnt::workbook wb2; + const auto path = U8STRING_LITERAL(XLNT_TEST_DATA_DIR) u8"/9_unicode_filename_Λ.xlsx"; + wb2.load(path); + TS_ASSERT_EQUALS(wb2.active_sheet().cell("A1").value(), "unicode!"); +#endif } void test_comments() { xlnt::workbook wb; - wb.load(path_helper::data_directory("15_basic_comments.xlsx")); + const auto path = path_helper::data_directory("10_comments_hyperlinks_formulae.xlsx"); + wb.load(path); auto sheet1 = wb[0]; TS_ASSERT_EQUALS(sheet1.cell("A1").value(), "Sheet1!A1"); @@ -50,28 +79,48 @@ public: TS_ASSERT_EQUALS(sheet2.cell("A1").comment().author(), "Microsoft Office User"); } - void test_read_unicode_filename() - { -#ifdef _MSC_VER - xlnt::workbook wb; - static const std::string data_dir = STRING_LITERAL(XLNT_TEST_DATA_DIR); - wb.load(L"data\\16_unicode_Λ.xlsx"); - TS_ASSERT_EQUALS(wb.active_sheet().cell("A1").value(), "unicode!"); -#endif -#ifndef __MINGW32__ - xlnt::workbook wb2; - wb2.load(U8STRING_LITERAL(XLNT_TEST_DATA_DIR) u8"/16_unicode_Λ.xlsx"); - TS_ASSERT_EQUALS(wb2.active_sheet().cell("A1").value(), "unicode!"); -#endif - } - void test_read_hyperlink() { xlnt::workbook wb; - wb.load(path_helper::data_directory("17_with_hyperlink.xlsx")); - TS_ASSERT(wb.active_sheet().cell("A1").has_hyperlink()); - TS_ASSERT_EQUALS(wb.active_sheet().cell("A1").hyperlink(), - "https://fr.wikipedia.org/wiki/Ille-et-Vilaine"); + const auto path = path_helper::data_directory("10_comments_hyperlinks_formulae.xlsx"); + wb.load(path); + + auto ws1 = wb.sheet_by_index(0); + TS_ASSERT_EQUALS(ws1.title(), "Sheet1"); + TS_ASSERT(ws1.cell("A4").has_hyperlink()); + TS_ASSERT_EQUALS(ws1.cell("A4").value(), "hyperlink1"); + TS_ASSERT_EQUALS(ws1.cell("A4").hyperlink(), "https://microsoft.com/"); + TS_ASSERT(ws1.cell("A5").has_hyperlink()); + TS_ASSERT_EQUALS(ws1.cell("A5").value(), "https://google.com/"); + TS_ASSERT_EQUALS(ws1.cell("A5").hyperlink(), "https://google.com/"); + //TS_ASSERT(ws1.cell("A6").has_hyperlink()); + TS_ASSERT_EQUALS(ws1.cell("A6").value(), "Sheet1!A1"); + //TS_ASSERT_EQUALS(ws1.cell("A6").hyperlink(), "Sheet1!A1"); + TS_ASSERT(ws1.cell("A7").has_hyperlink()); + TS_ASSERT_EQUALS(ws1.cell("A7").value(), "mailto:invalid@example.com?subject=important"); + TS_ASSERT_EQUALS(ws1.cell("A7").hyperlink(), "mailto:invalid@example.com?subject=important"); + + } + + void test_read_formulae() + { + xlnt::workbook wb; + const auto path = path_helper::data_directory("10_comments_hyperlinks_formulae.xlsx"); + wb.load(path); + + auto ws1 = wb.sheet_by_index(0); + TS_ASSERT_EQUALS(ws1.cell("C1").value(), "ab"); + TS_ASSERT(ws1.cell("C1").has_formula()); + TS_ASSERT_EQUALS(ws1.cell("C1").formula(), "CONCATENATE(C2,C3)"); + TS_ASSERT_EQUALS(ws1.cell("C2").value(), "a"); + TS_ASSERT_EQUALS(ws1.cell("C3").value(), "b"); + + auto ws2 = wb.sheet_by_index(1); + TS_ASSERT_EQUALS(ws2.cell("C1").value(), 6); + TS_ASSERT(ws2.cell("C1").has_formula()); + TS_ASSERT_EQUALS(ws2.cell("C1").formula(), "C2*C3"); + TS_ASSERT_EQUALS(ws2.cell("C2").value(), 2); + TS_ASSERT_EQUALS(ws2.cell("C3").value(), 3); } void test_read_headers_and_footers() @@ -113,16 +162,4 @@ public: TS_ASSERT(wb.has_custom_property("Client")); TS_ASSERT_EQUALS(wb.custom_property("Client").get(), "me!"); } - - void test_read_formulae() - { - xlnt::workbook wb; - wb.load(path_helper::data_directory("22_formulae.xlsx")); - auto ws = wb.active_sheet(); - TS_ASSERT_EQUALS(ws.cell("A1").value(), 6); - TS_ASSERT(ws.cell("A1").has_formula()); - TS_ASSERT_EQUALS(ws.cell("A1").formula(), "A2*A3"); - TS_ASSERT_EQUALS(ws.cell("A2").value(), 2); - TS_ASSERT_EQUALS(ws.cell("A3").value(), 3); - } }; diff --git a/tests/data/10_comments_hyperlinks_formulae.xlsx b/tests/data/10_comments_hyperlinks_formulae.xlsx index 731e748c4e5c57c017e2829c09ea64bbfdcf1d3a..0e5a7f2e49b42c532003ea580f43987437212e9d 100644 GIT binary patch delta 21085 zcmbTccTkhv*Df4IMSAZgD$+}+QVgIXARxULsnWZE1_<0Ly+6`BB25Uri=ifghu*sa zNu-M;C>RmK;rE_zzVDB7=FE5A%q0Q&<)T{ z5D0V|^fMLHoO1;P5~pn96u1hE8(fuP>?t787ueI;{&Gxq!h*ugSdOoF-EYhySC}%b ztu0?2|n-7~!n%45m!9?d8j*jiQ!1{}yt3^AVg`{=Qof_qvYB zh~Ir^B}VVSP2Rb>(kxi-`)`}!FK5c*nWmvnPaS#$5r1l`%UHM~aHYVh5c-N)@n%8^&y zc={|3tyFKXxzvu=Uyj-_RkH-q)7QbB+DdDECw<;i-47l!X2dQC9NIFy^NY=3(Fi&g zF}mLx+Orqykbz}o%kX+m--4qMqhJI*%q3A>zO69|5QrOe^GZhlbMBUVlvG!MjBziN zG-LE(Oi$EOxa6v@hUmK>57BQcl?=DOwYfU$X?;E?u3Fxm3%u3IF^ix0keBwZbq)Ti zj)Z=Y@`}3o?)5hlq~^f3x4*xRj#J!pKG6Ld7Ds*K?h@;w<-Vnl!jQ)Eg5t-)f#rR& zztc?8o0dFv;b~HSVqlf=K-#wNZNTzAw`*~wI9DaVQDJDJZ}lyoQCr5(rD?-J_}>~Y zTD9<>)1`PCrgQ-gEe$@e=hx$iB5pd@u7~Df{d8{NN>c<=8HYlp$dS`91Vy$#FOJSo zwDO2|%u9!}%=YK=5WGQ1@(l0e_PgjDhVbTi_*+iF^tkcw`~O~W30?SV6<<5=$5FP( zP^DZ2Ui`AvMP3Dg%5Q)`beAy>^MM2fhx)h%Nx^)5%FTVfSEU)rYD)m)Y4M6qh5}Xl z=*(R0RMw;WOP0&oe8%0JIzPUroc}I*E^M%vO?M=?Q1qiX{D)@FPBR;?s;O^ox=e9# z45x7(;_a~5;5z^8FtdP5g2YYB^uf-u8xBGMSpD(f%R;s9B5gNsl_wAJtM39TDH z9LuYzjxI3qd?*p$Mg6o+R5Uq=8JZh|t$M&H6qwe?{^#QL%?~B{Vd>(=ETgi6c?VE- ztve3uW+tBLf$vugw(qXHgk#x|j-M>FvQB6>u9{~{R5e)FzcmLv(J>SAq#H38@J*h) z0<36Ssp}kTRQ{l*R(;#xZk=lflJz&;^V|%qnfqaj zi0%@|mZLCd`Bv@Kp)&W3$6O-xO#?FQ8P|P1nedx`vGyQ^p$Go|oGewfoXF5Mx)*}I zl!II;G?^b7O3uq(ze2Y?R3H06hqG5L)F1fGu&D7YY)UX z0zWMrr2X@6z;|NU6~cN@{+o+cgZMdx!ynx5jEhb=w#!265St>taB|sMUW+dEo)9;% z6B-v@Cox{PezRx4Kk#Kly>L~+%26gf++TgAn2(_BHIT&4`>%jvw+#8}&vNAqL&9s- zI8iNYRHy5VjLoTHtN->!(6-meZ+fGT0&%^%*Pw|nd9MQAU$u_#fsQvguS@En4)9pn zLHr+aNh<*hN<{ccZEajU5%!}_ir3Y0WyO}l`%2HpX^Fw!dPNSzL5NC$1Zw<+ta??_ zuvgQv0sBwH_{)O&0c+UtUyp~yjr`}_as5RTi?Jx?d5va`M20e{LG6LMaIXlKH}{~m z5zPIh-|1&9()5EjsBM0Kd7*h3+*;Su*}y=iep-PvW9(tpDfpkXEOv@vx6e1N>f$ZN zOHJDLhL&Y0tYntjiWtZdluwq*JuALb@i0sx<$mJ6?M^-MryQi7ue|$<0{3v#{Pv2N zpn6a5mk6QakXp%HGs*ID3ccdyG;n&iERQXP5(8D8zRp2ms%RTBHrCp~(}P%UR_O%L zcT|3`;Bmwdj0HSduhFbXPp7|QEU@LQk+>dLfm^*{qxgvS$(B)XT}-?1N@-_;C1?AP zjbYftU8$jr1dfS@UkYz|T+Mgk_1r4DpX-m_soBph6Ktt{bC-RN`Q9q9cd(mu`ibPg z=+Z3B5wx~?h5z0zl#8rPe}?y8OemKCM6aE+D@MD&e>xn*xgGSV<$3NG!zJ?qoYE=TlUWrpv>Jc}JPcPWVqhaD1>nTmhtu z&$m$$*oYmu!8;?)=AR{=?9f*n;khi{3A$!$mmFC?8dY_sn6-U3|Jg2~E`Cn73FPiDT&Hp2z z!(yU(s}(^sxXK&6;c}r{@x?RhMwXGx8lV4L#gHh(PB4WV@E>%cUbk^7l)nU(4vGvg zCm4|VPo0!{;p!8F%$WQS9T+?m>Oob$vSq(OGg9+UMMrT&F&M2bf7M;}TzN}4p}&1i z=Yh-HH5Iu$|HwRl72XCUBKx0a%q{Ej@Y=WUr;W4IVxZ z3sV8>{CsbV@r8Fn7quz+E(%YLAkgR+&!cyqh${1J-K{a9(Ufhd6<2C>sxDMuXf#n% z+2B4`f~>7Q37iIZdH z{Mo;(vj@s~9@+((+Y}$3HE(@86HPu%)BpNKw^HMmh49!?W=aX})yeTiLX)OX2jy?N z_evzcGQ|qQ!?w|0CkQkH1&-On3Q8~^)-#=rK zjy?aDTUQ05X~=_A|wBzQcP4j*JEf(@hIpo`PZH6Y&Y5M zXqWyKNVjWGV@P5MHXU8Q zUIfTJzweaT=KI`!HIH@G1vhcg;!*UuPO1r5=qbe=>S>`(@^{1g1gUt6ebm_Aa z>>Zl*Tfdwf7)etGn5>^54tG0#`($ zh>?ceVMpK<@a6F@E+{~kL^ETbm4=$@3!PiuWzAZ-kAk7+4(t6Q% z)~e%u({rKq=0~ySng}b!y00fbW7lgr$9xpQ7mO)5+ucd@TA zXKpno=ty(3FmMY6t!2vmISvkgsRQ-($S}Rl6F+=I{*%F4Z<2+HWbk!I=yQ+Yr(!NE zQ@<4u?<>RZ+Ij?3{sYuh-f%GA-M6?h{`G?mDT7EFXb|;(GQ?QpqV(K2;6~7JvA4%l z?GF!(qE16Fw%x9_+uFp<#QLdyi^&H#WWnyAx4S$M3hugI*11d>ZRLSHyMEJlgVz;#+;d4;FV)<0icOlXhKJU|eD%1gcVOc@ri9mnfThQy8 zPyOCX7cr?Pd>KC9YMhB`a`!m7c{TS9FU4ahPx8}|nCol!Dj8WX%EshOuAXSt=y;t( zkMqU(zT51CztkvV`$}EX48x|YnT8k!TwFk{=lncKWT!=1eRGc`*_3LE zKB=gupVc=s@@w)N4WHR{nt=%aWAj~V7vp3yhMCs(ZTegeG*I>g1+=g{k$jmG++Nk{ z9VPXCzVf;ttffzCX9yCJz*GGwRkHF&(4zWZ(3ed9jr3lI2T_k?Uxf~Sn_k=Mr{p0N z?psWa6L{LU$zH)Tvn8L&d^NtFRO=tbLd#UI#CWTJ{;)quyg8)R-Y)9?Q7&Wf->|-r}&OAV% z|11tr#t%2H78jl}DgZyp3HLuQQKN)~_pd0XovBt1;{hIzHPv1MU)DP6+(sXaSs9A{ z)yoMhBQxb80m>K!2b!JywjX&|-$&veA-+1o(RI;6)Ab6z)U)QGUk=NYxL18?E4F>T zgj^V;Z^7o-NiI~;9S^34HDF^qHogJ_VZRfQR9N-+b``+q)ISx@hm~|Np8bK8#5*wT z~kst{C-?F?|yFt)?`vb|g z@fXo>6J`%=ZEX*%fs1iCfMM6v5c<>eUb>$A%&^ytoyvFRtOg}BJz#^1ZunpO0&_qGO>SI(X!N0{H`3&1^|9wdI&RteD$C!pt@-DW z=}*2t`=+yZRtk)VF34!+qk;3hX zerfN40f35OK2EQ70V;>p_tz!Vx2`;1XNJR8%oiFe)}O6_nd}T% ziIe`$z7JG^jjBGYUiWSa3&P^SI=zRAUs3&DS7cMI9jOH8j#*FOJ}C_?hnb=xuTPt7 z3uDxoL)6(}`FeaT{bWYMdR%aX#NGvHxy!Afyf6D@la9h%%jUM#FHTNFR+v}*mG;4b4UTkA(mP`u`5LcA6TyFZEPvL)nQxQFdVeO{#CEwdMPxfj4}uMDKBp;q6K}Fa`(W#}7|fh} z=Q12*u#+t|B$3q%kmJq;$X#xIAE6xeS8aVnP9iKwt2y^1@2cD_c#L3x2Ss>>xwt}x zyEvmfz58GTk%7#(&VJs!*q`Ki0lGQSeNx%pyU6{`7I1wQy7kp{c0s66vlHDcJNSHs z?`^tSM(IQDmX{LqR{?O5{axbX0oa>}Kk=On+~7VV2<+1L+HVwOtUMx&#QNFV> z)}ysRK3mi|yaKkFGN1nBtNHXC0`!pezw$0{qxY2O3~~ViVs2zyfQExF6Yu}E{a=}` zWYv>q`)79Y(Sf8El&p?W*2lYnmE9HhKX;ecd`#@n%*%^6H|M&$@jM@dz^Ze>9x>3s zyr__t*iN^&2h+fZe6EnMQp(QRsw&HOQ=hEus60ug?vkdhz3F%p1MXe+U!q_Qv0SdoyHQ%DOWDnb5(VM3M9zWct6~nU$tEUOCoK z-7=!Qn9G=!O6qyZ{gN?WV#jEkIlT1%SCGm%}%On%qh8raO zNy>Re&z;E0HIAggm*iW-_O#kPHLiKMrT2!ay1`|w6Btkv=$*nWCbXq7P2R|(FJJ*h zCS(-L@@2f2krTN(8@vmp+31K+8~%DGj2(IvZe?9mpxq)dhM{tE*121l{vv1`6jGAm zFRP~YeE-xww~M`Xw94wOe9_~#lDDogxyxK*;(ti_kM^(k)RBy{@(YBLnB~^L>~4e~ z@nhqjSKM4GSDAH0bnbpjH_-XE^;!jzAtuY8K`jdwRW{`J?DB%~4Ep6qq^rP8(N9y` z8xaCh?_lOxZ?AGaxyJb7=D&m2K|sc|HWz?_OTI#+*rIJz;}VeqRSsVK62ytBDi53D zq#&Sf&GS^Pu3}}MJFC`+gnE*{Z#XLzGETo}^eM`~LqaOVS5~}wMqg`KaNejvj7>(S z%)-h`!D9*$Z??5#(hwgLmK&xZR`DHc(G8Un3ice)4RMNV5E0c%(dPZ?B~xd}0Eo3N z+^JJ(t2PR`g)l376zpVQr=tIJqKFG8O+c8)1XQW~a#7^4pni6^baq*HHNermgro)a zKRvZ66yGE7Uw}%}1{_G5`{1*6qZ{|K5c@X!UooX;4@p6_qmDvYWez)fL@+gzJ zU!G;3^$g=%6h5O6JNXM)VoyI#1A8`FRnC3SJbwpbX5;%^q!SC9tezThE10?JS|zf1 z)HG#rbLMvWl{;5f#9^G8m;$?k16joovvs;b+oeeZ&UOntEOBTR{hGuWuaIYo-1Ch` zrbd~Cyn&oPnm5YJyq3b|N_us@BqO{nQzuR59B^P%@a!+!-QaPzKfh?QfR>pM5q{3f z+2i{eM9zm!5wtn%#8J;+RIAY?Q#Js*xOVw$Ox8C1-36h3~*Wkkn9JgA!?xcZ;)=| z7~<6!bessU(x9dUZ+#*-4K7Y!f}`^yPw-I=Di+^Kvz~EknLDP_Hf~DN&mWigaab>P z$2dr0k@@#m!iFwDigTcd|7SOso5>KC z7gtvHr?7!dU(%72w#73DT?@<>wY4UCCQ$Rmkd;!WRYqF@9eJ-UHPl2Ead+6)FTGQ$ z@lmaS5q(w0hWu^d|NIC4^R%GRMTs*%d40!G9GDvEqBlpI0FG*def`HquiHe6IEUbA z{wCgPa$U)V=S|xswwcTh4h@ibq+wA5(|y5oyeQr^hWW~DrPLxH7acc4Ufc3!F(-TT zx7Xjjx#^lH{Ziz{1t?=uUiRt#x|z!owl+JMbV)thCVH`xKxZtk`J90kqP zk2RqJg;RdGytPbwF(kKYch^9pmANLO(DKQ#m!~vitHg9j z49FX#!xGK5qtLU7wL3V+MTrZLGTx^{3FF3Pe_y1}t+Q)Mq6}L4sNFITd$b)l76>Er zU>qwFQ+yUBP8aBAN1D94scJ3w{mjZNY0U3of4V0jz5nWY5xp$3`9Y-Lb$z|8XXa%v zgTd{SD8dkm#zT#98ODQ`CtsgKYU2P1CH(n9$S&NWl=K^CpI7BDF}-F5Lp>n55`LQ@ z7ah#rjx5andfLl`t>icJn#bAG4h(-&qBU?b;T24qbXU8B$S2In*>FPHT~JCsVxvvg z20HfLB2v1a{2=!yL`(;2n5$KKsnW`D>~|EZXR%~Sw5Ge&7quIOon_ZE9s$a9(2jWF z>;(+&hIh8;c6!iFYq+Rr2=>kSB!kVFPJ& z;FV=qYzc82>k#X63|#XBIFR@8l7>%P2|00*qPvO!g8~AG3wv2bAm1b8r2UY;0I}Jw zeN~K)oXBt1c~4v%heJ~UD8*=y)V2Oms_ZS+-RZgkfKM{%7SqJbj$JFWWV1|_;q=snNeP##zhWu* zX1-q^Iv66m*X-3YfbD71LtCozD)3RB#Lm?B(0CWCgE{JofA{D6Cz0>MZ%wrt#ubZZ z>*t()W534_B}(PIia=21SdhP_J&ePsD4b;HtM)W~+yQLr%K2GmDGLMGcr7Ux{;=LD+BR-ympvG(n*$G*Vb%LWZ=r1<}k zaUu(P1~r3m5mPdTg;}ILnG_)NK#XR82;`u_6mW0%vTNrRYg@mc5*1Mg2EYBk{~;m< z)^F7HV4Tzwe*L@c&%PHa(jf;VeO|pj6{49q#pm$ovN5m;UnkO4TSS*d;R>7U1$(HB zDjX;ZjVdA`*kpj&?4+&ibv^dHNP|Lw!CkjwQAFAN0_27faTLZ~fY1-Bb#<-kdB!}k z2ZQt>B6!)FdC7q<8gH?rzbdAKM#;r$?Xq-#bz8H!n~m&OX}442$^jT~QapX8iC7_p ztztXS-iD0!HgL_@S=~9q*R4bZYzSNY8LvuVPYS}0`~4h}hB=_^<O(_d3vk( zBe;Q648~RIspiu`P6>O*&FuL)?%+TJRze$rRBLX-YA*z{n`Ai)AWHVs;XGOeXJWG> zAuvNMILfVfAbj#bm{6Ibj)tsIVzl;n{>2xsqk5=kfioAZFZHBf4auooMkf%pzHip>3f&M@L?3oLKhQw2Sm90uuaJWt_$|tG^S7K` zeT528JZ+gQFye6m>JWY#l178U?euWNjgvH0AjweIz@W4^%Yc5ucAt$u>X`9shIQ)PI)uGaxxQJGPB(-w>5)IM6URSTms~z*H7|bWpWxb{;VS?UV z_7S~o&c>AuRmKtS!7t7#&Gx<#s$&}xQvuBc^b8t*J9cz43gf!eksL$o099%v3v4bW zvj!4JauJrxvo&xz37kZOfgyHDFVTNe|M z4vRY3B}HJra{IdN_o*|x>8(l%SP`DpdT(&L6Ui|R)^Ni)d0)c^>H9-3Pga6~6(pDn zuEU@4p49Bm0Lw6*Q&6YzI9Yj`KhY3av5SN;!#^c{`WFpBwH}o zYihG-u$N|zgp|eRFgjMmV>XF{jvtN7Qqgm0iF@2^-nEtq$`%|95|59@zSd;!SdQ*i zWDSN^^04VCA>!&{g2wRFCTKug05cfN!DmX7RA*7oz(CEwWD~sW0Rx|Ob}T||-7kU6 zniP&-?PaqkO``KHN`<45VyD?j8-{cpn1=Wg+A}%;|2b=+p{nImZwdBCZSkG%8J9Wv zaVc+_1LqyjE>4|WL-K?pm|ah$f9&{CK8)JhkCI8#jq_N8B_9s}^WO`g;~twvFdO4) zYUv5-LrO!&9m@vp*2cN>9?=omMM?Ze=fJrmq?TpgB#)`|pivD$N!XSl8>`+CO};mMSW2ECD8@Sx*~lFT&r`qX>D~OEEGHnmK`5)j zt4E6^${QEJ2_2{p%-pEP9o1Tdn`Ga1YZJ%H`bfDZ4fk|EbCMl17yawANGZW5A;sP1 zW0D0|2y69p;=j|)V9AEb3?O~6zmaX8?;_^ZBB7>F4YcyxQY#g%GUZ@{9IB^bwWD+< zYNL`EiD!12Ve*X&W%e;DZ8CZcdQ9JbmvlHpIZtPx!yE?ulTLrft?H$oAM4#DbFS1X zx@@2U{$o03J$(n9UjcljID>GcYJfZP@ZG%BW+N0@y9F%f=?=2c7odlR1GOVoCDoQV zdcFYwcaE$UW3vx69w|8;A?ap|nxUR&RfqFxz1VqFD5!*UimON9M2t^DZZptVC0GXs z>~m<}oouplaIWc^E6eED0``t@VV$q2|6r(7+jy%jvUIcx8-F%vPM6v@s47qH^j;<5 zjfo8@J;IvqCt3u>C_khqmXCkaG0VRV!U+`JBy|ktjJ|aBkdoK)mBSQM6VA(-`uWD= z5`rOIHfv9QG_9_{-Mq7=M`g!S%~h*T>RoA3(&&d1Y9p~WO%BU{T!r44C7=~dnCmwH3+N5b*b`Zd^itLKZiO@QNDU`9mEPUy7GWG4Rrzf z!+6GW0dh{eRLy>kyFTCx`Jd0Y_-|c+{-N)<6a`cCE#Ws3(!05f%Ow958%|N z?LB?!Yif`P=smsO(E8CG2G}AQ17W%V?G~TBR==3~uhwS+NB~p!u$<`-U5m4b0)uKw zvu)?E(7h~Y3Rp>s{;qYjD!cbO{a*21f)VlUJ_UB7qB5IMxUvUVjk1|Lvqz!Y!;r9{s3mHfJ0VMI6ezIp;yk?7^`E6KPa?c45IEgDr$} z4OV8?-bFYQYd`%(zCDl2pE)@8URUQ<6D7S%Lf8b$|;_t=&p7Gba>~FEgQG(95vt;UUno7l|wkI5+;v6wI1VF%ZS+2A^lU ztITcZ%qF+Af!))plhFe(tG}Jqxc%x!e%+c-1jBO4iASf-LJIN|sn)-QS$ zky8$>e7M~bX0q@z&z{>v`{>1c>P(xA-o;|wM7HcI9H0JOv*MqYpMV_GUY7AN@vtxE zI90{#@uSVu{#+RwKS>%)eemo0i^DIJEc-WPycA%OM*|z8j(bxB#(|efjpb&oxH-Ey zm_rx9n%Nzze*a_Rr+UcU%#VR3+;e6@a9nVp)fc%Ui6gttLf@z6DoZuPE9T$5TP@4NXQg5wbkd?pp}uLtW6UaT_$1@?Q*b4 zD0$Pwh%gBCa~XADJ6_ohgs|B3Kyui?wTsCu30iI8E`cu*=DHuUg<9wED(RWEF!z(I zB!!6cf`S9sK|7(r>Suj8$~@oHz8WgXM760NS}J;2YMDB~3`2o5;YG zkkahxMe0bxAoX4UjvTTjgcNpnYeR(rtOJGF)=8elJ@_wal66oZm_^O!9>Y?EDg9yL z$ghB2^MP~w45Y}pEyMTBh-B7Rz1VdyWe?`O-~vPi!SsGVD7HKS&ZG>J9h{Gbq77eP z16(gaF$v#%_$k~729x4oLVOcpO}%Njx!#bJXy<+q(YtWu;2-Jld+EbhZNL_Jn!MQC zN=9$>o-|t*{b@M=(DRvmlx12)zCA=0uI_Sdx4LYbvkcThEx-SXEIZHfGd$?g1Kfat zkUBD+JY2!>mA{wJa1t;}rnT8yu)j)*Bi^Br^g8`%+S5WbOh%d$*{4JJw9V&^#|{1( zwv!TY3~Ud}*1WoUT0ZUp+-(!@*rHeJ#`c9i{MK4o!u9V-em{Q%grv*}dhAf5*aVX=mxLCpYRDLF}G-2qU^Y1xvFDAe-Vb<;^ z$(}edvpSPvMU{ylE3r231@rC6&J-jFdR&~3dWv}iiWgOZ2D$|!_~n$na4LjC)GouSrW zt+dM8-qHXI&vzREyc#hRP4gls`2nb)1Y1}T#?`!Lk}}tc@Fx~RL0ckSZ3*yXT4ILS zvT=<|X9%w7>Vr~kW^6*;Fahb1q8s`& zXd4=m{njYTUY$Sd9$jRKVPNaxrRqq1O zCh0zL37?Ms8QS&Ts{2l@Lz6qK|+`Qi+y z;UVudC~`J|{X{V=VaYCoDZ{cf$0_hrglN~N>vr#4q-D!c%@{{7i)t0?VwbpL2v^LQ zOk?4B5mkgmB};qNjcvI>m!`?M+YU_e6C!SNV))B`J>-d)^;aksE7OE18KO&xQ3*uk zI0iDJuz^Yvcd^$^TGd);E$i-HfLb5t=U`M#E{Bm=_PSR=_=XgF2GTh89r#Tfjnx_W zBTTW6OifUT&HD&BlkiR>>6V8>;@0@))YeJ}sjHG_`F%N0KDG9=w9k+uwxHA>pUaE7 zcjgC-z}#i9wXfu5euidAjLMJwv}wB>Di6wmKMGnZ4H}<7_A`QAVgoQH)w;Dreq0~1 z0H`anK%`GqLr3EScppZ!HcDGjchY`_jCvX)El=X31v~+V(V!PdEizt4}>I!#>&qeP>YVsRtR6p5LHq*lq9JoIW*`RX&tfrN^Rw+?L(lm`vY%^FEv<=SyDw+1>);BDr!l)wWCrm`1!l5K@cIv*4-uw?Ik}di~U${&&9&DrO+6rsiP5G@dyt{z;BK zvqQmaFrxR`W+W}i@IxRJ(f)7K!C^)k`z(z)V1UJD zcM#RjFQ<}S_R)~&ymoZ=(=(}sH9q!$-*T!mcO3!;prWsFVw@|avsI34F|JhWY^Mbl z@v^+GrQ}gboW!79ZOvAmbE#G`EHb!!V}IfWy1&K~c=!npum(yg-mbe8M@OZXqv~Fd z$#EaDP9+<{F4+D{ntw4_P1db(v! z;4HjHlkgF<5?Gdqcw|O^Eh;Z$Q*6rlGgrMXr8ezzDoxE&yH$};rXiQpfwCAT+G*yP zpf`#kqA9d~V5TJO-nc#gDvd#_mop)i38$kD zCb{iY*7!C#zu&t7qt2`6;ZWN2=Aad#`Kw2bHGL!fMMudf#?DvbaZBMoSQ{J-3?Kcr zD57pYb2UmVotq3vLbPHq7s4B3*&ljv$wyvmtcg^d}(Ttr)RMA|&S zs&@HrByH1Dm>0P+DfE62>)nBqCk;VlO7Pzwf;SKRM+Fql!-#K=ARZN)xaL> zt=_0Qn}~)!{lGv%$50TQwG~)^Qs4_1zOPO)+Uzsju|avh|GEl`8|x>%(rWil8gWe? z(hQf#GsWO#Z8C4iR2MqKWc27vm$%LuC!0SKRiCQ)XPKMtVufRkLwJb+#Vk{pz)c%# zdk%RkJKo;V0%dGK9#Y(pg%-hpNpTka`?P5!RLWh7ugXDutU8=K7x?JRn|Yg79-Fub zZp%q%U1#@HyH11*e7(1bURgxj`p2vUPC)~KdXJn)DdbcS4P5J)+M*GXAQcxO(?n7r z8e#yZHoDWt%#v084SXy8yp6+^>v|Js>U|5NM6P;DwK^z0k5F;A?S9@fUMaC+2SX0@ zvK+!B1-i(htF{OvypXt|r@NE@@kHmD>lnzI?`o8tzZx_iG8zpGl@xK2;cAujGNj2f zLpxQaR>xw$FPp^JmM)$<0#v!)RcE<)A8Q0Q(rnU9PK_9HR4#lcvfU$l&0)6;hyx0OFSAw_c*Jj#)`G9#}gx)Qpefxb1G0vwG z^&HImE}h~Kw9`*&SgjT}@08iX{hNp(o()I1HribY$@f%HC71wVZ! zeaL_fIJyl(dK0oCgPV*|XXz1xrLQ`4br2LPzE-8w`obBD`H4bBq1a2tU`?XNx)YyF zA+70)UTuu)RoZiY%jNasp-e%f29E9mM0x>fj2owArs;TZ%g?i<+x>=AR9h`orV!yk_mJE2+-D#IHUsnzeM`kV+#B?mg2z4pU$$@?6< zX83H=YTCg}*~1##uGs*7cQf5&@Z6S%+jMmA;Bp|)EOIG>D%yKMN!cHL;hrDzxxKY>f_Z!}OWjeCUD$(hpC zz}1NK6^J7oR2e%qD_dnwS! zh|8o}Ppp_dst&NoM-)2!Om5F<&$iU6clt8)*NU`HW)YgHBAH^X&iEtm_P+VB=u9d= z=;0I_4OfbRWwU)|m}?IgsuBZ(KRE@GZe;g}=U;i>_BC%_y_KDhY==}I>1{EGxs!h9 zUW%y_3sySMVX%!X|6^+2h-24O>u-pWlDRCO?!{0zAb8wnP}P{lq2{0k^}kdqRhWmR z^(fBkkCt#Qg_hZpGZ&y|g8dFwF!k>tnr5(G*VGdl9+6tPBE@GG##=-lFiC_XKIEJS z#eaVmE`UW8F+(U;Nvl@VP$nXcAu%@UC0U%{?9J^Tjda3CX!mz95jYanxE-$4oEfzy zP5?&?G$a?JSp~#u$|I_k3CKqTmYs$wVaQdXh1VBq)?&SxYiHq^F+bWAU`0EOMYwUj zwA7Zx0N##rUH(hYO|x`^hFm@_49v!GVa#(TOo`eY38;-06(w3;!oF0hOFYVTxlSUI z-Jd6?R#W1Jx-25+GA&zVKB*e6Z%ZcwVnf%X5ZX*8=4HYLU`_kT`3sN>$#sK)ece-? zu9bleHi?0}-^+JMP?IOUfLtMgA7?uxx;!ARC#ea*{Pl>MJw;dt-iCo9OFe=wYNy!s zcXCL|{r;TFNt@;c7DLhq{K|nGaure$KhXrE?Ep0ei*Iy#b4jeqW3-eR7J#GLUZKH- zK7)33u~0I9kLyjGubw1oVQg2d)2q|na$hX4w`KSU8Dghq8Z+d^xfoNY!GTtKvYF?{ zZ!*z?$iuhz@X`8+I<^R=Ta@JtV;fAt_Sw%&%!rI=6}#-bzt2f&=&;SpTdNSlVZTj# zQxNVzeIVbC0#~u$5a;I)sNI5f^u^BNYG10;H`F6(aLOMDwZ(!n(EHy0I8gdc3f>0tBwXUIlynvAvr2{Bc%up zNk{?2ZZ8M)$|WJ8dE81$h`{^DT#|^q(arl?oIH=39k1C^HUKl0 zKFX4KER*X~nLnsM05-$ahfYMN{e8J}!p>cIx*dlEM61@8CW#KZi3a@GR+Rve58yNGbz3=jzIOAkM26-W3BA$#ia+_*XH89zepGI@rBu`woxXpsXYH-{6hr`9KjY_fS_`MB01uhmNsfeSz@d5EJpXt5H{9Y zDzSHZgrJ3%N}HWX$jNhosIkx&)KZ)_a#^}bY`O+WR>9+jr-b!`I9v%Em=5rKNv0-Q zV$XvxHvVb;tvq$^_`#$ak_#rC7@`f560&%IbO$bW0@5NgeF(i^*-^l<)H z$gGhjeVKQ|Zhkr}cbz^!>3V8|#H8AwQvh3YzEu~@j}?t2F2e(-$Hbhyw>jY`zG!Pd z`V?r7gT>Gz*qGYwML&ZS;Hl7^=Ll>xwCNvTsJAL?#ph6v3?cs)iXaE;i;B=Z2MX^ zpI7fZ!%zk@_{FMOWb;oOZ)&QflfCaT=K{u&fV9<)2P@Fq?3p#&DX7eCa<>v$Jq*}} z%LbQ=BEjU@VhXyuB&TiJq0OwI#9a3TYxhM#L%KwC0LCZf#X>iGjT8PiE4rVly~e_)qRXFNL`q+hiqFp{(AH zFl}Kx?K6(l)NqTI%0_EMKX$K{y2#F)-YfH?aY3d6P%)&O+0<4&_bKMKUgVF(#nRg6`YgPE8s|cCC4sA6Kr|dz+ zL9Tz7w)*lDTw>4>JGz8@QF|@G3KqC#Z3(uJEAm-mt~R8CYS~6rq@m45117`5s(nszY+XTF%lpVgE-bR{{>z-o_7I5i&y<%Sc7` zLXpUFZONKFTVr3Mv0Td~lM_PObBL@LF;}=`3o&*T#kE(mFWnR~BKypIN4{IP?)|>+ zdA>8xdCqgrdH?_a`Tx%QzGwc=`@TOo?;~s#XH;8fAuGun(oaz!-^0oIOtlqkAWX|g zs)}%`Q@Z>h$HIv3Lb^?TNL107#mlx*TMM=I`gsiZC@ z!|t=fVl%NHZ5I=x;WZ3`e_rZ5BRMUYB%CfKP!Ku)PYmKGf5zjf-u(~3n zS=oRoZquT_s-x8W9vT*$mrW759(7>;W$b!nh2jinxd$q3E=|u|O#Zs%aH~nXSpmu_ zMcy>lUCs1?uSu~QZlKLPPEYZ{aEh=wreGSe3A_i_7zUeG|YN880r?g0^C}5Vm3a0mu5mqrtfj{u9g#Bb-#g z-OWyp3B8cSbyT7tHTc@53z+TnuoRsy_q^iiH2OH^EVGLMW3f(pQsIJ_?2*Dryevv^ zGbpPxASfta3z}a_uGA}|N$U#BbZc*BW?R( zeT0IPJP1y)l17@yPYL5Wcg5k-HO$5UC7N)Q3bYYas6e{P#o85ckN_tgG`#|el$$Dh^P~c4Rw^R|IEgr~>=sBO z!nJwxQRIM^Dtj~Z_%cIuP3kr$r6*ggZz-~l)Y~HWyYMYVeLOj7W{TLxo1qn>x@=Hd zV4<_Nj-kuqnN-EMNF;eH_hT&X9v8V?Dv1nSxH+VQwr{U;7wiX%bQPXoc_CENpX?+0 zs+5ONd_HSaZ-FGY|57;KIwCNn^vr;Faf;mo)vBe8*zzU0i>8bDLsrlKz&1G`UUhYi zi|eXHVGdPShpMS#v6Cv1QmTyMwGxIMlbUgWW2VSHVI_Ti1C^QR$`qZ3%k3#*`s4n> zne&G-bAq&|PmWcAkKYYAnVuC0FY1(eM*XkBRK#;~wPkN3rTzdK>8`L?hiVHc=x zaI#(5NdFGs+z>*}@4P zJI=E<{91QT^LW7M(%2FlE{qf-XE*QLH3B<7e$q{xZ1WTRj$z}&jers=FhYP;4Av5_ ziEUecD)2&lWxJaS7;k7%ZfC-3bFlUz#n4w7K~AL5zNhdFd zof~N*vOH6Ud{4}U9!6{gqm3@>yDEjhINlJ#tQ&lfb9jDQM1Sz~=6>@e8unaF4SpJh z?#E-Ylut}Ew6QV_lr&XKdm7^z6CZ%T;Kh2pG5xH`jhVm9dFZB#CwJkPTB?P0e5YcQ zjC19TbKr8Yq}Va}fuDR#lbtq&MV@4zo}2enEVXH*0?cOHO7Nd1c2s1bJpVFm`3t^D zD$@~)AA^WcrYlFn)_P~tsu^4;$p=gAz$<&XkK1r6#-1zafn5Q(=L=B(8_-+|=>0bZ zmr^{veHceOf|HzDv|4XI%wZkp_+!66Z&i3R?6279atsGbms~HHHE;;tMkcwk7V9k) z-EelHd-t2-jOl>QrFM8V6u#dhBIx^~EQvkw*AG3F2h8z~5tt#GS6Ul*VN|nFFT|mnh(1JCXr& z-osIrZ>#`T*0%o&E%@0v!`S}aKP&y*1~U5f(*IGT%uB-G!f8%5A>PHDy7F4+Hsa>$ zi<2EEPac1qg_XFvBYd#B{)NAfQhS)lpyGh8xbs*HZcUCa_PLL&PwkGm0B_81)9)R8 z%v>>zml)1xUe>8TF8ZP~Q-EPb8+U^B6 ze0`E3o{sBDx^MDWQp5exA?STJDuQx(L8$IE-4?mK(kk{SxMArM{?~_P5gz^tR(GH(lT7V{}}2rLxYK`2JKSJn(G(d z9Chlwzet;FlpdB?3wYnq^LWjC`;f!WGQPp5XldM8b*XQOWnN=^;VAm2v&U*G#!ZcZ zH6QP@H6Q0Tm$%Fr9b&>ivF4@-A9;1Jn@PVtFYu0)yfnVlc<>@p0_#94F)KT7R~H*( zntbYIs1U${ku~$r5A$~y(d2iXO|sUN&JWI+n$rFCe&1}Y%Zgus?4|W;^Q%<~F-<>` z5pEQ}WD{|zEH)=13Crl58U1w3cv#+f%LG{Fnj#jVFdy-uv@6x23`j*Y2+xTMc z+u;ay-%Ux$#sJX|AwQU9dnxY{kW}8V9H)gWU6GX!&3kDp7aXK%paphjko+mYCLPA4 z9^R4g4zpr8+Fx~4ceB6Zxl8zB8sEa$DuvV_hEb7go{tt)HPY7%NldHz)auWKI+;|c zt`hYn!%{=N0(*`%@2jsV>#2`??8zj$Mi2DJ{WhBOpoi^^W#Sw zEkp-E!?$HFF|y7?Kc=&{XXreejSToY_@o8}So!W`#$6!WFC1>>j^yD<>~UaY-C6Xv zPRp`vBkmqghYkcG&Q-kHLu2hcfy-0e$HC4wi%U&_cvCq^gv*0=4 z-^K3H5?k@$rxr)E1N&P#!=91a`>>UT!=>cui{dmpYotqkb$vfC(DS~gLEr}cxIWx( zc)qmM%^{YQCZWa_^-N#;fw#|ZS17`m2E>*A8G$4}^8y*_($JoO z({}&l5d4;v4py!&8v{Mm#8+Mq;dc1V*2319njdkBR% z3!%SqUjYEupSM0A9XOz7XEF3wA|n70_(ot11u>(JL*gz-^jCtO?}d!HVIf{fnTrv^ z!Gd3DYrY>Yfd?Lr17@4@v_r`-J9e5xGH%6pa+@2+SVX@Ahe!i!6u@n2= z)W42W6928?e}>x4jfd7R0lMjSY|qRfk}C(TN)klxrX=<(`J4VfQ$rc*(!tDn0B{KY NZTZ{1~BP(}EHi5Cw!Wc)^w`Zez^RYtAgomr@6r3V!(%`|ZjBCsIvWLL}X=*N-Q z9K*wB2M={tXhm#BM}|Y%HmR&yj2V{9Y(SLH)J>ASZhe=*qHsgIaiSatYMrDRmi|vH z_bG^)6;20cAObP+c_?B0qkcsOdiSXOKnFqTM!RJ7+V(YLn2Z?`ZzoXc=yjbyB#DQ+ zU!4XL-(0FzYwz`=QC5C@w}A;)d#!AlW!q{}n#+Q|k50I@hcsRhU2Wk`i+YpSV^$NJ z5gK1aFzjL4g4!l= z0CQyD`j5v69>z?4bv2M#)w8?qIdIx_)h+T_uVc%KqMvPT3cq<0i_DS!|ndej2+ zB9w#0AkoRe?L~!b}+s z<~QuC?dztCI5M{I60=q=N4Zdn2n|@X$-1bP8i2ih8vdCtvNa0ZkUnNP!Dn2nve0KJ z!xz=`Z@t6G92Md|oZM~lEf`q>6?ULX?WWv{cW#n?c%f~1`@Sx!pH{Gci2SaBGR ztIUjZjqD6M()MZ`+48b<>W%qg?h(D)^0iC+qp3|T0p^jsEuz6Ab|`Ya%Yaa#esz)d ztD5ZOUAEG2WZVzb_@c$vboEYd;l%G$2bu(kFL``8_m}UFl2-TnqLQRPrR(){DSvsv z=E{KfY-?-igFLOGHPeE0o?_imfkf%swtfWDwzl-oZ)&GlAx#v3z+?h-@wb()7cwq! zp`3Ic-%cX@_1@AnK00mVxN}UcEIqCXb?g@q6+rS3AL&iH(TS?Fd$W*zDLR{yRQ3e1 zS2aN&CbPu`x1yyl;%I!-?djJp#bjzc67%tw_^IWBg987RM#IOU_<^O1Z3S+0q|Cz{ zwTp-oscY${uGSy2nlX_VABAiE%;Y%kP26=;v&6f0J5t@|UF_;tsu&2$y@obGW#uFx zV8ymRk`_rI;vqJ-?8mfPb(%>3I%k>xD;aXE=3c_?ia| z?w;3DDtR9L?p8gfGY7o=>XT7U@|J6}!5aq-FJ!8~A;td8sZ}PiK!7)aVIy-AyZ)Sg zxDs zo7|MqU8N$yIpsxB=9Q_Q24`E}zRib@Xl5A?aj<8d5Jz=f^<9L89u&TZT++d3)L-bi zxTc9e8I{f51!1#bIk423`H8fQ>ALq}f_pYuyFisxBz0AW`>0v6&Lbt7{#i8vqgz6} zoz6I?l1vQUR;llbhs4p^kMecRm0LAM!Jpn_t9oYjMH(5xu1OiR1|5qQW6>UyVmj3a zgsC^+4$HYiT3UU_yDNZRc-dW(4pdZ?C?#?GIHSMe}oRyCsQ zR9DiQadU^4nI-)5&zI4q?jP`tBdV+i1gpANi^sBLk~X;d$XykyvB7o1A3nB}D?P+} zHD}?$9mHobrduxKv&(t$tC7m;Hn#iST}cskXR?xV-&C^a@veURZ}UsGo{&`YQkL~q z+%1}9;+>hODbt0Ps~Bx7dQz`?XdTUIiA?TVUCke*py;d(lz+E$a;d81Jp7Wby9B5;1*PhTzx0@?B1Bllp*EAEQB9PtgY5hNcWUzz-xzB9(zZD zg0bZIA)98i6JS$oa>-;q%20~QJrJ67FV%{o&;7-`xUrjMQ31VQur6NmjW z*-Ct?S(hyIsi96noAhSi`-?C2y?to;GfyR(*QD{M5kKcDqk2!D=BhE$K8uC3K9e4Qb~eDpXiF_!;X zSRBOwezCd~#7i)wJ|3;ab6`*x2WLAl@l zQ9{wUvWfgEg?sARg}%E#EDa=W7)hu-bk7UkVt z;m92&^8CmV_I@J=ZX!L>sdsgz@f@l{^U5QdFk_N?lsP!4s#(?AXG4E_ZvZ^J(PRb- zJs%l8Se%J0WAH<72aK0C^Nf!-BRw`$h~?;QK=JzT+>M&bs&u4CGH9WWfpyuO&FwpJ z2uYsIv-g{-Meam_bSA-4_ou;Pvczx4Yr{i3wFfq0DuiB+JY!E#4W79sn-iR>)vtRh z=_6Xd?GVp_udcDOr-L^}o{P#?Yf0SFVpm){(zL6DO=D&QX`c#bKWS!%BD>(S2JM5% zlhG9xihwc0&DU7mIpAyINuzBM!p0Q%;8KiTO8zie0Txv! z{239by&gll7GnR|rRBoYOeA5($jct&(#AG(Gloo|qw9GCqgWWMeNtQ!`flw@hK$@4D&fzKT^+It>*Tx+TPyLvvm)Ki5d9AZSBHS@y5iZb;j^--=wU4Ex%3JY=c% zM|g(flj2Z&esBZc9!6hGl>p%UWW-UNeVt7Gz?D2&6v$pif=tE)FVzw*Ak;3uYDMS9 z`PA?!rRS@R+Jm|rPG7`T7&BBCMR4R_*mefNVh%4XaftJB&rkre@V#y2OD$9dK8?7A@R8ZHWNaA>@TK+4f6Q@p9M)4TrN9ChbvOwYKx$gWbf62zu)r~GB-P(& z|2;_&$%^6Z3Th|Y4S&}h1DEji_g)T<2n|hut3B3&)4h3oV*vJkh`lmX$T7oWHG?=H zki1-yFj5UW4%S98qN;=fp-5Kr=@}Ol@ur$XBijF(o9SNa{9#ir=N_zW@r$TZXs?t2 zy3qQwJQ&A+6}9=xm3l7FW~`FdgQTH<{L#ZFvF-5%tuA-|> zw6Q>p)0-04MzmS;S=ZRvh+D_Br9aVOct@72^}&}^7pX02d{^~jQvId(gh$|p7&o{s z#w$0PYQMsH!rdfxO;D3)p+y6>4`nSU8h-1R&%yy|#Hox38i5J@z zI}uyPxJ7&W8zi~AChMW}9CI$TSfyFd+wi4M-eA|S!>7UF4WyR72vSMY*)w0;NrkhE zCqCEZOoq$wWqMqT)@AXWF>h_1(SMdu6=0K}7i(dbX-ueBO4?4hn;XN0ZjLK0?1^BF za}S_k5qg+=V|+D7$Z4WF^YU8i_Pz3i&Z;tCurm%wF(t$Te_uzQts@QYw9HyUfaqRW z?6G4jUO|#!qM5kjZO1_AVIJ+&qLb$8fkvLopr@6+WOyku=* z4gQhOFv#>NXrd$s<|uMQC_zKTG-=#k;JGS*j<`Qna1`gze8FsQziNX}zA!J5z6%Gqoua{S9BZTMqad0p3*NJzw6Dyv=X4clFW~c{?|{s#ms6 zy*~q^Y?b$xXSz>SFr&2iNg#PFi}gbH-xuE z(rGs9`WFOu+Xl;qJM$#q9<}o`gQ{A4quy|HozU_m#E2lY0{o`I1CnXbfWI_oQDhoR z5RfGDF}RCllIT4VD?>!@*)y6{V7hk^m5)YyXU{@znca*`ScM=e2Z~=w-T;}# z0^OcvSYR|a8HtYCUBm)10RZxUCK>#TBxDGo*7MVl#b`#QB8j=MM^!P8DU4>-AnTL= zsy(%>4tdTQXO3L9Q?@07Ipz?RDCXmo^hM}V0`w`^ZtZ-Igq3;W>8_ubXlD@l^OR+; zs$bKuiu4-3r4fBHH7&((#i@9~#vxydPa5u3d!D)ow5XjNBbsrE6el|t z*jK=%F8@8r{kJ48bxCPRlr?gcL+zS+$hK*~29`|NE=9JLKO-BGh`%EEo^D@{_Yv2S zvT(FJ4oq;T@~&khMfYKZkXyX^*h)}*=Ysspgocp7dZ{D?T!oKL=Q6)QoE}fc?cG*x zO9x!;l6g%I#M;m*o#!1Ldauy-$y=)pyP5-Pu|F_o6=>a5F$XK0gK5jy&S4^0JrPk3 z&c!S4rHL|p^^Zi9B9VW~JI?(Y@_TdC!XayUwpz!Y(Y9x$gKqP3nEy)bFM)jdl$_G) zqeZgdhl@sSQINzE57L*WTFQ}uCFppZ&%8fgMV^qL*Rg=~0RTz_njm$%b5WaCKJ9Y5 zsde@+!~&=I!m2tA>N;k^KB~f3;Z0_9Nx&FuVJ4G~k89Q&m}FKgpoGL|?cjFUu-%R` ze2hO9$PWS3mZ>^$ndE*iE={9b9zAo}z~wYCs#xGGev}mpESbcs9p{!p&!~T4fuEdk zUn~%%%7z8LAnkBD+`r7Ws>+GDwzuA`WVpGi#`vk~ffmCdxFO=p@$SkGs+GNB?Ese>?5Jc}V1c^ptkzc^2Zz;c8a|%}aY0Oz)%{F4K~py>9D{ zH#6@tUd^WABY<8TPq;}mlwcrRk8eRG(sU#8KQI*XKem)zr1Xzb;ziv@U-vlKFyp2L zcBNm0#NlwK`(owgeOxBwWm&i7o2GSUjHk@s0T$@mm>pMiU%Y@lD`s%s<$XXfKD8|( zOp7>Nbw0*45w0K_E!g#m37Kib#*;d(?2-o!{hy8aZ)`~E)Vly{YexGfyZPemwdsKF zZIiifJLgWgulJ15u~}BeXtF!U z*wt{1>#u|dEvuc}8L@t5k($rU={9aHhbawDms-Q++6`hDiu>yVClYTmWZ!TktG?VZ zR`89XY+d_nhV-j)?vQ~yFK=xV9Z)nU&??`c@6p%gB)V!Ew=8S}pnNwplw72c#Y$!}CF{_J&q$CN zl%+s06S8QU!oC>oC{9Aj{&vv12N`y8hQfyl>Bib=Q!s)n0pahHH+Q~dPS{9*g{jMP zHf;mZPL&!_hm>Hl5X1#;z>DfdDFz~0Zr z%U?qL{Ay|d!4tzd)ZcqrfAmanY%J%6fIp5iLhyNx4nzUm&*5SH=QhG0TtFQtnX823 z^2`-r`?Jmq08D?f;QnpEzzBL4urHUI?ax{v0Py~W3C#fdFtg&Shb(M=7TW%qiHHfu z#1DGpQM3J7s`}^UIGDjI78bA;$Mnx-jXzfuX9Z{TgxLNHv_EeH0LlUfI{`2~p9K%J z1V`eTz&H8ypbl>6XM-EEgUEbpw%^{3!)Pe3$wKpw(txQgSW}=v{lV^c*Tu=#+uOw_ zz+Vc4