From e902974a14931441b9d6b63369bf42d92a4595e8 Mon Sep 17 00:00:00 2001 From: Cold-Mint Date: Sun, 19 May 2024 20:29:32 +0800 Subject: [PATCH] =?UTF-8?q?Refactoring=20the=20top=20layer=20algorithm=20o?= =?UTF-8?q?f=20the=20map=20generator=20and=20updating=20the=20readme.=20?= =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=9C=B0=E5=9B=BE=E7=94=9F=E6=88=90=E5=99=A8?= =?UTF-8?q?=E7=9A=84=E9=A1=B6=E5=B1=82=E7=AE=97=E6=B3=95=EF=BC=8C=E6=9B=B4?= =?UTF-8?q?=E6=96=B0readme=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 ++- README_JP.md | 10 ++- README_ZH.md | 10 +++ locals/Error.csv | 4 +- locals/Error.en.translation | Bin 710 -> 810 bytes locals/Error.jp.translation | Bin 925 -> 1117 bytes locals/Error.zh.translation | Bin 765 -> 881 bytes screenshot/0.0.1/game_page.png | Bin 0 -> 57406 bytes screenshot/0.0.1/game_page.png.import | 34 +++++++ screenshot/0.0.1/level_Graph_Editor.png | Bin 0 -> 52422 bytes .../0.0.1/level_Graph_Editor.png.import | 34 +++++++ scripts/map/ILayoutParsingStrategy.cs | 39 ++++++++ scripts/map/IRoomInjectionStrategy.cs | 10 +++ scripts/map/MapGenerator.cs | 85 +++++++++++++++--- scripts/map/dateBean/RoomPlacementData.cs | 22 +++++ scripts/map/interfaces/IBranch.cs | 18 ---- scripts/map/interfaces/IRoom.cs | 4 + .../map/interfaces/IRoomPlacementStrategy.cs | 41 +++++++++ scripts/map/interfaces/IRoomPlacer.cs | 40 --------- .../PatchworkRoomPlacementStrategy.cs | 34 +++++++ scripts/map/roomPlacer/RoomPlacer.cs | 72 --------------- scripts/map/roomPlacer/RoomPlacerTemplate.cs | 14 --- 22 files changed, 323 insertions(+), 160 deletions(-) create mode 100644 screenshot/0.0.1/game_page.png create mode 100644 screenshot/0.0.1/game_page.png.import create mode 100644 screenshot/0.0.1/level_Graph_Editor.png create mode 100644 screenshot/0.0.1/level_Graph_Editor.png.import create mode 100644 scripts/map/ILayoutParsingStrategy.cs create mode 100644 scripts/map/IRoomInjectionStrategy.cs create mode 100644 scripts/map/dateBean/RoomPlacementData.cs delete mode 100644 scripts/map/interfaces/IBranch.cs create mode 100644 scripts/map/interfaces/IRoomPlacementStrategy.cs delete mode 100644 scripts/map/interfaces/IRoomPlacer.cs create mode 100644 scripts/map/roomPlacer/PatchworkRoomPlacementStrategy.cs delete mode 100644 scripts/map/roomPlacer/RoomPlacer.cs delete mode 100644 scripts/map/roomPlacer/RoomPlacerTemplate.cs diff --git a/README.md b/README.md index 09a6691..9d4f2f6 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ English [简体中文](README_ZH.md) [にほんご](README_JP.md) Mint's new game. -A pixel cross-platform Roguelite game. +A pixel cross-platform roguelite game. ## Recent Development progress @@ -14,6 +14,16 @@ A pixel cross-platform Roguelite game. | loot | await | | Support still out of the knapsack system | await | +## Screenshot + +Game scene + +![](screenshot\0.0.1\game_page.png) + +Level graph editor + +![](screenshot\0.0.1\level_Graph_Editor.png) + ## Run the project locally #### Download engine diff --git a/README_JP.md b/README_JP.md index d30cb0f..b78b223 100644 --- a/README_JP.md +++ b/README_JP.md @@ -1,4 +1,4 @@ -[English](README.md) [简体中文](README_ZH) にほんご +[English](README.md) [简体中文](README_ZH.md) にほんご ## こくじ @@ -13,7 +13,15 @@ | マップをランダムに生成します | 進行中です | | 戦利品 | すたんばい | | バックパックのシステムをサポートしています | すたんばい | +## スクリーンショットです +ゲームのシーンです + +![](screenshot\0.0.1\game_page.png) + +ステージエディター + +![](screenshot\0.0.1\level_Graph_Editor.png) ## 地元でプロジェクトを進めています #### ダウンロードエンジンです diff --git a/README_ZH.md b/README_ZH.md index c7e058b..87222c3 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -14,6 +14,16 @@ | 战利品 | 等待 | | 支持仍出的背包系统 | 等待 | +## 屏幕截图 + +游戏场景 + +![](screenshot\0.0.1\game_page.png) + +关卡编辑器 + +![](screenshot\0.0.1\level_Graph_Editor.png) + ## 在本地运行项目 #### 下载引擎 diff --git a/locals/Error.csv b/locals/Error.csv index 90bdb00..add28cc 100644 --- a/locals/Error.csv +++ b/locals/Error.csv @@ -4,4 +4,6 @@ missing_parameters,缺少参数。,Missing parameters.,パラメータが不足 room_root_node_must_be_node2d,房间根节点必须是 Node2D。,Room root node must be Node2D.,ルートノードはNode2Dでなければなりません。 width_or_height_of_room_slot_must_be_1,房间槽的宽度或高度必须为1。,The width or height of the room slot must be 1.,部屋の溝の幅または高さは1でなければなりません。 connected_room_timeout,连接房间超时。,Connecting the room timed out.,接続部屋はタイムアウトです。 -projectiles_is_empty,未设置抛射体。,The projectile is not set.,射出体は設置されていません。 \ No newline at end of file +projectiles_is_empty,未设置抛射体。,The projectile is not set.,射出体は設置されていません。 +map_generator_missing_parameters,地图生成器缺少参数。,Map generator missing parameters.,マップジェネレータが不足しています。 +map_generator_attempts_to_parse_empty_layout_diagrams,地图生成器尝试解析空的布局图。,Map generator attempts to parse empty layout diagrams.,マップジェネレータは空のレイアウト図を解析しようとしています。 \ No newline at end of file diff --git a/locals/Error.en.translation b/locals/Error.en.translation index 6bd3e948c808a635bd97de4f542e1ceb31232587..262938cde3b1e8a31dba6eafd40063ecb15cb8c7 100644 GIT binary patch delta 227 zcmX@cx{7UsG$U(Da%o!rWCcdEKn5US17aQ^{*MHNkoYn{wh|C)05K~ND*&+`5HmvY zMAp(zoj|rY5GzgYXEau2g38?4^rk!&$QA}-c_5b2s5`a*NUH&{`Q+=2!HmZyYcutD z|MO+BVffkIB;u{BdL`M$pCxApSKdDcgs{4+t_}141RMYO)j)=OXK=J~Ba3yDE=Uyv O13M6d91|2ApnY^6Q qSdWCcdoKn5US17aQ^{*MHNkoYn{wh|C)05K~ND*&+`5HmvY zMAp(zAwZ5fkZ(SD9;2};6IABTrZ?sPfNX6jmeHs?)(un{2js_1e#RKg_;RxqQ#hmO z`zV)^1{^CmoQ1RB`!xUubV;|dVFaoOX>mdB0z9yiW>+|UGc P1Oqz|gZvQ`9OMiDRGfHz delta 125 zcmcc1F_(RVG$U(KQCeB{WCcc7%l|;Y00eA63}V9o4-#Jp$d&+NIUr^QVg(>pnY@kB nSd3UvyKT*XRdg@XV=pW6QA}sJ)64WaYGXWn)K5Rb6>2V`eOOwXY(dJU%Bh~ atd^%cnxAfL02%>O%?>mjpnY@kB oSdHq)$ diff --git a/screenshot/0.0.1/game_page.png b/screenshot/0.0.1/game_page.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d6f8b5e8bbb80ce04421f7550c5a21a36f48c4 GIT binary patch literal 57406 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 literal 0 HcmV?d00001 diff --git a/screenshot/0.0.1/game_page.png.import b/screenshot/0.0.1/game_page.png.import new file mode 100644 index 0000000..b97fcb0 --- /dev/null +++ b/screenshot/0.0.1/game_page.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b4r8qekdrtgbv" +path="res://.godot/imported/game_page.png-f8f5cdcc23f5b71be114ec8661e808ce.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://screenshot/0.0.1/game_page.png" +dest_files=["res://.godot/imported/game_page.png-f8f5cdcc23f5b71be114ec8661e808ce.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/screenshot/0.0.1/level_Graph_Editor.png b/screenshot/0.0.1/level_Graph_Editor.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b35135920b8a893970918e283e8e75456f5ab2 GIT binary patch literal 52422 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

