From 0b53dcae333d93da7a0f1a293f435b5a2bf37062 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 19 Apr 2023 09:37:59 -0500 Subject: [PATCH] [Xamarin.Android.Build.Tasks] disable Switch.System.Reflection.ForceInterpretedInvoke Fixes: https://github.com/dotnet/runtime/issues/83893 In .NET 8, `System.Reflection.ConstructorInfo/MethodInfo.Invoke()` will call `System.Reflection.Emit` when called more than once. This impacts startup in mobile applications, so it may not be a desired feature. Unfortunately, this appears to happen quite easily in Android apps, some examples: * https://gist.github.com/ivanpovazan/2563ea9d2fea320e6425cfcc58da3ee5 * https://gist.github.com/ivanpovazan/d2546d4abad17900d4366cc29e1689b2 The types of situations this happens: * You call a Java method from C# that returns a `Java.Lang.Object` subclass. * You override a Java method in C#, that has a `Java.Lang.Object` parameter. To solve this problem, we can set: And we can set `$(_SystemReflectionForceInterpretedInvoke)` to test out the setting in various apps. I added a test to verify the "private" switch is actually set. I also updated the `.aotprofile` to verify that all `System.Reflection.Emit` code paths disappear from `dotnet new android` applications. --- ...soft.Android.Sdk.DefaultProperties.targets | 1 + ...icrosoft.Android.Sdk.RuntimeConfig.targets | 5 + src/profiled-aot/dotnet.aotprofile | Bin 242923 -> 239649 bytes src/profiled-aot/dotnet.aotprofile.txt | 101 ++++++------------ .../System/AppContextTests.cs | 17 +++ 5 files changed, 53 insertions(+), 71 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets index 51ed5880c64..cf1da6464d5 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets @@ -102,6 +102,7 @@ <_AggressiveAttributeTrimming Condition="'$(_AggressiveAttributeTrimming)' == ''">true false false + <_SystemReflectionForceInterpretedInvoke Condition="'$(_SystemReflectionForceInterpretedInvoke)' == ''">true false true diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.RuntimeConfig.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.RuntimeConfig.targets index e7f1364f766..01c858c77cb 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.RuntimeConfig.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.RuntimeConfig.targets @@ -36,6 +36,11 @@ See: https://github.com/dotnet/runtime/blob/b13715b6984889a709ba29ea8a1961db469f Condition="'$(AndroidUseNegotiateAuthentication)' != ''" Value="$(AndroidUseNegotiateAuthentication)" Trim="true" /> + + <>h}g)ez=+8BCb&XK zY+yosY;0gyWJqK}Qh0c1baFUvTuRQF>?PwmJMO+&#xs)n$^i+1GBUxLW;-!QIXS_N zS7p+BK?56iXSCgyxk%4sJJaxBrAoQW?hArMHBA|N7vHlra%;hMWW&6qcc%Wq9iaEpbAe>xZ!!p84VQbC`3bG zkR07KQ#1mF$xBVEi^j@4zgcY&r$7cb^D*NUu|=I(Ez?K z7irqEw|OJc0(6f;mhsA-?Q;t9dYZV!?*020_y_QGm@3qVtR7^byqR86ws5wSDQT{v zB~0luH!Y8~l4sKTu?*R;MNi(E(diScru?dfzi6X9{%jG-+DiX)ukiSYkS2-ANuhz^ zv0>qX5ls>k0uy55V*`^CVq-#@B!z`HNs8g^)D_#}LtW8NUvXA?Wzim*c5*{{U6v`o z@8ex2t$**{xdV+3P-o6>SzBZ&u!>-iB3AuoR&qb^ZZr;q6@^%GN_fO=&C8B zmA6wi=)X&9Me5&`m9{gw!IG_u9u=*(ImpAUDv2DWlb2dWumO*7(nPhGa; zstnUL7Y_JWswX~pFMQ|{k}D5n)T-KB>E76s$>@WRFerMXKIMRv|=Eha%qmAkY0 zh{>9~JI1pqGO$xEIjv)JF;zt(FLi9gra_l!PKW%k6wTem0@)0?b5JdLy_3I~3GGl> zrgJ)*h5K(HW<#Duzl`Hm&(wGUe;uXJt07Rli3a7NO(KwZ>M&daVY7OSB0lk7mYMBdJhW=o}K zw_vtRrgv)~mcuqr-UxP;>$~}h6)P+Mu)sF#b_0n2uo)vKeq z6I7wTeC*^VyY((Dul6c0c0sjM{?@CN({61RutH@Wq?Zn5>ek2|Hq=`>7p=@zuuN>8<6WfROp_bSW^*(9j1&ITiqVsBsPeJWu z_qTs7dADraH`qL)!Z3O6p{rcoH;R2Gzv~+zjzamF zbk0u{$24`w&ljI-`ZB*M`vMQPr8utTo(1XbOS!wCJ^M;J_6uQO%liF7`3XklLb;2a z*w4e|B>eDC_aw$C&*csWNFiV_;yiYDIOk?Ndox*5#UV8QK z$-a>j`}buR1@W7V0(Y`Hvg;r_aSPg; zvhSc|_9H4&I{RsUaeMZ&%q;$p-IiqrUt)LU?ZH2YyE?)zhqPh$ z2=+{N9_1^eNBObmpq}gn($ko|lx%bj@d{UXX_e{M8r8U=6qf@=hsx_?2H3cbQ}9^s zDg(#3ng-fm$mP$nra~x|p(S3NoATo^{-zxi<{P8EVi>(m2N24z4&ta-t}97nrR6Ur z14J3f`(&@NL87d-EE${5oaEiHy;wQfa$G~^EN6`y&dST#ldH+}sb$@472t+MmMV{L zUJ)O<`L7^T#(RoN5GzXWU6th6@wLs$O2S?IRY@KjUmK&zC*xy;E0iv>?u1UvO-`NA zTvUOaDOL0G%Y^Qts+Jn&)D-TZkEE(R9-x%>g68mK~B={PA&cmk`bn-j<>P_Id$ z!dp8opOog}15#;xi4UVXgpU9|^3|kl;R|V>>^`{;^TR#W5j7zD$&4e_=-^^*FKR-p zBkxX*G;1jXSBMBXrm|AECg4&g$ z=G|;QEJ*I3nkj;zagnam0=+{(IuBJVq&n6%!v_`T_6us7XoSKPB705?5Mi3s{f2A$ zcv`rK0DUB%OiLD#pb@g(^jsDtS5I#%q9MPO|4a`TF`#T2IwR917Nl+=A0I|Nr3S>x zl{1P(eMtGzb>;xkK)cVH*+?`5ZI)+ewh@gq`Oj)D8iPKP!)Aq|Ygd^|JI}LF5wGnt zW@m{6rKNGfyrOJBJ47Tx%$CZ~1e8x#FR?_Cq?Ms_5=FA6;d5eHQ@MLi0&6DcZFQAp z=T;Rdur#xZb?O^sIqCe!(KMRFl4@Df-dg6bgrNltX}Ub5YYLGb(tTbn-jd5Fw_Ips zMVpH(nkPgnSX(MTGeZ%lo3Xr-{BT~VXss>YyS+pk9fQ;Swq{#JTxN{+WbLH$5?8r$ zzPD%(Wjh%nYjU0`AIy&v9iYgBqL#?gg!*XX9r?WNE^>i%6`i2$D0j#PqBF>Sck6}Y z>=50BiyJmJUFToAXT->A12qPvbP&V70|mgiDn^k1EQnmG$Ac zaAgW|E8|EdS@KN{dE<~_7hueQPc!MeDjD{^tLn05yJ^)(I|uc&Rk`Bw*V&aQ?lKG7 z-DN{FhT&aiyBO2hgHZYMr;W4NEGo0fR%`c?OOBgIQis?fjE z)Ov3-jyqYtx0+eXhWq03&|V+Ld}GkkaItqpd|9O*M}Nin^LQ919VFnr0n~7D1Z6Iu^--E6D^|^QTWO*KBCPGfI$(zA0^dz3S(p)!Nx%o%S zh$hgd$_HPkiX=_-PLzmbO$Se8p?!2a8IBsCb}~++K#P|0WE+wChFs^L>Lr?MA^+4= zk*4YIQ&U6>O%qSg6X}|&o=IRWWtTH`F>juJCJFQAvuFCawubF(-Q;Z`==8RhEzd@p zZ6UU?>FM8!v(?a0?LWIhv{y>mJIrn^B(MidwREf@@RC)V+i0Gop{hQ`ySM9B@ql!~D#5B46o93dMrq|!}6*+IH zu3UPdzUZ!{E8lv_e=gL=WH|C-Bi2(EU(67>+Vb_qK+#Lni;GdBwB_fVSzlT2yB25|r+(K>6lm?E??OdCP5ZyEDjR-ZMHFhO)AyZ3|2O(@ zvq%w_zf7wn?Jv2B0oqXGQjqk%WUw^Z;Zl?sq;(Qhtm*Wn05KSpC0|^M7eheLWy0mj zVyLE5mv@=NKxh^RoMOIWxYlmHQdf-7bnQxz7^$iJ)p#)q)J3v86=mP60c^BfaJ2&) zBOhIz$xCb$Qi2v`+2abb=o%LC#=^Bk?)V{2jMJnZ$9PRuuhr!fY;?UmTDPv(!pw=# zPOu()$v4h&?=^QeNnX5GM@)uc5}u=1726b`DmZG$!ly#e1!sy)uSuEHpqQ%LQ!!nk z3d8vfx&3-$F%yaz^6B-Jd=`>;1=oB~sf^rnqY9fX&)i7#oCCXxc{aX{x%ilczqiT? zGW5sFGU;X;F;7|Kikn^8eEH(0kC2e(L+)Z43p7r;rKZ4-Z-t3PkQd4tKNbkmgv8kR zVyiVj{iBiQTcxSX z&k!EnxCUa_g zbG|{&xl>JSgl2=>d8e`1r0I`4t;7eKQtzgU&B|Xcxm#Ck(YmkiCW@_^D%@)(wrR?~ zw@_@?^v}ICu|rep{Q$93)3E!wY?r)tKb-BB6&|Fq4`ud)Ibx5tJ$;aDegvvqN`}gc zvh~A?>|@#MVIB5~oc}OZ?1iaBo_&}m_JPzWB~|R#RP-pl`~gL12-Oe-_gczRt~ul; zV;_fzPqmN7;}+r|s6-Y%&NUBdZ#v@7t8;!>zI+@jjzD!-)_;XC+`}(gvG`um{J&e+j7v6(YR_u%%Qnhx&q6SD9`jFoOr0h&aTVt&obBz$)3lso3h^Xcy>#UdY*>~^6lqI{3n}U(J$K`liR%hg~rc_|0mh% zMG)r8B`-YO?m$*W@;1KtU3};wdB;YDKQeD|4~o003fuU78#O+JuB-nf59n4}2>V z|L3j!Z>tA>2KgVI9`pGd+*NVmHOx$2D3NM1*28>hS+M#|>lqtkzOrPs{QVkupW1TP zUX(HvZs)9%U_citXJa)52Tr1THnu|8fEVeijrnuKP+cQ=7|crus11rUShO&;$0&o< z5q284V35b{4J>E5QaOQ~cYxZSA_QB;9O-5?=0im$D{E(zhThSzy5>sG)b$9nqhOQS zi84AseUqiJvNY9Xex?&ND>{*=Y0@2Z+nOhJmccowLnWu}}8-G`P8&$MJ zsZwrK!-2Ilt3q@&)Ih($G~6LPr-u$~xapzYR8Lnu+*S>Ox}YAddqU8UR%y#Z`(|R? zrYNTnJ2YO!b)7Xc+ zU0E6G@5D^gr~wZ@YEy<~nl%+#`MRU61FfEqT_~^jE1O0w?en+{%Mkt=o0Mg3M1aQS zWm)a2wSlVWsm#)=>~)|}8CIKalw~bMUF{m?ga;EyB~C1X1<_|ttR)Mk3guW65u)v# z%CQ9^RO9dESQHDRI?mYQ30HAZ2WM6+A~c?JX1hcrFpH*^XK7}XLaUxd16}E5c{WDG zXos;CSX(nzJ5c-&tO`A?z!F3~ZL3$24HNa>hH$0R71n@rAPf@rl z+ai)Q{^ZL1Su$<&Wv*pYS_ZYsDehx5g(aCn-B_4trV-18-XcZgEH@S`QZ*iNLp^D3 zEPBGLR8Zm2GUN^{%qcL^U~Wz^Ram@ep>a$V)<~pVfvTX&wbb~s3TA(;G{#qDF(O0b zn5qcYTH~>*ESt3yi@4<1wj4Ap6<5904fYkXLoOCdC>zV*Ym(O;R-ycN=4Sf%1c2JLu-hQ3jC z=HWR2HkeR@t-m4_U?4t5p~w%QVb$3{mq8F!WU31>iXnvIZ_pxN*3NS<=zj$t0;LK* zmdTgjF2wq|sv_nZfb#u5veIsIo)}oA6qA)+^?J^Rwx|Uv17zIHsV~?ahek{sm z^c$OQg~mX5jf;$?5B*p@my$O&r834sP);Re)Ib8pQR5mc#2gRJI77|s=}dvmO-z71 zf&Qt%T8fFq&NDz&JIDms}a)?}e<3Vl?Qb!1bid@UAFt7|ZWr(!AgFt1GgYGD;; zIzpt;a)mQAo~XqN#7tl~HSk9noTYKNKkI4ER%nxr{%I`c0B2CG0M<>+1)idr0W3+( z)A(%wdyma0EI4Nf3C(;uR~zlh0(B!*DG0|2%!N=du>585?!gwvcxJKEC;I_)H0BjGgm9wpumMTUvrJcJMMBn8(*s{G@S}$ zWzBUktkn%MJq={;;yop+`>RB?f>@+@Uj-yYT7#{pDM2inZJmcT3 zZqhPs`+|G24=6Dhm2k6;YiKa5F1Bb~8O-9uR^TG~F&K|xn?~;t*2LTnL}KF~@E|*5 zhtgX@728e-Dhu?GX%__DS?xqmzspDLhP+E>WEIQQBtm(5`6e8pbM%{SfzAwdMd25ypSyQoZ}|;@nPM z{PPNn18ko{{WcooAOyAU{3(4KhFWpx-?qbVY=@|3I14n7K*ar*f52;t&lJtw7j9}x%*TA)u z6p2yP360o9sv}NnTpfvrbqctEfUa~ck~xagkT+0K6l5a`GvzZ{t{a6G`s`a%ta%QY z&uKsu%HQWvEP|bS0Onh?Y4vP-lhhJ^%QRtEg3d4alZclN`27prCtBkNi=gu@TuJ zG~0vWaLpBKEZ72-Ok73iD^{NTpwLi@&HS2fdR^#LEURW-hyEJ!3hmKsJDUTQsmEOT z4MWfEseV0H)#D~S@G$jE{D$IN_|Q3j)6mOKKSI8xtAt!>#+yG`qFTG`R=$A@v2)-* z8|2&;TQVyiJC|vlo6{2~9B#wwXRE@ksm}(AJ6hHa^Iah7rb?1p8KfP*a!;&5-_stG z8?aj9zQ$b*P&^)Jyxssk`a_K_4Vj;K1YApv8)EeN7>EbpxZD;co+zdd8)CTe3-B|# z0}t^lu!OuDv8Cp3K;#BCNa?#q%uPI1GX35NEyC}>TNKn7W34|lj&016#h<{R=|p3U z3I76KAr^;1^|#iB#v!TyXzUWl>WXI?XDf&28V|-{#P9-mg`O#V3A{#8@vOgir5!$q zX94DGAhP$(s$Q5`N@!V49~vdFY?E0srVl0uUNNYD7V~e)Y!J%fxxE?Jrsoz1H7hPI z@`EZqHYOo4Dk>%rA7OzJNiiXT@v%u!fze6vq4D8OLYu@Vhj9bpE7+)EA}Wjk8J-tXo>338pcM(PztsL8gMVV!RhUMy{wKt#@#fRRC5{x2kH1 z51pIG-6|C1eG~^o9^052b!Xr_5i!ngQm>Ss~YgXV)4{|_)wPm zbn^wPL!M1p8HeDuIo%6#2N_<}sws1$$<5e4(_1;)sN^WGVfui*tz4|GP~W)l1>Tiv z_sLHaHh1XP6c#ILSO%=&Z%uZfv{a~SLREpLr?Td(7JZwFdgTvIW%8-Zv7*o%L(Tvy zY|bvT+LV&Ut|4LmE!as`m;PwMHev3uDxGb^+#|gu+laZxUoF{e7DAI-u_Y{&yfg4f z!w}tbS>zYZ!bxVJrHr7*t&yLP8*&dGDdgOtm8o27R-HvrSZmgsMbpyO7_7!9FCChf!1Ma8;q*!t2otBuS#^Q4O&p-ds_@i8$#WHRGFi()8KnHl$WMoS~0V9 zLe8Mv0Hcw%Pi%|9S7VLex5aojjw-cd={#P@Jg1s8y&WrKCcp|=mE%N(bhsVH{Y^C5 z+N1I(X1jF)E%cq~Hn*h`1)bT4;o#pLSXt3Z+a0se z0A^^LMEk&6Q{OBWgo($JES7AxwF2!whf@pfNOWX%Oe{O7cy63S%asY^2T zj%X;epy{An0nR(pUmaPzYbU5wvOD6NcgBZKb|-4tiQ!-x%-7E74t+PPA?ZOIJF_T{p3tajp@!i-6zAeYU!bQ@J&))GIoHa{ z-WoHyu=bd!Z0v$|GY^_R)-&s?ke+v84MaXLn;LY*n6>~|O!K>zlV-ZaK1wB}6^Q4{Gs0jn;bv70S22$T{thPA_=7Hkv`6*GX zyy@F+tOp+~WW&OmwE81fnhJ7|w?kmFr^PwQ)S*B_J;``6Oe5~0l04<d;}t@Fq}4Z zXVuM-;1N0-%u&FfFpJ;iXU9h?7aRHXKwmfpJevOR>z1|g5<%ONxHp9iW;h@+7S1I) z&&_cP^%FD4ThXDj@S-z4nMq%F$2!n>9VzLl!Q7s#jF<$s@wBEVi#8`)A&>ws>b8P8 znZ^`oCR6!b7T0sCGUCa<>APAD%o~zZoEy|`V4iBFlcQo2BEl0AZ~!?hG%zAGHaajS zEU8IgNLX}qQW$oXqe3J2G!=!4M|BKpDf~@bh{Ko;^)xGOdeGx=k~`6jT;^cT(4hz` z!XD;K@C@trW?AZ}UMx_|2G62Cy)X=%qdctkgX=Wg&I2KE2TiEYK!WxKQI4z0u+>(unoW7(p8A^_s7K!akz-{+I}VOcU|t@(FxY6ZkQ{jlKAI zAKCQ@UG2~OtL}rSa`4@%-F_&-px8&AMd-~AP+k#>V*C_>Y45FXPO4PfKM zA<$&2lwuqlA`U|~=*$2%K^)PTIgp(YpJ}W$2#ZBWHI5mCXM0TJ`9Ua+pKCOV(c*mp zoJJjsabEtoLSZe+?kUEo?Mv-;xtJXlUja*K?O?W4e62Bl2ph^y(B2{FPEJB|LQwe^ z%-c}-raw4M(L-4W^9)p{^@Cz(m8LQMK9p4v=b%2TiiRJ}orb06xM8d!KQHvQI^_>z z9^xB#oTr(?SdqA(5i4T_;v%qwfUY!cI9tfRC9e_aV!wm>TdSm%j9}s7do6!F0+X~$ zI>hx6Xjv}?mfi+g1s~H-RNYNo@jKK{ty}#=p><1t>cGRsvX1;OLFWXXQNb|e)|@5iDviHk z{fq3zu>$iSg*toqGl3H!v|}7|70;o4W<~l!p_P9xtq0@n!|k0~^e@aS?my6Y1@lWm z^`r#|i8MVFUg}4iniBX3*G) ztiCCrF-(2x%A^|;S-P-;#-y9m^vndAV^56^AzExfRW}`Avp3aT6sKGqX!bf=8O|N) z$RyTKl!ncbY?E1QvkVYVI#gDo{*zf9?2Rm&%pyGuC+M#t`Kql_?Eu75iG6Ykd*{}m zu?=j#p=!4wz$o`W+|;zKX>M_gyn=$fLAgEp7xo!oP!6d=spKNqK(EBjEoZj#q-~ zyKW^|?g&NJr((YMax$xIR)(>XsVar(Vjp#HzJLEWi-Cqvy^ zUG))QRDt&``gIDLv8o!Arm{rgu5s2>G=v@+Kbwk)Db8xa_t8`~LU;l%&bz6H`n9;1 zsn(bAK2L;6XQp99>=0)N}^6R{Uwf3>JnN(D4~81v4PHx5Esm_e?C!)}_y8VoV!I4`*Tq5=2#I zA=HDJYBOvWCifw@=r1&L7ON&gHC~>@(y;;a!7Qu?ghTU`0%xNrMF35ltd$k1?k!$X zL_)Tw9kVf>jskkowb=*|t+h^bFnWst{zdU~uow~xbfm&L*gC5BR_jVX%waLCzADtN z6gU@cWCPeRsYHRN*_~|8R+Fr%99}=^ksn|*g#DSI(W{uZ*~sEgRk+6BQuOm&JeWA( zEh?CYjf;4#jh%;#O#s$6^(zA+5&V=6%)=I86CmQNpTfOG64;(f&&U2>GEkLay~^Gc zf-1wwstkvVX4-ASd=}`H0#vK}C8$U4@KE186-r$oQ|Qcmtlu_=oJvpTv%w+__>}S_ za;XJyJ1vo{nMl{#+Y%Yp68INYS%8+U70~!Nbpf_FM21$EEMy%-Yv4t7>V=*xWDU$V z5HVH`UBu#D+JaT0mCk5~k55pq+tSoUEQ7VD%Zpe)p82kAswFzWBh$+2RfIWh7JWu& zXgflkrJEIUT#PGpf{Zq3>_W_MmoH;Z6t|ce74&g9>r5Q)3=gCsWF&W|!>P=0Zkt<> z+b_3x;Bcc0Or5Rz*VRI`)}F1RB=03`y6C2H`x4xHj>cO{SR1$QKy@d#RDSk=p!2i4 zX`Qf9Z%g$s<>9F=G;b-MaxUad+P{=_7QHljEW=~!t+DMg*3aw%Y=dTWp3O((fwAVf zoUIdmfm!ru8H!{+a5Ozy&en?pU&GI-Ytxu@7->%cPNS{s&~{DK`29LWIY}e7TT;YijV<59 z5r8QgKX{L|6;n0Z-p3=HrZMV$)c5Hcd%Vvg%^3=XboQx4yWYoQ_DpTM^gc#QvozLN zj~V7{jrr@Loul#N_2|gvYW!zCBA=(R?gpfEzQ#@)SVvO=ahv-$U;|_USX!lRp@pin zEduVQkc}7?6AjwPl3f-~IiAm#H!MEvVR^D81Dbz^;JH7z|5-?>m@?j%*gMO}Z#ebcJ*aX82 zdbAn2{{e6=)t9wjidhz!KW0wA+B|=*bq=sOom08XLTu zBkX`e%@MX!)2*x(-)YJ-2R&%dR_tx)GKPo&BbvokJ*jHehC~(8ovUj(DB`D6#JT* ze8^h5oPb6Zv9IxMoWzH!_9tl5hbXeAAbzduF3!1~raF7D{(AulAj%179u|AvO+%e(+R-t%&{-t%&4kyF$puSYQsI^_(^!(!}3 zm@imW;#=TuCV#E&K^;Cu)_wXqhNdwd4!U?W0$A-Czz96Rv~E3C&-5@ zz;<-u6D+-6CGWi~fd631x%*rwXD_SBuF>GV=*X^Xr_c7n{|4{^{jnFPA8zVcI`3ok z#Vw7?_rdo^jraDk&g>^j-j7v-pP~85O6qM3)sD~|QdBcVW7NVs-^f zzOVMPk>))pa752%XeE*du&{HV4jy1N%m+~4M>mF7iXU2tK_GiXfuFJ_E{~y6PiGtc zj3*E_pcj8kQ(zOnC~rFZDcdf7RTi3fkomCRX#GJP|9FZKL|f(~&klB=!)??Nw%_6N zlu94M(CZI1j;Sa9gys(#eTa2qf6=u=cn}g}T`P z%hPaxa2SQwo^BsQ_jmRfvv<}}lztn9qa6*%<$j_J6s2k2Yv$!m6b3Ls(J+j=D8Dig+(VY$*l(aKFU7< zLz@$*Ii8S5C^-iUhNn*8WRo{lI|)Z07`&W-WM6veA`Ptc>`BPtoGjSY``QYPxuuWnokwdYEcWMlL_ojO?WqgR4$+Zj2!zB&|^~jZj5swemc*c?QMb_O+fY{hhjpfjICeqT2 ztd2{QH~t~YKM5a+_-jIO-=ZN-{Q&)Pe+1irf|7b^OmRWXfLP_|Sx1aDs{w4+sd zIF0u5dvs~7p~$9+moN%#0~|>Cm$16jR-<}xtZX}l$PPVGfA=<%Xb<&J8gv<5SEj~O zmoW?Mpo(g~$kM^5U%}k3BmH~@CA||g9m(%126CP0tE<@7?gC9qiu(bhtgae$fy&l+ z<_9cfbhE=QlNZ&vh9aH=bvJ5w4Qr6yf%|C8HH;d10P|_W6x|Tq#;%T8Kw};H`>F{pI8z0R<^6d zXnTLccxnV}!!6sBpO~x5NXT!~V2pyG`mvGZ@iRMaj@G``f$=elsoZU(tOS@sk+)fv zITkq8MlO+pH6IN8IjU{dfXA-sYe&5yE)AJou&dS41cq_RF!7mMdFQVP)^l1DW+>IR|R{5RqmmN%+UViG|=Wk z>Gv?7p9#eb8gdVNSF_psiv`W_Q}xRB?6MhXvg6HaGJ+VNmf4Gm4`$CPb4^RyjY0P?na})%`oazCFe2XRpC{)h*lS*`vH24uVGS^ZCOttOuGP**pDm;yT?L`iKqS6gvGY(z%gReq(+3CcFQv7I*uDRWOYY;Im1WOB>&8hj+hS zX#WZvhFoWT_T9-MXIr<;gh!{$Z{8K|7o-uSviB!^(+6upYDm z9oDD@ysUISSlNC!VoJ{FvRlm1r~tRk@?1UQ7QR9>=VxzR-xM zy!dfDdR>C9UHO^DmoOYxK6o|Yt9KdgNjsin#Acj;^($TO+-)bp>H+GPUQR*K?U2$^ z2D7=6LsM3{Y{uZ+!MSJ&PD6c42XwQY`FFsxZv&p8A6{UG{~YAA>&;2yt;S<%|k1>k2R_!vL`Cic<~D~Pb}lF zz>bt=<5B!KJ4{4e$-5SJAhjS#TWs9PdGmy5wR47_!a9{Da#uEnj7ykgC(BB4cEuI1IP)orh#B+^P1rwz3=-nW%zi?09Lx)CMeFx8tdT zYs_)M3aCwE8+%;K&^XJUw=fN%xv2xMZJNM~m~G(z+^Ak^N2R09PA$?_rtJ<~*tng& zT=UX}#xe}|ogI*EP+%HoIwBl8dvxW&uBE}cKH!^|Q3j+1gY%v7JkGW38>4RRoFFKN zvi1}|-{wKjO7o-c<)BdAw2D%Bac6*zq8ybgk0s9Xke&5qSp~YRQe9Db*z0q?m6VZi zw|J4SGWcCWT$GPWNM(CHtubApaIpfp0T1g#N>!8>1v+v+vntTpp0=&ERl#^ZXP9a? zM=O{WUB>!n{9)LmFKgtWuTrqeNvt~(Lj^k3< z6?hxB5Jd7W$3h|K91F2mld<+LVQ;L;V1(mCr6^3@^>-oy_!W(D<6T6gMikHvJnCI> z(amo~T3&^hHKXC6EEocPR)q(-*h{lLnXe48}-Pk63^wlJ_T3h zP0a>ysISUEH4j@u@Y_3AG4MuE=!7@43QS|jjdX$GarV?=2Y02DLv4=qX;p4-#={t= z5>s6yC_i0x)YK!+oi`Uvpi0!)XeQ}c{#SW$KzT5dwc8$d-bOS98sy}P3bM|H<7E%X z$En1FHx((s%NC|;JmJ9;cyoJs_J#|ExbV6n4eI9la-s#$pvx{iSfp#`8*VtL+)`^1 zdmGUTc$3yt<9Nvf7(#zm;nAkiTJvvJd75do0Y9a(9^6N?1sc@Lm7{%ZM^4qy9<_(6 z9o4VK14Jh9EAsK;S)v25KH-;F{6v-xWADZXh>pNhw9yOYxf5_Qxz-C$7ZgkR7qA6JfRWZyp`w!+)J1J&|KyLf2T9vJSf`e z3;q;ws!5f)kTd=o1oh~FP2EP_v$JtpCp)AJbb7P0fA_w*J&FT(KE3uvi(G)P`4r>B z)!QT+YjC_=R!H5I*q<)=@NiZ{an-pmj$rkyj{F#?FMGN=9@HR>+?NO1c(FazF5qbn z;n^X^VCai!bWJ?rA;90LyDy&QP~dsmR+D!yjbUJPSiX1`!?njD>Z94l9w0> z{RpdUjM6Ume0hX9T4}9TYz*)`Mf>xvq6Ao*mipttj|Jw_zyLnb90v?ybfz;#;f1x4 zg7HxJ(~8=>i8%py4-G#S)F%Qb%A0=Z0s?tma}vaCd%e4YH$pZA@{Vi@89~U7sT35% zgZVUjYhC8jA~%{9gbsT;LQJDoLFoQw0E5&or_?cxnc&}PL>zA-W&wYrqj4yOvo-z_ zhvGCxJNU=rc->r$o#J_8*Lgto2=z2?J_KF0=ULr}d}GuFX#oV~Am6kcehGZB`$8yG z>!5-wFTMyLI*Nr>>p+kfSvj~^p;gh^P#0aQ+d;ORa+~mE z%ni0Q;SF)z>3$QQZR4x#IoLUX+KO|3`Ltl+htJKvn!d#;tbPXJAerpc4 z4vnd^&Tm!5T7-b7TJ&6}0&C28Poq`Vkt#h7?VVekZADNSnm6aq{v8(@t@jb`@S8fK zb~!PfE7c^oAZIuo8Ex}&^Vj?0|2wF>SyWMH`Ye}JJlTCXr_8&H{Yp*KTcB4z zpc<^IbfX3L;-A{nv~)C72Vt&Em0EItH`^hwDmD9%<;GzMs?;2MQ&gX~?|BIN&Xl&Uwf5rO)Tu&nQsLl!xdU_5>6>q0I&bB9 z*@`x2xy`I3yJ2&nD2?M~fD86?%?B-6!(BE<*=n0f*=?~zY+OX33%UrZADQ&9@oy1> zHDrC~R#kiluWzmNf3MI=|0R7vYfa@c_&DuP!^z((zzf=0Tm^nbHCkW<{eyC*>=qcd zT?4+Phi%atT-OdpI-ekJ05{OpbRN!c+Ee3}ym7!S<@jdV1UXR(?^l${%*iXpsKu%* z0mhHog*LS0-ZtYWdm7n_N14XY(B2}Cc05_!*4Vop>c<_83)=A{aaZFth4+A0$-h13 zLH9MbY>&470dPHyX^)x8LybG2<&W&?YI`2QAKQ~%CXeJ#Z~`flhwxwQsVEao@~?1x zL>n`Cees*dyO}(UKeZ>14!n=}T}L#n1NSli0A3Z=`HMfnm+6}hyq@?=V}&f>-x@Qr z&|>_faZVNw5zl}(=~xyz&FA)XFAJ|0zObjrj=Ye+L<#K3i}@>ia__{4^4Ioq>rHoy z)tP$J1N==XS{00ypc~zJWl>FsdDflJ7oNabG_MDrh$)IoPu|z`h6cyD@nVMyE$_+8 zx%fb#Dz7pa)$yTv4j($wlP`Al{g;jVLC_T&tG>CshNuDA@8hMp$PTlnVh8f+z`R^) z{VR~+4?*oD)uOV!acm+$`{_NT<-Pe(v$hp(ToZh_*YkL$Yw#PR(i6kqG4roG z5N%8vxH)wi$ivMR3LVtRJf7|#o3Cp`PX}^e*OpMLhofJmZUtdEo_b3Md1GBY`Q!^h z1%tQ~&u~x&=v?IT-I#a|c-_-F>ut0~m<*b?0Qc~(pE1D7z#wkgcpC?`n@r34 zqwpJT;o64k6!ZP=wsv4#=|3kO+CvcrMLS9yjHy{BL`Rx47|TN)fGKowFovmFz;N;$ zf`+l9gWfDD9>Ob{ouKaMK-*VgCt~9e9%pujVmE#@a3z+812fTnI1c5hcn!YYP&7|n zVeCRavv@NzTcLw~VXYfI9f~Pd4m8~?V|Rr*$3zccN9!h6RC1ur!%$s&LYG3H593QP z8Ok1xg3t?^Tp&~- zpnMGiBPEJOG1!q-kK%D+FffIF9>w1iLp07F&6kRyKx{UQ;p5$h0aZc4S1CRmpSl(+ zZFN0Zpc`Yjv)2g7>ai*><-|wgLvPP1i?{l%Yf2x>ogDCvz$j=&zIkeGOZZGNS}9cC zH|2Z`1&u|yE`e%{^*F{Vv>wMe;6A!A77ug0Mq?aiauYO0j^n{>BIS<5^4cV5CerkA zyn#7cp%r?H_QOvf*B4WPBPnD&D$_LJ7@9C1bEN6oVe@#j3^RbU2c^lkz6; z?(VaoewP`uA?RCF+A8W6%cbTF$+2F}ngiYJH}^D`GA3e>Fb}G^);-NvXr)SO$6qF5 zAz^`bXf_FB=Y=$467F&lGz+aDq|geoSZh5dqoOa-*nBcNx1}^Pa0(cCG>sWp&S)7dF#IM)If(qB{1 zm#hQsBcG{g5Z?pNQs_-%rt&2AJ{_CNb1)^TIgJNY*#PU?xQ&ev*5gkpsc{MRq()EU zQEU@^IE@FIA3(cF-=MkKLN&eG0$gwPRBl_rDl#>b;@cqTqPW$8`oG3<-_+^6in$%y zZBS%k*Z1&r)YctPbfKIrHeYw!&Nt!lRm#|fPn8&@v{76MT8z3gcmuH;@@ncg1O3N` z%7u>3;6ue8;5KSJ6AL>Z0lSp4wx8zC8$gq(z;(Ba+AGJZ^bK58_6 zO8*oL|Fy#mLpgC8+Ef44LsT=*KsORUIFCbem*!*0br$j%sw}y`>p7r$y6SwdaUOzt zI_Dhd^%Cq#7fF4s?7WpJDz0RXU>+ z3vrJ0;UbKVuW3U~OStYpF@$`-;XuoYx8OG&=mBBD>XrjlUW_i{M}!_jiHmtC|H(mK z>f=qXH`?&Z$wS!Zt6F2%&+@mo2AKXIVIWk~cd4wR|B ze|4a7%hZmH1MOYL8}O$N^w%<;&VP5Hrpx&X{)YqIUXCpK(}Da~pz!_WKm%9s9R9Zh zU0i`@@(-e3Pk}4>Xn+0;tgEY<&;RR{bgXma_QrdC#&bA4b5LD(NArcn(%^H&Zur2!TmUR$~k8*rS@#daS8Mm5AQ;$j*wzabXUxTSM$gko&7cu8Z7{0)n5 zHRki(Z34pEwuze%bi1dtl9j1Ut5$JGVF$^iZL2UAwpZw=PmGo04sYGn?YQagZRIL% zZ)Z5d;Gn&lnx!@C=C%xQGqqU5qeNL?wuMf>zVyQ$UX!-1!Qx3dE&s8GcQc)Vs8Xxm z<9@XIQ(n$A%0uH!3)b>hW(CW5e=UkZMaAT`4(dvl8k_t27>6BszsJj!ZIv@{5Ei*A z!&u4DdPBoPwYT(e9dB;BTH$alU+VTAS~NE(Txrc>jP3BMkR7k`&LKin1y}i(&E2xG z_t7+ZfZg>qL^Xxf{e3>q^t80n7-iZmWQ80%cF+nas2}%e$@u}if*KThHP_<~l4V>T$ z*ogI{02ur&_u2~etyw4J#wvRq9Z;Q^c$2AnH)2DzF0^&5P=N}qv;+%cGvce?7PQmRrBgyph=eTwlAH4J}j;>)vLRsYc4pQH_+%##RV@ zN@(mB48P-`XzWOOHn?RAUu?!}g&fn=jk<5;F=m1l0`K>F(1ESILit1}lv33iRrMOt zj%}FOp4r76=+#!N`kUY(_G&PZ{eu7$an9+#&J5-E%d`Njh4#g4Y$%< zYbTn_42@Yk|6f~Y0ba$?^>OZ;JDZT38$5ypO^`xxCm}#^3GR{r!3hq+rhGxP_L$s_eA|HDN1YX702F!7zu1@bpfMpsykj4x13#5{e*I!Z5S1b6S>ni?BMSPT*CXdp`z^$M5{Az z+icR_uzDD$^n5qmQCjx|XXNM~R2|(5=)((tz+6{vAf6BPfoHYZ#UD)V)d%X{so5_B z=5rct#}^~sei7@ptAYXj;KMv+JpMZSf%Otz9b8F@kIF!fPK1$GW_5m+GWP0edCx#@x;G#)y1( zw@T1s1;_2dEZ#W5>wDBR{h8o^z35+k4$NrYb{+kNXglmv-Sn4&NB60Ddc0t_{c4Q< zO7Px()xm!P(A+Toq;pO*dOZ0AZhruE?<9yTh;aZwo&cKsvB$4H9w+nZ1F&Z>1>!`G z`caj&rULE3r4VZxc&c4hOgHE$1~bI>^B+}PznS7Ytq> zU7dyEq2FQj&K3!-JFIf+#e!!Jqd+DJW;ue<@axOP)UvLF5#aJiE!nu#CAhi;UXzU3iw_XLemE8F#<_W(sXopxW+B-*4hSmt? zKZc6zTVOrza142JEwF)&>%_yQV=6+g7tH>Xiq#tg$Ni-0I5zUJpHu{queBx;Sl5=p63=)La)uH+M^R7q0%eLVYuYm+bUK7}PQ2jIHjxR%mC3OY|? zviG2b2|uk`=|h6^PGffGFkd>YN;!_O&lwfvILgsyP#TZH{U|R#gKF|8gBZ#PQ#sNb zTVzEFJCFPDhcg&C|JjF2o<+twA+fbTixH)hg2`u9V|B_$R>AeIO@17B4s)fa;daWC zAI=!|;plTPsD9SwFU}#I&Vg(3cjplMc_04c9CqYgu$}9kS7GX+k66Iv>F2SW;SwC6 zSacrU<;xQ8$azF@MexmeWRa_aun3uh8(mPD+`mAskBJELaa6qS0{R4#E~o(gtI_j{ z3#y-W4TwmyUsUDQbstX3;RyB}JTNY{uk$y!T=$WY+8GxyfPF(```i5TqH1Z~{74aZ zNp-hw*$P=Lhz$bi`SB&yMcww1fxDiUFvC4?puG@ z+~TUbqVD>b`RB^kJ?OxQd4;;~V~qLwbJ(vamJi?ng*ZG!Hu@6FU2Z&3K3>j8aCzvn zE#jKW>98J)AWhXLwtoC|EGe^|iolzHQ}eB7HaES2H7U=1IQ>nu82&UmPhIqvu%`)| zLA~(dJvZ_7eJR1xcGg<2>}YDQY*mbJNMDf2(-(P$r~S` zY4!Od^u_a~%8^!n+uO@W=qDDiIs7p`?IGZXwqb%$Ad1|f$5;b{e!~OIEC)S7qrDLH z1zjGSznQGUwupAJDuQ#5KKJLTPcR$z3Dl6yNLEqXhrwbV6pI4>R+ufCojMUuQGFIS zG7o&JV*E=0%@<$xN0)?P_D7fCyHD};E(H;9DE~9nRhO0^Q=XxfSH@OLa+d`o!x+Zq zlG4vrHEb>!^4v^_NPxZ1@g=M%c=I`urjlTWKaqDT0};Etkt#O#_!GUba4@2jHy&X# z{1nbfRUw#L6=Ri=5Tv_rwAr}Y0t)nURs%=6_(M5#2VTvA{etSEkb+*rM$CD@gmQXb z`xlN%ih`~nZ~qG;)-?rh{e=%_Ey0i%7{aM7*z^TF)B%>_kuT8ht}A%qg&O3j$8}$# zF;|~wyu?s%131*-+b_{fZzx#v73O#v@u63$a`tFw{%c~Qv55xH6V2IQqs`F-q7S!z zjX|}hf^%PE{Hhr+lFz?JCEr}|{cEIM3xh6ci;-&SGWB#&CUgFY$M9h*xI=A*_^j4o zJcF2cW5GQrqes zMdqF+rcO2=|6Ap=V!$Zz!m+~thUpC1+uprzbrJs8tt(`dyg6@ioN65JdaG(Ux+T6- zEnytE)jQ1A_TX{vQ2Y0UHx#}7?^J!&%au^+O%2@}szf&Sgsnb6WS{Xcda;Bo8EIo_-8IR<{@rUpTfTxYbNwG8H@*PZWG zW@|8XgIqEiGsGajdaq&vh5}QstA;_4@IyKN10Lm5$it-c>ft8HoST%LAAUf)XM}N? zQ;d2Cj0B}cFbaZ1FmlcYDyBz69ECuQtTBdM2~*1FG)vLTZNGdPd4Z|8I1Ab#VZL5?rDucDHe`bbh#0lP&mD~ixx!F?s?AgZq? z2=*o_sV539C2FoG3I0u#=$Oniom9;F8k)(79X24+1XfCnPqTG76_}XV-4t)+VCDl4j zs%gkXaS!pL#uon@6z00}=(*yw#f!@5c@p%Y7d3OtH;+=t)qHsWIOhVW=l`GQ!K$!@ z-c(*Mk|3A8kvxlmE4fg5Y|%^tUcq5psE5aTjW5!~K1!br7uur{1Dk2SIY*T315j(`Bsn zkk{FtsE>E8V|sRjE3pBEauqjagvnue+u*Y8w&!(Il-^_%+{;Z3^k!f^-sz@jy+tsC zA63;`fepBsAJx*|2`)DHJusT@`B6)~O)x40HO7?4oD9@LZFkulKyXf4U>@25cT?GJ z$6xbb?Zl7Vx^Zcea4Ip3dt{`7dKbi}aD5cmfP=EqC;FH{oJ5k9J7lFG{gb$i%!-$DTyQPW`q`i|3jwn5Gvn=q zxMj#jrSwU`TG?<%IbvMxvYU1rGYiOxaj$-rq|jaE0(LgdbU6Kb=Z(NyW? zCEvh*=Pmpg19dlD98ny#X-al_X5EJJR~KK)LF@D#a4=8LNyXLgF5Z`u7ONB&$K;|- z`VTlovwtwG_}&$45{xvs2Sg_&mr$g%=A9bN7?jC$kFVZpE~GQ#);$eQ;2>o+PV4huHOjahI4b40u-zN7I}C9 z`bxhQbcWC<{Z4Rv2sPFJ2>u#^7~caMa6~9F#|Ob7p~#u(u$a05uLwoG=n%Xfid?A# zGZaKACBe1@sWx_kCKseoOGD%ImBm1%EO6?xI=vv68p$Zl0y(pGyH>w}ePajL7&2&Z zzrH<3#C4s(>?um6vEAi)QJST*!C@s&Dn_HwowmZLkQD%pzpu1t0u6HBwrJ`( zgT&*gFzSu&)7>yCADjc4)RJgQV|K{SocJ*%F$aeir~5h=M9e^!AhXi;rxG*=E6`#} z(i)uy4l6lBDf(3B6`WFvs_1;cI((uOYN`B!`AgGCT|jVIX_}-%1WT5oDLPc}Kp9%7 z3j$Yim$I}bQz3&$B9mGe#>9Q}D@(y#r5r7{3d0Qs@G4giLT`bJ=pqs+=K)EO;*rNjOEKG291;R!E-?YIj9K3Ay85Cz{MY?E}G-#(>DO+2KI#{Je zYww>NQHkd0GUArCGE$)|aHkpU&c>H3qqS5Ha*D@xVrUiIVtFW5a*HbXE>#fRUxm8p zia>APQJX@zQ8;{65_xnu+8~vI#d&);npRbSJNZ#K_0i$LmE19c#_I@!+wMkCDTl5q z>fDjkRYwX=jHGe88qlBJ)u=KKL#bPh3cG6Pq1I|5IJXv+&`p6DFsy~dYbIE+ zHtN0Rz!Z~s(Yl48UmY~6TZ)IsI+UziiS~~=xLRw$N_Am*s*QMvsY`2hTft2AkRRI# zCe@?Ky1igned??`2+pZbJslnSLwz(vJ3-Ttt298IG2%GA0SaF%usDY{MEZ3GrkGq; zh-Wm!EA1k__BKQdp{w``Z-kF@oM?wNqLEfNU?R3%El0Wai^kJ-ha#D4L{o9}nFd88 zj-H}Pj;6x87jQ10j;3(G-oUiY-C=z45Jm(mG{$$O4;*@P)5h@LS3-_!jIUq3;JU_$ zub<$rM%y2l$myFP1%u9$yv)6FHVswDHJG+v5|xw<%?@#uz7GZd4VEJpO8m`yDHO^EN{U87J5ps6NBkaUoSu zeeTOCh13N7g+zmFl!cRc-`3yU61jC;`F8&<m1!D2nrWQ!PsnAT}0Wp+MPZRWM37jrivL%Yd48hoz zcr7ypr?;en)+}J!3f{X8Z@1l_b0$DP%aK;02hL#F!z!c~0Fybs zH5IlN0&!D|T2l#Y5qP0p87?+xJ|nrUB-=;MHfS9#0Vm1VMLCvoOdBdxx@6gkwQ81% zDpf41R%sj`P_b<3V%5r&FI%i!#WJO8R;ymNZ0TyHRkDd=DSk{HpUYk@=x#^Y)V&N! z%)YciO|x9kToY@@kkyLnmC&p(j%mjadlz=DGD`a{zmX8Xw59geYGCH29NrEkcMW*8 z1T!WL3+Zpg8?ssjjNhy#ct|WY9u-qu|N* z$PJr-$!yTt48&1pVtxSYzcPBMEzsa58g@W(Zv}6WOk#ZpO!7@N2DK6OIw z-DSesxLYu;6FU8SY^}+ldj%zf?h};EydSubgJP+kJ|NmWF=(a!2%N$7Om062OtLfn zA>e8o4+Cd$k61KCj{vvu-WYV)jsmBcdkEm0v8bw!K~CleF(?y10e$&xEX}cw1O2@d z=i;F@cBU}L&-`0w6x|b07qVB{pA#bA32zxEQbsC)LS(kst=xyI;1!Xb*IiQn| zb)_NtJTRV5#!+v50f-SOvxfhoXd}AezAuSZf?XDE-tOpVUICs+&zHKRvcC%M#X&u& zwf+U@!!_clvHn$XZX8ngns^x6gOaW5Kr^%7lWJJMfv@{=_nv5*+yLXKh@KQ_Id6jF zc}X`alR@1Q|DM@9S(1{|EcMYG)(b`CHe7G{azrm`sP9OqtKBe~^1G+7izrJP#NY&63?=A0|*xybye4@%LW zHW%xQeESy|n{E4|U-tqS!jBiBQS5vv>OcBYdFvGriLtjQ+B22nsettwiWkK1GvS*$ zBA(*(8z|l;oVc2u-^bHD>u-oi|3&>MtQ@_CV5&`HC|A9MARRcP%>=Edao=c2pFZYX z4UDt>1DAIulV{<#{V9W&dT+vzSp!tj`T&0Ki(xYC3QgxW$HQ^-AaZMmIX{qN2cf(u zU?2W%5G867d^wm#TTZ8Nj-jZJG!PNOnrI&GGy^;P-}IyG+JaW|XUhpoQTtP7FXd%> zlLan|r^0ft(;FHu9yOFE==8uuj_ObGSk@+-aR9-tr3)OFo@0j7059bW0T+rKfPS7E z?CZ8yfcr^+Cj%+U%b5Y3&dnM9aNR|ND3g`Z_J|k;TA9FzO(t?OgY`!qbr$2uBL>q@ zg^$>fAr$GK4Jwn?S@GBDj~}z4I2#`yf}yqmh*|l@Oe9etFp=91qc$qYZBGzmCwPF) z4tNYO12GZH@@bIH zD|l%*%~JW?vfwA*=Y+A6{GQo`;N~KwS#zl00h+jkQVxFWO_3MaI$ytBlBY z-^JK|(Pg1XV!_*paa6fjVGW=~)=UsxN{5XM3g?4rl;3xqM!3FrEAY zsUZ~R*~HdMBM5T+hMfCLiVcYNI2ygPF@DUmMZ4|YOWVGrCAtX|H~F{e)CQISz>T>5 zc!EJ$bAJUBBFi~B*GyEu&Eb^Doo8Z1z6CIdcg`ei%Wnxb7nf4h3WABhrJZ&&zM@UJ zs5KO+No0JfHu#ZSZ0$*+wotT@B(mDsXol_D3;s_U60bRg7tLgkY}P!Shtc znuenjPoG3Jbqw@D>@|yEsVEj4WtW)FKrg;BiN*y|7jRl!T_Kq5u3i3(YnqpegBEpD z%w%fm-_7IQ=$zg0W6ESV{&_NW(>)+Yv12x}X-|W0Zrl~$gkIqHzC3z1N<(j()f_Zj z`hYc$nvMQ(Utl^eItT6jc+p1B#iysAK{pIS=j28$$xru(9A};&FR1};Id(K*!`!$}_X#B|g9p!nyW1tvqzu&Pon%zI+fbsld zAr01_0nMC4vnR3VK{3}(?D;mD#9jc5;~w+T zU0NvG|38Hn!3~vb+6PuIHVVFha5@PXW8)GNg`E;h1?2&g4SF7M8F)J9NW#GWa$q`6 zzYqms1u!d)Zmx)L@Teq=fUShW3Deuu&RPY;**#{aS$_kb&byP)N?#4cSsYtT#k`o@Q*W~rBj+2z*j&3{DfO^6 z+4}U!R9J0xC*13rgQJtlS8suSGsh%jU}`IHHLpuXL-IS|4!)m^YVmu);>*wi-v%7W z1C~({>j&f4VOHSRwzh*w@#AGw#@b=)QOB21YA3f{jt0gq=ysZhL>+6lLHP#jJ;2TU z=W=T2*vru?a60HdX!hEU`wf~FTvpz=f^zBukX!J>!C3U*{88M_te{UE2l<~BRMt8K z%|SchVS{#~1v}ky1s;KH^4=YcwW^~KBr6?p%Sq?fF({7O0e=GSFjkiHai&!$dB^{i zd#}O($j>65UqvBlJ9bW_s*358f?_hc@Hgm+oJy6O>C=MSzCmB*jG*so%bx6g`T29!HI!LjfciXtvIhC$A`sguimpK-U9x%18g$n$ifLT}!%8BABtAjlhj>b4D9J%{3%n;&h&NY0<&(VhbM z7Z}HUNvV4Q9?RV~VX)?<;FL}HO1%>NZW9IxUkl#fM3vPWq@%~cLa6mO^l$9veruy? zQN9!3n>JHf^^cqHZbnz?JyfI3)k3TfKvbsaM}(Sl#Js$m>2PY&2h?q*UT}ajdu~gC z>q;O8@vAKqjPpzEx{>hrAmUNlc*k?6bNa~vY!+nAUAH0?y@2OYR~gHUW^0_~4Fxh$ Ls=^%Kh=2b9Fvk*S delta 41700 zcma&P33yIN|Nn31K68>F5fWKskC27zyDfXf8X@*2LSl`Ch^@7@O6_9GhbpR6wQ4C^ zt)(c6QcHI`EiH=DMYX8^d*&n_eV*Uq!`jpepH=Gtm2S;aT zCuJpPW`rljrNxBDWn`y^CuK#)hR3DHCq`!{Cq}1bCvaASI)yQ}_eu+E1!cx2WG2PN zXNSkeCq;+HWo5*Lrzge5gl8p3XU3){WoN|4B+K7wtqhKdO3OfeS>aLHafmM?COJGg zF(ElTK0PruF)Ai0AvrOfr__*lXZq3Rt*qv@E46*&<<^V@<|%JvB=81|?$u@?zGkw6E(dsTN$J^!$0sm^`J+tOmj# zqMv+kvL6eOtJ?d^*W+u~Y|(0<5eR(%lhX`8(NLjw36j5OH8mSS4pJsxZ(Cz9{?)jl zt`Q8<*HBttT78h!r!D?mIJGYuSXk0O+6aL@n8|>xE^>KxD>Kv*bwpuc{Ieoz0@4vF zZODHjlCiDpiKfss(YF&Whqd4CYC6dXyJVHc6jzU0R zJ0nJ+bt6tW>0YrA@lOZkaUdN`X#;dl(UTvUX=lVk5ohH|f$) zHfs|olC`<8O_*q=X5ZMsO)6yEMtk*?`@yCxz-)1!88uuMF{D3Jv@Q-0MxO=N4!#8DnH zrbA=aTK4P^>XZXrz2->l6Z{uW`^&hC?BHxC-|65k+Q610KkYD-wUtpFN3eEsWyd1k zp3z%lY+*7YH%N5Q9^G@JSw}f5*Dp3JEj>9iEg?2MJuX9)=j7z@q^Pv?@U*n-n3xRw zOUg*%x$2S~@ue;qWL@%3Zhg@Ss$6N`sVU2o$;13>w=Ww!xVYTt40WC?>=b5pQDkL! zzE-~9DM57Aq3(7X$-2qHyim~{ayPjk&)4jsh{;Of=hPEeuT@nly=2{ac<8;L>uEjo zi-UYbZzalRo#R*^S=Kp;^_A;8r?P%1QwC+{+L7~!B z*_6o`fUg)R3T3}8t=K@hqDu==1YJ*gu}gDSEF0vfh(VBx<8Iu@bqfYfCW#a*38p-%4x)pbn7{1Y zGmJeiC-p2hCqkLSWQSgz*(4}J6LD z-zQk!?A=bhpdygX`gD=4dpXM$eR9}z`D33L_LB7Mn=5AMm`3#N$YvrRT8Nh+&yz8pngSSHsm0AvR@9HBRvXQm~)jsqst4Kzc~+#TTAQTQOpPC$}bCsum!S3|1NBy zT-ZOBRmxE#f@Nx7JNaw>K(R;#m7ay+Ov=`UiR=|Qr7)5$mYWM(uqE_<@#!ca((d-_J*uGD3Ps^Z3cyyYoT4Ei#>Z&(x3=)9TaaqE$HkmIi)yA ztXE#L(ctda9VZV;`GD1uEr-+5Xiqx@n>2XnI`eSN-#QNeibDGP?$iT9x1B8LxcZ*EnjQ^2;# z3qyOe?Wpd-;(e&M%i>`X;sZ@fhcy;EK)Le3u(s?&=`=iFd<40>JelSprwor4J0We9 z?+=d@yL5;f!#lFwGN~j^?18*njw;CzA8Y!kWVqO?DRe|@whxam*W9mUMpM1HySy+W zfqf!fOS`cHa(HPJKgeihJad!VN*nM)Oul!>OAF_|+mksX&)M;5Wq<+YK+*a_KbRIoS+j}vm@s7B(H zrgftt#A!`uM#Zx)WS#QG=9fygN~ZWq+fJ4@VqeQY%9GhQGIDfl_AS1{{BA-^aYIvs=Tg~C+55S8_Oq;fZa%vu{hwdSZp*#Tr?WefPwc{e zk=-WtkiDL(Eq6}z6Za6RKIL^{F7n>Q`s`O}Hz|qzCQ~QHvESvMNe$)FNkQxnP!YS2 z+i{o4lS9~_a=_$9<^u%%)2bVPDOAG({x_3fOpZ1mLIK2JgD#zCapogSM(@BMGdXTb zg!vCNz^5KhEEyj1)MQ5)G}T)$)l5tOt*$x_*=b6UoneCx#ko3|FqABfY3-SidDBJ- z6Y_R>cv^(8)0V%db!7Ik%?pE=gWU2$OVqkMFHAt~`emk%+&s(C(^ea9xO9zL_{$yf zrMrUKTt+@Y^X&wMqq+ro<;5^jM@!DrQ<$^tG(Abwh3qWnP4CU>$s5z#2^YxSb?cM& z(g4#{NmlD4>VvmPRmt2ye@dqr-A#8;y^eDDj2Phobe93I`U_7@hi62K2HNrQjP`C` zAa#p>;>+-cum#{H3uYDwA4uEfftgL1FOt;6^n>inRTttdTfA&9{2>R)HZRAU0hR^L zuAjRt5W>?K8$wVq2Fjf;_izh(*3_uV6eL4t^)wr6i6*sV?sDaM6}K@n!pq$56uo0O*N@xhimef6DuM> zTjaFyE^;8GNJtfO`J7@FCE4735e@lI*=ugBhynGKi{^HBiv_8~6ywW?Q))o0d@{E} z#6v2U9TU8yDY72ATnS{$5Zy> zJhMt!XVK-FrjZ3hre(-}YFG(FYZ$V1xyaE}`HHukxG0#n;lv)G#oV>XOSFZhjrM7$ zXpzho?G;d34)YTobht8^FFGnxN?*=%rSmd(`9%7QPSEDc%2yiOcpj&K89GuY>G(?B zI+0z9D=LPT4jyfEhEpD#f<+fiItlsm;wurND-`*%?&21_8<&sMqIh>M3)5SeMh_Sw zIdHkD_gz7f-Wex$>*m((vuJA`{=eSB%1tT2=lt z&6qRoWi}@{^{ZO4=E_|{*@mZcJzguZ=a%b|T;?d|AntV8a8)*( zhOKJK(zns7=j~WAjX1;FZtMG24#Vj1!){5Y@jg6@<<<4`*vxI^Z%<`G*~wYyvDwK{ z;n6V}8JK!TVNRKeIc0iWd{T03MrKr2O!79j4U=pvLcX%8kVR~}zv*?x!X<4fVBy>T z+!A84FzLS|7vCdyM0GSC;0kB(QPn{eR#i9BMvg2lE$UKHj!e!RT3$S`qBgW+%Z3(( zjMmCf+g}Kx+||6w_`52OzvPY`A?8C!;fyN(;v@JYP78N3x7r=Yj2M7H{9~9N$*~_k zFaFV_YS4-rLEGJ5z-NM0?4u`I|Kr z*<`>rU$Yhv5k$qZadid`DJ*Z*yKhLSQ5)KyXL)>2 zg{ZGdwdy@TZiy04A4i}``}E^%;Q>pgth+ZyZrN*~*!0`mdC@)v@9%9VykN|hVqZM- zmd*DyNAkz*>mYn}kfZzBn|_LP;~OOWwN@41$rrhs2+%=C@6Q#1nhx&|=M8O@o89O! z3bs>z@%V~1rGv_hAXppf{A#2~r{dogz_ICova*s;qp@XQjakamQm-nAU8oVPBRTs? zgb2~(cp%X&6jc3?j4%i>cw(Wl*MVfw1X8wKdZ4pts_B;l;UZj9z`-aHp{d)!L=mZJ z(ZP7M#YYY{XVKC))KSD}ttu_U4mpWfEloNU!{X$YL$M+ra-6(=s6ZrWYX51JNYpg# z({z!f>By%!B3V=Y!)dIU?0z^+G}rQq!|g;1P`12%I8n6J6ndmsw9+Jx6p0i~kB$tN z?;mxR$T{M1koE}FB)aTY_-!D@uH6sRf!XQL78&%7g3_0rmJ7HGYgbeU+aHL zS$~+a<@hh#i9$_Bz8oe7R8dno@T=xxpqAEr)r%F$f4*vk#(%CE!4U`>a< zP7p&BE&3)>4ArV5UpAHfzey3pw6yk{er&k3ecJ&O@4RpOixFD;!MD+(R8zni7y0B{ zf5$Q<;aTe@Rz@H3keS~#7bBnXv6Cym^Aw|$#(EMbziS}MwL{&#E|Q(`5~Hi!6GX++ zfMsVI%6(@HbUT%=xX5?TxQVf_^^%9qq=|8$N3z!08DhMqC13r524Cn@ zt2ggLQ}Kcl_0xJ$(+?M#VlwW0v5ol>}1OCe$&)N|$TODp+& z8?8EuY01y7wdLf?o|wlky`15;5O#H;1^8=J;%h!W3+27bBgG;m$)B(Ed}stGs4`7$~6he-2PD3)2t_s+mr|MU-@ zV!6`k%z90`yIvhBR%n`aHI}ceO2mc<{*Kwjg%xAUi;Y#VuGAr3*VOo0oLH?x6kMAu z-q7^@wGm>Cru-jAnQKAyYtYFITYY)?M`y1$A*ltE`rgPVG z#AZz)Hx`R6nm)PFUc9HtN`PvzfJaQ;UO>G@fV*!xnCN;6k{1+*e@N-gOCr{=w3@6 zQ1_5#t1craYvik?U_aWomfOktcYBCWVV^3?@0N?hptY8Ct*Gz+yA~? zoC3{|w|;LfPHSD$KT^aOnnwQ7m49iY(^D~wxbR1?`4zNZT8*>M{c!QMcFMi~J{A!A z@Ai;Bf4ZCBLiY`Nq3N!&gKIvWAsTP+4Qi5OfhEE6PKS^9Z48 zy$WUEufQi_U`1JZD8L$gIt-XlQ5@D3A>^h9Uf~!1D})M_fdEbLw<_|{{|dn`+Gx_x zJOis6qaSp`>c(deVz9dL_(6B}z3lo|NB)D2zAI&+^2A@kSl_t+R}$7YBL7aq`o^fg zhq9mKxxcg6bs6x`Pu#$@ugk255&Wi2Zd&8!la5=n{S2+DWjFDc-@=#9tDkLhxbPRZ zA>XnZsynFT3z!?N=Pb}Peu3eR41YA3-?h;RS2R`cJ_-}}puMZ=y!opltFik{y9Pau z6u*PQWRJ&D;tx&p9!HD&+Irw|8}X;6y8m<(4-~0x)kTi`=LPnc{QDmt_rIZ3_jw0@ z`9pl^`}|u*Jn{8@q;#h8S5xV<6S z7jAT}7ISyZDJ~gVTt3=xfZ3knZ7fmL)SgIY6H!a!Y8z|IYa3YAbf@#Rkk<_iR#P~_ zR+~Z%wwyZ|#HKKJx?nJOvkvr5hMuea@{s$OhO>5z5)9*bnj~0IZarwK%csgaSA6oz zhmPnzWN1Zkmyv}7i>=%8hQ6xwRjn&FL7m9 zkZ1yrFgjS1br(%F`qyI3M7YL+S}adQXnemG>mnjGI@V@k4WfW5V^tRQSJ@N|h03NV z%B#&fh#2jA)0ASufw*A=D=R`R~^>gY@yJq*DZlQRO-woi&omszbO_N$6JHPRpo@E;PiA)#vRE`FgsWW1HNF zPK6aij1Dljr#IYKjM-74p?8UMwe}x37AZPujB!V;%rof986=6^u^7@B`aF8uou!E` z8h>$Ttwg@%?SY!zRb#0KOA*~PZuMYEqPxalJP@ph#&}OwzfyPZ8dv}w@8KYpr$^UHWgF84~u1k=w%-k$_FEwFSrYR>cdjl5Hfw? zJ(LoBStB-#`uJiEdboK&zgm(C{=4=H0=8I;al!E+NL$eGHrG_jF3t%Iu%#UTT zQMApEMTv448q#$?TxPWKbdih_{h60r1#GGwj>cbOjB-RN|CLdCW|V^x6h_?n2CF^+EdvvRiy5LINVUo)PAkc7_!8Wq60`aTc*pYRi*RNG$tVix4-G%Sea zirK)a7R~`?(#Jul#dGP8AQsK$QE(&Hi_NDO8nHBUfwFU&x{24Pi;d85FN7kSt}L;+ zkbh(5E-JO$qA@EGi-2*ou`x=k)OfQoD>7eEXrpOA^AxcdJeQURv;JZU@B}>$W?6zX zwhm!y*;2X{g2rnZG)pNx6z$KeDm4vgRVZ^amqY!kL8}KaZ%1pKQ&LtsIF!FeS3_BV zxdP_bkYcQCt+WuE7;F{ghOwsR>(H#yMzLB&LumH`YK<`Tqv-CMaxc zAmfnux1IuYpJwgF$G{0Ldrxp!+Kos44j&HWJfS#{(SARbPvZc! zjz&c|^sMdED%&BVXclfBhKS@(J;TGq5ykXZG>a2QHO9oC$NCJoiwa^`6Zd1l>WlE> z5cItsqt!7i)%+ataqAvWSg2BZ61a;ZW7!Mh6mUI#5R1{=X^mH6F);f=W8FABt1p4C z640G;<1jA!3i3v}qU14gSf2P=%PZp0bbnKAN@m}ZS3El3?`U{DYUUYQ5zk`8Ssm3^ z@u-aFfOE-~z%s;n;8bdtfCOFuCeic+R>m&U?+L6ayF>wrEXw1uGT>7^PXX!?9ZgMS zE%_B|z=;))nsg}EK%zo&6< zbL8c(8do;Qfb2KmdOF-38TdQ!)g>*^7yqG%TC~8(;y&;Im9>EVPvBHq--5j=9ssXW z>z26KUm7R2Wbx+TK%}GjYEL@VlEs=2E%{WMJNdUlT#q3COgJPHEgl1}(5zM{F8^rl zN3C$TPc&X@#hMB=FZ`L@Qdkp5rVtkW{Al$y?n(nvn3p4m{z{eJMg{lKx~xiJ4TKH) ztMqXSD-(u}B_@@H3IV)M{Zr8%nF%?ZH&%QZFtkD?BbCGb=njJ}xUfGdU(ZGd?~sJ}o_)*F?a24%BG?^P_(jGt)F` zK~t0NrZGQOo1D{e5022(ru}1>KXamK&og(oe9WiSDA}k3lM_BFkwR9w)~6k@HWw@k zJ1c_<<7XOmHNW=2a!~ld~e0R_^RiHFJ;ju5#1>D5snI` zv}U#KaNZDe5bOH>3h8_n8{iZG)PYpq_^Oo{w|Y5+qlZ*a4+CKj5VDc2p#$ER=ty_6nVo0^OA!5?%}$t&mA3;e%(1z-b}X*Q8e3di(WPum`M_c$7^cQL zKkSSU#rif`D7DOC4Oti!=AZ*_0>gE^UGJ3RKwsssWPy^5e5}`owPWGbuMLY~5mecR z6|qRV--exKQFOX3yU3zxOFMR)#n7bo>}^a!f;+HHJWj}z<_+oZ4s1GRB2zlD`7D8) za@jJLNc;29hVIQp*-D~Ixfn|(lUFCSmd&U`CyYv))3i=3iM61eo!DU3l2~Uf4Ah^P z%33Kq_R|{FB+6rO~+W|fW|T3%K<0-0#!z_WE#>1?ApCm-Yg zwi@T;vuNHgeNDAZT+w&jCW&!$>k-W7swag{bm6$9Tost93=8S~R_PKtVlOn%6*R)V&VCUtWYSeXmOU%&M(v6hl!&@APEd%|Qy$PPFki z2WwPkOM^KdLfv|yB_0ah5UYd^qbI!?4)hJDuY0is?-E#44N*hy;fhD#OJA-;=+3AV z@(3$C%M{YILgp%+a?&^-NniIyD>e%1kyX#KTysbt)kiu&oVn&R)9R747(E@DnRB=0oK&dQmWn8sT+AsdVQU(E?Uy5 z+Jxj}aW;+S^k)HKneo{PNlA&}35n5B;c=Pi+2P5tF$v+xF)=vCos^gylNHZjK(Kn# z=$rl+&%6kJp{f;_4!(|Q{nj8m{*v->pgOPNh#am~)3HtI*s|f6Le7BUC6$HQe5SzC zvm0G1#9H9XP(xP3saXnDl>X*yD;9Jijl~@B?5a$jt64n%&O;D^N)*VTz#W3 zb|Z|H^urL=Q*6?hHk9=fn>DT-%Ep;nfb|xtXXY*518<@9VQBKUYSaaCo8_@^7)Djw z!Q1q0lJ^MaD1*0oh!3EvqzA*;V6j7E(QsBIKGgX6aEvoP(&$=(=3%GCt|ja_a~BX7 z{<;KL+YR1TmAQK~2jc8G`dxa-oqdFeK4r@aWDQF`|1OVLe1O2zMR6IXXp*@s6n>B_yxKOr&%{2!=up>c~4{w*sqj05v{{-+NK($`n6D!^uE*>z3gKA4%1DdiC9Pd zL!)lC&>%V5_*MI$!OYHm0JibMfe^aisAlobRh#^r2JBxXB(^nX+&S6VBZW zhgReimKLFr`wMOltmbv&McmcqN$3s!*2=S!SSS9lDl5*-#~h;5WM*eRg7Kl1WsenB zWy(J~%$t+3s`X^a6r{a|iT0f0reMvAY1CQEO?3?D0=7tm4O&joyK!#M&{+39hV6D? zQp!{;t(nk)$4td=!p@{ur?PlvPnAnBl)W6oolL_44))|S4HK`L8fQ*p@0hiKPXt9z zM*-{j0_%s#(8d>7bKwYmZFMyq2y`OH7g3BG*)du9i9>*2oxASUR{^Z33y8eaINq$LKHX7?c-$ zZc?+EXac-7&Yy`@2_KE$%*6EAS7WW0@eutqCcMm^WB&Bs%NTVB(7l(jG8_m)fTTt-0`d}t**v)BC?Usw# z42niGvlTQgb*{+^0~~1A0@Udg=(tIj7of3Cwb)#UW-1MAPZ108n9?=AyAbOU8Ni$L z!b0pJWCB~#rG+d&WC0(NsANHAHW1N8R-(+b20K%JC3f6$fT}yv%hzonsO8ffdhI2w z*lwys%iC7_9&|#Wr`kzX(lkC#{c^NJ}2@2@Q}KZg&RO+#w})7DN}VKJp6d z!SX3!G3#P>g$6^_=N7Xxw{BpS5T!G^AodsrOp#`cIpRhJ%_4N=0m6b zxO<)a;*#PK#TDffi~?BuS(UTDM%@Y(s+ef#QZ`!*(D+~}k~&ahlVz-nR}oMp;HJve zVhB1{mG+s5lbtaLielX1Y&SZ)3{QJ7DJcidWePF$~z1^0s4n z-53t;O&6D=5S9RIQo?e!MvMTyL|0y8>qIHg!@@FPo`oZUJt=V|YT+oFw-U=?<r(3MRuct}00^eL6k%ll0$iq9h2i;P=1})P9-+pI%4R*t=^78efpPas zz)HIR23o-x8UxngsxvjVUBlXlmo+Y3gVO@DH2$`R<%`)G+pon#pQCZgS}bJF)%fmO z%yZ`{6w*1sl^(9eJYv2!1-^+v%L0w1Z(`E9P~&!`tyH*V9XgIhTA98MaZ8P3*0Hd< zuPCf4r1*mlW7;}wg&tVPnma9q?P<<<(S;J$pk}0cUv>!$i>)-1MqPN90(a4bw=j%d zM!Vl)*>0~wqaL3g#x94ThOw`b$9h!S*C19Bvc-k^tjFADg_g^dX{E;3*P{rn0%GKR zWUf@wXx1f~VfWg!~=w+ty>Z4o_@=LQ=v8+`+rRr8IH_p7lnJ zt2SW7ut|rYBs&&j8k-?ZBip;^6t@63P|~}sRfG3{{~Ek+g(3!-^d2pI7b{ZR=*qj; z$J!3<+ty8S{yrscWIo~p=-$`aZthTMs*?jj;zRIuTE7vg`Utq2zT1eQ+D?rDn^;V?jlvizmbZ3qIEJ_|2>sGmwj$QB?OqQ%NDGk!$;bqbP0* zrWBvhm@Q~H4nXq>ZQQ~N#6gW}kb(I|%zGG4e+o?|&3%uxHV*^0Gx>9$aB&1!Of8n% z8dAho)=nJN^5m_!)6amTNaHbJ9yxDg6WMW^w~ghxeGZK(LdWsfIDs$K0(?%tZezW~ zNr=Z)-41MY3i$LzUv&tpZQ||?_fUU zxr4cgvydy4Jb<4wWrM!f^3C2IXbsM*pmcKwYT*T7F8O@O+VP8~KJ?#z8TM1uQLs?s z63Gu)7`sd#f5>vg742H-)kCUcCtR0ZYn?L6r(I}3Z$f{=q_j`5y54#hdmj5Q2X?Uxe#<211{k^c z?nV{84X0byaQTi#{n&q@vAbEO+g)hXgW80TaSy_Ji~{b`DcHoX+S_vv+bn)l7W#Y- z3t+#~FMC)d|HFK`_Ub?>otdMZaUV{9m@;n;&SZSdeA%DY*m&i~tf6=S+n@C5$E-j9 z%ajW|Jt%cAb7g;1*S##9J){@+V&U--?cIy@%ExqPFPq8!*)et>b7JfXy|f=205$AT z7Od`jN*RyiSX8U?2?jqLdhoDMP?2ol?KJcgv_^);S3g0y7r+VvdeQAqFwr(C=>W_3 zuu}n%Y*h%kJp|n;+u2c>18;>{0yOq?{Q!%0tNDzlQ47L8l;)Zgd60E?ul$sY8zsV!OSr_8V}BO*QK&w9|v^hlemmbI~Tx zPuVDUSK!kdt`9+9%9U1sij`J3$o1`LbuaEt^$+7jjJusaXH1tvxjk)Z!s}AML|)4@ zJmBa~C5JK9@B}*2dxx==)&TfE-9C(k9xq@qH9f)>2yc!1j<9!y4{#=pI?7fuUvmD8 z4HtgUY^SN8p+@=xD-?Rusn1vzCJb)JurnG+gN|X6+7Q-2T5$}gAA;yR^`{ZJ9A~S| z#xV4)p-+HgvT*S@i^F8W<#V<~gu*g|Hhqqo69zm%S3buASQD-FJ;8cn;xPUMG~v)R zrOH#NKoJ^MUUMEv4Nqcz9|cvUWsTNoS!3w%Nfee?sA4Q@oJPwUPsOLOR+|7-yk$+) z2&+FfF`k@aK^QOwokkgJ216coJ&nw0u6+)j#yGPDu&JGNUJxx>0%uax7i=0fG`4<$ z^`{i==ldl>rvmdR_e=H~_A_pM$-29xL!%yW8vYs?_)@KAI`#YttwtuqG>X2)yp~L{ znKqtfC-2wt^T`@tQCvEDXj$oKTXt3G7!|rTzOv}0uUT&=Ew_Ojh))j9`Wo$XTcEm< zwzaFWwWT{>vrcAvh_f*fR_F3NfMclS8)RljU>?2k4J#J88f$;cMvG1wr+>@3VV~pN zx5&88TBCAHbkR5}5v^0ocR1vd54op)Yq0D)6u+(zOKAIdnCN#?sNWFmu9fQ5GtmP$ ziguqt@6=PH+gVH?d#Tc=-w#$R>#3r*4)En!%pdzu#5ok;zR>ic5$AAXr61Kh&&tgL zX!7i=lWS|vBVGNK!g{)e8a*yxraFK+Ucl&OAT$H)$Zsn5r8h622QPwRJ3Sa}3v?Wa z7qNQx4K<3PDyI7vaGGwAj-c!!hOL7&9=?b?8lo}!5*sRp0_W4JORSwa42W6H-AgRN z91b34r+4km5=-CdGAh#uaEZD%S9<;xEF(P$5%TlZ2&#^fd$%Q?`i_1@yg%dd`_X&!aer` z8_A!yvyOl9tIWro2;=jXG3hGi+LItx--Iz4g6f|pQSnuFSWHpAs!9Z!Q*|(XXiZE5 z=h5VASWtceIE&6-!_vfyBz|PQ*>o!Wk)^x61VeQm88aYE$LA&b=tq>}ndJNvD-y(MP8arHP5#~J0Z`ySPpAVi# zd#__`y1-KRUyRiry3PU}I^lr&LMRtd)D0GDSE=nno{n)Bi@=pijX|l@{LT$DFRuV+ z+v#&ui-FjJP}?(0l$ILb#2A+}_P>eA!%~fJ+{D?@WkAfLZekGks>aNpvB0yO_WsQJ znXf^!ysGnPc8k>#E3`}7TWGOX0%y|)x6o{_qIuom)rq?qcD8J;XPw z+c`V&HpDz~zlVE$hZfyqL-+KFDPDP+bJo*EZ{8xU(q3HHMpuT+gE2iYu4c)HMS_#6< z*1#~K#^B`|yMEI!uSsSj8y4D0tkV4e9sJAK+5%gS}B z*91_Nf)!5rtNEk?%w1NWH_bmi_NQrtulPj;a9YY>$!OLlnE?P#x28h|e|NeaQU0 zP5{-T)-U>;grFNErHy=g%AtX3AWlJbl608U&xZM;I*igLJPi|MehK*tI~+sx_q2Ug z6+*3a@vo~xd}TFN-$4G_y0LG8`E>gcZudLjQ3`&Haqb!5F&g<8eezl0Nm~6F{n$C+ z7xejKoJl`l)k4+z2c5wM=+9fxT?FP+w|`JIE>Yz_i0U#lm$cEmqEI~-KcPZYmB1e; z&Bg=d>v1N1{)D;N8CPNap~`rT);(bz%^#t_iYS5sZvl@|5#!mcp!fxv zJJt=~RcPG_zxQn1c=60h{0i$mE7`vR^Jy{X3H*0EOh(*k;uuuJf~i<$Pc<t_(gU5@1G}aP)zjy-t9d9o1AW;K5oc9UZP-|a3lw%l--vhDo zt8Qd#_1eM^yuDCl*xJrp9mVcn8kys1R>nS(&~fn>*5X z_B@Pn3dJ9@CLF)6p?3hVX&lClTJ*%8H^f##^I9-F!d%;4x7SVzDX}(gxeo9il{(^B zt22c-@#dl~G{2Kq9gg?4wK2O6?_kGWz!*GWkl;ytyi=6lvOcYWR&_~{N;*H#GjjF=y^~Aht%#Z3$3T-=Fg0iBRZkC0JRV z1Ub>l>STpgH{8sgcKwQN7+uGgHsH>pIjqf;)nBv#Vwu;I=ZcmZzi7ZCMJtW*Uc8G) z(KyAMk1>r@@G)vp4|P6GtH1N%qeQya)^p{3MF#LZnO-=Ko2j)GuDl1!QpG(`|3seZ zFFfsxY#6ib^#oOK{6*F0jqnp3(1y`xUOdspbL^?Zc-(aAL#z_|cyhdq-3Df;)d^MB z7Oz*JGPHxLt%@g5wAX>{ym@=hJ5YcJZznoJ)xk<;uEvWVNKhx>L+a_x14JJ1D9!fd ztwm?xd5v|uC`2h!yEm#TG^VMpIKi>mlLv5~PxrmivUG({J~i~=p`sgbK27%Jv7$Th z2b$-F2Db;WCjIEkEA4nsFzVb<@xZQqAxIq zHv6Dz_XD1!j=sE!C;)z8VSivxx);I&Ss_jE<84f1095zrTmWJk2)s|92l5CTFS56W z#^`uzTJ3A^hP;+2hD#9*Z^%ROTE|}XXE2TQ=dIZgy3vrwCJ%*uCC16sx!{SL)+3kE znG;G2M+_a9QC3u(Q8r@a(30XJHLTHlhM~qV@(Ds~HJs9d&={4_hyFZSjL`QpDhNfZ zRO6dLJlr(O!27H>4IBb^eK8X9@6@{yp6n}V7lKyH#-F#R_1$@U2gGGeg#LL7 zYs8z1Nx-u-yAkhU}*>@pIP9CxR>htf~d;`%0qDw<$2=V zHMLX`p^Vi~PZ#eZ4J@qirqdqS3-9m29QZtY8R6+>*P*OvOi6JAS$6{TCz#=YG4p&x za08v>Hs7EHz`j*+;ZF@`d|DS*RKLKh1IvKleS)oc5O^U%45$jBvRB;+LRj`#THT)c z7%G@t?c(NL`HZt_eV=uvUovf_HonOI>Faypy69BZkPgKaL&}N_i5M2)qY|q|{pzFN z0?wq<3ozk6K91Lt-s9?1zZ1-^mbKUZiV9;jU5kO!<&_{8+84r`vL)mi%6l=QvQX67 zrL-)RNAhL%PuJ-hiB}O|8PyEq4Lz5uXz)>&RyU3l_~85<#st zI_>|;_v&4=l?bt->ONGCH^Aq=pHX&s*$C?q#5{e}x(ws;CQ8yO6^G7}z}JD*$wEvu z)T%$CYtz1UacOaRA>Nmkr(3xt==*s_iATTsnULy6{x@W>yy9Bl<9~u;sus%MuvfpB zNB$YMT221j!&rl;-@r%ZwJOt3A9EYJ(izLf1xN;!?_%|0t)TfhG+FxehSeM3p~l*0 z;!wAzo|p1&sG?|)uLD}`QmFCffBCBCJECxSaY1=m*$5@*=2Azy?!R2oxz#8sDJXs# zbDd{n=5Jw;t6t^CqI<2(|7x2etwKH8SdTd0!bc?+(baIrCw)Ta;z7mb#iav_a|fxn z#|!i>zmLjN+Ldmr=@)9ejWG4$tHP-yLR8N#duVYHLcf;LydRrX-$f)kZ-Uj zGu1YpziUrZQ*CeajrPs!Oo1*i!)-yRkqjq7?p<**a`Br#Pm4xj2$t#U>+ifKhf$WnDI3jso^yRG-(S)G*XJX8;}08amY z@*h0o`D~&i5u+|2*w3b0omrjeXVTxaYLnY~w|mF`5rwSV$}8sCP`apn2=8Z$g?d9e zbLePwrnOCJ$;HKf7kM|uvDu)qP-8d3ab&Q1i2r}Cvj_g@4DiDu zuH-a_+hZc)K8H854>dm47RjV*Uz8fF4m~rZ+55~5stc)s%3!rj)IN96Ae^fEPg3?h z?A#A_Cnswi*n5+6WP>&x9imbs~0rClb(*&IXF8^D$ zo6?CkIKTVfeFN&lC-&q#oBNpuaE(vwu@PF8)Krz!^g5x&L2anIII%grJ|+OLwMI4^ z(l+{gHXqJEwWq;zc(8fc(!DZ=Pc)BM>^7J8;z#YNd@j#4KZ6dL+PM=}M2}ha-E(=G zd0gwION*Q!<8#gbc~GiZZ(mke^q&$Drn+@+^54ZA>*?P>JAoiK@CekiHROV9Z@SwV zD`R+>2Zs)KF*n@pN$U!aJ-zk&Bjzc{NWN_z&oED0+V0FPL{53A)OT~Ff&qKu(;6D9R zO|&tBN3!qfLIiKgeju+%Uf^Y1Rc2gMWtY0NDv=n57EZ{d{Y5rEHb&;XSD!9NaTk8g zzWVTgO|^ttll-Ew_VXhmxMmH5e^RJsZQixi@xoB!IuyN0M)UsS2CyeRh{n9~rpD43 zWaZD=VR;PiYTg3k?9cre6rI}^H;lzh;|}G<@^tnK9f`&K>8=jDB$h|BdsH6BOU+*` zUv<9C{LSJHaXbiH(O2SlGtU2@P4T?Bc^{@fteGj6rdneE*(aXI;{Yp`5(cops7pNW zX&QgStC)UhhL?qnhnhDv=fgd1kH9K}^%QO5@SgWgKu&AH(~ zR}(Pj6xy+Q3V)HC4&*+uW%Ah^aov@J>Vlx~Z=s^lkF>6AH%xsy8-v_B> zasO2A?_sMAK_z4-p0(i!L6wx+4)k6kUuH9$9O%VVp5SAv150&5RIc0^3Z3RU4z#~1 z?`GD8!r4JDSJhKUr^j<_WV?V>{O)Qs#}$H#--YgVMK-;Z%tx5@bvSyEj9q#+2a0IM zJDcv%foC-1-EG{%foeAA-GnEU9x7IUvw=eET3*UkU(3e59q5-AnZN9`$)uNC^7^LX z1FJV(DdVp4;vgJ5US@N#abE|u6sq?Ggz{@3{NUzmMeVQ9iaJ0CRu>e3z(1*03Z~`_ zfj4PyD$f={8f&JZ+&0pfn8ve2V~x`k1_Q6su{12BglPOV4GSirz-ttcj)l!Ija|~Q z`qu=%f|AZdc~hK2Oy}`D+<~s7^C%wSKrR`0s*!O0iP~jg#V<M=!INs7h{f-djw#K>YR*0gd z1NCZ+%u3NQ&u)#RrfS^X8rhNtyhmmZR*cfAAP2=W1DbT4fyVEbi%jrEI-0}#p*sm_ z!$a^IUS1nah+5NR^(TimwBdtU8**vOV|m-^hZ&D|q8_#3uBOor5wxXwZBcjHYy7Y+ zPhuVDURxf)I+A}owCcGqptuZe#|N36EdIJ3PZW9J4OF*1?;tt@J@vwi*+ro}MNhLO ziG1)bI?|q(imuvY+8SuP0pn?W2VAo|u$b0#;1!|=a0q#KL<#DtF|8vO8G8Z0tU=BZ z7C2$ z%7JZZN_XDaG)8M~-Gc|3YH*C(iym#mOM+wQt?oQejD>CtJ?@SII1U&?r9Dvg#{-M$ z-5%(MCTI-oi6!RefHUcXo_q>>o)UVYZJr2C3BBG6t?wjYJYDF8JDIG5)auRWn^S=J zwRm+9!kh|z-_(aXrU5Ih_f`5YbLRX73hIMj&v+5)7p#Wqb6+Q#-3J}abm&}kUv9o+ zq52_GZyRdQUF%i6TOFRJk@AQmD|_eFCv z8$4@CKQtk86zOJ;&vlUP*0iFf{dhySc~Gk-pno7`K7`ls;OEile!L@FK>h{TNm&T( z0=hR4?P#4h{p97t0t3WK2Yt3|Ljj8SA~;misRF(W+t1*9I<(Z*!prsw7_t55HKxT- z#6a;1t?Q4asU;9y=-2*OH6mahB^6?9wG9NgQDk2BQbRw0|qsbuRg#)$^Zk!~e@=6Vw~6j%%|*{hY-X9d7tww6X62ku3eg zCtJbRy#|SGU>C9t;i+OfFpqME@U`N7jrWG|SH%awcv?7=zu>h4sEP{y)ZicDTi0i$ z4OE-0jl69ifz<<79?F65#FtL`M^ritHFg)|o$3L4(~e<$uGp<*WN2&7_fX|y~ z)gJ3X?bWCs)IQ*LN-V*1-mh_R307o3(TF3kc(J>LyJJ`TND0d0L8uSV?GoNX9MY(x z_*6OLf1}ZWMvTC&z+s3xNsd5WIs)87KaRk*;!)*9PNirZJ_F8F=tsj#@&8OYM#oF} z0I%avKh1^DA?Wlet*82b!RQ_86OcYvX+W}0()Kc>{1j9ttz@0nsP4)9LOEh+qE6(L zjYJpprM7Jti4pBrbYUct`!zIQSpmP%s1x(8#wnvv#lO?IX%zamGjw4T4|Y2XP4z7r z=OCQH=PWfS=R?JLC0fPf0&qKREa#E#7lG9w_$3HBQ5WgAatxL)L%!soe@0SV0e?lk zM)OAEd*F83KN`K&+R@xY`~Z2Tl8fjh`S~!{F+E`WieCg*gc=PEFQ#6U?{b$d``10jj>$#Sf-|X3Q&YU@Orq3P7WWDL`SUGpk*V_UQ}A0u8k0#EenWE{Mtma^3hBKM`E@+n}b%3L}N3%gT5Y# zve*HyT-4qr0x5PBswOAgo3qo(8(7R3F;#jnGA~?^nbm1USmtAQL*jB!K_`Yoc-v`6 z3+X`j+5`E1yie>@i61S>SvlZ7lwC(6B*Z(?C4C{&FGg=CvirfIUyQGV_Ke1iS59`D zHFn`+up29v7Et^c%<|<1{!H`6h*DM_AnZSLTKj{anHsD8B0m)X=T0gxR@72~z-`nM zXyw&X8?6|RHFIB%#dY&RkVrp|71czLgQCWvr4tNMZ5zdm!^CEz@n{3*XO9TuDBz$a zt(zcXMVKR_V$V>zxkSQBWH{tu)PASP z&qqoWX6LH;D7hklJ5394;6${0ie$NyRZ-x6dNonh35o<}6|?#{G{m()NvA8 zufR;BGWrlP4w^F=aW3JY{rYc72mLS^ed1UL1y2$2 zqLhPLO%V-6X$O5YMJy9>4yrR1DOAQmGo~WDm37disiK1@=b-Y_@J7n(sL-5gVw8`) z0vIDHZwAUJWjdBiS7hm%Atl;AUDODYl_1UfHbp!fTmornhRv0SJhOzusti{=?9X&S zX<1>GXr-!X0r@RNeXJLHW1H};SxEP45LY!~eO8L9&TdZN8o;$QZnh|^5`ZlYCIWj? z{WT(j^3M@9R84kwo+H{@NkC-u>I+2}Rhuh(F@Ft763MwD*{W?k``1OwJasPml64@c zO|!ILUE_ykeeCC^FK5aeS(XIq!Lu%LjOsJ;Gqg?@^{fUa9N+MKy703aLeRiL9VTG$ zVxzY_Z{EbGf25VJ{*xhYnvn$Qk{_l#b9jgG8U?C8Y9-|Aoj{F8V^2{!*bLfXNE>ZH+o_0C2aD`mrI z8{tFl0zqe^*Hxo~2PV1!8|hpTWpy_pkj8PU2e`XY?y1px(OyP{AMMUUJX&uEdKtYw z8ohdb-{@6Rso=gwrJqLc8|iOUG8bW8(*SUPR#5{P`8BjyjM@A_aM#veAwFWT34--I zVHEm-UW-2jlEIYn39@?760y)4s@;x^8?`YivP6`(hM5qsm=WWb2G(vpil@J+DipE| z?Zqmq&}8ki6a!4dwF0eQD!Qo=jJcK}$BqOdt8;E1vkbX;6a*t_`7%+>8g2Y=`5=0| z3~4+Dg3%PPTr^c<8T&66bzp?#z;e`&;~^Qxk0QkchqmP$Kw&G;O`8ah3H&;&Nm|Fe znaQlaUrD&KS_DB=)Y<*e znzt{`QjDP4YcWoKAV-tyX}O= zEUpCR%BJh+yi|BSs>4+f;IUB*pgLZUk&)F9tkU0EA=?LZXg!MVHT-7$DgOqv8P~#F zKjIqvwXegE-pRL?T5Ukvbv>NDY03uC$$x`a4VBG1_7AljLwg$*e25(Q5nR(G`8K!Z z$;p#WS(AGkIe3>3#b|325V1nO4yToygbJ?N7kg#pW{CC8wYPl>e)Q7q%@p$y#@V*Q z*_O}KqM09IE_@s9{s_5aJH#pE+$h?qkAb}@b)$Gs?Z`sx-`R+c`%ZQ@-y|~BF2+Zj zFl@Y=vB73BOYLF2xfwm3y}%?w2B@v}vGmLq(N*ndEVorGQU@3>Z55-{LBl}e|9V}y~$j|_J^limsUd5wSb-PGa$Kjk#JGP55)(N0@ zwCCRzyH3LEgvq#{Xfzr3Qx4nVW6{bwWx}F&Sj74ae9CBi&KiC@M6~TRRox+)qAxRl z2bw@qEGhqW zg7vjV2OGPz>=#*HZ5KY`ON`@p!PMI~Ks@6{u=*DK4Sl@}$#vO?eRpG=`U?26iT-yQ z`LWei;6oa*8?Dw%N5;z1{&ZxwaI0$&XVQh;7^b?;$kDsO*kljBtDB7Jdr0w&U# zJs8Wm4NNllJu4*bMG^f2Mmpb z{dkM_7?18pzw;O1Lv0f%O5F#-#`FOUZ9HIU+5u6~dI-co>AnLZ(t2e0=L0AJAG1on zgJ?58aqv0>=Q9|SIC4-g+IUeWun17k;qgp+lu~~(4m^yy@Gn;1bXYW3e=}w~g2|B=lypRt!d|U36vdNpTdvh>JBG0 zJC072(|GSaE@FhssjWNHtK%Y@<%ZnlB-aUKTMq{-djeO;!Pxx-GJ`K8j4=n%p%cQ- z?FV-X=2Ch7i-J#L{p<4+NUoe(PPtEtR4W${7oB!eloMEufX$Ny=;ldbS=y`$1ouy( z)#z`SM@YMTf(ep zW!m7PC~K87iqkHNX;yhKGGE{&e25hcx44A2R1u6rg+b44Q|R?m8>>Ed~0#nLSz5+5~|)s9)8l`Psj`8?Pc*DxE_0pj*fn%fHYe~gCCot?ah zoWVzlb=GcLbX_Egeup;vJ>mfN8@X9OUmC zn7Qm}#Q!9DF9=M&@tTS5O{;IB4D17W7kVsZZhCPOB~o9$M$9eD%%w6W-$GjTV;p@8 z8LB@JH{^FT!0@-XM7%W+j2m!97-Seak->5>96I)F73sYZwdoyH7KINLpi`TW@0=4q00&`aQ5A zmZy8)qh&sZG4Tg6&^DI#{veXjM|k}M23^O)qXsqp5e@kXj5~kCgv&&V`$<&FHwlve zHFGc-0zGpuiKhL8vDqnbdgv5X)l^2GJLv9C0}i2tJ1Fj_GxoWIw40&P$&D}^w8SNL zUO#=ZMPuyffbEa>;SaGMg0p6Uk*Bz&JsS)|+j=V1ngd4qLymJC=9(OaGCS0=r^9D1 z?fV%Eoil)V860??;k4NZJl}A|yO^6=0LE9(Oop|-S_t-KYdzK?jh4C0VlX~9`#lkX z4S2=wi3H4cpzv#ETSlLv474q$NB2Rku$|^V5)G{#8l4$4%LS8qEaC!o!u{q7yWrp} z?9>ksXYGc2m%0BQ;0D_K7}<6&6?}s7ZXY#yf?3o3H1i4a{Q>xA()lOYe{hgd_dRiX zTy~0oiZR+lENl7{gT03tw>%XK#1SXkfNb-t@VAaae8kBn@coR9bh9?}7^|1~4F%?5 z=&9rEzVa)^rB7sel~gAgJO74(xKEsP$6pq3nI&ZQPvP?kefgWHVV%;*ufqDwpsoxt zaTTIIXRSfMqY-=>_)yPLhN&-DdgXVF1)TXO0Gq_D_Xk=*XW75oA809_<4`OA5KYAS zH&5k9N5iGv$NnWe&zoms^Zu>dnrFK}$XJ}bpq@d@bssANN z^b6AVBJJP6q0jidM3bMR>-Q~fdoHH?U-qhausX?p#jA3elK(_$@Ex2Un)4@?DO^Qs z0B1$uNLLSe{uUm$JrkZ+@n5&@sQzCV-@nEZU2niL;N8Da1Kfb*I>r927x~{bA9}Hu z`a{13kDFBQ1$vpc8MnL;_0{)4eY|BZ%J~xI@ekT5=y6w+?A>3Y@&6+PNklKvk^PDB zw#GZaIu!j1x%+3vsjoz`?Jiw;C7OzRsQk6XJ?ASC7%G2(zb*;y;jjKL?&F6ut@cUD zxOJ!yt$dAv-3M^qr^~NJFYBR3e(|M;a~>8o`&nfp{^Q#HK?bax7s8&?K!4XqjOV=kT|nRhoTiiR#MNk7u^st zP5lW>;-u*(WuW>?JL!EXqt)MxN2DySUNE92EUsQM;ylM_^@_2HU6xX>8K>J38SH{P zZkI51>!R#RHdg}cCzGg)k||0u9#9BiXMCz;8KoGDTe5<(7<*cXq7UOomaMI^F+Q_o zEtQ=y!AEvb4qzSn&_~u)PR8dx@;&8ZY@JQE6>b;y*oM=}?9yd6#d_f9Ccgj~;$zRD z*~KG{z8s`-b~#G;nIJc_OTUnu5bLGmy71Mn)DLcZF8r|lRo5P0hjiMk+z_~3m`{;g2+9z4_LD7x!oXP{w+M%WGqRTE zp>gGGXq6NOhr@=VUPuuE#(+})CNeCeN@_M$1nxSNoKv<{MYR`woKqH7ku1&3i3}0N zSU#5=tBNrm$|WbO;*7O(%aJOY@$=lWv5H{~&4Y`T04CA+JjgtH?+_nKNoVpP&&IOP z-8?c*m15-MQp)(tys9+2oA}El700;TU)F+6^Pl`>genV38O{%5?B&2W@s@Q8Bdy-a z+F@0_W5)qqhV;Pxp3XRmZcz7zSkycaooeq9T)cX<{J+A6!n=+($=kO>Z>)s=KU`vr zy~4k)5&nO;MndXWW#{{Lf-3pDE5yi1o}|LpDddga1y+|9zeRNQo-{N(pW4 z@IM~pt#qIu9~oA>D#B&eKKPb-2UAk&fIb}tB@7-oD78s3&Tec4eNEi(~i6QxFxJViLD?m0ZWUsCn|8>sNW$NmHH=8b#EZ=#)Sl^dJsh4PJi{hae)uq*2g6Bh_5b?_>{v) zd!oJ%-Onp)S~WQ!mCGk9sw8kY4aq0VVnyHPe6qByHr>i6(^VaKV6kG59En|@zXzd^ zss~A3Z=qUWvnf;?uwt)Z*$d10z73Y;LK;DmRi5fHwISU0Wc=vzv=I)faL9aAE5AIi zQXs5LK?US8TVvW+K*D+?H41@^>UZIhNv}fWFx8ZCM5v5c&44xNU??h>=8QQD$`Pss zV|qb3O|@hUEhJ~ER*c&V$)&0_Fq0aG;ks=YZQ=5q)fV{BSWbQzE~C_Y?3KT;OjYd| z=N6VdRePXkK?Dk@4w|TW1me+=abbikBs#gW#suATBSPj-o#EGsevOdds4k4U7P9PJ zjkt(xYjxA;GGjkIipu$_JNwB<#IFbN34I(XYgj#j50$axoF@tq>;*w4B}SqB(3^2v zlb$rFp|CM$I2dR6fm0h$Ko=h zfgZAzlEu^*R){SnH>k0U*GnOW;}~m|mJO}(KqS^bXO&EV;0awSEr+Oyz)qALhw5Y! zUsmVg=blq`P>G1PxnXs!$$% ze|rWz)2UcR++rTyNDj9HY%RKjZ~R@zbt?YxDoR6HIHu0<^E z8jr7JG4Kri6pyCW65wSjRaurm=e1*HgkHvyxs_$4S`Iu%M=Hz8o)y5HQ$h=ibJMWLHV$nacLD??*qm!v~&&d3_Y)cR^(ciMpcEvI+nJq zDr;Nof!H|qT@4u{HkhvoJN<&yhmdce>IrhH^^sA*5yXY9jaux=(7QwY6J=3r6T4}1 zBU`N6%t3}H%2L)A4#F0Lht`z2)K>PIT@#IgZH)VC${4ks@j*@5M12grOf{3x_us+T zHwjs6C*!wCvV_{j=&Xf8b2so5)dh+@uB>AO{MBBF_t4oC9F?<=@p>)be#X=kWa9&j zD^g^nbxfrH@0#7;g;7MVj zXOj@VXB`>je;jh%lH<{_6L9F!vE#I)4zkKgIH%LKI@aGxP<7qlAs!~331VJr4kZLSFaIQA+BViIIAzFL+T9X4gI>l!~pm? z2+z8B5yH*Ju&t3?0iBHZlcm!-&psR(@ukbyY%g9PvA+P1FHH~_@bIN0HtAW=$mUjG zX%BuB%l@?vOIfiH4cHuT)9fecaKulW~$i~4WG!1rzNS;Ojk&E!tTm-hp3164{!gZW3`X}XXsL+Ma5>Y$(C zzNpj0Y41f|UHaOa`(P2_y*4`6<5mY;}*!^C&-MLdI`sM!wiT%&h8z@IGUJpg|JGg(9Z z4J>DrUudaOwq9znH{dJQ=76tRn^7M$>!3o-Z6=yIo)~L^X81FWRayH;by5B}tv$6xROs`c7e5ej^Z(7c0Z*gYwldb^|Mmqc(vx%< zPV?Hzd{zKF{JmiVne`2=ysQtq@K|J&njv%h*z-Y>*C^8M9x^tg$j5HdXJ}gajnA?7 zWJRlhVOu+7-w^OLD$@=<=TKm4>emiUhk`6U&`y@K3IXx3&)Xqj82C>~slFJjY1m$N zQQ;80puO$o4y!N_3D>`ajPVf>a3DotpgdHs*Y=^v&UlO>kVd$96s1jPiFGMOAy`Ur zU1Z;KX!4lyRi9@mqI7uV=6AI8Ed$mK2lvLN(B55O6RQ|}qTCsy`UlX14iaOa#UWTq z8@k9y9}%s?W7S1h8DYhMqmd>!0aKOGO!>OOz@I2-ba=&8*1~chifVy#hU~HME2(1| z?qe?n#zOKS1X88JOKELanJ7h^+Z>HMs-tvUW#AF#*5|&evcL#>q;Fl$1l6-ssyuij z?d~WSs0vz4ce}|Umc1g2Q#xV9L{y><-DNfZc!+dOQwe|VmGPrZsl?Ns?y{b$!s-`0 zq0Fob#53{&r8%8Z16PBfDsAWtI~Ub~aV8EmfR)_z#mFNObGD@lg7( z2SzMvLY~NvO9zL@C|e@AddfDcwiZ*Lp0ayD9iWaAuUD-L$5F(oj+;uJwB=sVOU79B zAj23ur&4{*w6T{=7Y*Eeu04HG1V*r`4wm`RkMmxt0sh(>;YUASLrU*0>sZNfA_zw| z1-z7e`pD7#je+{^yk(;a90gH?G^QneWNY;GL< zHK4QCm(!&S99p9@5~CRQ4*WhyZnJfz;sa&T{IVN7a0$MS))w9I!`JHOHoFshK+qj8 z6c5`I*c9v6Wd*C3k?K=1djqi}LQk*R`p}l4vQV(>3z?1{8;VPXgDR?dPT=(O4QEmnK)L0T858`Qa#C2Le}^Td6@{HWnHgC2 zZY{^kX8sev`eIsUpNJowg(uJ_V`W!03C^o@XNYVWC?|XM_@-0f(7Qn=zjagFRJuA` z7NH(PWui3=3gb=Yx2A)aX2+JQl7VuD_bPn1nQ-W+&+sNxnaT2O@cR&CC63k-v+%=- z^S(E6W~vu9`xDm-1LS@wD0t8^tz zw#*^sgWqi4si;qa2-F2V?2#>ik4_t{VJH0Pv{``t^0FDMy5MPhsYQ@3rFtXeyVhbL ziX!Y@&f|-k(`z|$38eE)N~on;gAR?Bg#zU=@SAHdheM~tGH*&;cwZi}RzT1l&wSAq znqRJjBP&^Sbi^wBaI&oQCd+CFR+(h^z@VPSTLbJ)CC6b1c`ajK?1Z$|0ZY1R(>OWC zT5mXZJceU8faB=qcq~=?P@_>%A88e8GebsO8-WpC@g~;RVzrrZ)(lxxh%GoJ2OY<) z5N)A56J(g$2JA#RCdx&&?N}d={_@9=L{Rn#sEBs})4U0^Q?rTfE=G>+Zs07VVeJ9q z{{2$WFWjr;MtdKl)>iw0RjJ$ivaFB&02uWhPtqRLOv7fQFLDTo5(5)Gh1Fqj1V6Gm zqQ#VB4qBQ=fh!CiV};Kqp)GDd4qoMr>j}-~?k5>JuAcyrY`V{P-Z|BO^)+yi= zWp>Ga2EI(!*5T%#12@z0DRPiHtuV`~BA8{6p&lYW@^6DJ; zEY+SVSE%!hf6hUgf63b8=E@Z7f|jDG;6kgdf4aZ{T`l`}@VG+n z&d1EmRp19$^M{<43B*2)qiwO!>g9Y{(7I*>)po&Zc+vt4m0X8lICczTurup4B^x@fYJP0+Kv4^I9C@2jkWs!H>Wz zbcbYXtOQJ0h$F-AK=PBDR#mix+BMRgh3LoLW%OAji`ni`=|!@P^$R5TOr?9@Ag-Ua zAw75C1IYA89EQ;?@emIFA|JT5>168>+z&addJNoY4s@us81?g$Ecd(CQ;jy-vJI8} z)5UmCzrH01UxK#KZ>)^78QxXDXJHuaU4jVz!R`l3kWrp7)>w+kuIIpQw05bi?f0if z#87vs5KrWEY)2|Yq03}W@fRk&^hU|LaHzkb_!o6phA;mG@OU=8>nhB8X?W){S;=~( zRoqlzxvXNnHge4Z<8EooWj|$uMUP;5xEz-d+PH^}H*QHGJs9=Cj+qq_$E3kSdd#&I z*ulHI!juL6iH@#7x$Ogl#qAYxsLBSMLIYOHEh4*z3ayeOgu_ECR-w=9)PX(R8gen> z;22rfavLtW8UrXE@I7k3TILryJTzuCGO{m3;A5-tXntTAD7d#8rCLs~FE+`cVQJ+u ztaprCxecd|L+2q67`FD=@IGuOJMv0@Nc7v+!`31I4u1Ro9%COfQ0sdrYz?}_dBKys zpMO5E!+ichz$vtBjSN-6jK|ktL@7VxFKh6A3owSRm6fo`lr1FCwt29Cl4G#VX@$Zw z#3VsMgSw4Wh=bf&E6a#54;5I4&QLf+lk^?2IJhv_w6ytT(41BT1cg1OWGVsKAc_I_(W5;2$W~Px?qalfJrXt=h&*#+ RDAu~gfRV4jFyE^G{STzpBE$dy diff --git a/src/profiled-aot/dotnet.aotprofile.txt b/src/profiled-aot/dotnet.aotprofile.txt index 0cdf1ccdaec..b11ca38cd89 100644 --- a/src/profiled-aot/dotnet.aotprofile.txt +++ b/src/profiled-aot/dotnet.aotprofile.txt @@ -71,6 +71,7 @@ Methods: bool System.Char:IsWhiteSpace (char) bool System.Char:IsWhiteSpaceLatin1 (char) bool System.Char:System.ISpanFormattable.TryFormat (System.Span`1,int&,System.ReadOnlySpan`1,System.IFormatProvider) + bool System.Char:System.Numerics.INumberBase.TryConvertFromTruncating (int,char&) bool System.Collections.Concurrent.ConcurrentQueue`1:TryDequeue (object&) bool System.Collections.Concurrent.ConcurrentQueueSegment`1:TryDequeue (object&) bool System.Collections.Concurrent.ConcurrentQueueSegment`1:TryEnqueue (object) @@ -99,6 +100,7 @@ Methods: bool System.Collections.Generic.NonRandomizedStringEqualityComparer/OrdinalComparer:Equals (string,string) bool System.Collections.Generic.NonRandomizedStringEqualityComparer/OrdinalIgnoreCaseComparer:Equals (string,string) bool System.Collections.Generic.ObjectEqualityComparer`1:Equals (System.Type,System.Type) + bool System.Collections.Generic.ValueListBuilder`1:TryCopyTo (System.Span`1,int&) bool System.Collections.Hashtable:KeyEquals (object,object) bool System.DateTime:op_Equality (System.DateTime,System.DateTime) bool System.DateTime:op_GreaterThanOrEqual (System.DateTime,System.DateTime) @@ -238,7 +240,6 @@ Methods: bool System.Resources.ResourceManager:IsDefaultType (string,string) bool System.Resources.ResourceReader:CompareStringEqualsName (string) bool System.Resources.ResourceReader:ValidateReaderType (string) - bool System.Runtime.CompilerServices.RuntimeFeature:get_IsDynamicCodeCompiled () bool System.Runtime.CompilerServices.RuntimeFeature:get_IsDynamicCodeSupported () bool System.Runtime.CompilerServices.RuntimeHelpers:SufficientExecutionStack () bool System.Runtime.CompilerServices.RuntimeHelpers:TryEnsureSufficientExecutionStack () @@ -304,7 +305,6 @@ Methods: bool System.String:StartsWith (string) bool System.SZGenericArrayEnumeratorBase:MoveNext () bool System.Text.Ascii:IsValid (System.ReadOnlySpan`1) - bool System.Text.ValueStringBuilder:TryCopyTo (System.Span`1,int&) bool System.Threading.CancellationToken:get_IsCancellationRequested () bool System.Threading.CancellationTokenSource:TransitionToCancellationRequested () bool System.Threading.CancellationTokenSource/Registrations:Unregister (long,System.Threading.CancellationTokenSource/CallbackNode) @@ -342,7 +342,8 @@ Methods: bool System.Threading.TimerQueue:EnsureTimerFiresBy (uint) bool System.Threading.TimerQueue:SetTimer (uint) bool System.Threading.TimerQueue:UpdateTimer (System.Threading.TimerQueueTimer,uint,uint) - bool System.Threading.TimerQueueTimer:Change (uint,uint,bool) + bool System.Threading.TimerQueueTimer:Change (System.TimeSpan,System.TimeSpan) + bool System.Threading.TimerQueueTimer:Change (uint,uint) bool System.Threading.WaitHandle:WaitOne () bool System.Threading.WaitHandle:WaitOne (int) bool System.Threading.WaitHandle:WaitOneNoCheck (int) @@ -600,15 +601,10 @@ Methods: int System.Private.CoreLib.Interop/Sys:PRead (System.Runtime.InteropServices.SafeHandle,byte*,int,long) int System.Private.CoreLib.Interop/Sys:SchedGetCpu () int System.Random/XoshiroImpl:Next (int,int) - int System.Reflection.Emit.DynamicMethod:AddRef (object) - int System.Reflection.Emit.DynamicMethod/DynamicMethodTokenGenerator:GetToken (System.Reflection.MemberInfo,bool) - int System.Reflection.Emit.ILGenerator:get_ILOffset () int System.Reflection.MemberInfo:GetHashCode () int System.Reflection.MethodBase:GetHashCode () int System.Reflection.MethodInfo:GetHashCode () int System.Reflection.MonoMethodInfo:get_method_attributes (intptr) - int System.Reflection.RuntimeConstructorInfo:GetParametersCount () - int System.Reflection.RuntimeMethodInfo:GetParametersCount () int System.Resources.FastResourceComparer:CompareOrdinal (byte*,int,string) int System.Resources.FastResourceComparer:GetHashCode (string) int System.Resources.FastResourceComparer:HashFunction (string) @@ -975,7 +971,6 @@ Methods: string Java.Lang.String:ToString () string Java.Net.HttpURLConnection:get_ResponseMessage () string Java.Security.KeyStore:get_DefaultType () - string Mono.RuntimeMarshal:PtrToUtf8String (intptr) string System.AppContext:get_BaseDirectory () string System.DomainNameHelper:ParseCanonicalName (string,int,int,bool&) string System.Environment:GetEnvironmentVariable (string) @@ -1054,8 +1049,6 @@ Methods: string System.Reflection.AssemblyNameParser:ParseCulture (string) string System.Reflection.RuntimeAssembly:get_Location () string System.Reflection.RuntimeAssembly:GetInfo (System.Reflection.RuntimeAssembly/AssemblyInfoKind) - string System.Reflection.RuntimeConstructorInfo:get_Name () - string System.Reflection.RuntimeMethodInfo:get_name (System.Reflection.MethodBase) string System.Resources.ResourceManager:GetResourceFileName (System.Globalization.CultureInfo) string System.Resources.ResourceManager:GetString (string,System.Globalization.CultureInfo) string System.Resources.ResourceManager/ResourceManagerMediator:GetResourceFileName (System.Globalization.CultureInfo) @@ -1069,18 +1062,15 @@ Methods: string System.RuntimeType:ToString () string System.Span`1:ToString () string System.String:Concat (string,string,string,string) - string System.String:Concat (string,string,string) string System.String:Concat (string,string) string System.String:Concat (System.ReadOnlySpan`1,System.ReadOnlySpan`1,System.ReadOnlySpan`1) string System.String:Concat (System.ReadOnlySpan`1,System.ReadOnlySpan`1) string System.String:Create (System.IFormatProvider,System.Span`1,System.Runtime.CompilerServices.DefaultInterpolatedStringHandler&) string System.String:CreateStringForSByteConstructor (byte*,int) string System.String:CreateStringFromEncoding (byte*,int,System.Text.Encoding) - string System.String:CreateTrimmedString (int,int) string System.String:Ctor (char[],int,int) string System.String:Ctor (char*,int,int) string System.String:Ctor (char*) - string System.String:Ctor (sbyte*,int,int,System.Text.Encoding) string System.String:Ctor (sbyte*) string System.String:Ctor (System.ReadOnlySpan`1) string System.String:InternalSubString (int,int) @@ -1091,7 +1081,6 @@ Methods: string System.String:ToLowerInvariant () string System.String:ToString () string System.String:Trim () - string System.String:TrimWhiteSpaceHelper (System.Text.TrimType) string System.StringExtensions:SubstringTrim (string,int,int) string System.Text.Encoding:GetString (System.ReadOnlySpan`1) string System.Text.UTF8Encoding:GetString (byte[],int,int) @@ -1122,8 +1111,6 @@ Methods: string System.UriParser:get_SchemeName () string Xamarin.Android.Net.AndroidMessageHandler:EncodeUrl (System.Uri) string[] System.Collections.Generic.List`1:ToArray () - string[] System.Globalization.CultureData:AbbreviatedDayNames (System.Globalization.CalendarId) - string[] System.Globalization.CultureData:AbbreviatedMonthNames (System.Globalization.CalendarId) string[] System.Globalization.CultureData:get_LongTimes () string[] System.Globalization.CultureData:get_ShortTimes () string[] System.Globalization.CultureData:GetNativeDigits () @@ -1131,12 +1118,6 @@ Methods: string[] System.Globalization.CultureData:LongDates (System.Globalization.CalendarId) string[] System.Globalization.CultureData:ShortDates (System.Globalization.CalendarId) string[] System.Globalization.CultureData:YearMonths (System.Globalization.CalendarId) - string[] System.Globalization.DateTimeFormatInfo:get_AbbreviatedDayNames () - string[] System.Globalization.DateTimeFormatInfo:get_AbbreviatedMonthNames () - string[] System.Globalization.DateTimeFormatInfo:InternalGetAbbreviatedDayOfWeekNames () - string[] System.Globalization.DateTimeFormatInfo:InternalGetAbbreviatedDayOfWeekNamesCore () - string[] System.Globalization.DateTimeFormatInfo:InternalGetAbbreviatedMonthNames () - string[] System.Globalization.DateTimeFormatInfo:InternalGetAbbreviatedMonthNamesCore () string[] System.Net.Http.Headers.HttpHeaders:GetStoreValuesAsStringArray (System.Net.Http.Headers.HeaderDescriptor,System.Net.Http.Headers.HttpHeaders/HeaderStoreItemInfo) string[] System.String:Split (char,System.StringSplitOptions) string[] System.String:SplitInternal (System.ReadOnlySpan`1,int,System.StringSplitOptions) @@ -1202,12 +1183,9 @@ Methods: System.DateTime System.TimeZoneInfo/AdjustmentRule:get_DateStart () System.DateTimeOffset System.DateTimeOffset:FromUnixTimeSeconds (long) System.Delegate System.Delegate:CreateDelegate (System.Type,object,System.Reflection.MethodInfo,bool,bool) - System.Delegate System.Delegate:CreateDelegate (System.Type,object,System.Reflection.MethodInfo,bool) - System.Delegate System.Delegate:CreateDelegate (System.Type,object,System.Reflection.MethodInfo) System.Delegate System.Delegate:CreateDelegate (System.Type,System.Reflection.MethodInfo,bool) System.Delegate System.Delegate:CreateDelegate (System.Type,System.Reflection.MethodInfo) System.Delegate System.Delegate:CreateDelegate_internal (System.Runtime.CompilerServices.QCallTypeHandle,object,System.Reflection.MethodInfo,bool) - System.Delegate System.Reflection.Emit.DynamicMethod:CreateDelegate (System.Type,object) System.Exception Java.Interop.JniEnvironment:GetExceptionForLastThrowable (intptr) System.Func`2 Java.Interop.JavaConvert:GetLocalJniHandleConverter (object) System.Func`3 Java.Interop.JavaConvert:GetJniHandleConverter (System.Type) @@ -1321,7 +1299,7 @@ Methods: System.ReadOnlySpan`1 System.Text.UTF8Encoding/UTF8EncodingSealed:get_Preamble () System.ReadOnlySpan`1 System.IO.Path:TrimEndingDirectorySeparator (System.ReadOnlySpan`1) System.ReadOnlySpan`1 System.IO.PathInternal:TrimEndingDirectorySeparator (System.ReadOnlySpan`1) - System.ReadOnlySpan`1 System.MemoryExtensions:Trim (System.ReadOnlySpan`1) + System.ReadOnlySpan`1 System.MemoryExtensions:g__TrimFallback|194_0 (System.ReadOnlySpan`1) System.ReadOnlySpan`1 System.MemoryExtensions:TrimStart (System.ReadOnlySpan`1) System.ReadOnlySpan`1 System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:get_Text () System.ReadOnlySpan`1 System.Runtime.InteropServices.MemoryMarshal:CreateReadOnlySpanFromNullTerminated (char*) @@ -1362,20 +1340,14 @@ Methods: System.Reflection.CorElementType System.RuntimeType:GetCorElementType () System.Reflection.CorElementType System.RuntimeTypeHandle:GetCorElementType (System.Runtime.CompilerServices.QCallTypeHandle) System.Reflection.CorElementType System.RuntimeTypeHandle:GetCorElementType (System.RuntimeType) - System.Reflection.Emit.ILGenerator System.Reflection.Emit.DynamicMethod:GetILGenerator () - System.Reflection.Emit.ILGenerator System.Reflection.Emit.DynamicMethod:GetILGenerator (int) System.Reflection.FieldAttributes System.Reflection.RuntimeFieldInfo:get_Attributes () System.Reflection.FieldInfo System.Net.CookieParser:get_IsQuotedDomainField () System.Reflection.FieldInfo System.Reflection.FieldInfo:GetFieldFromHandle (System.RuntimeFieldHandle,System.RuntimeTypeHandle) System.Reflection.FieldInfo System.Reflection.FieldInfo:internal_from_handle_type (intptr,intptr) - System.Reflection.FieldInfo System.Reflection.InvokerEmitUtil/Methods:ByReferenceOfByte_Value () System.Reflection.FieldInfo System.RuntimeType:GetField (string,System.Reflection.BindingFlags) - System.Reflection.FieldInfo System.Type:GetField (string) System.Reflection.ICustomAttributeProvider System.Reflection.CustomAttribute:GetBase (System.Reflection.ICustomAttributeProvider) System.Reflection.InvocationFlags System.Reflection.RuntimeConstructorInfo:ComputeAndUpdateInvocationFlags (System.Reflection.ConstructorInfo,System.Reflection.InvocationFlags&) System.Reflection.InvocationFlags System.Reflection.RuntimeMethodInfo:ComputeAndUpdateInvocationFlags (System.Reflection.MethodInfo,System.Reflection.InvocationFlags&) - System.Reflection.InvokerEmitUtil/InvokeFunc System.Reflection.InvokerEmitUtil:CreateInvokeDelegate (System.Reflection.MethodBase) - System.Reflection.MethodAttributes System.Reflection.Emit.DynamicMethod:get_Attributes () System.Reflection.MethodAttributes System.Reflection.MonoMethodInfo:GetAttributes (intptr) System.Reflection.MethodAttributes System.Reflection.RuntimeConstructorInfo:get_Attributes () System.Reflection.MethodAttributes System.Reflection.RuntimeMethodInfo:get_Attributes () @@ -1387,16 +1359,12 @@ Methods: System.Reflection.MethodInfo System.Delegate:GetDelegateInvokeMethod (System.RuntimeType) System.Reflection.MethodInfo System.Delegate:GetMethodImpl () System.Reflection.MethodInfo System.MulticastDelegate:GetMethodImpl () - System.Reflection.MethodInfo System.Reflection.InvokerEmitUtil/Methods:DisableInline () System.Reflection.MethodInfo System.RuntimeType:GetMethodImpl (string,int,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) System.Reflection.MethodInfo System.RuntimeType:GetMethodImpl (string,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) System.Reflection.MethodInfo System.Type:GetMethod (string,System.Reflection.BindingFlags) System.Reflection.MethodInfo System.Type:GetMethod (string) System.Reflection.MethodInvoker System.Reflection.RuntimeMethodInfo:get_Invoker () - System.Reflection.Module System.Reflection.Emit.RuntimeModuleBuilder:GetRuntimeModuleFromModule (System.Reflection.Module) - System.Reflection.Module System.RuntimeType:get_Module () System.Reflection.MonoMethodInfo System.Reflection.MonoMethodInfo:GetMethodInfo (intptr) - System.Reflection.ParameterInfo[] System.Reflection.Emit.DynamicMethod:GetParametersNoCopy () System.Reflection.ParameterInfo[] System.Reflection.MethodBase:GetParametersNoCopy () System.Reflection.ParameterInfo[] System.Reflection.MonoMethodInfo:get_parameter_info (intptr,System.Reflection.MemberInfo) System.Reflection.ParameterInfo[] System.Reflection.MonoMethodInfo:GetParametersInfo (intptr,System.Reflection.MemberInfo) @@ -1408,9 +1376,6 @@ Methods: System.Reflection.RuntimeConstructorInfo[] System.RuntimeType:GetConstructors_internal (System.Reflection.BindingFlags,System.RuntimeType) System.Reflection.RuntimeFieldInfo[] System.RuntimeType:GetFields_internal (string,System.Reflection.BindingFlags,System.RuntimeType/MemberListType,System.RuntimeType) System.Reflection.RuntimeMethodInfo[] System.RuntimeType:GetMethodsByName (string,System.Reflection.BindingFlags,System.RuntimeType/MemberListType,System.RuntimeType) - System.Reflection.RuntimeModule System.RuntimeType:GetRuntimeModule () - System.Reflection.RuntimeModule System.RuntimeTypeHandle:GetModule (System.RuntimeType) - System.Reflection.RuntimeParameterInfo[] System.Reflection.Emit.DynamicMethod:LoadParameters () System.Reflection.TypeAttributes System.RuntimeType:GetAttributeFlagsImpl () System.Reflection.TypeAttributes System.RuntimeType:GetAttributes () System.Reflection.TypeAttributes System.RuntimeTypeHandle:GetAttributes (System.Runtime.CompilerServices.QCallTypeHandle) @@ -1450,6 +1415,7 @@ Methods: System.RuntimeType/TypeCache System.RuntimeType:get_Cache () System.RuntimeTypeHandle System.RuntimeType:get_TypeHandle () System.Span`1 System.Text.ValueUtf8Converter:ConvertAndTerminateString (System.ReadOnlySpan`1) + System.Span`1 System.Collections.Generic.ValueListBuilder`1:AppendSpan (int) System.Span`1 System.Runtime.InteropServices.CollectionsMarshal:AsSpan (System.Collections.Generic.List`1) System.Text.Decoder System.Text.UTF8Encoding:GetDecoder () System.Text.Encoding System.Text.Encoding:get_UTF8 () @@ -1462,6 +1428,15 @@ Methods: System.Threading.CancellationTokenSource System.Threading.CancellationTokenSource:CreateLinkedTokenSource (System.Threading.CancellationToken) System.Threading.ExecutionContext System.Threading.ExecutionContext:Capture () System.Threading.ExecutionContext System.Threading.Tasks.Task:get_CapturedContext () + System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__Core|83_0>d>:get_Context () + System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__136>:get_Context () + System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__127>:get_Context () + System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__0>:get_Context () + System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__41>:get_Context () + System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__68>:get_Context () + System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__Core|27_0>d>:get_Context () + System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__63>:get_Context () + System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__DisposeSourceAsync|1_0>d>:get_Context () System.Threading.LowLevelLifoSemaphore/Counts System.Threading.LowLevelLifoSemaphore/Counts:InterlockedCompareExchange (System.Threading.LowLevelLifoSemaphore/Counts,System.Threading.LowLevelLifoSemaphore/Counts) System.Threading.PortableThreadPool/ThreadCounts System.Threading.PortableThreadPool/ThreadCounts:InterlockedCompareExchange (System.Threading.PortableThreadPool/ThreadCounts,System.Threading.PortableThreadPool/ThreadCounts) System.Threading.SemaphoreSlim System.IO.Stream:EnsureAsyncActiveSemaphoreInitialized () @@ -1483,7 +1458,7 @@ Methods: System.Threading.Tasks.Task System.Threading.SemaphoreSlim:WaitAsync (System.Threading.CancellationToken) System.Threading.Tasks.Task System.Threading.Tasks.Task:Delay (int,System.Threading.CancellationToken) System.Threading.Tasks.Task System.Threading.Tasks.Task:Delay (int) - System.Threading.Tasks.Task System.Threading.Tasks.Task:Delay (uint,System.Threading.CancellationToken) + System.Threading.Tasks.Task System.Threading.Tasks.Task:Delay (uint,System.TimeProvider,System.Threading.CancellationToken) System.Threading.Tasks.Task System.Threading.Tasks.Task:get_CompletedTask () System.Threading.Tasks.Task System.Threading.Tasks.Task:InternalStartNew (System.Threading.Tasks.Task,System.Delegate,object,System.Threading.CancellationToken,System.Threading.Tasks.TaskScheduler,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.InternalTaskOptions) System.Threading.Tasks.Task System.Threading.Tasks.Task:Run (System.Action,System.Threading.CancellationToken) @@ -1546,6 +1521,7 @@ Methods: System.Threading.WaitSubsystem/WaitableObject System.Threading.WaitSubsystem/HandleManager:FromHandle (intptr) System.Threading.WaitSubsystem/WaitableObject System.Threading.WaitSubsystem/WaitableObject:NewEvent (bool,System.Threading.EventResetMode) System.Threading.WaitSubsystem/WaitableObject[] System.Threading.WaitSubsystem/ThreadWaitInfo:GetWaitedObjectArray (int) + System.TimeProvider System.TimeProvider:get_System () System.TimeSpan System.TimeSpan:Add (System.TimeSpan) System.TimeSpan System.TimeSpan:FromHours (double) System.TimeSpan System.TimeSpan:FromMilliseconds (double) @@ -1592,7 +1568,6 @@ Methods: System.Type Javax.Net.Ssl.HttpsURLConnectionInvoker:get_ThresholdType () System.Type System.Reflection.Assembly:GetType (string) System.Type System.Reflection.Assembly:InternalGetType (System.Reflection.Module,string,bool,bool) - System.Type System.Reflection.Emit.DynamicMethod:get_ReturnType () System.Type System.Reflection.MonoMethodInfo:GetDeclaringType (intptr) System.Type System.Reflection.MonoMethodInfo:GetReturnType (intptr) System.Type System.Reflection.ParameterInfo:get_ParameterType () @@ -1629,6 +1604,7 @@ Methods: uint Android.Runtime.Logger:monodroid_get_log_categories () uint System.Collections.Hashtable:InitHash (object,int,uint&,uint&) uint System.Private.CoreLib.GateThread/DelayHelper:GetNextDelay (int) + uint System.Threading.TimerQueueTimer:GetMilliseconds (System.TimeSpan,string) uint System.UInt32:Log2 (uint) uintptr System.Text.Ascii:ChangeCase (uint16*,uint16*,uintptr) uintptr System.Text.Ascii:GetIndexOfFirstNonAsciiByte_Default (byte*,uintptr) @@ -1863,8 +1839,10 @@ Methods: void System.AppContext:Setup (char**,char**,int) void System.ArgumentException:ThrowIfNullOrEmpty (string,string) void System.ArgumentOutOfRangeException:ThrowIfGreaterThan (int,int,string) + void System.ArgumentOutOfRangeException:ThrowIfGreaterThan (long,long,string) void System.ArgumentOutOfRangeException:ThrowIfGreaterThanOrEqual (int,int,string) void System.ArgumentOutOfRangeException:ThrowIfLessThan (int,int,string) + void System.ArgumentOutOfRangeException:ThrowIfLessThan (long,long,string) void System.ArgumentOutOfRangeException:ThrowIfNegative (int,string) void System.ArgumentOutOfRangeException:ThrowIfNegative (long,string) void System.ArgumentOutOfRangeException:ThrowIfNegativeOrZero (int,string) @@ -1986,6 +1964,7 @@ Methods: void System.Collections.Generic.NonRandomizedStringEqualityComparer:.ctor (System.Collections.Generic.IEqualityComparer`1) void System.Collections.Generic.NonRandomizedStringEqualityComparer/OrdinalComparer:.ctor (System.Collections.Generic.IEqualityComparer`1) void System.Collections.Generic.NonRandomizedStringEqualityComparer/OrdinalIgnoreCaseComparer:.ctor (System.Collections.Generic.IEqualityComparer`1) + void System.Collections.Generic.ValueListBuilder`1:.ctor (System.Span`1) void System.Collections.Generic.ValueListBuilder`1:.ctor (System.Span`1) void System.Collections.Hashtable:.ctor () void System.Collections.Hashtable:.ctor (int,single) @@ -2009,8 +1988,8 @@ Methods: void System.DateTime:.ctor (ulong) void System.DateTime:GetDate (int&,int&,int&) void System.DateTimeFormat:.cctor () - void System.DateTimeFormat:FormatDigits (System.Text.ValueStringBuilder&,int,int,bool) - void System.DateTimeFormat:FormatDigits (System.Text.ValueStringBuilder&,int,int) + void System.DateTimeFormat:FormatDigits (System.Collections.Generic.ValueListBuilder`1&,int,int,bool) + void System.DateTimeFormat:FormatDigits (System.Collections.Generic.ValueListBuilder`1&,int,int) void System.DateTimeOffset:.cctor () void System.DateTimeOffset:.ctor (int16,System.DateTime) void System.DateTimeOffset:.ctor (long,System.TimeSpan) @@ -2083,7 +2062,7 @@ Methods: void System.Globalization.TextInfo:.ctor (System.Globalization.CultureData) void System.Globalization.TextInfo:SetReadOnlyState (bool) void System.Globalization.TimeSpanFormat:.cctor () - void System.Globalization.TimeSpanFormat:FormatCustomized (System.TimeSpan,System.ReadOnlySpan`1,System.Globalization.DateTimeFormatInfo,System.Text.ValueStringBuilder&) + void System.Globalization.TimeSpanFormat:FormatCustomized (System.TimeSpan,System.ReadOnlySpan`1,System.Globalization.DateTimeFormatInfo,System.Collections.Generic.ValueListBuilder`1&) void System.Guid:.ctor (int,int16,int16,byte,byte,byte,byte,byte,byte,byte,byte) void System.Guid:.ctor (uint,uint16,uint16,byte,byte,byte,byte,byte,byte,byte,byte) void System.IO.BinaryReader:.ctor (System.IO.Stream,System.Text.Encoding,bool) @@ -2325,24 +2304,6 @@ Methods: void System.Reflection.ConstructorInfo:.cctor () void System.Reflection.ConstructorInvoker:.ctor (System.Reflection.RuntimeConstructorInfo) void System.Reflection.CustomAttribute:.cctor () - void System.Reflection.Emit.DynamicMethod:.cctor () - void System.Reflection.Emit.DynamicMethod:.ctor (string,System.Type,System.Type[],System.Reflection.Module,bool) - void System.Reflection.Emit.DynamicMethod:create_dynamic_method (System.Reflection.Emit.DynamicMethod,string,System.Reflection.MethodAttributes,System.Reflection.CallingConventions) - void System.Reflection.Emit.DynamicMethod:CreateDynMethod () - void System.Reflection.Emit.DynamicMethod:Init (string,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type,System.Reflection.Module,bool,bool) - void System.Reflection.Emit.ILGenerator:.ctor (System.Reflection.Module,System.Reflection.Emit.ITokenGenerator,int) - void System.Reflection.Emit.ILGenerator:Emit (System.Reflection.Emit.OpCode,int) - void System.Reflection.Emit.ILGenerator:Emit (System.Reflection.Emit.OpCode,System.Reflection.ConstructorInfo) - void System.Reflection.Emit.ILGenerator:Emit (System.Reflection.Emit.OpCode,System.Reflection.FieldInfo) - void System.Reflection.Emit.ILGenerator:Emit (System.Reflection.Emit.OpCode,System.Reflection.MethodInfo) - void System.Reflection.Emit.ILGenerator:Emit (System.Reflection.Emit.OpCode,System.Type) - void System.Reflection.Emit.ILGenerator:Emit (System.Reflection.Emit.OpCode) - void System.Reflection.Emit.ILGenerator:emit_int (int) - void System.Reflection.Emit.ILGenerator:label_fixup (System.Reflection.MethodBase) - void System.Reflection.Emit.ILGenerator:ll_emit (System.Reflection.Emit.OpCode) - void System.Reflection.Emit.ILGenerator:make_room (int) - void System.Reflection.Emit.OpCodes:.cctor () - void System.Reflection.Emit.RuntimeModuleBuilder:.cctor () void System.Reflection.FieldInfo:SetValue (object,object) void System.Reflection.MethodBase:CheckArguments (System.Span`1,intptr*,System.Span`1,System.ReadOnlySpan`1,System.RuntimeType[],System.Reflection.Binder,System.Globalization.CultureInfo,System.Reflection.BindingFlags) void System.Reflection.MethodBase:ValidateInvokeTarget (object) @@ -2356,7 +2317,6 @@ Methods: void System.Reflection.RuntimeFieldInfo:SetValue (object,object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Globalization.CultureInfo) void System.Reflection.RuntimeFieldInfo:SetValueInternal (System.Reflection.FieldInfo,object,object) void System.Reflection.RuntimeParameterInfo:.ctor (string,System.Type,int,int,object,System.Reflection.MemberInfo,System.Runtime.InteropServices.MarshalAsAttribute) - void System.Reflection.RuntimeParameterInfo:.ctor (System.Reflection.MethodInfo,string,System.Type,int) void System.Resources.FastResourceComparer:.cctor () void System.Resources.FastResourceComparer:.ctor () void System.Resources.ResourceFallbackManager:.ctor (System.Globalization.CultureInfo,System.Globalization.CultureInfo,bool) @@ -2448,7 +2408,6 @@ Methods: void System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted (int) void System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted (string) void System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormatted (System.TimeSpan,string) - void System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendStringDirect (string) void System.Runtime.CompilerServices.QCallAssembly:.ctor (System.Reflection.RuntimeAssembly&) void System.Runtime.CompilerServices.QCallTypeHandle:.ctor (System.RuntimeType&) void System.Runtime.CompilerServices.RuntimeFeature:.cctor () @@ -2498,14 +2457,12 @@ Methods: void System.RuntimeTypeHandle:GetBaseType (System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) void System.RuntimeTypeHandle:GetElementType (System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) void System.RuntimeTypeHandle:GetGenericTypeDefinition_impl (System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) - void System.RuntimeTypeHandle:GetModule (System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) void System.RuntimeTypeHandle:internal_from_name (intptr,System.Threading.StackCrawlMark&,System.Runtime.CompilerServices.ObjectHandleOnStack,bool,bool) void System.SpanHelpers:ClearWithReferences (intptr&,uintptr) void System.StackOverflowException:.ctor (string) void System.String:.ctor (char[],int,int) void System.String:.ctor (char*,int,int) void System.String:.ctor (char*) - void System.String:.ctor (sbyte*,int,int,System.Text.Encoding) void System.String:.ctor (sbyte*) void System.String:.ctor (System.ReadOnlySpan`1) void System.String:FillStringChecked (string,int,string) @@ -2538,7 +2495,6 @@ Methods: void System.Text.ValueStringBuilder:.ctor (System.Span`1) void System.Text.ValueStringBuilder:.ctor (System.Span`1) void System.Text.ValueStringBuilder:Append (char,int) - void System.Text.ValueStringBuilder:Append (char*,int) void System.Text.ValueStringBuilder:Append (System.ReadOnlySpan`1) void System.Text.ValueStringBuilder:AppendSlow (string) void System.Text.ValueStringBuilder:AppendSlow (string) @@ -2671,11 +2627,11 @@ Methods: void System.Threading.Tasks.Task:UnsafeSetContinuationForAwait (System.Runtime.CompilerServices.IAsyncStateMachineBox,bool) void System.Threading.Tasks.Task/<>c:.cctor () void System.Threading.Tasks.Task/<>c:.ctor () - void System.Threading.Tasks.Task/<>c:<.cctor>b__273_0 (object) + void System.Threading.Tasks.Task/<>c:<.cctor>b__277_0 (object) void System.Threading.Tasks.Task/ContingentProperties:SetCompleted () void System.Threading.Tasks.Task/ContingentProperties:UnregisterCancellationCallback () void System.Threading.Tasks.Task/DelayPromise:.cctor () - void System.Threading.Tasks.Task/DelayPromise:.ctor (uint) + void System.Threading.Tasks.Task/DelayPromise:.ctor (uint,System.TimeProvider) void System.Threading.Tasks.Task/DelayPromise:Cleanup () void System.Threading.Tasks.Task/DelayPromise:CompleteTimedOut () void System.Threading.Tasks.Task/DelayPromise:TimerCallback (object) @@ -2771,7 +2727,7 @@ Methods: void System.Threading.TimerQueueTimer:.cctor () void System.Threading.TimerQueueTimer:.ctor (System.Threading.TimerCallback,object,uint,uint,bool) void System.Threading.TimerQueueTimer:CallCallback (bool) - void System.Threading.TimerQueueTimer:Close () + void System.Threading.TimerQueueTimer:Dispose () void System.Threading.TimerQueueTimer:Fire (bool) void System.Threading.TimerQueueTimer/<>c:.cctor () void System.Threading.TimerQueueTimer/<>c:.ctor () @@ -2789,6 +2745,9 @@ Methods: void System.Threading.WaitSubsystem/WaitableObject:AcceptSignal (System.Threading.WaitSubsystem/ThreadWaitInfo) void System.Threading.WaitSubsystem/WaitableObject:SignalAutoResetEvent () void System.Threading.WaitSubsystem/WaitableObject:SignalEvent (System.Threading.WaitSubsystem/LockHolder&) + void System.TimeProvider:.cctor () + void System.TimeProvider:.ctor () + void System.TimeProvider/SystemTimeProvider:.ctor () void System.TimeSpan:.cctor () void System.TimeSpan:.ctor (int,int,int,int,int,int) void System.TimeSpan:.ctor (int,int,int,int,int) diff --git a/tests/Mono.Android-Tests/Runtime-Microsoft.Android.Sdk/System/AppContextTests.cs b/tests/Mono.Android-Tests/Runtime-Microsoft.Android.Sdk/System/AppContextTests.cs index aa8a462d0d8..f90aa4c09d3 100644 --- a/tests/Mono.Android-Tests/Runtime-Microsoft.Android.Sdk/System/AppContextTests.cs +++ b/tests/Mono.Android-Tests/Runtime-Microsoft.Android.Sdk/System/AppContextTests.cs @@ -1,5 +1,6 @@ using NUnit.Framework; using System; +using System.Reflection; namespace SystemTests { @@ -27,5 +28,21 @@ public void GetData (string name, string expected) { Assert.AreEqual (expected, AppContext.GetData (name)); } + + static readonly object [] TestPrivateSwitchesSource = new object [] { + new object [] { + /* name */ "ForceInterpretedInvoke", + /* expected */ true, + }, + }; + + [Test] + [TestCaseSource (nameof (TestPrivateSwitchesSource))] + public void TestPrivateSwitches (string name, object expected) + { + var type = Type.GetType ("System.LocalAppContextSwitches, System.Private.CoreLib", throwOnError: true); + var property = type.GetProperty (name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static); + Assert.AreEqual (expected, property.GetValue (null)); + } } }