From 063137dce450cc1a6c96d690aafa09f95dbe9630 Mon Sep 17 00:00:00 2001 From: AlphaKR93 Date: Wed, 19 Feb 2025 20:40:59 +0900 Subject: [PATCH] Plazma Configurations --- .../0003-Minor-code-optimizations.patch | 19 - patches/server/0007-Rebrand-Logo.patch | 3597 ----------------- .../server/0008-Plazma-Configurations.patch | 1112 ----- ...9-Setup-basic-configuration-sections.patch | 146 - patches/server/0011-Add-more-metrics.patch | 98 - .../server/MinecraftServer.java.patch | 11 + .../minecraft/world/level/Level.java.patch | 601 ++- .../world/level/ServerExplosion.java.patch | 15 + .../destroystokyo/paper/Metrics.java.patch | 349 +- .../java/org/plazmamc/plazma/Options.java | 9 + .../configurations/GlobalConfiguration.java | 23 + .../configurations/PlazmaConfigurations.java | 150 + .../configurations/WorldConfiguration.java | 21 + 13 files changed, 1146 insertions(+), 5005 deletions(-) delete mode 100644 patches/server/0003-Minor-code-optimizations.patch delete mode 100644 patches/server/0007-Rebrand-Logo.patch delete mode 100644 patches/server/0009-Setup-basic-configuration-sections.patch delete mode 100644 patches/server/0011-Add-more-metrics.patch create mode 100644 plazma-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch create mode 100644 plazma-server/minecraft-patches/sources/net/minecraft/world/level/ServerExplosion.java.patch create mode 100644 plazma-server/src/main/java/org/plazmamc/plazma/Options.java create mode 100644 plazma-server/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java create mode 100644 plazma-server/src/main/java/org/plazmamc/plazma/configurations/PlazmaConfigurations.java create mode 100644 plazma-server/src/main/java/org/plazmamc/plazma/configurations/WorldConfiguration.java diff --git a/patches/server/0003-Minor-code-optimizations.patch b/patches/server/0003-Minor-code-optimizations.patch deleted file mode 100644 index 7323d5d..0000000 --- a/patches/server/0003-Minor-code-optimizations.patch +++ /dev/null @@ -1,19 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Fri, 13 Dec 2024 13:54:22 +0900 -Subject: [PATCH] Minor code optimizations - - -diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 1a808fc381c0c3ea1fc49bbffebddf2c550e817a..55f15f26b56b97a561054b0660ba4965bb008b36 100644 ---- a/src/main/java/net/minecraft/world/level/Level.java -+++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1698,7 +1698,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl - @Override - public List getEntities(@Nullable Entity except, AABB box, Predicate predicate) { - Profiler.get().incrementCounter("getEntities"); -- List list = Lists.newArrayList(); -+ //List list = Lists.newArrayList(); // Plazma - minor optimizations - - // Paper start - rewrite chunk system - final List ret = new java.util.ArrayList<>(); diff --git a/patches/server/0007-Rebrand-Logo.patch b/patches/server/0007-Rebrand-Logo.patch deleted file mode 100644 index d0d7d2d..0000000 --- a/patches/server/0007-Rebrand-Logo.patch +++ /dev/null @@ -1,3597 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Fri, 10 Mar 2023 22:08:56 +0900 -Subject: [PATCH] Rebrand Logo - - -diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png -index 518591dd83289e041a16e2c2e7d7e7640d4b2e1b..d38aa01898a2a0f2dff06d500cca2eaf5af35cf2 100644 -GIT binary patch -literal 179911 -zcmbrl2{_bm`!_s{bxbH@7sfuaj3LIJv5$QyWF2NmStb-QwivSSTed6{{j#M(*``qv -zg=itgNQJUYvQxds=y(6_`+1J%e%}A_zH`hR$N0{5UFUM0=jU@?i&T4C^CKV;5C8x; -zVrgN50RVtWj1LDJ007vv{jCcC05}O2u3-RxiZtWH6iGI`3;?jh1DssKU2Lp%d_#g% -zu(%K(yh>yc0l;|a8AcMYz8CP}l0JC#B-CG3O9vAe2LKe#&82 -zg2SA36^Axi1i7%6s|8N^)DNO2>%Ql9QL=Ld_#g%Be4Wk -zH5E9+rbAs%k1~|Fk8X3keSiI~Vd_hW_X0|3yG# -z5W&Xg9~u8gU4nxC5fK({dO7_6-a5?b3IVT*!H0!h3iZXCUd9K9OEat?=op9MvEd=1 -zP9Y(I|C%ZLf2k~KY%Ga@t7%IrI0ppdLL$Oo|Ir6;f(^&(OCjJ0b!E7^vKrh8p{8>Z -zp>tC01YBDO4*%2CCIlDYcjcd^8jPmuYKKiVbPyW5 -z^`!!Wu>N>eLa@J-Uu|_?EgVi=9gq80f0Gd3ON=OB^#79)xDej}+`r>M2dm|SRl^~*l+}@%NM#=l -z4TLfhkM~vf(bR_Hk%*IUZLHS6MzaeI@DB*a2L9)$46Sestq?ebCQ=Qq?CYoQqpXI| -zfGhiGscS0xYWl#{kiKwV1Oms1{KH_C$FuDaW6kJo$;{r6&G!S8N2ztY$Luo-^ZS@?o-T8+Y=H+r|>lLwQj -z1LV(JR>Fyc|6hNh(?He#w6k=8I{n?q6b4gF`ey`LQ6%Z(pW%Bp2iKRNZyUc|YLelLzwO;);9{4HYP -zmuoY-I98bl;K@WxhuX6SH#v2F5c;cM!QO?no4ZpqQkQ*miL@GpYT|-^@n;WG -zwY|up7eLRjl>GSgOzgX}H`klT;_p!WXi!QjMKoc%2GgLBR`V(8&~_yea#8#t~tTOWs{in%QjuTP(J~8Fpf70n;&t-^N1@{a=7>19h@Qb|&O2 -zH3m(e8NOv}{M5U#kZGce$qtakZouBnwc}cO$q{1eFhn|(gisn8SXZElfx8km#tQFS -zJ@EVooatLVNqCB6HMhfTC7S% -zY9SRtGn5PEJ@%MzED}tYq{Zc6>kO0Tnr0d1WC$L52rcl2`6qrkTt57HPyIR6OoabXh!>oG?jYrW-r!LW{CF*)#Cc$uD( -zAp*N&4r7_**$JUt$ow69yp!y;$w;OFi9=V&7JNwHO7I7=Uo}6AscSt-Rxb~=QSfbC -zsfS#({t||u8<~LPQhN`*&2j_9(6a6hcj?^v6*k*;kL@fM7)uAsElAWylGU6HT>%$b -z6~P<=YzBVWv-dD{fZ(nFq%P5#$sDM9O2(JJ^GQ<`2B~EI*1tp}A{u}>7yp9tBc3b% -zEpUxJxZb_DNg=I<1@o+nnPJ>q10aR@H@JJ$TUFzTaNx&d3iF`*&(;=7v1Kks=VpT@ -z{1RT^;qL=#xZlXEH!ln)WHa+HoiRD%$Ot#4cg75L@7-0WTi~cAKaVI0dfdsZd}Im} -z#@S(o&l$$9=#z4~l}x?uu=%Gc0fX;yyqISIL}|B7e#X?B9EKLtlKw;9NM?dkTO(8J -zWSQ)3luIGi03icoDLt}WG-i97;Pq=rj?_O8 -z@qD`Dh!Kcs%PcA_o5>(?L*UoLVlYF?mw&VrD`(SVMvhW?iqLKk$b`x8^r{Q{Ib>cF -zj%*fN=H^q$c{8ss++q9si$oEJH%blxU;OXtWDd1;$-l_`~6V`cN -zU-=_F`z0Ig4n$)GJlm|gauIrHc -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 -zcI8^evu*XiJh8ai^VM7}IovhbA-de` -zn`LzfM}T1+ylMH(tOsV1uU{=61q@`X1QXeIxWa{Q)hMutPe;UVf!- -z5%iwi`WC53dg3R9ne?=EsN+RTlK{i<#tFs1s#7zn?t3G5YZTBUi@Hf^HIURJgW;=o -zEZin?xdG8yw|=fPJn6eS^V;f4Jseq8KyWs2orNu*w7m-zzpF%At3VOId(6SsAP?8i -zwkbVnB{XItm1;(73nD;eUS%!itLr`^Yjt6gD=}u?&-R;qyW@M(E8-n<=W2OaXX2Ft -zTNKhThgk??&L2!tv(q4S@~bUV=x66-^Bj=T!l -z8^2da7%WK=|73)n#&vmNg#L}Z1=b*=B624fDY7F*@1ukqA}@$hqNzZRZjAa!=1_pfw!F9e$Bmg^bn|T#Tn(jcD0zv_9j7CpqX{r8c4MhA`&Wuc&8L?QrD{6(ukStwITDy -zXHrZD_ek{s38vmW1~kBqGfV)d2hfbz#Lwd+7q4$+PLX*ZcC|Wz_Ekxf1MTg``nDKk -z;JfV(HxSh9ULF~~5}Cq4a{<`$h&j3S$qYq3K0k-7IKy=y$3Sz8$RS*@`2z$2Jix7? -z2P$ZRA-_OY8Jm0VJAQx_K}*azHutTPQ0wUhY07V=xFH4?X6PR(lGmTW&Ri_1{*8$< -za}eB-E1U1E7F!%$rf&2kiHl#e?%Z_1jhD6nrb8JOf$!m(Ini6I&Y8~1wkq+u -zGoyey5;R5TJ?J<0t%C=+E!z)i7=ic|LSjPmP|xIdKXhPoo^~ZR>wwRK_IC}cL)_j( -zfKG$>T$%JlIwk0~xQqL1HOE`hYBq!!M7H+~O*5h8W{zs$&bfbqk}~TQNlUw1N~D}U -zTWslK5lV92M12XJYqA-yTdGc%Wp9S0 -z56NT8)Zd@APDY^G>lx_1^_u;h&EQ0AL+zH}*?o68u~p@{aB+D)g8K)p&@$)?pM#Pg -zqx_zhgVHipTVXFF8f9#zM#=>oDf0<-OmUoI*9<;6Lu92H{&?JW3@Na~LjzJ=mu%X| -zJ_53CoS2eIyAsI5&q|&kU;Lmv$-r{R3dA>Ig2v`?6sO`|2JGwFgNlRmSEsw{;7gB^ -z(b!oRo&$Y4ly-+Q!YJ?x91e>Bd%1+434*{X6A=l=7nyf3B?WS3p#F8vZ{+0^$d)?M -zojlgn)D#h3Ql+<4582x`Clj8l4epa#*k@SFxf=h>8bqi2ltTgUWo8v%C7W10zVzF1 -zUE_DrffZ|;vgC`T{TUc|SbjOi%s=vzF6k%O?(A)Nb_9rTqJ$m+>X|-<3zu{$3luSy -z+|_@u74fajRzn)v`^=A+{#I+4@L71XYxC7JueYl|-$a0brOYEhTQ-BtjE_64@M3>5 -z#1v-0@R7_Nu}(v}9?&ljYjILw~s!I)nYB8`gtbiQ17*QU^srwlQA5Fm{ZZx!+;NhrI{PX6c6n; -zmJS71YfudeXf1Z8Y@iCtule>Vl&{KNh-TP{WC)68P-lT97{KP5iR%R@sp5ViS=e*n -z1X4u>#!|HiHb2CDVj(rxN1Gtls!Cu&oY?Rm!`7wM++z?sIzNDBNtw@_v%lavmj;ox -z?9V|F(y@(@sA0nAd`XhSu1wPY@Q696jIZ}`Aem#_6#@s7SI-GkfG#!N1p+& -zd5oO_j4ii`Uv)GufvDd4dQy=L(KJ2?Z~{%YZ%UC~Tuay#lDWB}Ze2w5m(8WFcDJFi -z`cCiFKu>%dMl&BjJGOmGF5&gi0%N^{_{3Wo}s+s9?A+@#bG-$dVUx->n -zzPe(C6-SPy8dyP_5qfh0n3Bu3$^QZU@|W4f(>DYvIf#&*GYqTn4U7@BOH2fmVmS~K -z?+=p9^^Vxanrp?!AOI)*g11vweCa8KtP;0`0)qYoVgUMT+vw3 -z)rFm2PpV&zR;;e^SJ}sRl&w_fd<=Rvk3Ia#S2&utmsGH_#;DZKq|o+oi?S@`ce9I{ -z)&`=*Pim^{8c0WT_TXvzwm<(jCW!gO^6B(dzMT79eJt-Q8IvlkpqP|~=oQQ8mRLv9 -zka6=$?jUHR!#gP>(Dyg>$`|7yd+krq*oF3G49BmzS~X0`J!Lb{#1O|+<=H9=7)v?d -ziv~zLDLOg(3ycJ%YAV3Mg{FnnUTk~{vp;Z+)qssCS`lgHFmQ|?Wh!i_DYX;^E=KPgeFzcEEop@pz)Dv@41=Nqzzxi_{ml(~Yg -zW^9a=tlgA{CDCMIMakR0D^OBH*?g1a092j*__+`)i#&8qAof@!AAz4>ept@e3)zvHCrh?e)ctah -zzN??~%hsB5A3a{M%(7g;PYFw~JNc_i{@u$P3eu^+2>keaC2ZWRDq4h8(vc7PVl(w? -z&GqxbQ6Sy+jWNebG@twV=#L}GZr0g}E%k7vs#edT*v+i16MEl1ZYF+(SzD_=)_f4~ -z(<>IYw3M|3TON@Q-%%I|`UR~^T!n3Hl}CO1OP^$n8^GBgK@C*^TXiCPq9vY`WwO(r6evhyI^ReI-hW4U+RGut4S7j9vYn%0tB?<7cI -z`JWQBGKzKVX$(XbavbrO!V~|KQV9|)zd)UWK|En+Uko*GS-ooQ?oQ6W8iB+|J$*6G -z=JpDHFKNp&%3!JAyk{=A-+W(qW|;mmCrcwFhN!$oAwJD-4IAtT66!bqIUBt-SKGW^ -z6WhT#XM~UNxP9>U_IhQhe%rA~4!R2MBt`9n$;vHbSnV=Kyd@Glef_|808wiwAEk912Vr -zXj&r1)!p>{3ZQLLk9Uj^YJnxxs+|UXaQjh6HTxK^(Vs)5#aQH0OMH)hC~<~8ub2$u -zu#3!tBp1utAKtq7Qw+!c3I}s6YdmRhQ?n!84ZT5 -z4J*Yw87YPCajfq|ag3)OCJXM%Mqm -z;Fy~EdyUhj^aOb5M7}Y3%&SKF -z4jM}^FfE|ARb!Asu#8;OLTYs=pw)1l{=;z)!{71cth6aiTQMmuPvR*s8!*DeeSvLH -zbWGm@t1b!6L}T3|?J$$z@AVF_!0DS9j>lETz4SH4dCZsS6svl@J)F{Y8 -zZLY2>_G?X9^;zVh)M;&nm6I$7tONvt=>^@fkrF>G*V14l2V^LE08nW@Pk0#sWICcTbl4oYVe)VWpXj#1;cZQdW>Y8td!Z -zf+;zpY1J-kg?$$b#(<2os?pfh@+0M0U}z8Xjv~Rok{?rWk+HOA>z^5Xu?(ZYRz%G_ -zLD0DhDgm}pG&lT2n)D0Pbu9ZjL^Cg|79#gX9{YVS*4O))wss(!3W*j|54VGXkG30G -zVjGnHf_xc4e2UrMm*yKG3hfx^e9!oE0I;O03tc;F_IB^?7j`T -zwK#HqM8N`@bFrp09Oi!AZ==qBef;i~Q-Lg%DUBXGaZCv7v34_${JyB>AZ3U?s}37K3E5WzS+YIMNO5 -zJl1*Q>7K&SU@fXaVQLCcP6Fe#bIqou0i4tz;>7AU_*@K{%)0% -z^X#Re;(@mcY97BgU!PEZ?<^nZ(Y3An^Q>$D`jY0tGd7y`pmp7-$&A*k_NE$>8bc9N -zPXA+*JUd#n+ClisLQ763&_w9hM95V%_6-q{#A6If*?q=eh?0k5CM(X6TVFZlI&1x6 -z-H{0m@hrTM3Bf;R%qU!wIgX1sK*`Uo&oheHudIW&KDrMnq;6oQkFni!fCU!myTFwA -z6-l<^bz`SJ`|98g%gq-Ge@Bu1fAW@^nJss73Y$eK?wv2FVPTN#GbNxnhzQ!bfGfKD -zY|@SB2V*IumbgddQI|t+VuX16g1R(wyX;}%c`|-0J*3_!GD*H7{SJmhk;LkwPdG|v -zqIo66gf?Z?WH5mC7sMf?$!O>r43;DdOs?$I9Q^dYa&W<8;H}pTg`(kB$p#6!< -z?s^R5pzqNe{(-!U-=jE}w$G9t?N{W)y?b8Ysz8ErO@3RhHTKsg$g~R5PvH=qJWTf) -zKyS*p#33-n-}#h=|15dO!G-h0W)L5)}{9Pk@Rbw9ZFJbYrwcfZk;EtWwTuuCX^483rh$uGG>$*LA{x_!%xNm-wYxrc -zu>ZkovDuEu;IrnscUGN3S-x&Xp42DAsBg02ujLi1WH&isT^*iOEcT&6zsz3?Cwx`s -ze6;m9LgmZNU86WXc6T~AaN0_wnkCmG%pSQKbgM7{S@ -zs1A}WW?V?k{lr0=jo+8Daw2jbF0u=lYEcat>M2YM%-Kv?=Vx;!6$Z!3)D>W0ZV4k; -zL6GG)NU~*h2iQwRSoBTP<61dVW}Rss^&VmfwQ+I85d^(hLG7-Cn@qCFlB(MpFvvV1 -z8nLc}UQ6jpSYwL#>>_U}ETot;glrQf9HVP|B3)eY@FcfZi2a-32)sh>{=dBgo-yY> -zz4DmMJBWN~{ScyJqaKA(xWYf@T&>}fs^?_Dw*#PKO~9L0n1M9L@koI|n}BQN7MT)# -zXDjx&n|>xiVj%3nHaURg*7Ye^Vq((zg(2*H6g6>u{etUx1MVr$V{eOd?{nfiJ9e_} -zw}AayGY#JyPX*5FW}AL`@cMyrPhf~a?!H(Y_ionx-@4-M*Z5iIcXeT&=@|>b&$SDL -zR$+!4+y2bWj=dM0FbDU#i(W~$9e570 -zGexQ(a)oQ47MV}g7#C31sXDqcg+#gOexX(&29=VbSUb`@h*KM7;yyP!Cel2ipK&)v -zEZgwhMYrU++Q=bWMR~O{Xw&~`6&`u_1uYB(O0g^EI -zI&@-~{&I_mdIM|JpmwEXqeZqir7my1tXubu<*Dw=&zY;uGn+l3q`-#cD{Wovr-;T^ -z0j5J6^J_Mews;k5htA@5uki>)-e1alB$wXfjMXPu+V%7O$X3v8pDW!>y?iRW!tnhp -zhvf_T*7~vCa6Mx?tpC(hG$=-2Wofq9%gLA;vv9`6K!0N$w}|~}73o_N((bEoP?FTQ -zzo{QJ!5hcD+x}z=a(RJIhxjU@Vx24;Zdcu6TRmH~1<7Kapw#AA`g>jjpLm@mfR}NA -zI+fAvKQu89GvKI_TDYXy~OH#*&G84Pm0Lwz`(4Z -znUdjd2Ex?*zJ<^mn9dS|re!0G>f7D1mRS2KkGG1yH~(7hE1=#5cWTkAC{J^?xr#r# -zLQPYRNcO_4Zqnk^@**H -z7SDjWUph~$pbd~LA1 -zA}c>wpbWQ#Iv56?Nhz3hv|I3CutQr;14JdW$`mxQn+N_cCbP<|$T`>XHo-**473g?sn*}y-DzS)~6~vlLrJ4Eu1$o#pfW}(SM+sp{ -zVxHx1n-1|4+-ha#>g~>}gMWJT{6-xdXSiNO&DjQ> -z2AQV;b6v*_+4NXl@S0+2eebpPu?^BMIqG+5TrF|L>-x8~SKT7@r#7_B -z-)n#3+E%t?`ZeqQw70!tzxwI1gN%QCk5x;g#whZT -z#(XF8As>IMoCf{;%!2~?;vC2Xr73WEx>Ein6?!mDl))|{4ZMn1?t&w)C8W3^ffuwk -zr7RRlOII2oMK+)^=r0XYKJ}Oy0haW54MQIDip_vrUMM^bn(nv-$x_}vPh3p|%f?6$ -zY?@DE(Al8sJo$Q{AdrV`^|h+eS4&W}BltAPas8_isEmn|v875?x5BzivF1`M;w|m& -zU3?^|e)RfQ{6{OSx=inZloj^fMV|jyhq{Dm5a0;KueB8Uc(>4|T+CS~jzT>og(4l# -z?uKlRF)kXY%Z@#HrnU|atvbha?m#QNFFKD3eJyWQffC86cJp1gQ*;q_nnGr3(-Z>fxmLfSz -z=8w1+UdSxKRHGWeiTs16t49YPt2NcnruJ}YgO5LPyzHckm4;8y4W4Ei`t{XTJ?}{A -zxL^7)n)UsW=2qVir5c@rEkS1J2oJ|7&aUJv&BUvrmdK8S%>XMg_{K&C*fz4 -zwO8K=W%Z0q=%sm}OnG``SVyT`PYQDRVDne7h-hN$yvJ^M)&52OcfYD@|9vJI&wX5( -zXCDxEq#Q)#-O;0$>7A%60P>^oIYKz0$B7B@G}n^*7MK#J%NY<9u|FmUBP3>E0$ZMZ -zlL#5o^fFd;2le20LZ6Mbu3G4w#dPuy>r;*o5c2sS?W@zxX>YFqX3mkd?3X0CD3>zr -z*x8C)mt6H8Q-aS3Pz|m1acg*fywLquA@8Tqa?4?2p3Yx)5nG@ -zjab%fPxR}CFvq5Am^JsWtNV7^l$AeFXLq07xp$X&>GXRb5{!IK5kC`kGy;`;Gf3zX -zj0ItQhFoe;4I5=I22IrLOa#0=OvrEr -z8}kP_SNcwaCakuPe>-M5$DE%3@O^;kUNc+lRj}h8OiFxcvGw@wYAld=OZXh_+)_2A -zC-=AbReYw}GR_oI+~JQ2hXvl`$wj?A`PZyIDIj3{+bb_vfyO&Gq+H`EGuH}WH{*yu -zUGGF)hJ<1gy3Zw5LqmmK+|+r##x#0fyY-RBd02Qs69y>>3#^j}gO#(csu7Aw(~o|! -zJa37YU^Ya_#W)P)8=f@q3gpt|9abA4G?IY1xyQeWRK1>;BCT5b2D;guJtxw4SP9t; -z%{t2$QpfM=($Tb+lsJHwQA)0242opGRH)dhMG&ToebO(&T@PBl#unj9=Czx;gP9zX -zZ*{La+)X%n7Bi{T?hJc;M>(DG;Bz4%_yv<&|*DV1ydgeL}GtCzve!Il?1G3}mAcki;7cbGv -zN}QmaKI7Ncc+%jVj?=?CgT{%!fxjfi4P3b1PY-_b_IC-m)_jh56Y2?ynf4*K>Q)&k -zdm5gDSx0#_(oV@gW0(b!0X>dy~Hs=Mo29oC@eIi+#F$oxA8lOny$M7~m{dk=zgh8tn? -z=Et=|f=O?7H==Mp*QMk06YjZ;ypP$BdVC{m0dM;EADpqqVqR8_-L -zi)wfbPtX8V^60U+@>~d*FTH0LBD$ils7O*IH4_S{s~Q5XS>A6b+f5piEzGf5;3FRr -zlwz9|e){x&pGw})h+~c9Z&UebNhxJp^~Kt?=6nD3A__!DamYE+VThNmr4=k4Cs&5~us3h|Wh>j|fo)lC4yw6=1P$Vsp -z+hqfv1pYkTvHofM0;SNRYKSdFk;)>*3j(H@;ZT)g* -zGouTl`9mZLa{{;s~XYjfG_jX4;i69>Np-yrMfR7&dL -z-qlpC+wSDn+wT|Krt{3K@~l9|g&EF@$r}>C2f6&JUJ^6uQ12Hh2MhlUQ6-JIec~IMfil|4{0&#W=i< -z*Zjdtyq45}#`_-3q9x=6$#qD)4x%#kCLf~NkzBZvkMg?y&+f-KneIGDuWVuNGk#ON -zcemp&wB0Mwg#@NEQzFCPl3jf#&npTMvy}=g+JVkm2D3~CoXbJDd(WmQOM^1_Q{@oU -zWQ>m(8Ll94;q&Y*o;yyUr(%iExw};fakPrT#=7lKt}t?B1Fz!BGLxQoq(Ym(X^g*Z -zb={bAupNHerCBu>jn!S{Yc#<`DkC5pCo=nf$D?Vd?qsg@P7V9yK5>$7BA-{z=XasB -z-d}k~-XIAJywyKYqzl*OM#&IV2#WA(Oi5*2hEnqLQ-5JxKyLu`O#4g=fHk8xYEF<- -zB>SU9z-%^gKXARv^k(G^H1^{h6TE7UAqihI*M>JwyW+C8 -z6z%U9i4-X&i?o_XgV`VHA%tJFA0$nm5vUgu!pGRirSUt+G(bn`*XQA4@_d81J1X!y;Lg9y_7%!%8!M<%g~mc=Nt -zmS22`hC!8)pQRpWz`aUvW3xtc=FhJ%mhH_E{z@5A?=#PL!_F`#(BLgfOuS=!wsihz -z;Iq3Zv_S)JQFcr`S1wt`_St>8YK^rz*N1}q_?`EuVD_I()s&`UL`lRXLPU+ytSINesz4dm?vwdpm`bdedCqv=R$u~>}>=6 -ztz%ca>f!Cha9Adnmnt;iv!?V0T=67Ch4Auy}VKP2aS{TmspyYh^+^JpD`5!8@a3y~cqlTCq$awYd#AWPQSo3|DRutK&V}Lt?^2s?$Yj7uXB} -z=jtoZ!+^LFsY#FEE}`I#;O7{& -z-76vB+s1OzToo~|E@gg=u*06czM-?}1(I#)jtfF(xigoucOQu~L`c&En@?i)vOsf@ -zcet-WcVL5D)YRD!XkBaRMHEqf#Yce9?}Z7TsvC1?M`K$dBTy@o1Mn5}-cr)XLZ*p8 -ziogn218}$z|1h}pWOC4eckX?#(G!9NvFrPkXe2WsL2VhUtQ%qe{7-RKra`*--3p7@ -zZKl^9#9T@%L|NAMkYxRj(A{wusxwxMO?ba68M* -z#V*p`v$FSL4so34{yved^>SCjg?KHforS7d@YN{bbEXT=$5N90s=2Mt4(~-(oNgas -zX`}U2Y8Zd!p%_Z(lT;DOA98q -zl^t|uPUWIL38ye!*r!@GS&0fU$kk_L!B&o6Y|V$)jvPz@XLq7Ojz2h;VM%Ya@9}ps -z?FhYzXEvAS)9Yc|F$i6AGK26_U*h%Y0GetJDZ2Q6 -zd!&hMszWg<U1nk6ZikH -z^&Z}AfdAXSQ7dA{o)IgtSJ4_3JG2Njs#J`snyuQq5~F4iqgIiit*u3CrJ<R^fGCzw -z!j=PB!Q;)wxH!vOgIiE#9Mc4H{q<0_uZZ1( -z7!$S~owtPIedGM9NVOl@UL^ME41T$*N4LqM%^k+>%;vD0^*_Vq4Yu=Bo0IF*${}5Pt%cWA@j64ywxgZY|}(D}f{JMT8`^l|T&gNL#c4 -zh7ruC$@`3~K>OZSvzf=)8(o<1wT;1fp-gD%B`m-Bbr1tdm^c-Gi}s9Jo2h-8_^cD( -z*i~F%3YPe8a~*(VwFCDyZL!?EaLhm{x#@$yP!4zSt%^^Ah=&0u>&UlJdx(n@lf?NrPC -zxTNvC)Q?;4b3dlG%l$izlZEHI_coGTZECtbMv0v|v&2fj1s{Gq=nMMT7J%cp?d5TM -z6B0L0+rSWW?mrmXGNulnU@<=}X+i=p^rqRC0C0WVdsr->=b?ffuc%;>Lu7>2An -z`Qd*h-V4w~cbzoUcl?9kS?HkJOc`xV@*~&rg8tB|QR1m<$LZHGyw}&eK3^x^H8Xrw -z9tr*}^Gu0;ce#JLjkpZFdD~OQJJ<@zw?p)|Lh@x>2AMs|qFcWX;AS|2G+ZhH-i!xI -zc1cbNK(E;{rVeZqE8~K)wx`YC!7z<7X7M;^5$NyG#?y6?;op)1!T+;o+f0is!b#_p -znauKjS*q)7MsGsy<{y^>Y0KoUwPGA(;dipiC9eW^+}2qK(&}K3T>LNSG9D9&+&m(* -z#h3k&e2`Rd&S(t?CL)D3E8eHQW)kBhN)vJ}D!I5xKN>m0W9Q51Gt9g2&p?Tl$Z4Ay -z2n_QzE)?977{gNNY-Lt{lKbJd^LCSStdmDd>b_uye!q^LpO*v6^z8m+%XaPj!smiz -zqL4~v5l^{+^oO93WdgDW6!((&XYfLb7r3{j=dl+i*T|M}*NbzNBT7j{^&^1M7riWr -zVV3}6vf;O)#fL|2LllwIwPA2^94Ta-RjEwhkkT@E5+ -zHZV$Fo0&h|+}j69OPlE!9I5_3*RaAP(8VDkE$D;Xl4{ToGp@&HaRiDvaUg!2YKqRT -z1@uB7C_~Bf*n3~3^-S=K#0Q1b#m8Lfe6EuPlY1So#JG{XLj$sG|NSQQn~c60ymcN> -ziwJ6$l55F^O*786RX0&8a -z9LVCGj4ckh4)T1klGnG|ADKLA?)mw~k|5Wo5y4(xi2tt24dm_kGum#3D8a%TXHl+0 -z+*rG=V`Hk1l^D=L~+wgrgFUakG8yCqGpsMn1k=8CT>Df}~ -zhvUuRZxQw+?=7$AK5H| -z#3rB?0adb=##bDAmm-2)CvHe#=jLfrdj_-y8h5hq=}-XVA|e+{u_tP4)3gc6cRyVy -z7nJByb{&ADZln%V2n0~5$;^XC9Yb-}U?DlKLE8>CBcA-ZT)vJpCmPk{QD?QgT{#_RlxjGQJUo4+p-wKN!m?M-lC(g -zX(;OOv&O{Lf*Sk*A1bqS0CqPhiq7M+S8$>-?BWlNd_SV -zHsoz93h6}>EN1sElD`wTo~V!GCKzlPj|K$rkw;AQ3XP2dg9%Vy0gl7~KlJCQMAX)%(g?VAJXQKyQ1@c?Fc*J786f^7 -zatWO2039QzRdZ^DxNilN2kd`{F+=@t`lrUj4YCvWGs@$|`|3Eo3a*8H3}Tj>kG3i+ -z^*9yll4e5voW)P$b^UWU3d?)M&0EKxqP`5Jj}7$C)wHZP-1FO;H9VfLZ?60`r#)F} -zSWm{Ej3QfQ&pvI{9%Za?Xb0$G2QEEbFNog%{FLKjlEvz&2iYvwg8u51iM265vs_#7 -zx3ns}jfg$!HZEHI+u-A58aDA#OG5Nx -z4BNH#IR38J&>1bEFm4s}UODmgO&?XM8ur@*RBQ3ow4(H-neGz>F{Y^O;Ynr_AO3%NbZwU)23tM2KrhH(VC -zdt8L1G@ZIP$SfG|+6L^WUA?#%c)hFiz0*az5wYHH3Wl>O-OTh5%=g%i(-Kgr1V-QU -zISAH^l2=jLS|IAtc0g#^b4_g-7iwsvskg55E0!e=qF|UT5|tSedQ;AxprjRpoWTwp -zDbO|;Pp%xxsr22gRZbVtH-bVodJSag-~V=)15OTXad3k4Gh#ilCF^3}?wzrP@(Y!4zOhoGIToWL>Mtkg -zt~%%p=oqqtT9orbg?2)l^fy%bA`;C2dVRqBTCfMMS7Kad*w|7 -z<{@!sG@F~%pou(tYdpIx02i;qB1C;GyfgH!_m0I6JiZcMFm{9dhhCRnTW~tH|F^=h -zRl~h3Qo(DfjfS@Mds(FV`<27jG$#x3@3Atep#Hp)#_>>^Gk~^8ctvQN-mev#H^>kB -z85LpPE?Un_nfu37DuJ$J2T|Ja-1CvV*c8sH8Box@aOi55f>l(5884^u>g!c(Lc&WKGEBc`9 -zDq{cwHAu7nS^_g69YQO@B=jhG{%d^XPOTM|zjy8Ktpb|TJ_bhEm3*Rg7eIShJaY=&V1!u{RAP61ivVi -zsJTZKFJ@JX8}mHV#{oW$?(#X4t&=K3s=Rn1pTnV=HknQKqe0Vv$eNdk`mk@oyiYa`u23g?Jnkr$<&jj83EZzLg!qW=}H<>ZW -zA{EJZGB{TJY}@=)nNlxYBl8FK_0)+v&&j-QJ9C2tD#WFH451((24;$FDrNeD?~p4U -z7H|JcuUNfH>BSa~$_E;a1)sw`q^>OWcm<=m=e85)GOEBM{7^*2aIb5yroPG5LZHyo -zRetlbk3Jpuxgi)kaUAa@0Zar>78&P3~ZG0*$(B)rTNGdW}6{A_L1Y -zAgmQ*0@)S9BlR;zpZq6u%uO(1HH={5&ANU8kqH3T(w5TRyz8-NmVn-@zL@yIe7g23 -z4BCZ$`sczv=cV0u@6FG*JyW$-UFgx1-+RqXYMN6nB)jN{bxDc&9=l)0p}B-Uti#buT({nDd`M -z8MJ9@D%8B)6lp3bLF*>jD1_})C&CPWh1@;vl5PY}({boAug6=kDy1^c?(72%Vk}P? -zL{nKlC2I$mTnJ>Kco}lGfxFUFiO%UgK7#@7)a?Y0Ywc)SfvBoiaQiV>7-d9DL+La#KMvrbgA4uZ|iXD}2w+VK|? -z?5nQZZa8NExVz1Ypi~LEIJ9{kkn`hm6VvbQMfDwI@^0s;B;_`3!%KG+WR3HMm;4jF -z7r_tPI5|45C+}@!?(J-(n!4BkHC*NURlP00&=#W*<;uQyoN48bG-Q`k&P)tFVv~{= -zS%_uq)}36~cOBUNGaiq_XPjmod=o43eWXt1x?mQQ_9+TvFnlkcNE?p>BN7 -zeE#>Kp@oKcmwqfuwwuWCRyt2Lxj=C6le^(Tf2OpGTITx(!3T^+4y`QXUs5T4U`U{h6ZOQp -zMl2aNzvsdS_ltteP!=v`f07o@;aKBHW?XmkWl9wJD{*VL4xyWSoso?}Bo%0W*V+M! -zUY~e^EN~g$q}1k&zSwHmeYfObHeZJQDdCc2QLH>+>znBAqWjErd``e4c{yg#{7(|q -z0Bw>!dhu;yz6n4u{K2{po#r(0jq`Q@eGGc!%Ad>Rq-2TN1k)e2)sG1MG#^{X0J1*3 -z{;If1_KzH(UOErs>HoSfC4Ux{F -zD!cygJKkO;=-v|7zbQ`)L(XsEgIYW)%LhGNuHt}Vx|`hz>xtiD(rwGwW8RfU;)xNIC66`v3qslj3%LbLYa9IQ#lMamR -z;0XgXsvgeC+Cpt}CD&QC`3qgEYz-*p5Og~8`xlsDZ1uCJE*c?7#zHhoxekF!Ap}w% -zvQq*~7w+SgL$-B_vTcm=9!ygSF&AU@sAh+W_dD9@T~iC@LTiiPBEaR_v~7gRhH2!q -z%(!cvx*4%n+aIx$CBQ-%pN(z(Jxf%9>Ztsbj~HK1GC7`T1VOO5jLulikHI -z>T(V6#FSZq8yIo7#%J;3@i~K+-y&iX=1B@|&a*ou+EOH0x9=3p-wO4A< -z0Z3CrXLH&AF)eBF6b8Os1lfHss~KBaaW#RP=uM=JbC1(ur!L5NRVAr2Zx02IYuEz1 -z=CMc_Pk}N}t16wZO5?ks39uKWh2adis(#EFm|mUSgnuMdt=@V~czU8BMQz8fM1!X= -ze4oxVU|#hjzA-!^YG&wa{KY?@r#~O -zxqN&|?ti>hFsAPB-l4F;O~`kmM%{?r!OMb*M}4L}be{yDW8b-MX4cZRS2wMDvkbq6 -z^t*g~_|~rvpM~B?`7Njj^-UC%HK@7>{@7UNP4*@R)OCg)sw0$WZ|zR237YxT%Jkc{ -zv_CmvyeCglBz`CEzEQArBI>e1f$s*?{GWiCr=NphI*pu~!iQRtj@{K3@GzzO2|n}O -zxFur-7^Z$t#}s_p?0mSd(X`G8wHO(&-hV>)x4o{;KZ+si@xPIFPc(*2syO#6?4#f@RHNj!DN6op;0F)Xdx&!URCaxgCk9m_LlFl -zPODmGug5~eXP#ER8s+;Rk>4M7GQ>bA%Z!NB*G*m?ORD(*z#ARlG$&fvHgcB -zM6B^`Miv2901T6m3m3cV2q**n7@EVG=pv_qb98@-<3|P$tUTb41H^j~1DvVH({?w^ -zS(Kk^x$~84neoQ8fprqkX!dJRX8+x_t6T}8-#3)HEf6^*fsUMLKVh*16oKE>fU5F0 -zD%@kicgmP0|7Y7i=H5jYCg0po&MWZUse;B!vg;>Uum)XJ(Hc>94fWd$w}1d6u%!K) -z*8$&2!fkft=78vJcLIArVRQ~jDpFmS?IOipws*9L?pV)wo!W*m*bu;y$HeTEhGH#z -z;)<>}Dl<+bop4R(WaE`KGE}t{vGn@r!%$D>XUHkQMc@q1!KbtbM(HW -zbv*n^@3(DZECPOaP#+j2qDxtY^3Nm1SXiL%LJ-GJ>3nGXb9Q|p!N;sUK!@uMssX?t -zKQ~SBD2{1rZP7p7#s4igX|0g3A{cI3iGW{(EW1S1H~;3WlDIZpJ>G>L{esWlQPWc| -zBUX=%MK$kphTw`ELa-4`MMrC<1rKu8Z4~Fr(&k0wI@P5dXVnCmZdj1QS!;u-oAnk#O!_E2^Cy3426;YAx}u(xn?5S+c49hl)l|!114G*GkMpJ|udo25>7C<(&giek -z)_@`oo$cK$Qq5~Q7QOE6SJa0faj?CLlxpq`594|>SKP~Ws$cy|!-J;tpNXk&ZX~># -zj`))3J@;FTptPuM1GS~U0=>D$G)PP3Q#_N8W9rB^H!PEvu^}Lq;aGUu3Al96Zc=sQ -zNwi+nGVuvsY44yOS+mEHu+N^MbsqW}rRVU#nj>(u`leQX#mSCLSICcuTN$I#DxdyYa4o#!0!5mC}}4W7eyPc87wI-3Hhzi -zl6uMNW!`6^4)J)!bUq-yhq~jfYpK>IQYQQ(F_Lk{!-$~NRr>ws -zMb&G`TON(bFiFZmS{Cr)0SYbU&4^O;xU=F8EcQcr4otQ-C_B`D;d&1G+shz_=?-f` -zGWt!$i{P`~A1;bxMkybG`)a9wBq{p%Wr~2YZ~ub7+ywE4k9??LZxkfzLSLXD<$hxo -z81wulcB0!SAC#RfrFNDT^`G*9@@!M@B{hMT5IYG!`(%9Tiy$Y`@80|=x3KBA14WjL -zFP}ro&fU_{cegc-OYgS`txXr*k&PjrUixyku9<7s62SJ&%f7Jxkn7b$+Wi9rS#nT~ -z0*TjGuyTKZ{UTiWZi|J;O*DwZ&90>`cUtP@UmEXt67-TkFR)vBO7bLhsV;OeW?#tP -zZ^_4TWotUx_dA0|leWp4#-W4yQ0k>t;qN)rzf<2`mi*?*Mt8~-K0s-R>kZtqO6TNR -zb#riPXaREcaad>85zXIpj}b4 -zXmd#g^tKPq!A`sEJl6%mf|Au14cjD1%vg~zJ@f%iSRQj2;D$wp;o^B!;W`OQ7kQ-< -zIuioH%`XPH`zchfyGb$ckS3(K!=@=79El?rKHlArKz-86W!HelRBnZ^c{m&`$M;aP -zzWHdb4p1}EtZkTbyw#xkZqRi8BH7dR7E4H^3$ozBSPck?af5Ud}=Y~sC#65HxN$y#p0nfU(bt>OR7+#oT -z>lF1F*S`cTp7SomD=i(ATvtH$4vS;n^Fl4sL~ZhO4_TmU$$Z^Zg<(ruaS8E1nPzw% -zSMk;R<&Zeqhx}+=sE?(m`EhU~{#ytLI)Mi_-E49LpifXz6E&GJ$R){QrPptzKvmct -zZx!428(hezJ+IW5r7QMy6h<|=4W^51iP -z+RKwTB6EDh00_s+-4Caijz6N=qSB=*w)|?Pu^g@hg8E8aOSyF$YVk{c!~k%TJ$VRW -zg96)QSWE%bQt5kqr;-$9@(j@*I>Va>XsmMaGUysp@i9S7KB^dh*4a5Fl7dq5A -z^5ozXR=W;FkVZ(N*=1n-0Z}ka>2a5L3c6kS&nHb -z*5rF>WF=&3ns5V+PpxN!8a|MjB0A`yT8MxD;^ceRXucG*tf1K`HgxXnI)Ix_rkov4 -zX1PgFDt5s)KKI3uKof*UXu@3b=q0xPEA$5!PPx2`brUmOm=AclVVGH=``IL4nkUEt -zo`5Xm3d^_{Mp-qB)d4^~NhM8nmUz4`GLrn#>v6&>*|cKNDK9m$AjJRtHa77+Wxk_l -z4SlevN<#A4OyN(i`o#s~Hiq?rMd=|Jdz#o$#=$2|d3V2OGz04mGkzyE?XS|aK2b(l -zNH0Jz4rjk5?EndDx^76m`^P5N0fdoRf>NsCYkXsqA6K9VuNUd79DyyTXz(A03Z90oLFqu{ -zQ0a91n}IuKe`hm-M`-rDPp-;+mAg0C*8mF^rQwYWam)X-48wa-ij-#-qCFZHp{+|L^&VEboKh6{CX?fOt(#NeQ -z6>v+JY0m4*HjCEj=2~my_FufV0dK=WV&uN6x2PLWbW`*`|`b4Z7$aq8_FPQ^+9 -zoYtir{Ju9`(T>j+5P5l05=VN@hb?{c=%uakL3e~opjKd&@_NUfc4M7L?uC<}q-P+h -z{KEOyoDj^I9}H6|g%R7@5%EMk!u_CdK6@Jg%QUaR -zh%FYcWXy9Nz)diO7qr#XfQ%O_k$f3H={-u`V6ksjqDRVDh+OgJaYt&j-dVYCDpJU^miu{2QQWkkz~z++w0B{8g=Y(@V3B? -zNM?8Zd)`zK+Ei(6ja{qI3aktwtlBh% -zO2*c?9~SSB89fFMI^rzF8&#RS)D_vwwaYa#8E#2S)5t8QLdVHpWXA#Vh8eo3|nfz41r0KKV^dVPI{-&g!+IwMSNmVcx}{GL#J^8WL&&;kcfUZm;?sI;iyt@SXWkkc=Y|h_BIid1!_!K=m*3xF@B)yX`E6 -z67?Q-!G@#f!dktw@+-#Y_j`i100eZJLu6ehP~W!mt2m)iRl5U3Iz*I*I^jVfiyu=# -z7l*Em=yiYdBd*1rQ9P^}fsiTLcAj>=LZNxO!5=$UjzXLH!tWrbO^b5RY7i)|un_3p -zhL7DV)ATZNa~|Y;JK~=>al`zc4JQm3qsN1aeHZ|U$3n#}oTH2yM**rNEfuYMI -z$zs(3u?0WdRPI25Ctc4$Fwe@)e?Jf3S1`=#y#WURZ`=W`B5i9}_HqXGvr5T?Byk=3 -z0IJRWX;YS5cxc1DPSEQyIvkuKI*U|8x!{NxlJ;|o6gp^1&xhLwlp|27C2>78E-c!7 -z4hzrl2jZ -z%J%OQ)*Z=}#u4;w;n_bkQ1}S?DKXXLZfXwF)lrr%1bEK`aCvxC0b_mtbE&3SJpy%8 -z*Zb?lkGBZ$ImFo^v3E*z%KAXf5dKI8I66yuX~)wPkjR~7N!vgj8T1(Rw{?D61Quk5 -zQvQQBEyr6!ZH)!F;e*b$Zo{L_0DZ!H-kv$6jOUr?j{nyH?GHg-eI9|KWJTWr|7qdYFf|d0JZjuyT9%(TZ)eh=c`}S~W)f(U)aG1K9s)(6=cRPD0 -z6fJnDJdt{R`ge=5DSdUEYJ8h`%lt+zDBKs%{#P7hw(U+(T6$cCTwxs62SgtU$YQLQ -zt>EAAhx`O~GO#xKGR4Bx%W@mz=G^77S4wK54xqnGdpbA#grKxqYz?&qag(n7m4jLT -z!QXs$1jfupseCi~3&xmjGep-i$e#~^U|Np|T9Jz9b7|{PEA0i%f0rLLZ4W|a)@QT6??9ue)_{WIy3Q!K| -z*2-U_+?qWVumPJ!Hxhx$7uE{-rrDyZ< -z()G1lerEm^biOfio_ZcXlJjXgw~+XS -zfj>-Ch4x-~QkDRZ^ke7>_aA?cSNQQky~rHW<_j3+(Zpo}2Rs=>g(I~`HUGOvqt&dP -zJmK(-8z!Ny1@)PkfDn*JAZMWtC7M`?HCm>g>Xy`V%EZEBd#5=HWH8Xz1*xDawkd@c -z&~4}EfmXSLub(*L2PU7Yja{0s<5w33JQyRZct=-%Si)vsTh6rO;(c^rkJ6`JqTn)u@}y!vsU -zi9vB1{F)*KD;ea|?udMN>}(TqWgKb@IFd9MPOX_?~}k6=JP{t2o%d9Xy;O&GiRiZisCUZF=j(>=;o*wX@0z;KP`MHP2R%JSIE2J-*?Ho04fdD^Z_<|6)d13td3s(lMIOLNRXA-sL^;g|Ux&u1GXleZm^g{`$cxdLl_tA#0@S_vXOuzsdb; -zAhzPaetx}0DtVZI|TgoHXWk2QcI1S|= -z(KcKu{bXqndttOoo&k#PHZ4~?bAVdtG4EuN_U0T530d_AMevd>pg2?U -z>W3ZgM6c{RA|+<&V`fA|>xlrzV?pspe46wQN{N3Sd3U8Em0(2obnQaD=aCCUfj#~o -z{kesmgZCQBIgkZl?TeW;3!ILbF1rdhoZ)R=?=J7(Tpu`CQVd$nLzNhSY36;18t_oM -zQnq8^z$euLuRg3p!2M8!uiw}By^x~+V~vS0g*vp*bYq$8K)iutS5mI=MHlS -zN=*vkrYMLX^0X3$DVd)kD22dFN(D2a&7VF7D?AnHGDQu&y8H||Ei#)53fWjQ8}vZs -zM?4xy_lL?&bDxkX)L)t96FAWF$v?i~^mXEn#P7FP -zN2}}B@$F-NOwL-}ojkq0f8#si!7tQWsGXOXiwcg@ZDOLoMt(-$d!I=+P>(GO>hgriWek%>pwF3PbZ_Mcr109>2J&XQajPMP<{K(7|>s4AXQfrzV>5w>Lu5~d9CDw&9yhg9`N#8>6HRC$y;9tfs+N3mlNscX^BldrRLAm?+Ok?K{vdb -zw}e(sSzC(DyN{jczyEo0wsdpKB_%*0+(_5YK3CT|0*u~f=f;teqjqvgMM_I^@nyym -zqMGUkSWk+F2lYy&fp}&P=wbCXI}}s$^L9R5=xd@FhNmz-l%bKXK)rEv=u3$cmZ`9n -z+6j34h9opC>{{=G*4Uk;KL$5F^S7gkEHVxjnAu?Qy|dWWff-HzwS_s>@pi@F3IpuL -z&zzZUljJeoVUGAlYiAtE&LIo5$3cbWkZw$*Tt3Z0GJu5c;7#}@fsu* -zTWwBIlD~Sx!9o{|l=0SH##I3MxJmTFEK)03IBO0ZHW$wK&b>q*uq@xn9RAml5ta-b -zvjgn;hGAiW0Ez&ui6(n>mn4Kvk -zj9je$SsD{Yikdh3bMy<3tVsjF(0&hYQoW97G&Zu$#y9f6EwO9|UD|yohN+7(-g7W9 -zMF}6`<70hhsUHP?RQEf(r6d)X1ZL)$V-_Dvp)U+Lrp~sz3+;=ZH9?@#-@0@Q52khK -zQPnF4Cg6;o#U=rpe0~kcG;up3m!|wsqg);|)8oWayND~SG_0gAUFpitYX^G)_=PIS -zcDrf$V$)t{Iu0JSZLpS|H6DkjY{f@o)tMVYZM{}rn3vbt7L0blOOBt=G&E7}%MM4V -z-I+D`&Ssqm#?+@~Bg$2N)v$+ru(bC6xgY~EwyoGP+kU;6iYfp_?55<(Yzw!V#y#vq)UnT&JSi3jnrSa8|s2J_euE~$!2QLN$K318v;Sk6}( -z4HsCcGZ->xGgKO9h9o3&9*ojf{Ez4sW;q-?sik4_^9=_FmQ-Id7!X4yE3YeI3J;oD -zJHMD({tY+J3=cpumdsTm%8|Db5cI2LfCL}`Q4T5N(3vc~FW=nP_ciB{h*TnJA9zhn -zO`&d-qupYAoE|VW@d@tPo)e9m0 -zvY)|YWp$Jo>QMaTwjS+(Beu^yD-a`cl82TRfFej5Cw_uL<19oKglB9(zq0 -zIbG`_7%ZnD(3>wGMYlTtnxCW4uZC(rb*6vWpKNUSVlKtPC5SOllx*R#(eX2}(bLVH -zz-|&XXblkbHn9afPX^60hv`ySEQ1pfyRtX^2>Yu2AWyAFv>ys -zh#5Gnexn8iOQ^PmGeTf6XV2%Ls;q@3f7t^K;#s!ev!iYsSN?BQ+H7I0jWEYNTfpTX -zY>oiIdp^YIpEtFOW8q{^0jTGeA+bmqzN` -zb3{4PA0dslx@K(+wWwd7*wZmXu^h(Xsvp0y3FME`rC8wGXiakngyjnvhq}fHKoPZ> -zC#wm-XRyPs%xG~T!b7~^a*2^lZ`CV{0a5IHQW;H%h6?{cblska|GuP1D=4BDLa-VF -z-pUhi1&hjJ>Z54z>>lZ#&n}z_ta^`^Txy)S@eA}UpCaOM^~(uMG2=ZX-;VRLJmy6S -zFAOu(2qmz?wTuWam6g&Fs3rGkx}CA!kqJ=mfLI5z+R8FogDTcr&ay30{k!0~88~OM -zl!$UQ2=&(GCn&ubd1E%umOlS+a>v<&`fv`?%Y*x&k{M;MA!cB%m(=MM7C?SLe$n4^ -zS*8WlpLm3SFREt>$fR>Ii^n%2mXFYMuR^2P!XS-B@m;PD@JceGvR<}dJXB$rAu*YB -z_GdM6d38uWtmSdjsTM_wocA8a%9*goI%W?DGDu1U(pWM~{vAt4nWL=2t{6<6j|)Xl -zBXA@;-KT_y@nuejQagXtRrbQ4xBNhScnaxyHAOoIUkr>j)E&F9nQ384TLa=T1e^&M -zM(+)0JOgqMSAYZns_!g>4`o!!Ct8ka?6jf(c{=Yp02gB;07g%wB1~pr7>++^(KX@0 -zvaHQGcJ+pFO^P72Y^!&5O*F8o@=8#zo -z0*G7QL-Y1=mJkDkCDmqXZFCKik3&}s+Q~) -zeS9SL-)6?4MktOQ?rrqeG31}`YeRBBu_i|+^DQMBB_@t>ThddD_>oszuhJKJGgiV+pv|C&~c5 -zU|QrW1qYl_7pkocWIO}nE-87+52vFNNu41S8!`(qW{_en<^uRw|Fs;s@+I#aB(;Xx -zCYr6H*%44!bRH?U&-+i>a?>fxj(=~N!E;raXCOQJGAeCmhqW%p+gSL@YNt#gXi_dp -z`0(P+TmYCWTjuAYzemV$12uz~PEs|$=IBs1qi|pS^_6V+tz!phpVRGP(CeLd;+UP# -zzd(FEG7LsJAf|HM8)r#PlXY=!Fd!f$pvT(HBFjPG)#Bt^*%gIlh;pP90*Zb#;dMK! -z8mBkdAuguUUU{SZ8p`86RVKqJ(*T-h$m&p4#bD(iUXey`sO=Jh`j7L%E(ckT4D>Kv -zWeT@@hUX*GxUwFaEJn|MyTd9hUjUkA>SWQsI?jap47mQG -zOL-}@AVPP4`aBO!7|EdgIN+R3PA2olS-Nl3ecy71A$UWnMb#7g9M9To;jjeR16oNjL%;a<43qe||HJEOiBzjb4COVYQ> -z>~DSKs^s1jwAS~%3*1vP*NzdaZ=1|zP*!s|6qqgc|CuY2{m_~FP2KN?Mpvq`Di~6z -zc^=)%@n6;_4lAv1UasjvpiIIP4IV`Yo5|;}>ON4#UgwY!$t5 -zoNrXewibPugo@!-p!>$_5#)5*N{Zh9oi18`DS)}js6m-rubkax#b8&`4Lh2aw*|o< -z597%L@f;lWHj?lDcadCB;;gDI0H<$r7mP+TcU0>?er$Qq&{GYch1H!@CkKPbZ)4-a -z-KUjNH8ur;zn?lBai+}(n`+lANMQ80og~geIM;sUk>QYr{x6VP<+Tn-6#|UceJ}G81V8Au%X0ZLN8Mm_duAkk$-Zsm#?m7&CX{N6T7*$( -z8aM*`_Z}JS=M$=4;_g7GzACooshw`dEpLj^N2!5-v(HKt=l)b=8k{p}QT6e_UqNEW -zyFc_S$f?4+m`fPP07@7nJ>UIucO^RE*O$f1ipcSS`d#tX4?k+n?-pXWog~VRQ-U2W -zA`-Bu;c=SMG{*9wCldkn#ynQB7by4LH$v}?JX_Z}xcar_aqjTLBazQtL<7^pD%?eR -ze_Ll7Qpe}sk~Zo5v1sSaTFXPAYhm?txhu95tv;z@_N}*-ddG(R)70`V^8xm%Zqh{0 -z$3wN%V8Hmmi?V^)q{AxBObiZNzNdq}N0{|nX%F#D`}ciD65_hzxknjO4oYut8MEnN(EVP%5deE?#VfPSF&bK9CT>_>p{dEW -zZ_ZDZ#wlA`&T?W9aor5<+B@^5YW=O~cfY^?k$UWSd@b^_UiQwx=chVlS?872T^NKW -z-Kqs2P4_Je!RW27`?;6hzYx1CcKfjI#6?=edLY;oAL%KYtwr7I2U`7)V? -zihKz}7KD1bYLIVXy+2Z0HaI_g*8w14+FV4Ti1{dNmG2$WjysbGE-J4W?CGmXdlD$VJZ&+Xs;q -z)4XIN9Py1U-}VmUkq)%}R4yowrAZB%Hc4B3>%>tS%2l#AaUt%^WZ?vkBQ3=m3|rtx -zI$5DFGA(L`-q%7Z85S=LV4c2Ky+?rlSMZbI_2tPZvs?j4{ZTX-)K5N5lcpy!(7UYxl>86=uf#EW<>ZNWIP2)VVoN6 -zX)KKdCg-Yrcyx@QN*Z8;HAQ`?C$H3-rXY&{i94K!PNH*34AhD=7p2cn;NdWMj;CST -zHKM5x(c9XZYi*#%tvwxWe*yBX*Nw9?*nM -zC$*0lV(oVM5?|Kibtd%jYdofTgzZh)0D0c&$71j>ZAiC*-Pi*wUsTLA>bdHeLcsa& -zGee$8oSI+}1S>3gsB%)>x@ameKRO+nVaoxO`NF|0nd4MxlV$nB -zCHN-MKZKj%@RKCjty+!tK5l%93|qZ7+ZaRQJGQTb8Y$47q25AFp9&s+PQD&hX}?#& -zQL1f?g&W!#*JhQ(?1dl87wGw6rZt=bLH-#`4#you?q+xXU*3B5 -z6gKbnZ`THM$htbt=4$m$towe82gRw9Uhr;9koSjG50_fwc$$4Kyz{PFYsA8Nq!+U4Z6?!cA#D~D&jFV!CQ -zwYrrN2Xe?k1^wH8+f*-v2wl|puM&y?v(hQb_0}K@_f`E&IFRI;v4dj1Q@uc{%SNrW -z|7jJg1I5T4o*l=I6RTud-MAX28j!ZdT@a_*;UVa%JMA6jk?llvk->kw0o=P@^kC$A -zDMFMGmsIPO9TKx2rzl|Q1k165-0t4CtdT3jn-j~cJPO&u#41P}?rMaDV>x{h!lnxe -zN&o6|d)a0?xWv$d{zd^(=TxgrfuO;lVOY6tMh*AJ`X%y=_l}Z*Sy8ffty_8Ri@>Xs -zqjqPDlf2GIu6l1IuuYJdiCwd-{2Rs5G&Offxmc~+ngXfe=b@jEaisZe+~(LUnU-65 -zqb-GQ3f6jhfNT#+^1Sw! -zM=y8DxfiUC`8Uthi^6#S8Akjk=~h!_4F9RUuU?~_;U43Ru^yKi_38YVK3fdVH_q^9 -zQ_E_h2xY4>;%D+q=}X3;y4S@}@-nX3%>45AM&;HqR(8&Dwj3;rH=D6XhE2I*%^Uq^ -z+4#0|b#to{9%RkVtv^y9jO@JEdnCMF?Dulh-4M?0XM5E|t6feUq`eaLVr4G>Fz>oJ -zI(oewx%Puiz7EGSpOl%v*DE))aMdjsmCN=~mW{9kt-ulw@WY4$oeS+BK=2{k<_ApZB*bSB1=e -z1v$*6Tm|+YCW88ctzob9Y54S37|VziRN&YFF@)0%?kz@MTcP&ZxD(D%5U`tg( -z^LvSY2sYPI<{OXMA_Be_jQ4^#8@L@Lx5k#djPbk?txM<*^#T>C?2RIePY}-|?+NB0 -z?}z-wS}&eV6pgO0SpC4)K -zakOY`Zzra^%XPJcKJQ{YvHozPp3AlBu_vHgNyKT=6#e(FSs7Q=FUeqmi+YX>!=|{J -z;A_0+fGwQ4S7Fr)8OD-5eRay2Xtfvt=(o9{`6fQE&z;?|^ND3(jkbONv^Tvt+P9i8 -z@1e2D6)HV)z-Y+ad|f{|>5wNh`WOO?*>MFf;@)$EzTDJnvVC%y%pkzKA8$@bvmRr4V#ogh&Q7(I{vp|w0E&8 -zB7W!c{mLZ-Uo@H);3)?%SQ1@{v7+C|gH9q_@THAbC3?AZe7-9Ne+%BN>G%&?Aj1@^ -z4Ji192FAVRKUX(!p2Zo{<>1U%UFqfs9Syy>s2&))u>EvB6~AqkC~aepbAf%q*BCqw -zK7EzF*foQLnO8@tNZU;-)qX|h*nZ_j%6>7n+WEmLyMMyOu4#<7IZ$%*%i_Kz*U=*0 -zg@-3|+T7v=jO}`M@cXs1!=l%{23=|={$@w=p= -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 -zJg8Fg5s_nnyVi25HB1yP -z+{?(E8TGGKp1Jq`Vq*Cv0F`fMUnjJXs6tRPE4Nw1oe`0jP@LAbV(;ce{UVZ*mJak! -z^I*H^B>tL|$y;nHtAHBm@(oyqwQixTnI4EQt4QyByH6LnkG@C5BRzhD{}zp%868e*G$Q_ibr!r-zGhmx#dXuuyrdfFfkXMh( -zmmxe5K42y<^O5>`@NNQyVlWT~vn^7#Ei%r_jf2w)hK;h#*uo1Pa@{DZ8 -ztZX8AcP@?usMgj$e?soL1Y?bnC`AKbL$>~Uq=Y%5GITPj*Uh+f8?$VkRbq4J)z0@l7Tj*l^}NP5_0c;bQh>cInqs;UMV8^)u7ReFCi%T#%^G93e$Gs;vouY#D%Gu&~1M%j8z -z)HySWpU>J-)yKnsjz<`eYma)yp3w!xe}t0^@KCm?TSXPQqPmK>TFNwH$kcmP9(b~E -zdnv781mLxxLjO5F(i;KvaDHg~J@JV^(C1K}tqgy;WhIb!_^g;YrRA(`CPrQWFU*Cj -zyx#c6$==0O-WCR-;}aH3Jba%~7&_P*mwmX3BPo?7hezA5WvAQfH2f=4pNm@3kBm?L -z=|MJ{Mij$woUb`BZzSC6MaO$DXi|iopNKFW8TO) -zt@FcLT}8P*i(0X9xh^|ViE%l(Y9qrqG3r$`@4V%qB{1S%roSqq=1n`QNq(-7U6Z82 -z60er+1D?%ZY5Jt2nP9D_m$Q}g!}h06L0+rO46tq`53g0(iaQRZmUNetb2MGg=dl&& -zJDA>dUJvx*LD9Yi!UQ19u(uncpaN|yxoVyLY7`Nhe;;e{EiU{XTHj{A_gfi+ -zp1gV}KzD++jxL@ypt`E0jdkpv@(x5&Bt0D!@ZRmqqjrXF7e~huWA-gVke)Ub`lmES -z2CFv_YL{X@a&5l&{-YH~KJw)d+RjXGEca;bNfML`!ZK9p4Nmeug*}CiE~5@809HmX -zcaFI|@NAx`eFS(YjaR35Vux)=IsNl%$yg+I(8?xlDptxS<1HqC_6%vNGfKFWSQlvT -z<=y$0oft|sdOkcxFHzfFtwQ^Q->?cXUWC}{BlWBqZ1=E>U-w*sT*Pog2xrw&|?J1du19OTm(uaO)6LJ -z<>uD)%I94y%9id(IGo#^3%o{iA5Px;UpZ&%uklE|Z?$o#t1C9PJ)GTsY>FB=nvZe_ -zY|XtUodi}bTsG* -z+I>1z07P4ZvrJ4uA;fv%RXPuh?rnnlp;WZKX4nBlJ|EuG8GYUShXog);e_Qm+Wmj# -zX~N4X`dC&7?R~YG(mD^L4#@&VX4ZTf=K!NP&urpntT8<$J<7Kt7WeZgWXPCbU07R* -zCrpg8kIaa*FbFBC#ur2oM^7SuhgmEuNXm3;J;elFLMUIXoHEJpXAsxQ_LoZ?0OJoTy%Gt^?a?IAjZD`PtfZnj7ggmN>+ehwzf9 -z_S3~G+2Go(Yu9SlT2fZC%?Ps@_sW}ay%Djkx -zVfOcPV{VQ9p|`sFqLdzcV>WK{TEoga@28`X&eC8|ZVRx^?xbQ4=&hkP=3K6Oa4}a= -zY&=}NXY-SDmQzP3VsOnx;1ry8=v-aT(+rUr*RCe@a_Po+6hnww3Z+8vXre#<85Cc_ -zPtm&)HDQnNO&+EE?2UZd=*kTKMX{*CcKIVM7(+W%##S>$0SlAOt~gl+A=njmPSHi| -z+=ws--@MfW5|F>?44YHV)AylAz=~+*HQD+I7gWxQ5oQpTP)eD4TGA%xe;fKeF3da+ -zB$lWCvy6&@E=|k>;%2AZINpeg^6#z`iI7atl5)TL?^gT4>nqxaxjjMs!%;!5)w)qF -zyN8nAQc|zAZu80`J15WBas!qa0U|>kfe*!VpX=PY9GkXrtBEF2u67e7A^|w+>FKYT -z_@4UT1f9;d>t#}?C@3fdbw4t6acjR5aK!0uoSu|F-;$SU+O*PoP3-942br?V8B*|T -zwm}}x^K}-!U%n7>VPWYWX~Cu7`FSCKa{=B+ytl`Ht-NwH%l -zdYH{jUSNi0%4p?Dg8Kx|n`C2M0RvU{)Oia_O7E8F2;we5zrN(3KNSh~5A!(Wn4^=K -z={0&7zSA*G*Beb!#`^&o{0gNv+FEU;e9q2Ct_`}qcF$dZTD-aTlIj)&2m4HN?P7l! -z5lLRg)mszTgiSU1&`{|sy|)dNpf@@_W0blOzRcggkv#K^;OOiHfG7~%C^sCq+}Q=slO6dnm}JHJK+n53J9%9Od(*szL= -zyBCEJ7=NP}3$M3fy{t1}4F}N#cr;w$Au2aXqrBN=z8?BIvY=Uk59;Wz&3}BTX{Q)Y6L>c12_^bh%!8 -z)QJ1Gclzum9!)!Kbnvx3{n5%=P5uP5zZW#>Rn{OOke?Inmz`t7t>~B6i;p}=!KdUv -znD-Nm^u|mIzDO8ZKwyut%5IfdGKSAA0BzLp=vrom^)_#3`|iJCX~0w#>tJ_um@n*B(!i;m+23SHgROI>&& -zN#32+)Hcmy;@Q$Y5F$2^g^*tGa;LncB2P0(jOKpK|{MR -zR6;FY?~oCk32l?5C>oL)Qpq{|Ee>f$AcvQ(^Ee=wD$EZ7&8{V9AnX`E-XTSz@U-_%m -za(~hcuSU>wG5~+opNnJ=6UMagP&ii!0=M{$R;Y2E=++pgX=SvV9Q#tC|SE|!uaQ(VLi_d`D+~Qgi)qq -zNg3gN8KLC<=NC1>Cw3S2)f+kHep^DZ%{zokM%~_ACY?rAm({H7q$<1fs(u_ljmLX5 -zs_)a;PW<%4rCY2(Y&% -zi3R@r1oqu-!{cj2(B`gsx> -zS$NM#BDzclFL`93e<&2}5my&q;400EBR1-ed~5HH6zZ9KzE>rWc}eF_Hj$}X@7;j@ -zljp6;BI=iYMu8~N5NJ30qthz?&%ksLtqq{C8Vh6LK1OJ8ffx$_g9FMGwUzcP0Z#9}2=weJ%q$fI{1tOm~-m0Cgu~Xn(e{-*b&3yRm**t#Z -z;$||tz)@p^_f46~UuHHl`Um3jfYXoODUt1)x4Eq4m1fuWd*l?P)Wr91q;6(@es=@@ -zl0&n}A<^n%V7QFs*~ez!uy0b}u>bA6(p+u29Qe|T4V3ab??ZUlFIe1P39a5=vbeM} -z`9}q5Tp9m;i{b?w%cNWo@tCAI>DuErvb(#oxI3@{K_^jO2oc_H^H4@yP|!v@aS#<* -zNuf?HB)a=Xan0lvN%QU_2ZU?0=7pEIiCgGp4Z1YOOH7kPMNQ|Z8I%qH>5Sy2?UDn? -z{1I~vSMMR*lkD!@@~-newIV#^Xt%G}^Zr<#Y8ozgDY6#rhJxi-A4$SrUJHS4r-nWQ -z!_`uopAd!OXN7neirIy|qPfm8a^Y4rgQNxqQr^!h-cDUUTbN!#W6hV%8d8!}`5nQZ -z{aLE*Sm%w91Pt$gou+QUo}<4R|9Fq4prcS-PY{s~D8SziX3`FM6ei~kx)X&iN@+-Y -zx0Z2znAj<71x=EE_+LsmYjpx~#Rqw;=bfdqv3v$7P;4PeYb~(Z# -z+p<#UtVrF@92T}tfv$`5#Kx=jTT&>`z@PYvG=K%PE|uJi+(~|2?=RDXnFn|u1w(@I -zI&g(OaX=U8*)Nh2P+1N|Of2{^NXD@2h!GEz-6D@5GoJOakayL=)FB*eCfAA%tE?g++xN>4?41Vwc -zc+`OOLM&cUX8+`Q`+Y|=9NLWa7*2ykz#cbUD*ii->xB~WzU3LB6$*7Q{~=@5aY_!r -zFQww53kMPbZZxk6BcSObA(m|@F|i46hWEy4LmqJu1AhSnSE!)(BWoznw2)I3%ydS2 -zVQIDl+x|`}EXt!rYn{`7lC;+Bn)L=ZKEns -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 -za%+^N8^@QJit()rII>2EExY0T -zd3o{xIv_p3pU`#P2y2+0r*DMF1({#T3K!=P{oyGb4j!~Dp0r#n6#971FQ@tXhF-7V -zkRaLD(j$*er*e^>QAOg?)_J+YP7w3s6)(a2?g$>$W`OMnel!kqia#BXJh*zVwrpqf -z^*mr42P$}OO5Y#gaRWE)d(P+vtUNLEpf`h5xEoOjv`MfFi*`VA4KPv~l6r!WcO16iOE3}n5ecAt -zsSAs^?bEVzj7!-lm8OqzPU@w1NG0xY8Uw1Hy7f}Z#GfgY;3@Zl*Repg1{;unq}i-V#Nur_N4Q%&8{9@IdVQuvdi*U@cdxtque-; -zY(<#NbIC|HQ!}-I?NV?;&Nauux172_t3bK7E8{^_d6!Y~M@H^!MttsN;uOF5Q!a6S -z_L+{{j}k31O6?Di5T}6KSAB!5x`^06{>$zcKKSaMSny^vp4I1{5}K -zpA!mQneD?;>=6nL@B_f#0{)~S$x=jcp4ARW{#cx)@b=biIt2=$33R%F!u$nQL;1&0 -zczw&!0m3=v)Kj-_0VvG#IflYzL*W;IPc^<`TcU(;69=IC--%ndQAh_+7!HlgTo?+Y -zOc(4U{}kmPQA8IwFv)gPPTqN%)l+M1U*0+#FqjPa-0PoR|NL_=Jic=7mY=<0^Ohe- -z(&VhgV%3L^uu(V&iGrpZ@t#8qcnZ*nw+?DZ{F3S~)y;01a*Ao2a<-IdxXjXgHq;Dk&_2K}w-A)UP)b@~Nb`166-M -zPSI4qzR;}^R57UdxQF6D`0Hnk4@uzwF~Pxdk_i3b@Z{xj^1~l{YWudE?dE^^*!}XW -z7;_lrKciQ6dCv#$=k@bj{MN^w<;00YVI}+;@DG8v0e4+*P)NJuZvlP~_$nP+2`f$7 -zrFs({=b%>G7q4&%4aW7 -z7&R5g@kpt5E*KiM@JL>w&GNBM^2H{1aaE>x3MEN}M59rW| -zL6eNG?()zNJ<4tGx|`jtokIbGebeL1m!COx{*|o{uD^8KFWfM?<^5u1JtNE420G=E -zm`dDR;sALeGg|;taGHV$2_QZ~yfMbD6EyB&Yy^7!gw?e^D{BLWs{@i@uW%4Uxew)i -zY6cWaW*J}IVf(@+n^$(&-5!yqerl*y7lI+O2&xU+mDqb{4uyHn6#&#?d!9xkMI=fe -z)()$>*ndTa<-uE`->w~_8!7%8+8{sNDfAfyW4g^{XE)Yc7DIY#)mdQknYhlnsF`3z -zu{OgRL!t&uhFXIru3koz;UMW>9j$-+)m`pLKYQ-ZcMJ#r@b-Ie+)6uD^(RGB%Z)d! -z@!=nP8;bJV|N1#joIDgz_^*I>0e=;yzgWB0pm2`uKLY#@bO?kB^i)|#+3J4L>lg=w -zuL8FoLt%4$XXQT+EVgkra}0&^%h3TsxOSm%O1ab093d$DDzG_UE%z=XKV9?y^#5Cd -zpMpZ4FUd6mg(2C3Q22`izt`^2<;m#kE)RV8tvvkG?_h9hh4IF2t9xykl9-u9frfGme@rs>B2L}i&G7r|lLQU}nl(a%WeU$hf(Y!vY -zf{ISwYEh$xbF&JGTGYC=g~6-oSX`J2$N7HRZ(>~AsdE~XBo){g(HR|GPVG8@@iOmfxia*v&Dg&aCkLKlT^`{MN^wI}Db>%fK%J{|0VN;ZcOb -z2Y_$Et*h&-n;4wO(E}QLKZBd4bSumWN5@b&ce(lRV<_BrIa)vnM;i)Zp|TG-6ut<2 -zWxm?&kEGt((eWclaMP0B9&fl7p>UBhy?hMk;(UAhVapR$CEXZv|A!yu;h#A?FeoCu -z^IKQ$8K3X}$jz_b`RCS0Cm&Q}vAD1cVSQRylZICaBq?A}BCt`Vn5F}H3_}D=9{RvJ -zn(6lw2E#tXwE@GmKD}WdlNi)gydH+SG8+oXEV`RA+Sq01@)p}ywi)fDjJ*fZ5Mm*p -z7HXADy(dxY_T})W4z5a;$)ZUd*ZE^6>sf@psP5Oe!Z}!0^N@o5vhQir-EeeJ4zGEodUpW-fT{{=0 -zRyk>s+I4 -zcT%}`oBHUyx>4OVo7$(VJNME*+m*SA3xIrJF$aS;&Nu$RTY30r-bw$|@KC@Y#`boz -z?B4Oq!=FF%(p~@7$?>TN)ugCeu@re=oJr^{- -zml*m+=p}}pfqr6GUF~z~%qpjET4(+28pHJ=rk|8wM%75|SQEHtl#*WFV)K@+)>ZBuAzEu0vu!x8 -zdX6DmFD|TyEo~E@uLSG6>Flr80|d -zjo7`g!R9Mh*f_Vr&ea{VQR?CfTF}&myRg=Ulh9Q27=r-{)iw&x;tzVHqEfnooE--8I~=7_Vmp5R;G -z{|2@;M;w9&``3WKhnqrr6lE3oZs1Ipg&JU`#S8Bx$!Bn$&KH(h5VRk%NEyr4ai&4x -z(FK%)k)z$-s-*|)^=>8HYuWp4C2Tz~HNQQ39e8^FTJ2rJ`oWH61$Yl|Py08>^FIU* -zv6b)~PSJXGN_Cbhnknh-n7hB@0s1G0q&uVKKgAm)5f{My^RGWS*uI)RcIMojf90n0 -zcm8~T+`mO7E#eB|EK%Wykq|uIIIo~M2Qi5hAd-mlX4y-;WzaZBF$vHUrQb8Gt`9hI -zdX9!q%m2#=B_&d6~tgHjgt% -zR<;UiW(%tz1Q(pH3YB|7^0}4q)?#vzdh=VDVQ0OS&P~xQU^728tHmb_mUeQuwfP!9 -zb -zlPOthNyipVQ&xvbe?v}w|8IZQ{Ea7HNWXoM=z&6^?q=L}_i29kr=Q?G@4cJN&2cS^ -zcPzgJ{BQAwuC0XA%bd?j*t#yo_8$c9Za8EqB9!0rcibhP0{*yq5$C!tQ=Zj}SPAF5 -zp3Qv-nn7Vdtc1;VYF9QKTM73|j@}x=2~jrz+xL}e`is$zar)qHY~dUM=c)5@Gy*OK_8m193G@J#!f?4Pu*_x{R#xCd=x9UA*6we8m^b=Pca -zpO%W^yFmYJDlx5tbxZ?SWEi=E98qn&ZdSxoR68czdt;U%0kEK_ZK*OhP9 -zVj#);TGI`aH=opAWAO)sH7q$u`u0KutLoP!mQodM5$bFL&?#baw>}s@wbjP=pxA@0mLg0#*MOK*fE>S%*)pCT#AmeA91zCHqh0 -z?%u!u(8=^;I2DX-P+US0+MKJce;;TS?yr;nc%nrT1A -z*RLm>US|9Cgmcx!ZGQlG6!;R5He|W)lHja_qslX@1Gxk|S-c`DN}l<=i$#lZdZMkX -z&)AxLs{S6PmCeMy=JkZL^3t09i}a<*I<+esI9^Y<4|23Egh6VQf_dNUG|9|-TE5BL -zuX5)tyRrUr-c!@cY&~e}#Ib(>JUd@a_AaTB!fep(=PjsyOI(+xw{5jD*?v={>6$h6 -ziRz9S{c~#FC*NE@3;Zv@h2~tBCz>hJGu-{bH}bZ>{9Xp@g9C*@W8ldPUmkq=>tB86 -z?HBI)i??jt`cb21we0EARnOo6<fNwm&cRGcT8*ET -zd$?5|OSTlwRTn2825z5{-M&hANwV(S;Q-YBrzO`%T0S$Iwl_Sh=d~2hDtmI@^gcA} -zxn1|ZuSuHnnP+=7pJPkm-sH$w2xkru;Vo;+w<~pTcJ{*}GEMfY+MW;0Tvg8!-UZ7WPzj@x=HdtC4rRkbAzjdzg%XIWT%)n5h(NlVGB~x$Bfsz-`fCHmJL%FpfQ#p6a;43P!H6NXJAD52X9u78+LP}% -zd*Ka#;q29$|EwrO2ZQR5Enh1~hTbb^zQ?T*R0TIp5yXfGNOHgkF$D*!eTM5pl3}k{ -zCzzK}giDCaEgcj3M(7i%#qNwquk5gMX^WjJJH_fM%v%Q)$)`ewjO#*5 -zO!l)VeqX*Rnl73jFZl++jdum;#c$KK;^|L)n)r>h_vk92EsFlFK7SEEHI;H&shojl -zX@5UUsqP55RWf$55dztlESKu)ZGC;zzcf(1mr-yF42`&X#26G8k^*&MDN?iku8+SW -ze?#T6ebZS!mI@q51bYD;TTIXJmWOZVi=TbP#l}nyOaZ(A{1X-VD3$4x)5cGz+$Rmk -z*Xsj^%2N0~;7xSA#=p3CJD1M`zawye@hYgrGqY*CPd?Gs)n{x?KGm6A)5>OI-)zsL -zlWB@FCdU1SvYYnR*Qt4XHJ`SYLYLP8^^`*@N6JDt^RaMjDV#f>1GE%=R^Zw2=BTTW -zIk@rT5#U4luNGFj#`bJ@``9E+*Q~KmRCmm1v#E7=Wquv_-vzFAeZ2+HOzE%mxcT9m -zop(;PBt}VOnIC|Z?eSHv>|EsX&IMlEc$xECukh8&&-H)znXf)^_WT=u;f9Mh{aKSS -z%;U*XSdfCV7%^ZHLt?xaQ3(!YDAo*`!YY_V`+Fh`h6C14uCRJ)mENjz8dHBAXW!Fe -z{I*d_c4eE<`3<(uZLocD%UcCA=Qt*K2(_7?G8)Aj%nEB@mWA{7;FMd)i2AwzQLzjb -z;6^3~VEe1@{MX+&^*6qH -zj`t@At3@ME{JJIcti16BH-5!Jt2w`1zFxkmeKJ;qn8*lo&O -zlBMuA;Bh)OJV@6C7V--IrDf3;EuWc9+Z&$MZ7hW${bFTLUsE_MuZeohS^l(R+vL;6 -zQs~mmqX}LAa%3!oLBfN#QSv!DMMr5$Q@g$VQm9qg`Szn|DTG#SJt4{;0ME5Ab$=ua -z=Cy9ekpy@ccynp%L0JlcS#Of}(Nd_W{vAZV*0QSmF6mCniQ7)_?tkaK3{Ld1P_j2QQNqf?LHec`TOICJ@i9~Why*j#al0Y}0Y+-VY~67_9W^uMOx8dzgOWGc7|*EHf>IRXnTxJ -zvwTXZYWZ(GE!3+2t;P5FwRCQ2!&}6x>*&Fe%fySQ%J2NJcr1({PwVcvi9GSk(p{x& -zweLr7umLwcG~A1k1=m)NkJ~VmEqEt2vE?^R9rR#twd7mJjn$q=ZRi8O0?ra^!3Z`L -zNQ|?J;xci8EDT7nHyX$+y~JP#tMC5Rr?&qyP3&KP;FNq^OzYugU&W46)=v-l`M>lY -z{>Q)hDW3kyc@A(r;bq{Tit5j*$eq=lQ=iRY42}9v>oGp+6K$UfOR^Mx0OuLHlUTuu -z>+>h9<+3q_RlFOqxHXekfs;jBlm~!mdLT9X_F^dv>1SCA4dvMcp(ceTt!9+f=7GpEj04m*#j~VUQzbAq+BefT+Hzosy<@`;@*lGoK||3iqSzrhFE$ -z6gHLHasdAV&dX>gBDg_yr*Gzh-+hw1fbXc?)6!Dd)L-T~m8NUf*srQPX7rJUx<3#6 -zBB~qlIkCsxOE74iht9lwTa+25&Q{k9=0|uK3jMia=*wSx -zl$5H{B~c_w6yg__&Q-~k3_)G}Gl4NB^m8 -z`wrl-hUC|yJdayD3dC*EUdL(DuWGk9WK_LoZ7hYRcArDCX=$3uZz^lvzBHFkL-o9) -zemteok1d5xjwBF5M^M=KMq#n<^twv@Fp5Vp^}G4$RbD#*26GHhqZ-RohUc#r{bgqlzels$;D@+ -z0NCmaf-o&Kzi)DI^e+(nXM!^QvAJRw$Sl5xYVXBjiYbxf94+PV9o5))wW60mf1XAq -zf?4&}*8qj8!2wN(PiUin^~H43QfP|Qhp+IU*zXzo!`1hE{AvE`*IvusB1Vvd@-$-YXA+hS11g5%yIlN6i(0I%cpQ};yMulGJ&05au5$0!97s#o7!Km -zPbmBb@V^Lbbq?VQnp$pu#~r-)|MEVDr&nB1@s33hR4hB=@!f-qr+(tL*YElZNoH*-Bh>$fyM|);ysCq|KKb{ISAscf<19FUlVUxN`S$j$I6Kn7guoDkCgd3g`f=- -zD!MbqUfN`Q?kd}_U19su7U{^rptYLE#*00PhV_BDl~5x`GM-|B#Y+p`DW;G@$wHzO -z{}lijAg}mPfriQPtZb=^w<<;d$;mERo@$kiUWGT!I4W -z-|%bfowR6^u%^(elKJXoxX;)sqs%hOtb;&>k@en3tt|rB=YQSxSsf&d1}A^?V_(?$ -z51xN<>j6m)1`6%i((fny!e4$j55DPUva~rYNeA*Q@DG6W2twieackf^l><_4FXLt} -zmE;%-C-Xdp!ow#=1_+y!-eV}-|FS!P!au<+;OR#>h?^dosM{|h-g!));rf8V`Vi?SH5aqS0yhN;RoxWP?D7`7 -z7dF{`eUqK5J7nVwwd58->%p(IR?u6vG!HT19irGtpbHnKWc||IZbxa2Uzob7^>qe{ -zID8b=#T+`dfT&<)Yr1#xnrTtz0$R&qGHg^I^8D&n|NC|o3X{c%`|NjW+|2z!IV>YL++Lze=D -zE#T~kLE-0c({MVK{H=SppSJ=}lcq7xO8RZl8mU -z2oOUb3)4UG*0BIszUTtp{FZQFfTGH|iB1~dCXIMC(=o$$pEwWWppzK}$Wo=`;2;N9 -z)tWkJQSYe!8aKTomL^1XMq0| -z_p+-I3Zcaq+5!se$M^-I(5IbweEqf|&O$h7NVXJ7==Ql0eV!Ni{kl38?Q`^?P@?Zm -z^_sQ4xlZ##AvCwwQH8=I=Vg@eK(1^STIhUMi6ieerD@DdsqM|J@(G&66sgUpq0H80 -zwPwL_Sc%WqvrUg{xXmE(NaE9xsClwm{iCn -z`{)+%iyXi@QGj%F#BJ}qlPCV-yBY6{>s_fWS^7zz&%OT4%Cj%L{B3t!c;nBU++Ba0 -zHMZnvM7(!UBYsMrDcU|)_7y~3fNn7nBw8@Wc^d7n^cbuSNmlzvFDZ;}GHraQdJ~O~ -zROd<5UfyPOVUz94+oZc=4}zYzZ2?cJVLe~uNi&6Sb6D%e|Xc)>*y`FAg4~aPSAl^0d|ES`|-E(cXv{rdFCRks|TX`>;Qio -z_#xm8K*(m^pu*o}UTu!yTIr~yWoo0JJg~@wvTCBpO -z=6&>NSqOtPydbtOErkG|240&#*TqBtE5hht0&Cp`JSJKngN%3<|{+!7hAsuT`}i1HCzyadQkRExNUq3*_)8LWivdjad2I!oa=cpvp^ -zKT|EHjfNP7;hJWt#Q>+ytl#$RCH}n^U%2$aWb-OI9)o6`eKgBZn{mrsC-~`~dyI$P -zbOSp(2j+G3tHA$;d+7zRR7+vw_Bkzuu1v|(E>Pw>>CoF~fQ}OfGi`JW_$;((pLWmb -zrtQ-#g>7OLF3VEboTfakHq~p^_G$UIwG_5lS9sJcg-6dq7^M1k*2}cF4@Fun^`L2Q -zqw3$#QQMna<+B${Vc6L=&79>n<+IP0!ao7d&zIZc66%r3fea0A10IFuHk|qYASFUz(RhC|~r5yrUbHea2i==~7^yPGmNyTa;S>ug-!n4gUIRJ>thbeWeoUmHAi -z;n{mvFRcIM?N@LAUeE#F$_E|u?>I=nz2K13+i6yl~Jr^FLs-1!*_hcnKor$B}#f`%7m -z)+?b#eTYKuOh+t9lF&b~{@7Iwy)u0>GtUGMPHvzhwxZl#5qN~Yj*ogDunY~ -z$0kc5M15pRKFhKcPSd4BIo0y!I`0FjeWDu4qSzTO5CApm0jL -z)6yI=DEt$mx2s)9eSDry)njtdE47g;xTu4MqN0mi)WN+xa7SfYa5uQI$APw^!k{Dx3W@I`79_RM -zGbk1@hRiC6Wv!oZHC_9TKltkA*H>=c_`l!v#MxJ}?G)D;y1B^|uvd5aj_=&kuRgH!6(O5wDM -z-5QZy-eh!Xi=C@mq`PSWe70Bz=)8tTkf`CWM!)^GXzfyfm{4v3S249!zIx!vp)r7& -zke5RQYz}v#HGlqIi=nd&WR)>E+-CXLW(B_>x^Rx6{7U2deHtGV6!IvmxSSF^$Mv!5 -zp*V(SC0HlJOM?IiR>`fPf)9V;j~nMxsV#y*5*S;r7G`c+hDChXP6Mp3_WI{9_y6o? -zKKJ^QYbN_|PMsdYsneKKCn(o=d7=vUzxy6;`t29^+-F{8Wo7js6u=$e?+Lt5-8i31 -z?m@Pu-^>ez)Es}nQ1}ku-E;_q0BfpjiICCRkPdJT_wxFC!-iuhY%YHuD6HnSC=|x~ -zj-k-WF%ZHr6t+xL+P+}fdxXM21g^}NdT(My7@Gr`G|=d(dm$)aK+f)ULKs2Vg1{OJc6AXvu0Rp`NAELy58X -z%;J7Soi(UqyPDDHiS^`5lZ?>v#F|+k&lUkS71#&P*k9@kQh}$Qkh*(mA -zzJZmKYd1c7Zu2kS^!Znx`liRv{Cc{25(b0LG%x{lM|sx=-^dHkU*T)dT;SyC;Xx>X -zzXg0w;5%!dwGGz7d7!ZA_ydH(Q#i*molYAas -zZ@-hb{rPus%OiKNySYtbmOqs&DB`>6h;y6g&6BS`bK8yQZvElgwr_r)s_g~P2vw^AN9Y(&+ejU$6$2l#Os~4#93i?#<4h -zTV?iVS;JAllp%WBpfdB#c17t^omAxV^p)pR4E9D`{6VZOdCv~!QxW4VyNGWar|k7q -z^J%PN74ZuQC9^K{i3(}v9Lg9;u;M^FO)b5?z{<*-zHrh0J2$_Yz3|4n%~MvR&e4JB -zDB~^fypuoMGyJo^|5?8N>;?LR&ZmxU;>Nmn1E;$#`~c+v;0|1@zD`7=PlwNP1-_2+ -zcW_g8#mqMIei^*oM{T%K=dcDgj;H|()(*aFw*s8D2IKHWmO4Ggusp}_G(r<|H+rY&+ -zirBM=!0zR3Zhy~R-2TYj>~6T_soK#$fI)A-mF()-o3_q=-<_Mcd?d*@rD8Ga;|mHT -zi3=}byc3zwjz$$@0}NWQ7NgcVmx0{NXwozER{Qi;hnPW9jQm=)hc&lT$zY)hJIn(+a_fQvq(0UJ}ntLC$Hn@VR8CJCTqjq9*v@=vqbGR(k -zH$TtGdqD6|6=j%vG|lI1meWg=zFOg`V;Tvu6LT**(c#tDc+t5?4of<5zVZE7J|kb2 -z7WHtON@wTKEz}Q0Eym~Q)}306fQpi#SaBg7GQ?dw+*-r24@w`$DI8lEXO`5uPnKCS -z3t6U|STS50_22)AFK+&&S6I>%`7ikaDO -zc_+3vyuNCcPs{0>wfRhWZ8q(k=Pi4pJu7dyTgVl0Z`?W)r%)e=JPf>f)aPu*K6K8~ -zl+pUmBq2|tso>Q$i4)no`irZ))!2_39y$KB -z!*~#QGhENO{Cqa9Qif0uhoJ<8XkDTEZNs^V1HnWglK|-sCdYnFp(f&9XxI#q#PwgX -z*bEGYGpB|tmoBA0^w~dp=?}i^)|G!?hilzW(c0PO?i&ZZ`GGUMe14l=_o0QJ#;uor -zNMNP*8GlHoj!rML{nSz54dRwV{8Ihy<;bckV_+nmF8{a$d_mz)S9i41ttuC>vHk0| -zhnH71I@Y{XM`xAI#J=XKqqFkTn*HtCYF3@vl?@!}siVh0Se5X`wC+ZtxnsJtk;XhD -z%{)-pDxVf$wx8wBTlTa;tL2))&*D6HbtWp19?WZ^CxCm~9C#p5Nd5iMSVt!NNoCMZ -zfzJS+Z<*!(h`{L5E_Z$V8@TnGZe{CAhs#sN;mD<(tH~G7J@tk&=WqVV+1;~`sKg#c -zJq*UN2K`e$w;ZV=)Eg@;2k` -z0E1O0G46W^Az}R*KAUe3<$HUTEw2YGdFAw!Bhhw23eT5OJ~0%!@x^Ca0jBu>k}^(2%ehn53l=$}}-9`v|2hLk)4^_(_z53~!)-JDq`>k6y|CuC{6IP0NgGRs< -zQRZD*k-~vYZW(mH3vZ;}`3y?Z@6lTwU{-oaVmv?;S8XmR6d=pcja?Ub{_+;%%@H

lm -zJTJ{r&zIrWO9l^()_*sG4@KeNK`f-kO<#7W@8eyHcW5MTt)UU;RX4TDYTs~qy!OuD -zdMW$2zWesgzkcTI>Qz>fs1cVdt`7(|-F|{Myx|lVUf&@}Iv?#n1$-HJFw_ZZ#^D8^ -z5F#)}n7IZW-8ww}W98M@aDsp6i5RRd6 -z8RgDf_JUAofiKc={J{f~8-aV~?W@-~6n+*@x4p6Zwp-8N`Qz)O;T@S+=h|ODFu8@WSit8kg8}}mqM82U&c_1Zo0q<8=`>PkPq#yqMKYI1!ANtPw{*j&>=1z#ZkPLXo2kzzS -zPRjrM_n+kS>0vho7qSC<0(c+JY6din!*fC*MECaLg2KCTA(c7>!cJYA7IG1I4&}|) -zs--ZbZv%ys+xOp6I4jNUIvqn{lN>1^gs!2GnaXzK_G2iFWsI9rxH~oDWk~mPh@L#FO0&pha&RY}n{Wj{ORjXV@V-N}X -zNeHG_fMk4*6!(UW@(o$KHFbG7_W~~cvE{(^k@6dgi>!uhb0^Xt-~{2K6szs7qtiUt3k@>OZrH -z^%g}{=WW#YSYr&y>VV|L3TD{zO4($OuBt^PJu?C(0d!}Cy|~5b!Uj86w#i0mJ`FUi -z9kkX);O9MxYBXKcdlL=LWG2j2(K*I2nAgEOrXfI;7G5&*@;s2by!<(MH1C35Hgs_OGy@rpC>J^`Z#^)7%kBZFO -zG+1JT_u2fKtG5Y;dpLiw5H*5oK5IEwjzqBHtbduhI%eTodrzbJM+;A+nfEwqt@~uw -zvNGtgIpXcV{0Fc7rHzX_eaRF_66olY?pogQ&3E&m5519%jWGuxp8-Bi%_FD&8CgHb -zPaA{tdpk+T)$@^$@{N2Fq4au)3*~Co=c3}{wJS$u2Rug0Re0fPj`AzRY -zs`*qskk*N*-RH-~DQTL@Zz^jZUAnP7=FI1Mm!oANoIZ_VM%wzfJ2UgqDDjLm^>65+ -zoh{4Gw=c<3xa_iPEL~p$wr6IxPa?qB2)o^{9~9sbg_CWpc8!@#wqLt^T9(<=U*@$G -z`ea{5_0uhr?T;u7&h#JH;en~W}RlkSYY -zmC^x9a1!I7P;<^J9LH$>y_hOmDZ_s+?{hVcr(wnr7yTD)n;f{pCLsc5vlU5a$nn_}6<=`TgmGoF>RpS#sDe7?NqwG>wK -zSyu4+Wm^iH>eO7<1vudvm!k!QaBV_i$m3{2;TZTMj>h`IJApe(?FS3>*J}X^aiK&$ -zrCm-1R?tkj=jR`w|8SoR7ha>2Az#6mgs~m*jmyv9dUoT6Z#}(r@&k#|QweL>T>H7` -z65>I@@3R)o{1nmLI_BdKdgU9y^b;3raAg2J6Bl2uOj{_-EOv8;@#QUcFK;v68lhPL -zH}z0xo%hgadZ-OBXx&u8u-z3M5tQI9f8^UL$X0+nxYw{GW-VBjKgL(jq -z?=vk=l`AO?aUH7X6rD$Ds-2eWTneQT6%g7~zyVR7wdPRh7|nU|%!?_0fgF%~FGJ#$% -zVLa&H|J23tzx~Ko_J2BS{_p>Y)s^1VXWtU!SAid< -z1_g^0pTwWboPZt#+=_mBo2AH)W^vm%SC$CBM8kdg*OdPXo=ImB*@^0%|kO1JBzKY+lP#MGJ_uP92aU1VujGG1M*szz}4XYm1p*+7q^7Aa9%e^r0 -z+qDdFdAdrQ<#28*2S@EC8qUcnZz8^*`TR_juj1knx^5axCG}H6vwZq!G<7up`2LYu -zhJ(J@q4zx>`_zknW@lr!XX3>_%l=p;86=!My~1$VT`bZ_&fy%VHA?+6vVM@y$GWSJ5GOA&VKH;drmj) -zn|JzXHJ>)qN1OZM;?qa#%9}?=X{wV#=Q}>%ULK4ar8b{~ -zg~F704*vBmkK=(5Dg)Q`358#z>)3;U^aQdLu_=jU7?%4HGI|EK(a+Kry>#0L -z*S1$53(9DTVEXqe*ye*&!V=NJ{pvK&CL=1Tmr&a&4DQ|F91yhgZT3e$HvFxLz))psYxHs -zJ$@%G(f&9|3`HeC3f8&?WjNm#-=`9tLv&10A4=CSDB4nUe5j9Vf3aJT&RyZl;T?|LZI)M7Vw$gXTN-f&K2a>p(HUk-#?Kw+>D2D4sf6}3fI%Ht=- -z))`_TiJYYb*o^8Ok_L-g2qjVU&GPvKXo-QZ^s$j+no1kxdB)IM`CZkk1LW0N|ME1I -zef|`h$K7BljJ$nL98;-xXvbjX%borBn -z!ip#sao|_66lT`-3mZT&^DhsqB}oKLdhh=2&t3lhjm>m55pjgs#V554)&|^s%Za>= -zI{thD=Uis090U~B_s#jCu;OgyM&O}_!Wo@A4B2(%F$ax -zSQXX0=a&?RR%uymO(8giDRTJGl%{6PE;iKk=2rPc=iDT<`81T-rtG%m*5vbyXm{%e -zgJPsIA9U@5+y>l3L$P&jIB$PlC{|(3HLE+mslQBFC-EfC9e1Zv=EgYe`s--nFp}c5= -z&$D39_#DH16|Sd7jihnn2*|?!`Bc()P*-<+-rjL}6@^VD;??SykdJ%C`5W|nWoflsJ)e|?K{HmN7 -zy8EC5v1+*EEw}SyKmSeq;@|rN)T#^r(v7?-@CD!pXN~K%W3bk*DQr3(ivAf70qw^P -z92Cy6rqGp{uPeM6kw@ux9pM4U4)8SY<>zqPvy!@fw7DkbF}zW4Y{+ZcnnH-ii-vrb -zwWhGmc~r}rr~gjNztfl~heVEn5GIstm_yN?0);d4sVLi12hqBHb3$Qh-(H|F>};E6 -z&T^yUM>vNvqnQb=eR&M`#<3#acojoC5ud;Lzz?wdZF -zDl6&k?xUwJoc^xFN>3#~i2vkPL2si|#ikZA=bAHEdIAiFx3VTNBrAQAwSn_08Wg+| -zthBjSMIs%gWLLIHuR13(S(fF{RRoxitWGvq^@#Q{Idzc$4wc%3d@7YHK?{+Et8z|7 -z=!poxs&CD;0);W~NfC!IIBLn;BJcLau>}-T#2oZWO$Z<1{uFf(B)0@=$Tx!Hxc)^J -zTG|&5ExfK)+9RsJM#(kKG;UwY?KSB{CpfYx&{(wqBzHdU7$a^PsP$GwRYApFvrJrD -z8LK2lNmWS@616_Cy$fm|EY7_|=nZ;r{hdF4<@-PQ&|QD?)NSiqcDJL61gfl_S>yhP -zZmzUNXYzUAd4YS502H1^^@)Z$#iq^&4e(SSIa0->7}1fyula -zQj?-@U0fKksV2G;p}7`(ELQf9i#JU9I_p_u?uUFR9nn -z6!`mkuS!u*$!Kd}tQ5TTDB!0`D+5}#ylHYF?6q#(4c7-*km>{9k^4xE8nx7>TVCyz -ziQ7-N!s4N^&er5LF&F^Cl(O!6WS{vvW?&l&e -zHZAWq%r-t}%9h#p`eIhU=xHu^_-nq4Z4M&xu`^JAV$NW;vhnGSUsrQOa4jwLFIE1C -z2gi7H^tj$!F01B)t?jun|H^+k(H2(~wPvTxX -z+@tFdVCHA-)Rg}@vXV;8f-CNv438b|93HRf6n$IPp^M;Ccz%5rNr(UpUa?Nu2)4K^ -z`F4QziRNz9mq?b(-9{}AzwF-oj9LW-Zc-Kuq>DyeKIFj!jOx_CD3JC7A_SvC<@R0q -zW(Iv{h41CsFCdSRdA^Pr=L^EQ9mFDl`yT^)1kL!)Lkcf+-%}xU%+&Gfjq|yxp96g;VUE{TxyeY@)qItE1Bj1-amh~`h8k_P-0&vV|Xx*HH} -z2r#oUbv!C~eZ3boMuBT9ueITWDL!-s$p4v$Zu&KQ6+ZmfVes2z=o(xhA;$;&IeOZs_42aWP9ZklC>? -zLtMKr8ULriW>68U$hL^#IPvj!=efwQsU(uPn!*jl7{7-i+Trl -zvHlk;w`x5vi}QgG*N2tly8BzCU+DwJzZuHif4S+nGrg=!RjoN9^-*12muwPKX`fwV -zgPAEU^G!An`RFW>#C}nEV4KzuRLZTQ=8flAH7Y5fl^cSPeqNLO)DxGRp*Ct?Vf%Yr -zvxMU^T|i~{*S+P6R`l3=LivtdRX1^$tHA39)yJc?qwmPM=p1AEedctkzEq}E76KZ; -z1X3xw`W-yrcd@d?LuZq=%lkohYjLnl^0$(x@TWDTx0NAB9|fa=1i#1#>Jg6S$<-TF -zQaA|TEqo_(%mHb8*h_nPMqD4o-Lcs9a@2~w((G*5b$Ji0_+b@sv+3X>3@zS>G`d0G -z&n->eMn2lTNQwTVa{Ttr<-$9%d&d!E9I;TYt3si4;#??P%%4m(C2#qqGGd;Y@fU76 -z*X**Syy^VNtQWQkq)cdB}$J8F&^YYVjepOy`^-{lQ$BZ5%8L%X?{!AefBj81PE?ATQp#|e@KLrqaP!WU8 -zoj1pc1e|!Q77a8l?c|^P<42@jSL)J5m{!{{)^0q8xS3oKP7A8JUe80@NfGV5%KQ^z -z1rk87r<2JM%cTqkg@P>Q4!57B9)&FxxBXaXV7olwoxxFo-)(SPH`7|<>d@?M19xW( -zxeGiPLKAOxp*jAqO{eby -zcXnBO0`B#{9;VI`fgR{`ag%1i^gWkT>J_ctg<(@>b`vRp!7pw323KK -zaMhIk?OwFx&Ty9?X?dWpGwI3MW5r<7j5+Zr{9hjGYc15c_)q@yMe&M!!_`HGYN6ol -z?sS@NZ@>&oZi=Ry{Z+c#KUI-^X3Kb&3(T6k;A@P#@avgIW;zv(`9Sv@Z9Ru0o1&58 -zZTsc`gCy&{(zPwRgj1{Q@Nj{bgHYgjWr9;t6`7r@diWqfw;}o^Hahj4i2LT6Gr>Xs -zk57m1dc4fQdY^^Xs&fz6n^WARW;~| -z9Dp9OjNLg4&Lobr*Jo}D{8v8#Juk8fNOiUq9|bWCgt;=tPLK5j=5)@Z1&{xB?fBC_ -zPY$^zGrKh1MLDl`;ubx%ioP(by{lGGdD(KODMyv(Hf~&UO8yWPu^o9;-K>q)ZPxxt -z6c^@?h_MWPm(=UJNjc+77F%KQ;)}6CbVDpzw+6A1$GK+vECz&)cD88PEBJ*Imgua% -zu8^4e-Yr&*?(67$+2)wLPM6kOC%rn8bKY_{ZQJOz@(9N>Y_%=0pyWb69k?mB$e{HH2Z>VRY+xC19 -z@6?P_?o_Dto~CyMXWa_3rSmr8?Z}<%=~5CC7V;s*;|O1weNWq!O{-Vc<5A2u>#`V* -zf0t#`?fVRt7s7zE`?(HDKO08*?=)6z?<_DJiZUI}jKn(XJ09cKtS;q8sAM6}LhNF+ -zX*aED`%vJvyY@cfH`ruV6_+Q4O+6;1huR$eiHXG~4r_nZ@?$o%!c{J5MvN&$|n2Mt` -zw+51%t|g9vaYJWHVG`7yYfsoIvbG97f_O6 -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 -z!7U8N`*Z4LaE_ZLKmhZ-bUF!aQT -z`FBNkqkK+qq~gf$3k-5}+cada@h-jOxr{fGJje7m)JJgV50aTZ_yUukdGSiZtYVwh -zl2glRBBojf3>3kx6AW%$V?aJ5I^f4ac)G{k+NB1FA@GFnt?g=1Pc7a-iCT#CE -z^@Gw_Wl-4_>iQMqYtX-^ADv!-KO_Z?v3NI*OPwPBEYS%M@}t4tlzUIn;Jjq=!fyUEgZ?1Vj$lHtd&!iMrno_4f2`|Qur+y?tcCI@ -z#E{oWhn&g7j(5nz5Z1v;?w>nq!NeAimAFo9DCL~`(r=q(If35eMb5jIWlz#ni&6AsD}D$h>%fb&i=WB%7ezeB@5-yw0H7$r-`pMa^`iubw|^osX#SxMD?c;y -zUDM?XHioe(GUc%XWqjo8%fB%d=jZ+qZ@dG*eB&^2U|L6oU%n#pXY450QD8;unnM*Z -zNM!t-CbWR3-*nJL`HUg?j~^w6!2xKiCfx4Kf${tc$V5I=v!Hfh!iTlt@Xkq~<50?f -z`|b89E?Zcz0uXQAEyUFH{OYo8H=Z@o0c9WBbtl{c3ZEd%7D^F9QqKzHb*ji^2g14= -zEx-<$#bki^sQ*;pI5N=!_`tgnkv^~#30@5c;`P2skI -zyua=qn^4)Gal9v9h@+uXDipK$)$0e(uJ7Hj)3ww54=t6n{h{1iw>y9`D&M*F?bW~G<>>ZQ -z>gJ0F%@P_A-f0@i7LOH#mfu$vs;2`sddz=4h1co`MZ;@tZnJz5FO*Vd{&Bwglb#MC -zjrUoJdWTMWA{q0)>2s9ln34pVVz)XGL6a9bhl<;({Eq(ZO=d#*?m87kclb^erKaK( -z5*Dpf$353avzR@B(?^FQ)U6M0Byj~X1hP8r_GS@oZ(7by)@*r^Qr^IR8ksR?&kUOssV*;GOWVv9V}e -zj8v0y^N}dh#gEL}JIEats^1DrTTq0fV`3W(*L4yt6S!iNYH{QxKI$oE{1SxKxz00r -z(edK|LSwS&)31+k59c_%tWOZ)rB_F35#Rqp4=Tf{fdNfawU1>*Z*NrBwL|4b^3e8j -zq#gT*h?)Peiio*jB&pYF0tnMB|c3S7a7ty^UgD|+aWwgHdg)=>Do^!>ruV$^l~~L -zHC&D)o$-}p4BpySBsr-I&q~&mC@+(6@ -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 -zJ*w>5+4fn!e^ou~K@{z&?=kx5QgaPw -zlYV3*g02J$rnSe-k6QMBx30UgiQ^=sy*s{*H0Ys*s-IK!Su)UMSR4K{OHAD&<3{!T -z#q5?B2F{NCgbOIeXa1?&d#&{^@1{f#g*57wmkFq#umw^%`|y|JBV -zw!wlv5&-UI-z2YD5fLWbr1HN9q?Fp+Or}Q-BdkkYDunxhIniM1Q!*GE^jI)m=!=2o -zYznO;bK=?AqxME%RpUhCuU1DxY927<^rSK+{U>ks&&-8~mzXX!$Wh7KROyC%ntkX2 -zte8idcp7y#6SnoLU%eSchG9 -zaP(U4ncs@vzEMbhMBjlP9A{V)-Q?Or^(cD;z#b8!xSvd)+3lb(M5OQ`vLtP?@SzDj -z;W<-cFq6ecj&o9|@29RGt`iJ@VFq(JWm56-*DRC -zWsh1WNj#W_`>U)fXDHOvJt4tn1F)rN*$UN6)c*h8!$1_cpD2Y4!)INZ=LMay7}=H2 -zdC~=JI8cSEQpD6qg8k!grBoA~e$5F?a6nYSpAN{V@c0ZrmZj50?x|YPfX|}Lvmf50 -zRnF6mpemw8O_KK}gnAQ|b8)W{YFFl}9tGOvSc@|7tql2=Mh>BmzYDwYFCqtzOlxm& -zVlEscElHT=^l&y10D9Z_A@E_>aVV)aSJviN2{VcS(ITWNw30kS)Tn_0y -z&!ORn0y;TNELvToY9Vl#f=rc6*PWKr@>OG;s@WPXC5ajflTAxA<^+H$}RK6O(`) -zRXMnpi_&J#creV|K?n~gn59~}O4zJY^nIv#F6T*9PNVv)HESC8=M!{*6wzK7V&U5i -z27oyVT>T>nURw!my_R`dmNKhyBVLlH+rV~A$Wme-%rhUJykwv`;wq24L21d&SR2-USS*K5naER?m)NQFwS{{`SYts*Pc_@nJZ@ -za+pSmtYqmI=*DQ^=kfhs=JA7i%Q@2jK)Oy`&)POY=)7mKNy9M!5P%VZ27tf5mMsTr -z?bsmGCY^_IOq)cz&5X5BsK*WTI!Wl_hGK+S}IGhsGkH@|6{6<1XJL!VdsFOPp|sb-UkP9 -zc~-O1C8OQBEN5e}SYQ6eet7#~dzCawWyCx8uHEdZlu=(k&jDgf)x#RzOLZ;Nk_vn} -zI^75jC@dRQOvk9=w|Lc>^qn>tnu_;?=JU%L!twwW27P9G4s?`&fT!(wR)kvPo -ztLjCZ;@7_-MSshjz2Lka$&&;KEBK -z=to-LM8n(ywyunJ2N%A1#7END!wKn9ElSVPo9EJHZ^5cCj8=k{&iqV$Mojv*LAIS% -z8do9PTmRqf_n;*VB~(b08MyISde>r3?w<9UnOr%D5KT(6(x+JDAXC_JQ%8%ca -zDZSe_o|Y~0DutMN;6At-M5GGHBRe{9)x -z+^G!jc7*ss6e9V%$KM3L&?J0I__l1FZ*f^)6g;@)VZ`{M!Md$+QOaXwFl|lgQ&N9n -zyMy`)IbsTOSX`HzaoY6zofuddbk-~M=@Jj@gNg<;H)k7VGEx1U;p!dN -zxrg&#Z^h|<#Q8Lj>?7CySP2dY(uLBqF{)L_$rsm_=c2e6fd*)4d(9qt|1-UO{#zUM -z5ssq}1zU+x7_%=M5{v~GLxfBT9luFFL$cjrcf_`u?&a$$zrc|mX8s)WJo1F7cG4WW -z-#sf^SVpfL<@~sv3;A}g12R`=@tG|r-aCT0yWgd=Q)!^)R0uByO<7y2`>?XSI5H|x -z=@f+486~Gkf|h8XfdSo&0L*4bIFv;KP};5@HAXO7o -zZ>L!of?Z)4#Da-;6B2Q37E;fmp<`5l5-P(*Adin3Oh=kX2~au~zQQOAru!u0^yfV{ -zx$&f>BFms8IQj+-NYjK@JLMw7_;z@!Vsvh7!Vwxa#g>Xpu$kcsu%Wy!xr>G2=o=W{ -zu9PU_Oi*r0G5BdI{QtPJkmCP8S*EiXfdt@0;Z&|bc+v%m#x%;_mau2$aj`UtnMGe_ -z6jP}UT0PJuoE8_hN9D9r9eTs_^*xRi@n!^3Sqxhnp#_pypJ3i6^Dqi_6BZaL(C4J3%AIUc~15{V~T+V+C_D(2`tI(rAG9T-Jzz~ -z0B!&(s -z+2yr2^#}6*=9e%dNv$oFx;}(~%0ju=RX~?>t`abbQ%Me-l3q(XX!r -zv_4h>mXDXp7;}9)!&>>_p_x{dW9R*M1>An9VuYjldvD -zz}wU?-=;jP)ADD!95sa62fOQ(fzuF#n(;mGu*FX=6O9HtVTUcW6{9?aatFVJkhss> -zG>}rThDa>aT(LBzGZ3r4yWD(ZfWHMpi64NyaRsbf4cY(WqYMr%PeYIo4fEn1LXx*% -zxzPb|6wx30DWGh-S9DPO)$nF@Ax&ch!rai+IgDpN6fxl@rotakRyp{goMrS&2n5dn -z@Iy!6m7D3xuW!9T7=7}HgxNr$;0Gu#sj>bSbcg-*`E6|RH*#w-AQZe+61&9~_iG94 -zN(FjPP_Len6?Cx`#gctbPJIn5s3KrIe64G;zPDfM{tR{yb~4C99P3Fxb7|bki-jY+ -zd_9q2ax!t0_=vZ86OSV1Iwj@Py(FFKQP;Z>7e?7_@RP;=Y3NoaVA1bxRg$!$0nOk2 -z4|$d-uTtLmBt(cm5_=Rx?=pTJJ2?DCsOM=>ilZs}($qL7Zu5S^=)waq*TmJYmHj2a -z0ZX=K%~si0*akNi8KWz@*B^+Y$R%~46IlMKG+MXWeOFup{*UvFo?DPshMQXytqfvF -z^|!A#9JRF{&PA$r+YUq$m_jEv+0Z#x2AUj@3(rSsq&IkZf41j&X3@PoC -zLfM%g=_$u#M+MM2u;Q9xRA`%ql+F-tjyyv<$qJvkCox2dTYJV^7c)%k13bx$7k5XP -zE1cD^0XXJLC>+8h -z_ZG|S4OGuBV0Fcn?UTLF?Ec4TTIcM%) -zcs}hsJG*~d$H%m@5unJ)7*VPRZZ;p-G|AfL9`}fo*kS_;oAC%9ORt#p-|1MvZ%v>$ -zFk@(EO;(Un{s_R=bKL?T1e|kTsrq+@1Y~H;;J|<^-4I5|q^Z0OAQf}DmTGSvM#~g` -zHf4U7iM8GnKEeVZ6s75@p6{M*niT>W1O)zB4 -zyjL0b0*T&>zsvCCyTqWSjZ2&E)$MuVmt9D=LGdT`r*+Qx=;12#P7K7>SDASow+_H% -zp1iHePGeem%%-;9daD)b6K -zc`WtnL|k?+8=@krF=PFJ#Qewn3lABzsi&E5uMBG(Pj{24j!ZYdrh>HoDsI8v2JP3xit2sesRn%7?*+<;C8}Q95M=S&o5dY7V*$`sO?#Y2apYTK+ZTo|oQ^QG0y>y?J -znr@5pez4S|AFkvuT871zoEa436*r!+FnV8r1_4=;sT>)*l)7UwxTbu=qY?$hH>xXv -z{i*JCr1oE4gHLxB<$T6I>c$K3yu(<85{fiQWYmS2GlNO(xosDJFAL%i&K}Xc2a2E< -zKXEq5gzDJI2Dtm`bXWG^CSA@^d$CSqj%qp=!4oB9_GIs8G04oV^kn9SYX`6inzb;l -zIyBw1cRegwAI|?FT(tgrm)7;_>oA$pF8E);nG)_%i5u>72h^dRC`qosd -zF$Y}XX>5swmn4qgKHe$5$}~p$)>KajEOrj~{4yg3HZ&ON1v9^=|8Ob64@(H5%QQfN -zJo*0O1&stK+>Z^+M8cRQ$qupy*s9tc)IY{%!P`x>^mC!T>Ul9w-eQkFMcr@@6(xMO -zSd=XmiB+(ysk+vYN3Sj3KIHYHHZ;U4z@ri#s}?x?cCdrWnEbA_)=bYFto-+S-$rZvT<>b{5F-F_tr={P4X1(z`pAu-e4y2P_50t(1_4KN{+4ajfIGO#e}>h=7)bU?PQ -zcefESOGxhT1c#CW5<6g;@b53d)*5zDYN4yWW#z%5Z -ztYD7P3V_@`fJ5x_MB1e5}?FP*Ywl -zQN!&has7lGl*vNQW)9MHY`0lLKS04Gi)$zHVM8i=ERsn`+TrmhPO3;fv{o+bb-L$4 -zq9z!t6ps1ebDi10=lsSa -zvWC{O-@(kzpgL7i$*v?=20`_YU32Kt-@EfNIBN7t#pVM}H8M;cC5C_M5=(q0GjBoO -zrt&bCwawD97MjY6}4k`U};$b#^5M;l?^YXJF^|Z -zQ+V#|Azy%arQmluv?=xmrwQmhGikwD@@3}RkD|Iy%*&?_1jp#ctvi++MTg24hi8iph7i0QDj|cR}~fRxYniC -zNeMTyai_~JZ4oNaKUg9xV~@sOK_AxvuaGq;HYq1zyLdptwjA)hC;m0&f#~K6YV^Kr -z{amtKL{=aniMOM+Nj#v&T({X_!z@oD1P_I2q{Q7#z+N9K7bkiHmaJl-fF@UnWN{fO-R)P(QFo7v~QOP4u%B(x2YnQzcV -zs>l|>lEc(g&OCW3QB7Uq3vY}J87lP_W&f+@6?M%Vw+e2~R?RI>jr8-#hpjYEbNF79 -zwQS`h+AJ$7npU|qiAI!np;}5%em9v_U)LpLBndXfT2y!eesP=J{;Y1Y3=8gcQor^=-yyU@ -zjd3V}LzLxu@qCk3*}nbL(#$aLM_4<~+*Tm2C>Jd1t6P{&Lzzjb%r?Km=TX7}f&*OZpN4+ae -zAEsJ|I_a3zzScAqmDJoJhY(}Uvi|v&K<7`gq*nLmx*OG6@1=l^iRVXcGyf5y=ngex+94X+j(Pu4 -zT~Ql9A}p&;+H=B*z5V>FYB8h)bI8grg#BhU{e6Hdgb!B=1Md+1E5Pr4qwjGI2b(4h -z6+qK*5fO;PhlHwM0U`BBN^PW>B!dcH6zLtKi&i4v7#j=+(84MrYQ0YqhXALub%Nxw -zyOExN+pw?eQ|F>Fu*36%40D11B88_^ryGyF)N`;F3QR9vf-~X+> -z-ufFQpY>zE6^_-_^z;(=8&ZbHwvqKg4FtZb>d?w7^U23mFicQR7_&KDC!Ujposk5I -z?dLY1rPzKfZFZhWmyauPhy%&TXEM8<94~YjZyvkykxE%_M|5lj)w1wTzu~GX -ze6n4xuL*Kn3cBn^SnSbD!}YM5_F6U+cINbtBlFKC} -zCN9x)w1x=jIV2gMrB(7d;8hhCd4{w`6lH64-<)|WNUFY@27R3h#@HJ&N0@!3!naio -zFAdBj9!gOj%$4=L&fVEmNre}>SClKDK1)tSZc+-4VcbecS4SVEfzvJpRS%SY9!@#XwPwk5x3`N68B%&`KTM}m~ye@vO%EmB+%HaA@bnO1gv{G!( -zg`eo4k0_X^KTO|$ktDaBmDWgKr=792J4*+ir>cX~7^T2Yikf{{BLc0;W}a>fSZx=i -zOa)q-#27c*VO`mRLCUjJFV)UwqzDVmFn>MJT=td*zqPH4J6r -z-E+tb6F7VYZEwmwYNzMrlfmBJ#s!Ykr{&^(Pe-KdwI?vre`xAV_nq@kTa%T@v~BZj -zF=^V8t}O5Wes2|~ki;7E@DqEu5GDtWxc44teU_U2?7tm3gan!3C;bvpC0^&SODZ*& -zm9-UUR@nc#2=)<9ZQ7nN3_4*mW|{0~Xl-0%5S;AMm}v`b74I=_jh-ln*9%ft6$;9G -zFDi#k1Mt}_bbz{C`TT|J1BF@PijTE6)+RyHg3|N74n>Nm8 -z&16}tD5YwI2Y2S1I_upe@lXB`Bni82NgVa+{fvG+EUG^-dMvg1TGX1i7haIvG(0!q -zZ!nwPb;GUXG}X32uOjWN3Y+(pjmJ -z+(}+&J1uoEzpe=)Xcqdm{@up9@@m1GviT|+J5J-r5t^D -zLvWhWYTlA0Qx3z`ybhlcIKkONDhk^@wzJQuD!cuIHmFha@;N0{zR3Vi8b3LnaS;4A -zw+MJ(K`$j}i4&=ngt(OHX3@=7r)|=mOR7)S7I;RrO7_S|Sx!OE^;87m$rjcz8z{j_ -zzgmzERylHQIKWC?)0!~s56oi!Z9u8PsOR6FA~|)w^w&I^K;40t;*l`*9l{1zsj5M& -zcSBNz$Ar6BY9H!eKe>jMQxKz}k5>AkgXFp~CG!UH#T@snW$X -z0|5W0+m1A-@qI7eiwJj&Z=F9_urm}5fUO}nTbh7h8VC&X&-!EG8V=Uv|B|Na_#^I+EiqOtJC2M5|98>tu -zt_JCZa9Gz(9z0O=RvFgQuc@kYZKjr7KS94>3$5O56P84~w7;#*#p0)qet`vIf*Qy{ -zfm%;B6*O03SINf5W-lJd;8l_>feMkmWun;R=wzN9jM+<$JBjo*r7%n{XMA4c^(&I2 -zqp1YC=3iCh34_#Z98+KDJ5y2fV1UoGhH8UQk)aLSRiTr$MMtg6IO4)g>1flW=4h|R -z8aR+HyuZsIy_4rBMb|TADlgthnFlOjai6P8cy(^rlBV{47ZLclWHDk>IubS;qs?#c -z!ck>}>C>2Fe{S0Y^;ZwdJ1(=Sa%9QySt?IahcE;caSo`sHEiUn;BdN;iEsDTDB6}IiGage -zV^zSrb5Jnu$kBH_g?f>&Pc&k`IrnA;9YBW&U^Tc@m)@Q#6fYUJCdtg9 -zZ;Ozz(Ef~mzJ&8>{#%6$Xb++uZA^v~ess$XM;`BQfS0VP@c9&mG300AsmKLC?C6g? -z5cQ>^3BHJ?k8zM|kxsmX4Yj?gCP094Be1|Hhz(^R9RpeTQ(ww@xr+>%dwk8W27R#o -zQhnNfGBb+IpMq7}xw15l#~%C~A3&yee?KzNj?<03SKx?gcY+ecTILi!tHUDJ8NR6~ -zeHxvQs^)czMfgq%8$oRQxf=wB-y{Q8s;|fX*|TCg)pxglfCN14DMC>;6VpDGP~ELe -zy!A0l%co$+v(&43G>5{g(ch|y5uT(ZF+L(kpu*RiH#(jZAtvXLNtr6lsvw0={d5RtZASKu***uzO_kJ#|JC~Q-o-=CFGgJb=WeR(IWu(F*#)(W{nG8 -z&C_HLk!Ai`{d*zc63Z(6yO~;H>^XswI*C&{VLr%o{iUqwh= -zCUr`k{v)gn->P -ze$qfWTTO@!``|9pU#OcD&HyngPB|B}s3KBCzpONbj(0K22PUp*G5`~I55sl-kfIUV -zDN`2Z00I{-gWw>1^L`O9QuAuA^c{i)?ML+-f#i>se38vL11b0^&MJ;xZR3(^HX|r` -z#6>5e7J$!NHuh>CgD799=Rhw&G}3*<^FSB&TT90^fv(=UfzX}p4hA;5Q}G+=WsU+W -z4BNpMw*Msw2T}Dt@8tRB9uDO~GWnj9CsaXCwyVjI*9$Q8M*E_Xw<<^2*Yaw#ljIr8nIpgx(cWh2QRn2g2_544-E -zbWu~^6-EN}qparWPyVHCV>ldRJe;hzIf|X~Jd=zIx7U(*92fBIJOE1fMS${=G_Wh) -zn8-g6AhAdJri#qsZr5N|dgCWJTj$wRj@I3j%;Ut^(QL5f06`T;_j33`)`(7VgHXJY -zCB?_9ANm&G8a5ZvXsk=H62f7t%W#A2SirBghKL}6XLfj?d>&w{{1Or3P=LSNFwtnq -zFCatFIuB&D=M3)wjPF@{=*v;~XP{ziUeCs`qUn5L6>9dwI#P!zvfz-=#`0mh*uDtL -zdAc~p?pr=DPp?t0NY;!cbHC(q%R%I3t%S-_%g}ayB1p9@L-_mJ -zoNUYI@=`6~xkv$Jn4lP8rp$SQu8Z!HcEd`GIY$>7wSD=~3vDzmeA_G1QQbj%1W4Mp -z+{>DD@vH~ACoWhih-BWk2nn?OQuE;F3;rC)mHlvA2jyyw>fWkOPSlq`^m8h0rMzaY -zqB6Wbu6#+Mas0;vzrwrb^I(WAUq! -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 -z9X2k?j{++? -zC8?9gch(dEQ{D>6a(3`W(uHq)9_YK1UJ=UcQh%IJ;k`Kvwp)i}_P8f(KReVtM#&+5 -zP!S4>xY=_TZt3C%ucCiSm8AK&FX%mqY}SeCkK>~+U$2d}5BB;4W_3J9h(bseq7f(k -z)ErNmzF%}N-?=79OaJ(jWtc&owbbKeHqdW5`BWLn*xC@_4kspXl0jPUK(?I_32Uu( -zgmO{Dria^N$Fl(R(9CJLA_aV?S=wv)pcZ5FSDJ)L`l$x5W<^ZaUlC``66WkXkRdl8 -z{AKwTO`X0M>#_r@;R*onC+hK3afNYtLu@l#T|+iTh`*(e -z+3Mw0xORy>*Bv~_KP*40D-}@cQ6#DMomZ4 -znfcDL=`0J{f79yr1|Mf!5P+s}LJMu5>Rqldix}q7&Ml0l(1Q>l-sKJmo*z=O+IoZD -zb16U?Q%q==FA_RtD^k0K$2f2@LVQqnLTZoaNSJkJk55rP(=&mB>;{K@?QpNLIqc0P -zFdzcDU$ANEv#oZjhohey(FSqC1m*-1Gol -z3m0MAa{rvI{Mc{|{Hyy%6scK&N0Sh<+U;!?4;>if2veT*9+ATwV#u1KA7xySxOVtn -znt4KMeegopZdu=VDuG^p?OOS)`6RDq#-bkGH$sOEkS*0s;=MLjIH%%QxA<<0XQKY3 -z$u7Yi3P{W4wh^y3QUAS^riD-5X)s1n$4eb8f}ohJ86x(~;ny!3Qh+4Q2heXC-jfOS -z{`=GVvZvtsY9}NmPpzr^W}@hwk8{8`t?jx0;J~z{EtSNa^7x!Npc+{3zNw+Q` -zB4qhN{hi;D~_5bv1okw%V^G>S_$ -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 -znm#;BPTEF*D`GIIK_34*3+XATDVd)Ua -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 -z02sXUmZ!&Ow|`T&Mjw`bNJXncL21iX>=<_t0 -ziQ2KC?M&S$V1#fS)&?z|P}dZOaw_qjU^RCo#(0t@t;&%;sNRj5>=w0;lDLI%(KUUZ -zw3*_7q)Mf6dB`8THY*mg*D2hk^qeEb+md4;wLJM0072C9zX`UE1F%#ign2LuOR -zOE}0dYgyyoV5M0=)q%C0!WohodP6c}cT_ZNXvBHO|E+=A@LSv%Dz=NABR%aX{0)Zvb2F~45?XE(XrV!@qqiNx@q?tui=$_5z!2WXA6gGcPOLJK0&;dd?yr3|Y -zERy;Oe-1ryCH#d976*kB -zuSY6;Nb)C93C1!K@~X!R7%ZtqEx(kiCh}$Weia=klnDGnBc;yeLwklMcTvT!aVZ#d -zd1bwQ1u;ta|F^Ud)G4GN(h7|sg{smFf}_{y%u -z-e;2Jvm{yv?$Z`|`x+>uIZQ4~PhrkoFRRS^et?w(-Io>quuXLhzE*J -z#pFPj_g&~Tg#j=mn!OsJs{_LT3ghdW03X0@P$|yhX{>>t7p*H#bUZJ~y*BkgRW-i$ -zv1~!GY)p+c?Oy<7sx>1pH4UiXT~dT{C)&6KnEBR=&jZMw+*FfQ1pwP3MiT|`ZlRUcy3LPC=Ak49wb -zHB@w5qB~>CVd1QadMEVdut=QGdk6GMom;0gU##KIsI=C8`W-*;_K)_DZQ7kTw)_T1 -zS0n5n_1AKqeB?zw{)-Rs>^ELv{m9_pnbzqh5k8RDHsIm2g3bC96WN9iupjG!>&w^vZue0B{K9&$hk*Fa&)dnKSS -zN!l?{_0-)X++fLoa0T=f@QlEB#r}j{`}7J1g(rXyvt%o>BElwQ@`6iS{ -zDrfXjd*=aFrMdF}C_N7AtF2!%%#Dhh>`*q)(%QmtbEsquTrVPa5M`KBUw -z0M)fNG>Jr$mQ(8**(&SC`xx6QRH-@w8k-=%LJ?=oCuyUoIrN5PdVS|_FzaWSK@YRm -z!{m9Qg$-r$ek(^~>~M_T@qfKB8TA@HRT7i5Qfu~F1%0`T!eWQT%eS7|_@8gQ^ZHlF -z48_IeObM#WMsJfhpLvU?9(|Fc*KM>*t_MjX-v_+6OK`plLE(!6U)r^p`$&>}mP~g5 -zn`t?^Kq1hoEnEZ?vOt;eiUxj;WpUK6YOjG!>` -z-McV9bDESdmmMe+ae#1n&f^3!tK_9pEY~Tq0$&HV1=eF*%+RM-FerQ{&eZx+g@b&f -zPu|baVL^FmxTK?DPMFS*ua)cXy!jhDrTuxHf9u^+l((6FhK?;#D2z(jQ5Xk6rXb-y -zVTNXjff=!g7!Q`*nNk&^5fM#zI~3Pes>wyrfkp`T2O$|3Y20|Hkm#&Fod%R@en|fk -z^OP!nP1{z-Ylx{dmqB1ja1^9RNHrR2iQuRPltMlM_Lh3(&DRQ$VA*xYz`6I$ey<=8u_R|Ja& -zYa$ZP;5nlgYFtoI&AH{-MsOtw@6i4V)ls|vEbs~)8UQW{BmM0KLig9L$}tZ~5(U3= -zQeicXahxj#qGqqbOS~mcsxmroR{=;(c!}4963bBmxtKN<##b<+65m$-j%E$qr649~ -zFMVIe$BC8Cz#?QIq7@J}?VvOAlB8I^{5&V4{7$Zn8 -zBOmn02ma3Bn%4~W^V*rZN^7O)sEk^{a%UWmieohVwZAn&=sP8a)Z}Ccag6@_#DTt-&}e+!kzh$_##U@TDYQ} -zp$Bk_W!)FmqJ28&kXr%Iqd4~yH?m9z#hKx`Pd>pdAGwDczvoW2UcI;^Eg?}L*?8B@ -zFPwk*+%N07?eCB>{|?k5rFU3A&ak%hJ_+%F&pIK$%m9Cn(1yiWQ8f-MhBo07&bcVj90w1d)EU{y4y#G*!&nIH=WR -zlNQ@}uoS>+8ao0_s-{z_X)Tl|8r|_hsYj5QmrqmO_ap+i%56jSCxYYVgHVS6ro!=1 -zeBPl?8|_fFgh}#rnnRPD2nO>(&w)V?4C~J4lU5!(Fj#JnD7VL6JLsLzTMG(mZ3W;H -z;G7NuiQ`EqOUvle@U0Uk*Z=Sd#Kruy$ -z78WTL^@6sP>HtCM;YUCgjXg~j>tzqGuan@>yaFLYQ&4vSMx?GKta2q}68D0onjy>AG?quPdb)#O-gd=fOrQWd~thPBA`7AJ1lT*Yb89Qb~LQ`Oo@HRlQwW$K#ayXN<4a!pK}&J7*0 -zI^~3xDYG?h#qHamOT8ihup@?Yx!OT+8=beMN5oT_+TNGR(NSou9j)=N?xUlJg$@rO -zgqcBMh&u6XPEZ)~+Y>0zn6_0k7Ac`bQGKv -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 -zuR+!NoSh0`B9%qgW -zS9AyN1cbZ1IOQ%?*DTsP-*#j&&m2Eni|jtfx8|*UU6ij$`d%F1$M`wvk};Gs*KObE -zINrMGJZ%KTd1an7U3Ur>;XkdNc1ttMokI7l<>>-<3Tu2iHbiF5tAqc_W{DNiq0$fr -z5@y&TY3w@8mCseKDGVix(yKZ`puyF60J1{uS*wmJXYTV(4!%3(1x$lf~%gBy?1 -zKd}x*b}l~o`e!bE?prtaM&)&a-bblO8H671qtFZNBI0}~igk_I3;l0V@plH*-zhXe -z_^u%i-VKCt`@J?fQ0WDDF+uz1gZ;Lv`0r_-dlr?(5Rx(JLjouW5hTgq^D-jt$Y^LG -z|J_i<2{~5aEPScAt~P=-jT`bvL0l+W@*Sz_ALfNPcQ>k-#;<8reUnD_8BwZAe>K+dE=$CtZnvYnHmp* -z)_^~&+L+4^P*d2ML&qFH+nil3#xu!Mj(!LD{H|H=GZjefWWbW>X5a%P@5GF4R6XlB -zLfV;Eho*25{!`1fOPZ@yQ+QbD&}j$*P2270+I5&KpD8;%yXMtITT_;b30h$CtN6}d -z-qzie1!U$Z_sp&-6r9nK>*nXS52Q=~d=2e3qBC_@>&n&?-Ua*_!cO`!Nuhsq!1<@& -zvYsOYr!ka` -z4C#68p9hPKEDTE+m)^3d#=jcw0|w#2k~}9KOAT%*Bv_41Rcaof;eSSfG-%nXptu`c -z0W|e~0voO_5@4BzPqTA)=CizhsV!nQGJm#!nKb -z;+>W+{C0uSCt_e6+b7f)ul@`1sOG3{L1{T_thjk+fI*E>P?g=&<;Qz1;k`mU=1NLtN%ZL?{c(r+)1# -zeDw?8W;`m%R_AKs6!7OnS~lXZZcX71&Jf(CnX=v|3a`ylrtSL20m8-xP*)i{%YRK% -zSdTv?v+7;w2ye-&HNUCv;nh!vQbQQX%L~(=HFh25%17PH(REpPKECY*ncy9S7nupq -zw(ylb{YBG~Vjn -zM`)>tF&ug4=~q?tpAH{+?o|H`{foxxby&p`j(jTE5(?b@tO^>AI4d9-4*3ZfoF?B2 -zsP%s6gn0BbC~!>ZH-G;RA0Mp%n+K2%%Z1p~w1O$93jjvZ%9u?hMG#I^1dU)AKVkkf -z;=hOR&|oRh3){a&;*_Z&P8f)uaq>0Jx#It7A~1yaKNeR*VZz+*+B_6Olk%va+(fE+ -z#Md#@MTu@1(s!nYG807E^wDSr8Tp`}7?9~>yoQk6)Y}T2+mTV}G=sweyECE~7VfC% -z(7Bh;()uf@THR9(RTS_4F_a~#PAK+xr(nE2{FS@D|LuSC{TG@YP+j+b0TT*~(0q^_ETdig1&LP2J?Zn9@eAv?ooW3)nr)BIVj8%|U7keU$Dp -zHALm9{HMH!tC=QNONR##b_m8Z4f-n;6fz$;n-@fM@t&7&%x88`_#MEFB!2o1ngqy8 -zWxV`1W{k7U_9DtH3xh(~wNK{}7-q_6@1XEroWHJr0xS=a0jSbDGGP0)3w-@&zrefx -z>~~?cWZ6gFv?$5?85?)s`1JVF=pPJK*9PPAFUbb$2EeLw1z>@l1Qa6P(2UQhZ=w@& -zz@H5f2M&yJ0C8e_H5h~OfJhB$-DPDL+s#L!IP0diN(WTdGKJb*LdVB}HVJ4f1&yRY -zEdfdu=JMdA8qXRLln0aq@K~RZB;_9lcFUZVT1SjRPADowFc`%506Nq76W=ANK&Y#) -zqlsXTDuSuf#aAiGLyR~dgX=xAwI12}fNU)%Tkk_Zk6nh`Fs=E{?ZM=|B2*OR+lj9p0x?2^MS%7yXiR`JShAO@U>mD+9wj+ -z@Eu9A>9ah#4tO8_bzdncgb7)05m3kiY1%+xcRurhLg;vR(lT8Gg$vOk0)+mbRe?gO -z893jSYJ5XL$ZQ@^xDUeo%xMzd2Mh|26 -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 -z+~gsvub{p0xgn -z>}s;8QO1(wwLSkqog9$lz46fc^VD@%)e^Z!OfFZc$nbT0b( -zRLg3EbUu5#nQd4!^w*rKvmej)I(X_FXDDHO$DkaDS!ke={*x5*av9Q6S$KEsS$5D^ -zvRizU6k&4Gkg;1lo0Q^r?ymc7`EcUY`PYBC_FOkDMM*gIZrQdlL?##hK{Z?5%YLGA -zsH2PN{O)ej&d;P}=jZD@QEeKE%Lh86B>0DFYHiXs)!g*U#Saa~Ia)uw;KD=LTMyv` -z80zfzSbjeV*&icIbd3u+qc#3PM|*Ty(NQ=M{#`h=$%Q;MsjUQRj+QR$i6~Ps#sVy= -zig(`jStsAWZG7Cy_=hIET{BEZIq5@BRwda#4WAB`*ivaOF4J>E2L<9H3f`BzoeKh$ -z;d#GI`*N0!^-Y0Mc9!`R8@kDP`b?B7?2ovFJ%wUOtXBmIwn`;Z)uv;*&s178J@r8~ -zC!;UZ%66-M`KI23UWIpNc5Ba4^?k->Q}$Sw(COz$B`n^bU9-lK43Hlt47B7vYKm%D -zP!0^(pM4iGgAS7BSFv4wDD!MY9Crb(7> -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 -zs!xp`oD|(YZh1%6+RvQ -zWi9^G=N;T>MrERKfpB_x@piBFwyPtj>K!Ban(`@u^9%gm_mR3^Y-b4KO@+0JOaBO^ -zQ}7af)HqCgMZpv)?9gGMZWC137+?G&h`&RQrgtiFUe10& -zcy1**ksVS$bwEv_8)fHEZHt9G@QT0RcW6fhO87FragRldd@niaqSG@@9R*?U>-{Vb -z^ZQzTr9r=_n-ZC%`S(P%eK$te0kjEQf)r1N^mPUzbqO_|o^FadjjF99amG55JywDe -z10*W^&bW)&`Vv(lUkpr25OZl~t6}|i@@cx2N0`(mM-1vA&I193)(_AdAepI{wq -zZ0*L5YwlWJJvz(`xOZFcI>~+lj|g5a{l4g7?HL$;e2O?`pJN?QJ_ea3b8mOsY*B^> -zru5EAvdcUyxGDwT_1MmNkTht?wP;wOJ6j>qD0nSrsZQR}r@SDk*c}e@)aLvlvI`xf -zGPnFsggFFtFUWTzTa(s&Pvrkx$hIQ8%tBGC8%@PtdB^^eB`N#FgmTD^&AnN9xXGv{ -z%Oh>q?Z!rhym-8~r?;+@JEUo&>}BqYR^M}%w<{yHr+tp9=as`*MTbXR}$flc8sSB=P~Dgn*ugsBo%5 -z^IMG53ke4~i>!VK%*p>DX4@4${+sjcVBIq1{_)X4NSdMA|76_V!X+P@P)0T$w0$uv -zD`$Ik4>s)mz}naV*cC#Pk2oQD#=hb=DzO$q2;C^N2*CQhZ8`jo1(h9vB7vM7 -zY0xiV7Noe}Q|E3TZ1=!BzL4plx`T2$BIl*>laN@>Gcr+Ymhy;`Gsjo$!;o&PKLed%##+ZajZ}G2KgZzmk+Y!e1FT6S{JJ -zWk{q06$!z0vs}is(*hmnaSL~l-Z?K*9F)t=qHP5$8|8jGqZ4}WB~9Q0P`3YZH=WAG -zh|6$Z^%p&5OC)Olq?f6evA0@q{nV78c}#dw1bkES)?wSkTwiMzIP*izbR%0?DHeyc -zUsSJ68d`}1+(?`yeQu_XZ{aW5Nf`T3oDit_@D}fqbqn;ai#~P3Ew$E559YRoLPw}q -z^_pB`aqhXu4pGL++{%Yys7O4gc0|mW_;!vfFaxCcB<>O>2hj0)0C&Vy{jVze~zc$IU0%{KkSK=Ozc>oG4NJi}QiMS&sVMDku04K(pZv -z_j1RxF|Pf#0-jsR<4^g^65iJiNnJO$Wvx~n9>3{cF6~@!=-*Ovkr{w6%t(21$J5x`v2%#Vor`u!bx6wp5`vU=DN#B-W1)%t7!<#36>C5 -zE1Zw5<}UqzRc2uC!J%YOfZ3C4pnPtx_6m3XgZtd-Uu)L(@l-RfmwZa&<_Ktp4vLeXf@k*GycwxbEA|=5x<5V28L-frj_bfcRlMxLz8%(e8H%yu(1);(E?)# -z%H8teVm4zm*Frb7Hc5s`<^6o2Mm<^R*OhoON_Io -ze-zt5S#R~p38C&3+9G53%I$kvy -zRx*Zt-z{G6JoUcKgH2NB$(g}m99jV+QXAQoIefH=PCw^bzUdKY`h^`%IFx27RhIvB -z2e$r)y9b3lH%jg;e|1Rv&(!-v@8`Q+KrQ0fNcz^FNHG=T|OkHV?PI?%( -z#3G$luHY&r`|KEpIyMRNZd384++{uj-R-Fl6n?TF(8NzBakfNpT9(`scy@bU+XJ8S -zwwjM$?J@86x{qzBz9Mnh-C0-L<5-}Xz`8nAH4^QvoS(W3DgA3(I-O<@s~!;`v_bY^ -zp^^9O#iwwYtG?9QujMEF*4v0PBl5kt!kzT{t1mnjg=`xcw;iwh^>4~uZ4*EYlBIck -zkm=G=o-?smlP0zolYs|^NgxRW90r39i6WCl7_Rap&|YJyx;mQ>d}i!*9LYauK!DcKLaa-)vW-DzygF^8=DifJqSU6l? -z=6$>ae?v|2uJ4{vzh -z7#uQ$9(0C_^9KIx`%M8zcg{!r{f5|>lnJ*JDx~gAI7&uCiCfEJjlVv!>?*jd?47Jt -zQX}?v0N>j7YB!>F%SI?sVE>oPtr*cipcG3(+Mlq+gEgM5tNbrB8)~U&b8|gb6<`rj -zAn=ll9AMhtBdzXvpZLD5zNB{&eUs&KL*r<@E2LImkE53n6DhkDhQT+HdLEHBvM#75 -z%@wd0*3S5Df1IQ%{-cATu#DGos#MA=jAc_@!E2n;XYoL&%=2BmZl_mIL~Ct+*R3+V -zberVMd~0DupTqZ!YwND+p~+qQ(;A$2TEt$cE&w1R3)MF%OV*%0!VT=|tY -zGOQS&fBXQYH@+-N6dm_-i#As3Afm{QjFE6F+cJ=%jk@ -z%a}v>W07yx8;S+`Yl*WW{waf- -zQzzT$`Ni58zmq&_=s;RW-ljE{#47mlE-cStsk;{B1WR>wKy(eAP?KGqCaDxqO1Ilq -zHS^vRnVZ~&#Fv8cR98j+U4hG1v6&1~g -zfU%76KqzRzO&)%n*x}}%zSi0BjL24PSq8y>+O0J3osOUd -zG#V;KnE&Y9|5Cm4=)axu=l6(jj54xEf>Levu&w2+zY(lp!?I0y)nON75uu#8FQSK6 -zV1*VM^Kv4$@6!>$UZv0J>*fMsXO$xJnGNDxo}+|&BIiHzT5RASha2g-o~+|bG^Hh4 -z4lHq&Y7AgZcmUk%NU;zNIv|<$yho?HOlf*0+m8WrGGCX+xM_wO0RYM9C|L;6;PAme -zFV63G-e0Q)laa8pcVKDMQV3zI8h2_q1)B?*(Y0bN9l_*}fcv!}+zVLb$hfzk{W;H7=EoOkl`m&0K6gS2mG}Uql(r?{gW8ZPu3~kzey3w+5B7Y1_o2a?S}<=u?Kt1DQ5zAgHe7ygFT`Jw -z*^H@&_)*U#f;a^W1o9xvoTrOpKtm;cHD3&_+bl>)Z;OvqDwtmy?<^qA9OG4`wXFCebI%^_=-1!(8R -zEb?1RtK*!*BiIz37Ez*G)t<1XkzX^*!2-YixiS+2)xg#<6x2;a!$RgvF;XUyw%i0Q2#t -zYhW+&qh$EHtpwh~IXXZa>29 -zYBp`q1N-G;FC#Y6A>GxS?R#I9pBh|p3-^s*#{(f?Aj)KCa-^0!IRpp1Nq_+LhGED^ -zs;A@X0^n-N=ZpNF+smzOur)KL7~xHnm|Crcx$iN>D_&mx?|L7uC;I9*&d5)p-TQIh -zK%1Axnwx=l>A4w@4SW8xHBL&<#_}q4mpJ#iY*7x`()V#vDAWXOM`#GbTct$I1^$jd -zvSqWab93_Xx&rljy)aZ$eqXYyUm2e1K-%^aFqlqZWXVzeoDQx%5N8Z?JpWUy>%I}V -z(@vn<^N2X=hxnm>*`g6zb$p@!L5ycvIJbFpGgT|oPe39+*`6^eyh1a*c{KU(ia(j~ -zlHF6y4#y((&w+$#zsr>aaFqRK8IwaxXdRP71{Xnd>F>f!oY_+1CE9?YAfYGDrqj36 -z>zaPpG1!FzkREN;%z8!x$AXDDnQl>9$43EdD^7EKdXu;Sc7J|6z&n)J88y(4vV=f^ -zPK4uZ=NwDw0t;!h#cmRjF2Ma`;{)}>d!c$6e1!KFX73%dhi(DsucQHPEFe-aXK)%7 -z^U@Wl#p(_JXjV<}^GDGpom -z$CEw>JKr1>v$y7lK965cXgV};Oxj8Bc3huNOAEWWQ{IZzn={gFlx^{%)jGX+cb+J`cagS1N+U{^X|!j_eL=9UU_WG>@KV) -z4@Uhu^J{w@}wYx(?74zO3mU4q+5^LI#UUx -zTeG%dKJU{VRPNYRlBguMfp|MIgK+QsuMdBxsGNO0GNPX%^fAHAd5ott-BI!smD|Ky -zb2L$+q -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 -zb?S~>k#E{#eJ>*d*MzzvD+s}UtD$ -z&}*NGMTkt=ac(IIvi|xdDoP^=QG=dX=8*@YxQme6a{{7Hf>U`=Qk7FL>JMAQdvlO*f%3F -zIi-siTE!E4P+33T3lm9kH+_8+_YYE3S)B?jNs7^)cm9DQT28t6)Jq$ojWwd(sma3(e}EYm-_3wrIWp6f?QOj3!p6$KudxqeKH=8Kqf@awPBT -zvLwRI-kmtw*&Whpm}A-)U@wpkonWw|^q{uOGmq2D84k5+39R*i__HYh~(DkNP}Dx -zSEqkHIXW@4qh2ADz=QFZws%w`?|#SH6M+Sg^t@<*#X>lS$ERi87Hrq$^M+sR_9JTu -zP6K)DB<0aLvlQyr+t!Cqg}pGWL(q>F@zO!zrdY4TSF -z!L$GR`LJp+@~V0ZD=o2y3@cA3%3{hAr6(88ez7>)auNUZy&)x4X@61sP*~rwdEJ|a -z(;NeW-HnC7Xj_*3p_q#N%9Dk1FE|&`$J1c}sU`teb}s2To0g3(33*+TH!yOJ$Sj=n -zKZBJDJF-?GT}i9_ovGD+tLYu`c9emdvWBvLU_vg1t5mY}L`@!EKF?WSm$u8=#iHh4 -z^G+lGth<_IFPX7x=Y=$uGG^|7(il;5(zT3LsRQ_xx(i*Z&?D96RTVCa|M6tEzB;6E -zvnWmN7g_ynlg0wB9~MCwG+T_nVW$4?c~jJmu2hZ(JaJw95!FwfZ{XOROAO9nIi(N% -zqP0&e?JE24Ep5sZOs1%qB8O{Q#szUg0w$UAz!QyBA{98}y*sMj{9B>vWrNX1@gEM0+k@w;&Gp)fgcHWk1t->Zxqz|i9VN{ -z$eRx1gNKT?Btv}0*F8^8GDU2ak0E~Fx@5ckY!1}*KYUKsWwc1tT9hDN2JXMYAk?XF -z2}dyt_Gi7vCeCy5i=c{UXZbQxlPqgSXOJWJh-Sy$T^6WjTw$m=ZMmU{nZ59NXTiI6 -zHxino;m&!ob)ADvI)}#j^VQ017WZUV#Aeum_?kbG$hFOdrOPe(Ua3Q8R@rtv7mIKx -zX(*7jRO;$?tk>fIVd}ku;c&mO@6}l~vASR*Wf38IuTi3|&gvn0@14aGooGRb)w}4O -zMfBb~t3Ubh`+4kgkpmiSNV_i~#K^_LC1AZuZcF}$7<_{`An -zRNwaT5zaRv9>v%o2E@DV0P$+YZCJ-NcK+@)$}^~E9xQ>R0AAy^M;!85ij0+&s4JkL -zbrk%W0XT&Z*B}1V|7_lJ4}C5JVO;#b>KD<%M|@FqsRAc)sWo@ob!AN+6wOPyH8~n{ -zYMcH+j=2Kgv59)CC6UBL{>bs2SS@TI2bNf=iSmy})`$B2%UvtOhV2`7lxKpWy?EZ1 -zK_B>!U^;lOPo}={?|=Jgfm4S%FMvBTuDoA(SY$r4${wOO#EX-x?ZU1tMHs@1fAo5} -zs4yzyjwBoRFSoJsR@_g?JwsY;Qj9kdehcY_;mMc24+YZ_rN+(b{_rZn58%a(FD+o^J>k;+BYMLfo -z!BSgClbv~I3n+f^pI^Ap#@w(#ykjgs+QwDpL6>|S63TjA5?IaMw+w6dMFZ!HCWEJN -zMZLhO%w^vWe=ClIX$rF7mn^S$2rA}%UeEn>rbrFE_nKX4PSN6Dg|AM3G5u5B+~AW{ -ziSFPL`CMdF!~zm(66P5knd8ak1Be4iT$L==VVaSz^UZA6;M9}Z#z|Bx|#6V(2lI?l+Eryh0x2p~GYg-Bs`u&UNuqoClvw2OTIL5(`7)=Qn -zi`&q6RZj -z866TIa)brihD%ZV?)+_)-ja8n;uV*`#{k;bm*ODgn8Q1=f`AMTCwOJ^&70AG -zcZ}BTwF?h4*JeE)`r~b`SVwOeMn8Oci(TlGy!G{ -z><7O-E9zar&Sl56Q5gwGkDhTa6cJKRHhJlqOrTZ3J;!b-eWG>|=vUsbzW#5MMkQNH -zc!j!quvCyDe2n=YV=GyjY_mp?lsE*tH8%hB;N1Ypl=%o1Suh=F8-u&wj)>}*s@zbHi&2`dg?g)YNPNia^PweS0~Zn9n@9x|wHqY^ -zF2Th93NtYy13_suaZcafqYR=E4f!@*pV#9ofJ4su_@bW -zx?rVD4M$>Kh`q)kVEcPsSKR<+NEI#=-;hTXXQkN`IqV}uE`a4laQZp_a$5@__3rGS -z6p}ZKzR&q4ON%;tT=^U?^u3Enq0_$UW-6Pi7isp7W}k!=zj_X74^mOgG)H6AKmCC% -zrFu3xS7si-Q<|;l5_?4z#moxO3bN!b6n?_fl0GL0)yoZK2`GC^Ot4K3%rkqwBm^v?zmGM_ -zFi#?DC9Tw{M&Dr*i%YnAt=OEmZ%n)%yI{-IRn^skO#2b`Fvsu34}D85_@H1F{k9Kc -zN^du*CZ#l2y+On9I=Xv}Y60#>g?@@xiMvy-hPg?O4UP -z=1W=oz4k@#Ymc^*6>E-@=?ZskDi$0_xiUv_e$A^;{XvFzVPK5IqUaW -zVi*SN-;<<3JDzGRe8nj`bDEM)7F^0WgAan;S`fFG%^B%HXZ~t)wZAz*Tu4^m -z-Wtlj5L!^Pz%{$(_STZoh098}{YXJbztUtcme}qgdqvlZWpT*Hx4`gA9xQV7FUb&} -zaj$wq-$?3eSBd_~#vpfv>1O7EHHWdp0iBim;=8zlFupR1nir?6I43hsWB+@;bi}RZ -z*m|IL0Gj&){-lLUg|F%CDbq(2)z2rnie}@&Xes0CilmqaFU -zdEo%Wo24F!^;WBZpz-PcVH+lYnZU^v44}s5r|_;CxG|CQ8N-^;o$OnpNYU@LA5wA@Buvdc)gelap7G_q*B=WK7$Od{mx!#PN0fvaLuhA5 -z=LoidGyX+3D&49nzFJtM``q#b}%_SCgO -zADG?puL#8_FTs_b_n8!g@0R?$=}n-4{EF9DtN5)rBNp|Z+!Dy!f8{2*VT>;=^R;E2 -zeWxdBUmh9UhYzU*Hb2LyrCcmZj_I%@L~X(YWeOrA -z)mKLVh~AUy2w;23mk8M}pl*}Z1j$6u#D$v4GnvY7Kh@u|gV!RAUuJ?ia2ZI-LIH^0 -zMi&V%%iJ~va0eG3oS!}BmdAOwCL)DYZ(z1O@uRuHseVw3m&yE{-USR8YLB&01qH?- -zSMj0We-Ze%MBI4dis2rHw2~GsDe+5|BRs@ib?DtmXm{B?_N?bW_pvWH?cld*hOd7WwArY;3eRr}?qUn#z})frp3wyB -z$K^_lB`UC%v`yJ>so&lU0 -z>GiKGq5m+eCC8)_a#>>YM_b~B6zX6Qo^lF8gQr5ayJMKOPlk_OdpG4fyQbjTlq8t9QBf)+gDNNXrafHE_PW03 -znGhZw22X|tV{f|5KZH)B#DI5Y24T@vCEhka4rAz9Ob@;G*(Of7K7c-xpa~HLRtlkA -z!sC9ldtb|y@XUT}8{NmzEb4t-^da6wwBz1bny(=`u(EItch$oThV-66zm9Z_i1yJ$ -zU;y7vEn|SOA;T9x-L6BrUT<;Uo-o@|?zgG@dgb0s3wl?_%CCN-gARnRjEiKmLak~J -z2oY6j;6FiK0U{OXovgL?Ww)74sMuqXx -z?G{riiYo7H3+ov)^#2KLkIcV}sugniEM@S -z)iwNLuL@ -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 -z+`}yh3jSeuV`8qnTB4s8T* -z%f*A#Q#05pN(IWJ$|(YI1va`8AOH2aUg~P;2=7rdyQ%ENx -z9{&GQmff4OHsGC-95DCkR(d@K#bQN*p<<;_o}4r}=@Q|Io1x>L!qc3)`)4KE%H!^p -zy2#Uuc_9g;vfh9xictPSGyGHF5?o$iS{Wj -zd&by3QQAv4EaEb{V3$3Ie!(1$kFk8-K_g}q+2a;dLk>A>Up_;A)1#<>yv!!c2+Z(}<$k_H0o)kI}-Wf&SmqDP2W -z@IY6aX$&AtJ0v<8Hk#cW)QNFDhgnLWNHtB*F1I=m&h%yDHHuPVdv7BK-j%1UzZ}bF -zkKvci`S*#Ry(QwY2YiW;$BI&@dXGZK^Gqh`SMVy18`n?#+8($?3B!M4p5SIhyK%)1 -z;36bQIO)Q>G@tmcKOvn|cv2DY%FfFMlK_jo}j`th;eVAMVI{(;UWT -zwfue{2N1Hb@5T!opg~aFd99J$L@Sjoo7241*N7@N|mJ?@~kb0 -zil*i(OUr?iC&UmK2l??c1g{@X>;>!LWIL(wh)Y=A{8FX>CUb?4*&GU~81hoi8!-as -zz)Qn{*n4VrTd~1M`9>EQb;}3YVD@*`ns_NCIEV%?-rRK%Klz+wq6AnVW_g4SBxNJr -zfOSaJO1mKW7nVnLLv2o;-hwZu!y^gQ#W)0rkb6}GTUt5mf7o&c{l)~{%}L)PPaXSV -z2gWzAd{fkkVpEF7J@cv~<%m+Pl}YEPTUo+AUs~$?1hnFMQT-xh7Wu#pi54xm{aJF< -zD=J>PjfZbq54BqIpZ@F#$-0Nm=NFD4^TmScRojnH|?v1uw_8L&C%4Coxl -zPuR+!N8 -zm5zL+sJ6Z`-D;gjmtZ#hh;>6yZN2Q8uuy}#K$1~sNTuTeF;2`_(kpJUq>A`JB}z-B -zNoCLO!A{SJ4Gx%F!msXq6GO^iyEf43f?rb2IC|Z<!F{cC;#w -zlN?G6e{?fL!0b{E$m_P0eAlXj2mF7DZxI1VcKw16#RqX`L{FePfew?C(tgjKfa`wU -zFY5pzlwPk+y-Y~4F+B%>x~!nygo1e$e9;+{}}Urofnh))4Hs?#nWEAIUX{DHC_ -zY@!*s9tO!}Z3!&daX81}sI^$D`k!BDXwyq5*iKqDtfq<@muWF)$be(gCa2Utw}#dI -zsqN~zuD!z4Cmbca3$`V}{Ry%^B~z&B0rb&jUr3<3rX$2;Fh)CAuB#N}V@Q|!_)7Mv -zI%rK+jN0-`VUCeHEo?$ro8h`S%tj5qy4Kk5ULxp!VPT$kDvSP^P#lQ?G~8ez1#Skq -zgAS2jLV@Ok8+Aa3@kzKlh7$`{&x88h7S1LA?E?A2s=una+`J*ha!oYXRt;A1kzquL -zGR%QSSut`1D78KYA7jpJO^(N$W$WqP??iK%R2_aCmihp?3d;I++eOiQl4!%uWxMqm -zZH}fuJ@#McXhQ`!(&?C#9(1)yfsPX)Sh=d0d|&h{Qx}E^Wf&!ik?xV#Mo)z6mg174R%pgi(3-9la$eYTgB%XZGHs-Jinf}py9l5z} -z!wjrzjANRI;~2ozdz2{X@c1Iy27vIki)E?a^LZyj3;KNOSR?ovB7!;6!5r?dBL$?P -zDPtn4kH56K#%L$KuV3C$G6q_Iy}roaY1BvJapJ5*(tmM#^Y`9}K%`0Kzw+6bLZ2g{ -zG6%q^qYA759C{LZ#E^Hp}u|O*L2qO=T)ntKBxwKWj*rx%k*dYKq*Z^;c -z)*Wl<9K_2}Gf;$n@72?XYT5D+`<~O!W1icLD@>I?PgkuNf>#0xu{fj`<*u(0QomX) -zv!GTnma#~ufFLqlRq?T!tXJDkWk@^XYJ8{ZWs4=P+@hwE$I%?`_|%CNSizGM!q -z%8FCU{KvuC)fqXc!f1%y{?&R09vUm+Kj}PO!*ShAv_pHq8CC!qsrB|?4Y?gV{gSe^fK3+Y~ -zv#-@CW&vVu6XS!^yCU8x@Ea&*rf=gTW{o0@rq4O)A4PcjvITwsl~{ftG*z$Va;e7x -zH7>}uhAUH%m(mj-`^2t?y0=mK&mi||dJ#OuHF-!Z#d3vAjmFTjs;1{RoTu5=F;aQf -z@3QD~L!Ezpk|X$FI22jfoE!R{oBNpILH1z{Zf6_7j2Xrcu3>SIMLR!(ce~5~v!)1H -zpb!Gqr2F~uU&Qk&wJ`PZ|8_o%j=o|CzYy2|ICnz%P#^QR+8yMvH1U=AmVPcYH`Khx -zF|tr4H#EU;N|swD?s>uQsv`6dtypBzf`U92UGiuD4Ph;?eN1$o7@+s~U@9S(I4d-0 -zy)xdjajONd?N9Qe>4FND<*FjG1R9%ZQ)*qeSW^9A -zQq;cZel;&89_H_`n~ -z_(xaWZSVyoZQ3IXlq^sQxd4ebkwABCr)IP9I*J49d);3)yJ=wol^+`-1Fq>CV{l+m -z66iO16EETzuHspW8eX2Jh^d+xh?)pG8Hd50RPz!o3Bt`7n6hv!oGd+{U;kp2ElMLp -zMuL&2+U5^8atW~!3i4naZ)sjrvaQys2T6|K#dJ-TY(Y90s?v*4IcB==N$uWCwbS8U -zztdmGlyQ`y&j(9+QJ$b5Wna=phTwe?L0w!tKPB+@pwxyxLBQ}XBDd7ZJ5^ZmPbLj{ -z+L;=h3r`~ZOI+m!TpNA#04e}wE8nX4AnRqI8%8JS%WS*38p%V+nj7iBgN2EhW1h1A -z$6?guH&W=feteMu%r9Pi*MLVHFNToO -zO9l6O6~#}ShsD!#WwFilH#}T17s@Dd_&+?zJMDAAP$&<`#ymAYH^_1FSJR0^VD5Kn -zY`T&^{X8i;m`@UZBEgbCW>9^d61ynf4K-I!IoG}$Z(B-r2l<~pj(%rQDg0sFjxw8* -zIg3RasX-r$4ra+RfPR0@$sF4Rm-_Ba^A|3qFOo00{#BWy2`kge=cJA$ -zLZWw~RMy6#+SYAm3;(IBBU9)Aa{LI-Yth1pr;ar)Uao#cT!}Gz -z{+MnD#Vw?jLNKnvnX{-CWzs!IaQyX<-Ut7b1`QrG%MZq6k&Z~vcrBXEh4;oDhhRWCHqoZ^}j$POxa6jrZclHdja?&+$P%x*Q+^**p)@DPeB -zx3Ds|P0a|QOZ&sPf2zTZ4OHTX673|OcYrsRPIBC%#aHRO5v8cn9H -z5NVZe#cK)$XGFB(Ei@LNSj{?dm?+#f;Z+Z#!~5Uxwy6G?j4Ua~Gntn#40prqfLTBI -z=U*!G#fd?`@2_$A$Edxw4W9%_n!-X%HCertYeMNO?wxU67x-0#)4nKxndbEr=wDBW -zuuB(&x04DG>2WkRopp1s(wHRU0Dp!LCpV~sLliUf8OpON{(>SM!Pm#vDD|oAamsMV -zkX4I0Dqx#z4$;-*JsxEE>slVc$p#C&K*#_)#6u<4>0|jrQ7HJ -z0wgR6?tk|~6}%Q@nOJ??acpzY8%r5XRDCbXg}4wfuOI)83EI}tl@=%|`lUMuBT_Y^ -z>e%oTPVa_~AseyNGAAH)KFxy~1chM4j~7?KJh`)WR98`Wl{=x3i))eO-MX((7WI_+ -zsS$DN%a%N?$PUWqeQKJ&f~WC`RzrDujY2G%Sdaxfd|M9l_Tza~UPPCYDJ$R%@7WKs -z9)v4ouLmt{0?JIo&#iCY>z}6`cyAkOP~)(>wY|x!SW=F$?7B>^c_-~|pkY;$w(&%3 -zUeHBaG_I0U1*#skGgH(mxfVZrcQwm(SCd*UQXqaJi5x7-5bC%48II8*>rpF`5#~PM -z4FI+PQ%aTy;&n2DHsKn{v;VB~R|%I%_kN$S)u>Do#92SGA1iAm?|)4jJgEB$jNX)A -ze}kS=VA>Gv@1=?f=?qgP#wmtg;RS@vGRhRVzW**l>&qN&S(P`)sotnGFlsaAreY6= -z=}x+ph^l*GaPjVTz-MmdQk=3z1@i=HS!x$9Ua-_6&R(!6#pQ-3NcD^6XoV+qA-(>_ -zf_%28EXJ-g9Ozgsyv4}_d{G4bdR}XV!JN8SM+$!Jc4Y>aQRnht6kmS;KwNJ2bS)#S -zK4ghD<(h|ZWcl^EN*=j|xVbo-j=EUy$9~?&ubk@h<5ZmmG!pAH{T3hausS4x*16M0 -z`xC3v(wEh~%eJgIhlKP6=u#j9sa@6#^d|=BI2)Y^WO&A}UUH$YJL%S(9M-i2f0E&I -zYJNoux|3L3mNJbT;mYO|CTXw~jPbQ)lg0p!@NsXB{z|o&DoVoeR?VP;S7JEgJp$g{ -zzGB9Yzr4l6s?^SH2)u&MV|r+(H?WP2!972C49jrm1*L?25zQ3n`}JY}CQPaCv>>CXG7et~m&SWy4S87p^nQqm4|D$ZBC($SslBCp*W=%i;$i0FCbho?&K&bFl -zVmwmZ04NMO@L4kHXZ{1_w{LS+#FgFmqLE}KIKSd1@A0b7hNHNYrz-aWffS5ze -zRT(T_xz5tBnKv}iio@I54wyUu%vm}{zrDrrI6JW(qm)~>1!~w?^qT5crui7l+HE&C -zkk|sJ>}IzCzS1;*n;H-mEYWt`0XiG<8g{h#?A8PI-ft8h_)pnPLQ0!*v?hE6i!IrD -z@M -zNwCuFcqSf%zRH@AJo}e7l-gH$arjzf#f~<4ct@ToYDAjXk3nE%<|Bp#>GIRnGmVk4S4@(avXLnZhP#XuOUKgMjW#yoFaJMfvU0v-`X`h`7nS->2yrk -zj*wQ8n>VL~XbulY-sD(WY>b&GuDM}~{A(OH -zS*$)S3lv8Jvuprft5PRn-MeD?MB@L3`*A|i*oe}gpI|24y*kXMJZylzV$4s5W-J#_ -ze?Y(A->Y#~mD&bFhwk6d?_;C>U*pu{iwBd{8G*d->eyNeIA>p@!Y2$OH%30%5`JEw -z#XI9=gwRL5IuMk7}hq!V%V#Jp$12rFwjH7;A3J=_z3he_DG -zqxBrLxJ-VsIEzw*BR(o33PfQh>?Z3LX|{G-{g! -zA54IF<%`h_^Lb8!7mMk@_S(7T+cyOjb^@{z24(icA@~kcRJU=E=B|H?)}tttT~*ih -zG<+bIi+{Jw!$%@29E0&=eXrPBr=Mx$Kdr?H`5NtHM)p=hn#&IC8)0+W0m@ILVliPn -zw>Q^&ZC7>tF8gxBD$g;>wdQ&MsQ5ewmf`4c%Qf+oDYPJkp*ZaqoHX{b)||6 -zN^PN^^NIZPn_i>V)r8YkgtrA8@5`Pc -zh29q*@+j-Ogk`6Qx6s0}Ga8(z(HN+jpgBMseLzIt+HN$<%VI8N&w&eJo44(|wAu%h -z3T>dY!3!~SL(_avVO>ogQsXv3Do8(Q46uXYh@GX(1KZ{1Wmhg>QJwluvSSwq4;h;l -z-%P4l-<`}Kx%we%*EKzHDDci*%R+>_Z07KUWItW@{;%HO>4}*8_NHLZlrR!2M!1}oFg!V}H#uH$Pm)&^fH;)( -z;5@ZK!^b%x(TD$Y%)*PM??JuqJw}89E;UYSH#>9fS -zn(p=tb&#NEL5kz5XIH&VfS-yL)t@uT_>!=fZK>!=Thp|77kxVW4Jt=0M(CQf_Re%5#te;y5fgFZYnJpowTY}tCsqo7MHRDQ&=L<} -z-m{MXzSqk|(o_KzEwKIHCa5p{ctHCzfz_q+c=zD7k3wJBDpPuWYJcac3$&+F#)Nw3 -zP2Rb}io@gdX|4_5fM_R=2@y=={{qaXPc!;?CWm6SZQu2rKBGwY`;y<)jH#D$u4q1T -zkO=o>?Xk!&D3KT;C(DXBoW5~J-+i0n61|j!KHA+JBVTM$M_>hY$jRczln{f2{;FdF -z8{~=uWjwkc3iNkfru8OwV{>#8Gf9Kim~s)0A4zK3jDxxsB#;{P6=bF^*P&8($BB~Q -z0$aT^YzY08xIV-n#!mdHqaU_0sK`y7pEgt2mh1k+(8q^cALjTto=fBX9#%u=;>cK9 -zTmMdtCh+qYN#uwz2?Sd(XQKwi9pnhM)LpYvk{X$b82n5WMm)tbaRM;MZWP3lqe*|u -zAicFz4v&+f2_=(lFAr*PG64kYbt>&PxgGi#Dr -zaNhDw-OO&k*6wQhGes?@;G(hV{7dlCFLu68ENX)Ab}cz$;tsF>121yO(j -z3yHaTcBj~g`+Wq>!S`sDn)Y{pCX8frbSHK{I -z)nxOs(=K4QkqeX`egx$!@V^RqH<{f$zN#6=A)```&4B5rIgmbP`R!(W7zmsxN_~kO -z=NA|C=RilvJDTUu?AfF^?oS+R1!P?0%`#897~|9Dm|r-(yVVMp(x-1H_Q_ZQAS^PJ -zL%O(xDBpy3xubq2DPaU+IVG5JDe5eD=qKVXt^~z_!~H##06K<{Xw3YZ3;+Gk-v -zc|{I9kOj|lIU`LVWckGn_OCeoewP`&$q;VB12C~cSTv~p<^I`=C8Op4enAy>b|!8! -zC8-rG^(0Ft>*O3;=m7n`v&y9pscjx>B>EH7_5SZ@0QKImAaH&+?e}C}ZNZC}#%T$C -z3`d#KNBh25J_t{U=_c}5zWMb&2S6NfB_q^IS4>T0s~!;Y95`0?#>O34BgyZt>BN>t -zb)A}2W6;2K6V1pG})whVt687aZfhYa#doo<=4Hn^ni7#e}*tWC5SMgHyc4C+# -zg$XjPY<3KN%VnZ*EbEp;hzjCM7O8deXAr-y`u%_N5?JzhL#5&`<<``yol$sjx(|fWo0X#2={Ir@)k{Ne`y29ic8eTVbisgG-Vv; -z4~w(Xq_TWbx6Q$Ym`hvMpj>;#w4_t+&@NM9gyec+e2fJvDT0%lr3}djW)A&{bA{DT -zQl{*K58W*alQc~q$vG)ks9NBJh!6@w@0id6TUHUUPsoD{?=?&>?$Z-sy+S*sj3knM -zwK|)u73qX=(H6h(Mvi%B)jlh|EL|Z1&`pz>OT+U5hp8+ZmQkxjYM3*?)JS*=#t8>o -zwjC1j>C(*|W{)G0dQ70^E9$q|rvvy!BE#(F-jQ;^RQvsjy_vt#RU`}W!?gr6`v9rW -z{F4z#PL9T5a?tk5Ygd)*_#~mRSrd_GYh%PmGq1eT*N< -zm_!6Puk>Mgc>hTlD@?BY8A5G-RIECbv4-2hYdEF%mc9c1!v2XX-R`#sY7g))G}B+w -zAGgOhi2KDi-4YnBrcS{}jyhXCv?Ffp$AaP)g!iJSADsfPqyrKayz!JC{SWgOE(Fa+ -zE#{~jlqoY*oVP?(IZoQ#5A#ch+Yo+u^K^spV{MtHVvg#OCm7+jBMbcws5%Y5yoQsS -zcWU|oNA1%w+Im$Z=*O~x=T8g-^i=s(t~fE46tR7rnqtqN3B54+sm^e89T*SZaf!P% -zbS+Xn4jbn4jt}1C^`j72`d*gK7A8gP_M%-)vWEp=N|Be{R%Gq|=Vx;oQ&CVVpb|F= -zuFxjdWmOu2*}6p8eg^nczXj%6wEs*0!Q)?O|*louftR2t-n6(~buDMmKWFM-U( -z1X=WPuR*=oU9cxA6NK!O<))L>6%U&IH#eJb*s*A!_>@8C2r26K%p*ZkLH_{0 -ztX_F3E|2b8Et8PTjK*iwSD4h=QW*F{>YC(kIU}Dn`Af>vZ;eDK1prV+^WPtS`OzL)2IY3 -z1IvacO+rQq5e2`RvYm!gm_b5(K5xRL0)a~*Q0*M>hH01&TP0j83X$bz<4 -z9DZzKon>iEjm)P?=7Y=J36b`V&kwByD`v8}keqy*I0z=Xk=g=M#KXm_BZzCrs7+zv -zPnD=RcnLAcqd6o@Bc?DunEspp=Zk-t!Im~&d@%8sb8e&bP-?sk5b(b+?X84q^N7%Y -zNkhgH%hov`+6$eEB0#x2be5E-RIC(=334^&mj9Te0aoR&#LvFWc8bpe>$g}fNM5g_ -z65}uT3uzK{UF(84VY*qEWR&37$x@|sa1(AY=d9~9GCvaL1MI%(-0%Jl;X*4GMXWo8 -zeN)zF&gR7OfB4fe!aNuZZP@xOJo7LA?OxlWtx=otx!O{q^q^NQVOc~!BJD=q%$l!# -z=CJfH%Th@!4{R{WNG=JB8DP|3(Lv? -z!%zkvqEk1XO6jW9fo`wL@3BH%)xIy@(!PGR@BUG6C9sA)Tutgw^u&YiR@PqA?V$A- -zp~U!reJX|?TPS{~MmO`x=Zl@`9=n{BBg75ELKHB2{wId3;0>-)Lk2&yhJh_?6Duo$&hQt;aP{ -z_{q+)=do}|!G`OU$RU?~{<3+Jy_vP>uF7!OU>bDy9$CF10Hix1Z -z#H6as&k(Zx7b})mwP<#SG;Yri{0aL+ijaDQpP)a=f%A3YrdCygN;D$Q|0JVaK!cLV51-JubOT>k+ -z;zKA*u;~rl*7Y*+_&sif!3zCrB@&;CWcTT#1m?-CUapxGoVKP5T5t%K+Lsd8NPnoE -z+^5wFXMRmWk2qsKr!z8gZwXV$Vi`q5KN7?QecX2bdUetZnPo3ytk0^VJjj>NYhej2A7+(G0H -z)SWitJs(JWjJ=TFPuMu2winy&NHIJuS|8ur=ZXn4MTPO!MQ>tB)`K&nK|Rg76a4qHLuPkCj+2N2GQ*qdPW*$oPqp|=-J -zu8Iat8ydM-(`7$l{wqanj)FR>@G~UZICW&m^&cFD@Egy}v;0wPVf3H0cK}0Yt6V2v -z`2R#q#w$tC4t``oOcL+ZWA*+nmmIxt`8Y^yDHuOC(a?!#owgX=bWOMTwClt&?GHa} -zqTAOYO!fGeWit!*zLvmjS|sZ=vpy -zitR#+0K%C%n+j&f`$p9^AV?S_2_mf=y$D2>L*Ei_C44K#T2KJT$;0@VunQ_P2wuBj -z)m@c2>B+?5XPe>l9`fZUDcSV$g~V}KD1zdQqf;^xf2#BQHggQV)cGTw#=wHc_}Liz -z4j@Vm|C_Dkb6C@IM77za;)?Ro^2%ZD3pEZw;O>9Sszy)>2sVz?9uw{c;V&55hrvY -zNGpBl_285=AA1&%Kim){qF6|lFS7IEuC)7T{+IpqO=M<3s5|oD(6EWS+y5Sqwescc -z2$SPLlC<{mzE};>smKUXaxmNBm>bPPBH*B}Y4CA7YP)F6<;@Atslp8KEV&BLQ|iER -zQk6WXZH94{pW%Jxr<+uh=nKpCoRFh^!0sK_QMW5G`K(6Hd$6@`+&^UAa^~PLPH-!P -zl#^jYo@q+tkS(>5lKncD+avVUK+mW%4|-5IKq~)X($$aVus^z`@7hncrXQlR4vE;tV3%3glwFlO4BRyx&;6 -zk;dpkUf+fC?wVmy#?Lp~jj`&4P#~9>cEY>p`pbv&JLw`_Ta4X>rdMj1s*(M(4(oUF -zyZ1!U^!k_qA;s(wD{c|{;Em7pY_p{1702n_bIyVc<{>3UO7r9UiGnD*fKW{xM{y(P -z>L0|b5R}@Ygoam%V$v^lGfTym$n;=`mCHMX=Ix;$Mi1OrKG<2y)EtEKxni!{(0D8O -z#>^BYKMv20SYrok$f>AM%p<<`(`TB++E}MPmP! -zt2gpbF@TKGuj@9d!itYS9^T_1INO9sC8_xE`D$#ip!;~8se!`Do5ZlHW$!5b>@)ppg{}D?S -z4Ih2E0$}NF9!T9bjq7%nWhCl|H>xsX>O>Sr6hLAc0OZiaVap%Z-!lX(lxrfKpk4*t -z%g*eDu^L(A|EhpH=5YcT?@4`I#3Z(Whbol&)L><3W;*RWJqA^F)7HYZ?&n*g@MjSZ -zhxa7x&APKw9+TwKDKM|c*dXzJL5>tC7a6MNIz<9k!C8VSSJL~p&u@6g#-3>u6ZQ8h -zB2S3R5fy2y{^-zh;RyWL{&kiAL>pq7SC;$19U?$fN?xRM!DWhb>2GqslV_!4fshe3 -z&ikV@>%!$nQ3y6KmF$NH7qt>akl_AP(k3eE=sdSZcWD#tC2q=WfQ4PJ`akRf^(Lf1y1%>E66XHU2$khU?&;`&@A(xcBK3`4JGL0*=F -zpcrss)`y@lj|zd4ANyWCUo;lf6F(RK@yv&9kbsA#5IDIAO=-^Y1=P&430kgtzzAH> -zmrDDhiuv2L&yH)?Bk-s3wiJ>->#RU2&VWBX`7^&_;g*ATh1_F`hM^RXEYBTW@7=>l -z`3L)YE^?{bmfZ5?nXSP+iFlK2z4$mn7z~Pxd7-7tlq>&VayE(pn@LXX4x32iq^?Bm -zM>87I@T;39)&}Z{rO&AacNBTSYXRjH0OQ4j#`OsN{pdF;Sh3PSD%Vx`KZcR>q(0>o -zdqA}td-)u!eBfOgNMWj?>6VVC%^!fNWC#?f9)0*QhGwj}?hVcdgW!bit$dyK1MXNPBKk3uL#8Eo9gShO)GvgtD{M9 -z-d!El8{X3;q1~h0CQ+a#>gZ19Qlv&?a2vE>yrnI2QAR}qoSKglAvQk;@Cj!AeoHkg -z-yO_GT(|fLPm)ij!P_dY=59bxHbk;d!05%`LRG|uyIXSZW8{QDcQRKjm+G^!JMz*g -zBaLmV0j%$*eGf_?(K71dlNgZ?gCy2@giH&LaN;x)lu~WiP9GV}&Wl)H4lB-%y#Xu{ -zxgn^5t^mXg_B14aI}~8oE6%pC==F$Ks%{yd4Zmip+2)t*QqTlFAqyZrHreN+3CTMm -zCI%e8zA;Klqek5&4p$@WJtes+(@+@-xi}NjiBLFk4Be|ErX`y%wW%w)*)IuniF}3u -zPknE*z=(Jtv#gtJ3XG>bm4}%0xIs~qo~*ZWf9H!tAy{pT!k026WV~_il7G0QE-+HC -z4*Fnb%+O3C_sidK?36w&$W^sUfl8!Ve}xs#}RTAfJSIz_Xll=GjTHdx)GpD8(i;9IA-F -z^Aw4Mk`<$4Ck&_mU){*{&A>5e!4Tfp60s>WqDg7I^OZFlPdm5e!Q5=z+cQ*zG_EqX -z@(`ifDJz_SB8GESMJ%F9lof;*1Mb?;kp@nTB-blLQI>fPu}0ez?$}PTs?@;%cwlVnm71FBx$MiA_3C&pC1WYDxbltP(aOgx}D=g2j=GR{PwY+Ha*UcHNT#NSN^s&PKswcR5+d<`m1)_XmdoVJy?B4gUHyAY -z+y9?}4Fz?zN1^*1_AVp*T2A}9Sfwg)X$d>bo6{48J@~y`6}G$8TNf`T$sXO<7h2J6 -zAHR<){@|yJTv>Ff+b>_?L@g%;lhP}?uU0C{utCl8B&pZoC_n5+hG4mN(@m40-)W=X}@pJ1^Gw*_!rsTa1 -z4*S5trVq8tG(FXWAs6|y=R|d&kI0>CFCCqA2M(a-q%JGB?!S=UfZIB(-e1MS*yCULS7n@Sc9q5M=*KHu -z#f;IR38VwcoOBENK27j4pyzOm)PCya1G}08^x@<89oC3;9VL0x>V>h_9A^;m{w=9@ -zXDXVb7Y_jwZJCTSA8@Q9?^!4j -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 -zK5*MbdH -zgUClCf`UAsvuiN*z6Pnma0R(VU}$1M77OrnU;a}=EFOG81aqQ85v=E_5kb((_8F0A -zhW76_Aht&}6jqQ>#^(*zQSWV?Lj%;9sYS1D2M*?y((ah0XOt%u6!AWx1^to5lQZ6- -z%M}vO!0K&Z*WZ@6fGnB|Dd={*D2O~5^g4zdav{j69{SdMcX%xI -z*gS1~geZ-%c!p3Dr#(~^D4fYm?;{i}P}$JAjJ#lYrkF79F@Wf?M{Kx$)&jq#2fVQ) -zLQEPMsAK4<2b=7{ugT*PTYcDl-JvI>N0tO5JBdiqB1rVnFgNZMt`qmGhkRR3D2dpd -z(^IAUmgy$wu8Md`si2G4u<39YK3}+r^NgMZ;?q2D_!kpnMV`~BjLa{ -zX7M9Vsi%vfn)rszmv?oTkIqjB -zKX7);3O!eP`_XW=F*%wDctw;ZJ3@BFng}H6Js2QH`PkRWYN}bbdbzk{^8@n`F6bpx -zw%7SyaV1Q}TzL+1$#%+FY1qYyBu@zDD6=tfbQm{_Ku~0x(W -z9|@l_*}pQLl&g+`shB^>=KV9EA(Qi5uHwOnnj(gN%DpR@>;@1#^Xh8-^h-A2TSSR+ -zl$ZOTR@-ahaaat#I!F;iZ~tP~FZrXLfoi~+B5l36yo2h)k&+}c3WS-wn5H9fGbBhL -zE4F@YRLxUel^-2p!UO8o5ErOmrLA-QXJ-9WZ9_YUuh3ZUo*Dtf%Wp60o3oL9C2~Yl -zCj!NVFctIgKRmMBvg|>Wl|rsnr%T?ej7_=}s3_<2?{tR9xN&BV5gQbqi$0AC*0M7h -zQLGE1`&T02y_#KFT>@C~&x!xcm@Kb1u-KGq9AGL%eUft=cnu;{*Gxn8zsh*AJq -z!QM!9%Dyj5pu^oro*%Mx*q)RV(mc(QMSC^=j`{XZCQVS6p$T03X2A1MPPs~N#t~Qb -zVPQ1lP4dasUD@|^8~|XFbqwW6LLVw~PJXOT{kr498%YiOR8|HJOVDNb^P)kUGOG|u -zFZ19okwhWx|B2>kBomK5=ZrIGGT_$Jj*91IG^Q!N%DARH -ztS50onsVmi3k}MP03ps6$+P&@p=*?$EbZZaM8zg-73$)V#6T009fQ&h!KI&-3E}N&a4%U*@mJ!vC@Q -zeei!eauVsA3Ao&d+#9DUwC_r#O^GPpl`cSv1h%lWBsuvuGoMrzGj?Dq{A6uJFedAY -zsMM*hZLGMAF&_Zk{zTB@n2+8*zMvwZ{!3P(XYdSx7y|sC5Uy~e$wvn#{;1+d|K7A4 -zah$0_!j0D-Pa!}@-<9qqCnM0luf-kYGBET6(I2wtVT0s}kXD0@L-%GVz08w9B4v^= -zDlU>{llG2k$LD`n&6p$MxZt1{ME@7eLw_OIE}ql=ZlXA4@U`AZ!!g%_k&%(UE>t8W -zys!NIl}INgHvg-7aT}{5UM60y_775HD)y`yK&htn|I-E|0h?K5AGJ?JETEDmLqW*m -z<%ST!7-xuk$K0&tcHHN#k_65V%<0y@GTH>e&weL+{LdJa))--LRv@X1MpfMjrJh=jkx2D -zB<{Xv&PaU8ei(v+I)P=J4Q58#G`8cqmfq -z8^O09MZ4@M*-Fo>nfla8iv`rJdB_4t>^A6vQrC)1!0je8ivO(qH@`#2`Kv6h=uU+y -zx{@)Nm>ZDA%b)gy+c0a)qQ~K(pv%X8+ZaR!xi=TKg17cNf@0_(8eZ|@?Z~KX-e%rE -z{uZS~iTjslW5j*mF#=tU!u!^Q9UO0jV2Vh=1b<#k+0G0G^L)q=CxcV!;s1TXuc^^9 -ziGE@SY7DUQy>d|t=4r6K-80MzQ3gKCabXT(I4Uxf!HQ%6n=TZamudv -z$I;?v4X!rs>UI0rP+By+hpW8`3a{);SqdDvtXEmg$QFh3tK23B;G%3<2TTnQ*>HMf~3N8Lvw*7@^_>Bq2vj^IH|N8}d%XJm+lw`lqB%DvQY> -z*8im6bqqaOtq>A#VtHK!8*=&-gOC~P*ffu$#CQv4`K2y(SdbCppGT^yK=7CdmXybg -zf1`4g(CO!9goeVTgAD(}6n0d(0M`3j83aXHw?Va7Ii-t5P}uRMxkRzU7oFc%MZuGe -z8c4Iq!Oj=b%|JcZskAq>_pQpZJhvnPu-Mc{>z$n$2_*N`d+vI%3U!wIQ}Z+0So$}m -zj97ZLyjFiOdhuLLWieT~>rx+rB7~Y^g@NPhP`lQbC2nm~$@v&LQwSboSgNiedPNkZ -zuzwrIvt=UkZv1&a6qdHA1&b<$peS7s^*bsS0MPZtlnk~^q6b3}X6U!U&HxMA$$8Eo -zZr{_rSJVS{sf~4_ewMV*Lqf^+ZSqUJIyN}1pn!!(8VL&Y%WKsI(Qn3OK{WUKjv3|F -z<4gO=3|4M)ZjM^x6vH -zlpG=tndz|K(?`Oi-Yxg6n{#kuy?a`;5o`tJuMljVO@?lXDl%xfY;i>?P@RY(s?uL> -zUyfh~v;Me9qcvFeuna-*>O14X5r4SauYNMvGC|FUJuyCm5)gH0)0B}fP~k^&++u>+ -zHXFX-Q1U6i0YiN;g@!;vz@XxEn!BE)1DXMpO6+nPLSQj$nk)!}MqEJUq4J{rw1p>r -zMxgyzi#^EofNrg^pB<)G>*4ZMQ8`bP@n4&L#S{V@j~X+8Bpn9>bf`A+*0>VGw(*Qf -z3?>>%PuAefE#a{PyPno}L%Nx33c!KO5lat|c*Et^u#7tV|OD_byk9NB*zFoKwdOSieM5@Q_>C -z=-MEXRf#B~LaXE2V_4hBXyN10=-zRyTn6B&D@g`ss6A#%|4>;I{5ouE_#dH)Kw!ok -zkj;Sa5%~MBW0%CJV0xR{(F-Eyim)Ia@9P#%B8=YhCm=^7+8i@su-{{I5wU{r+P6`- -zg%)5|lFnb{3;{Y;whO9Y+viwe?Vo9DRQc2Ws|R^yLU^Eg@EG@a85^nc<-2&0&veUV@fHKk-)cZ_?yEs=he^u2? -zmS-dXw&rfdnpWe{-X#8Yfg_tJj?~c)V)}CyUayFMIIw9I+{nH@t?PV|J -z{VreA?4`svCn*>O!nrE@DS2t9B6)RF;tCn4``wD(ks8%T97e&FG`6m)+Q5tycQ*2X -zhEZLTW)^xw_DyU)x6)~zav0@^v%l-o71N!s{>Wt;I-0Ke{P!D8_0^*9CygM@`g+*# -z?eXh9(;c6a8NQwda!c%h&Pvtnm1N!%8-pR5;R{Ulw?teY~Fk)z6RypiJl!CRs*Ku?wT)TkVTKS&NB%NBK -zpvVUb51%Z2$hxMcOYiQp_s;*9S?%tQ(pGh-Ew$y5jx|7&puq+iKim1ZU8xgnp@=)dEIq>RM?`r6FFF}R@m=568i^5YUi_*cq -zzzsdHLnD(FGg`5D6Zv226BUmVsvA|YJPL!U8vThqw=>(~lU)iX_`0oTUm}-XS2p6e -z9>3u+sjnri)sR6>vCIA4%b_^kdBsJ&klStu+-L95hoEHI3RG?FKZ}Faoi4uR6aYu| -zfeQcWdiRpBqA~zOnTE&JSoksS8|N=8ZVPcsJ^MEqX#+3A2Ja8t3KgiRs!37e2ZUNW -zBbqVd9bL%_*weoMe?XL_ewU8BT$4rg*~m&x8>2s8ziEe_{BA -zE221J6q%R0)MVk8&3~qV;*e<*^g$L5tS41 -z{Sj^(lWqSR77LHf*4(KTr9gR3WwOEUoO)0IS(mrSdGZOWf`diz?k0X>5(zgjbqfWI`yWAX)MNFO -zFMC=7Q1E?{+HzY&-h-kn^3%hyXi -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 -zj+;+{%D2K|-R*lax>ECQmn -zPX)NLXZ;$e=(;pV*DK||KRe^Bbm?P7a?-R%MRMec!`Yr4+rDM`#rxHKY7@OnH2*FLIzxE5QZ6|U;5}!dF*_?Slw>%G0|(ca -zPs3HGMB#_4bF-oa4k$C#nDI$hA8j6CB382wWf`@{4R -zVgp)!hS`@{Iei&^|CnF4e@PK6_W5UQcr`MfvJxIThrL`&ml}NjzlQc1MqD#2&cfLI -z5l9jaqGzE%p_?dT!{&wx_S+mU?1hS`%3?)n-=VnC`0ow0%0fB4Rv8!R($GP0a$qt6!euH1 -zH9(`v%W0TVaydo{d+b39N;QPQZ2@~D&_B4FDjNStW%n8)qp7+7|EcWD!=ZfNzGpFJ -z+>G^>eG3^%cG<#=!q^&16h)JLt0_w=F*6J;_NDA*GLgzsBtWst4N -zdyIbH-|u;!<9LtvdH%Zpy0-H=m(RIe=Pd?mO>PZFC5Xp~abp4`3hDIw?hrQpbpJLE -z#_)H=>0Nio@wqR)c+hp>{kP`6QgD7pqLSGv_bytG7Sv4op0y!n#Dv$jWD3)CcoApk -zqpF^Ym}tJHtMr}@&+l{+pnBh!qbUK@%w_!2L;=A@^Mz7C>c<5fLy$CjrTliiL`J*| -zgm#mnq!p*m730X3Jn%@O7F9!%u?suX(}WYG4*IR&Ia)&HhjlQGF#%f;w9~fg#e6i5 -z2#uhPkxy?3z&N321!>vZxiGL2qtm!A^vrQGJB@1~ySf7nXqP#rvR!==2+d+9!f^^* -zsOV86b4I&@9dz={xZ{QB9U^K1_RAoaT;3Q(~oVhJcHaM+hx -zZA}#Ba!r*V){1ISZ$_` -z69Q0>%?QfUf&lLQzxE3Pohcf}=-8do%Cm2uY{N2=N~^6IvkUk+Uv*65Gt+S?1!ydnt~ImQ5#jpPB7#3-aKvD+&$7)2GCVvoK-1%JYB3O+B|_Fwfn2 -zC!hb;I=L*xp#i=(M$6W3?xuf*($;mSZ2$ERGqUkEcQ?9b8cU357X+}zMWN10!0##i -zkZYNBPoJx)eJIlu$1t)O3rAJ5s*K{V&M<#+k(hu+Cod!*6C*+}iSE{2i8KUljpONr -z*DF>^uUh)tNhK+&*{)CI8gk@8Fu)7Krqf?6nsd}R9-M2e21*T7gC*x)raLF~j`76Q -zwSZSp{I{sM>UyK(waTv=n2=$~q^j=v&(YD_VANEV@ZU*P>NXGFL{rxV*A6^6-Y6fj -z;l_DkE%+CArN6W|3Z8l&wBq<6nEWy>PT^Xl1x;;zco%p^F1zvF>i0yP7se`0ZhF(JX^E7SdO%D=NM#%YkNT -zm{nd{{ysxj_$|0u2yE+}O^`0e4}Tl7VYF46S`tuA^Wy?Enb>K7CcSo9gm&3l#ux^U -zliANbi3F3+r!Nwk0h5EF!hILZMZ3g>fT9O5QGP_HtrTPyS_W%X?0iH&r6c&?!;}Iv -z=FmwRE_Vb%%NBoUolnntbheEy+WIQ`Fs}qyuah6x1*wADshFRyed%CJAP_8hd|FiF -z!uJO?BeJ&J+sa$>ZltG8qao&XeXf(+C}FbxMcOA%1fvIu+D66+@ruMo`S>wT1A7Se -zE+OS&pm57B6ri&3NK$}y;$%+KJdOv5Dv`9^oRb_BN09aIU?uMs-4A?L0u9e|wOI|ESTOB&JPK%HZn`+nIiY2@Rvx -z3oE@ddzOc;m0H$kmtvw4%XSYl|Gn$?MF?nLwm3qb1sqJ=!u?ZO~ -zUxRODvX{?hO*}gI%hv5xPkpJJq&(0nwju=+;zvkc=79Gru;%h+m}Vh -zPdm!!?xV1co@acTwLQXJHaVA0rBW*yn=5=f%JG|;O3I5UKKG&LU74+@kH&%qd^Em`JzV8&pP -zKDZMWthoa5RyseU{9y9vRtzTO4A1a+WL(Z#q#gI*Zs7>!^x5}qq7!l!5;#Zcgae)R -z<42O-{{v7M8ba1@Ik!x}%3sA#ZEsl+CQ-aNNoLIub`-Qd8Od_r26}%{SacT!yTZnz -z#4)cA4TTnf)ELW)oJJe%n$C%x28i1-v}e)&K{^i2q}1g;5ZFh -zAO;>izX^Jj=shw*6Ec8v?8{{KYq5S%ZZGawA>leGy8`FRa%$d;%%0@^Q#7P$lVl3o -zunD*l%$Gl2$uw2dn&@!AFrUgMnxm80trc*~*dsp}qA>75E1x@sEnlk86f8m4-CGnz -z*|q&yI9XNZu(=WldfecN^!|O}S&Ot;#2;Z3L;(s&M;pTHB?V|pDG#dBF|Wt|9e%>V -z0EXMYkjCH0)0F+OGtEKP3<2iLWcF2COTlFJJ5~q93pT=6d*>_~0JI!=B))M|j;yrR -zhqNI&|K7avs$LIm?oPptOyquk=s*a$6y>xR$54#}5wvwK -zuiWYE3&Ny#rQKR6$DFmDoC%!}>lffh?Ds6aBOwZcdDRQq65t$37#KV?&)XZ>m8s{vuA8*R{Pn6nTQ-3iKeQ(E>h8XS@QsOF -zH_OP`%y8556|*g&nfgcS^qwX(@jp8$Y2c0#}ePo_H -zrjdd}7p}U7B`Yb6l&ajDTPuOYOPP9cy;IeY2t@uZo-{7@h?8VtsfoCSqhK9kh#(LC -z8kD_fAcskNh@Kfs-s}tbJOCYY^D#4?q1%+(Jm8W(4`b*W&jxfr?)RmzDTQIy482ly -z8=MDFj{R* -z)cNJ;AQ!nKexJ?FGX&}4IVvtIJ;=K+m7Q=VCpJ$*^k=k(u$ydY1|bA3@`q4xRD%Z* -z29=GhN0kqiG~z0k%?9->8z3~BWuc@Iz-IIeA1qN=KD9(g8U#ITHV=32Psz$dFm7l4 -zcIB4LU&rJmck#>1mPpWE&QUrW%=$W2ZC#b~M|Gykpjux>W8VI@P&{&@BAMJPyE~`+HTO|P -z@>ogNgy}y}zzFB@zkvdKCtw|#CQfaB3Y|y^`M{Q9>iAz@4Y=R-B7@}@^DZ%GINVf8#M -zX5=Gls`ZFf&b@vWZ> -z-4k_(8M-@Ryu84#7cc5_1!x=uoo1~v7H`=WtGl8t0XR?HPAONyv;r##ZXgHNfk~oL -z!*11k`4D>IL$tYxA->e{Tvi~~ -z=slk+JG>`8H1=xa{l-3|@g0f4*O_e(6$Q(i2gZYst=v<$>bIB{lH1baYy2zJ@m^rO -z<(Buad@?5d1#$}8g?#)&qt&6WR|~%{$haIDp73wbBQ3WCTh4}9wc7Zm5qHn`d1dH- -zUz67xpYT-guy0k2LqhqJsN=RgHW_!^Rk5mDBn9z99DCAp@rERbyGAGNIP6UQiw?HY -za9%!8!1+fRK^jpA{x#b@23Ft5R_O3=^lJQm~D*lEZOoq=D-i -z=Ac-orsCfcc6oRm+^R2iWvi3wj30g4S5#s8xE;sBh-K;}(~7K-(rKfKYI?wL92B -z^*$7EX9st?9DvKiEJRlLND?klW>hM*=sHieVsB=bjY>h3_-dVfOQbL!|22Qat8Y`c -zA%?9$XbB{PqyE11o`5PR%xig~^X*a8{o*XNf0@XdImz&r_qY}eI4MYEq=z0G}i -zLhc3T=XsxzjLdXQ8vFY#T!TW?csuWnNP9TkTy~^^`3T~iVG -zGFExR9^!F-qYkYf+5uq=4tFfm(RZDMlS`E*@LaQ3h*%(IRF`S14?U;zAQvz(nJWDart=z`wxS=&BaW> -z6*P(FpOZwTj&CY*>Y=;PLfcH_3IY2u9w~-6~B33>rK^6LvoX17+F!13If}4s~mS!{i9a -zk^$!w>#F}el}e@l+N4jOmz3S(KFSqkq`VbGy3t!+w&dJbfxe1@wy1fgcIJ(e@~gd` -zc}17Y>8JZjpa1Mpg4(H0yx>P55MMWqKOG-)k!lq_Rhoc+rI;5~#ss;%c?HRzo -zmo<^O=T2*Rw-AGrRpwwbiuOJMaAP=L8QYSmRBDN&CxH)v=)`$Jl=y~G@yHq-gS+ug -zopmb59746zY43z&mu3DYOl)gPeW*b`UnrfcCq6gwdW>vlOLoV{*Tt|SJu2p|jXf*s -z*pncC`dOHU(VG4H6Tqyi@!|5!zH?4<=6F*=M)yci$J8n_Z|dhnZe+*T)qvE+c*~60 -z3BpQtaIRRwZvAhct@6k3@<|H;Kv6c&;37KRf?(Kzh -zM{Z4PGPrp2YV7Gi%!{LW}sJKeh^=Qc=UmZkgXUD=DE+N -zAP3d#Vt_ney9OP*L=B=CS2UB6MlL@-XS7iG3(5OvUMYzX-3yP;g&+Sob~@T5h_c -zDxhq?ha^K(M%(|EThP?qhc56F$ -zwHgG4KUAZ@qvs7oz;Tl$Wr+eOfG{bPvH;MG%~MP=;l99{1lNoGgTcf7f6sU$M1my7 -z4dpyz-OEc;77q3NCxq@KO#3qWidXRPe|emx3Z~{rd5~vC$70R&B|djPzjfZnKvfU` -z04@8!ULR<9^)9QN5}tK<*|#b%Y`@>d>!Fnr!doE$T@l{o_lZb;5<8oR($f|U!ZCas6Ydh5q4ukE -z-8)8b%%Pf54OV8haILu;oDcDzYZy>xNs+CTTjn0h4l0PN3QNjr{@WRhNnsDVzyJxn -z;>CMAFoxGOBme{DQ{ou;f@)!KsSj+)7ot^6$q0LCfw2@-F=-32sX+h$fE$gQ()|wW -z_*}L`knB!gr@+bD%BHe=r~c#k@ywokUv9mT09g6VhaaR?mCD$RX8G);_kfmCAZ};K -zsRxg3Mja^Z#}F$>0`yRrqc@KZ?>3VU*Im2?<&#*Wnygpk2^c*Xhit)EK4OhWYKj_&(}A5scFMFCJZdv>EwF6fxi -z6dn!aripvE*_^0I-m}XrP%A=OT|W6zu4le0uHx(xhQaSbAQhyvQH&105aE&c&L(+{ -zuo`xcb3u9L=!K9bw(1hJH -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 -zRPv;;bu$^F5Y?qA -zU)yI1ZgJn~Lt_sn{&|L?oq{W=E9}@H^=Yf&Up=$N;JqW2>Lue)&DyN@tWZ^AWQ`4R -zxY*YV=3KfkT*M -zITC=3>a7@g;MsIEJdk{H_AEaH7ww_R9!@FaN -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 -zep=B -zEenK};%y~yqKax9SNTs6wV8mq@#jKW_hR0oG#RT?=gg*;^ -zrZoFk7<``g{Sm&pyi#b_s~#Cb_J?o3uht$O9%^oe`_zP@_f>;l??|$7c6j%ouQ@rV -znI}Donku9gd(;PKoo`ZnB|lSfL(CcmcK9h{4K2yfdveiX*F?w{S=8l;c_!AY_HaJ* -z0oiU2PE+{7^8nA-0?K-qZg~hyU}@*EIx{)+mOG!6$h4 -z6F#K#O21)wZNhZ9b@y{kq2@|7=0~envCA>0*#=!k0tuBTLY~L#MV{d{kN#XAgk+}U -z5Wt2Zwq_K{0d5|_|K{og?TJK@O?!fe+q%nRmRs{|kh!%&5@&miK0apQ-51|j2S4pt -z&VI=fC!wW&d0H7BKK@5d!ESD*%_88DBubno!~bRugU2H@82>E4qSRJcVDvE}ZZ=i4 -z5X8r%T8*m5$HSX_B@44s4P;WjPQ2c)nsl}mmyn?M#7`%zeqZ(@ugCSL?i -z$~Ug1S`kg9`+<$RurHPIKg#y^=lz&ozJ6xp*qZXC$s2MndW9}aq@>qntRZa9QE!Li -zSrJXSG5JOrD)7n3(!7}A;^MmcNS2|M@NbqUQns5pi|&Sz$2-?FY#%!HySVWPk)MaQ -z+af41N6D0bs5twkv>_pXxdGUoXwOeo -zQC$|98>a_F%Te2+j3@t0@G;H|2x&SPdnF!37VmuFM$t~veq)fKhm==s)&>5HoXXVB -zQtO3|U_-3jWL)<@CB-|Fr~-ct^=#_?Xq3aFG8-+5c_}wff-j2Wl14dG=*Ir9` -z;vz2(O;5Unr5LHNTB*VR&471*8|-qBnLX}C_xgEw_{cs><2@q7jH8*rt35VpFCY2j -zo{CNJWmlFb!fB -z+VoPrGl(o^jqOM?eXroBfTsHID*ndD;oV>?t@L*bcmz1sE7!M3!1u)Tg_tsY?&*yt -z{-g%_mIRW%x&)2xcX+vo4UJ)XO{WNsMdc`kKl(hxy=qIm^e!9ykOZys0+Uqm>(@qN -zZb-1Lj8wG=5eFuL7^|j46t_`%IbWswhBS4nhHL_=6N} -zg#88*wIk^{8^Vsyzmz;?T4HZC#VV;-$K)tUbCnN}WVDwtrQ%2pCXEG1<7o7lhTTE> -zJ~wyXM6LZ`OAuO9z`-gRs+(rVKt*F|`vWoQ8G}y+;(qGCesq_I=;THh4U4k78ic03 -z_yCm4t=c1=4uP8^yGG0;ab -zwAc{o@me2=dAu+9sU(&HWXSXObGX&CD=$ZhdG;RmbJTB_D)n6gG`*O*1MzIMSJvKi -ze{aZF2T{fr)a?Fi2&+vT73&Pu*HcesDu2=t4HLmX -z!$E0!OY_r{p4>*vGR-674`asP7qMmjE3Xe~PfSf;ZVr_I6P}a9nWQpoH=T{EY0~4~ -z#U6eC9jnyEzz1>Q%!0>TcL~KDX?RPKsEnGSmB@N3+{1pwhgLM;rDu=G)7qD+?>(;_ -z!Oz_2=8El2)Ef>-?%HT*gKaZ52~5aN;nwVE7a)vslJ@1QkAa}tuz&* -z{}ialFW|fv&c}3_0)s!=?^0~-489@6VeM=7|Aqi5P!PZt&PFG+F45(Ws(78Sz*3L2+Z&?ga)D?d0Fr8GSgtNgP{e(x)4TO9Efqd-1b -z^^JZ31`-ob|M -zLa;{8};>3e1J*hWDD{Oc^N}f6Pq4vbrb}w-WJ$t;JoFlzdKQmA`yLEOm`=H=CHW~?J -zK?0qp%gJ-+g0LOde;XF7RK)Y)=ESrK1|9oQbwZPv3tQZcF-)lf#XikxG|WUcdS#;B -z+Dhu{3m0&4t2svA?8N`pSfV6UN6#vHZD`Bebk_#_f -zomix$3ThRJ9kUvAF{6-o7-lvI8G<(JGEr00_6E3Jn&AO^l8Jpm_!j|HKUFV&MkoA& -zvidl_aG*eY@vG+9o6|BS91B8-oh -z{*HvN+rWmjS8XHl7EAM$hGDYd>O~?k+09-yEu|E;*?T>yK2@j#8b~V>XV7CYe{OT= -z>LUB&z}7rO9^<4V1;Snvd$h(ZKs1js -z@$uQ*bA^~Ug$YN5&!;pcKb=+%JmIhhd;h0&CMpaOCsyR@%J}z8j#wPI&qXAt^9+He -z9j1Ov+{Ci?JipP-F~v;b(}BbHLx=MRS|G%XjaC&?e+4KpCuZ)UmM0Cmq!=9-vE3bE -zl(uDl!TRICJOw`YvN6tq0LJQ?@TrFkX(FBwO7>>{HC0sRw8dSZ=Ybn$MNYxbw1&A~ -z4U*;<|8AirF7Bn$*+Sty&*Z?8JwK2eN7J?_E^D>Jkr4MPOL6Mtk_aiCs;No_w|y0j -ztG;ThhU2Suqk+D5nR0zmvibT -zRpibrQ#xeY)wgm?O_F7(uo6SZbj$kr=PBOsJ7?4 -z9G04pG&Mz?Y6l0W1i01Fr|wXPET~N10Q+lLgS^HWxZsd_kk*^;~xkae4sW9p)Hr-Rq9-khPzow4)vQQ -zWLpI?ynx6^s2&+dNg9il9{dSTr~2X)ko&aY%Q%Itxe?BWpMfefGcD}Z%Ae(pS~bpt -z^+c*S=m)cQQPeBsXQR+GjKR6(P -z$aaour7~Lxl5JGp8P4|f+;D8h>&9*bn<+IBuE{c2yhv -zRJ;;TW>1S(^yFg6RT~Lc&ew0yV1}z1vaK#Yby?7*^JB*MM|;Y{8h?G`raA -zqna1<#l7B=aj1hP!|gRcx5mU%u2TNXVD|!gN_9b{3=>ZKRu;6ZR;RCaT8tf1l27DN -z6ioSFzet(1MS&w#`tLO&g>Or=Dq5~`rS$EuZD3Vt>fho{(|e9^`>7p13RWjHIVNh) -zZmVdlHYQItN;{ic9A1iG2`FVtKJi%MRn@xWbNhJ{Y(`MWo6`SbN#O^9Kp+hj9p!pO -G8|43b__*%? - diff --git a/patches/server/0008-Plazma-Configurations.patch b/patches/server/0008-Plazma-Configurations.patch index 842cf61..80db65d 100644 --- a/patches/server/0008-Plazma-Configurations.patch +++ b/patches/server/0008-Plazma-Configurations.patch @@ -4,783 +4,6 @@ Date: Fri, 3 Nov 2023 00:11:50 +0900 Subject: [PATCH] Plazma Configurations -diff --git a/src/main/java/io/papermc/paper/configuration/Configurations.java b/src/main/java/io/papermc/paper/configuration/Configurations.java -index 8cf720f08514e8e4f62f4ad196f1277bd761c6b2..cda2ca940e30506807a5d12b84dbf69529051e26 100644 ---- a/src/main/java/io/papermc/paper/configuration/Configurations.java -+++ b/src/main/java/io/papermc/paper/configuration/Configurations.java -@@ -112,7 +112,7 @@ public abstract class Configurations { - loader.save(node); - } catch (ConfigurateException ex) { - if (ex.getCause() instanceof AccessDeniedException) { -- LOGGER.warn("Could not save {}: Paper could not persist the full set of configuration settings in the configuration file. Any setting missing from the configuration file will be set with its default value in memory. Admins should make sure to review the configuration documentation at https://docs.papermc.io/paper/configuration for more details.", filename, ex); -+ LOGGER.warn("Could not save {}: {} could not persist the full set of configuration settings in the configuration file. Any setting missing from the configuration file will be set with its default value in memory. Admins should make sure to review the configuration documentation at {} for more details.", filename, io.papermc.paper.ServerBrandConstants.BRAND_NAME, io.papermc.paper.ServerBrandConstants.CONFIG_REFERENCE, ex); // Plazma - Fork-friendly Rebranding - } else throw ex; - } - } -diff --git a/src/main/java/io/papermc/paper/configuration/Configurations.java b/src/main/java/io/papermc/paper/configuration/Configurations.java -index cda2ca940e30506807a5d12b84dbf69529051e26..150556ba594eae2214e4d1f0243ee97a7beb1e99 100644 ---- a/src/main/java/io/papermc/paper/configuration/Configurations.java -+++ b/src/main/java/io/papermc/paper/configuration/Configurations.java -@@ -37,27 +37,94 @@ public abstract class Configurations { - public static final String WORLD_DEFAULTS = "__world_defaults__"; - public static final ResourceLocation WORLD_DEFAULTS_KEY = ResourceLocation.fromNamespaceAndPath("configurations", WORLD_DEFAULTS); - protected final Path globalFolder; -- protected final Class globalConfigClass; -- protected final Class worldConfigClass; -- protected final String globalConfigFileName; -- protected final String defaultWorldConfigFileName; -- protected final String worldConfigFileName; -- -- public Configurations( -- final Path globalFolder, -- final Class globalConfigType, -- final Class worldConfigClass, -- final String globalConfigFileName, -- final String defaultWorldConfigFileName, -- final String worldConfigFileName -- ) { -- this.globalFolder = globalFolder; -- this.globalConfigClass = globalConfigType; -- this.worldConfigClass = worldConfigClass; -- this.globalConfigFileName = globalConfigFileName; -- this.defaultWorldConfigFileName = defaultWorldConfigFileName; -- this.worldConfigFileName = worldConfigFileName; -+ -+ // Plazma start - Configurable Plazma -+ @org.jetbrains.annotations.VisibleForTesting -+ public static final java.util.function.Supplier SPIGOT_WORLD_DEFAULTS = com.google.common.base.Suppliers.memoize(() -> new org.spigotmc.SpigotWorldConfig(org.apache.commons.lang.RandomStringUtils.randomAlphabetic(255)) { -+ @Override // override to ensure "verbose" is false -+ public void init() { -+ org.spigotmc.SpigotConfig.readConfig(org.spigotmc.SpigotWorldConfig.class, this); -+ } -+ }); -+ protected static final ContextKey> SPIGOT_WORLD_CONFIG_CONTEXT_KEY = new ContextKey<>(new TypeToken<>() {}, "spigot world config"); -+ -+ public Configurations(final Path globalFolder) { -+ try { -+ createDirectoriesSymlinkAware(globalFolder); -+ } catch (IOException e) { -+ throw new RuntimeException("Could not setup configurations", e); -+ } -+ this.globalFolder = globalFolder; // Plazma - diff on changes -+ } // Plazma - diff on changes -+ -+ protected abstract Class globalConfigClass(); -+ protected abstract String globalConfigFileName(); -+ protected abstract org.spongepowered.configurate.NodePath[] removedGlobalPaths(); -+ protected abstract G getGlobalConfiguration(); -+ protected abstract Class worldConfigClass(); -+ protected abstract String defaultWorldConfigFileName(); -+ protected abstract String worldConfigFileName(); -+ protected abstract String worldDefaultHeader(); -+ protected abstract org.spongepowered.configurate.NodePath[] removedWorldPaths(); -+ protected abstract W getWorldConfiguration(final ServerLevel level); -+ protected abstract String buildWorldHeader(final ContextMap contextMap); -+ protected abstract W createWorldConfigInstance(final ContextMap contextMap); -+ -+ protected static ConfigurationOptions defaultOptions(ConfigurationOptions options) { -+ return options.serializers(builder -> builder -+ .register(io.papermc.paper.configuration.serializer.collections.MapSerializer.TYPE, new io.papermc.paper.configuration.serializer.collections.MapSerializer(false)) -+ .register(new io.papermc.paper.configuration.serializer.EnumValueSerializer()) -+ .register(new io.papermc.paper.configuration.serializer.ComponentSerializer()) -+ ); -+ } -+ -+ protected static ObjectMapper.Factory.Builder defaultGlobalFactoryBuilder(ObjectMapper.Factory.Builder builder) { -+ return builder.addDiscoverer(io.papermc.paper.configuration.mapping.InnerClassFieldDiscoverer.globalConfig()); -+ } -+ -+ protected static ContextMap createWorldContextMap(ServerLevel level) { -+ return createWorldContextMap(level.convertable.levelDirectory.path(), level.serverLevelData.getLevelName(), level.dimension().location(), level.spigotConfig, level.registryAccess(), level.getGameRules()); -+ } -+ -+ public static ContextMap createWorldContextMap(Path dir, String levelName, ResourceLocation worldKey, org.spigotmc.SpigotWorldConfig spigotConfig, RegistryAccess registryAccess, GameRules gameRules) { -+ return ContextMap.builder() -+ .put(WORLD_DIRECTORY, dir) -+ .put(WORLD_NAME, levelName) -+ .put(WORLD_KEY, worldKey) -+ .put(SPIGOT_WORLD_CONFIG_CONTEXT_KEY, com.google.common.base.Suppliers.ofInstance(spigotConfig)) -+ .put(REGISTRY_ACCESS, registryAccess) -+ .put(GAME_RULES, gameRules) -+ .build(); -+ } -+ -+ @Deprecated -+ public org.bukkit.configuration.file.YamlConfiguration createLegacyObject(final net.minecraft.server.MinecraftServer server) { -+ org.bukkit.configuration.file.YamlConfiguration global = org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(this.globalFolder.resolve(this.globalConfigFileName()).toFile()); -+ org.bukkit.configuration.ConfigurationSection worlds = global.createSection("__________WORLDS__________"); -+ worlds.set("__defaults__", org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(this.globalFolder.resolve(this.defaultWorldConfigFileName()).toFile())); -+ for (ServerLevel level : server.getAllLevels()) -+ worlds.set(level.getWorld().getName(), org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(getWorldConfigFile(level).toFile())); -+ return global; -+ } -+ -+ // Symlinks are not correctly checked in createDirectories -+ protected static void createDirectoriesSymlinkAware(Path path) throws IOException { -+ if (!Files.isDirectory(path)) { -+ Files.createDirectories(path); -+ } -+ } -+ -+ public void reloadConfigs(net.minecraft.server.MinecraftServer server) { -+ try { -+ this.initializeGlobalConfiguration(reloader(this.globalConfigClass(), getGlobalConfiguration())); -+ this.initializeWorldDefaultsConfiguration(server.registryAccess()); -+ for (ServerLevel level : server.getAllLevels()) -+ this.createWorldConfig(createWorldContextMap(level), reloader(this.worldConfigClass(), getWorldConfiguration(level))); -+ } catch (Exception e) { -+ throw new RuntimeException("Could not reload configuration files", e); -+ } - } -+ // Plazma end - Configurable Plazma - - protected ObjectMapper.Factory.Builder createObjectMapper() { - return ObjectMapper.factoryBuilder() -@@ -66,17 +133,21 @@ public abstract class Configurations { - } - - protected YamlConfigurationLoader.Builder createLoaderBuilder() { -- return ConfigurationLoaders.naturallySorted(); -+ return ConfigurationLoaders.naturallySorted().defaultOptions(Configurations::defaultOptions); // Plazma - Configurable Plazma - } - -- protected abstract boolean isConfigType(final Type type); -+ // Plazma start -+ protected boolean isConfigType(final Type type) { -+ return ConfigurationPart.class.isAssignableFrom(io.leangen.geantyref.GenericTypeReflector.erase(type)); -+ } -+ // Plazma end - - protected abstract int globalConfigVersion(); - - protected abstract int worldConfigVersion(); - - protected ObjectMapper.Factory.Builder createGlobalObjectMapperFactoryBuilder() { -- return this.createObjectMapper(); -+ return defaultGlobalFactoryBuilder(this.createObjectMapper()); // Plazma - Configurable Plazma - } - - @MustBeInvokedByOverriders -@@ -94,7 +165,7 @@ public abstract class Configurations { - }; - } - -- static CheckedFunction reloader(Class type, T instance) { -+ protected static CheckedFunction reloader(Class type, T instance) { // Plazma - package -> protected - return node -> { - ObjectMapper.Factory factory = (ObjectMapper.Factory) Objects.requireNonNull(node.options().serializers().get(type)); - ObjectMapper.Mutable mutable = (ObjectMapper.Mutable) factory.get(type); -@@ -104,7 +175,7 @@ public abstract class Configurations { - } - - public G initializeGlobalConfiguration(final RegistryAccess registryAccess) throws ConfigurateException { -- return this.initializeGlobalConfiguration(creator(this.globalConfigClass, true)); -+ return this.initializeGlobalConfiguration(creator(this.globalConfigClass(), true)); // Plazma - Configurable Plazma - } - - private void trySaveFileNode(YamlConfigurationLoader loader, ConfigurationNode node, String filename) throws ConfigurateException { -@@ -118,7 +189,7 @@ public abstract class Configurations { - } - - protected G initializeGlobalConfiguration(final CheckedFunction creator) throws ConfigurateException { -- final Path configFile = this.globalFolder.resolve(this.globalConfigFileName); -+ final Path configFile = this.globalFolder.resolve(this.globalConfigFileName()); // Plazma - Configurable Plazma - final YamlConfigurationLoader loader = this.createGlobalLoaderBuilder() - .defaultOptions(this.applyObjectMapperFactory(this.createGlobalObjectMapperFactoryBuilder().build())) - .path(configFile) -@@ -149,6 +220,13 @@ public abstract class Configurations { - } - - protected void applyGlobalConfigTransformations(final ConfigurationNode node) throws ConfigurateException { -+ // Plazma start - Configurable Plazma -+ org.spongepowered.configurate.transformation.ConfigurationTransformation.Builder builder = org.spongepowered.configurate.transformation.ConfigurationTransformation.builder(); -+ for (org.spongepowered.configurate.NodePath path : removedGlobalPaths()) { -+ builder.addAction(path, org.spongepowered.configurate.transformation.TransformAction.remove()); -+ } -+ builder.build().apply(node); -+ // Plazma end - Configurable Plazma - } - - @MustBeInvokedByOverriders -@@ -156,6 +234,7 @@ public abstract class Configurations { - return ContextMap.builder() - .put(WORLD_NAME, WORLD_DEFAULTS) - .put(WORLD_KEY, WORLD_DEFAULTS_KEY) -+ .put(SPIGOT_WORLD_CONFIG_CONTEXT_KEY, SPIGOT_WORLD_DEFAULTS) // Plazma - Configurable Plazma - .put(REGISTRY_ACCESS, registryAccess); - } - -@@ -163,7 +242,7 @@ public abstract class Configurations { - final ContextMap contextMap = this.createDefaultContextMap(registryAccess) - .put(FIRST_DEFAULT) - .build(); -- final Path configFile = this.globalFolder.resolve(this.defaultWorldConfigFileName); -+ final Path configFile = this.globalFolder.resolve(this.defaultWorldConfigFileName()); // Plazma - Configurable Plazma - final DefaultWorldLoader result = this.createDefaultWorldLoader(false, contextMap, configFile); - final YamlConfigurationLoader loader = result.loader(); - final ConfigurationNode node = loader.load(); -@@ -173,8 +252,8 @@ public abstract class Configurations { - this.verifyWorldConfigVersion(contextMap, node); - } - this.applyWorldConfigTransformations(contextMap, node, null); -- final W instance = node.require(this.worldConfigClass); -- node.set(this.worldConfigClass, instance); -+ final W instance = node.require(this.worldConfigClass()); // Plazma - Configurable Plazma -+ node.set(this.worldConfigClass(), instance); // Plazma - Configurable Plazma - this.trySaveFileNode(loader, node, configFile.toString()); - } - -@@ -196,30 +275,45 @@ public abstract class Configurations { - } - - protected ObjectMapper.Factory.Builder createWorldObjectMapperFactoryBuilder(final ContextMap contextMap) { -- return this.createObjectMapper(); -+ // Plazma start - Configurable Plazma -+ return this.createObjectMapper() -+ .addNodeResolver(new io.papermc.paper.configuration.legacy.RequiresSpigotInitialization.Factory(contextMap.require(SPIGOT_WORLD_CONFIG_CONTEXT_KEY).get())) -+ .addNodeResolver(new NestedSetting.Factory()) -+ .addDiscoverer(new io.papermc.paper.configuration.mapping.InnerClassFieldDiscoverer(Map.of(this.worldConfigClass(), createWorldConfigInstance(contextMap)))); -+ // Plazma end - Configurable Plazma - } - - @MustBeInvokedByOverriders - protected YamlConfigurationLoader.Builder createWorldConfigLoaderBuilder(final ContextMap contextMap) { -- return this.createLoaderBuilder(); -+ // Plazma start - Configurable Plazma -+ return this.createLoaderBuilder().defaultOptions(options -> options -+ .header(contextMap.require(WORLD_NAME).equals(WORLD_DEFAULTS) ? this.worldDefaultHeader() : this.buildWorldHeader(contextMap))); -+ // Plazma end - Configurable Plazma - } - -+ // Plazma start - Configurable Plazma - // Make sure to run version transforms on the default world config first via #setupWorldDefaultsConfig -- public W createWorldConfig(final ContextMap contextMap) throws IOException { -- return this.createWorldConfig(contextMap, creator(this.worldConfigClass, false)); -- } -+ public W createWorldConfig(final ContextMap contextMap) { -+ final String levelName = contextMap.require(WORLD_NAME); -+ try { -+ return this.createWorldConfig(contextMap, creator(this.worldConfigClass(), false)); -+ } catch (IOException exception) { -+ throw new RuntimeException("Could not create world config for " + levelName, exception); -+ } -+ } // diff on change -+ // Plazma end - Configurable Plazma - - protected W createWorldConfig(final ContextMap contextMap, final CheckedFunction creator) throws IOException { - Preconditions.checkArgument(!contextMap.isDefaultWorldContext(), "cannot create world map with default world context"); -- final Path defaultsConfigFile = this.globalFolder.resolve(this.defaultWorldConfigFileName); -+ final Path defaultsConfigFile = this.globalFolder.resolve(this.defaultWorldConfigFileName()); // Plazma - Configurable Plazma - final YamlConfigurationLoader defaultsLoader = this.createDefaultWorldLoader(true, this.createDefaultContextMap(contextMap.require(REGISTRY_ACCESS)).build(), defaultsConfigFile).loader(); - final ConfigurationNode defaultsNode = defaultsLoader.load(); - - boolean newFile = false; - final Path dir = contextMap.require(WORLD_DIRECTORY); -- final Path worldConfigFile = dir.resolve(this.worldConfigFileName); -+ final Path worldConfigFile = dir.resolve(this.worldConfigFileName()); // Plazma - Configurable Plazma - if (Files.notExists(worldConfigFile)) { -- PaperConfigurations.createDirectoriesSymlinkAware(dir); -+ createDirectoriesSymlinkAware(dir); // Plazma - Configurable Plazma - Files.createFile(worldConfigFile); // create empty file as template - newFile = true; - } -@@ -263,6 +357,13 @@ public abstract class Configurations { - } - - protected void applyWorldConfigTransformations(final ContextMap contextMap, final ConfigurationNode node, final @Nullable ConfigurationNode defaultsNode) throws ConfigurateException { -+ // Plazma start - Configurable Plazma -+ org.spongepowered.configurate.transformation.ConfigurationTransformation.Builder builder = org.spongepowered.configurate.transformation.ConfigurationTransformation.builder(); -+ for (org.spongepowered.configurate.NodePath path : removedWorldPaths()) { -+ builder.addAction(path, org.spongepowered.configurate.transformation.TransformAction.remove()); -+ } -+ builder.build().apply(node); -+ // Plazma end - Configurable Plazma - } - - protected void applyDefaultsAwareWorldConfigTransformations(final ContextMap contextMap, final ConfigurationNode worldNode, final ConfigurationNode defaultsNode) throws ConfigurateException { -@@ -275,7 +376,7 @@ public abstract class Configurations { - } - - public Path getWorldConfigFile(ServerLevel level) { -- return level.convertable.levelDirectory.path().resolve(this.worldConfigFileName); -+ return level.convertable.levelDirectory.path().resolve(this.worldConfigFileName()); // Plazma - Configurable Plazma - } - - public static class ContextMap { -diff --git a/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java b/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java -index 47a2cba0db36b11548d06ec21f7c7d7c9a962d6e..3f99ca451099d2c7baf12b7b603d8b30f520734c 100644 ---- a/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java -+++ b/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java -@@ -137,6 +137,7 @@ public class PaperConfigurations extends Configurations SPIGOT_WORLD_DEFAULTS = Suppliers.memoize(() -> new SpigotWorldConfig(RandomStringUtils.randomAlphabetic(255)) { - @Override // override to ensure "verbose" is false -@@ -145,11 +146,68 @@ public class PaperConfigurations extends Configurations> SPIGOT_WORLD_CONFIG_CONTEXT_KEY = new ContextKey<>(new TypeToken>() {}, "spigot world config"); -+ */ // Plazma - Configurable Plazma - -+ // Plazma start - Configurable Plazma -+ public PaperConfigurations(final Path globalFolder) { // diff on change -+ super(globalFolder); -+ } -+ -+ @Override -+ protected Class globalConfigClass() { -+ return GlobalConfiguration.class; -+ } -+ -+ @Override -+ protected String globalConfigFileName() { -+ return GLOBAL_CONFIG_FILE_NAME; -+ } -+ -+ @Override -+ protected NodePath[] removedGlobalPaths() { -+ return RemovedConfigurations.REMOVED_GLOBAL_PATHS; -+ } -+ -+ @Override -+ protected GlobalConfiguration getGlobalConfiguration() { -+ return GlobalConfiguration.get(); -+ } -+ -+ @Override -+ protected Class worldConfigClass() { -+ return WorldConfiguration.class; -+ } -+ -+ @Override -+ protected String defaultWorldConfigFileName() { -+ return WORLD_DEFAULTS_CONFIG_FILE_NAME; -+ } -+ -+ @Override -+ protected String worldConfigFileName() { -+ return WORLD_CONFIG_FILE_NAME; -+ } -+ -+ @Override -+ protected NodePath[] removedWorldPaths() { -+ return RemovedConfigurations.REMOVED_WORLD_PATHS; -+ } -+ -+ @Override -+ protected String worldDefaultHeader() { -+ return WORLD_DEFAULTS_HEADER; -+ } - -- public PaperConfigurations(final Path globalFolder) { -- super(globalFolder, GlobalConfiguration.class, WorldConfiguration.class, GLOBAL_CONFIG_FILE_NAME, WORLD_DEFAULTS_CONFIG_FILE_NAME, WORLD_CONFIG_FILE_NAME); -+ @Override -+ protected String buildWorldHeader(final ContextMap contextMap) { -+ return WORLD_HEADER.apply(contextMap); -+ } -+ -+ @Override -+ protected WorldConfiguration getWorldConfiguration(final ServerLevel level) { -+ return level.paperConfig(); - } -+ // Plazma end - Configurable Plazma - - @Override - protected int globalConfigVersion() { -@@ -164,14 +222,11 @@ public class PaperConfigurations extends Configurations builder -- .register(MapSerializer.TYPE, new MapSerializer(false)) -- .register(new EnumValueSerializer()) -- .register(new ComponentSerializer()) - .register(IntOr.Default.SERIALIZER) - .register(IntOr.Disabled.SERIALIZER) - .register(DoubleOr.Default.SERIALIZER) -@@ -183,6 +238,7 @@ public class PaperConfigurations extends Configurations options -- .header(contextMap.require(WORLD_NAME).equals(WORLD_DEFAULTS) ? WORLD_DEFAULTS_HEADER : WORLD_HEADER.apply(contextMap)) -+ // .header(contextMap.require(WORLD_NAME).equals(WORLD_DEFAULTS) ? WORLD_DEFAULTS_HEADER : WORLD_HEADER.apply(contextMap)) // Plazma - Configurable Plazma - .serializers(serializers -> serializers - .register(new TypeToken>() {}, new FastutilMapSerializer.SomethingToPrimitive>(Reference2IntOpenHashMap::new, Integer.TYPE)) - .register(new TypeToken>() {}, new FastutilMapSerializer.SomethingToPrimitive>(Reference2LongOpenHashMap::new, Long.TYPE)) -@@ -259,12 +318,7 @@ public class PaperConfigurations extends Configurations pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping - public boolean lagging = false; // Purpur - Lagging threshold -@@ -516,6 +517,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop WorldDataServer - public ServerLevel(MinecraftServer minecraftserver, Executor executor, LevelStorageSource.LevelStorageAccess convertable_conversionsession, PrimaryLevelData iworlddataserver, ResourceKey resourcekey, LevelStem worlddimension, ChunkProgressListener worldloadlistener, boolean flag, long i, List list, boolean flag1, @Nullable RandomSequences randomsequences, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider) { -- super(iworlddataserver, resourcekey, minecraftserver.registryAccess(), worlddimension.type(), false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess(), iworlddataserver.getGameRules())), executor); // Paper - create paper world configs; Async-Anti-Xray: Pass executor -+ // Plazma start - Configurable Plazma -+ super( -+ iworlddataserver, -+ resourcekey, -+ minecraftserver.registryAccess(), -+ worlddimension.type(), -+ false, -+ flag, -+ i, -+ minecraftserver.getMaxChainedNeighborUpdates(), -+ gen, -+ biomeProvider, -+ env, -+ spigotConfig -> minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess(), iworlddataserver.getGameRules())), -+ spigotConfig -> minecraftserver.plazmaConfigurations.createWorldConfig(org.plazmamc.plazma.configurations.PlazmaConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess(), iworlddataserver.getGameRules())), -+ executor -+ ); -+ // Plazma end - Configurable Plazma - this.pvpMode = minecraftserver.isPvpAllowed(); - this.convertable = convertable_conversionsession; - this.uuid = WorldUUID.getUUID(convertable_conversionsession.levelDirectory.path().toFile()); -diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index e12d3ec3c957e182a57142352b1224a18d256f37..90df89b67c34540901190cac6063bc5721d95ae0 100644 ---- a/src/main/java/net/minecraft/world/level/Level.java -+++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -173,7 +173,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl - return this.paperConfig; - } - // Paper end - add paper world config -- -+ // Plazma start - Configurable Plazma -+ private final org.plazmamc.plazma.configurations.WorldConfigurations plazmaConfig; -+ public org.plazmamc.plazma.configurations.WorldConfigurations plazmaConfig() { -+ return this.plazmaConfig; -+ } -+ // Plazma end - Configurable Plazma - public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray - public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur - Purpur config files - public static BlockPos lastPhysicsProblem; // Spigot -@@ -875,7 +880,24 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl - } - // Paper end - optimise random ticking - -- protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config & Anti-Xray -+ // Plazma start - Configurable Plazma -+ protected Level( -+ WritableLevelData worlddatamutable, -+ ResourceKey resourcekey, -+ RegistryAccess iregistrycustom, -+ Holder holder, -+ boolean flag, -+ boolean flag1, -+ long i, -+ int j, -+ org.bukkit.generator.ChunkGenerator gen, -+ org.bukkit.generator.BiomeProvider biomeProvider, -+ org.bukkit.World.Environment env, -+ java.util.function.Function paperWorldConfigCreator, -+ java.util.function.Function plazmaWorldConfigurationCreator, -+ java.util.concurrent.Executor executor -+ ) { -+ // Plazma end - Configurable Plazma - // Paper start - getblock optimisations - cache world height/sections - final DimensionType dimType = holder.value(); - this.minY = dimType.minY(); -@@ -887,6 +909,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl - // Paper end - getblock optimisations - cache world height/sections - this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot - this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config -+ this.plazmaConfig = plazmaWorldConfigurationCreator.apply(this.spigotConfig); // Plazma - Configurable Plazma - this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur - Purpur config files - this.playerBreedingCooldowns = this.getNewBreedingCooldownCache(); // Purpur - this.generator = gen; -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index badf280a6b01b06e8148c552330872d64e6256b7..090cb821a43ccfea21a990580e47b592df9d030f 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1100,6 +1100,7 @@ public final class CraftServer implements Server { - - org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot - this.console.paperConfigurations.reloadConfigs(this.console); -+ this.console.plazmaConfigurations.reloadConfigs(this.console); // Plazma - Configurable Plazma - org.purpurmc.purpur.PurpurConfig.init((File) console.options.valueOf("purpur-settings")); // Purpur - Purpur config files - for (ServerLevel world : this.console.getAllLevels()) { - // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty -@@ -3113,6 +3114,13 @@ public final class CraftServer implements Server { - } - // Purpur end - Purpur config files - -+ // Plazma start - Configurable Plazma -+ @Override -+ public YamlConfiguration getPlazmaConfig() { -+ return CraftServer.this.console.plazmaConfigurations.createLegacyObject(CraftServer.this.console); -+ } -+ // Plazma end - Configurable Plazma -+ - @Override - public void restart() { - org.spigotmc.RestartCommand.restart(); -diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 9c275f6f2c78c5d78736dc6921eadda2c12a5a10..a75f3328ba32466b6ceeddb0069c856524f19c0a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/Main.java -+++ b/src/main/java/org/bukkit/craftbukkit/Main.java -@@ -197,6 +197,14 @@ public class Main { - .defaultsTo("A " + io.papermc.paper.ServerBrandConstants.BRAND_NAME + " Server") // Plazma - Fork-friendly Rebranding - .describedAs("Name"); - // Paper end -+ -+ // Plazma start - Configurable Plazma -+ acceptsAll(asList("plazma-dir", "plazma-settings-directory"), "Directory for Plazma settings") -+ .withRequiredArg() -+ .ofType(File.class) -+ .defaultsTo(new File(org.plazmamc.plazma.configurations.PlazmaConfigurations.CONFIG_DIR)) -+ .describedAs("Configuration Directory"); -+ // Plazma end - Configurable Plazma - } - }; - -diff --git a/src/main/java/org/plazmamc/plazma/Options.java b/src/main/java/org/plazmamc/plazma/Options.java -new file mode 100644 -index 0000000000000000000000000000000000000000..ca11bd22a65c8b9f4fffb1832ada8c519ab75b98 ---- /dev/null -+++ b/src/main/java/org/plazmamc/plazma/Options.java -@@ -0,0 +1,10 @@ -+package org.plazmamc.plazma; -+ -+import static java.lang.Boolean.getBoolean; -+import static java.lang.System.getProperty; -+ -+public interface Options { -+ -+ boolean NO_OPTIMIZE = getBoolean("Plazma.disableConfigOptimization"); -+ -+} diff --git a/src/main/java/org/plazmamc/plazma/commands/Commands.java b/src/main/java/org/plazmamc/plazma/commands/Commands.java new file mode 100644 index 0000000000000000000000000000000000000000..4497d8f8a52db0fc89ce27168b54657d172b1445 @@ -1028,341 +251,6 @@ index 0000000000000000000000000000000000000000..b6664ba0fce55f5cfa0c8d3051dc8c2b + } + +} -diff --git a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java -new file mode 100644 -index 0000000000000000000000000000000000000000..b638690d5cd2360444e6c525f97f634d8e1dc60e ---- /dev/null -+++ b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java -@@ -0,0 +1,30 @@ -+package org.plazmamc.plazma.configurations; -+ -+import io.papermc.paper.configuration.Configuration; -+import io.papermc.paper.configuration.ConfigurationPart; -+import it.unimi.dsi.fastutil.objects.Reference2ObjectMap; -+import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; -+import net.minecraft.Util; -+import org.jetbrains.annotations.NotNull; -+import org.spongepowered.configurate.objectmapping.meta.Setting; -+import java.util.List; -+ -+@SuppressWarnings({"CanBeFinal", "FieldCanBeLocal", "FieldMayBeFinal", "InnerClassMayBeStatic"}) -+public class GlobalConfiguration extends ConfigurationPart { -+ -+ private static GlobalConfiguration INSTANCE; -+ static final int VERSION = 2; -+ static final boolean OPTIMIZE = PlazmaConfigurations.optimize(); -+ -+ public static GlobalConfiguration get() { -+ return INSTANCE; -+ } -+ -+ static void set(@NotNull GlobalConfiguration instance) { -+ GlobalConfiguration.INSTANCE = instance; -+ } -+ -+ @Setting(Configuration.VERSION_FIELD) -+ int version = VERSION; -+ -+} -diff --git a/src/main/java/org/plazmamc/plazma/configurations/PlazmaConfigurations.java b/src/main/java/org/plazmamc/plazma/configurations/PlazmaConfigurations.java -new file mode 100644 -index 0000000000000000000000000000000000000000..09053b4ccf268fd204c81dbb8d4f10fa9edcad5f ---- /dev/null -+++ b/src/main/java/org/plazmamc/plazma/configurations/PlazmaConfigurations.java -@@ -0,0 +1,219 @@ -+package org.plazmamc.plazma.configurations; -+ -+import com.mojang.logging.LogUtils; -+import io.papermc.paper.configuration.ConfigurationPart; -+import io.papermc.paper.configuration.Configurations; -+import joptsimple.OptionSet; -+import net.minecraft.core.RegistryAccess; -+import net.minecraft.server.level.ServerLevel; -+import org.checkerframework.checker.nullness.qual.NonNull; -+import org.checkerframework.framework.qual.DefaultQualifier; -+import org.jetbrains.annotations.VisibleForTesting; -+import org.plazmamc.plazma.Options; -+import org.slf4j.Logger; -+import org.spongepowered.configurate.BasicConfigurationNode; -+import org.spongepowered.configurate.ConfigurateException; -+import org.spongepowered.configurate.ConfigurationNode; -+import org.spongepowered.configurate.ConfigurationOptions; -+import org.spongepowered.configurate.NodePath; -+import org.spongepowered.configurate.objectmapping.ObjectMapper; -+import org.spongepowered.configurate.yaml.YamlConfigurationLoader; -+ -+import java.io.File; -+import java.nio.file.Path; -+import java.util.function.Function; -+ -+import static io.leangen.geantyref.GenericTypeReflector.erase; -+ -+@DefaultQualifier(NonNull.class) -+public class PlazmaConfigurations extends Configurations { -+ -+ public static final Logger LOGGER = LogUtils.getClassLogger(); -+ public static final String CONFIG_DIR = "config"; -+ static final String GLOBAL_CONFIG_FILE_NAME = "plazma-global.yml"; -+ static final String WORLD_DEFAULTS_CONFIG_FILE_NAME = "plazma-world-defaults.yml"; -+ static final String WORLD_CONFIG_FILE_NAME = "plazma-world.yml"; -+ static final boolean OPTIMIZE = !Options.NO_OPTIMIZE; -+ -+ private static final String HEADER_START = """ -+ #### ENGLISH #### -+ This is the %s configuration file for Plazma. -+ As you can see, there's a lot to configure. Some options may impact -+ gameplay, so use with caution, and make sure you know what each option -+ does before configuring. -+ -+ A description of the options can be found on the official wiki, -+ If you need help with the configuration or have any questions related to Plazma, -+ join us in our Discord for Plazma, or create issues on our GitHub repository. -+ -+ %s -+ -+ #### 한국어 #### -+ 본 파일은 Plazma의 %s 구성 파일입니다. -+ 보시다시피, 굉장히 많은 설정이 있습니다. 일부 설정은 게임 플레이에 영향을 줄 수 있습니다. -+ 따라서 주의해서 사용하시고, 각 설정이 서버에 어떠한 작용을 하는지 숙지하고 사용하시기 바랍니다. -+ -+ 구성에 대한 설명은 공식 위키에서 찾을 수 있으며, -+ 만약 설정에 도움이 필요하거나, Plazma에 대해 질문이 있으시다면, -+ 공식 Discord 서버에 접속하거나, GitHub 저장소에 이슈를 생성해주시기 바랍니다. -+ -+ %s -+ -+ GitHub: https://github.com/PlazmaMC/Plazma -+ Wiki: https://docs.plazmamc.org/ -+ Discord: https://plazmamc.org/discord -+ """; -+ -+ private static final String GLOBAL_HEADER = HEADER_START.formatted( -+ "global", "World options can be set in the %s file.".formatted(WORLD_DEFAULTS_CONFIG_FILE_NAME), -+ "전역", "월드별 설정은 %s 파일에서 설정할 수 있습니다.".formatted(WORLD_DEFAULTS_CONFIG_FILE_NAME) -+ ); -+ -+ private static final String WORLD_DEFAULTS_HEADER = HEADER_START.formatted( -+ "world default", """ -+ World-specific settings can be set in the %WORLD_CONFIG_FILE_NAME% -+ file within each world folder, and the same settings apply to all -+ worlds unless they are overwritten through the world-specific settings file. -+ """, -+ "월드 기본", """ -+ 월드별 설정은 각 월드 폴더 내 %WORLD_CONFIG_FILE_NAME% 파일에서 설정할 수 -+ 있으며, 월드별 설정을 통해 값을 덮어쓰지 않는 한, 모든 월드에 동일한 설정이 적용됩니다. -+ """ -+ ).replace("%WORLD_CONFIG_FILE_NAME%", WORLD_CONFIG_FILE_NAME); -+ -+ private static final Function WORLD_HEADER = map -> """ -+ #### ENGLISH #### -+ This is world-specific Plazma configuration file for the world %s (%s). -+ This file may start empty, but can be filled with options to override -+ world default configuration. -+ Some options may impact gameplay, so use with caution, -+ and make sure you know what each option does before configuring. -+ -+ A description of the options can be found on the official wiki, -+ If you need help with the configuration or have any questions related to Plazma, -+ join us in our Discord for Plazma, or create issues on our GitHub repository. -+ -+ #### 한국어 #### -+ 본 파일은 %s (%s) 월드 전용 Plazma 구성 파일입니다. -+ 이 파일은 초기에는 비어있지만, 월드 기본 설정을 덮어쓰기 위해 설정을 추가할 수 있습니다. -+ 일부 설정은 게임 플레이에 영향을 줄 수 있으므로, 주의해서 사용하시고, -+ 각 설정이 서버에 어떠한 작용을 하는지 숙지하고 사용하시기 바랍니다. -+ -+ 구성에 대한 설명은 공식 위키에서 찾을 수 있으며, -+ 만약 설정에 도움이 필요하거나, Plazma에 대해 질문이 있으시다면, -+ 공식 Discord 서버에 접속하거나, GitHub 레포지토리에 이슈를 생성해주시기 바랍니다. -+ -+ World Default Config Directory: %s/%s -+ GitHub: https://github.com/PlazmaMC/Plazma -+ Document: https://docs.plazmamc.org/ -+ Discord: https://plazmamc.org/discord -+ """.formatted( -+ map.require(WORLD_NAME), map.require(WORLD_KEY), -+ map.require(WORLD_NAME), map.require(WORLD_KEY), -+ CONFIG_DIR, WORLD_DEFAULTS_CONFIG_FILE_NAME -+ ); -+ -+ public PlazmaConfigurations(final OptionSet optionSet) { -+ super(((File) optionSet.valueOf("plazma-settings-directory")).toPath()); -+ } -+ -+ @Override -+ protected Class globalConfigClass() { -+ return GlobalConfiguration.class; -+ } -+ -+ @Override -+ protected String globalConfigFileName() { -+ return GLOBAL_CONFIG_FILE_NAME; -+ } -+ -+ @Override -+ protected GlobalConfiguration getGlobalConfiguration() { -+ return GlobalConfiguration.get(); -+ } -+ -+ @Override -+ protected int globalConfigVersion() { -+ return GlobalConfiguration.VERSION; -+ } -+ -+ @Override -+ protected NodePath[] removedGlobalPaths() { -+ return RemovedConfigurations.GLOBAL_PATHS; -+ } -+ -+ @Override -+ protected Class worldConfigClass() { -+ return WorldConfigurations.class; -+ } -+ -+ @Override -+ protected String defaultWorldConfigFileName() { -+ return WORLD_DEFAULTS_CONFIG_FILE_NAME; -+ } -+ -+ @Override -+ protected String worldConfigFileName() { -+ return WORLD_CONFIG_FILE_NAME; -+ } -+ -+ @Override -+ protected String worldDefaultHeader() { -+ return WORLD_DEFAULTS_HEADER; -+ } -+ -+ @Override -+ protected WorldConfigurations getWorldConfiguration(final ServerLevel level) { -+ return level.plazmaConfig(); -+ } -+ -+ @Override -+ protected int worldConfigVersion() { -+ return WorldConfigurations.VERSION; -+ } -+ -+ @Override -+ protected NodePath[] removedWorldPaths() { -+ return RemovedConfigurations.WORLD_PATHS; -+ } -+ -+ @Override -+ protected String buildWorldHeader(final ContextMap contextMap) { -+ return WORLD_HEADER.apply(contextMap); -+ } -+ -+ @Override -+ protected YamlConfigurationLoader.Builder createGlobalLoaderBuilder() { -+ return super.createGlobalLoaderBuilder() -+ .defaultOptions(PlazmaConfigurations::defaultGlobalOptions); -+ } -+ -+ @Override -+ public GlobalConfiguration initializeGlobalConfiguration(final RegistryAccess registryAccess) throws ConfigurateException { -+ GlobalConfiguration configuration = super.initializeGlobalConfiguration(registryAccess); -+ GlobalConfiguration.set(configuration); -+ return configuration; -+ } -+ -+ @Override -+ protected WorldConfigurations createWorldConfigInstance(final ContextMap contextMap) { -+ return new WorldConfigurations(contextMap.require(WORLD_KEY)); -+ } -+ -+ protected static ConfigurationOptions defaultGlobalOptions(final ConfigurationOptions options) { -+ return options.header(GLOBAL_HEADER); -+ } -+ -+ @VisibleForTesting -+ static ConfigurationNode createForTesting() { -+ ObjectMapper.Factory factory = defaultGlobalFactoryBuilder(ObjectMapper.factoryBuilder()).build(); -+ ConfigurationOptions options = defaultGlobalOptions(defaultOptions(ConfigurationOptions.defaults())) -+ .serializers(builder -> builder.register(type -> ConfigurationPart.class.isAssignableFrom(erase(type)), factory.asTypeSerializer())); -+ return BasicConfigurationNode.root(options); -+ } -+ -+ public static boolean optimize() { -+ return OPTIMIZE; -+ } -+ -+} -diff --git a/src/main/java/org/plazmamc/plazma/configurations/RemovedConfigurations.java b/src/main/java/org/plazmamc/plazma/configurations/RemovedConfigurations.java -new file mode 100644 -index 0000000000000000000000000000000000000000..25c0f5d28107b45677aa7b19bc0d5238512d9826 ---- /dev/null -+++ b/src/main/java/org/plazmamc/plazma/configurations/RemovedConfigurations.java -@@ -0,0 +1,13 @@ -+package org.plazmamc.plazma.configurations; -+ -+import org.spongepowered.configurate.NodePath; -+ -+interface RemovedConfigurations { -+ -+ NodePath[] WORLD_PATHS = { -+ }; -+ -+ NodePath[] GLOBAL_PATHS = { -+ }; -+ -+} -diff --git a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -new file mode 100644 -index 0000000000000000000000000000000000000000..f2d3d51cb4b8fc7a5fd6db1a63289fff6d32a1ea ---- /dev/null -+++ b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -@@ -0,0 +1,22 @@ -+package org.plazmamc.plazma.configurations; -+ -+import io.papermc.paper.configuration.Configuration; -+import io.papermc.paper.configuration.ConfigurationPart; -+import net.minecraft.resources.ResourceLocation; -+import org.spongepowered.configurate.objectmapping.meta.Setting; -+ -+@SuppressWarnings({"CanBeFinal", "FieldCanBeLocal", "FieldMayBeFinal", "InnerClassMayBeStatic"}) -+public class WorldConfigurations extends ConfigurationPart { -+ -+ static final int VERSION = 2; -+ static final boolean OPTIMIZE = PlazmaConfigurations.optimize(); -+ -+ private transient final ResourceLocation worldKey; -+ public WorldConfigurations(ResourceLocation worldKey) { -+ this.worldKey = worldKey; -+ } -+ -+ @Setting(Configuration.VERSION_FIELD) -+ int version = VERSION; -+ -+} -diff --git a/src/main/java/plazma/Config.java b/src/main/java/plazma/Config.java -new file mode 100644 -index 0000000000000000000000000000000000000000..dbba467f668600ef3dcc653d9bfe1f712c69e245 ---- /dev/null -+++ b/src/main/java/plazma/Config.java -@@ -0,0 +1,21 @@ -+package plazma; -+ -+import org.jetbrains.annotations.Contract; -+import org.jspecify.annotations.NonNull; -+import org.plazmamc.plazma.configurations.GlobalConfiguration; -+import org.plazmamc.plazma.configurations.PlazmaConfigurations; -+import java.util.List; -+ -+public interface Config { -+ -+ @Contract(pure = true) -+ static boolean optimize() { -+ return PlazmaConfigurations.optimize(); -+ } -+ -+ @Contract(pure = true) -+ static @NonNull GlobalConfiguration get() { -+ return GlobalConfiguration.get(); -+ } -+ -+} diff --git a/src/test/java/org/bukkit/support/DummyServerHelper.java b/src/test/java/org/bukkit/support/DummyServerHelper.java index 309d371247adcddf0a1b370cc5faff3e6e01cb0f..285a90ff5cdc8cb28fafd4ea3dae306ae5b899c9 100644 --- a/src/test/java/org/bukkit/support/DummyServerHelper.java diff --git a/patches/server/0009-Setup-basic-configuration-sections.patch b/patches/server/0009-Setup-basic-configuration-sections.patch deleted file mode 100644 index 9bd7022..0000000 --- a/patches/server/0009-Setup-basic-configuration-sections.patch +++ /dev/null @@ -1,146 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Sun, 5 Nov 2023 10:47:05 +0900 -Subject: [PATCH] Setup basic configuration sections - - -diff --git a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java -index b638690d5cd2360444e6c525f97f634d8e1dc60e..e89534b6e2b91483d7eddfcb3441e9addf9bccc7 100644 ---- a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java -+++ b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java -@@ -6,6 +6,7 @@ import it.unimi.dsi.fastutil.objects.Reference2ObjectMap; - import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; - import net.minecraft.Util; - import org.jetbrains.annotations.NotNull; -+import org.spongepowered.configurate.objectmapping.meta.PostProcess; - import org.spongepowered.configurate.objectmapping.meta.Setting; - import java.util.List; - -@@ -27,4 +28,61 @@ public class GlobalConfiguration extends ConfigurationPart { - @Setting(Configuration.VERSION_FIELD) - int version = VERSION; - -+ public Messages messages; -+ public class Messages extends ConfigurationPart { -+ -+ -+ } -+ -+ public Command command; -+ public class Command extends ConfigurationPart { -+ -+ -+ } -+ -+ public Player player; -+ public class Player extends ConfigurationPart { -+ -+ -+ } -+ -+ @Setting("world-generation") -+ public WorldGeneration worldgen; -+ public class WorldGeneration extends ConfigurationPart { -+ -+ -+ } -+ -+ public Entity entity; -+ public class Entity extends ConfigurationPart { -+ -+ -+ @PostProcess -+ public void post() { -+ } -+ -+ } -+ -+ public World world; -+ public class World extends ConfigurationPart { -+ -+ -+ @PostProcess -+ public void post() { -+ } -+ -+ } -+ -+ public Structure structure; -+ public class Structure extends ConfigurationPart { -+ -+ -+ } -+ -+ public Miscellaneous misc; -+ public class Miscellaneous extends ConfigurationPart { -+ -+ -+ } -+ - } -diff --git a/src/main/java/org/plazmamc/plazma/configurations/RemovedConfigurations.java b/src/main/java/org/plazmamc/plazma/configurations/RemovedConfigurations.java -index 25c0f5d28107b45677aa7b19bc0d5238512d9826..ac0f038de0ce5cf6df0b730af69d3229c3119eff 100644 ---- a/src/main/java/org/plazmamc/plazma/configurations/RemovedConfigurations.java -+++ b/src/main/java/org/plazmamc/plazma/configurations/RemovedConfigurations.java -@@ -2,9 +2,12 @@ package org.plazmamc.plazma.configurations; - - import org.spongepowered.configurate.NodePath; - -+import static org.spongepowered.configurate.NodePath.path; -+ - interface RemovedConfigurations { - - NodePath[] WORLD_PATHS = { -+ path("structure", "nether-portal") - }; - - NodePath[] GLOBAL_PATHS = { -diff --git a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -index f2d3d51cb4b8fc7a5fd6db1a63289fff6d32a1ea..c222d58520b655b54b8975ec226a4ba948691cd4 100644 ---- a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -+++ b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -@@ -19,4 +19,44 @@ public class WorldConfigurations extends ConfigurationPart { - @Setting(Configuration.VERSION_FIELD) - int version = VERSION; - -+ public Miscellaneous misc; -+ public class Miscellaneous extends ConfigurationPart { -+ -+ -+ } -+ -+ public Entity entity; -+ public class Entity extends ConfigurationPart { -+ -+ public Phantom phantom; -+ public class Phantom extends ConfigurationPart { -+ -+ -+ } -+ -+ } -+ -+ public Structure structure; -+ public class Structure extends ConfigurationPart { -+ -+ public NetherPortal netherPortal; -+ public class NetherPortal extends ConfigurationPart { -+ -+ -+ } -+ -+ } -+ -+ public Block block; -+ public class Block extends ConfigurationPart { -+ -+ -+ } -+ -+ public Item item; -+ public class Item extends ConfigurationPart { -+ -+ -+ } -+ - } diff --git a/patches/server/0011-Add-more-metrics.patch b/patches/server/0011-Add-more-metrics.patch deleted file mode 100644 index 4e7884c..0000000 --- a/patches/server/0011-Add-more-metrics.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Sun, 5 Nov 2023 10:26:26 +0900 -Subject: [PATCH] Add more metrics - - -diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index b58f4eb26ce6bd6696b3289b5f199ab8f0ff28b6..6ab720b65dec49092addbaf967c77682bd304096 100644 ---- a/src/main/java/com/destroystokyo/paper/Metrics.java -+++ b/src/main/java/com/destroystokyo/paper/Metrics.java -@@ -635,38 +635,59 @@ public class Metrics { - return map; - })); - -- metrics.addCustomChart(new Metrics.DrilldownPie("legacy_plugins", () -> { -- Map> map = new HashMap<>(); -+ // Plazma start - Add more metrics information -+ metrics.addCustomChart(new DrilldownPie("datapacks", () -> { -+ int datapacks = Bukkit.getDatapackManager().getEnabledPacks().size(); -+ Map entry = Collections.singletonMap(String.valueOf(datapacks), 1); -+ -+ if (datapacks == 0) return Collections.singletonMap("0", entry); -+ else if (datapacks <= 5) return Collections.singletonMap("1-5", entry); -+ else if (datapacks <= 10) return Collections.singletonMap("6-10", entry); -+ else if (datapacks <= 25) return Collections.singletonMap("11-25", entry); -+ else if (datapacks <= 50) return Collections.singletonMap("26-50", entry); -+ else if (datapacks <= 100) return Collections.singletonMap("51+", entry); -+ else return Collections.singletonMap("101+ \uD83D\uDE2E", entry); -+ })); - -- // count legacy plugins -- int legacy = 0; -- for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) { -- if (CraftMagicNumbers.isLegacy(plugin.getDescription())) { -- legacy++; -- } -- } -+ metrics.addCustomChart(new DrilldownPie("plugins", () -> { -+ int pluginCount = Arrays.stream(Bukkit.getPluginManager().getPlugins()).filter(Plugin::isEnabled).toList().size(); -+ Map entry = Collections.singletonMap(String.valueOf(pluginCount), 1); -+ -+ if (pluginCount == 0) return Collections.singletonMap("0", entry); -+ else if (pluginCount <= 5) return Collections.singletonMap("1-5", entry); -+ else if (pluginCount <= 10) return Collections.singletonMap("6-10", entry); -+ else if (pluginCount <= 25) return Collections.singletonMap("11-25", entry); -+ else if (pluginCount <= 50) return Collections.singletonMap("26-50", entry); -+ else if (pluginCount <= 100) return Collections.singletonMap("51-100", entry); -+ else return Collections.singletonMap("101+ \uD83D\uDE2E", entry); -+ })); - -- // insert real value as lower dimension -- Map entry = new HashMap<>(); -- entry.put(String.valueOf(legacy), 1); -- -- // create buckets as higher dimension -- if (legacy == 0) { -- map.put("0 \uD83D\uDE0E", entry); // :sunglasses: -- } else if (legacy <= 5) { -- map.put("1-5", entry); -- } else if (legacy <= 10) { -- map.put("6-10", entry); -- } else if (legacy <= 25) { -- map.put("11-25", entry); -- } else if (legacy <= 50) { -- map.put("26-50", entry); -- } else { -- map.put("50+ \uD83D\uDE2D", entry); // :cry: -- } -+ metrics.addCustomChart(new DrilldownPie("disabled_plugins", () -> { -+ int disabled = Arrays.stream(Bukkit.getPluginManager().getPlugins()).filter(it -> !it.isEnabled()).toList().size(); -+ Map entry = Collections.singletonMap(String.valueOf(disabled), 1); -+ -+ if (disabled == 0) return Collections.singletonMap("0 \uD83D\uDE0E", entry); // :sunglasses: -+ else if (disabled <= 5) return Collections.singletonMap("1-5", entry); -+ else if (disabled <= 10) return Collections.singletonMap("6-10", entry); -+ else if (disabled <= 25) return Collections.singletonMap("11-25", entry); -+ else if (disabled <= 50) return Collections.singletonMap("26-50", entry); -+ else if (disabled <= 100) return Collections.singletonMap("51-100 \uD83D\uDE2D", entry); // :cry: -+ else return Collections.singletonMap("101+ \uD83D\uDC80", entry); // :skull: -+ })); - -- return map; -+ metrics.addCustomChart(new Metrics.DrilldownPie("legacy_plugins", () -> { -+ int legacy = (int) Arrays.stream(Bukkit.getPluginManager().getPlugins()).filter(p -> CraftMagicNumbers.isLegacy(p.getDescription())).count(); // Plazma -+ Map entry = Collections.singletonMap(String.valueOf(legacy), 1); -+ -+ if (legacy == 0) return Collections.singletonMap("0 \uD83D\uDE0E", entry); // :sunglasses: -+ else if (legacy <= 5) return Collections.singletonMap("1-5", entry); -+ else if (legacy <= 10) return Collections.singletonMap("6-10", entry); -+ else if (legacy <= 25) return Collections.singletonMap("11-25", entry); -+ else if (legacy <= 50) return Collections.singletonMap("26-50", entry); -+ else if (legacy <= 100) return Collections.singletonMap("51-100 \uD83D\uDE2D", entry); // :cry: -+ else return Collections.singletonMap("101+ \uD83D\uDC80", entry); // :skull: - })); -+ // Plazma end - Add more metrics information - } - - } diff --git a/plazma-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch b/plazma-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch new file mode 100644 index 0000000..faeae90 --- /dev/null +++ b/plazma-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/server/MinecraftServer.java ++++ b/net/minecraft/server/MinecraftServer.java +@@ -1777,7 +_,7 @@ + + profilerFiller.pop(); + profilerFiller.pop(); +- serverLevel.explosionDensityCache.clear(); // Paper - Optimize explosions ++ serverLevel.clearExplosionDensityCache(); // Paper - Optimize explosions // Plazma - package-private + } + this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked + diff --git a/plazma-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch b/plazma-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch index 6132077..838ce6b 100644 --- a/plazma-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch +++ b/plazma-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch @@ -1,6 +1,37 @@ --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -171,6 +_,7 @@ +@@ -108,13 +_,6 @@ + public static final ResourceKey OVERWORLD = ResourceKey.create(Registries.DIMENSION, ResourceLocation.withDefaultNamespace("overworld")); + public static final ResourceKey NETHER = ResourceKey.create(Registries.DIMENSION, ResourceLocation.withDefaultNamespace("the_nether")); + public static final ResourceKey END = ResourceKey.create(Registries.DIMENSION, ResourceLocation.withDefaultNamespace("the_end")); +- public static final int MAX_LEVEL_SIZE = 30000000; +- public static final int LONG_PARTICLE_CLIP_RANGE = 512; +- public static final int SHORT_PARTICLE_CLIP_RANGE = 32; +- public static final int MAX_BRIGHTNESS = 15; +- public static final int TICKS_PER_DAY = 24000; +- public static final int MAX_ENTITY_SPAWN_Y = 20000000; +- public static final int MIN_ENTITY_SPAWN_Y = -20000000; + public final List blockEntityTickers = Lists.newArrayList(); // Paper - public + protected final NeighborUpdater neighborUpdater; + private final List pendingBlockEntityTickers = Lists.newArrayList(); +@@ -123,7 +_,7 @@ + private final boolean isDebug; + private int skyDarken; + protected int randValue = RandomSource.create().nextInt(); +- protected final int addend = 1013904223; ++ //protected final int addend = 1013904223; + protected float oRainLevel; + public float rainLevel; + protected float oThunderLevel; +@@ -152,6 +_,7 @@ + public boolean isBlockPlaceCancelled = false; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent + public Map capturedBlockStates = new java.util.LinkedHashMap<>(); // Paper + public Map capturedTileEntities = new java.util.LinkedHashMap<>(); // Paper - Retain block place order when capturing blockstates ++ @Nullable // Plazma - Null safety + public List captureDrops; + public final it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap ticksPerSpawnCategory = new it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap<>(); + // Paper start +@@ -171,11 +_,13 @@ public final io.papermc.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur - Purpur config files @@ -8,3 +39,571 @@ public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; private org.spigotmc.TickLimiter tileLimiter; +- private int tileTickPosition; +- public final Map explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions ++ //private int tileTickPosition; ++ final Map explosionDensityCache = new HashMap<>(); public final void clearExplosionDensityCache() { this.explosionDensityCache.clear(); } // Paper - Optimize explosions // Plazma - public -> package-private ++ @Nullable // Plazma - Null safety + public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here + + // Purpur start - Add adjustable breeding cooldown to config +@@ -197,21 +_,12 @@ + this.playerBreedingCooldowns.put(new BreedingCooldownPair(player, animalType), new Object()); + } + +- private static final class BreedingCooldownPair { +- private final java.util.UUID playerUUID; +- private final Class animalType; +- +- public BreedingCooldownPair(java.util.UUID playerUUID, Class animalType) { +- this.playerUUID = playerUUID; +- this.animalType = animalType; +- } +- ++ private record BreedingCooldownPair(java.util.UUID playerUUID, Class animalType) { // Plazma - Use record instead + @Override + public boolean equals(Object o) { + if (this == o) return true; +- if (o == null || getClass() != o.getClass()) return false; +- BreedingCooldownPair that = (BreedingCooldownPair) o; +- return playerUUID.equals(that.playerUUID) && animalType.equals(that.animalType); ++ if (!(o instanceof BreedingCooldownPair(java.util.UUID uuid, Class type))) return false; // Plazma - Use record instead ++ return playerUUID.equals(uuid) && animalType.equals(type); // Plazma - Use record instead + } + + @Override +@@ -219,7 +_,6 @@ + return java.util.Objects.hash(playerUUID, animalType); + } + } +- // Purpur end - Add adjustable breeding cooldown to config + + public CraftWorld getWorld() { + return this.world; +@@ -228,12 +_,14 @@ + public CraftServer getCraftServer() { + return (CraftServer) Bukkit.getServer(); + } ++ + // Paper start - Use getChunkIfLoadedImmediately + @Override + public boolean hasChunk(int chunkX, int chunkZ) { + return this.getChunkIfLoaded(chunkX, chunkZ) != null; + } + // Paper end - Use getChunkIfLoadedImmediately ++ + // Paper start - per world ticks per spawn + private int getTicksPerSpawn(SpawnCategory spawnCategory) { + final int perWorld = this.paperConfig().entities.spawning.ticksPerSpawn.getInt(CraftSpawnCategory.toNMS(spawnCategory)); +@@ -248,12 +_,13 @@ + public abstract ResourceKey getTypeKey(); + + // Paper start - rewrite chunk system ++ @Nullable // Plazma - Null safety + private ca.spottedleaf.moonrise.patches.chunk_system.level.entity.EntityLookup entityLookup; + private final ca.spottedleaf.concurrentutil.map.ConcurrentLong2ReferenceChainedHashTable chunkData = new ca.spottedleaf.concurrentutil.map.ConcurrentLong2ReferenceChainedHashTable<>(); + + @Override + public final ca.spottedleaf.moonrise.patches.chunk_system.level.entity.EntityLookup moonrise$getEntityLookup() { +- return this.entityLookup; ++ return java.util.Objects.requireNonNull(this.entityLookup, "Entity lookup not initialised"); // Plazma - Null safety + } + + @Override +@@ -366,7 +_,7 @@ + */ + @Override + public ChunkAccess getChunk(final int x, final int z, final ChunkStatus status) { +- return ((Level)(Object)this).getChunk(x, z, status, true); ++ return this.getChunk(x, z, status, true); // Plazma - Remove unnecessary type casting + } + + @Override +@@ -990,7 +_,7 @@ + return true; + } + +- voxelshape = voxelshape.move((double) position.getX(), (double) position.getY(), (double) position.getZ()); ++ voxelshape = voxelshape.move(position.getX(), position.getY(), position.getZ()); // Plazma - Remove unnecessary type casting + if (voxelshape.isEmpty()) { + return true; + } +@@ -1160,130 +_,110 @@ + return true; + } + // CraftBukkit end ++ ++ // Plazma start - Improve code quality + if (this.isOutsideBuildHeight(pos)) { + return false; +- } else if (!this.isClientSide && this.isDebug()) { ++ } ++ ++ if (!this.isClientSide && this.isDebug()) { + return false; +- } else { +- LevelChunk chunkAt = this.getChunkAt(pos); +- Block block = state.getBlock(); +- // CraftBukkit start - capture blockstates +- boolean captured = false; +- if (this.captureBlockStates && !this.capturedBlockStates.containsKey(pos)) { +- CraftBlockState blockstate = (CraftBlockState) world.getBlockAt(pos.getX(), pos.getY(), pos.getZ()).getState(); // Paper - use CB getState to get a suitable snapshot +- blockstate.setFlag(flags); // Paper - set flag +- this.capturedBlockStates.put(pos.immutable(), blockstate); +- captured = true; ++ } ++ ++ LevelChunk chunkAt = this.getChunkAt(pos); ++ // CraftBukkit start - capture blockstates ++ boolean captured = false; ++ if (this.captureBlockStates && !this.capturedBlockStates.containsKey(pos)) { ++ CraftBlockState blockstate = (CraftBlockState) world.getBlockAt(pos.getX(), pos.getY(), pos.getZ()).getState(); // Paper - use CB getState to get a suitable snapshot ++ blockstate.setFlag(flags); // Paper - set flag ++ this.capturedBlockStates.put(pos.immutable(), blockstate); ++ captured = true; ++ } ++ // CraftBukkit end ++ ++ BlockState blockState = chunkAt.setBlockState(pos, state, (flags & 64) != 0, (flags & 1024) == 0); // CraftBukkit custom NO_PLACE flag ++ this.chunkPacketBlockController.onBlockChange(this, pos, state, blockState, flags, recursionLeft); // Paper - Anti-Xray ++ ++ if (blockState == null) { ++ // CraftBukkit start - remove blockstate if failed (or the same) ++ if (this.captureBlockStates && captured) { ++ this.capturedBlockStates.remove(pos); + } + // CraftBukkit end +- +- BlockState blockState = chunkAt.setBlockState(pos, state, (flags & 64) != 0, (flags & 1024) == 0); // CraftBukkit custom NO_PLACE flag +- this.chunkPacketBlockController.onBlockChange(this, pos, state, blockState, flags, recursionLeft); // Paper - Anti-Xray +- +- if (blockState == null) { +- // CraftBukkit start - remove blockstate if failed (or the same) +- if (this.captureBlockStates && captured) { +- this.capturedBlockStates.remove(pos); +- } +- // CraftBukkit end +- return false; +- } else { +- BlockState blockState1 = this.getBlockState(pos); +- /* +- if (blockState1 == state) { +- if (blockState != blockState1) { +- this.setBlocksDirty(pos, blockState, blockState1); +- } +- +- if ((flags & 2) != 0 +- && (!this.isClientSide || (flags & 4) == 0) +- && (this.isClientSide || chunkAt.getFullStatus() != null && chunkAt.getFullStatus().isOrAfter(FullChunkStatus.BLOCK_TICKING))) { +- this.sendBlockUpdated(pos, blockState, state, flags); +- } +- +- if ((flags & 1) != 0) { +- this.blockUpdated(pos, blockState.getBlock()); +- if (!this.isClientSide && state.hasAnalogOutputSignal()) { +- this.updateNeighbourForOutputSignal(pos, block); +- } +- } +- +- if ((flags & 16) == 0 && recursionLeft > 0) { +- int i = flags & -34; +- blockState.updateIndirectNeighbourShapes(this, pos, i, recursionLeft - 1); +- state.updateNeighbourShapes(this, pos, i, recursionLeft - 1); +- state.updateIndirectNeighbourShapes(this, pos, i, recursionLeft - 1); +- } +- +- this.onBlockStateChange(pos, blockState, blockState1); +- } +- */ +- +- // CraftBukkit start +- if (!this.captureBlockStates) { // Don't notify clients or update physics while capturing blockstates +- // Modularize client and physic updates +- // Spigot start +- try { +- this.notifyAndUpdatePhysics(pos, chunkAt, blockState, state, blockState1, flags, recursionLeft); +- } catch (StackOverflowError ex) { +- Level.lastPhysicsProblem = new BlockPos(pos); +- } +- // Spigot end +- } +- // CraftBukkit end +- ++ return false; ++ } else { ++ BlockState blockState1 = this.getBlockState(pos); ++ ++ // CraftBukkit start ++ if (this.captureBlockStates) { // Don't notify clients or update physics while capturing blockstates + return true; + } ++ ++ // Modularize client and physic updates ++ // Spigot start ++ try { ++ this.notifyAndUpdatePhysics(pos, chunkAt, blockState, state, blockState1, flags, recursionLeft); ++ } catch (StackOverflowError ex) { ++ Level.lastPhysicsProblem = new BlockPos(pos); ++ } ++ // Spigot end ++ // CraftBukkit end ++ ++ return true; + } ++ // Plazma end - Improve code quality + } + + // CraftBukkit start - Split off from above in order to directly send client and physic updates +- public void notifyAndUpdatePhysics(BlockPos blockposition, LevelChunk chunk, BlockState oldBlock, BlockState newBlock, BlockState actualBlock, int i, int j) { +- BlockState iblockdata = newBlock; +- BlockState iblockdata1 = oldBlock; +- BlockState iblockdata2 = actualBlock; +- if (iblockdata2 == iblockdata) { +- if (iblockdata1 != iblockdata2) { +- this.setBlocksDirty(blockposition, iblockdata1, iblockdata2); +- } +- +- if ((i & 2) != 0 && (!this.isClientSide || (i & 4) == 0) && (this.isClientSide || chunk == null || (chunk.getFullStatus() != null && chunk.getFullStatus().isOrAfter(FullChunkStatus.FULL)))) { // allow chunk to be null here as chunk.isReady() is false when we send our notification during block placement // Paper - rewrite chunk system - change from ticking to full +- this.sendBlockUpdated(blockposition, iblockdata1, iblockdata, i); +- } +- +- if ((i & 1) != 0) { +- this.blockUpdated(blockposition, iblockdata1.getBlock()); +- if (!this.isClientSide && iblockdata.hasAnalogOutputSignal()) { +- this.updateNeighbourForOutputSignal(blockposition, newBlock.getBlock()); +- } +- } +- +- if ((i & 16) == 0 && j > 0) { +- int k = i & -34; +- +- // CraftBukkit start +- iblockdata1.updateIndirectNeighbourShapes(this, blockposition, k, j - 1); // Don't call an event for the old block to limit event spam +- CraftWorld world = ((ServerLevel) this).getWorld(); +- boolean cancelledUpdates = false; // Paper - Fix block place logic +- if (world != null && ((ServerLevel)this).hasPhysicsEvent) { // Paper - BlockPhysicsEvent +- BlockPhysicsEvent event = new BlockPhysicsEvent(world.getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()), CraftBlockData.fromData(iblockdata)); +- this.getCraftServer().getPluginManager().callEvent(event); +- +- cancelledUpdates = event.isCancelled(); // Paper - Fix block place logic +- } +- // CraftBukkit end +- if (!cancelledUpdates) { // Paper - Fix block place logic +- iblockdata.updateNeighbourShapes(this, blockposition, k, j - 1); +- iblockdata.updateIndirectNeighbourShapes(this, blockposition, k, j - 1); +- } // Paper - Fix block place logic +- } +- +- // CraftBukkit start - SPIGOT-5710 +- if (!this.preventPoiUpdated) { +- this.onBlockStateChange(blockposition, iblockdata1, iblockdata2); ++ public void notifyAndUpdatePhysics(BlockPos blockPos, LevelChunk chunk, BlockState oldBlock, BlockState newBlock, BlockState actualBlock, int i, int j) { ++ // Plazma start - Improve code quality ++ if (actualBlock != newBlock) { ++ return; ++ } ++ ++ if (oldBlock != actualBlock) { ++ this.setBlocksDirty(blockPos, oldBlock, actualBlock); ++ } ++ ++ if ((i & 2) != 0 && (!this.isClientSide || (i & 4) == 0) && (this.isClientSide || chunk == null || (chunk.getFullStatus() != null && chunk.getFullStatus().isOrAfter(FullChunkStatus.FULL)))) { // allow chunk to be null here as chunk.isReady() is false when we send our notification during block placement // Paper - rewrite chunk system - change from ticking to full ++ this.sendBlockUpdated(blockPos, oldBlock, newBlock, i); ++ } ++ ++ if ((i & 1) != 0) { ++ this.blockUpdated(blockPos, oldBlock.getBlock()); ++ if (!this.isClientSide && newBlock.hasAnalogOutputSignal()) { ++ this.updateNeighbourForOutputSignal(blockPos, newBlock.getBlock()); ++ } ++ } ++ ++ if ((i & 16) == 0 && j > 0) { ++ int k = i & -34; ++ ++ // CraftBukkit start ++ oldBlock.updateIndirectNeighbourShapes(this, blockPos, k, j - 1); // Don't call an event for the old block to limit event spam ++ boolean cancelledUpdates = false; // Paper - Fix block place logic ++ ++ final CraftWorld world = this.getWorld(); // Plazma - Remove unnecessary type casting ++ if (world != null && ((ServerLevel)this).hasPhysicsEvent) { // Paper - BlockPhysicsEvent ++ BlockPhysicsEvent event = new BlockPhysicsEvent(world.getBlockAt(blockPos.getX(), blockPos.getY(), blockPos.getZ()), CraftBlockData.fromData(newBlock)); ++ this.getCraftServer().getPluginManager().callEvent(event); ++ ++ cancelledUpdates = event.isCancelled(); // Paper - Fix block place logic + } + // CraftBukkit end +- } ++ ++ if (!cancelledUpdates) { // Paper - Fix block place logic ++ newBlock.updateNeighbourShapes(this, blockPos, k, j - 1); ++ newBlock.updateIndirectNeighbourShapes(this, blockPos, k, j - 1); ++ } // Paper - Fix block place logic ++ } ++ ++ // CraftBukkit start - SPIGOT-5710 ++ if (!this.preventPoiUpdated) { ++ this.onBlockStateChange(blockPos, oldBlock, actualBlock); ++ } ++ // CraftBukkit end ++ // Plazma end - Improve code quality + } + // CraftBukkit end + +@@ -1518,21 +_,19 @@ + int tickedEntities = 0; // Paper - rewrite chunk system + var toRemove = new it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet(); // Paper - Fix MC-117075; use removeAll + toRemove.add(null); // Paper - Fix MC-117075 +- for (tileTickPosition = 0; tileTickPosition < this.blockEntityTickers.size(); tileTickPosition++) { // Paper - Disable tick limiters +- this.tileTickPosition = (this.tileTickPosition < this.blockEntityTickers.size()) ? this.tileTickPosition : 0; +- TickingBlockEntity tickingBlockEntity = this.blockEntityTickers.get(this.tileTickPosition); +- // Spigot end ++ // Plazma start - Improve code quality ++ for (TickingBlockEntity tickingBlockEntity : this.blockEntityTickers) { // Paper - Disable tick limiters + if (tickingBlockEntity.isRemoved()) { + toRemove.add(tickingBlockEntity); // Paper - Fix MC-117075; use removeAll +- } else if (runsNormally && this.shouldTickBlocksAt(tickingBlockEntity.getPos())) { +- tickingBlockEntity.tick(); +- // Paper start - rewrite chunk system +- if ((++tickedEntities & 7) == 0) { +- ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)(Level)(Object)this).moonrise$midTickTasks(); +- } +- // Paper end - rewrite chunk system ++ continue; + } ++ ++ if (!runsNormally || this.shouldTickBlocksAt(tickingBlockEntity.getPos())) continue; ++ ++ tickingBlockEntity.tick(); ++ if ((++tickedEntities & 7) == 0) this.moonrise$midTickTasks(); // Paper - rewrite chunk system + } ++ // Plazma end - Improve code quality + this.blockEntityTickers.removeAll(toRemove); // Paper - Fix MC-117075 + + this.tickingBlockEntities = false; +@@ -1561,11 +_,11 @@ + return false; + // Paper start - optimise collisions + final int flags = entity == null ? (ca.spottedleaf.moonrise.patches.collisions.CollisionUtil.COLLISION_FLAG_CHECK_BORDER | ca.spottedleaf.moonrise.patches.collisions.CollisionUtil.COLLISION_FLAG_CHECK_ONLY) : ca.spottedleaf.moonrise.patches.collisions.CollisionUtil.COLLISION_FLAG_CHECK_ONLY; +- if (ca.spottedleaf.moonrise.patches.collisions.CollisionUtil.getCollisionsForBlocksOrWorldBorder((Level)(Object)this, entity, box, null, null, flags, null)) { ++ if (ca.spottedleaf.moonrise.patches.collisions.CollisionUtil.getCollisionsForBlocksOrWorldBorder(this, entity, box, null, null, flags, null)) { // Plazma - Remove unnecessary type casting + return false; + } + +- return !ca.spottedleaf.moonrise.patches.collisions.CollisionUtil.getEntityHardCollisions((Level)(Object)this, entity, box, null, flags, null); ++ return !ca.spottedleaf.moonrise.patches.collisions.CollisionUtil.getEntityHardCollisions(this, entity, box, null, flags, null); // Plazma - Remove unnecessary type casting + // Paper end - optimise collisions + } + // Paper end - Option to prevent armor stands from doing entity lookups +@@ -1750,7 +_,7 @@ + public void updateSkyBrightness() { + double d = 1.0 - this.getRainLevel(1.0F) * 5.0F / 16.0; + double d1 = 1.0 - this.getThunderLevel(1.0F) * 5.0F / 16.0; +- double d2 = 0.5 + 2.0 * Mth.clamp((double)Mth.cos(this.getTimeOfDay(1.0F) * (float) (Math.PI * 2)), -0.25, 0.25); ++ double d2 = 0.5 + 2.0 * Mth.clamp(Mth.cos(this.getTimeOfDay(1.0F) * (float) (Math.PI * 2)), -0.25, 0.25); // Plazma - Remove unnecessary type casting + this.skyDarken = (int)((1.0 - d2 * d * d1) * 11.0); + } + +@@ -1774,12 +_,13 @@ + } + + protected void prepareWeather() { +- if (this.levelData.isRaining()) { +- this.rainLevel = 1.0F; +- if (this.levelData.isThundering()) { +- this.thunderLevel = 1.0F; +- } +- } ++ // Plazma start - Improve code quality ++ if (!this.levelData.isRaining()) return; ++ this.rainLevel = 1F; ++ ++ if (!this.levelData.isThundering()) return; ++ this.thunderLevel = 1F; ++ // Plazma end - Improve code quality + } + + @Override +@@ -1796,15 +_,11 @@ + @Override + public List getEntities(@Nullable Entity entity, AABB boundingBox, Predicate predicate) { + Profiler.get().incrementCounter("getEntities"); +- List list = Lists.newArrayList(); + + // Paper start - rewrite chunk system + final List ret = new java.util.ArrayList<>(); +- +- ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(entity, boundingBox, ret, predicate); +- +- ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities((Level)(Object)this, entity, boundingBox, predicate, ret); +- ++ this.moonrise$getEntityLookup().getEntities(entity, boundingBox, ret, predicate); // Plazma - Remove unnecessary type casting ++ ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities(this, entity, boundingBox, predicate, ret); // Plazma - Remove unnecessary type casting + return ret; + // Paper end - rewrite chunk system + } +@@ -1821,78 +_,68 @@ + } + + // Paper start - rewrite chunk system +- public void getEntities(final EntityTypeTest entityTypeTest, +- final AABB boundingBox, final Predicate predicate, +- final List into, final int maxCount) { ++ public void getEntities( ++ // Plazma start - Improve code quality ++ final @Nullable EntityTypeTest entityTypeTest, ++ final AABB boundingBox, ++ final @Nullable Predicate predicate, ++ final @Nullable List into, ++ final int maxCount ++ ) { + Profiler.get().incrementCounter("getEntities"); + + if (entityTypeTest instanceof net.minecraft.world.entity.EntityType byType) { + if (maxCount != Integer.MAX_VALUE) { +- ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(byType, boundingBox, into, predicate, maxCount); +- ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities((Level)(Object)this, entityTypeTest, boundingBox, predicate, into, maxCount); +- return; ++ this.moonrise$getEntityLookup().getEntities(byType, boundingBox, into, predicate, maxCount); + } else { +- ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(byType, boundingBox, into, predicate); +- ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities((Level)(Object)this, entityTypeTest, boundingBox, predicate, into, maxCount); +- return; ++ this.moonrise$getEntityLookup().getEntities(byType, boundingBox, into, predicate); + } ++ ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities(this, entityTypeTest, boundingBox, predicate, into, maxCount); ++ return; + } + + if (entityTypeTest == null) { + if (maxCount != Integer.MAX_VALUE) { +- ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities((Entity)null, boundingBox, (List)into, (Predicate)predicate, maxCount); +- ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities((Level)(Object)this, entityTypeTest, boundingBox, predicate, into, maxCount); +- return; ++ this.moonrise$getEntityLookup().getEntities(null, boundingBox, into, predicate, maxCount); + } else { +- ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities((Entity)null, boundingBox, (List)into, (Predicate)predicate); +- ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities((Level)(Object)this, entityTypeTest, boundingBox, predicate, into, maxCount); +- return; ++ this.moonrise$getEntityLookup().getEntities(null, boundingBox, into, predicate); + } ++ ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities(this, null, boundingBox, predicate, into, maxCount); ++ return; + } + + final Class base = entityTypeTest.getBaseClass(); + + final Predicate modifiedPredicate; + if (predicate == null) { +- modifiedPredicate = (final T obj) -> { +- return entityTypeTest.tryCast(obj) != null; +- }; ++ modifiedPredicate = (obj) -> entityTypeTest.tryCast(obj) != null; + } else { +- modifiedPredicate = (final Entity obj) -> { ++ modifiedPredicate = (obj) -> { + final T casted = entityTypeTest.tryCast(obj); +- if (casted == null) { +- return false; +- } +- +- return predicate.test(casted); ++ return casted != null && predicate.test(casted); + }; + } + +- if (base == null || base == Entity.class) { ++ if (base == Entity.class) { + if (maxCount != Integer.MAX_VALUE) { +- ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities((Entity)null, boundingBox, (List)into, (Predicate)modifiedPredicate, maxCount); +- ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities((Level)(Object)this, entityTypeTest, boundingBox, predicate, into, maxCount); +- return; ++ this.moonrise$getEntityLookup().getEntities(null, boundingBox, into, modifiedPredicate, maxCount); + } else { +- ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities((Entity)null, boundingBox, (List)into, (Predicate)modifiedPredicate); +- ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities((Level)(Object)this, entityTypeTest, boundingBox, predicate, into, maxCount); +- return; ++ this.moonrise$getEntityLookup().getEntities(null, boundingBox, into, modifiedPredicate); + } + } else { + if (maxCount != Integer.MAX_VALUE) { +- ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(base, null, boundingBox, (List)into, (Predicate)modifiedPredicate, maxCount); +- ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities((Level)(Object)this, entityTypeTest, boundingBox, predicate, into, maxCount); +- return; ++ this.moonrise$getEntityLookup().getEntities(base, null, boundingBox, (List) into, (Predicate) modifiedPredicate, maxCount); + } else { +- ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(base, null, boundingBox, (List)into, (Predicate)modifiedPredicate); +- ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities((Level)(Object)this, entityTypeTest, boundingBox, predicate, into, maxCount); +- return; ++ this.moonrise$getEntityLookup().getEntities(base, null, boundingBox, (List) into, (Predicate) modifiedPredicate); + } + } ++ ++ ca.spottedleaf.moonrise.common.PlatformHooks.get().addToGetEntities(this, entityTypeTest, boundingBox, predicate, into, maxCount); ++ // Plazma end - Improve code quality + } + + public org.bukkit.entity.Entity[] getChunkEntities(int chunkX, int chunkZ) { +- ca.spottedleaf.moonrise.patches.chunk_system.level.entity.ChunkEntitySlices slices = ((ServerLevel)this).moonrise$getEntityLookup().getChunk(chunkX, chunkZ); ++ ca.spottedleaf.moonrise.patches.chunk_system.level.entity.ChunkEntitySlices slices = this.moonrise$getEntityLookup().getChunk(chunkX, chunkZ); // Plazma - Remove unnecessary type casting + if (slices == null) { + return new org.bukkit.entity.Entity[0]; + } +@@ -1900,7 +_,7 @@ + List ret = new java.util.ArrayList<>(); + for (Entity entity : slices.getAllEntities()) { + org.bukkit.entity.Entity bukkit = entity.getBukkitEntity(); +- if (bukkit != null && bukkit.isValid()) { ++ if (bukkit.isValid()) { // Plazma - Not nullable + ret.add(bukkit); + } + } +@@ -2032,18 +_,20 @@ + public void updateNeighbourForOutputSignal(BlockPos pos, Block block) { + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos blockPos = pos.relative(direction); +- if (this.hasChunkAt(blockPos)) { +- BlockState blockState = this.getBlockState(blockPos); +- if (blockState.is(Blocks.COMPARATOR)) { +- this.neighborChanged(blockState, blockPos, block, null, false); +- } else if (blockState.isRedstoneConductor(this, blockPos)) { +- blockPos = blockPos.relative(direction); +- blockState = this.getBlockState(blockPos); +- if (blockState.is(Blocks.COMPARATOR)) { +- this.neighborChanged(blockState, blockPos, block, null, false); +- } ++ // Plazma start - Improve code quality ++ if (!this.hasChunkAt(blockPos)) continue; ++ ++ BlockState state = this.getBlockState(blockPos); ++ if (state.is(Blocks.COMPARATOR)) { ++ this.neighborChanged(state, blockPos, block, null, false); ++ } else if (state.isRedstoneConductor(this, blockPos)) { ++ blockPos = blockPos.relative(direction); ++ state = this.getBlockState(blockPos); ++ if (state.is(Blocks.COMPARATOR)) { ++ this.neighborChanged(state, blockPos, block, null, false); + } + } ++ // Plazma end - Improve code quality + } + } + +@@ -2145,16 +_,7 @@ + + public abstract FuelValues fuelValues(); + +- // Paper start - optimize redstone (Alternate Current) +- public alternate.current.wire.WireHandler getWireHandler() { +- // This method is overridden in ServerLevel. +- // Since Paper is a server platform there is no risk +- // of this implementation being called. It is here +- // only so this method can be called without casting +- // an instance of Level to ServerLevel. +- return null; +- } +- // Paper end - optimize redstone (Alternate Current) ++ public abstract alternate.current.wire.WireHandler getWireHandler(); // Paper - optimize redstone (Alternate Current) // Plazma - Use abstract instead + + public static enum ExplosionInteraction implements StringRepresentable { + NONE("none"), diff --git a/plazma-server/minecraft-patches/sources/net/minecraft/world/level/ServerExplosion.java.patch b/plazma-server/minecraft-patches/sources/net/minecraft/world/level/ServerExplosion.java.patch new file mode 100644 index 0000000..34b3524 --- /dev/null +++ b/plazma-server/minecraft-patches/sources/net/minecraft/world/level/ServerExplosion.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/world/level/ServerExplosion.java ++++ b/net/minecraft/world/level/ServerExplosion.java +@@ -791,10 +_,10 @@ + return this.getSeenFraction(vec3d, entity, this.directMappedBlockCache, this.mutablePos); // Paper - collision optimisations + } + CacheKey key = new CacheKey(this, entity.getBoundingBox()); +- Float blockDensity = this.level.explosionDensityCache.get(key); ++ Float blockDensity = ((Level) this.level).explosionDensityCache.get(key); // Plazma - package-private + if (blockDensity == null) { + blockDensity = this.getSeenFraction(vec3d, entity, this.directMappedBlockCache, this.mutablePos); // Paper - collision optimisations +- this.level.explosionDensityCache.put(key, blockDensity); ++ ((Level) this.level).explosionDensityCache.put(key, blockDensity); // Plazma - package-private + } + + return blockDensity; diff --git a/plazma-server/paper-patches/files/src/main/java/com/destroystokyo/paper/Metrics.java.patch b/plazma-server/paper-patches/files/src/main/java/com/destroystokyo/paper/Metrics.java.patch index f57b294..289fe44 100644 --- a/plazma-server/paper-patches/files/src/main/java/com/destroystokyo/paper/Metrics.java.patch +++ b/plazma-server/paper-patches/files/src/main/java/com/destroystokyo/paper/Metrics.java.patch @@ -1,5 +1,31 @@ --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java +@@ -41,7 +_,7 @@ + public static final int B_STATS_VERSION = 1; + + // The url to which the data is sent +- private static final String URL = "https://bStats.org/submitData/server-implementation"; ++ private static final java.net.URL URL; // Plazma + + // Should failed requests be logged? + private static boolean logFailedRequests = false; +@@ -58,6 +_,16 @@ + // A list with all custom charts + private final List charts = new ArrayList<>(); + ++ // Plazma start - Create a URL instance only once ++ static { ++ try { ++ URL = java.net.URI.create("https://bStats.org/submitData/server-implementation").toURL(); ++ } catch (final IOException e) { ++ throw new IllegalStateException(e); ++ } ++ } ++ // Plazma end - Create a URL instance only once ++ + /** + * Class constructor. + * @@ -109,7 +_,7 @@ } @@ -18,12 +44,20 @@ * * @return The server specific data. */ -@@ -186,7 +_,7 @@ +@@ -180,13 +_,13 @@ + * Sends the data to the bStats server. + * + * @param data The data to send. +- * @throws Exception If the request failed. ++ * @throws IOException If the request failed. + */ +- private static void sendData(JSONObject data) throws Exception { ++ private static void sendData(final JSONObject data) throws IOException { // Plazma if (data == null) { throw new IllegalArgumentException("Data cannot be null!"); } - HttpsURLConnection connection = (HttpsURLConnection) new URL(URL).openConnection(); -+ HttpsURLConnection connection = (HttpsURLConnection) new java.net.URI(URL).toURL().openConnection(); // Plazma - Use modern method ++ HttpsURLConnection connection = (HttpsURLConnection) URL.openConnection(); // Plazma - Use modern method // Compress the data to save bandwidth byte[] compressedData = compress(data.toString()); @@ -59,42 +93,293 @@ */ public static class SingleLineChart extends CustomChart { -@@ -576,12 +_,14 @@ - config.addDefault("logFailedRequests", false); +@@ -559,116 +_,182 @@ - // Inform the server owners about bStats + } + +- public static class PaperMetrics { +- public static void startMetrics() { ++ // Plazma start - PaperMetrics ++ public static final class PaperMetrics { ++ @org.jspecify.annotations.Nullable ++ private static Metrics loadMetrics(final io.papermc.paper.ServerBuildInfo build) { + // Get the config file +- File configFile = new File(new File((File) MinecraftServer.getServer().options.valueOf("plugins"), "bStats"), "config.yml"); +- YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile); ++ final File configFile = new File(new File((File) MinecraftServer.getServer().options.valueOf("plugins"), "bStats"), "config.yml"); ++ final YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile); + + // Check if the config file exists +- if (!config.isSet("serverUuid")) { +- +- // Add default values +- config.addDefault("enabled", true); +- // Every server gets it's unique random id. +- config.addDefault("serverUuid", UUID.randomUUID().toString()); +- // Should failed request be logged? +- config.addDefault("logFailedRequests", false); +- +- // Inform the server owners about bStats - config.options().header( - "bStats collects some data for plugin authors like how many servers are using their plugins.\n" + - "To honor their work, you should not disable it.\n" + - "This has nearly no effect on the server performance!\n" + - "Check out https://bStats.org/ to learn more :)" - ).copyDefaults(true); -+ // Plazma start - Use modern method -+ config.options().setHeader(List.of( -+ "bStats collects some data for plugin authors like how many servers are using their plugins.", -+ "To honor their work, you should not disable it.", -+ "This has nearly no effect on the server performance!", -+ "Check out https://bStats.org/ to learn more :)" -+ )).copyDefaults(true); -+ // Plazma end - Use modern method - try { - config.save(configFile); - } catch (IOException ignored) { -@@ -592,7 +_,7 @@ - boolean logFailedRequests = config.getBoolean("logFailedRequests", false); - // Only start Metrics, if it's enabled in the config - if (config.getBoolean("enabled", true)) { +- try { +- config.save(configFile); +- } catch (IOException ignored) { +- } +- } +- // Load the data +- String serverUUID = config.getString("serverUuid"); +- boolean logFailedRequests = config.getBoolean("logFailedRequests", false); +- // Only start Metrics, if it's enabled in the config +- if (config.getBoolean("enabled", true)) { - Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur - Purpur config files -+ Metrics metrics = new Metrics("Plazma", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur - Purpur config files // Plazma - Rebrand - - metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { - String minecraftVersion = Bukkit.getVersion(); -@@ -602,7 +_,7 @@ - - metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); - metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ? "bungee" : "offline"))); // Purpur - Purpur config files +- +- metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { +- String minecraftVersion = Bukkit.getVersion(); +- minecraftVersion = minecraftVersion.substring(minecraftVersion.indexOf("MC: ") + 4, minecraftVersion.length() - 1); +- return minecraftVersion; +- })); +- +- metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); +- metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ? "bungee" : "offline"))); // Purpur - Purpur config files - metrics.addCustomChart(new Metrics.SimplePie("purpur_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur - Purpur config files -+ metrics.addCustomChart(new Metrics.SimplePie("plazma_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur - Purpur config files // Plazma - Rebrand - - metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { - Map> map = new HashMap<>(); +- +- metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { +- Map> map = new HashMap<>(); +- String javaVersion = System.getProperty("java.version"); +- Map entry = new HashMap<>(); +- entry.put(javaVersion, 1); +- +- // http://openjdk.java.net/jeps/223 +- // Java decided to change their versioning scheme and in doing so modified the java.version system +- // property to return $major[.$minor][.$secuity][-ea], as opposed to 1.$major.0_$identifier +- // we can handle pre-9 by checking if the "major" is equal to "1", otherwise, 9+ +- String majorVersion = javaVersion.split("\\.")[0]; +- String release; +- +- int indexOf = javaVersion.lastIndexOf('.'); +- +- if (majorVersion.equals("1")) { +- release = "Java " + javaVersion.substring(0, indexOf); +- } else { +- // of course, it really wouldn't be all that simple if they didn't add a quirk, now would it +- // valid strings for the major may potentially include values such as -ea to deannotate a pre release +- Matcher versionMatcher = Pattern.compile("\\d+").matcher(majorVersion); +- if (versionMatcher.find()) { +- majorVersion = versionMatcher.group(0); +- } +- release = "Java " + majorVersion; +- } +- map.put(release, entry); +- +- return map; +- })); +- +- metrics.addCustomChart(new Metrics.DrilldownPie("legacy_plugins", () -> { +- Map> map = new HashMap<>(); +- +- // count legacy plugins +- int legacy = 0; +- for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) { +- if (CraftMagicNumbers.isLegacy(plugin.getDescription())) { +- legacy++; +- } +- } +- +- // insert real value as lower dimension +- Map entry = new HashMap<>(); +- entry.put(String.valueOf(legacy), 1); +- +- // create buckets as higher dimension +- if (legacy == 0) { +- map.put("0 \uD83D\uDE0E", entry); // :sunglasses: +- } else if (legacy <= 5) { +- map.put("1-5", entry); +- } else if (legacy <= 10) { +- map.put("6-10", entry); +- } else if (legacy <= 25) { +- map.put("11-25", entry); +- } else if (legacy <= 50) { +- map.put("26-50", entry); +- } else { +- map.put("50+ \uD83D\uDE2D", entry); // :cry: +- } +- +- return map; +- })); +- } +- ++ if (config.isSet("enabled")) { ++ // Return null if it's disabled in the config ++ if (!config.getBoolean("enabled", true)) { ++ return null; ++ } ++ ++ // Load the data ++ final String serverUUID = config.getString("serverUuid"); ++ final boolean logFailedRequests = config.getBoolean("logFailedRequests", false); ++ ++ return new Metrics(build.brandName(), serverUUID, logFailedRequests, Bukkit.getLogger()); ++ } ++ ++ // Add default values ++ config.addDefault("enabled", true); ++ ++ // Every server gets it's unique random id. ++ final String serverUUID = UUID.randomUUID().toString(); ++ config.addDefault("serverUuid", serverUUID); ++ ++ // Should a failed request be logged? ++ final boolean logFailedRequests = false; ++ config.addDefault("logFailedRequests", logFailedRequests); ++ ++ // Inform the server owners about bStats ++ config.options().setHeader(List.of( ++ "bStats collects some data for plugin authors like how many servers are using their plugins.", ++ "To honor their work, you should not disable it.", ++ "This has nearly no effect on the server performance!", ++ "Check out https://bStats.org/ to learn more :)" ++ )).copyDefaults(true); ++ ++ try { config.save(configFile); } catch (IOException ignored) {} ++ return new Metrics(build.brandName(), serverUUID, logFailedRequests, Bukkit.getLogger()); ++ } ++ ++ private static DrilldownPie cachedDrilldownPie(final String chartId, final Callable>> callable) { ++ try { ++ final Map> data = callable.call(); ++ return new Metrics.DrilldownPie(chartId, () -> data); ++ } catch (final Throwable t) { ++ if (logFailedRequests) { ++ logger.log(Level.WARNING, "Failed to get data for custom chart with id " + chartId, t); ++ } ++ return new Metrics.DrilldownPie(chartId, () -> null); ++ } ++ } ++ ++ public static void startMetrics() { ++ final io.papermc.paper.ServerBuildInfo build = io.papermc.paper.ServerBuildInfo.buildInfo(); ++ ++ // Load metrics from config ++ final Metrics metrics = loadMetrics(build); ++ if (metrics == null) { ++ return; ++ } ++ ++ final String minecraftVersion = build.minecraftVersionId(); ++ metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> minecraftVersion)); ++ ++ final String implementationVersion = (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown"; ++ metrics.addCustomChart(new Metrics.SimplePie("plazma_version", () -> implementationVersion)); ++ ++ final String authenticationMode = Bukkit.getOnlineMode() ? "online" : (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ? "bungee" : "offline"); ++ metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> authenticationMode)); ++ ++ metrics.addCustomChart(new Metrics.SingleLineChart("total_players", () -> Bukkit.getOfflinePlayers().length)); ++ metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); ++ ++ metrics.addCustomChart(cachedDrilldownPie("java_version", () -> { ++ String javaVersion = System.getProperty("java.version"); ++ ++ // http://openjdk.java.net/jeps/223 ++ // Java decided to change their versioning scheme and in doing so modified the java.version system ++ // property to return $major[.$minor][.$secuity][-ea], as opposed to 1.$major.0_$identifier ++ // we can handle pre-9 by checking if the "major" is equal to "1", otherwise, 9+ ++ String majorVersion = javaVersion.split("\\.")[0]; ++ String release; ++ ++ if (majorVersion.equals("1")) { ++ release = "Java " + javaVersion.substring(0, javaVersion.lastIndexOf('.')); ++ } else { ++ // of course, it really wouldn't be all that simple if they didn't add a quirk, now would it ++ // valid strings for the major may potentially include values such as -ea to deannotate a pre release ++ Matcher versionMatcher = Pattern.compile("\\d+").matcher(majorVersion); ++ if (versionMatcher.find()) { ++ majorVersion = versionMatcher.group(0); ++ } ++ release = "Java " + majorVersion; ++ } ++ ++ return Map.of(release, Map.of(javaVersion, 1)); ++ })); ++ ++ metrics.addCustomChart(new Metrics.DrilldownPie("datapacks", () -> { ++ // count datapacks; since datapacks can be reloaded, we must always count the number again. ++ final int count = Bukkit.getDatapackManager().getEnabledPacks().size(); ++ ++ // create buckets as higher dimension ++ final String key; ++ if (count == 0) key = "0"; ++ else if (count <= 5) key = "1-5"; ++ else if (count <= 10) key = "6-10"; ++ else if (count <= 25) key = "11-25"; ++ else if (count <= 50) key = "26-50"; ++ else if (count <= 100) key = "51-100"; ++ else key = "101+ \uD83D\uDE2E"; // :open_mouth: ++ ++ return Map.of(key, Map.of(String.valueOf(count), 1)); ++ })); ++ ++ final java.util.stream.Stream plugins = Arrays.stream(Bukkit.getPluginManager().getPlugins()); ++ ++ // Total plugins count ++ metrics.addCustomChart(cachedDrilldownPie("plugins", () -> { ++ // count plugins ++ final long count = Bukkit.getPluginManager().getPlugins().length; ++ ++ // create buckets as higher dimension ++ final String key; ++ if (count == 0) key = "0"; ++ else if (count <= 5) key = "1-5"; ++ else if (count <= 10) key = "6-10"; ++ else if (count <= 25) key = "11-25"; ++ else if (count <= 50) key = "26-50"; ++ else if (count <= 100) key = "51-100"; ++ else key = "101+ \uD83D\uDE2E"; // :open_mouth: ++ ++ return Map.of(key, Map.of(String.valueOf(count), 1)); ++ })); ++ ++ // Disabled plugins ++ metrics.addCustomChart(cachedDrilldownPie("disabled_plugins", () -> { ++ // count disabled plugins ++ final long count = plugins.filter(plugin -> !plugin.isEnabled()).count(); ++ ++ // create buckets as higher dimension ++ final String key; ++ if (count == 0) key = "0 \uD83D\uDE0E"; // :sunglasses: ++ else if (count <= 5) key = "1-5"; ++ else if (count <= 10) key = "6-10"; ++ else if (count <= 25) key = "11-25"; ++ else if (count <= 50) key = "26-50"; ++ else if (count <= 100) key = "51-100"; ++ else key = "101+ \uD83D\uDC80"; // :skull: ++ ++ return Map.of(key, Map.of(String.valueOf(count), 1)); ++ })); ++ ++ // Legacy plugins ++ metrics.addCustomChart(cachedDrilldownPie("legacy_plugins", () -> { ++ // count legacy plugins ++ final long count = plugins.filter(plugin -> plugin.getPluginMeta().getAPIVersion() == null).count(); ++ ++ // create buckets as higher dimension ++ final String key; ++ if (count == 0) key = "0 \uD83D\uDE0E"; // :sunglasses: ++ else if (count <= 5) key = "1-5"; ++ else if (count <= 10) key = "6-10"; ++ else if (count <= 25) key = "11-25"; ++ else if (count <= 50) key = "26-50"; ++ else if (count <= 100) key = "51-100"; ++ else key = "101+ \uD83D\uDE2D"; // :cry: ++ ++ return Map.of(key, Map.of(String.valueOf(count), 1)); ++ })); + } + } ++ // Plazma end - PaperMetrics + } diff --git a/plazma-server/src/main/java/org/plazmamc/plazma/Options.java b/plazma-server/src/main/java/org/plazmamc/plazma/Options.java new file mode 100644 index 0000000..752c3a6 --- /dev/null +++ b/plazma-server/src/main/java/org/plazmamc/plazma/Options.java @@ -0,0 +1,9 @@ +package org.plazmamc.plazma; + +import static java.lang.Boolean.getBoolean; + +public interface Options { + + boolean OPTIMIZE = !getBoolean("Plazma.disableConfigOptimization"); + +} diff --git a/plazma-server/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java b/plazma-server/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java new file mode 100644 index 0000000..561f111 --- /dev/null +++ b/plazma-server/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java @@ -0,0 +1,23 @@ +package org.plazmamc.plazma.configurations; + +import io.papermc.paper.configuration.ConfigurationPart; +import io.papermc.paper.configuration.Configurations; +import org.jetbrains.annotations.Contract; +import org.jspecify.annotations.NonNull; +import org.spongepowered.configurate.objectmapping.meta.Setting; + +@SuppressWarnings("unused") +public final class GlobalConfiguration extends ConfigurationPart { + + static GlobalConfiguration INSTANCE; + static final int VERSION = 2; + + @Contract(pure = true) + public static @NonNull GlobalConfiguration get() { + return INSTANCE; + } + + @Setting(Configurations.VERSION_FIELD) + int version = VERSION; + +} diff --git a/plazma-server/src/main/java/org/plazmamc/plazma/configurations/PlazmaConfigurations.java b/plazma-server/src/main/java/org/plazmamc/plazma/configurations/PlazmaConfigurations.java new file mode 100644 index 0000000..a120591 --- /dev/null +++ b/plazma-server/src/main/java/org/plazmamc/plazma/configurations/PlazmaConfigurations.java @@ -0,0 +1,150 @@ +package org.plazmamc.plazma.configurations; + +import io.papermc.paper.configuration.Configurations; +import io.papermc.paper.configuration.serializer.ComponentSerializer; +import io.papermc.paper.configuration.serializer.EnumValueSerializer; +import io.papermc.paper.configuration.serializer.ResourceLocationSerializer; +import io.papermc.paper.configuration.serializer.collections.MapSerializer; +import joptsimple.OptionSet; +import net.minecraft.core.RegistryAccess; +import net.minecraft.server.level.ServerLevel; +import org.checkerframework.framework.qual.DefaultQualifier; +import org.jspecify.annotations.NonNull; +import org.spongepowered.configurate.ConfigurationOptions; +import java.io.File; +import java.nio.file.Path; + +@DefaultQualifier(NonNull.class) +public final class PlazmaConfigurations extends Configurations { + + private PlazmaConfigurations(final Path configDir) { + super( + configDir, + + GlobalConfiguration.class, + // TODO: yaml (convert) + "plazma-global.yml", + """ + This is the global configuration file for Plazma. + + As you can see, there's a lot to configure. Some options may + impact gameplay, so use with caution, and make sure you know + what each option does before configuring. + + A description of the options can be found on the official docs, + If you need help with the configuration or have any questions + related to Plazma, join us in our Discord for Plazma, or create + discussions on our GitHub repository. + + World configurations can be set in the plazma-world-defaults.yml + + Docs: https://docs.plazmamc.org/ + GitHub: https://github.com/PlazmaMC/Plazma + Support: https://plazmamc.org/discord + """, + GlobalConfiguration.VERSION, + + WorldConfiguration.class, + // TODO: plazma-world-defaults.yml -> plazma-world.yaml (convert) + "plazma-world-defaults.yml", + """ + This is the default world configuration file for Plazma. + + As you can see, there's a lot to configure. Some options may + impact gameplay, so use with caution, and make sure you know + what each option does before configuring. + + A description of the options can be found on the official docs, + If you need help with the configuration or have any questions + related to Plazma, join us in our Discord for Plazma, or create + discussions on our GitHub repository. + + World-specific settings can be set in the plazma-world.yml file + within each world folder, and the same settings apply to all + worlds unless they are overwritten through the world-specific + settings file. + + Docs: https://docs.plazmamc.org/ + GitHub: https://github.com/PlazmaMC/Plazma + Support: https://plazmamc.org/discord + """, + // TODO: yaml (convert) + "plazma-world.yml", + (map) -> String.format(""" + This is world-specific Plazma configuration file for the world %s (%s). + + This file may start empty, but can be filled with options to + override world default configuration. Some options may impact + gameplay, so use with caution, and make sure you know what each + option does before configuring. + + A description of the options can be found on the official docs, + If you need help with the configuration or have any questions + related to Plazma, join us in our Discord for Plazma, or create + discussions on our GitHub repository. + + Docs: https://docs.plazmamc.org/ + GitHub: https://github.com/PlazmaMC/Plazma + Support: https://plazmamc.org/discord + """, map.require(WORLD_NAME), map.require(WORLD_KEY)), + 0 + ); + } + + @Override + protected GlobalConfiguration globalConfigInstance() { + return GlobalConfiguration.get(); + } + + @Override + protected WorldConfiguration worldConfigInstance(final @NonNull ServerLevel level) { + return level.plazmaConfig(); + } + + @Override + protected ConfigurationOptions defaultOptions(final ConfigurationOptions options) { + return options.serializers(builder -> builder + .register(MapSerializer.TYPE, new MapSerializer(false)) + .register(new EnumValueSerializer()) + .register(new ComponentSerializer()) + .register(ResourceLocationSerializer.INSTANCE) + ); + } + + @Override + protected ConfigurationOptions defaultGlobalOptions(final ConfigurationOptions options, final RegistryAccess registryAccess) { + return options; + } + + @Override + protected void setGlobalConfigInstance(final GlobalConfiguration instance) { + if (GlobalConfiguration.INSTANCE != null) { + throw new IllegalStateException("Global configuration is already initialized"); + } + GlobalConfiguration.INSTANCE = instance; + } + + @Override + protected WorldConfiguration createWorldConfigInstance(final ContextMap contextMap) { + return new WorldConfiguration(contextMap.require(WORLD_KEY)); + } + + @Override + protected ConfigurationOptions defaultWorldOptions(final ConfigurationOptions options, final ContextMap contextMap) { + return options; + } + + @Override + protected ContextMap createWorldContextMap(final ServerLevel level) { + return ContextMap.builder() + .put(WORLD_DIRECTORY, level.levelStorageAccess.levelDirectory.path()) + .put(WORLD_NAME, level.serverLevelData.getLevelName()) + .put(WORLD_KEY, level.dimension().location()) + .build(); + } + + public static PlazmaConfigurations create(final OptionSet optionSet) { + return new PlazmaConfigurations(((File) optionSet.valueOf("paper-settings-directory")).toPath()); + } + +} diff --git a/plazma-server/src/main/java/org/plazmamc/plazma/configurations/WorldConfiguration.java b/plazma-server/src/main/java/org/plazmamc/plazma/configurations/WorldConfiguration.java new file mode 100644 index 0000000..5e8cbf7 --- /dev/null +++ b/plazma-server/src/main/java/org/plazmamc/plazma/configurations/WorldConfiguration.java @@ -0,0 +1,21 @@ +package org.plazmamc.plazma.configurations; + +import io.papermc.paper.configuration.ConfigurationPart; +import io.papermc.paper.configuration.Configurations; +import net.minecraft.resources.ResourceLocation; +import org.spongepowered.configurate.objectmapping.meta.Setting; + +@SuppressWarnings({"unused", "FieldCanBeLocal"}) +public final class WorldConfiguration extends ConfigurationPart { + + static final int VERSION = 2; + + private transient final ResourceLocation worldKey; + public WorldConfiguration(final ResourceLocation worldKey) { + this.worldKey = worldKey; + } + + @Setting(Configurations.VERSION_FIELD) + int version = VERSION; + +}