~SlK)uPegPM?VdwF7 z?s+9i1?e(6UOlfPk|z!Z&3w6)TyTvB#!Bm~es^Ei4l!qiZB}-1sSYIbF2n$q(!K0T zJALjJ&M#*rFynFg4F-%k3EKuu6%NYVV_H*pqozCVwprt<=EHmaJKDr{BAQ&(wd=zu z1I&kaIVDJ5;!x+fO^hh4nrh@ZE^Bk?Sx$=39_n~}XLMlA~HD~5kP)c%N&8>8TfRV)o zB=2m;a%IMoSShiXaYKrEUuW#`$OE@xiUVMn$%0j3II*Ck<3Ru{Hjji07fsQW%oXC^ za>Do(tm(jxGl6k05**5N0cXccmwnw4HyrWXcNcqHIJ{ww{2Z%C1nQEBcm)};V1kx% zO*DOj5f5xyiGA2Cla`V$LnC%*^y^wgcutp9WDSlY>p)SMd8n5)d7jsQQs0o*VQ55-nB|WK`8wDHWdx64DtCb>3A| z?Z^+?C&=~y&@urC_Q+VCk>#>r>bsI1uzF1`a|X39n&^9Y?g61#RhRmJV7BShAH8kq z5g!>WJ#i10$t4IwZN53(jWsvbf03y3k$0tPla8~8Y&n+7x)+d{8els+Xdt$!?Fs1g zB=x#=>O7{0VE3l%AFp2GJ|sk$2*8l%(lQLcRxHaiqU`lk<+b`VjS}5Ex6-q*o@Y?uRD~oBi<6V3)N+kdvy*B|&f% zMaPomzh04d<SpD~BU{?iJF@RIX|r-a9AbRjdu?o@P7X(&pCX$5QtqP5^`W0I zWXyDTP^`j2zIwC9iwNS}X->!p$1GKi^Ud6JuQ#4$M>SF)sJZrSB+uL&__*LQQ5MQJ zx!S2`b^uJ_-0T~Jn*=RphX~39YV$|#~{@e4xPK(PQGC< z^}#HzDQuvq2dmI+|Klou&SEP`5i1)6;IvU4W}#;lp1Ej z=T&$h<`NusZ=GzQebC(_KuM&nL6`uXmLl#^wimOT>N3;Y=#?bCaxnT9{zihoi@bBk(1p2KEJI zlQkFYrr|W$O$fB$v0J>$3lcY1CVN$8=?A<#B4kY|#FbtievuHb-hTR7CF=|)yY}_v z{*lT~5KyqhwN4=Y$Q8@+vLfn%=eND3wsR{Rj{d&Z!0(V({Ivu_&sc>DJ2(-&8@htbq|VyOG*$M*3s<)(7)*R9uS+hbBU+xe(@ph`fP`w++xv}2#v6`O%I`xxc zvl2G2X(wx2ct3@p7>~-0J`Hsu|CyZVVoP%#d%ear?;KfgoUdExWDFs<#(TGw@X>)8 z1%p{5)i(NG%G{)nXsV-QYU*Kh=yNM4mzklX2DXFD(jJ$Wg?bt5v<pwIAqg& zPafEP2jM*0%HoCcP^GZyLXCG)N)?2IdXDMr83@Tf3|;wX+3af$oL0iDpQqO>7dICQ zE;Kw9+)L9TWiY1%Tp>eDULFE8A&bR>pXYt57p?fDf2K8x1GSeGN3{jtzlHI8!kK`s zt2JJS#Bk*ZelanfZ8rnJcSzoka;xKN7Hr8pe$MOH58Mn%hp=|n!Ob3r znE)NNMXlL$u%p|Zc&6RfJ#TVy4bEXn{tZ*9(w3h+1(jHCUDk~%!AK4jBrMIkJ|j>I zvCJG)Eh)o;n(LMmu6(^6lO#-i1R<(QCb{rN{m0(be&O6_MRN2jk}B@DsSdl?*~3SQ zY9OAy9oG%jf%s%803O=ga5HZ<)|U;Y(M|4!X8jG?m4s67Z`>vW%DjOd`&F&96F9^k z6jX2hoMh&?Y@g&YsvCAFO-k=5`}*n1hX{t%Zhi9?iA!}h+Kn*9V_)FxLcF%orpA7$Jv2#*xZeJn1i}G;YoT<|HZn8QSOZ*%d zKM=mKYnb5J|A)Tm$X^BL>om?UyiG;zI_}7GRQk#!Yw1E}_zv!2GP+SiW_I!23h-ht z*LTY`5Q=v`YB|Itm!K~sHc4E>Hbawe%WRm-w8y-844e_9qZaWJ* z;W5C=K&CIV;Bik3Kq+=wwVeduBoyJOzMpJ1T#LQDJ;fG~KW~)hle5B&W^{^9`+V3* zh3=%wWJ>;jdB}40Dc!Sg9!y?1@_K2J)J5}~I`)(HqMPK0D?7CY9zRRmoazi^jxD=~ zl}_a7ENs8AJM=*rxBG6`Ru3g)WJ7h{<&30?(8ta5?B9AHdUE67?nP&L^?bV_3Fd?u zZ%Ow0r+mPeHj{C|2~cd@BY7lo&C2dqHqd- z{@dTtF8rSdXa8%T`M;uGNcFt>-JYU`Q@=nLybpA>n!cDL@h)jW8K_8O-rVSLaR7r+ zsnVV9JWo5#Kt+|a$3+W7Use0b^OhYcAAMFxT#R`VC_!Nzwbu(4S5=c&VxExxQ&{%@ z)2ULx%PVxJKAAh!EZevT^(nK!Slc30YQW)zN8tx~ zC)E58rUp6$!4LH-6?0EG0DhE!irBI`O3I}-Qp}8Guk3!~Jq3T_$+Lq5ipk?1c7VyAfs>X(Jni@@l0`UVf}6< z0Nl!w`kdkJz)jlhC>{%>xQ{L4K_!K$<|!aV?CQ2QnYq114f`Ze*cyNFWCG>WxF3}1 z%9&}wZW6dEqVLwW;Foh^N(c4rMx6aEA%{ZIKe{`R2$HVN1NUWhO05=ozy1XyvE?&zxA&MQ+$f-J?E^ZM(d<2elFn(Ed)T7e$p-nZFra z`o?AeNhPf|F_4YrdE?z}0N10UCfXFZn1Q|n#Gk;zOu}0gXJr4uKZh&b5WM)f5COC@ zicDaVvTAdS8f}+!%+(M+Ps5zV`7Y;V&wAJsi`s7cE2;8?_0^@(#?_kBwwf878Gt^z5ahgVmo&aye!hEu`sM8F-jx&YHm-5a*J?`W_}~s8fWErDDVIhJ zZp(3dm9ml{esn(DOu zsIl%-hSorj0ra(3*S~kx6)hqHR6G@ycY{IXN*tSvBc;|4|{e6FnX8tsne%#VKDX@_(<$~HH?Rms0@E`wH(p=wZVRg-1 zU(ZcasUXXb?oOGsv_8|OTl;5L3%2A^cEBKTGlhM@thNb@C7Fv~$34)DdkreMqg}wc zP=SZBv4W0q@{V=o(`jn*S$OVjQWLl@?b-a!w%RS;m6v7X?R`FcNUMl@RmL_4%ek7c zKvg-vLLwW`$a}x6@eDV--nqf*bb8R=cVBFtv8D(twI<(hcMm6Lt!tbCAXUT0(km&# zbm#a_N4K85uRZe8wk8DOq~M&DTLD(|f8P&y^=o}$;_+iWds|N#E48^G8m`*dOv1(~ zU*jbL$~9lg_>H!I?T)yrtZuA94eDruW~n%bI)pubc+=IROjF6+HPnD}ytd4ZIR-)2 z@|K!hs(vH^fFJ$j%kzMB;>f~YPWu;72Au4IZ%{cT38kNRzCx08fD~RZev2#5VOuFWFx8Z-e?>J623<_EduXEdE0N==^Uhp;yTSc64DxiugE{9& zgSgrqKSn;pIPFpJcBFsb4z)2V__29T%trf5HQL|Eca_Okd=IkH!{8*{Z!UJ~txMCrum#+S)D&aZQe| zfPhKd$I30zFvo1C0>@=7p{G_t&>Du_aepT$g?z7m-f;W(56sF;%T8ZeeJuX2`2cj_ z&?#RXb_!lbNeYHK;_9%;&??^I|G9$ybgloty?FH}Hy|T-Q)b>O*8?799R?VA0w%oE+Y z@mh&7HYeODK=WQ&K+hm+vp_{hA;3s+Xhwhu2lu;j<@h1rrfXP4l+S*Pae_IJmj}lZ z03Dk|Ql`0iKIpZ_QFxaqkFKo^ebN)m%5wsGcQ-13%0>&R^^gv&-bKlnk5%#ef*A+} zkw#K;iBs=|DK#I!xMNW`)SdWyJ))-ept4AkA_2EEU-Au+Mq4jcFZy?qW{Dx4;qV49 zQxvJDv@Wr-V{};Y zR-ok3oXOst+`{9M`XOSi{{A7+1`H-5fl{^{X(|3~c4teWUWzpXajE(!9?iz=PoB6@ z08VeX#%9I#-(0UJK;2LjnT1CGsFLDmbT6E{@s7-TSt@C?L}nWnJmA|II4i$kNAFxoY1TsHA; z3l&nP`Jlph6$}a1$5}hrAb4Kjuzr(VV9#adypThr#*XigtCxyb^#;T#>$fQ=Np{TK z{K>g?jb`o!kvkaX^Segt<_6Bigz|lB0C1{x2RG_I4K9E6?1NteP^sq~+P{SgM?GQ7 z3uhSGHfW>ztZ z<`Bp;=fHac!Q#%>qtrPMLkC5X8PWQJi)acYIV4^?El4y~MNd#GNcvHJ5g6-UdP8a< z;N+!qfYfLIc6oOI@&&WaEj>QjA;4G7Xp2xHwOW%I{<*Q^*s;`{W`w3Dpj52!Wv+^Y zCvFYsJX_K=s3zBY{KOoT+pnY%nCxCM4h*5XtHWX!#|!n#6h&;JkKOc6BmmDWA6bgI zDsxm4j}1XUwkj5iu{@26lqY;cIYIN?>`SdFmvN$V&JNjERw&Zc3BZz;5NYYWqQuXd zSk+8UuikX$GZ?sGB&t0>7YM_h?qgaflLAGk*cX0be}dwqSre;)1ERSkao9^L)BJ48 zZ+z^7IhghJZ_&lRee*sJe+r1uQL0b+QGr-AO`@EE$zw*(O4!sLlE8cLF=#p5+vsay zYGbmiDXg^e>jvVLlYb>Y_=fP+gCh`j&VZY@_M95I@}{%VIc~-FbPl2+y8q-lrb1pW z8PO=*>Kd;_`y(^@%Z=h_-N|EY775xYvo`WI^DiB{XgU-`5FHHMMuBoZo>ay5q~(bp zk+1Us3Wvn+s-c0kAaPsjlvVbf0VfxY5w(@q8HInw&3)bI{(~+fl&kK$2(!sZ0;Q=e zLz9$R-yRsceJ*&n*#x$wC?bUjLN*OiT!QuTcnLh zjx~KT@#&c5q)y+&{Yj{JC{`ROe1#c7BiEj54e=CH&}3`;_JfypCv&%H=R~aEoCi+p z{~kXG**BOG;DDp12}|(H1Fe5uqH0QRa_ue)36HzO7&T}aIgn|O;Q~8dzK1;Xl?HU> zkvj$b@9ycmmXV9Kmst&INj2g|ylegJ)g{uuqadgn_!PQ?s%bn5U=p!_743z#rs(T{ z*rG>%lhKK!U)2tdn1xNoNTxC&9+n2h?=q%TK+6=q=B(-dFE=I!G$~~%aCRlfHN&4} z$}n%J1AavwVxk2?p-aL~aaBfuuwE_6zg8 zobYs>Ze!(*Y8z$OX)R*huxvnQ`d;&P_d`szovHFqugNG1AB1*r&mds}g4At*q>1mo zFo#5IlZebR9V}Iolk4h0gMmz_JSVD_VIHrX6<+)mDfm@2)FkNlleJI+pPvPa))rdz z1n0&-hgb0tJ3ou0iKg1a&yBFV1CNghaDtes1oXnWD$iG^q>}4)?!gk? zKw}c(d0jo->kwlPb%VA2$%G=iv4jKaznLmx&6QC|4>B)EcGSjNDcFxu*(8PoN?}L< z({@$iEceoB5TdwW;`PgkUxxxuoGbb#XjzbAp zorg8g1@_c_O*m@GY)g_?R$6?^;PlKQD{ApxNtZ-m5%tJ;rK!1t)|dMCvF9w}o2lNcMTu zRdswOss5!4OfI#9JYC`gt-hvjr1Npwl_>@4t43{BEQ?4XN9GMDXl{6y_2$gkn;YcS z4MeDxzK`g@5;=y&01PMGVZMBJKYI}iAsULIC?rf$#6k)ay63|7F9C9r`vTwFI6v}>~X5yA%wj-j0iN()P#Yss|g=G_wB1i>W}WN0oe)MU|56onir_RF9hT7aL&4x;IMbyu-WdbzF&-z+?#$Z z+mEW2Tp>LAa+hErfc~j+jR@Por&YS2@7AEj&xK0m|Qfsdq>kL96k)dPSnWaAY}*74AeK+c6`4r1S=Pm|E%&C{#On55ij1d@)0a z7A9{6AsNjg3ros03Wg)omROy$8|0f?_3k)fw{v!^YUBQAkz{njsw=LNx1#Yc+<1F( zA1`B{c#f-S4r{u&@N2emFyvK_ni}+LFp(MxGZTtvvk#dc>kuq~w)v`Wvi`QwS zqC#c63|7*mn(PvtBtzhL%Q%jjxOx(KN(mnA#}t$^x(2P1LLB@)9!8f%IPZ{fZK|n~ z=2Kez<$^}C07*OVM{m(I#ev91`KN_ni$i?iD5xi51nHp= zQ0vogZL>w)m-d?KW)vbpfotlTA#Wwxi!@_DLpZ*JI?Sty$CCp493$2wWt~DZi?OH_ zPh9NiwqphlY~#p`TTY&pgRr}!{W7d^>%y1a11(z7C}`nm7Q2v$LkqA=c!rF25D}=@ zv~iG14obm%$wo*7nAIj{K`fvQl1^{fDA1GHN*m0LJFmRzI)#dD8AT@uS~*`p6{UKA zVOej$jx7;psyz?mRSDbg?|+K$LjTQIT?1iCzoVWJk2<<{5~07!2pjq-RKj1(I4-G) zV5*|SWRZ%!sey>+>~U_q0+jG-aH=NWl2biWf&_Y2!qQXsrqPuF@WlI5FTazKC`kGN z!ZSul*9a(TTM3f&ob&_<$R5<;%7%|*Wx5Rs0TAqP#YA?X%NxMcbHO^4NIiw<<_Px; zfYH(74zk*?N5wrnLh=Q5=$wYLgK>Hog&BI|-Um{Zb9O_;^$y zCGKW|d~rAA9uL)J)jS_08yqJg+y733Mje;JYl1o&z7`OY{2ssw;8a`91IH_%%~3~> zs=V;1sQ_7o6}mA{wuO3~;+lbZ+_!G74{#p;P^cA^lfBAaWmiCVj4(lr%E)sZ1F}QG zeFK<-DCypKRb~(lR1p=6$yujRTkgCXR(x1u;4c9i&57-(8uLfC0CBerYIX>e&atR6 zq@CV{`aN{B2nwDVD)`Z(-36}kPA9>7tZsyvxi(5WGOrXUg7f+-avtWN-c&}M1vIwk|)-jC>%np+*x`pv_~QGh2ysF>)P7)1)-HUT3j_|r9wZnC z!7K#ks6U~vV4$|J%OtK46~CaVSiN9bdJ5@CS8Y@0UB>){rn`jqmpiel6ru|VaJ=7v zMq66q62bK?#>!`4S1O#{&XsVW8EXO)c!)YS_jmGEbEs8Co7j3B+4uo7qZ0H0=3w4) zm)pn~y&W4UFy?namH_v$sPR{0RH7ChD+=8N1D5@>cv zCTqG^5^Zn8(^b7FBH)nLp;po$9cUWLokoL}%P1JVmpYPZA(R?2ZZ7QVE2K%e!-#L* z_(byssAvfch;r7xP4N4FE-ds|2?qi8bz*38z;=Tz1hZ{Ds+j8W1yA}4+Mh|~>}dci zLg0gg@4@H(W8@R-1c*EFN3(h-*{hoSTY7vIv3jgQcuV(!AAB4DSa_qQ&;bpQ{fw#l zeFKHh2oIMvGoWN6H%OH%^CzWr4s0YCoDbZvqIn*}%SM94!xek-8>1CU+)W^g1#UjEKD68ROt7A&YFhIa+oy(!TSmL z;m;_Gtd?6?Tq9tMnl>fghZt&8tE-_{O|x?yu|ei-z7VDVig9D0LNhUG)7)Ye!Sk$2Wl{LqV2PO33l{Oy`I0uPWQlKpz7f(} z)DfvLfPMP3^+7D|j?8ZN!qNS)PC!Oi8ud#pLKzW!d&nOms>CukE$r$~zt~<(htow+ zI9f2RJUL`J#&Kw2$9|B)*WKIFVX^`2U-e<*9oU;(bZF^YRN9EQn8>Fa?}tNTq&;ue zY-v!%s7CX+Ib|-GtFGH;oK8#qcGW>;^R(qO3A4KGm_dNwG&=;;Qm_Tihk9u+c*18IveN1pk)79bGWT>L1gwWW8# zFcM6Xg1mO}s%F041wVH_0=MoY1xr4EbIHa7e5WV$j0@i<$|9bAP+DFHfn4K!j2$>O zb&{%#L-ougB<6T@1r30*soz;$w+#7&42A>0ydw_b5=_9W-3Cm(ZtskjNLtw&J>J}y z*BnMy1bhL=U>B+64P;wCyxV3uA{ctHfWh&2G-TX!9 zh&f?5B3f0|%l~akTk%xvU4-3j_5XAdT`88+iX??!ynn(teljX*TvCPxH4D;zn%kFK z9`P3{ww+?I8m`}qZ!|NB=wvk*LTyd%vj_uHDIT!Dr!bi__c7L-g#WXF?4FZ(m4yH*&h0JTn zLC`xuypk2ccwhDmMHBxyG;}Ay3+li`?!uJD{e=;+e<1S8&c&uTZz}ak6M=92xNMDP;*s?4ImCa>vM;vSBqMGdzPe)!NMB?OvgvL9H`KOiJ zqf-)$jG>=-_93>s=r!PRFb1?>01W%KwCZ2EzHf&R$&KRoK>KX~9g`0(qe#iG`#Es= zPo6_t(DiJ2S9OM;$GF8j?=?(vH!b?;d9?s$Tt9u@e@#MqY<}>Z^Elu!Fluh9%?PH? zo7ph;W@um1b%wnZA?9DH!dF1YmPArqX-|CT#Rg*?&6);V*UdT01wz;RX_bpMr$g@o zPI7e~@rMIM^n7T{HfFw=##q9bZ49iJ%=jLK+Ot{l$f5CM-(v_QlEqz2zll_`c1?po zZ~bx|7ktR&$A|KN`fd;ddtq%Dq1KfWw!_>B4cBzc%CzvkAyh;#ESLiYuF~2h1ROx& zxpWh-R*lc=UX%?qt}!5{)_oHr7FRlJlE%#>QcVU+VJ#eW71Q?*GoG5Wg^`+->1j)a z(94}f)1z}Th)Pq$n`%>H2rCeMzgx}7bAx*X0B_LE5x_P`-hCkt>$@nVXorgcp=_82> zqHGpjYTOA#wdGXhYE1RTKdP=XY?8!hJ9q9l7Uvmh(Kaw5(oj40Wx@o1?INrhC)LlN6m^Do|&yjbug^kk|S}j)BzfPBuBTH;`hCMt6x7C~s0EDj)Ot(G5v~}r-9YfHrjqdWA zn&#c?Qi{7QA?Qz~_Q>pB!h1AY+p@L$>@8U<7;P)+Hc`by{X9J41T#$lOF)-oUc7rz z_1$mwr`(}|0YVeA>95ZT!)`z%Cw@{eP8u|ltH1{V;Ag+2+v?Eg*fPH6j^?3w$L-h- zbm?PB)@zILfgLUA_Llqlf+1~$zA&NKVHG8o-1r+NPlII3b8asRehZZlF4@y7xyj6* zLv@%gL}QN7LSM;Z13FDRot0<)O;ZQs$C3_{lp2dL%>+a<%bf}-b)Ei65F?+YQw1r4 zh}C6)DNijm%MOLi{I}$)G09+*=*SU4C-y{g#$(`fdJEAkk@N8tkB)z}*g(SWqYS7M zvlboAzSGKQA{5AWQ7F_(?ex~8*mtcK%_zd4F{xO&xz8&~aE!I#Gqp@;CbBlvKdjb9 zaC7(3OK(_Fq=PG)g#tINCkcKWZ#&f9Ry|;9Qf9He;(_bQqvwmFjaz3^TL{4dgQjKs zdJ*yH0|jM=)i0P$dJZG~3`N{*{bVX9G!uG!ScmN_pyu5s_q>KjmOt6}?TzT6BjnSU z8>f{4NcR^Qz;#lrvczFebfqWUlsEL(5Np#D)Fq&sA0jtOm>f!M zV!{LSKzbxy}Ft!{Sjc4P1g z`sQcC0f=+s&UQ6r7=>c4?DB`g3R+eu;h*5N40xy1_W*fQ-_9c&%R~W)NCP$pS z{ui+8uhF#`CDFYWeHm_=wMgHPX`UFr`>L*n^seM&?P(_cfS0ib11p9zwKR?$FZ3SP`OV*keT#EGf;+ySoU8MGfrBgR00#% z0}hz&X4wHnxE^qider1eN*}oR1je71hE3O^E1&X~H;N|f4o;KGe8@#M!qMbbM$nk* zsr<MMwsnM(DqT$?FEG9Xl zMj3GR?i)UbKG}aEjGsjmra>oNKZO2Sqvq1}F0~aRsJ+^qANz{!nP_q~0bs+tk}@Xb zktfr&$%F6Z76tX*s6b3Ji~C~V{)4{HrG~)Hs_vtxrT*vrrN08?6SU?q8rs{epZRD% zuw~=71eHi=Cn>Jbgp_vb|6uE_tQysuuSp!YE+p&mU6+b>N*OTNMKsw3 zImAci`vRfdIu{u8jYD@bLuHll>y%&)zxbKt+@_KUA7$er84x4vMbCuG;;Y)`$2unxNzOweyRoZU3BMTKKY z)||Dt;nwX+<61JxilJkGTc$R%!L-^i2-aLh$ld}+r|POm@oJ38Lv&c^rFx+1cd^c! z(R!-6M*j7;YI6#N<(dP?Yi?s#uf^gb=M@dkf~v7RiSyQKMpvo#)^2ksxgme>5!$>a1z5vXPSJtt&7LI@PbQL6SV*qws>!I5p` zi^>4D8SI+)@&=Bl9!qfW7~Qnt7vIw21{(*t7ZJh8a?4io)v`k+ME$jZP0YvN0Up6q z)5k>*dm-q^LrZB)GJX~Q{XDW|DygYf#s<4cqFT*69E3t~7~Umydu8x`pwa9JnaOxm zBLQKS=m=b?Bq}tah@J{jH_Xpe_I!stMkPeu#|Xv`ttYkjU=^@ca*V2UUhRn@Qld+S+pR4p0h zbD^M5P4u2wMxr7?*0)-R-<$u2M^~p=$vu^sD0Ba62p3;9OPZ2^Ey9wt-yN=zywXSR z((Y~P(Y^(7Y(@9^oBnWk!8yMnz-QzkBuD51&3!(`6SC?WC0c?6W*N6@^&u66GSd^>LBs9xwlD;tS&t{`$Y#pPW((l~d-D?9$=_lEqX)fjxf+ zEp1F>pMz3MrIKnPWFufmZzQ8KsoNyJUNj-M1BKl#w{WW7o5(2IXheT@&_9B-Q%r!+ z$qYbXIUE2KzBrU{ZYJ^v^z{vzfY~syce8PFn7&af&Jjesece7?qagZ{hD0-D+RqAo zke*ZcAgwBd_3<>s*of#{Qi6Z^-v@i4mJI2H3X_GB@Z&%4&kRfjl_n+QF+sPjj`G~0 zE+V#Y0px7E|A4MEV;T01fPI4Qknckoeks_$;0nd_D?RZ&6@wS0oz0P%7!rzBmuk;B2)u5Q$#S;$04!^hy&4AGHZ7 zJn&GNYFvfWX8*X0CfNhn;peZ>;ztCrRWasw=-2G~kkfrNHq;Gf_Hv7|e7H>*sBH!)7|Z_r7RB3uBsVa!QOq9%q$fzR$jr0zyX*;{kHkyOopbZ$ zJyow6NBg&7{5!_yV3t^*YV0wHsk(A{<(eyD#&)gxTK{=y+9@ixXGdZLy_4f$PNRCfr95%~F~+a5zBZ4rz!? zv*dW)4aPZXKcUd~va1^9+ejO4IYoU}92hvgMA2JR78cRai*r>b`t~}FeApzIyUvYs z0G&`x`qA;FI9j2rY_}mkg}K`^4Sc`dNUk_mY0QImiV-;8TH=Nt%O;zqe5>`?&w>hb zxydYAD2k_+w<`9(sf43--YHtvp0WycYF#-6=xSqa3Qx9jH2vj3=oW@nJ&qJRPidvF%%8b;@u$VHEKf8mVtgHZzl#G#8WvJtKo_1A^RcrRTBY;Ymr=t ztq5l;Qx-sqGQ?&IdCq;+>=9boM?cQa{YESSa^do86H&)=_D4Bny#AIe^aeqflu%kZ zA_<2C?8^uk@sM#3({!9p3G(cyb<5YXA#pH+SLwmdvu&gI{Lty%opk9f3rUL=MpQsX z)~R-z_xmAt~chuM(827N#ME$j1yEUcooTE z^DYBF+znPpRWlo|0Mq2L%Cuip<+7a%?Gui1B6E^Sn7*3=%kTk$?6yaGGcfB{+YHsj2!{}y_@?we>16#>->9Q zW$u4GpErB8^w|zb6%m^_{2|qLE9vX?eQTaSnMev^2Bj8M1g}QYw&Ww_IN$YESJT(> zia?(qi?EVVA%ldM4GxYyDcMd7h8xJF_UN-=t2zGbAjenb_CG>Tn>JKMM*0bdg0=+| zsI);5?k7^mO-PrCp*ii#y@s4B>J+-T-Fi{8l&Dq6%l=X`ReQK}= zEp{o89pA8F2>7>ijtr!oVyC3pr6_b*f#Ym~d};j59l_<^s%hB6mEczE+v zMK7!(61t*%st={t;n7kw?_<-a2n%BHi7B*B$m znl3W1V)@0Qa$U<*E6A}gAs9yjL^P#Ivi3-O;`S3#ZPISED z{Kk{>XyYo1`XE&s5jZT2)+RBe*%|XYFh)4Q3}1$Ca?T8MxXWkql8;UOm(B7(9u3QI zW7{t%%2m(5jikXNpj14M5bq6WJS0FeD+}42kbaM9L@@!eX)@@O?O1^je*YfxY4nqt zs+uj;9BhRL*P~l?DSil)>3KuU=J*BDgsL7ls&e|^ATp=MLek;QU{*0?D&k;a%0>RF zX5s^6qh8vJBu&z&q%K<;3tHM-lw=(Ng(f3?N@r}V$IVmhsA}Qf`iVy~{V0RFLP&i0 zZO$(MGDCVdtYd-oj(f3{wwN%#i1zhyNU}(m2QSU6fI`?99RMA+-H|V@b-%Sc&vezq z9Kch*nF**auTNLhXsOqIwcH#_-OC|two0p`dTLBHQ2YN+wp`EixeL@n#1U>~>_H*% zpT_!c#2w|JPTja=o6^W>PyIw}=Ky4K8<3*Qe`b0#EA6#jqkTo=?4c%Ah&dX->2GWh zbm&|2gKXklWBp=_%oP|-udp|HA3IQx4{in~^|RFJ#(Gw0F(#RJhISx{_W}M1>dN9n zxoj4O!Y9xx@1Os~M1o-&gfvSTtR_b_qqHo*0zyPE|CVVhjBTxueD^(MB-^W;f4DU8E2|=0jW-m3P=QTf0?27c6qbE2Xd>M0iL!Mn8LFfUyy_eB zI$3Wa*WIw}YRx3Fq9>&J4-A){N|mKn&0R^po6@RS+Kaw)v2H;-*V+ySMu7V(=3Rnqu z3}`HGxXX_+sRI#!o)Y+*tpo9%sXJ7kmnzF-L`&%l77RYKQszVg^)_BN9@{!lwdStg zCou*Kk{Q*J^V@hpyP{i=bml|(KKGNqE#5`1IG1!tT(0KF$j$ag**BKRMY={Xt!Ro@ z7{Zj=k&xRc>@KT)G(xav&ZK6Rx{5RPh%4?=a7Qbk(Ki~0n*w~FGV;lncgE{T#y=5G-wKH|pGt7N4Lo-DU9*-w&h2EcwqE4?TDQ@(? z^F3kb5p0pC=TU6AXSBTMRUDS(744@Tw~gc(ErT8AwV{3LL^@$l$UpVO#NaRqg45Z* zwLhQRyG(YeYK9a5|-D;_7ag=(Gs}57kd!-e*Jh>G@>WKwt%uYBm!2zjef0`aQ&+0@uCHH^;>+m( zqlKbrDpq~DaKMq(?04vP(6FC&kfZlT@_=Cyu~zivI6~VgJF%LB4*a-QO{aL+tqjZe zaj5j^)ckafp?D0d(yoRZH#$_=_ceLELKVf;md2$f-{c9YF}X$}i?(3g?a^&-rQDj< zGrldTP=zwc^Nv0{>YgDAO$-c0iBxsW%~{KO-$be!Q*C&~F{ru+KY`TPVM)m50b4#< zv5)G+48rQR&M@Yy>J|=+iLicfePR-4{3+Y`FT1{_S*=B{=nT44_fR&CEDX=ZQ>)9S zrTd)ee}o&OR`Bt{ z-KBsl|GYmJM?RJ5{YOCth%vjP3~|XZS~yH^YOcYEvHoNRj!e8M@Yv#6tcLIj2mO+f zP)q$UBd2fZpBy=TIrxKzIG@A>X0Xn?CY31B6u}_&H(+X(cSgoMbMv}`dz;GpKB-6H z$hQW}0&$m4hOs#It5>_iI<18V^bZ@!+1>S+qSf@I=R~`v`gY>+ah-TcETLoAfippl znnc$d@%CGc+;=+1#qh(yMSF)>!iAH0#7cMZ4Sn2)J+D^hb4#2}9)HA>t~a*o`{sj( z{wm#>2`!OwHm*0*q~vFo%jYN9NC=%|q?FlUn>Dj8hK={}Br<&B2x5o5e(0?pub<6_ z1EKtm7M6Bh%3pM+bubw=TQ_;9&XDF+UBU@AK-HM-BlXSr#=j?<8PX6z_i5@l;}@=fJr=dUe6 zyyh87M{9E|a$~t8QL@MXu}-n$NosBns$jgzGqbxKAt1|p&S7`Ka-M>#j=Wtrz9e6v zAF?@*k^}T!Pbf-$aM=%clb`lzeLjEaSn&Z^&*qp`OBr3&T+)Msqi)9^c@JLtowog!q%c+Xn8tF(2mv2=rTS0 z&FMIF(3!`RDjnkG8)HTlhMN^gSIqBF^_eZS=Sj=^>r0|)>1(dyQ4><+F2jo?Zqb?5 zg4T1#Q`+Rnl!B^5_nSZO$zJs+ZIuY_h6`=@6FTF>C)#IVZu?7ov3V*t@Q_o1GW9c8 zD`}>j>0T7KW@bQ{8o|v_GMG$PGSh09FkE^$ReC7fq9sT~$Z7BLp?_NL9(F3PmZqc) zU;Vs%w%OxnWm=$Vp#=eA$P`I(kAvNGiZd;6(~?qqR50rHSv<}B84HI5W~bJCDYGM_aDI)c+JSf z)tXh;70^EUttQqzC?d+Zz7jSRiiv4(n@+JeuxT?19DZA7AQrB~I@4HBC;rFPz>a>} z;bc;7ZNK8NR9*_ks6fq-6sKJw7m*y}X=ch)$3F84QRtGxyyMAD|0&h%NEgZao{)6m zWPYGW`TCIYtoG&W)ds?rAyEQ%vV4M5I7C=P;wOW*p5l(882G-LBj_l6yA_FG=z#& zZj4??X`qZ(6j~Kn@tV`L*Tz5geOJ6~v%lxa)R7;4HFSOaYc2~C|BDbqMVlf;-@cDRkAxds|(+~Ng6g#_C3SD}H-Erw5U0v|lW>C9Xn3jp7x zw+g4>&3DveJ_Lqi&J+gm`j&d?8rTQqyyR`C6*hj}R(9avg3f)Sn@pc`w`NH;R|vi; zm({el?m8El@`X2t_Wa3mX5Ht1DJ{KJxw2it&nAnw$YoCt3b`_M7qiLo#=Ms92*z+JZj$URTAauMcG(5FLmsFb&RN$Q}Obw$IJVhHXMbwrC+T{5p?MDU>O+*e$M{ZS|THShdREg zKyYeoG0LsH@WH!r@~moWdEI9Tql&fX9wA&1hnYu4PD(3D?`od<;e?}K3En!l`M;Uy zmiFcCMxxk946VbJb@t58V^5ssOd)wXLkj`I~nJLFz zA^s*4`^P3@B(V}+(Z^2dzdm%J4)cLnsVhU|g;t9~UMC+jREI_Isj~2a0R8wZZKaFC z6SE^eUdKwk%)AcD{5U(Psh{p}Zjl)CCfi+SSM=(w!WQU9m{zEpZKZY5Q$M|?Ndik_ z^_Ggf+})r?&*-EUI1HX=lt%HgC|O0UXU5_sLQW^&>SEh;4n)5>P(W^0lQ^Nr`GZS_ zA}A`MbuL=0&4L(1*LfKgsq{gckws#4hF)Z<@Q7vplvu-_o{VpJAG&QqP3F{O+S6mK z_mw8*=dX#stFWgOZf|O%K1eCK8^-m}Y%=r*-hxp@F{Q6K1byM<)C{^_+?pc9Vse>c z-ttI{1WmY6w$m4*X>?RwKe0VKcOu>=UPiu)+wJoW#=Kc8=7Xoes7^@)aOnuV?xGxH zI^oI`DZ^*qUQby>#@e1!8_S&)5bV%(xAs)gz3VXOSMuzK>mKR26pR?JQc0idLS#?# z%F>dQh)V0-on?}Z@vW*tS94?wt9d)^NhQ<=#{Q*z*=AGO+D}5`F}r71&P`Lo#$*kv zBba(HU#Z)fd6BIp1GMr}ZAefi-CJECHB*rt5EP^-+NL{OH>xH)mK8T2_vlc&w^z4j zO&j9|i8?j+A`syWCxrNghOge@B4P-$tn8JQn9VF#VWvv^Kei=bOK=m!biEzKRwwO( zN=&@+y{55To8}GP_=(U$3RbkO$(JkZFp+xUFsggJpfJ*6I;+=_+1ACHg0r7 z-rT*!n0sz9_o8ClvNO-gH=NH2@C=d0zV!-G!CD&m#K)|<6}yUsx7*p!G9C)^oz6}_ zH?J>N>FKEu_b&To^BT@6h4(owyUT1oI#bfLXZd@IP{{_%?vrF_cpUZBJLT* zkG?i8-7)TNg*7~rvJh{tM}C@pQdfhx5>S)Tq_Y?s&sVUVUDP;KsNTxAin&x!NojSo zP8vE>lRnNryMzl%7ri%b+GlT&VbkqY6W+2A%W`BExR;+A9)D!CfwcLK@mUA!LCYJ- z1U%yhzV*)TnLYS$t{W8h!tfcq$mxb9y+z`*TZaR9hp)swI87W z!KK>Q*?Ote{Sm6oG`>VT9%XxhHj)@^YY?8m+|nNF6|QVX$4gT-&N7E_ULQ2VO_>rr zVIw%tH3`%1GvRkJo4oo*-OU4K3MTtT&OJ?d|7Nz(>7HwXnE^iEEZC_9M<{lvbBrBn zU?l#gSFYuz34AQ{s0+}yNp?HfXRSsznM_$AZ3cfs!xjuTFT;@_5=x5ZO2Is;_(=KC za6>gsr-b6lkFl6#(q#1xr?x837EE?$-HH$C7{VMcIt$cbl=q=+u}y}sj4D9S^6q-U*c3i(3pMQ z%&>gBu791P zL1;ZQyomL@@?PkN-L1336-TQ^7QDKRtZO3#cnhqZMgoXa*ORqd{j$joH!}6B*K<_a zyyTCs?kosy_DEUY_*fuew$IDCHQ<}|`l{zWjGp(yo>sO8i~>%SJhaZ#N|tDP@Ih`} zBJa%ZW2rIANX(NGuvK55%a>8BXsju4jRHa{x4!1(oWly8ixhHyO5=muHtE3H{e6JhDv0^mzk|SgqAz#$-{~F@unN3*DHfO3kfVPIL=_4h7`_ z?VEAeMfh?k5squb%m*C>CmFYQ^OR)%d?$_J?6d#9MPA8AYM}x;iIi`_-08(*ZW~@C z{(+_~bP~_>aGB9WiiT*jAy%WIr0d9(VpsH?eTGgcLmD~Cye9PG4vS#r;hIbVZo|Ap z`^NJ6W2aYt>B#g{-!r~c%2SucDSPoFPQj;PXvV4_7dJT^lF9WnySwRarX?M}68d?- z(?a)Fd{2|3V%rUDnqIgv=4h68lfmJ*?^1nQAx#W|&vtx^zEe>7KAt_9DR%-*Js-DJ z9}uz)!Va%g84o1d1;=J4^SaV2RCbvOVwPu9y@;(P@vQ}x+Xtvsa!$kr3NGDQZ7dx& zjf$ea3*u?^j2O(F!fm|wY0tx5*C(|^QiaS`1LH9_I+Qd@G8jKg<(NcTcHxtZz2TuF zW|Lfx@oN)1FqVCzCD}B0if=(nfh*>5-^jIl5F!LISK{7#$rNnG)-?x=ZCNW!ovk>= zdS0|Ka%CFu3hI>V!+C`In)W%pRadf_`UPb(q>lM?>jIzy;C zvy%kJ=&o#rL4qhp8+ZFbb4RcH;0C#s6!$&BDLTdlH=3F$iBd%?hPxwqZBOOd)IBIO zX3{>nI~v{0epeS6b3OZ8@*do}q?ji-Awj1wIU(mTBL`zApJsR^MyojL*Vs{G#LCA5cv|eNzcr}Ib(K=+ zj)I85<%_?OAS<32VZ&Pvj~Fsv{=V zRK0Sw;%pa|86o#W8{9s-hLa|iS|T~5`!vGbowf=$-=fQR{Bx6jH19HJ736~UWc|}H zvNBwF?bSf|iKB`?tfY=#OPOo-O?>oe<8S4g{#xe;_rK!3y6tQb zcZNCiK92dAeH{XAMinjO){oc~-HOR$>70tQGpg=%QH>_YNUFYBPm~Yw(Z!j44GUr) zu1&_|%(-?j2Vy2(&6dqp8PxSME14~#u9LBS1(Tjv6UWfHU?I;WT6 z7O(ulkKyrAbWEAAE!)50kMOBMkMJYR=ERA^tQxtF0lY3O-*~5n^882p*4c>Ee~u&# zTp97WSJVLZvqDgLL*YV2J=d#UobPRR=ed}09CJY7vdXUPTXjR8$0V_tNLcI7Df2@k zs4|P%FZU!d=I($enOHZmWh;->p_g^Dht9QVEfSv!zTBJ_$J>h=?PB=tcG`F>&Ke`w z?rN=nI%~5c_MsOfQAZ6Q#0v?z>Cc^sSH-IGHVvm=)_;@XDTW>B`-3VF#hkC*v=3t` z?GhJKmAkC659@TD(H}0=tEP!~SY_q6DS8&jG^RLk@utq1)~E13!srzU;3#S8kITh- zZRF1Fii+vOB)1Q{SMM#md63}4@H-fkzWeoxTPfF8iuD{HyfDczu{b=OdvfIZRxGVg zWf}hmdsu5Rn%ks+Tu+bumm9XPHz_;Bp9M-yJ4qYXukbdBCf2#oWpx%~7Lo}z;TQ^e z`#-;iPo_avrQ4j31f+Q!Mv8f^6-PKx{j5)zhb!Y!;SCm$)|Iylt+%oJ0y7pm{*qcERm}9^qcQ4Vx*<-SnF&tC#y62#)C%5^a`OlzGy{l=wM^OD`tN zy7yRyg(j9o9^y-%s9bIt)u~QnZjE`w>3PL0$SeK1TC)>nVv?VV`YzKwy7bF94vrlrZ!hd;GZ6M~OQ^h;o3G*_ z^}FtxXXipRFQrh3i9EQk{7~$ z@qB*#nTI}u9_n91HTD`#x8;05ysooWf;pmO@RI(?u7*f_*;HQ&$%(XRoKQlW?2j8_ zfwF@Q6WKD2k-T#x?D(5dCo`%=qp| z=rztebL$gU|K*JzPIm~2;Nr%eApNEhHFS*bJ88=`b33StShS2~_#eRvc8Cmtw8+9h zmzHj~6wx>{^2uqhf_FouMOSi6AucKjPK>uixPOO#YRkahEC+``r z(0(S57Xm}Zl%kpWP=S>m+Lx4&8N{2D`Sa+y3sR4@u6HMlm#Q<~MsyKu!i;y)jxx!! zR}(91Ll0n%dlJtTyR#CxR4CLEzIserVQb48B_Zp6(9sU-}8oBfj?odf1@mT;lb=0_wriR;ZkCF;Aht9YDIr?E) z6Z+3A;fD{V=R%<1P);7wKS?!Sau~?KOjhda7uXYg?pac{@mwGInNhiV-Wv+5i=A0& z7kf@Q`e=&hr%<=_t*#BZ40?pQva)@f-YPXF(*nFy+{AC)yUf`s&^T*0?4vAt&A@8_ z(~(uQf2L0)?Xudd)yb48!$FtenZARKQBzcnf&rSJUiF<(?lMci-327kVS_|Ui;hMT zbq6zOB|nFZ;Yg`Qkah74OPC%H$IU}*Wl*}TyHUAwYSQJ)qe{lO6U6iK&Fg5e zXcmlwnipMEp)d^R|H19-Vo;J+MZC^9>OURf@=8|Gy9GJJLC<4DlsOCWcW5p zjn8XFsgbQjHE~EU9|wJ!)7A*yMH*LdO&GDxK=1*^jTQaydFa0E!@9*<`b2uVRdT)V z-OEemEJPhk!0J7wMMPCv>04zf;ZEsm(}u0B3Rea*YNRjn<8~)Lj5JO@qaW#jQ#NSx zX?)OT+?DZMs>{l)kOJgCKTEn3O?s?|>@2m*>wif?ne)0}vnJx7aG%yW+-hD!YG( zpHg)DG((+Io4zEa*I1%QTfnY67xK{}H~NuzL0aRg=m%}7)1w9q@;w31a|3DE<#V5{ z83y?3&>e0apPYPzo*6M-V9bp2;-|B`g8LFG(?ZXTo>FX#$&6C&Ib}!vW+F|y$!?g~ z?i)?lJ5E}a;%%UX8it##XvwlLHx2hCt}LGyeWUwE{!-a_vD&+H3H?V{%eg%zM~1l! zFiX5P_Jk2H?Ta@!%Z#gNHxoGCO$bVkDW#p_>uaOnQbKJ>hG8+qEQadA070Yt*zf8F!HXhW*MgE>ncB6Js!IS?AxnAT(?EIhx9i zaYD3`JxwFB4JE`W*Q~jPlt@|VrJ2Txrq@k9Fs9HKw1OPBitt|_W~EShm;-YNFd^kK ztY{R(8eT9jc@}6@_U+)9I{#ODYI}ngWzr{+s>-b5EBhq^e(uZo>SguwpS^?BM?%V$ zOB&8_mvM-a<9M7kgA6h@LqW_fUY%7vUOKbV?3hSz2+*5%Wnj&uG1oh^b)^)VHXNXo z6i!`Bcq@&0RG8NM`Cojs#kZZ5{RP4GQ^i~@Mi4kZ{;+?|^Mj@uxrKXk!B*PO@Ml&< zA5M47dTrRHU$t6l7*tAo-col|h5V{xbG;3PecD^-ktu8}i@jY$r-x}zH@=w}y16)< zepNpQ_jY4PZPT7*Ml{#u6?v!DX_t?y)j9rG9OAhrGfgip>RdToOSX6y^=O^aN26npBc6r*&erp-)$%L)c0lhvyg1w>#(DiU`tSp3997rsj%??i}q(8tG-z#s(Rm zIl{hBwKej8&6DHW%k>6N_08y*N7SDQcf#4rjOX8m-)FfbQZn|o-yZgu$`%5BJoCmD zlpE!ceerDnT00THBx4}>-RY!idlPu~tu0yO4$}e^AUoa@66!4!!<~T4fJ!9pgm%7D z;nqf1|C?DwQsxg4w&*t2CGOU1{xby_*gR}w$J7isf=yVi`e{E#`B%WF?>6~4_Bc}L z$#G$vRDXd=_Z7dCB#762tdeiFU^)?ZL4TnZ6*xkyf4KoDm-H=ZFGzCdh7brB_w&9m zAXA_?Y8s0a(ja|}!Vd5Sg4RoVyXxF|QYvUD8W6;XElu_D_csGVStFS1&EhXzeE@o) z;YB7uWipd~QxWa*ub_UVF@Omm8)&2x`=}7~ajjkS#AvxY1W+I7I(NNLXCn=PB$$%@ zpc=S~@yHj_+&PReDdo%1&dfxXZmqWXVS7CI+TXx8vq4|bmn#q4^Ba*EkK_G6D~q-2 zuh(4%FajgFGx#9z6p(L$iNYa-*;67-F8~q6o2^GjgjXdGkkm;cMaWj2wds56vB)kI zIRDC8628K>%I$D_!ZflXMkIkWsnn%S8TdIpLj1ZDNUj9t8%gl78dP}%8-6YY`>4LZ zYgo}c)a;P9pLa?YNl5IQWRMX|sC8hFOj4{B@QOvqH-=X~4k@(6kp6-Rg1fcneLUqf zydU_6J)z-qLX5srwgf1tSxEaZ!B1W&C6GK|#I9P0v%M(dgmQ?tQhoVDB&yka_FYM&N2<;b`)v9Q(V zf1J{63XkpdRW^@$qfEg_M1z$>F!%e;#O@*Miq#kXg-Ws#iTAf4pt*h@U+*=( z(f>^TT3#pWNs|!>u8G%IoW)mGRzZdL%5o3V;mNlJg3Ni$4fAhDAQP0wsoT( zMXzj(CMrM`)>$1k1!^tS7O|H)4btE9-~xN@A2g4U)Tj;3Y+b#mh@Q{PZb#zRrX%u| ztB6GiLbu>f`vJsKKt6h8x$YG`6_OVE4091=R(*StGk@d2*ttBPA1n#=UFWU(yiI50 zXMxQakoVY~8eq2!Bmrn%hY^w6a$ySJ8t{82>tYlV=!ezjRqDq}PmKZ1(uJlU>l1}X z9nC>m^A$F1nrdyG`ILZYRMIOH=VwP2{kYYh+VH`2asoqPE8k`^9>v~fT&FIMIYk*hH@n_dh zj&pq&)tN?;y}Vr(z`}9nZ9z77LRy*R>@je3YLE^nuk+xfbG<{<%{+k?!Z8x}dt^0L zvMW=7?QZEEfPq-U_`)q7{v9d5mn*vgO<=Ot>c0efK$C7TJ9@4%={+(^&7P%Gib6hW zAVdAWDTY>js{71fD=Y?WxknRm!y%1>ee?s=@^Qt%Y4$Ku~I14q?-p(yzOg&xX_(Gc&bIRKw2Xn0sBF zXJY_j_hg>!v!1dM4b|d6&cCi7pkK@vat#@jTkCIWE!Z-rXbBz_i#S?VUv1G3=gNhu zDap%j#TVJ&@Oh7=QN5SM1M)vSP7WE1Wnt)*CILT>>lt7p_4uZc;Qk|>s{=(sTXUdw zlcVw?IA9FZln0ccsQUSO$he#-=;YSQ8O#)J^33w?f)-CISHD>nE{Onctez1I;Gd68 z-397jx`HxEMv1Rgaqy;Xo`wD`QjZJOB@DGVG?C7#A8ldoE|3bXZhG9#qrq5D0F>p4 zGdX{54}!DUn%%Np<{Iwn9Q=4el320%;jU9#B;w3Cga@t-m}W>*=H9Yk@)aOFAgG#o zl0{yQ$Kz!Wa!~;c<80JHI>p&5=hd&O-YkS1F2zYh#*C5Y&*iKkDSh$t6ljM2lD7d? zxFmpYLjAof+fQSxc{e+r+mX8C$T~M=>A2AK;Am)|a^+_atNwa=C;9Rr?b*U?E&zyo z@diQWlvvp^M+FYsp7YkA^==kkO1M=Wu+Q!i2t1Pm-ZzP|(i1#`H_UA$fR26c@`kz1 za9c96ds>F9mnL-tL!%x(L*3b5HESPxQzEwBCf$ie*yq+xcb7V^?ZQW3Q~zPWU1a6B zEqpcOcj8gv%SKu#lA@^FbnlT_!#~Nl6qQnT9q#q@OOnd|yImNdSh_!$Ab< zEY@B`_O-1c;OZ6Z?imbXO*A43>z@DkX?t~#1|Ju?k>#xz)yF1zZEI3#7xXpX`O76Z zZt8qc#QLgJg5)_ay$DXU@`M(lm1hh6k2Ig^sL^#;O~kn+-e^oXO029LeM2P5?%EO- zb^NiyXf1+Xk-Jj~4SMzV zuvu&L`n#r1Lc&AYZOv|&3mwKYY))bqkm+1{ zWkiz!KTo#YWaT?Nf}7~+W96VLrMfDmTx&<#d>j6)SqsHV-qKRwY-1r zE>HDaXZ%!bZl?!u&ut@sp^s~)Mm_+o{*FKWZ<*x>u-(Ed4>LHA5V$$t>l~3ZM7eNtjjRP9gx>??})fA zmI$={RVDSf7K~q?^H69xOu;>(-YrY#ev!T_Tr9^^F`o)ufi=oSXGlZmLa>W-Rc9|Y z&x$TS;TpuG8Om1yrld!V7TTYEwP7k8(sZ2ZLA=3 zo`va)U~SKlFrH+5B{t`2PbE#>M}WghEc-uteq4>xT!X2IFB^jyaO0Oo38C5rUe z%kBU&$s*B6l| ze(Q^lJz8q(cRc~P=+sn^UF2^jsBEURGYG-_(HzKk3X!NNu*v3_Afp@WIi&9* z%YMxKjij7bwuk@uJT%91rRfW1C+fwGA!x#>9wb*U7JbY`bV`-Kf}qZZ(Cu%klLep) z1ljP%DpD||3ESDUhW!Yfx_-kURB zZhN0L-xVw2W*j|e6q+KcM3N?krV%GJKR zeT#Rh@CW~R$szopgl$gPtbkjFFXxXr<^B@yxZl({M`Eo=(bSg7LY3_MEndiAP<(YS zhl9i4EQ$Vh&tks0tU~o|x1uCWcPt?4QRbJqwA6#(SU=l0^Z(QguW6dQ5U<&ydnfNhe=Mwdg64d=80R>qQokZ%^(Cjb_# z8L`om2t5#w^q2FXQcv)PZ{w17gUy7x@qX#Tp0r zhE?OVk~eo}W56)(|Cedz6s@*}ceSK_yS1ND42Mj==d%mR9PTK%9)UBQL)r37V+sz~ zmHg~+*)jfDw&mIvZ3@B;A_6}0BT|72U^NKSJRW(L^s}ZYa#Mj|AMJ92)Gx9~0ienk z;f9gXCMo&SJU2(jM~J$tQvCE6IP;J@ga{rN;I6%I(qfAcvd{do%J!2p=O zrt!7PgBMDmg(^@X5ixTa+*$5Gt8%bnyGg^&giw*OJG>P(1Srz&@@p_eJJlfOnbh zL;m9i_|Y(rWpm=P*caoz3&*;Nbd!UW6~-pVAAu%joXAwsCapou>Zyc#l3`bC=s| z&a%KxYj8csn`rb7G%Cucs#)#e+K%bjNzhy2oWAhs(fvbu$;K0g;Rq+~QM{hxY1H43 z`hz{lBxz~GEgwKpX=bPqmWJn>l4LvNdn{slI5_06Y_8+v)!*p1!}qI}_pZ|z+Xq;w zQGmPU`X13sRl!xkNP|ndl^KfM!M&Ec(Al{`96vw~4mKil6q)5)RVDBHqvFQHu?oJSA7vIt3nn(N)g2 zLpy`^>XDS>1!sY(lZ*l1ABXq-|BwyTn0Cdo^V}L^pQ{MlkAJ`AoX`%?)984~%O>ze zm-ewA-?l#xj>x4f4L~Ne13_^oIBc4e^;v4*?;b@wNqEq?57-ao9v-MyITy8GXh!G* zE&P=)#~Xj-kyL_(>6K-}SHB-MchUXI??iX;O9t7Tl8@S+E!J^@!{|#B_&7Qf6l;${ zm+0176?ieeHE3_x=kVv}=TX?F^3b0J-4X0YVIlyI%UR4>I(jf_kN;l5!))r=ok9B+ zw!BY1J-1Kp+IcH7FsyL!GTM~>ewA3w6u8|IdVG9*;4fau+q}Q!P^+RjM}RZet9=|C zF2d|L_Y61&lC`Sq-0EjYeTo0yFL^z3qg7ZlJQwcJu)~RZ#3(Zz^?vFF z%FUj?pOC7VBI3Me%7fQdGlSM$LypJM?{~Jp_RWNasQd2Us|^5WaI)S?Ik4jN(5-043DpCb2SZ-zIJR!pIZO|Le4Ty=aR1SLpWCij5-_DQz&t^HEZ zJ@T!@gHPkUXiaiHzdI{8ay*@24``)k=(jQX&XJ>_n!r*}rr|OP0KRWVH+T8(&E>@Z z@B@$pJjOW@c+8MTa;Br}jrjXpMxSrAJ~{hjkNt1{r}v!wJ*eOl)rG5Ay#M$6FX}G0 zBp!Xyi<{j26uU>|=5_RN{3r$XXps2`vF|ziUummxH9&A$oTly+K07=gEvlo-;^Zh= z|M#AIjxD3cO}*>dc;!e8l9G>evVxmAOmrK|zt>p)A2Q%fEYL)0i}{r9(P#@#Z1LCM zE3iCu>JB_||CjfxZ$waKJO)+ZTc48t!=7Rf;O>U&qPn)-n#>(3^620_0F%m({mv{8 z{&#p-lY?M*_}_wVvadaZVHxPX#~vC9iK+o5=$jLvfov8$KiYh*S)l+-;I?q~PnYX9 zPAj{9d*i%G!>{9&Y5v7M>F5)i0~z_iwF=BFx4xbbq}`f3LzB-#`2P!yT9x1E1gDUT=z{;r}~_ z83)*pH{;;4lv#mD{=Myj?(mlOKKxYy1PPOhICu`X7@~halWC9!!{Cye@<7sR7_3!H|6V-`-*D9@{DCa+S4J|3&JnR>r z+y;aFr?dw1YHumbQTz%R^^sN)B?#y;#j8o9aVjM!Z zb)I+6o;`mjuLcG6CtJQ|*9$M-mi@b(kK=1qBlgJW^sYOfoY_%rpuSQBkF@Or`{g;G z4W)ju)nLt!(c!tA{7fLEgi-HTbN?&x5>`|1zx!75QO6eIMHn524NggxAlpFaLFQ zbGQmYBC966jDe|~<{(O>4(F*DNm%CWo!7HCon_@gQjwzM6hKVmBMK&#C6 zsqW#_zOd9<@-!>u_>HT@=2fE|S*EW_j{ZTrZnG0UjheVTq5WL?{MgSud_6hlZF7nA zM24g&GfM@auz0L5yZ!;!2j2b1ZsqhHH(V2QP zO23f>i$oj#@9S!ZL`04*kpI`*@8X%-CqOI6MQ^qK@5j2qu56lTvhgmW zzQc>xK{gf#tgJ5Vy+B02jDD`=ys5P{`MG&%1I*_fzFg-IAsf0jKP`z1iqPn}%+Y=3 zLGap>J@R6f&}3pNcmkz7Rn(nE6k_U1}gP8nDcab&lK*dtCb6P?Sb~#0X^Am$xvF;4Yx3%n$`SssZTphd2XC!g-~N!# zWtCC&`n8n$Yp|GlLnERL6xpG%J_^`3R@cg~v^tDkG~N|CTM=iH@GBR$ce9)8;p*2KBf8LKOP z5P@dGDxi`NNBI`ilY{2t=)5NgX2_gC`ej>KzDEIeq_vF8mgX53Sxn`pNkGh(Bv}g=OmD z=3W;m(o1L2xyy`jzkaZv9O zgI%S8r*ogIeW~>a((DZV!Gj-*OFwNt%XtL8{-Sw$5a3}r%>jrK)etRa6q22uD0ua} z6u}bHj150B0%=r{;H?@slty#z!vFky6!p!lwz_w`?7(Y+=uFkW=O4BQmuyhA3=Cel z0x@Or|IcehXz@(6VAOWQNS7A8(oZ>2;I#PUB~Jv3jgRl`xU$n7$k7aMh!JVucD_~6 zZ+a-4CS0PhTK>hR3djJNXs2^4p&SY(0yac?Q(t2LH%N?o#=32Jf0R$)f@o&Q8me~9 z+_w=BlvXnc42MG1QB^3Q;TFH7^+93yk3jlf!7BgxhTyP2^0l8lLSaq)^On|>6r-+x zdTep_-=JqImOF#6ddaZ}fK(aIU&wCTlttFas#>(-J`7=*{n*RtzE?{q>g-IvA9Zx3 z?;7-u$~Lhaf~NG1Uwxq=`|!AzTr_T@7Vn>z#Ob+Y36)UCF~8} zv8&_#pJf!D3hoRLRw(_a;{&XuR#vq=JFbfDwsHIE?*#x^lZsfx*g?!J69|2kV%U3i zGgO~gITsr~$W7YzUHo}&B(Z=1AD+3;azn){H2mfy!X0!#M3$NrY#X8wZX7;Z@gHFb zVw)D2ZvPln9o^0E5pf(iEK@X}#_zoqep4!U_iD;0s{OzAt~9L4Yg?mML2=@O1tEZf zMNpBV3=w6pB2)%ZDWE9Cf~^7~MnD+@I8+2l98eHtkVyptRVEEX90CC;f{BPSmIQ$? zMZ%B-GMu$z+jH)(d+&44kMs2L`(p$W!p`1nz3W}?_bwma7AxFC_I?hU4;B!$GYm7k z4RD?){#i%Z`N=d|W?)qHc;uY@x3LGZIAw-K7a@Z!`J7`_m8tkBd`{7wnI!gYw%P!e z6&^_PW9H{si#aYr?8lXxfBr%H$GlWVQjfjU=rp&-8W}8wYcii1&*{|H3F@rmLkx06 z2Cy?PRBNuB2EUyUaK*|4LoYpRB3KKFrjcXYjGJ~mrx!Xb>#dQO-Ot*U55frNmYCJw z#Y(E!_m9PvUHa6a?|oSZ5_ibwvL;QHzT7;0Ch5UjZ26PI5vo+e0ZGTJ-qX$`g-5z} zm+up53w%D$xTHXtHX)Akb-=y@7e}9x2c6iZ7J6~W_HQx~C(^n20j#YIyuhW6V-0l4 zgf5{A-K5?g>1wy;geZ;GT^+E9ivKDEvsaU=?AjD?d+~yJ)rTfas7ldZ@cB`Qvd>S+ zXHl84{s`={CZ8Q1@sa(zGq!~%k+5~bm$V~6PNQ|vXU*G><&?r=^i4q$POJS8M#a`` zA)X};$S=jDu03-G2nbQUt~*=nW#ZR{o`EMJtQ=&(6pt&~D42TIM1@b?Tt*Wou-UdD zMBRsTJavm+;`iCaUtf-j4g}l-WXM%zb@oSO%Ix1J3VT!ZEA$uhc3syak1JiLB>AM7 zu|^CnV0PPDgWw}R!#cNqo5uuee@VlSrLW8G>^vjHbU@l*iSnAdh$`d4%2 zYOZ8HMmPsb52PF2Me2pO5 zBg0?y5R`M5D>KwP>d+sd_>7`2=2Dj{7pmf-@am@iKXl`O9^n8#+b~QtK`6eAfgE(A zOnB|Gjy0-^EnwQAt5hOpf~~_<(oXT~Gc~T&^r71E-|#MM6!`6X1mY8bD})N1_^MtA zJx&msJtS6QsM5ovLcx1TJ3kR$1pL>denjdae>*0emdv#YabvwNB|Sk#Sm>E`YhR*PO6Nh|F`^^Dxo6lGE}C0In8&_rYSF$YN+EkTTg& zM*1!?TdZkef^28QyV5V!*ce_?mRIkB``CqQk#H_DWanZp(lLZUPs*b*`6U-NK5Pq3 zgQBO%y$jF>q@CT3DMrNzH-96GIxIBUk?Zn&433he4-_R|Lt%$PA*D$PSi-J2*~{X! zU@SEzMq{TSG;?z-(G>deA+p$dgINQorvSa4sqFQ1Ow%`Mzzo$AgVO1KHP@`KG{ecB z&`n{$m^`=9eGy=4hziQLYM*}^ZK^H+fb{`}CXsj2k^p@qMtnHG9JFA$y6*5Apo-%jbC`|Cyudv84=fh_&OW?DrTXxaoG0JJyMQ4v%YfI~L66fp2&f{lF|9}tm?1z5E3 zD3#-o$`@5^iF@pP2m8pA+&#%*7P@sPP)pZKu?ye>n%klr+NQl!%(ND})^LxcLIp%r zGNOu3byuWZP*m-|KX(sceglo;ziuxJutq*!7QiLLdqM`s6p)e>dhuD2hFK~vjFQPY zFN$-Zl$6tN?`yc;Lwbz-eo7+ul&ii`)!%M^s1S@KQ;?$}ECupF3e17hg(Cyf38#T` z7!Y&}Zq5`ssc-%n>bc)@urQWrVsG=0W1UYqFihuFfSjB^N%m2W>xf?8Ha9B1xOn9? zEAYk|FqIn~E6Efew*W@7(8~ci7e#<70I@q|cCvU9#>{ti1jkKh*g;4ilV;+#4+<%= z9T9U2nFGUn0?29>qtcH-|49K>d0T-7QtDz2nTNgVK4)?@MpjVP2ta5u(*D; zFW{T-WzPzLb-7UkmKFKHm3lPiPQr3-u!QAAC5-21ZgZ6OCKu&#SYbdBPROT>5wE0M za8&M?3g1==5~LdtX%AXnXCQ?1CxhwmnKv->g7I_VyoxtaIH%WugWJ8pimvjA1+nqf z$Q822&Wr+7C=*Rphx37e8B~fDQ{X*g87jgw- zA{;n$D;aDvad|P~wirYNC+G6(uj)1zy(2S#BqbkqOH?%~g78cZ>ZxfhaFPLdhE#IU z11%*YlGH6DLb`*%5owF)HGpqR5Q7V!mW`h=+LQ3^(D3Xe=ek7HEZrt<#fjb2Ekce> z9d|$jT`l0OF&TM|g-0W_+9I=5ET?*=TfAswGppaA>EupsucIMg+0_nM?Y872PV$Y* zBU9w%%|OkrN$7cO4g|45YsqL3&|*$#gU-;_T3to%m6KqJY#xb>A-6m`pIS9bj}g&L zj?`b71go%`5046+qrpzM$+b}!rdP)t*G(O68 z%l0su2TkUcl|{j3#O8!QT5cEKdB8P7Er3%<#=<$131uG zCVG$!yjLttegS`t)RUw}<8Wd3kve^U>(>p|)aNnq}l^B5ied(A)ca zIpD+Wg1qjb#!OGfU9|*y!z8G?sx(T-6A=PRd}5L|3Vcu*0bcG==JHqm~vo_b-mGv zO9od_ktQB)g`z4&+JmNVO(bqtuboW?t4MOzawtsmfP07CRn8qVh+v5_DK&K#TpcJ^d{!g<|IP~YZ!-VcuQD`*W z!qXgQuBGH}e_8EnIUqLCl-;LG{7i`b8UDm6R5jc~MJT;5RSS9lq^_N1skI?>AO~(P zYmPhfCVQt}=M%i}e%ljO9_ah7Qu7sTWic1DIupUZb(b5i&OmLeLbzK;OFSUy)t0QL zp3EJuT?5=5q^dmsi$ow` zOBv{no2U>xjTFBsN#`qibqoyMb;+N%6uV0Pb?T=izjlROr5}(%z6tRA?)KLNo2@|| z#svI!b!{jNdg|YHgAaZZ_}J}yA=P?05}O5CzzSre6yJz>E* zb$(pIUMZdZH1#q8K;?Pd{q4rjHLS76!>ikmTzBRfPrwpLrTHvLzj5zuj<#4IXD^6F zl!KtcQkFq)PqY-V)HcO>wrLi*L7XbRLEV~`xbQu4pyWVfvflV~sP$l`bqv9?{P=+~ z$8gPNGN-$;P}%;WU6m#D=_W!>1k}>TPzx>ujR85fCs)&)T#JPz#7I-=3M`=MREFqm1<=Af|Bcgn|N z8s<^F;#VW-CiCqB*NHc;jaw;{SwUTJ;H{!~c3KSB>GgR8R7}@A>xJa?oBd|G@mr*h zp@8bNJBFshg>&gqJ>X#6r8;M;PO$4E5~m+H_#?qzbs{s#h+%mjp845R+jJK1{GP}U zjM}J|6xXiOmTT%&%<}x2PN6GWNO(rlO)@ZlVHMf3NJ}pE@!Qt6whGSW{Lj4TX8V{q zWd)VaTc38%ZBfsU?$9G{A^QCuH&4F5p{;OwHa^Lez66-C=)Q}4QoCMplwLRly}&-w~wh_bm3CU_Rjzbs;$ zRUP^xD`lxt&*3n*-m-Ek4|H+gyhK;d$8+UKBE~arRB}Mf8_AYv|Iqg=AI3pG=q?Fm zT|9-Cb}BRs>tw%9shP~1guXL3e8%jZ@eK`rzvx>$W)iBpTRF`@=%rJMh}=Q>O~`Kv zvB0uU(KunWS;R;Rqct)QcC~47RiB52D%aZ#T#{z8=dUy@_832OM{5<(z>^qRzo2xv zy_FQ`%qD&fYVIw~M8eb=5Xas@;ccke^C%2wXyyx&6e^Fs$sYQU4AbT>h~f>ZkyJ3E zJW!{l?g%&4*tg)Q)hEcCR`Mf)YSdQWjb?|=fNCd2GE*$I5O?*6z0x)x-943IUA!jC2d z>=#Lw$=Ni^no%~2_~uT9JeXF|#sKa3t)vncYEU=ojUku+5HLdQ zHyBaK!{fT3hi9tYyMn&0LWQg9N^#~kWB9zwIjL-R9c>IcB1{l%ER!@b%*7$}K- z#8)Wa)wFS;!ChDpWdi*Z2P6=pfP8}iO6nBu4vg|Mn}Ngt2H{fTE@VTFlq;~J0T|mbdD_!v6 zVKYcLGzV(H_YQk_KlAGE<5S4pQYcPK7+}{ABAnL~gC!=6wKkH}06kHzabLkdS?6p= zl4i&4N|WTk@N^&_l7BwJxYghm?gyRWX1ZP`_?O`in!(;-1g>P4O|Psdg2%Bh zWc301>IG%g<3ZOV85&2ARAj9Z^ho~>!prE|gGGgcoZRoyLbw3(HkK{gul(oNIzatg zu)=2a6nXBu-2c`Tf~O3wMAa$OtsQ9k6@z zK-nAIuh^?91L}Kb|19&-Z_YX?JGt=a-|~lic|m9rqwD{%8NRIHmo{MZ8{5`Fbd`}Dv1L#<{u$%s20sh|TJrc|*!|XDLHMWI1hZ(xB`to4#7p*N z(Jr<6Pk~~=o7^triqKgbT%);ypgFY|J^p7*{f}P{c&~q>=xfmctNL+{%Or;?lMk(A?^s%DM%_}-uoZ#QJuH@&Y0{1_jS6X{^ zzG6Y^&?r>#ko+)T_601=-)N)#?-13OKlw`%g?<0GOQK)S^1q?n`Vt(z1cxud0m)?1 z^-p4Aa1F@rTMMH9;xW>55qIS81_a6j_rSlXjF4*}d3G;!i+5Cl~Qpp%Pye>@-oXH*%t+$qX=E`<=_WGeGoL`f(U}+0d9y(f}!9JM<`R zVPjjkiB1NC^3o5mqZ67nFtq_FJ{4!vc7Kz1$H +/// Layout parsing strategy +/// 布局图解析策略 +/// +public interface ILayoutParsingStrategy +{ + ///

