From ddd2d5697b97e338dcb81d6cf30b5627324d8056 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 25 Jan 2021 11:01:30 +0100 Subject: [PATCH] return in try --- .../flash/FinalProcessLocalData.java | 10 +++ .../decompiler/flash/abc/AVM2LocalData.java | 2 +- .../flash/abc/avm2/graph/AVM2Graph.java | 29 +++++-- .../decompiler/flash/ActionScript3Test.java | 77 ++++++++++++++++++ .../flash/ActionScriptTestBase.java | 4 +- .../flashdevelop/bin/flashdevelop.swf | Bin 19652 -> 20049 bytes .../flashdevelop/obj/flashdevelopConfig.old | 2 +- .../flashdevelop/obj/flashdevelopConfig.xml | 2 +- .../testdata/flashdevelop/src/Main.as | 1 + .../flashdevelop/src/tests/TestTryReturn2.as | 15 ++-- .../flashdevelop/src/tests/TestUsagesTry.as | 37 +++++++++ 11 files changed, 162 insertions(+), 17 deletions(-) create mode 100644 libsrc/ffdec_lib/testdata/flashdevelop/src/tests/TestUsagesTry.as diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/FinalProcessLocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/FinalProcessLocalData.java index 970fbce35..e23f8a083 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/FinalProcessLocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/FinalProcessLocalData.java @@ -33,6 +33,16 @@ public class FinalProcessLocalData { public final List loops; public Map> registerUsage; + public Set getRegisterUsage(int regIndex) { + if (registerUsage == null) { + return new HashSet<>(); + } + if (!registerUsage.containsKey(regIndex)) { + return new HashSet<>(); + } + return registerUsage.get(regIndex); + } + public FinalProcessLocalData(List loops) { temporaryRegisters = new HashSet<>(); registerUsage = new HashMap<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java index 879c317d7..266fe2ea4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/AVM2LocalData.java @@ -76,7 +76,7 @@ public class AVM2LocalData extends BaseLocalData { public boolean thisHasDefaultToPrimitive; - public Map> setLocalPosToGetLocalPos; + public Map> setLocalPosToGetLocalPos = new HashMap<>(); public AVM2LocalData() { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java index 8df9a4524..6864565c2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java @@ -284,7 +284,7 @@ public class AVM2Graph extends Graph { return; } if (ignoredSwitches.contains(q.end)) { - if (!next.equals(q.nextParts.get(0))) { //first is after finally + if (q.nextParts.isEmpty() || !next.equals(q.nextParts.get(0))) { //first is after finally return; } } @@ -616,6 +616,7 @@ public class AVM2Graph extends Graph { } output.clear(); stack.clear(); + makeAllCommands(tryCommands, st); output.add(new TryAVM2Item(tryCommands, catchedExceptions, catchedCommands, finallyCommands, finCatchName)); for (int fin_e : catchedFinallys) { if (finallyJumps.containsKey(fin_e)) { @@ -940,7 +941,7 @@ public class AVM2Graph extends Graph { if (next.start == fip) { if (stack != null && swip != -1) { AVM2Instruction swIns = avm2code.code.get(swip); - GraphTargetItem t = stack.pop(); + GraphTargetItem t = stack.peek(); Double dval = t.getResultAsNumber(); int val = (int) (double) dval; if (swIns.definition instanceof LookupSwitchIns) { @@ -1194,7 +1195,7 @@ public class AVM2Graph extends Graph { @Override protected void finalProcessAfter(List list, int level, FinalProcessLocalData localData, String path) { super.finalProcessAfter(list, level, localData, path); - for (int i = 0; i < list.size(); i++) { + /*for (int i = 0; i < list.size(); i++) { if (list.get(i) instanceof SetLocalAVM2Item) { SetLocalAVM2Item ri = (SetLocalAVM2Item) list.get(i); if (localData.temporaryRegisters.contains(ri.regIndex)) { @@ -1202,9 +1203,18 @@ public class AVM2Graph extends Graph { i--; } } - } + }*/ } + private boolean isIntegerOrPopInteger(GraphTargetItem item) { + if (item instanceof IntegerValueAVM2Item) { + return true; + } + if ((item instanceof PushItem) && (item.value instanceof IntegerValueAVM2Item)) { + return true; + } + return false; + } @Override protected void finalProcess(List list, int level, FinalProcessLocalData localData, String path) throws InterruptedException { @@ -1227,7 +1237,7 @@ public class AVM2Graph extends Graph { if (list.get(i) instanceof SetLocalAVM2Item) { SetLocalAVM2Item ri = (SetLocalAVM2Item) list.get(i); int setLocalIp = avm2code.adr2pos(ri.getSrc().getAddress()); - Set usages = localData.registerUsage.get(setLocalIp); + Set usages = localData.getRegisterUsage(setLocalIp); if (ri.value.getNotCoerced() instanceof ExceptionAVM2Item) { ExceptionAVM2Item ea = (ExceptionAVM2Item) ri.value.getNotCoerced(); if (ea.exception.isFinally()) { @@ -1261,7 +1271,7 @@ public class AVM2Graph extends Graph { } if (i + 2 < list.size()) { - if ((list.get(i + 1) instanceof IntegerValueAVM2Item) && (list.get(i + 2) instanceof ReturnValueAVM2Item) + if (isIntegerOrPopInteger(list.get(i + 1)) && (list.get(i + 2) instanceof ReturnValueAVM2Item) && (list.get(i + 2).value instanceof LocalRegAVM2Item) && (((LocalRegAVM2Item) list.get(i + 2).value).regIndex == ri.regIndex)) { ReturnValueAVM2Item r = (ReturnValueAVM2Item) list.get(i + 2); @@ -1271,7 +1281,7 @@ public class AVM2Graph extends Graph { i--; continue; } - if ((list.get(i + 1) instanceof IntegerValueAVM2Item) && (list.get(i + 2) instanceof ThrowAVM2Item) + if (isIntegerOrPopInteger(list.get(i + 1)) && (list.get(i + 2) instanceof ThrowAVM2Item) && (list.get(i + 2).value instanceof LocalRegAVM2Item) && (((LocalRegAVM2Item) list.get(i + 2).value).regIndex == ri.regIndex)) { ThrowAVM2Item t = (ThrowAVM2Item) list.get(i + 2); @@ -1282,8 +1292,11 @@ public class AVM2Graph extends Graph { continue; } } else if (i + 1 < list.size() && usages.isEmpty()) { - if (list.get(i + 1) instanceof IntegerValueAVM2Item) { + if (isIntegerOrPopInteger(list.get(i + 1))) { list.remove(i + 1); + list.remove(i); + i--; + continue; } } } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java index 180de3f0a..395cde4b4 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3Test.java @@ -1264,6 +1264,83 @@ public class ActionScript3Test extends ActionScriptTestBase { false); } + @Test + public void testTryReturn2() { + decompileMethod("testTryReturn2", "var c:Boolean = false;\r\n" + + "trace(\"before\");\r\n" + + "var a:Boolean = true;\r\n" + + "var b:Boolean = false;\r\n" + + "c = true;\r\n" + + "var d:Boolean = false;\r\n" + + "var e:Boolean = true;\r\n" + + "try\r\n" + + "{\r\n" + + "if(a)\r\n" + + "{\r\n" + + "return \"A\";\r\n" + + "}\r\n" + + "if(b)\r\n" + + "{\r\n" + + "return \"B\";\r\n" + + "}\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "if(c)\r\n" + + "{\r\n" + + "return \"C\";\r\n" + + "}\r\n" + + "}\r\n" + + "finally\r\n" + + "{\r\n" + + "if(d)\r\n" + + "{\r\n" + + "return \"D\";\r\n" + + "}\r\n" + + "if(e)\r\n" + + "{\r\n" + + "return \"E\";\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n" + + "return \"X\";\r\n", + false); + } + + @Test + public void testUsagesTry() { + decompileMethod("testUsagesTry", "var k:int = 5;\r\n" + + "switch(k)\r\n" + + "{\r\n" + + "case 0:\r\n" + + "trace(\"1\");\r\n" + + "break;\r\n" + + "case 1:\r\n" + + "trace(\"2\");\r\n" + + "}\r\n" + + "var a:Boolean = true;\r\n" + + "var b:Boolean = true;\r\n" + + "try\r\n" + + "{\r\n" + + "if(b)\r\n" + + "{\r\n" + + "return \"B\";\r\n" + + "}\r\n" + + "trace(\"A\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"E\");\r\n" + + "}\r\n" + + "finally\r\n" + + "{\r\n" + + "trace(\"finally\");\r\n" + + "}\r\n" + + "trace(\"after\");\r\n" + + "return \"X\";\r\n", + false); + } + @Test public void testVector() { decompileMethod("testVector", "var v:Vector. = new Vector.();\r\n" diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScriptTestBase.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScriptTestBase.java index f03fb56b1..b506b2f48 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScriptTestBase.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScriptTestBase.java @@ -12,7 +12,8 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash; /** @@ -22,6 +23,7 @@ package com.jpexs.decompiler.flash; public class ActionScriptTestBase { protected String cleanPCode(String pCode) { + pCode = pCode.replaceAll("\t", " ").trim(); pCode = pCode.replaceAll("( *[\r\n]+ *)+", "\n").trim(); pCode = pCode.replaceAll(" +", " ").trim(); return pCode; diff --git a/libsrc/ffdec_lib/testdata/flashdevelop/bin/flashdevelop.swf b/libsrc/ffdec_lib/testdata/flashdevelop/bin/flashdevelop.swf index fb526fa78d9a13a670bfbf964ccd5d5f696a7771..983c5d22f171ab6451f4570b414742f469d1eed0 100644 GIT binary patch literal 20049 zcmV)BK*PU7S5qXJ>;M3G0nNP$kQ-T=9+oc;BoaUYs0($GY>))+BCCM9NcOSKquFFf zcTdl-XS-*cwH#Dcf~@W;pcX(C$r+7AQR>yku0mGFT9;*8oLrDb@~$Bu6;h*pS2Fa3})){`c~DnF$nXX9jIE2vp`f@+C6A_rL#s_Z9Pr zqKs`R$|0s)9h^`Ue}sjpQoe&g!3{Qb?1YU3i#UOjQQ+1$D~Gjs3Wy>s{G z&eiI7W{MXsT$q_H&6G-K(c*05LA6=Ff41525&j=?`rm6X|E_()ONf5a|sPqF?{sc_kT{b`X_(- zyXWr#6aRVQo$`8B`Mr_fQWXW~3O~&%=cw5Mou7Sp<>IZY_1e}-?f$Lz>a{!d@@8$P zTwTBQR(Yp<^Nm~Au3fcPZ*8ovH0rCjDwQ>R^)^m!HSI=ot=uf%;;(Ye-my1oTer~W z<(KKQ=gJME(Zqw%*Q@KzY)*D+JrnqD!0XA$s{gekPurZ`wM zU{0;5v-AZ_++}FXI2`_G84fe=0~9x^t0niPPo()%x#*Rb`|@gEcCU{Y$jWSu*=&Wa z#_rg-nPx_+EEJ222EV1l&I;wPPM2=Z&6H+m7iU(s*EgE$)gj)_yY-p+cJ*MW$fb2+ zAZ@+c91FF0-+3S!dUt!7^s?2(C9Sly7-D6rXWs#4HoUK)(bKD2#{_ zz`=B802>S!kf4#abmO<_eaDEh=t}%cX0XJUET$&E#K@^HSzJ%I;sy4z?9mr3YxneO z?8!BzoL)66>SwF*mDq~85-+Rqcsv$2TZusZ_UTBAN6%ZyK${<(4qxQai&m<@9go+YRW&v`PkE4<9!(3lBmt&RK zEPWBo4G-q;VZEpM!(T6l`G=buF3L{~_-~zxzuiBOy0K*FMbQ?IPlYM;WxgUfxA-eF;vnsG zdS!+>z2=<0GQ%(Zn!3I=K;RTNP*^;_-)WR=)^M9QoAveT9i6Uh;*^*Uoo>tEclDcN zuLvIZHGbc(9RBFa)l2VR`bhkW%61hie64!&RQ|hEB1)}mmoMGSzZxjA8g}#M2iF8E zaO3L5yw^3~xL0wD^SBOwJkpnQO^aXkoZR?Tx$DbryYEfANAB%d#M{Ut*0!1r8p>;U z?eaNlb25*Ew{Cvz-E&*zdc!`McN(7ZF790tcXN(2K<66UEA)g`(ELPsyLtB<7TpG( z$(6g{cI^|>(l4#sjjdX>VF$(*ziWF7{GomGUgf6feKPMhcCVM0?&5nmaUYTUBRc$U zJo78%>Q1?FX}ekbhTT~Ijx9e1+->b9%BJ%mk9K{hyb-uD{6f(ichK~&a5CSipZA3J zx(ymkzJYt|Yt6gU`MdV|ox9EMV^g=2`S0d=^NZq-+v}p+n;yv?k7A>CXT2(q-3bG{ z5rN>+&2xBrYa8}A8+QF|>N?#M8XbOkn30#q=X`wlH%Ab~TkR72wwtylbkJS@NZYQDO?5yV@!i69z! zFW0i_U}Ni5zuBr>heE}WvkE*SF%tr|<1#Y_t-L*FD=H1#FdZ6Dq zapK?9>Iy3SwN9QP!QXLidmR*-FAx4Q)N!s(=baHxy`1-95sRw@H^skLeAeR=oV+#+ox3F(G`$DuUY%FC|Qg{ChbG%Ek%cbl$!XrPP|e_MT4^ zY4${JanHHh=_0S@u~v1sxW88XOdh(`i=7(z6V8JIA;ATJe+h|B61{L52wv@^vnKf$ zi@x>_ojNS6?zpFXwn3U89e(6FsLqK0JTZL&4>PzNyT8Z<()XPE6X(mzoHKuA#$nU- zYI)O+-QoioDB{^SXNn<3(F7#H8x0MGGt*%Ope8k_&;;R8Y>2* z@&i9_PLDz?FPkf7+}s(0e){RN6{8$K2+7Du6b*KWu4xb`&8M;)=*GMmo5#psTV z*65pxVJR%3B=IbilmboDfTAaqv|^AVQOoJcE=83` zl^fL?6<4qx$@;LlA!=6pCtHgVNQLx?(S%mnW|!Dyc4Z`d4+Lt`^-M)72&>{MJ(0aM zCj{t(-^YXa0_pbD9KfwIQa(cqogn=)bUf-1a4oQ^LMx1yLAX_c_zXV7cneVUp_h+U zJ&ILT)s07lRa2;Rtd>mfWkQi7{snIcB+-$E$Atz zms;5ZyPloF!7xgsE(vrQNAW1Sn7m7Fw_x%v;|2A4>j28*y!>Fngf=FKo1;P80Lsfo z#h9fp!j10X=0OBE*J|}k)ioD46B2Hmnm*!2i~!td8+Mi5XJt}8vUM3l?5cz!(VkEw zA;>8tG>F5V2)a;|5G49|2$~lN8s!Lzarg|HTFz9VA9UcOkOfQV231ElILlP%)Qx}Wz~{ts(g|7}bbIh6>tziHq$$>J0GIIns+RC9U#mmOBBRHSH`2atk!cm$ZrJp%?G!^C4 zie6BE19%?fCq^Ohn>#ztS7N)Pf4<#r9Rk>b@H-NOpSEm}0cDoH2!5IezrPIH7gPqm zi{)_bQngmS=IE*#E))+P@To+HR<-_-v*>7~Iph*XQT!>1KXaT0T_HP$+W6#3k z1+(15ioa4cFV|`tc9|1F<5Im2qa9aB&d2Gu(jySa)af+8*YBrEFt=xe_dDKC&&hFq zG1s}LGeu5xuEi6=@8mjv@jOcVY{yl?qKh_HEUI(!TIu{e>F(n>bu5$1K<7R&KA}N( zt`3;0X=;|KB}^>|4Z5kNO+9OB!^EU$u)#{2aL?v%_AHvy^!f6IPlrGGQg8wBt&Xr|0MYeSKhz+qf6-l*4WbufHyn6Qw8 zjecO1E6|m)55+tJZw+>XmEC#ARwOf%cX66a4oiNx!w=*L^&0n_KuZf;-S2hqmXi8&z<3*)#7etW{y4}#4W>-^#ao93%44mGrv}rq$+Aaj0ZCv5;5o70Ak7#%cl9 zdxJf1B?`*ZNld3>N|tz=WPyoOmW93S1Tn?O)GY4wm>O57{&Bml{)g@M58G`V!D7yi z?+D%;e>vy9p$!cy%5=On{OEZ>$$o&rPFdieuX7H_auzF0*C(^Pvp=VtetvrP48#Ch zx%f(UFs>Hb*}PNFPCuVT$)gtqmQC?XJ&S8vp^dWEL3H7Z-4s|p_WgGIf5#oYghIaV zO=nv9>*}wvAF_V{eEERCN1uX!W zB+uu$-`eHgkNR^&sw8snpZ1<54i}#e_VXr-!^x*zJ}geG7_7Bw*2)Mz4E9LIOhMv_ zp~vhxp+IBs~X)mmP>+m>|P||S(LeqsFKbuqDj=g*0>-@Y}0VW7v9WN1v8jSl8|G@Ht zF2gGT`jAm;L_m!Mb_Mb}2U!+s4SaI@1Q{F-{(VQg!JPnL@J~GYB7262EfgAp_F7n% zUAZrt{WjGNp@0i~*{>4~-hD1etU|&g^dBjg_~vn%Xr;xeN`6k$$=0Aa)i^y?K#%`Y zyRG4a|Bu`4zXJj|g3Ak$0P2YleIwhxMBlo@{O3XLgY@l#yXzaa#4(IYz93$m-9Iq9 zW4Qdn1&3cKyY6|!FErwBeC?XUIS39S=L6Bb0^w7dmR>R8$vx?XLajLKkhzrH%|+hg zlJJ`|bAyCE9n7m?YM^vDfZAff)Q6yjgDy_+0ZI~&8><^px-`pV@fl$;lk)+F&j-Y! za;K&l$tEZrv=%NKVDcrmHIT)kD9|Sq6$8fy{|~@pD0@D<^p0RL%^pz{T2pgb`0DbN z87r??na8ObEF@K1#|J;hMW)_VN2W`vHZuKnT?=81gh&Zv#&UewteCU(MQdoxTSNa& z1Y>X9--0oKZ1~Kwr*dlCg8vk}r$VY?0|6kzQOGE9x>#$WUaB_nSs73z_gmT1NE55a(vs_g~X zP=iz<$!7)i*G{jZWW|U>N$VUG*bhi;0cP|R8vI~q2=k>iu>0(q%1&iZ;W+cGpo~C) z(;8gSPyYy4YP{gSp`%Z6je=6qRxp)L#f{cD8gij6AYmN{!nV8H)3+nAC7u6j^NnBF zE^m0a9g_%8pnko7z?H}0%RH+HA{mFFoV$8V`uLI?6ZE)Ag58%?6M+`4TVKTyr%rUa z65&qn*b}SgXSLESh&lQ-vf zazs^ikS9S^B`-ftTZ3MHq!OMMw3RFL0Mi(0gvphUJ`)LmExD{hssaXE1MX@|QbOj* zEY|KU_{^YlT@H-`&UM|0<9{1L*^MfkwxtDlTv~v=x;`$z?ilU@ydbcZXx1O(S88hy z^2H3eF~^(TS%b$wE8(KPmJih=1wTn$i(;J~a9i@81CGp}U)ew`hBTGjn+UDpUNHg4 zJ?RO(B}ZG#mvFaN7;+<=dE^T?Xrl@WnS`i9zV2$y8g&=&G+q}ek3k#<+0ZaPV*+X_ z+j{|rq>^^INOuK~$>xP@L{iRz!Q)~yEy%=7Cb&#J;Vk*Ozf zJt0$L7AYi9A9zz6oOnsq2Cv-EwT!(^zcN5MUkX#sZkYZ~1k+#RAw1;`E?(MD?+E&- zF+_~CGm84}{5AUbN53~AX^cDc>7&LtIvVh=ZWYz7lDajgZq2J(3+mRQL^h*62&^ub z%7aKmTuJQR?adXt?hsT~mXy97u0hC-7WcxqRxCoXMzoddexny~;l4Oe9BUFLHf|t+ z7d08z21pOWh02GO0|uOY67?I-Z7CVkf4JOaW*j1xYs zl~k?dP>s{LjxWoAx3o)UJ%?o?ya9%@o5S+Iis(VFAQ)!7x^2G=S3Q62o|Kd%p%$O? zZ}kq2MC&(F_2s7Z4vI40rr3=m#FJ78yUrCVxKZPVD-CXq=K6C@T2F4AH6vIXjR9@ za3yvF68oQ56w(k4K=uap6E@m`g7WBj_5_Jg*{6lX2>4EjPI-KfJS}ASX)gP_I30gl zV2|OUpMF{>jXnXroXq|Q)XOvLTCGDa!EU{j{bi~<>=ErF*#}fmKmj-HWk1Fxt=-ia zw6GU;KVOMCdf8V|JXIKQ&RO;>&JPyS&bgXBi1U2mTh6)WD{ghJDA41vslVQC>qpz| zYP!gdv#qmKU}S%W?sNvG zM~nabV)hyaox}MEKVQhcj`Jm)$NBk%Y!2ryXD{IU?217#2&gNK{wH`wr$vwgjFA(g ze--Di;rD0wDt6)-J@7wiix&AeHa#FCQYx)?K zW_zebA7^`TBxklevy?kpsP?PUL=83%P1H~&O}1dsA8(=t`-UefS7?wj4J;9shmalv zlQgWy*q8lWgN(Q-<|&_D6SOt%ESUtp5F3#hhIyH9^G z1hhR{(SI;xDhfhhNMTVh#UJevu*X$$i526qu!%=-HMn0~{p|>@IO`a(a*s>63bkM> zeMDApEaKKVo*XuVTcsB+uyWkJVZk1-2HDdPumK^1YShkVMMb!m!{uXhCksbuo?%LC)|hGvPIe7){ID#?#Q2fJ*H z8Sz+1kEX{c0MSC|Gx%p~z}29c(4di21vVxDGcP_FVq?e%srni;Evn@uO$3Fa0&6f} zL6^m#SO^MX`!-MgfLGgO0$`d5GOXGq>13I+oqu3Q4EwDs}y>mJ? zFD%Y+Z<{#JgkZm8C*Z7orM6vd+I7cmXU_Rsa@~012+ZOhye21_H)L0x=pY2LnI?cM z949(7aMfo1$lPtgp~=(x>g(JISI{|BToM&K3`!7>7Wc&Z`Jy(rxS-9?l_ZHVdL3s9 zaBrb#EnX9zyW}mTmW#8UZz$4q#(h!QE8Ou4p*__`vySu_rTt!kx8t3)=4xr*1G{fs zTfA^VTPV$G3k$Q_!qTF)bp8V3jrWdAUo6gQ^B0!lPEhg@xHTOcKc-N_)u6Q3dqFxLvS`zoNO?b zI`Qy0JdIC1Jg%f*Xhh58L3ZdReDe4l#%CIzv-q6DX9k~He2OJ@Xbykp)pQ1{o~{jW zas!W85D|DrX|PdcK!;2{_PPRxX5HX_44wapnU|C}JeJ6D>gyWf>6xXbiAcrCX9^Bh z$npR>=7h}~5V`)Uuk9DH(IHlD0IZw>RjP$=?tTL8e-g*U$`!~jyYaj z7j(c~CAqJ75<1t1j9eyHAXcmxPp)Z*ua1>{Rh4EP^j8C^_(9gm1ma!=N(~kz*+xfm=#6 z!8z_p1D70aSyJlculceMIyg|Im-2wc+2U8j3E0K_C!^?V-&0x|ye3GbG=^y3c0{}qm6Sgi1 zHN2RRG7-8L#~TT^+Y=>jk_U^R#V_b##L;9TAqg-7S0hNL5LUtey8yv^fFMU;Q7w`` zSt0|^L=F&GBHic$wFCbTSEDxsZSb`t-WqDq8v3+gKE~hV(}KZ`-~&$!@f5xI3^!U1 zA9iZ)AMwBV43sgNJP8xb3j(+0nv6A9Q&m9tWOiBr|b_!2P! zyahn9(DId5_q5m^_L-zu|Q_;~u?Udgi4-=2U=iH0O_ox%r0AjR@B+zK* z7iPgHYv)UINgj%r%?*wX#z8J8nQ>zLgf8XhVKgfeBp~OkaX6a59s01TA2ZeC6pg5! zvW}@%P6Kp_3#PckJfAX(a+3emkFcW!d`{zY2A^paRwojnV}hrRTM2M%*6T_Fj4B8c zayl8RNpnhtWDV8|<|~hTV{ofSp#m$Y1+AbLjGr~2 z)ucclp$#8-hTz14igZ5}6-j@r732+Cv5+~)iktB`MxdawVa_S!q^6WZDB5-mZAW<9 zajEU^ce*S&V~_HtlTuUMZ->iHEo*OSWHI0-k1^g0p4o81LAoRTGfGuN*^YE%I}-d0 znL{RcGx%yd%|zCtV7olpP4afImpJWyHF~)tXg0;09rc>gorZ@c8_NOS?%1+XD7Z5bpk>}40nO>t5pPp7L2mmI*A^Kc#l(5``Kx#jITfqjmpz+(hmyLQ<4q< zJ6AgBAUeq0eR4ToiO4yR|f9h53qU=F<#Q@Lpd)bcR89e`1glDb5Qb` z2(;^?`;j~jh>4E0HXHg*qgmH?Kq8EtZG6XeaL zMnorcC1fZoN<>zBxBRX{zJy32c{RyBiC{`@N`b2IC_Rbi65L&gf#K_he5oVhOA#H# z4NHXdZ0{x#JtaCizi_a$|0kl+K`0g!2h!D#(#p9Y&%>kWeTX9coE7(qKH4 zCdWg;5l?a{RY~&*)>Tl*80R{`dmt}ffI@-*8h@pSJdcEDmVw~LL=0KaNIWMqP5x6! zv~QAVpMR)wI}DhMZCE(d`G@+dNes%PFQ&7tEZPqiOlmn)_%~p1hnLm2RE75$nPJpp zv=E~|xfO%=9E-3s+!dwU^rK2co_=N^mXRD&r{JvW#W!O5`TWnn8An{|^&NwIS_$krlSU4jlDK1jRhl!jpi3OGC?^Q>quw*+ zJm-yhV_;cWZ_+s)?*WB4l82HDG;l1u@w29iFkC3g;Fgc%p_A66V3&cY;YZ*rM}bf< z%wueP0-q_CG&qJ6U-ua1WRzhBznu8KBT;<-ZznA64AFSpI%6mZ-*dv25;i+QVM{4k zUDP2GrfA6)QBoh_47M4BGf}zkw0{L>6TCg{4n}$NIuAq=a`;Qa3F|2ZHoXw;(`4*- z0-K-L}vErpVhmH_tiocy}URsAHSk-H54PGN@a&@mHwAkOsITiGj;ke=_B zxAOl#Nl2>^g7vdlXlr%vy^l(29k;5FY8__?yh#$-V&Zg&$ckTsb<+v%=`DvPZ{J3C z(%ZMs?bxeCu_T?4b3vkIk~+{Wm4@t1%VxPY$m!|;1Vk+XUB3zAUwkYc#|k{jatXtN zfFXR~m<7>8PgyZ?T`;ZKLFm`<(XE&|rSZsS3JSG`VBh6JPE>I;f+V$EsDX0c)eG=2 zWza@{d1E>T{6<)K5i2mQ!jzfzCcDWlD-R7U$jE}?6cx0~3|>BkMAArT$q3c?hJ6P?E}kw~(h@l}ebf?(5%BI| zgjCBVb)~4TlwzVZ^HKTicW%{hRcFs$xOHp!3|o(Xgu_dhm(NJ57txk5BB@@SLLwyM zuqQqi9rY5IVnm-XIy}`fJa2z`s%6dSKp}j;DnTozt?9&Nm3Ve;S`%kn$$_Ly$;*r! zt%T7H$Hd4-@R14Qqg$Ggb_5^Lw7*eay({viU82MpE>^}R?}HAl`sjTS9Ss=LDX}DX zC=i-DgU46%@tieg#o?G0PQk5`2MlHP@O-jdCzxo8ow5Cek?DZ)uS5h< z9zjOZCdHA#M)np{9jn^4oFb_>8T4hD7$>U0VR;P82)=dH|Btbq!Ovaq`B z0@=j8TPUOqVJIG2)~4ast5np-*EBL8Q$nzRCK7_Rh$Mn7mn_31js}QiH$U{3Ba?u; zzWF)6WQ&_y)koIM8Nyj31^)DvS6^M!R}RzHtFJE6(UOMrgA$wNbPKUrZYe>}Iqr$K zfYsIMuYo*sRK{P@$OkHoUw@3esWj;2TeHgXJ-Ug{|v_JSfJnbds2@G#CsVTa+3 zNZHCoLT-1XWK6>DM#@j2IVN>P5I~`1OWjSjcOn3KM??kKaI##GPj3wgXSZ&HFKxh=P+VC{PRu`1Y&Ru7t zF*D;7kw})Zy(1EdWo(2Y=`OP*QW7463vIj%6&fwHDID;Hb^r%RW+zrva%H0>6&$<7+yW(=;uo|Esf{4n?RTWv>VZiCy0UZNYrMHy_Nnvk+JA>+3PjM23JKzVr|H{_w~0|stxCS<#4!b~Pmk>COa zwYZq3SLw7ZxTdGxWJ^-6P-g-Qsm3JW^J4enJ>jvq#5doePCg#?#rgA%!JH%~f+8_Z zOa56Xyn-H5`%EE0imrlBlSD!%juq44&nXqFwHtAZkEpJ?LF88=5D{|}LicL`mG1-4LGmW<|L8iXOU6&RCB1v*kelN^z5`8M=kyK^=91ks(1oBQ7xaYC z(t=i+cLZT>JC%F;pb|vJOYeY%joUiGX%VyUWNd=H1#by1RIsln9>!fP{n!Z}bU5g~ z?xQLWmMcz*vnSI=!6?K&7olPaoMLVJzBo(r%EyJ6IOVDka`Ywl;WYV>#FaEwIdzxk zgy2DC0U?oRd6dmL-Bz`K8382MDAG39dMtP$UhNT!DznoC$o%MnsQZ>!?65AUBecVW?XDAIREbTm3x*w73XC74@3;P7A?2%WH{OR{l*;B%%|ID*Yik#@& z9?8w-$b$%zB*JYs)$FIFxkaEDov|#kL?RN|OEy9QWbCs?Hbd$}IxLKg{&Q$?hoi}z zMk#yKw8-8x7ESInLDitiluKd?mrrrr;wCm!ae0*v3u~jlfXg35g8|;)(3|SX50*9k z&?6lf0zSvaGs;ovVsz|PIbi!R-jlUF-6eN-EZ5s227T@s3ox$>9j z>#{*#S9m(>t60XX*qT++7mKb0Tpq3?v2jifL0261!mS!ehc5cK$aSOUMKWtJV<4Dt z2npx2Rv{AN5ptHy%V)j6bm)*v|Go1pKSk2JztC>~jdmOU%Q)dm7K*qR9(bf=5mxr7lBE#DWcP&Xe=&l|n>_uYi%B^V zzf;pkOo|aWCIz?nW8{R8a4IfGIF%sk6!JBm|J0rk4cIkA_b@~~y$J~GPf>3IhVXY} zWw20}WRWL9WN~nE-eo_d0xt!lfT{?d7|L$DQ04fvvNlvENXIBrFNi#gO7g@p4p?VB+EDe!vXP>tzW%leduYQX6F4FC)7!|EuM zA=7d0kDu9{7HKmEv*&;rB9KB2Jc_tCo~X{^aTtPtO+5P%9N==#3I|931=ii<(;qdS zBMZssuj7Og)dj&5T4uYGG#m0)P!5L5N!qmYj07I1rjOteBe<;OT#;|vN&9!6j&9wV z@AB_#$K5=;G|or%_dJYfvM&FeEk7yVtm8j-6Ho{3A~=cm^5jyE_uC5R_Z`OGVH41f zdkR5AL{dGNlNC(5RcVrmQA1SSDI}^c4tvh83&Pu0wDx8eW$uSZ>QHWYY&eej6*T!F z@d9{|0qn#A*r#)Rdm(u9%Xt>1@sereP2;es7EJvlx%;1VHI_#}+Kvilvxf+MsQQz|xZG4;F2)%@Dc#b=+nM zK7V<46Cos1*IUE56b_6QcK<;z%_baB>Eew|GyChbf{f#gH89pBE*W=%vWS;X6RXT~ z1|8rvA}))V=nSu+@SK-8>v9-nS}lT*L8@h7AOfq7U5c+RP+>dGe!!@kYg#(Ml*#aC7ueAnv=nGN?RUT z9(r9FPK`;VhLi9mrH`aWj6my@vjvU*9lKuR`K>iML&e%&wv$1?CD?0hzTLEEqCtHBv~3 zQ^FhI)zNc`ZwF{O1pip-TtL^n=%tq(1=)A6Xf&+XQ$C)C??ZtaM3&w zL~{2<^Hc=MS8AJE8}@xEcdv`;tmLxNp;aGUR-&VEw6l*T50Ypb!n5Q-(xCw@8`0vP z5I^rY#Bo28X#X(W``{XDQaszQW z!t5lN8Ff`wX^2Y@QY0I_Q|M}t#YKoKk;F--4Mz}v1U*r+cmWwmoScCo;D`4MqXi)` zh_Hoz4vB!dmX6fK(9*%HmRJrrMf?iCd+B1~I{{(@|zUWg0%`A;DI&s4#Hkpm%SlH(C6IRZ(A zEkB0Li7OL}^8E-l!Q;V#!E<1`G%Oc1aeLK$%(yPy1wpkeU}$WW>rMD=zRC|u{Ckdn z&-3pEDM&@S0wMKS6J$#y<&kR~9@za!J@L5Yc%x@R9m9b1e3P(R|MYy5G?*1W3+Xr% zq^sl_Hn{OxBX9FH75+)k@$twNv2JH5_k&Q%?Fuu+5G~Nu$WzRFxem& z6%^3hzftLlmPIE-FeciEK{DXxjsQrI6bM?0jFlF#P9iM;3|hp`IjO<2FmiF*IcO83 z$JS-zL4br3=eoo!C$oJa{J3vqN|ku`1KDMEfL^5(8n3Ko}Q$hjRvMIVFT_yBl? z4vpZpQ0aB?YI=ndaS&znR`^lx7kOUTrFa}0?-G8Of?t8a3vY;hrFq!jy97}m7VlE_ zgNVGhedl_M8nv%bKK5&3LpAsHjY?4wf%-lgwdHZ}GPyBv4*qzw#VnFIz&yxobDd1@ zt9Ox<(n$yJm`iP9jKzWFBkL#!O{X(R3^fpBVi88?F-c%>g6cu&+ov#xaA|f7?r6StvZeA7>&@=>> z04&dv`#;}HbGvDCXi`>@NlAR^(zMaPwW9Ngz$=dhki!7-gs-m63m5jCUL+6-!1oS) zufDz`CWaFeP-tQ-kGbja^k^Qu+_O>lJLWz^w{PF6-EP)y^SFHOQhfWay|JYs08&M! zKn$T3OQp%~SMg_yP#l_mw45fT0|5hXz=x56h3DY{>ZqxU?BA|l(2p3<93y59eJS|k3!@~zc>+y56-V+d2}KM;J>I$$3&n2oV6)X zfFcGcbRbhup6?<>HbRlDC(oW9g>T~^{20?uDw^@JGfX4{4{Rhm$(ekoaO^R>b1bYEd}{Dk!o^&wls6M+1$D~Gjs3Wy>sQY z+KPQ{wYE7^nw?#oDX;SU9;@~Bt>%n?(^Cv_ZMGASGnSV;3|4Q7zm3^Q=jR1cVmqarmAlJc0ehA9emnbt57 z5=cs!#8zQWW=aFuCFLxX1)QJ22JD!jhMwXatk`S^+$^GDk$)2DEHGDNjAxS6p^XN= z>!gs>kV5i%n5$6d`@RPxZzB&lvT2gMjZL&^3m!yiU^^a_Qt~8sA8O0UITOR*ioODB z5RbuUK84e#TgwLjQ!x`kn{xPxXaeiIe1TDCOFB$1#xT+J!Z*)lQD1`Js84=P& z__52b$-Xd7O&>MqVg%3uw&TQX4-&+^;sO={!It%QPnAQq1CvhQ+HTxc@2+ci*KskT z7?S2)3`MhB(k(fK{;l+yZt9}QekD4(b3{aP#}LVFjv=8EpCgv;M{-N+6n5nW_!8KZ zkHWdlSZYe8T}zR<0*?0@9Pg3FflrW5j`#bD<|cXn9e~Rh<;Ywmg19d$4|Qmlb|I7- zfGwndWqJVFO%W1;{T4niocR898mFmc6E&6CH4}~YkrT38Aop+tgWUe%DKT@B#O&1c z5rbj`!XQufCJ+K|gUeA5gA(B+q=yvUeFIJJB!6z8i0@!f@(?p8hoiwjga5)wHINKa zO@cHA*?#O5WpIIB^96c6YRpu@sC-*Ofxi<%D-Q1~N5gm=8b)|v9fyRUc{+sbz+Bzq zIJP_+BFW$5A_H_~wXa~3kk<&LXS?Ey^C&~RpTaE>ij8K9!L7WPmfidqArwB0S z`>EaLZ+4yo!v%%Nd}G*r_wdWHI&z-Ws}eO4T?i!|9rWgXn9TPiDN&frcZLZTSuP;b z?qMCkB5hXZ%7~-;+dT}qW6TdFu#onLJeYS2TDnNuAE<#+CkZ5;kT{ryR{V*-@isYr zdQjo|Kmn8SH`&p%b82{Z&qzMdZvM;BAXonA=eib{A4d8evFlNiXWo9Eog+govW9AD zaCN@N9PNIjbKCAvb_^B1?bmTiGDiQA<9|scMtFLX0a&1j;1VP?A$4(gQuBuqQX?D; zuiAXSZ5KzQ5?dc^(8sW@z(5lH`7xX_LmPETJWgN`!lNXc1nY}>FxJJao7K4$hJXSaRHP;|IP1HK^OncPpQtQU8C716_81TgRejSoY-Ys zUum}+?e?E+xBo4^>vk)eHaW7JY&U;SQV#|-V(-;$2+wwP)&9`M_^@P>ldJn^l9Pt< z7%$pFP7-*fCWKDO<|fw=Hl_34$dqkvQpYeZGj5t?WRjyCa#q&0rBDna7$DNPrr1Cl zpP~JwS*A^>u1l+_&w7#E8QO%3hrt#!9+v&|*{}aCk}RwL4R2;GYqTe>+A z^vL5@4COZ~x*+MA$E_I3<5v92^0*a4dEAPCQnx&Ak-H54&Te_!ilIDiMF%PS$m6zf z;j7N$29CRxq-`L$aOSH6v}KJ1y;=GqM>-;ng5&;Z4+7!7`ay}o^{0$-r+=Dpe-vr; zgQ;G;q>I5xPt@UP6Ldf*t^K~7mGVz}(*`GykcY?m{lcW7KbBS!&;MFz$sz?5HZMms zV8Q&Hlu(q$H2djY&6|gpx=rBOz;En+S)90gpulRQd)wf zdiJ5x$3;jQh+wt?`Tvp-^!#`%I=aFxXM7%r-?(Ecydtev($zxim0T0LPET9N(s_a{ z_Sp@o2sDxL6noS`TjUstVHre{hHUN@Ru21Awo5Nv-60b3@voNxlR5cLK9=b#&~brdazY0rQP zJ2jozBW~-r5w`^|5^VYTYwb2peE%j#6@et;_#K`qLT_oyL0ckiqbCUCV8mGB*tLHS zuDx$ zc@d88>{INhn93d|U5A{FH;tTLmaT5Eiq4aI9gJ((8U2XUjGcZlixTj11%;@J!9K0sjI8r zex^xoK;YLX@flZ|7p;oI!k6~zZI~9N*%Z2`&}<6V(rgNq?RPeXx`k&`JO@hz>`JhQ z8`%7uqS49Q72YLc139Ea7&G-L*ypS%pap^sGYs156yJ}qR*zyuhk1?!pm8=aiO)f? z-6{6PAoCllXm=s5dk*A!hdXTS3~hIs29<@-y*nLyOdP3jBFqwnr}XHeZ1*wDU&vk^ zGgr|%A*N!AC2S>+xo0ap*|w=9;Hd&z1)q+#Vk;Yni+N0E1Ga*GX>5)fLk4aH8BiV1 z^fHVigkvaTBh(QZ_Bz%C%94$R5Ba+lY~rD5csMWP3Z8q+paL?0u^DZ?Iz2=Oi2k8_ zdtJpCDuwNAsB6>1w7n`EYoXi372`D5Cg6wr^hUnp0W;F6w?6@d zaYZojSUvXTC%L~Zl)xD+ca-g0@e^cL!QRr8XU!ym{^_$c>^I=lDeGFAtS-=kDnIa3 zuQ57yQm>&L4Ss^0x&HzaGN=N&QF#L?@m%Z-Nyav(rjN!pF#_Slal;NJ>XSrG(UjmK zX)T>Xdd=dnCo}><^qBP+V`F17Bo)@xu194 zP1yRsBkvkcW0&i8`4jhT4@ya#yt+PS$acq&-#8q-Hfk3ow@|kcy=y57#4Dz^?Vj{} z-%E0`Y`0hVjrUK6zZ87q5aEgav&g1ya6?CmvZM%idPlmB?_xhE3MG31k%bg_LEel! zzC4kIc(ZPAzZv1p-g9;f<8L2Jn{r5c{a$4sU%xvBz5X@!iHN%4`+9M{U#fDqM6U zK#%R+Y)0HViT|g1w4`crZAx{em6mABV69YKg#Q)aCBVy(Y>bSL1hzsWm&X{quB;>! z%-nStdrE5XCmA>S=JwW*YQ;3LbYL_Tiun{S1uPyPdk7~i^1p)o@Awr@;_nnb2k<$l zBJ&=^2q*I%i(ywZL$zMVhO>wrN|5^%E(r!GrW(WtYP6Lv3%OyzM&s;A%8iFy9Zrtv z@R)@9$tswI_+wf$pB6GBxG|`|cPnba_?(MK6fhT@CR~K^-Mn;4n>C5a2xqD<*{G63 z{sR-52XbARz^*D`2P*2$9jIo&l?e$bR*B7GSA!U7ObwI`VRIC(EU-83XAw>fiL}1K zodaCLo0A+0{mMRO)A9zPxwp<%cnHkZ8c$PIa(D2NteakYnmm$Uv|ru?65R`!mus~R zyDTTr@*5Ily|do)tOO@TCoGR=((<~7skR7&g1dvK1%S{3tD)l?1NuflhJi*W0}TNh zVR>nm$>KAJkK^_L)?RWM1Uz*X<9aVh$IyGZZi2dQRwZKY;8R3+QXC$|-a+3=v32m} zRnl;i5&IzwJsrZWv_{|w)5?+`;o$!U!amM-Nth_8*IQGblZ4pBhot{Q1^qgk`sPQT zO9X~K40ZmID5CmKIxzE5F808RX_e% z@~{n76DZFR0ELo2R7rpf7WGD*gSeq+-!SZu8&_<(3RxK{r~xbG+5+*K6-dZ{nF=bK zz$d*wTOb*z|AYiC@P-Uw^2dl%p#67&tLz7Kk}0S-$!6c8lc9o!Mn3~=i9ABg4RxnH zLFt0(hPs1ViabGT76>?|#?`4mXt!153i^BPHjeg_UA~+B@YM*WI7M-T9$j)Lr^5|4 z=%e36U?3uUj*MY)jx%43@xLWWoCx$Fj7d%q!8(FTprkj#WG9F~*D%2PCx3ht#2EQN zyh2EV=aw}>o?A$#9OrClCQEAeK`IBLk?N1U{>U9i1pkoRgUHfg9UuH%Ka^(LVP9l|fXf8s|e z_`*s2p#0c;OIg>N=gAwC{OKpyZRKG^-tbm#&y_bX3G`BJA8p6}D0sOB-eCa(Avt}= zMEVtS%yZcvc7^hYiA@aIheGa<_b+6tY)x7l{Yw)z9DT85dY05DX1d`1m#6m$-FIQWUmI4tKw9gl%uhmAm1{YBk6Q+(0j}Pgb6H4SjtC880mZwQJ zbpW52SZaV9L6W|gaOx`A00ZGnx?!aL5v4rxw4XX@KTklDN*S~TNkGb@<2xc$5W5`0 z9Kz3$p`Gt~2;D0`NA>}-mka@gF!2pPdJfaaLm={$^)wDvXq1$uyfWSzLnWh3E^g&y zc9twByS_VVi&7nFLr^~>h2udump*y{0|;873vz5+?-qxsWx)-KHr(2xwvOOJ`VgcX z7*mdtMMih+D6q&}ZyiIm!K(*a$En(otEXU_F|M}T<#zkuZnuBfZvT(m-qJdShr_pD zp3byRUnk>BTve|>WWNZm;Mxz_-v{9{@SqJa4MNdO3Su3GRK=i(O}KD-KGU;c@+7HW zvz6t6%D^mrkvx*Z%MpgkM5kHkQqzMHH3hi(NlkHiOgLc@0dGY!F5av^$gkAa9%R69 zB9|$}8aZaku~mw_wb$~Y8Zk4|yj9+@RC*@M1;qcnB$I&!lvR`C>@Vmir5vqkDBU~ zy8$UeoiICrKboD+_M-=c9YrNOiW`(K>?pz6sT=A4!ZT5dB){A+34ugdC6F8h2Xg4{ z&G1B`&|U6MOCH)oD!#t1YlnZ4{W38JJbPGhK2T-|X+F?KrO8TimcD2{ zB)s|XhY{|=ky+h2F(~1|t?J{3BF+#&PDA1=oO*(#WGr+`37XDvPk09QIdVGrK$UGD zLe;%5^T)na-Q>J9ALKmZ;5_gqz-r=EyPQXgG@ZnAj*Mbw4nGpkqk6PYN8l}Y({&aj zVhGr*8&&rm4@yEj&b%_jcd;;(6j7DEy3jv+8i1fCP(#5=qKBuJ!O~ zMK}?yNj<`eu$xOAFFp`U$+t^`w_2X!Cf!|Huzb=kEr(Dxu&h4i9zaRjqUB#YTeKhy zTI}cIw50u92Hln!xn<7~XrpU@(f<`84&0L8xKi7$dfPAzNwZU~?xQQ3Gz=}Ge5;Nv zQ|#Nf72_NCZAl=JniG6zkvrA|rEokT%k}c6_({SA(m(G7CpD0hNE*h)l$#pd6Iq2T z4xDhZRz|2rpsZpHd%YTvBf}fE?2DQ(7*i*FY9hAdpa5Mga?w3F_MNWe|BSqQhemqB zN=CAdcy)cWj<{pc+VF{F#&FB&-AeW_uUJ|X_7QC;+r!*TgkNVrR9sjSg7KylJm#zk zTo;O*2<8a*a`IE%{Ty|191r36`%rm}?EXH!N1=}x{co^Tj6rV-Rw=+DPlXqYZaS;i zs(WVh0rCiZQodu0m@95$ao3N*BYZl!ZTN!|a8fTiSBv<9b7D>ENN~rQ_VSp5^ zkUF1vs{8?z5eKCD!kEUL+K8HH8cE;8s;XHS3{`j%>v?#qyHa@%xRm((^6u`dhf9gm z6z>N1fJ=!}Jg;RpxP+QXa4GExmr%dpbLj?`P$vm4r5_V6rT=f?@;iI4Py#N26)M+l zg%Zz3wEe19D1jzEW?+RX?YTlpcN$)y&UGO!;Vyz8350c9)#N@zjQDK^Uw1bmQrg$z zhvw(+YUww-{pIK6Nz9Jr?=rfunJi~6YqUeLWTa!|^iaExUtY~$+ z;ms|JCOdJMrR3%Vo@9y=eEDg=yn4jvk+QejM3y}&(sG;GhcPAe`g%~Rs9hLicLQn&51YshT2xwXDw*Le;wuBYO| z&v-e%w8h0GZE1d1J6{qxjX1q@!_Tzh{9GJbB^`PtGpEK6l5Yfd2BS~{1BtavY;tG7 z?JR8?nM~F+22Eo)GhoK>A7RvoP2-4l80uXpy_LieK2EN$1evKEe>2Bab%@MW_~h|9 z>gM{=IWLBcU!Zr$@`Y4MaOK%6*B4^0KP6Q;67%JeK|B9YeV%`)y`YU06JIimA>CI( zO@GOfT9!1GPPRU1sNPZ)v_+VL_LiogM=QH~O;?`c^Y|HkJ-KEmkI5bEp}8DCy$Y2R z9aiEixS_c5_*2Ad4=zLFbD1 zxmt1;7h`D0BM7MLOXxb*I*g)V{;y-8)ZBfIf(l@_>ze=T9IX?35h-a3cy#;TS4M!O z(TR$8BO^tbQv7%@??~7=_a7nbZ|}{W3BvAi$nI0id}XqqpxfRJ;K6m1{RAQLTJovi z=tiBqW)d@B+>@CPU!F*nca?pzT-|v7(6uFotGE}>uNBYFbwv@h=Zi*;<&c~$HvnS7 z^cYrpD+YI2%hY35jFN=Xgps5}M-xH0wGF0rP>>T?bUh><8p{TWhi-J~@5)A7_xX2Z z6Uq!ddyJ|Y!|iC`I7WVO4>qc*449JI4^dfO~ePBaB=AAh2{e$ zAS~2LtkRU+ghUX8{lU3$f(O)2L6;Bl14t$*#Dqo0#A2<$hXZB$D9erEGmg(BJ_pFB zB!;Y+nlM|#{Tr(@9855wFcl1zBCQEx>Llk{N^409Ie>lpjG%3+-e^hWFCsW6;tSl+YRBn%lnOpexuZH42v!G%ZYwt syx+LjkG$CA=sb-FhPzD0nNP&j9XcHCU&2^yd;Zcy{lA`nv$q@NmXRMBz3FZdbGOL z=Y466s4!rhy4J2`3c)W1} zWFLu2+LjO?8#qDW-2g$F#s)zU7^r;zf9~Vld&y#XJnTdeS@)iM9+&ri=Rg1Z+*hn8 ziZZ^bD2G+$`rxFZD1UMIU#N=mN@KNp>08%t~setQ1X zx%2hL-I>D0ix+2Ri!;UIIn+4Ud{AqZ?w_kQkDYv#JGfqHt~Ay*TWj@Njyf!r>szhM zCr>)PuC92UZf-T!xy#j+naX-)qf%=%XA0*F=xBB2QnlXLD79WKZEmiwt(2&{nfvFO z_v$O3d|KMBoU5*vn)hCr@heiB)>>=5^6HhyH&bddG+;oxwUuB_gHFGUVW=n%N6IRbH&+WLEHwFzA{5kS9;n`30~l< zN;``@zqOS|9xJ zpDug~O#Ii0cS>tD<@ZN^TT>LAD}0(&&QrC62A_R+?b7Y*jrwM}e*gA+jr!e2X`{Yf zs;%9AtF&FZ_4@4_H?CJ!Zm+MEn~jy*)#_?x)Sxc+iT5MrB-Q}e3s(2=g}6}Nng2s{q^g2-v7p( zTkl_a<8_;QnV~PWGTf-(o+^PJ2KoACV{IFc^AZhWY}eOT$M4*^Tfft)-&w6xsSv=s zbFZ?#sc+VsM&ZK3?0^_^b*;I%UV0F_g&ta!*f+`_S5{gX9^pDJm0Byn#Q+_mmbf~2 zv(~CKN-M3k?TRQF3tYce$6Q*&k2~nz!wQfSz7eCaG*{5)W@lrjI;M@q$A%_UC1YuZ zrJ9x&vvkYSY)ea7TH4Z7%NVw_5lbJnj4{g?w~PrxQSdI6go0}Wzoe#8Nh;7YYIbl^ z%^twtDK&1}rlP9a6-A?$uIg(1x{71XKxy38pUl3&rFLTOPxSWfC$sJ4CpVS$&n>G} zb$iHGlqWYd<#cvXQQCKw^<|@KRLv(2Tb0(<<~tAGbIuh9+XJTpEzbKbE`?is z?62-GDwn+SQeR%}%WnU8foe%z zRV!*)U5VYT;AUDG>0-W6STy;TjyNlnzdBvHH8)e7on4$MZ>_Dj)@nms&%5=R##Zf6 zsK}*tVjz93)*27hc;9&-I$C#one?)?#U;JCv>12mJ0Q{K7Hm^B6Cg{;@nk$Tp&n56 zxT@)f8MET55w}!(O11Qir4JH4(#P#F%@i0Iz;sXJm1h|X`j9$2g3l;E6RH`rEf53a z3P7N!M3evy)lf}fLq!J?G}5+V{tmtG7*Q5OiGQVW?xRGwh^Xkv2 zkG^c%J7-p6Pj0BnnH8(5eZCSe$I4bYUee<6cr0$U6M^enXCgHoJ#Qxib$)av+{vRC z?NnZUv|_Xe%EssPH%+HzJ5x5%BaWynO9&=hCvopX!1YMpd=rm^iV{y|0dka2ppxOk z+*r1jW7XI!eG$w}59aS-y{GxZua{x|;l{d)@{M^okH=rBH&!c++}i5pql>fiM_(OC*z|Aem2$oQNp7uKu3bJ_D9+6g!3x~GektcQ%{4!*y2Uy4!;eS$a{9En*Yk4a%W~6~-Fn}jc8}cKv5B{lN33tQ znlzMG@y6BjROeI<2XEc_#=GY?OO0mbRL-e*+Uwlw5_fZ+8KCpctuj5KGOC{}ZME*5 z$D-TBGr4vT+-~LMwDe0GmF8x>)~p1^7Qbt26Z~Q2)~D55qV=hqTiNX|C*8&OapFEA z_eXU2-FW8LO114$^U7AM{;f)L?YkBEG2m|Nw@@~n19_}8woB`Q8^bRYt#Jn}zlT$~ zPVKxWwAXFWVDb%oy0+T7H=VmzS-X3$)qQMgb}IM199O?2{vz{` z^4Og)z?BFDS8koh+gn|){B*O@c$=C|_k>1=A0B4pH{BQxDEf|**%_Q=)uUp$%Sm-XRTHJfjlf_tzOF2l<8>L*c0?L7jyqbfs+{)FfUPn?Neiw|i z-cx_tCkA4~z}u>?+fUVe^kBvF^>{h3fy`Tx@&J#TKDR! zXn}U;#fg7YD`i~p*E)HI1b@f*tu;_+ULO2qsN-Cn&N(BVemUnuAJcnl4J%gpaA9(wbkr$8~9DZ zdZ)TPN*BJi9hmsuoygOp8<}xmjYp&W`?o<8!?UbgHxX*(zoH(5m7epbRsT`sL;>+u z;kDj<`m6PoEz%{@V|rbv6|X+Hx#~)~XJj`)kEd<)B-=)Txp`;XEi15?lcIT}X72=!H{3@M@== zHOcQR`r11*>aei7t$KIwSt`6Nu*^5JSdI zk7dR)@oZQi99ev~iXVbxZWaxF@W0>PjT>?OX`DwLsi@29 z^w?V}-I3WIeM2#AMNKG4JPReIK+`m!7zrhybrUQw^A*G9tkK%gdF&s5|B zVO8|f6WL31LV!;AZ9IrCkZw;K1GqJnl+VyYCrJMc9gj8yTnnsf&P&lUmgV+sK zJ>5?46OYLl4eKR|QgJG0NO%iA_f#Oj#vAD_DPTt}s6M5~;_Cb`#x%^Pxf;J|I zn`1%T0Lsf|)tsd-!j0kK=0OBEH|mWmwN)24lM-&6D}BU`7y-D^*DE#kzFH#Xqq-(z zNWCthNYp13NeFTZ2@T?~CxR{(Bm{{z9)jitf<_rZF^12erH@$}^n(t36tZ9m-Js^^ z1}9YAVEDjHK?*@4b$SQ*Scdt}9Qd4kPC7xmgHCYZE7dmB4ziMYqe)sjt4UhByxoMh zE}d6eE3xbbs1)IeiiXN&UK@catUU~%BpE0pD6>XzqwO)2rMPT7JA(5`oDcB%6pqq- zlz!&m(NdJtWh1Zs2Jk${CuTnJo7>yZ%dwr&zr4HKJ`Au0;de9$KYiIG1IjFY5&U!y zet#XbFQ^QB7t7)5m0G=a!_ieWT__$t=u?Rfwd(yNXVK9}bI1}#LHsF-KXXiju8}3D zc#r_tv1NYoqE%{P#V;4EtM&SNrNl(gywYgEXvYf4`8fSndISQQ2A$^i`u#Ks=Ju@c ze#iUiIXNyYj&*M7Op%kFui^>ece2i3Jdff&>#<5$G|}e@1#NC#FJ71@-F`sUV}A=W;4EHnoZMLg9!+$ zvnBH{nh~>(`AdRDGa6qp&4Ny!IF`Ru)$-;KiDny`89$Ax=95{$=?o}l+p4HPtsHz! zJyX%nmSTslDvvgZM8J-uVw|wveFRg@@VO^5z&_B$7_kpCj_oNa43)4}(mb@$ZDu*; zm#MNn>fd85{FfBb zrm!C}^!(Z`t8uJ_Y0wN`By9S1d(H`$)6?sMrd4D%4)pJPjk5z6ot(_-!T&eO-w9!GeBRFEheU5Rqk5P7{) zEp4s0-mSOZE;U2!y7KJ$^P5vW~5L;_Je^Ap4VquZ~@Wp$1DN zcvbKx;BaBWgzz?MkGT8^?3WNO7-U(;O$ z6sLL?bo#gw*QWm3?yimx{y*N`{U_i!M$ol}N+MHtnEzaa_5I-9+Ir>v z#sin*7?ljy-nB~q!0e6z{F=lDTyz-UlIu&h*+*Vz{-BW2+Trg6X+9C)xe3t{{!$C z%3gq*&+N|Z&njo0pP4-ib-~D?xRyPtDEQMJ%fhjcFRSk53AzkklrGyR2ERZjQ*US^ z(?v}mnf|7shcHGQuY@skIlgRFty%h_bv1^&6+RvRB!aQm?{7kLNd`x65gnCOI`ZXv z{X?2G48W$B8Vz+#{n+6^v6jNCvA0{tD8VAwQ+~m*W>5NZ=zxwWaw? zsEG?qcJvt2;x?Q;;OY_5YnebOc*ZysS#Ux#1x6j6m68I#L&OrRG5MU~Ga?*3fNvk8 z?AifX`&^f*#SHVW`h-#?*A5M`Tue{2gnuh9A}>8l@Umr?ZL8f=11tM`GOtUMxUaO zyi(Q6m`bPPW_tn^nZpdQg9n4K?e3%Tod|46LAla;{pYtz>mF{$CBhT9zSckB%H!}d zuT}+-jKiwOcIg8?zU0aTJ=UM9_a!+hP{Z{>sygb}lU;fu+{q1lV)eqTUYrFnN4sV= z+}ek&&@_mZ+;%)BJ$FfWNf$0jdK_FoX{-cV*+UX&9l~dfsHy?-B&e$7lEkz%=#oVG zt7$=7S^EH(#z=iden<3~OaN@jWeqAQV6Z*luD0X}lzB3XwL1$wGw2C4hDrfXpl-zR zzl)&kW(^*u(gHjoEx_KjJ}$uS814eRAh4BaH6G;3_0T;><@h+U;WAAQllq(H~psFQFL)D=VLUy#c7smBMVOG#qR#ZhhaN)iYA>`)EGo}@)d=+9#;0k36%KQy?F%q zw3{b=S}W;=$omtgaRXnr3D-`S%zECHM0f)XXE*Q4e-}}xlIQ+fZL9J&{EGaw`+%e* z3Dx+df2((JBwD|r;TJS^w7OPpJ!q2iQ*HyghP6$Q#!{R#I;~2j7AFy%4idb`Kd2!V zA-yWp61kQ261;+7DS*4OiGYapx-^%9V-il!@Yy=KMu(U_1P5c7QK6x9#3OD(E+R9BaJ#VK}Q}vKl13s zkw+^AKBgQ5vZ9cNXaKS|sGl$>4dj(a&$A~41} z-^1y|)4ci^?!@V*`Qqpk(8~ka|CCyJHYmG&*d^HQm$JW1*N%8Z`)Kw7735LCc8Ki9 z=+fRZGL zYoDV6Gy79?r!%mV*!=Sg*&7&i4(B6$zL0$l=Sw(`^ZCW>7|vhLUc~pgvPllpxKnv$_TWg)YbpFSxp@|O6cKLYkxC6_3hkA(p*f~&#(;_9~|xMJ2Z zVv?JXa22YdmivgT;8?`1GoBnagH31)7u8bSyX#GD@+s zd;oqLFje7*v$LTBs|xH4wI&Tm8Y3SY0lP$QH~Bc# zgp19(zKSn6gq&^5tlI38~hfOME}BNyZsAYh`b*<05pMMHT#5J-=7_&v_ob$Kn`W(a&MZ)fe z78A{zvR^@T5CYkZ53&vwT(y}$GLc!;p~=(xYU|tyE9e|5E{TdA27MpXCR*GR>lYB6 zyttsx&lM$!G1`wa1=zJAdKIq;&s}nD&`O2b&NmdPI^({m>^1fhK^#J@*=it`zqsEX zxE?pwTPwwV5A42meevQ&eW5s~FD%UJ3rmao(uIo%j@&zlcCj$4&tF`MI}wye;e&B} z;<%0#1(FOcQz=Uof;5be&>Rg~DkPjy5_0rOOFv-g2QA~6rRVKqs%>k~DuPxk!{D|@ z6p)FDhv00cm~5zO>g2-{aEmKXa~E9~LE2O`r3XG$Qfeg2EfWGP^H@VCRR>?*H#kW#LDH# ziM07;ITnx60UW8s!3#QIzbezvbN-0@GY@phEkQ`T4DS ztJ1u5lywnDjt-O&!QaG`y>}^hJ2&1${N{Qk=Typ_6tzwc)heGN45?Ph4I~gH2Q9`C z$uQ`QMC4eCopwu!COF4EY2cEhElWy`{54;8n1uv{c=)ilEYdSXy=C_$0YO7%zKr+F zYdpkZlUYq0N5XuYz>!c*fDd)NTS;BPnqc4f;AzDO>ylQiyPSL_0vmXFzEN-0T`piu zf{lBrkFaru0BqRNbq$l8S3uz=ZB*{BwWL??)DFFRx0K$ZbKLXQUv!o|e)Ucx@6|h= zu1MJ-JV{^)fMS$VblC8Q78IKV-=KkXl-N6Rlh7)jKY*zW@|DOQv+kv6$YwC<9p5r>q1->p z!vg?7>L==&B-C&*Aw@F4i!#CqAN53u8risSfA^y_wxpTfSQb?RVi|kWSFt#4VgcozdJwJOkaqgUZ;+38|7e^l- zRnDGW77iwSdiHE(S#ll~w@JXA@+Xl~=>Lq~(7niaDjGVdo$}k`Vd63PoO|KK9@m65 zfEeup2{bzLD}hheFBIpJ95D08bL3B&wdiuk~?>rX8rvqPkKoFc{JaWXue@U)Mx z3$$r578EnN^ZA)aU!sWCV&Qf-utVuVs4R^#5jv3B`BhPkjJG0&U=Y=Qm8%Wq)x4J1 z^G4qM853Gfib@dL@R4VTq{?f^O;Xj6p~NmD$w}EpniD&2#p4)(B4CD@Qy7z~Qo@sH z-Eq_%;kpx2-9PBmEyX;Ha@7M;RorifZl{*@w{)@?u*qYbTOC?f;e>m6S< z^ZB<-^`Qy*;RMHrv`<2ah~X{}E3$&fwY*u<+NaRsFt<2OS3f^P7vp89p>grd8}x(1 z^pvCnz|NHpI*1N3cb{C2SL3tvMa0$u49`P>=aqrG_oG1`M2wfTU{Qd+cT4X&e=;-{yMW_=Hf0`N_cSAZ16&gi2pDj3Y8Bwhgu2?A*TjUMtmvNPExBC!%Nq-Y}XoXj-2 z&m_^lMWTJ~p~iL?Fc({}aHew)jTMU+lt*7qXWLoSAIw`+b146(U~q?*wYM~d+l5D-d`^j;T{{R`r6hF#UY~=kG?OBodK4(fXjo z-iix-WN&!@z)aY3=AB?GNlLmee5w%J`(2Ygt%O3)nKWw2jjU435_inK(ww0MUE+{M zIYF3@de4*#%o}rMU|Cpi(qkO&0fjg+9g+()a4fv>vzCUKK`6@LmXAz_2kZlaT?V3t zAAzqN1wz3vkE;`t_)MuulQEq5rpGWRqYN|n<-`vhiAq>!3>Be6Y@IO`#2Qu96WcJk zBr593ZA3SxD6n~mgeh9Gd6~+7gfrM?)^#rTo%XMxe3I+q?qHO+-fUyJbL8-sgcH_N z@~(a%ysOFB&y2yLICMcc5gfsZ{I}m!zumYGLlSs>6L~xlj1^Z9E)^8OrfEeX)QS{& zWZ{vcRY`XwIP@MF6N@vq0vQuM$*gO}#9}C8Vo~|JGA0&7854^D`-K(|=w*WRGbTpv zGW=5+p_!xFfo6t;-xP+KHtl5!OHRNDtEJq_H1qu4ohz^M3X{3<( ztmL%pUF)OMvO9(YJBcfHuMkSY(LlIiX2{$+y>TLY61%N@xCp&*pA6;TDce#rJ0XP=e~Qpal1Bq?&9s+ z%V*WK_(wRra&`HvqOyLu4=@yvuRD7v62HBWRh1^a`)*ybtcDGb0&k1_460^y_Us9jJC-k+JcXd zAvyU*?wI6P9vy^WImc`f3!5D(5JaQJJ>hzxz~17~mOf}jdZhT6J#NS0m=(?!tdR!{ zr6BNpvRo&aXg-kf{e_Vkfby?I1W}G4BWaW3$e@;cOI04KUn040UYWL_rb+GOfngjB z?BuoS6b``QbEW6)%u}p^3W~C@y6gbi#Jt-mq;y6o9$MC?;nu5EwZ}JfG9Od+qJJZ@ z7qy8b203*SM*~E%n;-hikx9U=Z+=1|+2ZD2>LY9B4B@Pi0)IyN^5sRNe1yI(UtXf4 zB^|laBsR-w7Gks9Qi7gy+!JpBtE zrJllJFDN3CNzE4wkKk++b{MWi%2qbbvfYg`#|XO{DL;kgnA8zL0EIHcbT`@FjR5E! z5fxB@ll?01ec%$&5oz6uR;u;S1{WF3ftPE}jn!-KH?}GklGz|^vLdlyk(Pw8f=}n7 z*9mKp(w?Zh;Mn>(R5#K*j6abk3*dw4_a|uehv~Nx#viZGp1pz8{E56xi!ica{bM%> z7WO?lrqlrlh_w(9OW35m1Hu+e*z`=m`?36WTeAO71Z>W_;6iLt5+vPAeWX^-5Z;PR z3#C|*eJ!$Bn+K)k57qNaj)lLsaM^u9mgt{zBO&_dmP%vyMBz?bMFV1AD zEq6g+J1vpIz%?d=a!GICIonk5ObI*`AB1B073q2)oA4$eL!s^K z@E`fV>>d0E)rfgaAdUnQ-}Px(!+tbsRc9OAKJ*gZ7%ob;3Dty@tqJLgJz$Kc{RhhB zecU~S`Uec$+)T)J(Sn&wpd!Hn1=YBerdR3I&AX&gEJ3a_At)IL*4kfJN^({U2Qib;1s4U<<%qi()b56Ha?cYWK$$CX3fbcZ<2PEsAf3c4N zJKi8f!T_**VNv3_gqLQId`vdmBkv&d14)xk?Agcanna_#Q3%6Q43A$MvHVV@+GJ&btd zPrrxCo)R|wSDs~3ByeVXB%95Vj0q-5gxhXt+0RIGi$F0tQ?p2Si%4WI*$4%Ysh>Zp zsL0<$hxw7w{|Q>$;b?NFQDk+@Eh8x50-V~)CYgTG{|9qrX>&?6ljkGSva$+;oz@Cz|Q95MVIc%nRcBk zeN-EZ5s227ToQ_1gmPEt>#9j#*Esj?bu8mG>?0}Zi$zlcE{E$#Y@Bn2peqi0;Z}1K zDYDX7v~iK^M$L=NyI{sZFyRmqPQI%_B*Y_Rmds1OyT9DckW2s2fvN0|d}8~{X``Kh zt43;P2qELyBH@zcOyS!#lxkLy$aC6eC#mEGOHzqPDOWwQwgF@A+PcLQ+q-* zVAl}M!w~iKCLpXoLA?nW!rzsZ!9ra^c@jhx2PfxU_H!!mQZNdrGBT0PVatUo;*p6>+0(g z;6%-?gmHoGt)fy-)VTtYPZ$?G)GZ25Qe4%L{B zwe8P1R0BrWZvj|vAJ#^p44ICzKYnIsTBOYw%$^5kh(HQ8@F+#UQKCAV<1hpPn|$^o zIKYiP%O4v3W30Q$r$1^wM;4ONU&je0stbZAw9IxVX%)y{K{*&ICuxVlvl4imD}4ly z7{O&F=L)>XAZ<2yCc4jHuFJo39k(9rQaKmdjPMAe$-4Y=_9vuxvyT7V9Sa?_^BxYo z@gPe%-fzoa*!NDL9d<12xB&_@L?qRNIVoe(tw@thj2fcqP9afsaoBTyT`cg-61BaV zMQO(2kvcRsJU$%9{0f@WuFyu zdYtxIF@yW8#5(V@f*XJXc3!8J+;wVPA~j6*my|w|8ZiQ`Q_g-F z#&;`?I_J06u>+J|uT_wFqnasKs`W+%+vn9ca}ZCZsU>>ox_&MB>(^4x`4wgCm%Lf# z1d$0%2-YufO|YVevsP>5GDgfjbgf?2>iw->V4VKF#Mmb|{QAr6zXp=Cw+YU~ED7!@ zoBhwJfGnJXyC2T}Ju0A}6Tw4`QSK}(T-beub3Pr&{vt3&hkOFfB ztANZ}4dzXmwHnDM#HmJ7Kzlr|?!j6i6S48rySvrh-A{LSe`$A@G80qKh*($?KmKumHSfeUKiC_$z`QOtv?h$9BM=nss`qSc*48M!jW8Rv zp|*t0G=|J1HxZX3%ua%t(N<)YhUkKjBH8GjLRW(E5*a%!Vx2@<02s80pL0@!WntuE z+c{{HN{_9}E@=P>CC+u@mtD6Zdf`M$C|QW33yZ92`%V$^+mSc-CZ%9;DTbWeL0sr# z@EZ?+SLo0PwuMTsi!akFl!${Uqqo9GyuG0M6X>kTn8@E+m{P^f?#QZ6*+Pn9|ggbl<zW*s=>Y|Wq?P9_^uh?X^CLz&C38k_J(%gY(dc`-uWhxAtK^ISt_Ev?&f7N z2~9(A3Bd9!x&QOVe_O2zLzA+K9FWA9E>)ZTTPr$`2)uGEfE)&pBYbtOp1-*7^dbSz zL*D4{y~f(Mm>5n>K)!{sJm#ju)1!Ita?eWL@0fjt?%cUsztgJU;kbNuDZX>Bvc9P! z08&GyKn$T5ip2xnd+}$BP#ju*w45%b0|5hX!iP}>3(w&K+NfoS?BA|l(2p3<9V6x# z{!S7H51X^5zlMBlNb|~^JS|kZ!@~zc<#bG^yP&Ock>>+y59ZggJUS5r@LyD>VFTQ3 zp_3>&Q&P9Xd|}oR@p?P7B{m*FIHk1R>q!RmoqFqDrD4>tr=hgybJv7=N&O6n7`UY%-zHK`&d(NS?zLK*mu6-@ z{q)oGrPX@5a(<=0F;kqKU7RVcaDI=K#@c3UrgFbTnx|$ucqjV&g(c=ycwl$lEnX0* zc%&`N$A;oZ<++EAo*hS*ObW*XHqt!WgBheX!wfuNX$P&uF_D@FNqH<mB!H;ZUkS|q>%hR<|@?rzV89a+sFfsY?>r*W5-|Gf(KC=*p5e|lsw6uhx#&d&cyJyYLr0@ z;xYKlr*QgobJ^rSRTDuz@R5&|jjDAc2KhQok}?|dj6_45GKEt#8!vDJxQRgs-NRH1 zzJbU@v9Vzvhf;$CsSP~3Nzn;fzom~_VGR`Z^AZ%x0q1{Zyz z7?S2)3`MhB(k(fK{;l+yZrY;AekB^Zb3{aP#}LVFjU%BFM{?VSAIUAPQz@)sw3n`J zQaHC2OHFCCYbi2U!0}#(<2}+i@C51Pc)zb`Zj$%k5$r#wq7uQGB8dB{^3Z^GX$L~N z3D`pVSEdJ$-4r1q*l*#B{K+3or*WEEws55yyJ4Y{w;@&coRHlDxrZYdWc!Dw#2k|( zX6H&DF(^hL405tJfe?5bT#b4d6bUCGJ)~&v8)%9>vEl}b_zng|4>5CcI2sHz_%EDP z1IZw@BuHbB?Z;kGCJXesFVGuNW2Od1OXA2|k>m(x34zdQ3>6-_PV<1kF`-#3B3nUq#1Zjdexvof=>pN2B1PO6Wz)V1{bwS8nSA@*@ z2$}ma5Hi;pA)q4ACUwBZpM#LV()%Ac>SG8n&XVHd!%V*;c0EdR=I!U%IWpuTYp9+E zSLb`o(e6hE+jfVtX**0h^E`T!Vzxe|y=;FWm8C~;f*J!py1!U4-@b$-^6T561 z<=x%p?(Q$_?*7NT>vlVuHaW7JY&U;SQV#|-V(&F75S}ZwmCA=M#)l=7oP4>DCOK&s zkMW`{ zL61Ccg;0L8f(w$adE5%2JZ^=rEst9vl*g?AD0R!@7P-st@9dVxtq{uNR&bEAk34P* z7r*X2Zs54vN!kX2g)?6rpfBqr=*`j>Inohn6ddG+GhP7OF!G>)m9(nQA`1OGm<(R5pZemep%!4JS|Yoo*nBh}vlX$g|9 zs~;+TT!f^72xeu-|5t>d=f`8w(KYpI#^-_f#vN1PHEF$)dJC;r@|93OJ#8UN7YMf4 zXE&rG&_%{m>`@18kz*u=We`akCd7^aP=Dg-3g;xZSxja8>6Zy2E_#WoVtRy+CGa}ltWfxofM z{>E9c0qGD55>!A86|5e7Z8WI?eMK{sIQ7-|gDo&i<$ z^mJyAxUJto+!nk@u;u5k?e5~l_iu7k5lAAA-{GkujJCcUv?bCudV(+xMvNtnUHfO@ z+WXelhL>}0Qo=yE%6k7uWN0V=n62E41vg)>vq!oBbb>V&Ie__+1p`X6bhiR+XimGg zC6MgsOZ8@}A?36TjX|(J=M&oSRf2Y?tT)NMz&rDWn)wu0Si%R!nC2P~U?Ijrn1!MP z`5_=Oz#R&KiC%UR!K10MSeA183cozf@ykOd>jdZa-8+KTh?%K>>Cj;}w{OhL?aMna z!qHv*4C#GS*(0RukhAfok<-hrXzOa#;G|wi$_u;rQKy=E<^}BHI(Rv3jSlr4wni@- zafA0p*Et_pk~4t~gKirmEDvKW4IE!yrMXP?&A9m{CdW8kcuZF``N|ZuFWPVI?*7s4 z?*9XWp&2*gx|YwMQMEi-*U9mac6&rfZBT3uObZ=|2?qPDW) z?Pr=~0|NI^e^%LbEA+m1a|@Y`?Q9)GR!k;$yHxz^(*) zxQWfrX(vhYc7=C|*gy{H5XLQI3idgB3TT0#qnajdb&BstSgS{|qQg8#0?>pyc>te7 zV!Ko9i$Uf$T%z5DSoa*r^$vH~*jd`{Gz}^Xp?haK_Lw+Q;Y64v3Qy_LMcK|{n7@#{ zI%ch)c0x?Wl$xk0In2F^!pXKRB>_(r*eZBBR+Ngej<}e|bT&{?&@PS5QDex!jUWTM z#+hD*afEOTMQnsRLc_j^HG#5ZW8p*oZUvio=sF(G%jm&#j~P@z1~9fto3Bm}(E*}= z=-yt_Fos59JL}r&^e}C&3ddULHqm38=9;`ugTb4=aiVxixxLq>s;@;@r?=~O*H$R? z(8lH#ylU@y9J=JP6sfb(zeOlKmSCgS)Q=DQ%S5;i;eKY1%LM#zo8HKGJYYsTwe}}~ zFs=v&9;?T`{3Q3cg%UWU<&Ls_JARVPD)6eJJZlyS^iQ9qVZQ;VPFdH|WOacSRQaKw zdQGKcC-oZ2QQ^;#Gxv`%A%iNQo7LBm63@lXkYsFguJqB^CPpBfIBwXXM17K|DXJ1& zB(0@WNUvEO_Jl?th+MP@143k<0&4+G>?`lo{`@T=(Je@rkbP&dO#8mGY(evsko$Sp z-Gr_GJMymKGrVyxI|k9>&3z%{I7VI053_A1$*@0>XT$zx7V%69zb~T8R#?(aF5H?5g$^v`iejee}kVxxW>>S_{-Z9Cc z(7)KnY+BwRH22ojGKauiuXCEJqPv5SWZm@Y)8vu-qW$s~kmz>c?(rif(DEx1WWBTA z^Q;IbMaO58GiiBE!&F-YLc!g^(*i(ffz{9ffDC{0@r?m}BOt>-V~~M{0FAJ`w3^A{ zGl-Al_5jviav20X4K>DkFG$DGd%13chGEqtVjhU_q&Pf^y@S4$V(Z|`tEAy3BlbfW zdOCz#X^+4Yrky1}!omLygnfc{Ntn!QZ?>mACke5M4{hCZIB&eEPW|*po=XIVJ_2?A z(G!3wdj@*$G$#PnKtNtMCy93>uzY8&Nn0R?jNBPXuO6!LN&ke0;7CBJ_VLG(hi&jO zf$}T?P$>CB7YT5|qTZ-;5H}QU8-^WnToE%pNCBf%e}8uCgD{NhYu1B%6JUPKNS2D*Y6&CGrS4(d!Bav#0Z# z8|n^fDe?qqSs>uJ7T2c!aCcWjuAu*HcNa(d$u8f`et0>8DW)iH(4$N4Fw;zXbYVN7y@2wo$Y1WI}%Om>0@Gz|l+fAYsiL5z_P#4Cg( zcy8GvP~`^4by0YZNcr-XmjNlI~n zGdSSSa&Yg;clt+w(7gl_m=^~FLlYb%vlMExK@op@zWPPy)mwxbGzh=&{)r#O;0q`5 zgYskZma?uj&yzPO`O}|cw-xNm8qzFyE4Sy$`;sKkOIQ17JN8Gx%Qf*1^G@JjOr&2S z$2^z)K^C!VVhcm{Lm_p@yBDe}>Z-Id`W+K89Br{=c$TiyYxhrk!ewcZP0oG`4=;1V z0FoJlKZ?Q%TM<&hJ}KlKP7FP7ZHUc{jf2?k*kC5eCM7Kl2(&Uyst2a?|2ec6<*~&U<7G zLF0_9jZ^R^ee?o057a^vq}6z{Tj-&l1p_GRuz^Ku=P@~O|quMHSM+gzo6-_{+3D+=LR00NxLhu z-k9{g20ddqV|(n{S+Hx8{H|A&cd`kKNN}SL_fAyh`?;kAP3O2L zJOeuxIgNav%2o`awBDB?V_!;ZazmOA@(^+G5O@<{8u6-K9wJ3LOX40!MzP0+AJgVh zJ=$?2@Rqx2EejEW0u0m5n){B2rKnVKp^s6iJOJLWzPh$ztYPPuWEINFd*@+nTW=<= zuW__wsqsJ%MM4e7;8R&P<}aDX>!y97RC7`>kNnr2SS7qikSVd&<5% zN!o1X-#VMEAfQ?7%;MCfommFmni;uf&tPV=YpBrw6(J66lW$(DZ`HgF6^5kQDPQiR zQ<*djEuy^X#-=59;M|?yaAx$+d%;NyWEYZ# zaWUm4`SyfQ;Zy^6nyj4>3J$29R293nnve*?Td(Ykny4^~PWseDY^*_{wpiq%yJ_q@ z@yP!fdG`*D^u&&gWasd%_0i7ZjzMd~Cz3(JEvI)YS+=}lX;Iim+@NgPa=Qq>&VDGX zuqFf}M=8w5Srb^RiR=c}2-t1%INkXI*Wx%H!toEFyc*g01ALD{voQLvuvCmg0}56t zz#>nD7mIG%r&s00!rgRxX5#@e0(?@sTM^MyY%OuukHMono!q+q2HkVM)kfLsi;}?| z^R|C~FVhR>`vX$MDq?Sba(9juQ$oM#w(5AN>^O0)w7%|$pVPg691{*6lJk8~<8E&0 zBKyW-H&^&MUYNKm7j+9xysA)WU|B-OB7BGW5%|D}4V=IsdkLua7q1FQYE)1VKWWjl z*|sAXitNSHEyy&GanpU;VGMCzh$`d}7e{I3!Pg2B?*;&rZ}0h*y_&+S#{ETM{CL$a zQE%_C>2!{xROk2E{rhO=^&)ot={Z2+A;rAvDdh)HMjVjl3u8LFrx7*Lb&@uSRn@XE{b}$CHgfPgccqXXa4GWq z^6u{Ihf9%ZigyEhz@^9(&#T!DE}?1?T#9?bCDbnXT)M#})JTF$@yCQq@&8-6{O;Z> zlz>ZMg&OO&LWyT1>V91-lt2@Y8Cao;d#+H@orYJa^IeEbxQQT00%6@&HMtEDBfibx z>+VKGiu+pp5NA=4AqY2%V)sQ)r0Ij}th4Bmn}x_S6|_jx>ZgMva>52(i}Vm%q$yFX zYPcq8J!D!5DVSvLTx1xZ}xNDLqrku`Zh9Vyl)a#q>t%wECLoDEvv|}KB(;89H#?B(SZ1?j^^p_ zLyL}DVn;`Jjq_QAg3nWV5=UNG0^G{}>Ra&n%%ZaWHSrJypV2Jh8Frf$1s~kqsua6j zm{U1jir%O+y}4!6WG4=@nA~{4>7poAm!H7PyN*aZQucP6=<+iQ6BM;@u?tBFw35c> z6^!rd$8I^N7DeRC-tX7D*J3xa7q~}{hV8l5>4l}Gc}n5cbaHrA8#2D7883U6zPPxgFU`;D7m6Y~5z|XIkW4Sk&&8otGN4zo#w=@NH5pbZxV2Kv(?9L5Cd5X{DXY}>thN(Oz z$F7Iga{SB+R8DkQjhAslar5zKh`b(LhQ{lLt)6ZVl?_+&Aj8clGIfo#$5Et{zgZ4N z2S9%hI^8ADeChO-+(Bn5>TxUpHGK(9$J<9x6wKsx9F&?J(I`9sX1K1Iyw1})u@{k& zrhrGcKmFPWkTg0`@or?KAXADT59S>SJ9GaL!v6N&+?gQk9*68cwanKh`w6=3-2fh3 zH`z}R60ast{bo1nxiHGL0N#da! zC;EG`(bj$b9a#kzO^3Si`_kI*wP~azMgd^+HByB=`F-h5y(Q1lND)`i^(_T~Bft24 zVx?Qp5|_S@m6z{X2pnP-{Mp(R_rbRK9HPe@^}u#PFJ350kEEzC6lYyM+rQNg)<2G8PtV1>P4ZGe*_1 zaeOB5Ie^bWH8p@KgNRgNwuYw&R_7$I&X@|Onj) CONFIG::timeStamp - '24.01.2021' + '25.01.2021' CONFIG::air diff --git a/libsrc/ffdec_lib/testdata/flashdevelop/obj/flashdevelopConfig.xml b/libsrc/ffdec_lib/testdata/flashdevelop/obj/flashdevelopConfig.xml index c44f2164e..25aaf34a7 100644 --- a/libsrc/ffdec_lib/testdata/flashdevelop/obj/flashdevelopConfig.xml +++ b/libsrc/ffdec_lib/testdata/flashdevelop/obj/flashdevelopConfig.xml @@ -16,7 +16,7 @@ CONFIG::timeStamp - '24.01.2021' + '25.01.2021' CONFIG::air diff --git a/libsrc/ffdec_lib/testdata/flashdevelop/src/Main.as b/libsrc/ffdec_lib/testdata/flashdevelop/src/Main.as index ba8a5c618..71a5f74bc 100644 --- a/libsrc/ffdec_lib/testdata/flashdevelop/src/Main.as +++ b/libsrc/ffdec_lib/testdata/flashdevelop/src/Main.as @@ -77,6 +77,7 @@ package TestTry; TestTryReturn; TestTryReturn2; + TestUsagesTry; TestVector; TestVector2; TestWhileAnd; diff --git a/libsrc/ffdec_lib/testdata/flashdevelop/src/tests/TestTryReturn2.as b/libsrc/ffdec_lib/testdata/flashdevelop/src/tests/TestTryReturn2.as index 708a22ba9..f2b437bd3 100644 --- a/libsrc/ffdec_lib/testdata/flashdevelop/src/tests/TestTryReturn2.as +++ b/libsrc/ffdec_lib/testdata/flashdevelop/src/tests/TestTryReturn2.as @@ -6,10 +6,12 @@ package tests public function run() : String { trace("before"); + var a:Boolean = true; var b:Boolean = false; var c:Boolean = true; var d:Boolean = false; + var e:Boolean = true; try { if (a) @@ -23,14 +25,17 @@ package tests } catch (e:Error) { - if (d){ - return "D"; + if (c){ + return "C"; } } finally - { - if (c) { - return "C"; + { + if (d) { + return "D"; + } + if (e) { + return "E"; } } trace("after"); diff --git a/libsrc/ffdec_lib/testdata/flashdevelop/src/tests/TestUsagesTry.as b/libsrc/ffdec_lib/testdata/flashdevelop/src/tests/TestUsagesTry.as new file mode 100644 index 000000000..98d8bc376 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/flashdevelop/src/tests/TestUsagesTry.as @@ -0,0 +1,37 @@ +package tests +{ + public class TestUsagesTry + { + + public function run() : String + { + var k:int = 5; + switch(k){ + case 0: trace("1"); break; + case 1: trace("2"); break; + } + + var a:Boolean = true; + var b:Boolean = true; + try + { + if (b) { + return "B"; + } + trace("A"); + } + catch (e:Error) + { + trace("E"); + } + finally + { + trace("finally"); + } + trace("after"); + return "X"; + } + + } + +} \ No newline at end of file