+ /// Sets the layout diagram to parse + /// 设置要解析的布局图 + /// + /// + public void SetLevelGraph(LevelGraphEditorSaveData levelGraphEditorSaveData); + + /// + /// Gets the next room to place + /// 获取下一个要放置的房间 + /// + /// + public Task Next(); + + /// + /// Gets the ID of the next parent node to place + /// 获取下一个要放置的父节点ID + /// + /// + public Task GetNextParentNodeId(); + + /// + /// Is there another room that needs to be placed + /// 是否还有下一个需要放置的房间 + /// + /// + public Task HasNext(); +} \ No newline at end of file diff --git a/scripts/map/IRoomInjectionStrategy.cs b/scripts/map/IRoomInjectionStrategy.cs new file mode 100644 index 0000000..3f33fc8 --- /dev/null +++ b/scripts/map/IRoomInjectionStrategy.cs @@ -0,0 +1,10 @@ +namespace ColdMint.scripts.map; + +/// +/// Room injection strategy +/// 房间注入策略 +/// +public interface IRoomInjectionStrategy +{ + +} \ No newline at end of file diff --git a/scripts/map/MapGenerator.cs b/scripts/map/MapGenerator.cs index 03daf44..86e2419 100644 --- a/scripts/map/MapGenerator.cs +++ b/scripts/map/MapGenerator.cs @@ -1,5 +1,7 @@ -using System.Threading.Tasks; -using ColdMint.scripts.levelGraphEditor; +using System.Collections.Generic; +using System.Threading.Tasks; +using ColdMint.scripts.debug; +using ColdMint.scripts.map.interfaces; namespace ColdMint.scripts.map; @@ -19,6 +21,31 @@ public static class MapGenerator /// private static ILayoutStrategy? _layoutStrategy; + /// + /// Room placement strategy + /// 房间的放置策略 + /// + private static IRoomPlacementStrategy? _roomPlacementStrategy; + + + /// + /// Layout diagram parsing policy + /// 布局图解析策略 + /// + private static ILayoutParsingStrategy? _layoutParsingStrategy; + + public static ILayoutParsingStrategy? LayoutParsingStrategy + { + get => _layoutParsingStrategy; + set => _layoutParsingStrategy = value; + } + + public static IRoomPlacementStrategy? RoomPlacementStrategy + { + get => _roomPlacementStrategy; + set => _roomPlacementStrategy = value; + } + public static ILayoutStrategy? LayoutStrategy { get => _layoutStrategy; @@ -31,30 +58,62 @@ public static class MapGenerator /// public static async Task GenerateMap() { - if (_layoutStrategy == null) + if (_layoutStrategy == null || _roomPlacementStrategy == null || _layoutParsingStrategy == null) { + LogCat.LogError("map_generator_missing_parameters"); return; } //Get the layout data //拿到布局图数据 var levelGraphEditorSaveData = await _layoutStrategy.GetLayout(); - //Finding the starting room - //查找起点房间 if (levelGraphEditorSaveData.RoomNodeDataList == null || levelGraphEditorSaveData.RoomNodeDataList.Count == 0) { + LogCat.LogError("map_generator_attempts_to_parse_empty_layout_diagrams"); return; } - var startRoomNodeData = levelGraphEditorSaveData.RoomNodeDataList.Find(roomNodeData => - roomNodeData.HasTag(Config.RoomDataTag.StartingRoom)); - if (startRoomNodeData == null) + _layoutParsingStrategy.SetLevelGraph(levelGraphEditorSaveData); + //Save the dictionary, put the ID in the room data, corresponding to the successful placement of the room. + //保存字典,将房间数据内的ID,对应放置成功的房间。 + var roomDictionary = new Dictionary(); + while (await _layoutParsingStrategy.HasNext()) { - //Can't find the starting room - //找不到起点房间 - return; + //When a new room needs to be placed + //当有新的房间需要放置时 + var roomNodeData = await _layoutParsingStrategy.Next(); + if (roomNodeData == null) + { + continue; + } + + var nextParentNodeId = await _layoutParsingStrategy.GetNextParentNodeId(); + IRoom? parentRoomNode = null; + if (nextParentNodeId != null) + { + //If the new room has the parent's ID, then we pass the parent's room into the compute function. + //如果新房间有父节点的ID,那么我们将父节点的房间传入到计算函数内。 + parentRoomNode = roomDictionary[nextParentNodeId]; + } + + var roomPlacementData = + await _roomPlacementStrategy.CalculateNewRoomPlacementData(parentRoomNode, roomNodeData); + if (roomPlacementData == null) + { + continue; + } + + if (!await _roomPlacementStrategy.PlaceRoom(roomPlacementData)) + { + continue; + } + + if (!string.IsNullOrEmpty(roomNodeData.Id) && roomPlacementData.Room != null) + { + roomDictionary.Add(roomNodeData.Id, roomPlacementData.Room); + } } - //The starting room is regarded as the root node, and the map is generated from the root node to the leaf node like the tree structure. - //TODO:将起点房间看作根节点,像树结构一样,从根节点到叶节点生成地图。 + //All rooms have been placed. + //所有房间已放置完毕。 } } \ No newline at end of file diff --git a/scripts/map/dateBean/RoomPlacementData.cs b/scripts/map/dateBean/RoomPlacementData.cs new file mode 100644 index 0000000..60b1040 --- /dev/null +++ b/scripts/map/dateBean/RoomPlacementData.cs @@ -0,0 +1,22 @@ +using ColdMint.scripts.map.interfaces; +using Godot; + +namespace ColdMint.scripts.map.dateBean; + +/// +/// Room placement information +/// 房间放置信息 +/// +public class RoomPlacementData +{ + /// + /// the location of placement + /// 放置的位置 + /// + public Vector2? Position { get; set; } + /// + /// Place the room template + /// 放置的房间模板 + /// + public IRoom? Room { get; set; } +} \ No newline at end of file diff --git a/scripts/map/interfaces/IBranch.cs b/scripts/map/interfaces/IBranch.cs deleted file mode 100644 index 715ed9a..0000000 --- a/scripts/map/interfaces/IBranch.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace ColdMint.scripts.map.interfaces; - -/// -/// Represents a branch on the map. -/// 表示地图上的一个分支。 -/// -public interface IBranch -{ - /// - /// Master branch or not - /// 是否为主分支 - /// - bool IsMasterBranch - { - get; - set; - } -} \ No newline at end of file diff --git a/scripts/map/interfaces/IRoom.cs b/scripts/map/interfaces/IRoom.cs index 5164fab..ac10671 100644 --- a/scripts/map/interfaces/IRoom.cs +++ b/scripts/map/interfaces/IRoom.cs @@ -15,6 +15,10 @@ public interface IRoom /// PackedScene? RoomScene { get; set; } + /// + /// Tile map + /// 瓦片地图 + /// TileMap? TileMap { get; set; } /// diff --git a/scripts/map/interfaces/IRoomPlacementStrategy.cs b/scripts/map/interfaces/IRoomPlacementStrategy.cs new file mode 100644 index 0000000..e90ad20 --- /dev/null +++ b/scripts/map/interfaces/IRoomPlacementStrategy.cs @@ -0,0 +1,41 @@ +using System.Threading.Tasks; +using ColdMint.scripts.levelGraphEditor; +using ColdMint.scripts.map.dateBean; + +namespace ColdMint.scripts.map.interfaces; + +/// +/// Room placement strategy +/// 房间放置策略 +/// +public interface IRoomPlacementStrategy +{ + /// + /// Place the room in the designated location + /// 在指定的位置放置房间 + /// + /// + ///Room placement information + ///房间放置信息 + /// + /// + ///Placement success or not + ///是否放置成功 + /// + public Task PlaceRoom(RoomPlacementData roomPlacementData); + + /// + /// Calculate new room placement information + /// 计算新的房间放置信息 + /// + /// + ///Parent room node + ///父房间节点 + /// + /// + ///New room data to be placed + ///欲放置的新房间数据 + /// + /// + public Task CalculateNewRoomPlacementData(IRoom? parentRoomNode, RoomNodeData newRoomNodeData); +} \ No newline at end of file diff --git a/scripts/map/interfaces/IRoomPlacer.cs b/scripts/map/interfaces/IRoomPlacer.cs deleted file mode 100644 index 1622f4b..0000000 --- a/scripts/map/interfaces/IRoomPlacer.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Threading.Tasks; -using ColdMint.scripts.map.dateBean; -using ColdMint.scripts.map.RoomPlacer; -using Godot; - -namespace ColdMint.scripts.map.interfaces; - -/// -/// Room placer -/// 房间放置器 -/// -/// -///Responsible for arranging the rooms on the map -///负责在地图中摆放房间 -/// -public interface IRoomPlacer -{ - - /// - /// Place the room in the designated location - /// 在指定的位置放置房间 - /// - /// - /// - /// - public Task PlaceRoom(Vector2 position, IRoom room); - - /// - /// Pass into two rooms and calculate the location of the new room - /// 传入两个房间,计算新房间的位置 - /// - /// - /// - /// - /// - /// - /// - public Task CalculatedPosition(IRoom mainRoom, IRoom newRoom, RoomSlot? mainRoomSlot, RoomSlot? newRoomSlot, - RoomPlacerConfig roomPlacerConfig); -} \ No newline at end of file diff --git a/scripts/map/roomPlacer/PatchworkRoomPlacementStrategy.cs b/scripts/map/roomPlacer/PatchworkRoomPlacementStrategy.cs new file mode 100644 index 0000000..9e91a2b --- /dev/null +++ b/scripts/map/roomPlacer/PatchworkRoomPlacementStrategy.cs @@ -0,0 +1,34 @@ +using System.Threading.Tasks; +using ColdMint.scripts.levelGraphEditor; +using ColdMint.scripts.map.dateBean; +using ColdMint.scripts.map.interfaces; +using Godot; + +namespace ColdMint.scripts.map.RoomPlacer; + +/// +/// Patchwork room placement strategy +/// 拼接的房间放置策略 +/// +/// +///Under this strategy, think of each room template as a puzzle piece, find their "slots", and then connect them together. +///在此策略下,将每个房间模板看作是一块拼图,找到他们的“槽”,然后将其连接在一起。 +/// +public class PatchworkRoomPlacementStrategy : IRoomPlacementStrategy +{ + public Task PlaceRoom(RoomPlacementData roomPlacementData) + { + throw new System.NotImplementedException(); + } + + public Task GetStartRoomPlacementData(RoomNodeData startRoomNodeData) + { + throw new System.NotImplementedException(); + } + + + public Task CalculateNewRoomPlacementData(IRoom parentRoomNode, RoomNodeData newRoomNodeData) + { + throw new System.NotImplementedException(); + } +} \ No newline at end of file diff --git a/scripts/map/roomPlacer/RoomPlacer.cs b/scripts/map/roomPlacer/RoomPlacer.cs deleted file mode 100644 index 13ed493..0000000 --- a/scripts/map/roomPlacer/RoomPlacer.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Threading.Tasks; -using ColdMint.scripts.map.dateBean; -using ColdMint.scripts.map.interfaces; -using Godot; -using static ColdMint.scripts.Config; - -namespace ColdMint.scripts.map.RoomPlacer; - -public class RoomPlacer : RoomPlacerTemplate -{ - public IMapGeneratorConfig? MapGeneratorConfig { get; set; } - private readonly Vector2 _halfCell = new Vector2(CellSize / 2f, CellSize / 2f); - - public override Task PlaceRoom(Vector2 position, IRoom room) - { - if (MapGeneratorConfig == null) - { - return Task.FromResult(false); - } - - var node = room.RootNode; - MapGeneratorConfig.MapRoot.AddChild(node); - if (node is { } node2D) - { - //If the Node is not empty and is a 2D node. - //如果Node不是空的,且是2D节点。 - node2D.Position = position; - return Task.FromResult(true); - } - - return Task.FromResult(false); - } - - public override Task CalculatedPosition(IRoom mainRoom, IRoom newRoom, RoomSlot? mainRoomSlot, - RoomSlot? newRoomSlot, - RoomPlacerConfig roomPlacerConfig) - { - if (mainRoom.RootNode == null || mainRoom.TileMap == null || newRoom.TileMap == null || mainRoomSlot == null || - newRoomSlot == null) - { - return Task.FromResult(Vector2.Zero); - } - - //计算主插槽中点在世界中的位置。 - //mainRoom.RootNode.Position意为房间所在的世界位置 - //mainRoom.TileMap.MapToLocal(mainRoomSlot.StartPosition)意为主插槽在房间中的位置 - var result = mainRoom.RootNode.Position + mainRoom.TileMap.MapToLocal(mainRoomSlot.StartPosition); - if (roomPlacerConfig.RoomSlotOverlap) - { - //执行减法,从槽中点偏移到左上角 - result -= _halfCell; - } - else - { - //执行减法,从槽中点偏移到右下角 - result += _halfCell; - } - //我们不能将新房间的原点设置在主房间槽的左上角或右下角,这会导致插槽不对应。 - - //竖直槽,我们需要在同一水平上。 - if (mainRoomSlot.IsHorizontal) - { - result += newRoom.TileMap.MapToLocal(new Vector2I(newRoomSlot.EndPosition.X, 0)) - _halfCell; - } - else - { - result -= newRoom.TileMap.MapToLocal(new Vector2I(0, newRoomSlot.EndPosition.Y)) - _halfCell; - } - - return Task.FromResult(result); - } -} \ No newline at end of file diff --git a/scripts/map/roomPlacer/RoomPlacerTemplate.cs b/scripts/map/roomPlacer/RoomPlacerTemplate.cs deleted file mode 100644 index 99557a2..0000000 --- a/scripts/map/roomPlacer/RoomPlacerTemplate.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Threading.Tasks; -using ColdMint.scripts.map.dateBean; -using ColdMint.scripts.map.interfaces; -using Godot; - -namespace ColdMint.scripts.map.RoomPlacer; - -public abstract class RoomPlacerTemplate : IRoomPlacer -{ - public abstract Task PlaceRoom(Vector2 position, IRoom room); - - public abstract Task CalculatedPosition(IRoom mainRoom, IRoom newRoom, RoomSlot? mainRoomSlot, RoomSlot? newRoomSlot, - RoomPlacerConfig roomPlacerConfig); -} \ No newline at end of file