From f937d9987fd1ab719d1db410453b79ab93987d02 Mon Sep 17 00:00:00 2001 From: Chris Cardozo Date: Sat, 19 Sep 2020 13:29:10 -0400 Subject: [PATCH] Updates to plugin to build 5 --- .../GMS_fnc_createMissionMarkers.sqf | 2 +- .../Functions/GMS_fnc_findSafePosn.sqf | 2 + .../GMS_fnc_garrisonBuilding_relPosSystem.sqf | 4 + @blckeagls_EDEN/addons/3EDEN_plugin.pbo | Bin 133307 -> 140667 bytes @blckeagls_EDEN/addons/3EDEN_plugin.pbo.bak | Bin 129973 -> 0 bytes .../Core/fn_buildingContainer.sqf | 5 +- .../Core/fn_configureGarrisonATL.sqf | 30 ++- .../Core/fn_createGarrisonMarker.sqf | 19 ++ .../3EDEN_plugin/Core/fn_createLootMarker.sqf | 20 ++ .../addons/3EDEN_plugin/Core/fn_display.sqf | 7 +- .../Core/fn_displayGarrisonMarkers.sqf | 30 +++ .../Core/fn_displayLootMarkers.sqf | 27 ++ .../3EDEN_plugin/Core/fn_endMessage.sqf | 7 +- .../3EDEN_plugin/Core/fn_getGarrisonInfo.sqf | 38 ++- .../Core/fn_getLootVehicleInfo.sqf | 31 ++- .../Core/fn_initializeAttributes.sqf | 2 + .../3EDEN_plugin/Core/fn_isInfantry.sqf | 1 - .../addons/3EDEN_plugin/Core/fn_onDrag.sqf | 13 + .../3EDEN_plugin/Core/fn_onRegistered.sqf | 28 ++ .../3EDEN_plugin/Core/fn_onUnregister.sqf | 14 + .../3EDEN_plugin/Core/fn_removeMarker.sqf | 18 ++ .../3EDEN_plugin/Core/fn_setEventHandlers.sqf | 14 + .../3EDEN_plugin/Core/fn_setGarrison.sqf | 43 ++- .../3EDEN_plugin/Core/fn_setLootVehicle.sqf | 49 +++- .../3EDEN_plugin/Core/fn_updateObjects.sqf | 7 +- .../addons/3EDEN_plugin/Export/Untitled-1.txt | 195 ++++++++++---- .../3EDEN_plugin/Export/fn_exportDynamic.sqf | 114 ++++---- .../3EDEN_plugin/Export/fn_exportStatic.sqf | 6 +- .../addons/3EDEN_plugin/config.cpp | 4 +- @blckeagls_EDEN/addons/3EDEN_plugin/defines.h | 245 ++++++------------ 30 files changed, 629 insertions(+), 346 deletions(-) delete mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin.pbo.bak create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createGarrisonMarker.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createLootMarker.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayGarrisonMarkers.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayLootMarkers.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onDrag.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onRegistered.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onUnregister.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_removeMarker.sqf create mode 100644 @blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setEventHandlers.sqf diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_createMissionMarkers.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_createMissionMarkers.sqf index 05f5629..3181d9a 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_createMissionMarkers.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_createMissionMarkers.sqf @@ -61,4 +61,4 @@ if (toUpper(_markerType) in ["ELLIPSE","RECTANGLE"]) then // not an Icon .... //diag_log format["_fnc_createMarkers: case of ICON: _markers = %1",_markers]; }; -_markers +_markers \ No newline at end of file diff --git a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf index 6162ee1..ebf2333 100644 --- a/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf +++ b/@GMS/addons/custom_server/Compiles/Functions/GMS_fnc_findSafePosn.sqf @@ -99,6 +99,7 @@ while { !_validspot} do _count = _count - 1; _slope = _slope + 0.02; uiSleep 0.1; // to give the server a chance to handle other jobs for a moment + diag_log format["_findSafePosn: _count = %1 | _slope = %2 | _coords = %3",_count,_slope,_coords]; } else { //uiSleep 1; @@ -175,6 +176,7 @@ while { !_validspot} do }; }; + //diag_log format["_fnc_findSafePosn: _coords = %1 | _flatCoords = %2 | _searchCenter = %3 | _angle %4 | _count = %5 | _validSpot = %6",_coords,_flatCoords,_searchCenter,_angle,_count,_validspot]; }; diff --git a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf index a35c1e6..2969fbc 100644 --- a/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf +++ b/@GMS/addons/custom_server/Compiles/Missions/GMS_fnc_garrisonBuilding_relPosSystem.sqf @@ -22,6 +22,10 @@ params["_center", ["_sideArms",[]] ]; +{ + diag_log format["_fnc_garrisonBuilding_relPosSystem: _this %1 = %2",_forEachIndex,_this select _forEachIndex]; +}forEach _this; + if (_weaponList isEqualTo []) then {_weaponList = [_aiDifficultyLevel] call blck_fnc_selectAILoadout}; if (_sideArms isEqualTo []) then {_sideArms = [_aiDifficultyLevel] call blck_fnc_selectAISidearms}; if (_uniforms isEqualTo []) then {_uniforms = [_aiDifficultyLevel] call blck_fnc_selectAIUniforms}; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin.pbo b/@blckeagls_EDEN/addons/3EDEN_plugin.pbo index 0809a60c01ad5c8acb22d17f1037321a2be0f86e..8af2660f8259925348a6afa66f5478d729e918bd 100644 GIT binary patch delta 12971 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 delta 8597 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 NzVqJb=Koe!{||d_V9fvk diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin.pbo.bak b/@blckeagls_EDEN/addons/3EDEN_plugin.pbo.bak deleted file mode 100644 index 0e447ecc171e97e35709fb061bcd4859f756d0be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129973 zcmeEvcYIVu)M)5r={0mNOC$-TY%hrc(g=Z&07+B(!pUye2&huc??OJ{raV48&i_gvioJFk_tSepyW+@BR-RQ6d6)JiGm3l z{*BIv&!pVKxy>$Hk;mqAkm58^C4458dZ#2LllLK_QhX+*Hiv~PB?TuWv>Y+OXHuN+ zbQZV`Y*CTDtcdlP^P>vgdC_jRu*lAl+83(PMu-+ZiyE1og@raxV1s9C_!{7|sDag8 z=ycdTPFK_z?5dD;ho141%<7PoM5QNBTm8?6!z z2%iHQ(LsqDSZn+6!smbnMaAxXarNX{zUufKP~F9uShwFOq|JN{@VP<*GiNLDYr*g= zhjW6@{w<1F7<=V&^O*=Yd=@pVNZmFKeR$zBscdstod&MdY%jKOr1&RViOc~$lUjCX zp4;GMOA}9V-KOi0<6;dPSYsP>~R}pDuYh0Q)xJrQlr)? zR2HR$wd$>U)@)T;v~rzAp|+Y7R+XB7`kcoOyT)hIwHTDrs#Ym23cX3Alqt<}&a6~g zRVK4WrdMmUdaFfaRcKWN$a6fXG9WrW`-8F=lzN3#Ymv!xW>#%c$;@hn3ZSTDdR8e@ znPnQaOlOj536MYd`9o0n><3D&Ht3Xk3&)ytoJprQndB-HCo{|RGObE4*DA~!xk{~6 zaWVqx9iFxb3ZMNzDP#t%Nn_C}^jf{1(<-#A*=#Yfa;2JMbtcZF)ap2yTF;pXs14+I zP!NK`XFpI%xxuQ|DlHb7iZ#hCCKwD*N~TdN)Jm;f$#ObYDc5LKlvdS5SmCoDD3#2h z)~n2BwS|TM+bFLZ?$JHJnTlvc9><{k)bmZ{WwR<2XXS-D!S<8&Go zaH^aPO&B23s=@#@7J~^y&}!8|eWgyV(dpGJ3;2QT$XSy{t+Xm+I*r~$K!x$NLQweZ zhm}@gFj)Z)R;4lPl_r^*1I9G#)E0#b)tChsmE+`EvyK4yMg$6<{XuCBz?w>}Nv*QN z=u~>pIBHg|;S>t9TBlN5^ct&LF4t15CN!q7kXHEY4@z&)=oKm}$e$b(l^R4u&w;wK z%2j%qQm>JzwQs9?Q9$LfHWOjZpC0szIS`b|tg0L%g! zS*_uea-g8bOhD}*zo|mT=Ri;vomm5_59HP=$0w`Vs#7b}Iy8%{lC^^3m-917T~!JS zpZ!6Z3>+u3f|Y?$YRsSoHA=P8tOGDs9Z+1O0>hy&=~;r$M3HXCXMa!@gI=Ri>t!0& zqETvD;3*l$%4Hk~B`66Mr?XgeaV9 zR>}+xUU0|^1_};<;t&R?1B*=0Sxri-Nv#9LqOw{ndKIfsnf07XWun}kNRc8Y6`%dE zGRqAheP$K}TA@*)F_vpAtP=FF78D>1P;J#{K&<(N1FTK(2eAr*XMa#?gGO!w`3L6` zY!)a@y;`T>^lFaNS~-nQX9ldyaxn#?jV$!0L3VCb!K zt4^!2YC&yiWjat21e-=8X255EP%OxxNeQHvD?n_NCKYI61t(MJz>9zm6sQhCp;-y2 z8RRz|AU^wp;tVXXfYr=_^8uFC3R*^EwJH=!@V8VPXe*gXZql(-GYk?95TE@)Sq)ZB zsl|!c0VBYKX)RW*N^1tc4^)-{MB2()K*$L`5)s+)*$&8mEmMPyQOZEegGy2BHA?WowKA1TWwuz=V5td^?K~)yL45WDWmOoIa;4dXnk`Ds4bo;Ip@d zhjn=Zxl7PP2p*q>$|al&1;dZ6PK!{%=akYSr^|zq%8{q!G6!2|Gka;%B9&sYplzHH zp9AY>d0?!*>Z4_}`onq&MttV0=QunzkDaqb$)kmU-GQ34re=!9h|hsF6 z$7+rET(PDAlW9V$?s;2p#Ak|}p{Uqy@5j0dIF}zOTGges7tJvk@R_fT9LPB!3X{)y?@KoV@Sn+rHL&+cZF zDak1rOo|2La!h}Fah}bACQe%&QEW_%na2X7 zZ76n5S6&QX(;Z_fi*lHw9F`d9GA6o#q-#tANoSjbgw7bLH_j|=ATirnx0^|_<|V?c zC~-O(NXmf>^gSiD8_~m;!8Cl8;OS>`qmWUSVd5F-Kva272WLz-_L9b7RZx5hX;7r3 zf3c z;?A^!4z#(Q4(Lx7th#!a*Y(&_2^jHtzlt=t0UTS4R7c+U&fOEAwN{%!Txwz8%IhZUh3v6IOVbbvnu2;|7( zkjpFdF4SjyFve4%i0S%-KZtj7CXwJM2Q%=T#iXZY zq!9i7gg{YO^XeDW@*wKYcr`HZ-T+C<~TSB43x{3m+xT|GKCDf@LFdt`2RJ|CEODj=U{4``N?=P9szpuY?stK zAtN>AKj1rxh1VMZLu$_FK(5NY%;7>+IS)}yZq**tbEZg|ti^d$@Kj_7ZEiT?xr{@Wh} z=_N<6VuzX6`sKuK(h?*I4oM&eeM?<+93<2Y4i2`0H;N)j98x3oL=ChOkl0k z0|QPY4Soca^KplOx3EkRxmx}ts<4QLwuJt4R-jn0(G`KBgU0(L6$^=T=3Ue9cmOxGi$dqf*c#I4zsZ`X6J>*+d2bQY5%mfm+qkPd07({j$9z>$#iu= z1}_MBHU<-78NNs~COTRaBy@#H0k3)ZZb(aj1-ghJ!T-h=LR*-oSccTYx8W81UU>ig$cq1asa2okK(nx7<)-CiVrReaq;R)k#3dMe86*|mt3jGN^ z#l*10P#`)+vU&%-BRI>sVf@I#B4xwl_$GX}l-T(`d@Ah_@cp+v$^&{N{o*f?J>z8q zy9Uz2Z(7b1gT`z5LSc5jESv<6XP(n#qrA+wr_@9!M#zk0m0zVL@5hl^&blS6RML35b zZQy_)%}EV_lgLNh$+8YQ3kG$Jf`_%mT_P~jXE4}xSbSi-q*AV62wU*r!y=6(C@IG~R3 zj;9TEYmi>Fsv!LEf)J4`9Ykdyf(W0=IX>aoNlm^|8p@#GEC^EB4ID#CsbES$h$R$= zEV4ARLMbo7!d$=t7eZM`5;A!BSHuDV&?pK#YQbLJk<7Vmc@UT580?whodNG82a{O| zpg$}tebVkOgCw%TqseUBU#mLQVmT27HhO0T$#1H)n^$G6>9&oe*z5 zfiOP0@PvVYJnO2AGJH9tY|=r9>+r-AC?otUqEH~%DoB)sz59`e0gdZ{Aj98~$w#DI z!oI_qidGlYqzGx$-o;+1m7r|lY;H1LqDEDqjWb(eV!gB$=GEgWM!kbP6fD9QU;i6) zDI^h%kqaww?PE};%*Z#XOz%|AlK%~l@!fi-SCGI!KJ%g{NFpzWUOB8}>Ik<5bWjBy zD97=2pOD#}lmMbhejHQsoeTU@$#}d%SAiH+j0&iVkx_4TuSpR)@y@K6DJzUCt8(Qb z8rNf(w~}EImZjsPzeym9*Q8$C;ZyL$lwc!J-lQ$%cB1FW-@H;6v>B>-2#vG+<`40= zNIkv_UlDyP*aX4Z@|An(B!CW7lnJ>1PL|trQ^{*VDF0@0MJz<)ovwiQ6@vMdmxEU- z+Nu@Rv4iCxi$xl#_bc(=5f&Ap&rk_MF)_pz@+k3}pYDKm-n9(fdkrY91S++!plf0N zsml`}*#X9~YKTNpqDx192;3~TgrgA(9xrJmF9E?k-Jt@%)#|O`521>Q5lv-ph*$_p zh7qI@{}r;67Sj(g&H_SBTS?y972l&#RjzvPi@9mSwKm=H1bY`#hY1RG~rej zUr-gb1F8oML=fK;)?LPgKABtO`?G5%0=KiR3_cKoCJ14imgkpR0!y z!Fpszjv=*S>5GXPl^}-u$LI_5B=jzK+)S8Q+&Qn8N2nAyQ+#XRII1AhznCoKbst=^ z_2@6tzQTc=B|xD0GLOA1)x~j+%1a@`B-6z@@n)rr6U%F z`b!++bbySH$>$sl-xyAd`2!Fe1b-~5nnNGWFmJ9B5%LEkpz1$hA4RJeEX|u>9Jl~3 zq`5B)WDmg{3IKz}V^5>e9vC~19!H1GVwM5S9c)IkxV=U;;H!WqCWQ~be@zA-2mxb% z5&)ShvPl)xAdE&Pj){S^Ei$5>3{3_Sp!?B-r&vXL01uIkKn6Jh&Yf8pNDHVyr6-_J zrRe`_VpR%F7#Y${tOLYu047|}vT|O+1osCmJ0w0}1x$T#}7J`1L|zRWV+g;7R6{j1{aZ#6MB@<&iWe zOtcZ^mF#sD7YPIw$6vy{$P+(}c3Jtn25!W8bwL25`;7sH{Nw|$(E&i>$iKrLI{U|{ z2U;92J-n0oP&OK;Cg1 z7{#5eIsS>Hi!HgpxjvisPsFtfM9D@dMT;6Klu@r_qEPwJ72725Boe`_lpzB5z6Iv0 zLLhy^`ZuVG91WqL$`y&Pn}3WnWn#MZfvJ;^`4RIwF46i?8z=;FsulxzXR#wfqb3{Q05mhSwb`YpQ;^-_b{<=36o1%UF^HPOA#06C$3%#u`@f&Z>7wC%p0Jr$9=?lI?wj;16D~%s4Z+ zDZ>!*F#?%*$6w4t{MKB+?gg=40j(-x&Nt8e00dMpnk$|P5mO4e zEmbgOHrdBw211qvB-n%V(#uu~=3Hnc%!1hCLp}yaA5@9YUnXt zI6LA6RaIcuNSk`Q_W3b593uheEu^EZVvR%U`$MZ@_(Z=U+B^XS_--bg=kZDwpRjsH z;Dwc{7&k{_R9;BJxP`g$$%g-ss=zS8K87uG^O?MWC~9!HMuh|Ck`D|E%q&`@m0A@|r5IWjBlQx(yPsCc%=NOfkfYD<{`iK2 zfhfph7l!VO9C>44;_W2SOg?^_h;9=EC==1B0_af1zy@-KPGB@)e3j1|-3<3`hruBn zIJUrKzyb-zB{Z#MT;iMvvA+JBeZ7E@k_%_SRsLu(y*LYzk->i zd$|~Qhiw*;`16Dtx*|?}+=L=z9_vi~b2(dzfU_bgQ8?wxhXLugQlUgnaBhho`zSrOcSA1#bN;o?`z zSt{Ct$s+v z1DyT^#|9_?J~YF*Tuw;t4!6)#+Jd+0j*#S<;XuQ12^=+nV|F%3=qQ8Mg{+6qdWYU* z5_0^a5cUS(FJeF7fH6j!y??=laWIW=!2`X94u_5&ktEn%RtVQE7T^oMAtcv9hi0I@ zP$|dZ04B9SKwrQhj^SXb2|hRkB*@8+Ft9noMT%j_=h%Yy=)OkL66ik`pjh28;`p z?@qU5o}afYeM$1RpeA_sBgXG;3S(GO$J#%Ru^V;umNY5Z*;4@E53j~YEhfKyWBbkL zcQt>%esG<%kVrN~bt$O508e1=Bv`Hc-(q1@oIDp@B>Tmv`1IG>(X4O}5OgEPw|46W z`k3)SGgp3Ae_*fRo{MDZwfnzNCn!RI4^aTPGt+z80anI>#6Z?3IWBKhe6p`zr=cpN z{=%dt)%)<5AmM1l{RB&wHXoASrHP^S^+V3DyC+reIN^tJWkIk*L+KLGkLY#`W7y=J z@KvpnjbSgWc;MS$zNImXcnHANBnrsF?tt&#Uzw@DBY2kgf}7tteBXL7_iSAbwpSWM2&%HG23+?)m4VO0TaV#-o)|nOsK^+9RRo~J9d{{qP z{`60O1Aj`*$@h{@EjHKK_k;46-6LPgd*h3{o}k78d^~zYF*a%(v)Z>_Fb?6hd?vCA zI@Gwj_*SF$8~tM6+DrZPw9wxgl%%fhw#YYsl^xsQ;fD>pRQs2AbdQH$Ez0#l&0)Qc z#MS!7@zLvyY2kWqE;?N(d5^?W?spvx0>XX-95@7=VB?FA2)1hp3M2l&2J5`w%@ z`~B`ty}s-HH*k%KSC{AJ@84vf`10V6W9A%f*lSbnU_ZP`M8_L^@e; z)*j#4Y{aVfx0GHQdNZh%moB0pF9mH>4(u1w%=7T^aI2j@{7qyBFeuTwP-PO)Hdazvs;gr zk9wH)T2Kpmz%izhOHhp3&2u`RerhfL8+mc<4^`;BeF?o1Zv;uJ9V*Ri-*kGGV^F~h z*83IV`mRhdY6m`Oo?ko2sK5AU^U1P}mBVeql-WY>ecB>)(ETMN-)R1le&m2NnhTY| z6)spYhD|xsWczO(qyE}jrf=6O@J;w?%u`9_*$+3S&AGSKAw4u@`22fK%7fbSbg1&K z8IZ@Y9<#y+EjdHx&pCcU<#@;Jcy7a^l*8qJO~3Z`kDZ@wr0vq>t<$!kHi7V|OXp=e z00!{u$Bixi%osM?6!yvTgO$Ut-avlOeZJRR>@s+n`Q*(%~`s@`en<>d%mCg=-!J#ttoynm0V9l;4W{v-C+1i z*R=o4y_Mq`6jHe3!lTLSb%UNCwpO!LzJ}|;JhwQg9S;}PQso!fP&(^o)-=T58Qtai z<-+Bs(2dwnXlC8_X}jg+UHWP#7B2riWSOa>(K=;dP%|EWg?n#+zFmH7(e%`)#zyT2 zb2=_BpI15Fbtaxz+xp?n_UaF2JoiW{o0&1-k;k^?a8XJ`%D;ggD?M>i^ z57pZaUaA~k_}#?ZRm>bbb(;d0sj*n)4fEYBte;dvoEG7XoAXAewCfwm<<3O%Eg z)SNg4?rU-Ni{J3ZqEF&S&wA=XObW_=kX#2|^1v6@C-hC%Xl5T-HtNv1&)2D{1%F66 zD@YB+H~V$CS4(=JUU;X^=j&P(C8uA^IY$W+q=e#+XK$HSEqZ!f?@rOxXVvVWh^v*| z0dW$&}7*+y;bYJnEGP+3C`2GQ;f;xh;ipjI!ih;2@ZxUCAWPucoR57y=3%| zAs@nAKwM-qx#t@K*?Gc>j`6SskU?ZB0|>rbw&~?REI^DZWNmh#ay02E8{*-#2YTBF zR|*dL7@H@balnl|V>y=-SCVkxgn=t$VC4xLLdCdQ%Q|QuE+?!J@n{gg(qwE_1|h(; zVPxUz_Be|~*hVvqw?~^BLEz;=ut;G^96Q6L4yMZj9v2b9H2L&Kp2z?4M6vKp2zQBhbE zZobGTlyS$Sjm4eyFddb z3FrmXf|P41B27_{(g}krh9IXTuecCoJd)6y5Qbcp1eb~c6#;+;4`IPkO3|DMgci>Y zfA>p8ZU7Kf@B?z(lX3$T6 zN)|3Ab6TxYKxX`?0G8pt5zpc{56Mmx0>Xum`NC2W!T~TQNYsKO{Vd$z!q9bsJrdUI zv@1C52s|df1|DD$@q@O7pm7+GE;#gtJ=#2!>9aBu<0*@lK!#l^e7+zdC%bp%Kw}z2 z7qgjhu-#!{q8v<^J7$C-Ji2RlLqv4f&=|jA#4-kXOi@?_^p*!GFj1o+8Z#mkKudvV z(>5LL!%pNBJvuyNHG@;#_u#1dh@IBfB788%LhUurACwbJM@l`X|N4Wq!nH{zP*QkJW`40L+UATAzOWDzL4_8j z7$)0Y#K9~U7eS!U1IHc#6M*Bu`_3?4=d{?YHYi6K2J)hT5NT0}2D-^zZE%wmJ);qB zE_Q)h#I$jF1OdU)n}vWU9jwFYhRatR7F549CWIUZDuE>wA<7*x(uzGr#expEz+Whw z6a(OUqC_BWZi38s0OQ3FjuV<`04ERbQG%Q>xX&n>fg4lufxn9}a>aqB^}l7wh5H^( zD}X^E!^`D}Y(dgJLETLcz5t3Kj({Q*;vHK#={zBx*e1YvU{{&<6Bkk*xCi zDWI2JT(tL#7z|Eb3`(dw#=m_SOhX}@+6d)|9?68_U?YI%dnOD_9Yh!>$!n~skYiRX zGKDZx5($_~F9;?cZZ3*ofWc8cIsmXoJY9rO_?ZhPok3r~fV5*sH^nR6=uezvJj20Z zXoO|4af~#_;Vv%1iyeWCbR51R64V6N2@}Q>7Hx1ynP?DC_>uO4$;VkS!4WlrhnaPt zyhKN1HRw))#0Ujq8F2!Q9+70#T1F%j zCIDliMuBVLa7KX<@Oa8V857b%NSDkI1rh<_R1k7YEEC%4pU@v!CXJ?GlIaDF?LAme z?b{eG49pAbCc=e*WONS5osmSV5Sb>7mygF;EGTEdr2bOMZUtsptwg9IR{0&q71gx8%O0>x_{$jpGjCfrOpC!TrwX=!juMly(X zaB!}ayoKY6Qhy1AH=tbL^dg-pU|3Xtk>nLm@K{KiLoSmJr>{liBSlUR0Lhi2(`O}5 z6cn#Xp+`D8XpVqLZ7D(6Ege1_wl;#t!!JM-(1%3`FeDMcvM|;6zL}G&Q7Q4Vf1X}V8^bZsz zu8w>NaHAP15}C;VV|ubVU@k$^P<{nU3qyEv4FS#-xDIY#Q`E`eFP4Myq+}Tdx5^lc z3i1FS4!R?gD=5=GS(zEJu|u+;EI3rC2=tQ*1%y>Vfd-Gq95^H^)bwxNzke02`}fDz zgyc9qPJrv}BdR+vc2xIbk5w1d-2%4H!i9TBkIFfi*iWj$yE8H(@1f49?&V}-YE=Y7&(8QovaIcI3M>+!UxJ8XeG&pAgmkozSSuHC&Ic4BL zMhZ8$pDH^g+v)$>U9hGnt`$gvlL9(q!%#{ zs2~bqtxu~1U-In&(GXbkNsKt*%^plAyfOs{3(7`dNkM^-OghT{B4?1#oVVIs;NDRc z;s&({?fI&x&#f#JN@1JXRR)VDAQ+Gqi0vtpGFD94g7Kgah5`oMLzKK20Sa~$I*?cs za^9daBu%-f6YYTY8)!Gwo=!)Y2OQ!uf&lhx#{E)Ui%~}#&Xg3OpN)r%(0bTPY?fj? zYX%koR5d@l(inq`@H7>LK>Hsa0mrMMGFe^#wSvKw2$W(G7YeiR1fCR`1Rww6L_k!C zY|#S85#K@@i{gOT@v18lC6VGwd9!CZ>73Y=@qj2<{yb4|iC>?Bn_Yx=5s3G0$>uX! zU?e;E%$DLp6ZHkqtrS)zPwb4tmay>YI9!vH=m|~{-Drj&jSISof?H6XPaHde1~w}m zqJzZ=uou0o57-5k95es`&MzR2s|fFB_5Qz#jnReOlatWzTY8nmxL`Kvz@H$-1$Ft4 z)A_}?ydcCeF44<>6XSZ4d4jdwV`E)le1%Y#TO328aVuy{MDvN_m{r8B00yvQm2u2} zF;{dhaGtG}s#LS1$s4hlAe4EQ|bgw+AkqcSTdRA%{p1)=P3Z!NY;WoF0s7Fc6HS zX+$1O`$4ozoZv)ZSUUjiIH(Jz$$_B&pmiZt3MLNi6vPBU4dN)kmWYy4n86&bvFuJX zE5yLT>Vw2Z;4gqfG%*QPgP)&=u_kgwKd2_G4f+1CxH9KM8W-Gg1xMxpL%y0M2%%a1*RW|%j)zbV?ug*d=d^i%EE-@GEozT8)OiF zV8)ms#u!1|9A2HJ2hutFaEhIdRe<6C1UgO&|q5DTz>?-=OdB^Z?JdC~P~yphD#!JLH=L!Ugs&IB8kJb60-NRxO#l13P#eaH=pqh?7KV&zKnI2ijEl}B?H4{^f{a6Vs`!%( zFji1LEN}$kjGtw}WJNsd#rtu9BQ>DVfM89O4AIe)NQgZKIqeuJhiM?6g9gL_91aj> zjefbn=76}ipnUefXo~AX4JJTWTQyTQaB8!D;=aOgR123VegW<%De%w;O_JkPeAt1fNbWl@z<| z@Su=NBx6;wcp?1zcmGNxKtd2kxN5;d4no!>2Jb@!-tyf5gdFl&YGhmzGD5Bl1c>`9l>qc17ai>n9d#d$ zFNvrp;2j2Li3b4%6juC5!MDTpKJLt+0P>q)P#-tG2=3C6(1y?x>ImD(VAkO+Pf6cK zm$Vmt|3uUsGBA%EOkE_2Q}EI!1ptD!4u%w83I0zc8vG^Dv@($nMPc)OuOJ)@BYYD= z6N$fdOdr^hb23RVoe*IFIfA;`z_e1}>nQrYY^hftxr!YOS)cP7k!(*3m3ZfeSS0|0 z`frre6iM73G*E(|phzGQiFv>;76DXp69lZ;5OqPd0E~d_1b#0F+W%VxiG3FrLHw3u z>6emV35pl?jsaByGmVR3{D=}ROsHDK29%?CrAbF?VZwngsNYTQb0M!0b22&_dF2~| zG*hCY>Y~{muz(p;L4iOH1!Sqy&HyFi>!JE%AvK$|V73Q*R0)Ij!0llUI0z6XU`D?C z1o09=Ivzo=T#%=Y9t&|T5j7jSzGKMeUO>x0*c#c(i#Xp6=rI$9?4ciU@i9sU%7}j# zkG)DT_nu-&wG%Km-3boujB>8v9WFAQcq#C$kkO4AjEXKTBO(Mj<|Zd>GXt+#8C>;@ zgzY2V50No(fG|2bg!6G5*5xV&m(7bbY@|}hk*t?ca!GEwG?erpg#lt-xqv{A9x+{E zLnbaxg8xu4sj3U&yJ1`(YIAPZjBAe!^uW-lk*iwBRvA&_umfm%gS4DR-PU7D4DKdaQ zVBq6BOxwUkiV+(a9ju_ZMBk0M8lOl9f5O;9L3Yl;($N-qQ;{n@X z019^fDCAHD8DFKa6~iOwehBhJcqgKUV1G%3e>v$esyk3=JYSX64aGz{Iw~RF&hMsR z2}JShy{tz$k4Qg6 z0g^M5jAToZEbe)uOneGAe2O{`LK_gJp-kX!kI5b_S^D|RB(c79MdjkaygDo-YJl4m zt^zA&ok8XfNEW~3a_6>;4GXrf60Y8XxA^%Vo!X5=Kilk&k zFR>7&2C7IY$I=QsNX1K_y>9 z9Z9C0`jZ$zN6;9g0`?Av1Sd!u!WdZqhoi0B`Zmwh#&-c(V`-BguV2{Ex%~VQ7gEk#M5a(;4w<5D_5>07OL~ zC}FpNQ{ z#|Rb0^-KiCBvMDH$=4HCs|;iep*pnxTLKDoye3j2kt9UI5YT=lk#(Bbs9;ttTEGO7 z8jp$eaDxw@0tX_AF#ulhsRv7yC~cES+Q7jQvNQ&fNu!bDic-h76^u5b!fRt37yb$C zLRR#sFhP|FmXzR@MEXGu;9KnTCIVOuRyTkSY)biSUApLjeGmeV*GYJ0!iwvEpa}K~ znRH;=;Pdp7#0ni}qk%4jh$+W_>P9B^i*5<)nGuwlXj`hN!Se*ELDvx=(2!G)k`1R7 z$dVRKfM|dagTU%2NpyH(WE2&Vp@fZ&Ccpqw&~$8pL3d ztOy$XhFnncEkq0xfld{KpZW{1SchdesxgRUVz5rAO^pqSl2P3gh7~c_HXhQ9$sD;j zx|u071t=uCglZBZDOe~K!$ejByujfk5vG5XQ~>T62ie>FPBmSrV}ufYfc`mIy^Wdu zv(qv&j7ga}8QH=*(iRW*3DB@IAM>$EnJ9=PRoN~W)8ryoUY>`9&DzAU-mZg@!4~P@>R-hs3#Z0-|%*`0-MVhG0tw;$W&85|Bco zM+N{ShIWF3aj!bu1~)s%BcPmwQ6W(9r2GLm;DHZfWax5G9P>vm@!y2v*Nps$9vlVP z^W*(lvV+DuCdAK!_B>SnYzpq&@+YdmImY&)8x{n&m^Oj7d?T<}ZcqSb$kZoHi^PI= zMa3@2(jh?-P#*!OvwW>->J)MIu|Kj_!o5A-j8@p=iiDW&?_7!l>R3S9 z(>78e`IOija+D4UiYVhJyJ>tEOqT`p4W`7IA-|mJ7H|@v8o5oH_&ILacEg}9U_hrt z$mN0#L4CrvzJ-&BkP88mRmqVbv>JYh6CMRu5@5ppk)Z9+FNUi>$hIq)ADAK+2nIOH z@WpYblb)G^=}XG&*ALW8zpPYaue9`(_)xj3u8vW8I;G*X-sr9RO=iX6M?aV04!j84Tys*;Vq)rM1~?RL?v}* zn8W zfe)}l`48MC5&ItTm+6dNs37<0|P`p(ung0$(bZS*94IhKU}Dz3uOEoOh`S9d=QFPL<2kd z*GP~MV;L8;pw+x5-)Po|a6ThiG;)Fvt|A^cb{a)^(&2k!4*wkq;Jf8z zG_LkUsL)MvP~UXKFeMdm0*H``K}Rnfi4kss!kCAcHNYI8BS2jjWL{_n91DBXbT=4f z7x(K>M(Exm$Ot6u(c}jZ6Z)(qni?BsL9`a~)=2se&7>n+7JL{BcG=^oBB48D(qu9> zxQPuW58NSgDV5KaM8k+HB}4;kKXDz2vk560pkYXy3Bn^ZI6}9ZNGeJhIj;+GGtwDu zXZts1LS>j;f(a*dJn%pV(;W`G(r&0fiknl=6C|?Xo*7RGaIl^91#Rv7n*ymY%wjjJ z^1u(Sve$~83iCiT37H^~;`qBfPEpkengL2Bo$|`xwHDWnkOVU5V_FAR_3Imi_c2Y$ z2)*ivZ|Kzwf7j4kF@ksu-ZT-|WEA<~aIGFmO~qFLk(}QKmq0!mZIcja71ftU2z%F} zhQ#TBbDby=;yiuWf*J?MieRlm8MJHHu1tU0pBM+?wPQp9okJ3;0G01Q`{Mm=B8&7e zYgrM8Cx?LfG4}1GlP(MDr=WB3bdv@)Z=7 zu*k&;%?95*uvggh^XnDnfksn&R+=g|pMmD*TMRh|oLq7o8f_eC8y2`J%FPT9!(b^j zyMneuuOAq)2!gU6uT}(D!U7sp7F}NZ#@scMP7kFU&lb>A04Znzy#HH5Bx9%=9Rg~U z|G|hKizReTQ4E|{@q~GW-49E2$%POZEKh-)g0^P5`!efkVt+uQmy}E`&^=6O5(Xxb z1_bH;s$hG>Gu97p2PpdoG!Ox)oCx%mMSmXWodPe*3I+%EyhEup0;@2C9f8 z`5II*#ER|2EK3{w^RWg%{lA(d60pP6Z9ZihQ#QbhBC!&PlzCIB@qG`JLZ2Pub2@Pm z6AStew-mu)1FesdExPhSr36&+2_1&cum-Q}d38>Me_mAuv=x@cXz6=Gnoz^BMuE>*y8wZXOL_dELss*GGfGq z=>_@~&fW2*8n1Z;?;1kjN%SrsUxGJ{@Wa}JkDTD48*+UH-z)Bx!6MuN*TTYW2DAtC zKVe(h=c*!|Fm8?SA(Gyi=^CBuWQXI!1j&=wWvs(!tvahxZqn#ga-GaUP%=VSVA6)TCY`Wb#jfK ziIS;gGCrRcc!M5tiioAx-$NeZ6Zfl@oAolSUM>fCa=po_H0e|dR&C*QO0`CBw(8|7 zrCzC4Ju!kBrA()Ww0IGMvE-v4Buf;QgOKw31h@14FNLdQf&YlYrPaDc^y!x)Q>a*( zJg9oDYY&%YKlkSQ#V=myZngdy7Q(gPGro9TaOZ2Ir*ADtNtiGo_&|Yi$A-0irtMHS z-;lB8rSPIVJ35X%cXIFEV+WJ>?NKS8QimyH-W{@G#j+{;ek!;#eE#Q~+wPpzBXrH8 zdK+#k(#K3})xt1m$ee}8idH}4j$1xr+Pl-1b;yc&;kB351=Hg{TXpr}?ybi>d#+BZ z{+zoY^wIA5>hl*rzi&M9=7%vq?LXZ9=+e~#2cF)$jg#q8cGXmymLDy{PnQ??3Epoe$9XM%kVvabw89IUi0<0?nm$X?r_~TEj+_M412|S zIArBF7e)x|pM@^jEfV-U5JJ?+F zK+ftsS8&?;sHt49PxgLWx90qiIg2b`?H$r3>uNLGn&;-KALcsV%D;8EhkW$O?IF!t zT>QkXI`gAv&d`VNY?>tdXzJ7{-7d~qv-0TFMSBN^Fo&Aw7S%YI-e-J7AD1#=q6ciyn?&DdV|4d!m$-MzPW{^H}3s8wHn)9%}Lv!=S=DDJlQsdn8~ zN7_4YtaGmG@le*^*_nt0_GZWi4x*I*YbW^?k_d80W z>x?a!HvEJ4R*zVI?5nS*r_R>5yx(i+%hJp34!_Xk$7Z(9C$hi2K47aeyY7m}=`+64zCZBznuzExXMg`;@wTaD?9cMdx3(^CRI6II(~n{bK3(47 z{n=km`1tiNcSkfG+-eHDd~NWnb8^@GR==(N%!M__+=ah>)p;AcH2!?S+G4h5 zy?uFT+|Oq>{W9&NvWVGTek(Zh)2ZqAhkEudOKRDE)Aa=@VUe-ir)O6k=`(TOQA=Di zkMZ3-t;S7QSr*d4HfZaPrbBDL`e)4KzqGwrRpJJD{YA-LG-v;~_kcb8*V7*)-h40h zwAG;dxc9NGs$E+f=Dn&P(|AzpnQfch8C8GOifZ5g9Qwh4i0DfX+r_>TIe6#VLq`@& zzxzp}r-mQQ+In&1s)0umcjR0P>6!NPpY68g<+gdy_rkD(n3}KL3b}aLJjvCk{DYvJ zi$C5dt+r?G#l8n*jXxY;_}7drZ`!}wRC0ZC!;aaO8OyHJ?07ib_Ug8m7ae=Jpy9n| ze%-vTc<~=y5^ZyL8E%!ov8&6<^h+b1&n(}Qv^&nawrQL6eaxoaSEbXkB}qGq`gZNv zWp<>Rc_nxFxy_*$jx--T^|M}gnq;lJFnmMG?kxS1u1i8{$FgBHH=pieNpCU!RE-|n zCOmt4UYq%S)%R*VG7LNZ@bbpKhi7D-YY}Uf%h^Py6?-tovQZlWRRWQ};c6$JDmg$pyhfe~9aM zW@>o-X$ki8=6PH~^JPDjlpnNpcvUeieRbHVjqew?&waV$+BWi^W|clYxmV{2>r^9~ zu8-N#>b#}Da?+25XFSukcQ4YF~u@!q0n|D*3iye)pG#mQs%GEcfymI&34c~8j=~f#<>X#4NJDxJvx^?XOmHxl= zxO8vArMS7zUfp$d*ZuU*KFYlIsAbl)Gnp%PwAdH-*@(RBmrh>Vm~;Nn>KpgMS~z=r zR$47(R(!qvJsT$%x<4@KH#T|d&hjmvz4S37(Ii;ru03*jc=XrnQ~uf$ESZ1cSb5ek z^Ixi&{lY`j_%wT^Uh5jn1cAeGWFD)k|Tq<#{M>;?pro) zp1o;{cT(17&#u-!_~&j`%Vp9`u4@!_mhvEd1=Ii zZ+hR|n|SNwvc0G4OdELpre*3yk78o!f(?&O)_MES)bXX&ieK83aZuKH$~%8HU$a%! z{AAIxXXmccy?$`&8z+W^mA|^jZ9iHf?a=Yu^Fg&%{xV_tonzsJExtbg^@u&o^RgFJ zPp%i${_IQFKQ(?dIcau$%H4z?-s;=WIAD7FX?wruIsJO)Uz%56a{XGLxBeV+S~aKT zvTc`YuVZEH4(usfk~*{I=G~X8^}qSvOwEu2-i2YWt<=(G9ZH?vQCdw5H~KGCNm zUtWCZL-&a!w&Ro&i|la&KkV1xgL%enUoG2kDfW}iq3T6PC9$3#HmmP`JZSb0%^uZG zb8aatt#&?ppJQ>)#y_@r-!#P%kukckXnCJ^UA=RUzB}yQ0pn*zZrvM{YyRT=@KZxF z{@Sx;Z_`D68-D-JoT+2-N-oyFy{A)jO8tE)Ki&HLm#>SjD9&~|+PBuv-@g5=cF0?X zdcj|Eum3#bRO*lxiMAtI^X7g&`}2dv-DeyaaCi5~#wYeKyt(~a)|c_JBlm9{eqq!n zZ|Ch-eV5oF{^EnkQByCJ?0Pe4&c%V%mrd?p6s*5duynn~*lBgh?6j6I>1G(* zX663mZrkPWJ-pwj`TXWn7G5+JpW8caOYL3frkP6{?6YsXw|vo!U%xd+9=g50`ZKnv z!Bg7*T~x- zb$vak$s<+vTh&`VTwS(#IoJMGU7BRYtd<+|;%eqJ8#MbPW_{VhHXmsYuWsITX`PiD zvwu7MZR@mC+3gq4ZPCA=%`3J0Y`l>_QaS(48?ol>(7C3I2j(VxJ@@92@0raZ>zC}b zm<^jZ6~%a7SUT)zoAKW)nR?SR!;pCR`n%yh9ZlT zR*b!1t?|=ENPJ$_srB*j zbEkhlRr9--rcJI}tB2&q7mZyLuZ`@w>*ja2H@q9_c&6r_=VxDPo*B8|#W9V?AD`EA z*p{F#zsSCLaz}_|f6}o;F-@%?W5rbmBTpIgy;sB2VSd9Q&7$1TpgFzrAFtfX$gI6HH~@44-^ zyt82Cj{d1H40^b&MZe8g*IfEJebd~8XJnSiw$Ym2&vgE?8Uu-FVw$An9}Ye&tG;ff8pq5eOz0^`G?c?U3~9{ z8!lbXlX2r;nlNYd${|k8qrJtO8?U~%uEoMlr=kysWmS7FsM&x{6O3<9T`-~L)aq%Q zp4t4(@-eq3KYz<3ne)Me>dK2>ZQt-`SjL8*v(F9qkL{E4`?r66?P>d>?|xo#OkF3X<>%kq zRu5`@QI{5cJ~MBNYG~fh?zR5f`EkurSBEuK$Mic>y6ej9-(N}ph||8*?X{aN4E5A~ zUJY73o3~=5IJzp%e}Ywx%P zt)8B4F!sED;#u{^ERST%w))JvZr+yf(K}>WOtV<~C~b>!F#GBWj<}_9^a?vGDcq*7Ewx-U(^iG^|aRS~ZU9f0SNJ z-M{KW-QMTY1|Eu7u9o$Fu=?8TiM7kWx9mFG`rY_nm7jbO^zLWd7MC>c6BK^?&TDg5 zN+UMTY;gE`_z>s9Q&-ZK?{!YKj=Yk8x&DDy8pIA*edyGohfCX?d+Nu@_iGJ)@ued* zdNprZ6n);p^h_-XZy&Mz&+r%ZDS0&&Z`G`ya7p>*<+Pof%!m zN8P;_HP7Ac(uvX+rY4_l{o1MsBZ8S{X7ZBL7C4R@rs{G2Tq-hHAb zWANNn#yM%WfveJ9x}2=m|Is>oaQnXPn$>GL>-g-|JJ-zoqf74Ku$!r;CcgJDp;h^| zUFYgpW-||57v^VuJE{GOmc4(k{_%=!XZN4{?o!t0(Td&gw3*B%efnLZ+4G^H@L@wo z3+49SukVYfvD5hZhJh!d$L0Urx=D`pNTK5|3mz-U!)O~-uSbx5_XxYzG z%O>i}a&+gqYMbxPxl}XTyldv*owARE20t|I&DhGu$jFESra@zPPxz} zwnMW)wW8<0`R>_uBfgq7>1?jNbZd`hwFVa_^!Rl^dfT@>_s5N>yZuCtbneA5SwD@t zrEZw6e`dAf`WR-$@EtX7r1#Zazwp=nR~zgfRA<0dL(OGzA1(i7ZeeMHV%PpdN9*t1 z)8Utx9>ce2H*Wd#S@z+B`?=Fz=sLFbx~wm5mA3vx7rnFNgC82$b~JqT-P^IMdu-{ch1euwA~GfIn*n9*47~n2U`2WnVFOGYrd{OJ|*3FYF*0*b6PHt zJ#<+=l3kaW#?1O--tiBoDtx?zj8nm-d}sd-(W>CGL{8 z?;qQCOaJoWx6?Wxq~cV}N*fAYN<=WCC+zGYAN?{h9)Xjk*a zCi@>9HC=4~Tfx;1Bfc((y41d1n_u7TaeDa3F@qgNrZ@JK-2bT8@;5cBCz|gz*tztD zrB`2n>e!F(f4S<Cxz3yx{C=Iu>kBL+sk@7{myQ0?-OpY6*z zrdGAlpPT+$T-&-!8ts{NSHEv@-4o9mhpnFVMYTrTe^}q|M|1wBuTH2Qa&10%%Q^Fo zM?LSoV9!^ZgJa(8nDxec=37%@CI+Q{a&gU~k^Ao5pEqKfZE3#=32}|I`u6i*UDM^j zS<9n&OM;5ZOE>pjv!LajCUx5`sO1Sgc5Y_p=4b9LnC>X48D1wxo1;k0xpHyZq~1M~ z%D-tmV$H4Sgs-o(Ey_8$tznTfch-FEoS*f(<0ecQ6H+>C+Nf{7{3Tei>72PiSonZX zvzOMK7IgXM&}N-vxA*;ceu;9qTk-4q?+$)l)F5HstmB90*jL8M-rDl9{>q%OXZJe# z)oL52R`gpLy#HPMuH`Mt&9k;o_&F`U$H7Rq(o@{z3VQ%7;Gqpm-7A)PkS(Py2?BD|*eOvvt6_3_ygI(*qe6-EjTajyWLp~b5^6K78yBf70kjB)pM%MlAIZN;D=}W3Ltajvh zrv@8;`(dc#?)Wrw^5rAyr@IWF_1u+p zsCi8C#%V+2Z%_NMS-sFHFI@_mFyY}d%k%$il;6y@x3t>pv-gdH74viD$Gace*grqz z(?xx4FSc>nR{nCbZ(YTa7mt`UZA*H6#f<;8*ShXK*$m~QM|b+2{iErX-+p&=A28tT zpz{4Yx#_2icTW6l$en5z&LtJ@y7P3;FG}Z+Y%q1`{g;ntZ@v3xWBd8Kks(K?&iKr- z9@oy-#@^iBX?W<257uTkc>1-F*(0A`wR}cbOZD~}l^4Db(ZwFMkAE*A^=os=-q1H% zMb3}<_K(o_{(NEg9};fn<|QK@9LjV(b?XQ1!bde??lp6^>oDY_b#0oT`TbIV*PkVy zPFY;D-Pp;AwGSTnbMBHQA4JYEcKx#W_tI*|a|SrSk~O|i@UWX>e*bz$YyYU}*XHJm zhC`-)c51cdtE8Mx|A(1#SQ7*Y)@+$ww(aV&ZQHhO+qP}nwr$(CdHZT+F)uK?+-GEd znQ_h^iRg892U9L9^A*3|r)-c^)hgH42x>=dpEoz1kK0-m?AR}`9<*cBIfDpt8)QYF zXZ#3zi|0;vT)klBzehXD;}|PJCsPs%g=w#} z3pGk5#R%6NNS6^&B}%7s=4EpMbPj>(qGM=@{8sq?zI~;K6!)Oqb0AWP{$VgwD6xzt z*pFpQ`NWp`rGHRqbmkkpfFT$HdNEWsLdA?GI%~#B$8hlX?cHikdj^RNqpspln~x0` z7X!=|Nj)5ge4gOD5vxOl5F&%}!oNd_PlRs}p*w<(hg7u(-qjxOwNrbDvNUlIh{i%T zpk$xj_s-n{P7N8vA@FzfS`spAJE{-Ht>877vrJ(xv7Dl%!!mT|P@~_hyRw8d8J@7< zFs98&K@589%s&JkT;E8xzOPD0XoZ_Dk-5uS=Mz7M>UusQnO*PKLNj^pyOX3S|I@ks zmvL+%y6zt8rTQbpRrU7vZr(<)K+F#X)*ytr|K}BLk0^x<0*Kdr>%GFn-S%~&4MZc9 zz`A=_bHSq(ZKcPnmT9YXkfb%aim*)nS)bXxNic_G0fnl~H8l3xfhjD8jI5OCgI9zV zH%s=1p04Q9&UR8_+ZrxW6zDD|32SehW64{n9+o8Mw86Xt?3xz6)M|#LMJaH968T=2 zjc36b6oCr^e4`Ea4iq{J+SPQfLzOi-)}ES}^3cXct^O{so31VT3uvOdXycE~;hsWx z@z`m^`H}dNxw~0X6r-t7wf7A=^{)#KT_W*8xF4As5#nq7}`45#ea9m zjJAa!0W!!QPiMsA8c)+(Et&)cNCVunn@6x4j78q`g<;EFtNxxLX|u*8i23*A6+7^% zj+=F($_iV#ynbGEOPp9f5^ixmxj2>!3^yJUwz~r1hBWjn(mfx&giJ(`76eQ|V?>te zKFjOMe$y+%9x_LZXW;D9pYxCIR&~L4uOgLRzBFrso9H0d8g|o4Z8FmzGSkzCOz^pk zT5GAW)?C1SzOn9Bo;{S`7&*xRjS=!|blWRHLwZ%M|3OA|b#zAmiT4=k<;5l=Wu+!) z|ISmR!8Tw`&^V!I5>Aw#gJ!jspkf{1*XwS}0I@9V#f8I+*(6A}gZ+d>_{P?n?P+{=+R< zdk4~P&oRYtrw@H*GFr~dJ4-(VUUhADuw!1EYTI*#k^A_`oU38yv$2M#oRu`Nc$JB%KWBj2~vG^YL(>f?@=S~;nAw6AQM(T z1rc*8Kvh)nd*x&C`uG(1F1qh}A|12$PqQougmJoiI!Sssd%ALY3<-&Fx_B{3c^p8- zcZ@IIZ)(Om9;xmhCkHCZ93mL`NeF_L+re*_+-r>=+iy#a+W$^D>go>&j*dk0pjuQAhZ$@U02Scr)z6V){B|PQo2F*mDvs}o}{h;B;?mX|~;rN#L z{6|kl_D&=D(d^MkgU6F(*(Z*h=r}P&;6;Fgw2=2V6TVA1IVbwzT5H54l=plM?v{=*_uq=Cyvj|rmm2q)oZQo2mD8tK@SZ}gmN1prD2A#&PP$NcA40dKXJ6X zIl3(6d5IVRe+W%{{(r4X>wK}G*bKd>qsYQ{*Q>1bqsyHoCBmj+BUH2_VwC{pmE^CL zG?yI(!{PV!T^(B*M@No*Zswk7&bMHenuI&*xK7Iia?RgXdM0 zTLR?LQXubawSjfFR1Zi0;Hxup0EMF5qN zg|FrJg)5_zK-;L^EAg}pp5Kj9#Gr<$uBn8np{%J2rO||hf~lf~1SK(mX`j*F*k8#R zR93}Imt?#y;~UE+Qv!1;Fb*R6+9HU9^@49|c^k57b-dH;Fy(l=PJ}O+FOZ6ZgDK=N zRUAU^m>mv}`T5G>0?$Ul-_*fPp;E%6lOwVcw!kk9?1XgaC?_$woBLL`wl%@9_hr@F zWP0Be2Cdqkm^piUiNZ&TcekG+7Q2d><&BcV9vID7|>1~!hv zxsj}q@coD5M488S>nK>!1>gn0{nQ{g*JEA_S=q-rAsVX$#ALU4gJ*bgS#bk-NQVKr zvYEdbJdf=k8I7GmhbmW_TKD)5%mVJ}76|0lgNj4-qZ|$+o^8@G#=c{zwzIUEN^|3X z092;++y3#DX@1E;K6p^Q+I3xeYB!3MmV09Ek+?|Y`2!NMbS6WFwoG-G60x6d3KXv1 z*X~u&^SmwYZEKa9vw`#|x{epJOoIH#$ zZ$C6n3rp1KHw1R&kY-4m&<>{z8D#nl(oa9tRx5;wDYhH`|$i?^}*c$mo+aH zH^mTpYhQHf=TYd3y0F9=I+gcnl=akToVgVE65#mCjm)hq<4I~oWcC_9dv|M338IVQ z1@R@fNy;NmmlqdrZ!n@0t)^Ohe4ZyGd%1mAZle?LGQbyw>QX;FKS!;2BO<9yZxfE0 zWazynVNKG>AJ`7w;lNA5d7nHBt?V;L7uEZ9ta{e2UO#4YUO(60SaDG~hvlh-vWkgv zP`ONhjTCjV9y1NNrxwJyzL{m%JRd{c3&)+%ID3aua1*&L0`80kA*VOjZjd^DxMW;+ zDAz_O-_uTaA+&31^FUeQ0!1z%G5dO;Be*1G0?BnELJ7zTDEJUv>>j)IRte1a@ZP9l zk$%2k>;Q_Y1K8jm^%T5HqqX+TGN~hm#*gsF4C9O8^n_qyNKx`6>P&^@hV}#3u(z1} z=23^Q10qFwIR<2Mz*~38FKNu0B9(}%t32PePOPkmFCX1z>bsgh47H}xK7)qz{OsTmDUs2$?gOqVn2qrQjK)Df z*$&xF%}K!zkjJP&lR|OsoyJAhy>N@-^UUyb>YmlGMgZvoARh%{AH{H;P3CS^k%Wt*3TZ=7w6L0Pq2%LV@QLLw3<%{SBJxfs z2)*7h{=Hy3*@D5z5kUsGhg%X)cs17w^BpxRWnx%J;_Ijt|51-)IA%r%0x;)0NK!8c z=rrPh>8mvWQxshw7*nW|Ge%w)YGE4q<3kXg=2xBI*gzc%vgr5(g-%o-G+DtC3t9(w zn>M9|ubwM5<;DCf21OI>%r+Mf6(VEg0NhtYJgV=hnK!nz!b!lwcQx+OojPpr`)VAQ zWqNfm(GXYM$=4RF2HF$MtO}Kb4``TqcVoR;vx-$gRJrKo*GhKk#vo6#OWH37=VT+4 zFzZIh7Fcfnp6lzi#m?>H>2()^V`{>BK*}CvX8eh)RSJKYR8^)xGNn=hZ4CQ(=+hifICwIdK3xwjr#22%j>#8l zvN5hVE>*UaE46pHn*2@c=L>s_rXkG>(1Z$@%J;y`qk#~UbT6(Lh+5p6;0;Zc&TNn3 z=XosIS7Dss(U$uC$+pSM=YF|kSYgT~@D6kF2jsXy&0ag&&>x5YLJ@ys?(;Cpu`HY) z-9U$VhM-XS(h7BLT0X_domm1yV0mNOUuBsq^4Ab>LmaiyPmB+6)*zjjT81ocMd`r? z@l-$^zpj}9UBa4K`ES4yGO8#b0nD|2UXnuqO-HOu5XL1Ff`qixE=AwWJz~jNWdAtA zQBIb-XEm4at3hxEak^zQvFhuEJ$_q3nI%0!tEV-8QSINxaFSIOuo*_3vq+p@ilgT3 zW%FDDjJ!mn^O7SgRvM@{178@DZtREUZnt>ILvoy>&_B+!DCpkuWC6jxuN|n@AKVEO zJBTmMPuBKOzy&y2FEMe_Yf^@$l(gw7Dy#=W(8yF5DXk9y+(B0g^U`xQTcEJ_qj*-@ zpD_{k9LDQ(A8^Eyze)&bQ4VUd(y9*g5&TKE2VwD1aDUd#+dwEB=igW4ocYu}i9w7~ z1tMIjNIVByq9&6{EQ2LE0=_|&DTw_z=hKpUOtHG_7KENNVDccxU<8clCJc~BlcAZc zR5Gro4~Nj~PS{0j41!k5YElO_*1jc5xC*Y5mu-`lv9hsqvT|;2)eS`eCDbI=n+okT zNX1hV8eHh~RWR&J=?XYBhV`1kTqfHAB30yY{P_}>1g}q=`NO;w(n;M%6wt{Xtj1a~ z7UfMWWsQ9ZG<@lD2hhv5H=r#b9B`IAC^RE3ENjaU60q{~bIX`Xd-uq0WbP)^8w1--+m7=u#!)lEG=##NV$@mYG$ltB$r+E!v_Pr{an0YC4|9o`L{gG~ zK#3{`zR-UEDlJR8H&s?*bD-Nz<>l$3@FGyNjTn;xM9iBpXUX~FD`D%wKz=NkzCD7F zo>Aw}BG$|V=@|radrutgeQ?|()>Arp-kFsUZmm`&h>o3;2SQl=vbiLvQSGGOM58G+0wPiaCX3c^{2A!X_-Pm#hS z0#quAVD$(}I*OI{pnu>K%cdVzG0TQIRCOg+<|QS~HL&3y3uf@QRdu7+bYs_aW7d2- zG1IBz3wd`xpcVP$#@U##Z{wKhN}sRlWC?PHTFD(r@}O7z{&B8LrN-SHDwm<8ZYCRC ztb@CfoMiAjuy(f!h+nF92FhMIG9OqY9YyDkTbrxq`C4mgEUIvUO-;+wGFH&Gu9+xQ zpqRw8jBnk&tgGb|H(2S1jibNeK2P&Nma{%TU&Qqz&#sw%Rm?VQ@1fM;Jl7$x;rhumGo>t290p zhrkV1*qau$Mq$NMhu*;WT>V`%S=Z~RpHOmBL4y=f#`CDC2x;h;||36 zsP%y8f}MRa9_5(1ID5IIkvM#+j03{JniO=d$-mgvXVH0ipf1iJbA%7Pc%{XO>#Vw4 z!0c_&?%Fi&sxm*1`h46~q#ZH~jy!KWm+O(k#PdM% zz9f6(K?3Y|J%Su6HhMH9(OsxhvA-`k9&QTvHhUWNw@!Eqi4aFVMtP>3a(x`6k4u{O zh@?2Tj4+@UH+!z@IYp>?7$)2lkBzKDQSSQIU~*A%r0fA!62Ec*MY+;$CvieWZQr(< z87X{F3bx#-%}k)>7=L^=|Darb&ssvQp;vPO$OX4=h=N&Vt10d@HU-rnEE_Sb2#dpv z5AANPTugy(*8~GoI>kHbN0qjTja5CahS@ea?rFFF- z@9nyyYHgwI-76bRqH)k=;p8r@d>+6h%^=AQ=4sDfnAn3P7XY8QgjNMKnmZ`1Pu5@5 zotM1mJ)Avr!br*L39&WNwH6FF%6?Vv-eDixfX4|97ob zuYMwK269WRoejyPXmDc`RK;oA4jiUluEN-_JvznYa(!_A2)By7K+vl=0_KexZsR}@SV6z zggIUvatO0IpXh1~U7m7Yis1$0BOH+DIp64I9z2LP=pbS(1J5|z*e7B}MWVIPP5Pe7 z7jD?d)lr?p7SV~!$M$v$)SIKvsD!m+M`hY?yI5m;*FQE4$)-Kf?P`w z@4aq_RGx+fekQ*YtrJnrUAFD~8PO)|2Kj%|xFj>mtIZVa5p7tN{vsd-@w*dHy~Fue zz)Dl<>8Ws2A!xh%VBuzS!>J5v07eC!YjsO*Md}asap-+mI67kKvtI7YvW}ZwuQTJq z8xHGPTh<-$e^L5SMqm$w0?(YpTAVI-UW_NayL!g$MjcC-7YM?)d2*NE@}MHdi0HW{ z5v&Wg_4E;~sqLlD^NG&OT~f-w+;?4wm2N(`l|;`i)@O6t`w;?g7zSSFF*{b&NyaBe-8>$Do~f5WnwhTBQ6bYZ?d zyjOqARom+xX9J4Ijrd ztR6hWs4k5M1%i_x;8Cju>te~-O z(Cv*aI+{!{UVmvqb+*odo_(K5j#Qwz@(a1bnrzVVvF&E-sD0}gyIL%;hE`u6EkK01 z6|(7e+eKYoc!|}?T}LzSrKbE;VRC8?QN>EjijXd)LKit zoL%LbHD1;+_1+wJ-iSDfG^>F#cGjfcv^2KNh}*oHPXfBZw{t}viMUGzg?^5Jl3~WGaD<66lTvyF@P-3)_ z{S%o?It)v;Ny6s4ppgz(c2>N6w{x(?V?1MT;-7ajHXF-acA$Qhaw$Ch!d{7)a zB!7Ucq^I^CFuM)GIA4HJk6ML~98}|HL?DJRTUt@h-jdNK!2?7Eyit}`8Go0sW`i`N z4WvZMFf}d+WM)ZKg`%v5eml?VfuHK`z-fN0HhEq^AQgn#$qZr$gIehql2`Q8=^}`Bz#r;FhjhqW*&o4a;M63fO zRTklnIGhO;j)t2Bv=Rvz!8i#YHUH9Ge+tYoa8KUR7r{6_CvT3^_=(O$hIrO^Hyv4@ z+&THF9&0d$ejaz#B^g(22T(w#x!I~o#uzz#o32C#zHLa*869A7)cLFZ{ViuQDeg1` zN-Wu^%$fMI@aL)(-wsSar~w-IKwhtmPg-doW(}@=iFU4?zC%h!>kh2CbMR?td+F}3 zfL_V5O+57%1pl6ERvzzDdyiQm)0FU++>JY`%Q}FYR@6oDp?$rc>QT0!j_OtG>lKH` z#z^-Th*R{4D`=Y^Lyi}Bl9bQ)5$8l|i9Cy~=M-e~AT!iVKq{Es#T!qU@dyKWQWqK& zfdk)I#*dgD5|QLd9Pk7T7iwLUA4J}00m1N|0wZ7p29g?j%TFjxr6S}0H!;P3*brF+ z5NfwH$M%CN5<=m(7DvD_f^eCu{L+(&VNUsv1s?IkQ__*Y_rJgZz;m{$MR! zD;K1{#2Ozwr&Jn)MYHzU-Oz*-Qfs?^ZWOZQZY~(U?X)s5m#nLnp%JZL6VU_HLLfZ! zy_Re+@yB9p*>TUC>dJ=X%45?SwIE6NT4uv!l*R|`rTYrYGt7^>SyMl#?mS;uFBmW9 z-_(H@yKe?L+fXg1E^^IG+PN|7{>J1EtLl~yroos@$mKREQ7qPJ-ds2;a}qe!h8k(k zrGKmFJcW5!t-$CHGbOc4`p!w?8aZ>82P;{Y)$4?1Wf(j$sEW!GH5y?@rM$&H=rTwy zxX8u=Z6C@BM6z9qpIbY#B)ChK39~&cSlrFtWK3Zn4{+bQnrsQKgu2UBHJb>PGFCxd z6o?@WXJ&7Ns7e_k$ZaRGeJYA*Kh>D7y1=)N=#$WTDeS#n~U7fPhv=x<yL{7~CAx<*Vzr5%tGTZp_}z1xg6(5`Qq!ZxPpZqtUu%>(F|B zRd?Wpl-qsyZHAbp_)lNsYew9aPzPBfR?9-eL~+e#}bEgY};w9ywl)`ts< ze>Qqdz04rrpOExN#L$UW@1%Z_7zMf*I+T84Y z`g=5!0A6S=f#U}(s;;)GC z`g@}V9Lpy*8SflH>`PR}j$j-Qm1F$HU8M;Z$Mn}ehvikrvvC6(&XgC6AP4Q8{`C(d z3tz!K-;B*KfCe9nkN>1V^w9rQ`w;!r6IEYsfG=*r%e+dC(0PR!c zTOf%aJa`1pgw>;95KIMwj{Bz-sx~aJknrwi4t_S@^gsv&5zz(WV8mi+4m0C%$3#^! zl^A4(R`x^#x2XkiYU3qVYBq&mr?yeNp>OpME45b5t82gk5YsF)mcC@mnRWBo^CDiy z7mkY*z6M%EDh^>cz+nwb*)1{D?b_|$f&&zPp=`*wboJ>vPQ+UNd9W})Vmtu#Wfx~x z7@N++21u!d-=5QzL7GIwVl5I;}_UYFPmUXu!i-s^~g7XSDd-_Zj4PWJ zH7Pby6KPR#0yR|?dsnc?8ykYC7fp|6b(sJXf0jxrm!ER5bG=&~yY3nkZ0CQJ|N zkdUovwOUcUuRsDn?3)|B?CV^B^T%g|9|dJeJW@TnOCqaZllWuMNVkNrw0ocoC=n0% zfr;hxEa<6)jH7I7lPb@`B2%gPZ81do9$pmCO~#ptorfaii0;gAtvaSf7=~cF;sCgM z!T1y_*34OVOsedo#p%twK)fK+f4L?5hw`NL7}Wo3-K7>iyKAwdsi_Ihiybbtzh1LWaZ&l}M#kuUa|B9NqA(i>!eh zBuk7!6;UzNESy`M-?@WKMv%6|ify0y$3`p(?6$ij7{7Z6zX!;xP@i zQ!mAMUzI*^e7+#UX@pR4ts$Id8Ya@vZjs3Zily+=NFA5Tvg0VC)<#0dY zPA3;Aad+foWcdWm61#x>IEj+ZJv{h%ARwe0pv*#|Q6G&l0m7$qYwoH^%*cGr@oG4;G}ZuvAbE?R;QpK z4RGX%8kkp;{b^~Pv-6k9KeX?gRXlsqyc%E5<(pi0U zj~#YkSk;oHj5lbmjl`3eDukiV=47F2&i6_`*V0Y@iZBa5Z>W(xF=*Tg$WprbhLk~- z6o|jtxsT4qQvMmhoQ=8#2p{JKLT-fJKeD6 zA_Y*Gv>glQ01E=6c2;?#k%sWL8ayf+Gz*b!HYj)-UO7>_;3m2mU8;ClT%v=2)J>f$ zDteI}X73Ik68w1A(?#|)Xy<5cjI7MdYZpuDs6|buV)#5&CF1ZHDU@fQ;c5t@f|awz z(v~44!Kw+ct)=u~pIB_JnpikIlG0d6*9Bu=+ye1v?*3oq!n|TuD zKU9n8!F^+hT=Nul#Ssx-=+E~Rxv6%Q7S&T)n5+n7i02nj2e~f7%t2lyxcZFpWUr-S zAIl-QQ1>B^b!W_0&D_Ck6frgDGM+C}uC{Ky;W!K{pD{30s*CAI7neD={H}Ub@@W4) zooX#;^>QTTXN$yXoM~FsHXmcWmUsGG=iGF|tg;FeNbTo(m+Zkh^|wqp<7LE_IZa@G zT*}*9)@qDTZ*8^5;%lq+Y$UC_ zswl@y@1?{R6f-_NU$lyn=*G5c&x43p+0;J^ecAK%g7$1Ei!tCaYstOjg{083iJD@P z0v981#V}4oGP9I*u$&5jBUof{y+R?JSaXj@`BYw2f{i62vMpzcoQKA_2GBM%S?e!T zjjw_u4605AHE(KSRkEcSt8x2S2NBvwm1EFnH8T_c5N5dE$8RWR3$FO7V|Wz~0H&1+ z%fS78(XyS*75j-@v8$!;{~ncmhCPkTQoj(is+kC!Bsard5A<(M1M5%r7dZ35JDY^f z1Pt@1W_Ai>=N*&D^>GVdBO%*BlyxwIVB9c-$Ju zF{B)(G3CXltQ6ypmaz**IyUrpN}Uldw%cN+!f$)Hx%};~j}mLg4{f;=>)*eUx7nQS zH3B8BmZxh^yuG2|ue%xj`wRXf2Ypf~`((f>2_3U}(slgl#WQPH9*g7*-d=*d=&i+$ z;DYbDf!&AJC!{RKL>g{|ua?jYer3y^>&0tciRez^3~Y|S1;oaGEJO2# z0zlKCxJGt^Kg0U;s3;cQw(qnW(*Ic6hGMo1D}`RIQw$5j6n=)}>f%#~7jnij?L#0? zQ?6_K#7c}~I9G#51RnJJUg1rz(Yg4Y<6#5n4+FY*7?-|8Y$#MygS#)1&%|=LC<{^ZH}7YRD*J~cL*zeb^5zxlJQk@*I3Ji@0_&p zaQiym=iuS;BeZ72h9zP#mI>=5V z)ES256GqX60-E)F@)e6sl)0Is1lm(efY$X3dKP>|do_xM&Os<*B!8Iw`50;ItaS?@ z;pCV#(&~=C=u+R<_Np<-Cy#~S zlse%GxZ4*iMu3*6RXttRR&n-DMsKI#t^?9?M6mSO#EpHPE2J%q)T$o9aFndqD=Qfk z=?M^hr|(2Ma&>=ojv_l4UtXG2uqzYCBEX!nl8T6veq~0(X{}gD)%ZZstNc!)qM-Iy z>duXlt^4(C>UzTayEeFDv5O|pG!z@z6!lFNQbF12RrT%8eKYZs*=PoFdA;3`KNk5V zeo9afb}3l@06)9Fjg5_KIZJKY9)DDmLN?EKb5TwL3`#?nBpaNR0hFh{MDUWKaR)Oc z;cSC~uP+p}z;1O<58U(Q@ekqAQ?zSXZ44WFc;=?=&I9uCBWP^9Uvl+6bkW+(n2uGK z+W=vfl3g8LWZm&Hz|JqgW^kkV|M;VH3=IEkHA75OjZ=?{OV2YeQI(Vbllkm#I3VTc zbE>RIL~U)@wX>f`9br2ph`J93n7~9?OI80!M2S*;83%I&JPtH;F81hGfTX+s^JHCvtaX z=da~nyt9iyNkqxKiOrQ?S8kQ>+QavU)(M!e6AOz;8dD$u%2dsN!#0?s=wS!w{s5#u zLQN{Lf=x`Q(GQFv5*#(r2n~s&c%I*GiqYjbxe_D;e7`%{+2l(U;Ob_PdFf;cEvr3b z2RY}*^RMG75d{z73S#z7chysNW5mL|NT@QW>sV{C~ z{p8rJ6gjnTm$||Pg&hGuv{1UfQdJ&hcl?vOCa+^47$|6@&zm$jWY-h*UcXXVauDgjYfik1wT4U4t>Mcrf>h@Ra=~1DU&F7W)i+T zpi&RVGzPr!d!di(3kloA*S{0i@!LvZmFx6D%~I!%D&@e>UZ@CcV$a;p5yEH*n4iRF zPTj13xI|qW0XjFKYhkTxi<>#1tKtb67@aLo>pRea1CSN|)9gW#lz$fqMYo=F4s>@? zS&%S^gW>}HGBBO!!1qeV3pkjkPW8WLCR3f>-0H!B)P(qqjI`7&g$kXEv;DK8o%FxT zrB#3!qmZ7R0+vvvY%@JVOGP#=DMCH(0B^r^u;(~MQ$jT^F-;;z$3Vxhvv)8*cSIpZ zB{@MAr5eTph8dTgkdUU4UyzTGm6@gz|Emzud;$bOfJ@}@Z|{}0|0RQvw=Ey2ZV2ZC zki&rzU;IAmTFf$2_u zt#6ZKYm<#E3n+*avy2r-PVJz=b?87NOqiDK7`8sLVrfPTX*+SbM-54kGftI!Q7^XN z4q2)X8OanFNZ7J-l$oWc5-5g2dWj_~REUd7$5{z6(v6s)NYyH)aXIGfCWIWS%C-)UtxQB$f_vcrhEhOe<@? zr704YFQ_JBfoKVP&OsOIDIRf>Q1u70DP4hgXYgzCR!y09_r!4OjIePhCT$rY{HduPoNU6 z1(13f(@(SgnH0h@YoG|?(nOH)r$jJlgt4#5k_a1TzjgxG6u{6%sFdJNFk-tK+fk8)BUCqGiF*v*YLFnk`g^~?^uWLTTmh0UM_CV2l=;KE`K$R$cf7DMSxDQB#EkMQWL zof-0|&L8WE6Zn#Q???Rt@7V8LZhWZ3e`z{Rb=!aX@Q&)as#BYt5qL&;wjpYmEAShp zY#k5KrZ}!uVBT2D5WTR)nv#L7$Hm8B7yp|EWXD&6VeZ)Ri3-7d0{3yb#?*{MsZ~5-#_z9~! zS32s|@JHmcPwnrOdv9*EXBGWLkTkb1}9V!-LYZq`5~qmOn~h&o3MS?>s>sqHR< zttr>~$P8_L@u*R320quioxtM?%V$sxZ{%XNE7Z%p0n5QVt3c`{m0ADuVBWk(09f5^ zAmMC6B7Owgfj)$U7*t#kj+QU&nzI<@n0sa%tkLy7>KV!?78=mgi-4Bk-`5+VpLQE1KR$*KhM~ zReAcp2TK)$Mun;_n|CqJ8as>qkenQkDX@4VK9;punIq6l2F zs61(hRa~%8p+0_jsZEqp?4XlgU-89Rjd_{I?i`L&M-src4Nf0l=+Iokaa6O3Q+)3# zIKd~Ur>LnXS>Dt82fS~2<#6nFCR5rl!DeTUseAtbzPQ^^01)*S zXq*4Gha*|i2luu+re$K-!T(=-`1&ft?~Mv8Q}Vy<;cTmT)B*fOd@IA0XoT=i4NJKS zkDJIP>akk48W^s0+d!4X{p#>Oe#h@YE}(Mc)l^21oC`@xS@Jx%xbYR6YK*lL*qRuK zd;-|+J~nEKu}}6f9QV1@UKVvp#6;?_4tNDC+nF{h0sbZbIDz8ea2^t3A2LaV?ZMfm zvcoh-Rwp-1dF&x>IWlpcB71@#tiA;^B%%?Q~rshRXqrRBEWD(lVYH&fO95* z-UtdQ9PvDytMM|2(U?<8|w?uFixeIw%dB~6r}67gPkVDbXDAWH`9 zaQklfA@J=a{bex}N*?D%g;Sh`YEy}OBI{IHwcb^)ki$bT{)F=>1rbTDW9YKOKrsn2 z=10hBVES$Ni@95L{>YhH?BO)(H4@tRj!8(j#h}P2G^!&;0ok5C0vdetUy#(ZT0a6h zJn45@Kd7t)dyMaol6H)<1`nWV)qkqK!VAyGBh1qL1XG~u@SlVCa&-st{7c_fiBx~o zNkXT3TaFfcS04Tafi6#=>9=7AsH8rjlPV2{m6>BeT|mlZ{mle#V;N`iNWt{O+?Uw` zqg1LF&GlGa8;B<>4bIu$lUPVjHkD* zPCUBOs+5T*w5v!uIM?EW22e$Gpd#6KuA&NkY%pZ1IanL-aUBNtY~1Gx=xl0dzhEQ) za)_tcNX)n#764GZtjaA+66kJ6o~F~qEb#k`$-OH0&!agLs=c|^TF%$(5|v;5)zg*S zMJ=Vn-{?2Lg;)=oW^yTcNH8~dCX#95t1qx|r=ndG9HT+m2DzTl-h=o38CPk(EkiF= zOkpnk5yI@>~nnwji@wc+aVJKw=Q;0+EI(oVv_tXje*Cd4X(I-vw^8 z!t-v*iNyl5bUP8kG>e@AiDLi++aAYRZBg=1Fp38Z{Xa;pPMQUam|DtM8X7$Zb#GTLBr>R__!VDf4za3ZL{ zk}8!iKhzt>xk<|6w*Sj=lF#)Bdz0fBm~hWtVE)If9JuHBLA`X=MbUtQCj%GEXJ1bX zH8A;3$|xzi__hYw9EEfaX_U1?)I4xF%=X1#tTd-&g~h2|IOK#f>GJYP1s7#7HFG3B9v%PBcL*MR5^!Vp44_2T7-W)w}qN#5@S*6x|DD^>>y zM%CM;$b)v*eLQz?`j}Ws%UTeeHi}XN&T#=$&!_@5+S&|yA$Mq z!`+=jgB(t7J2TzY)m7Ei)z#J25Hg%8?y?g?hM!a& zHKACNJYv~~8a*%X3zt6We){Tz)fv%AmA9vMiM9Q5wM^)X$uFA>-X7NRO3n0BRU2+z zI?45HqX|o#*DGc|EMooU)SJ#RC(8YDI^p?;y@3b9C9mcjJasOlQkP#Ux|ZwQ^3c(+ zRYyVjudS#)~RMChsDy{OV*FB(00Li`?>>^wX&wPt~pw@_-(V| zb9~;omD*GyXKsx};P-5zoe_O6Ww_(q6*-|zTX}z&^M3HU@DtkpK@Y+nB+qIzVMI)6 zzZJQQip=y_^BTfNH_ohGEpqso8fj5IGIy<8aLZqHr>g&f3;U;tTdt1{@b7$i(zBIk zb*{%7%`JBLT0qrF9mYir&3#vN%!Q)v@u}*|8>;;oUu8>~KK*c_OpvKsf6wEWQZ1xiEIQ9#y6*Ma(>KRLll+sp7>&tb#VVmj`-}j~F>58v|9}RJ?AH8IUwA#TYb$cW=1qke+cdVFeYRIpv>mSXS-*d>uIVCKZ(XwI}b;~(< z-d3xq(n0B#1_pR$BV*Q%%bSE3eJXa?vc6m(9C3-s|G|!`>eU_1@`U zb7bFV_M=WE&b~dW)1g`w#T}Hr8rj?%)Ou&^~biJ{p=iRbnTQ=Ig=S>UC$eaFgn-7=G zeDO-#{GCT>MTuucA}V+8niA8hm`&em{YKAu-n8_Ip)+@_`qHES;`@FTZ@;QMsgd2< z^mgk@EIN8DdE3ph^=3@?qfNJ)W5)c}J2gfwo$&VMTScg%+b!Gcuk5!}@;QP_DmVa^o#4D*C*Tg~gVtTr~OK z{>FVmcS`QOnzlD8Y1&-30i7U%y56ZzwOei*Y<1!Ow%(m$%Jhl8e%9S5y=g}4$33@R`!=E$93X zSDi6?L)jKnf@XFeH!^-oU$3o~T34-KdZT^uZKHN{4mo>kesay4lMcAm8CGq3t4c3y zFX{r1)PFsx(uXauSQ&0}sd}&NOZ;1HtG@e4wR1Z^Mr00MbZx;6X{FmW#!XJ^>^Ns# z-?bqV=8c}$aBQH}^+_cc%G*1Ki_6}qklkULtt|cO>6I@Q^&S4MW`nO|Y}T&xY;2kG z)~Qd<@lMA+POZJ@(h0X&C#MvhlpNx^v8uv;>b@sKms|S}bhbSyE&8=VyK@UdN|rmm zJlQU%?Mc=Ch3oI_Rd;IJe}eOzW%q_}7s+dMDjh0bxmtB|LMbLt_(9cc4uJp6b^X% zV)?^%_b%xpg+rJ~;i4ERd~{ICzT&-H=t$v{`bc5rw0%v^Hh%t?jubB0JnZVa=Y6ea zuMgbPIJH}YvZ;NY`tPJN?5n4icZ`U9`0SISWp4E^$8Jyy1NyF-d#`Pc#=AwQ2f1G> zKP>0SYumh>)d|*7RMFUH$`9)nMdh^bw{maJIEwIBVzra$$H-nhZ5?xzP|hNq19u&aK*sgh|)R)3ySA0BGe zxXt-LzErHYwMU5z+ktE%?8j8D{&Co^FYTsw=sKeE$z%IE=`u2(K3G03 z`GVDhUVf`KTMnP~IVd!!)}EYkR?Dr_6He{F^oLE^=!1)_UiIniQgwc@_Qft_9{H@3 z_+Ok-_P6Mw+t-aesTP!FV1-Gx7j(TVda56r-tj=-?i^CbM*sC z)1cR+9uf7euGQ~-`Ejl7IoiE}v&-ywweg6?ey8J<3w92(f0bsWFSAUTwsX$fCKs*= z*S9|TcJ7xedEU_tBL9qB@9g#J*7Hl(o03aT&46uV2=gGDi=DM%|1I zJGvxM7;RtWx3UgbEgLVMEL(kKaBiUVQlwN?Me=6H#3zSNJl%KM|KowBvm4hG*12;x z^vtWh^NnRiAH2R!m{1j=wuN8*P zx-nGtAlGv5=lQ*B3_e-5&eQV4mbE|D`RUZNUl0GWvCG{*D~GkwDSz?udEO+V-PDY|`)9P?Gqld2wZF;BJsF!Dy4@!5&aL*H z;)DAohQ!9LIPz%zln599=MCevtBREzT4`U3&~9C)QsoAP=e!!1GW)^pP^w)Mv2DMh z3B$i!j+tv2W7(=^!>w&gR3CS-nBvUchf%_?z*@_;SU*@gwZz4s5Q_ zvCg5Y4%aVidEBY$%#~T!Yl*5ge7`Fvd|Nl#V_Xsn&fSt$6zN)H|<7mY+_~{d4%H7N0@_ZDyy)fBP-IbC9}h%^?S7xwNVE zdR6`S(znaG%zSiZj%Kz<&^>Bhy=7}6udV4YV2U?5y zT#uPCe)S<8z{p*H>>qNpc$+a-`gt2OrPnoy$3{`s4KIo*9lRl92& z4k=%6I#^9vYv+?S9hZ)3JL+M4>gk&o2V}%tDmv+q^nQ5kJHO<{N8XIMX`7MPC}hos zjW5byI2rhBzaBAaS<36lbDnhBTzATgi5+rYrk2Q>=k6Vp-qpW5(ZfeP`bzPx z2SYyeOFXcX8XUTQ==Qs%_9p*cZ)U}3rE{+d&)CQ1blW`R^w?)jG8XS&vi5Khcgd=W z>nnZrX|l~iIJfP{bz!IOB=j3wNEt12PLuEX1&VP@2^-M)$Zuxx4Q*p9{0ZgwYMtbuO!cn z&sW_)+IZUsZ+q{f4Hty3-fOw%O{amA+qpGdJ;b5$wwAM6tuEOoy4u+s`(s`2p89M0 zrgAC4eV-p+wlH+1+uG)~yFzDoIbX5-%&+N}rk?BHq2~GqUrUGf99DYX?+&4xJ9&8S z*mi%R-O~k+*4{o+bCP^b@pf|O;!mym_aAgLXWk06O_F+B#H;1D%k1qAH!Wl7@Sa087_31MFTSDq;>Z=Ma?z4pPFNeyp(EdKD^pVc-WyQ7<*TI%R8 z9ZDUT9N>20YNf|1A9Vq7zgS$mvTN?Hve!M&wweCeBXZGR*H4irN6hsYU3trp-IG>~ zoZqqbocoi#i=}BsSe_mIOZVZnsZ-rkYXn%fvDznGF*dGstWvS#^7HcT7v|Y)ZrCYi zY_V(8OZC3Hbgbu)+YfgHmKg79XRYhn!zJ%v5i9#eHFxj$Yhtfi_gkOp|MB;v`CkJ+ zE-hy}b^V7fnfLB&k$a2hpWZgg^=+%z9!~=*DYg|y*_Peu6D0@A>#FJ zfA{n%Z5y3#du4UCPtJM2JKZ=eEq{7&)vq(2#`fQOwMf%Xoz^d2^l8(twM%~3zNfDH zl`0miN*t;nZqsh_magtECZ=_BD3Nz+d!=`cbGP)`aOA|%YP07~yfg7!hDFopTaj;c zyI3-yGfXd4}}!k>GCgZ-n&gRC)h1+g>RlEpA-3uluIP?Xkg~ zR!_V3VN$MtW$S3i_o|mp^}RA8EG5_bwq>bR)OQlHfPL`G#7JZR~nC zbIjI>UY9-VxB615Mf-WMy~gcvy|0=vA+qJjzyZqamVG+Kx`kc7ER*I1R0(QaBdxYP z$=5CJ+}B-?`VTrY6!y5Ho2z%9Z1zq&bA(;FQu`-Wcj&#+I)vqZc4N40)E z(XO4_!ev8moxXOjcW>{S{rWyUoze8X|AH*PH#Q5dg*ShE#;18%fpyftGnX!{S~8-u zXz}zL(-MQu&0KW0(T6sT8lD;5>Wf=j)uf>$(H5ImHTGNWnUFXkF}|p#LC3)0=2yoH5B0f8d6XE~T)ua3 z_ad;#RkhsSm33ynmkf!TUPW?Fp7Q(k^x>y6OHB`#4qn*sQ;c`_0WaRoPOSWAf8}2L z(=X=^vUt?h;biMxqe9=$y@i`x(;j=Zi#)UKV*9)a^t}%G8vvOGa>7a`}%S37= zgBJbra$s)QnaqAy$zIk3_4HujkbdJDKbyX&?V6ZihmR{)^lMn-dizGph7SsS@aD$M zo=p!&R&7@!@r1r3;0>+jp(PP6gL4!ciIPP)0}(kx~# zE7qCpWsR!Z^-0O(+V6)|e>vgPU(PFXnrS_>NB%gzV!@+T>tQde!knP2{plxRFKgV* zQ|_HdURZV0>5|38^$+qECwrf5pq_feGxE&1fz2zqzWq99lyt&`3vJ$>t5EsHj9O>Q zjQ+GrR?Kn_xSvjJ{8Q>SeAJl(s!1`Q>{-wgbQ(JCTS+%6n zuYdKMGw1cjy*ui(FEeP8b7s|6dmq)fe(iv5rKCe0Y=s#|hpkHL6cFY!T0MDgho&n! z4!6tea(6@A*Sq1V!tBRg>iG}+_3ZF9VX^g3mx(*`div4_Js;WJNP7<%?S_mOMZkq0 zLpt9Q_gq)S!oE%0i9@2bDYaeN$COzcZL5AbD&fxq2YcH8^{nT_Y7I(ln=|j(uIzW} z#hT$c!+tw5Jag;iK2+u91Drcsr?%d*;qsnV8~x8e{a8k}tafUnVApW*AEFmid-ZdR zoLp_7%-OnL&9E|;T=y?eYP-ITX3;a(Uu$G_uhyW+gsqay!Tz&GUUGP|F!_>OJR2GoxnLJ+)`9s{JW@xa4%3gL|#|9*x<2!0Lg+ixQW0v3F8dWo&a? zlsVB-(!8|gF@NEe#S0ex(XHn`3*Q}9`z!Q%RsXKQ`q}Y0HCMlveyz2&^^K=9>zyhc z(sg`SmkD+bC;UzvwrlUdtLWOHV>Ys}ByJv3CPSVrBxHLLCOjJM@bY-uV;3+_UfSuA z)n48Towp&a)n(nu@+k7*g^#-^}(&JvYwWoR#qO=DeGuCf>evrpv%0?4u4OykrCGBzBG&y>w#t-ztpU;JoGbiUUIh)f-(HS@HJnjQ5@P zr$^1ys=xYtKu4U52S2O9NDdU(JpQo&*jd8+detnqf(9BD#t4i_8Yv>Bh99#)#&%` z!{GjqMm6s`Ez=&Z5zG=6gAgnz#7w@~UNm zi={3*U4Bz=$&Sapr=Ojr>G8YlzWC|;sLYnPrlq>7KCgMfUsqRhguG|{$zsYfWx%FXHe#`!_{$A(4 zgJO?VZQg$O@E(mFHm`UaF?r#i&aK@2w@8~MbnsbdcOfn9tsvN1GPzs!!(!uF4*b1- zEv@)b^G|grN4uS0KK9Fy6{$xa^eJQQ)zP8V!%Hd3(KaddR@dHiAvL7xr4qj9w+4SW zUTfx3)nB>GmVCYQ_EZDUgyli=2a1M8K3f!NJ2idr#iCD&&9JVY({8Hsn7FbZf2lUA z-PV~r;8Gpee8$;npHEi56Z?5uxM%JIr`!=7roU$QS+)qi0PtB+5Y715TMUe$S%@6`J- zE29O`i$xof-R_LNJts~2H2IcYZI`d&P8%FIRct1yz53pW!9i1$mED_o_#D5{Y@s%) zqE82_GLeJbJ_UZV3%DB-fB1IQZB5TDn3TLhUc{}l$B4acAEt$6bbUBern1tu=#|yD z-u5rGy6(PnDL1;Za)@QK`yD>_?0?!Ks7%!7n5QS|Jq_q>QM+Bee)odyoTjenv`Vt` zQ^Lz?zmIBhLFH84)ob2~Y0n0HSuN?ib^6eSpLdEcU5(kc$unjDFS)b29d3Y{PX=3tFHWuAw2^|_7}ukG(YP@>yB zd1dk0i^4`(ho4&XWKcqx4S{)G8@0Dyyy(lvx{=j=$4p3y9d<{MH|$>DTi)Gn#}D|l zw(jS|&a1n1aSHdacE}ugVryjA$@eEu3H@WH^!%uCBd0aFJ!i*^oMSsWzo_IeByd#I zol@CR^!K1INg5#t8!cSZ?9Z&^yB+eD(_G$ z9vwVgYR;-5%dJmNZ|e0qtylM*y``O7ymHB%HG0A6+-bFEN^_z;Wea<>Z#43VZ)4Ti zpslx?=oae2TsGadj!KM+Sty?8cV)&xrTvj-Ef+*Y+be2UjGcF3Mc~MDORJ@L99o*P zbIGY@CpC>^Ge!umSJa-%*-)fJx7e4fg#lYz%gT4_P-b@L)ivX5uKx3E4T&sFHtE8g zV#&o{rjCE}+mtHN*Icr8E~`p}zOE%}ZYyYkOsSeHdab>6t9XR#g}3s!_hbBq4ybEg*6!)CsiP`aJY-e;aj8aQAp+Fpyk*~Eqf+l* z9be+sse`wM4_?fyDBzT@U2x1ao4;&Q2DdzUzttWfNxkFv_G;ujjPeWvr+ z`oi;Zmtl6@qP@3w`ef00c@t?;O|QwNW{%7r?UCb`+Ut-u!hUeyIM;*iq82Q!GDPM& z=Vbe!R6Diy(D|mhGkUe_mS_K9WMXVFubORYK8toZkls(Hu=};0Z{k?0X~2~Q_gm;* z*014u_Cw{7y~WqAY}n&*&~eO0tHC<=UX!~XD-~b-#i@Fe6vO+(2RBb|I($R<4@rL< zFRLAVsOTq!=CQ5!SLdy6i@U5Sw=!7n`8@vd-~(^=&AmA0U8M}^s!4fPdGgl_l<^f; zO=>pwP-Cll7R?lSgX}C1-#w+Htcu6y`Bh1O_}7=dBZT*k)Z8$oOOvZ{dC3Ela+c-2 zEVE$s{cU4fm+196Xw$qrow`vm{sEPgl&7|_xmicI~6?lq9SYPd8^+~sf%4-8~1!cdXLA7W~VP4vkDcR6W;I{ zx-}TEU+_ z_sHuvAXl>D(V<_qOzqxO>f3zom?GnM%$wV2UK8oIMG2GET1{(F&Ue?DkBQAREs(HHeyhxkyG2PZ&$ZN^(Mt1*6eV1;`M_)g6`LO&~wvxzbjAI zR$C&4tfbe$JNtUSpME-)%0%XW=`DSrrZ5R?gLwHeOYe9(1q>`FO6)! zv-r$~UtH^46>W^$dc1TI$CO^Nd%x~UEwX39z>>Y!HN00Tad_7UlSW>fcBt3ss0(#^ z&A#R++r78jgMhfT(j}Xl&1^Oz#UtY46^ZqEabS^oO}`eOox84V){HadCq=C(oj7p% zvgtdXIrv_fv+=s!g1ybX&V1g~qRD`iltsVW{pEW0?f9x!S8Umt61%#G>y4CA@7{;! z3En0*d)wlV^KHIVm(F|fr&z=r$Gs^nykzs-m-`}3? zU39zIy;^Ixb!`^c?P#Q8dhE=}(p#JJPBeHHp4#YXxxb<;rtE%R@7UI&9dpaCvzpZ7 z?p4bRaVRM?&^G{lj+(&Kf@NCyZhou_by77+D%3F=f|Kclo_QX@3uE`(IZS5xjPcuc{hfrKq^= z$F;9>-;>h-X$s@1y z-}d-aEz#N21HbebJ#I#cyEQLICEUK^_pYCFQ2W4shd+CLF8+2}n+fcK#Nd`!YIU7C zc7MI_4}P67Woq*-YWL;+`V|elyfKH`y>zf-TkMh1UxTk?ZkT=jam=oBb>DW1Yq_EZQu0rzKp)P@;R@l_+6pkDLSbR|wq~xeOl|R`Js9^S7TnR##pSs8rEw z=6*=BuWsMTY4arQl8HypMeO@sBwrWMp=HvF!DVdT^^kl1Ui`MA`-t=Hy57Fmd%?s$ z_lKp->hSx7H<8vorrMuN2t2uX*T?Ryucsf4O{%@EShJqv+>1`?D(bSL&Xm72*}tCX zT4KoSPrtP~P`vDiKBJ0_tJti~vT?iX9`-4I-D5{DS3&Vg-M9Uf=ehGquqDTcpL@!n z^NeLL-{dT9b8&N)#jBvkof?<8=DfXh%#5kk=XGg6UL1Wha>lgjvu2d@*xL2nR-fA^ zOPvf6SHEjlS21GF+n6=A;`*e8#9KsX<^A<_)uH8Ibxp-zI&2+qy=$1_(w)#EMRlFa z!1??!dwakFKM(@`4+`#EyEW3;mGF-k@xpGw>r{0SLgX#G^^nH zEbN~Dusg4wD%TIp(R@BQURQJ8@&w)QZPpJSyjr=gcih98k3@+fE5f>5P`#-&GGMqS z-q&(!p1N$w6&^(AmBB_G+wBFS^#<<7N1WWtt`Juix9e zXMb3y8`IxUI?(;mi;}~}Hw{@BzPnY^FQ0EzdE;`%w&=6^=URl!U0$y!* z#I0#jbXSp*N4pFx>}}VUCcu^C zYWx+hlgpu&e-;&-0(WDpWrDY1_K z6){XiyqdAd@V{zw>Lf{mR0DlamqHQfj5I_Ecc(`|2Q*R4S1J}85z_xq8mSz6=Paa~ zW*$XC%9fzQJiFLYO(>DGbDU7D!~bj5I;l|PjF>w)nb2Nrj0h6n@FmvF2AaVY?zXn# zOco7jN2X~jQzk|vQ5>bH#*L{4SV*P`>Zy~+qg6l^J39)myYDE|rcl{p9$gHe^?_#k zpiBfw5>hBb6yOuKuCJ>H&oJ5!r9w#~$}x!To4-`9%J|ttb^sz9(U=g~q97`>m>5u* zyhJKnAesLSI$M|_G{FLS0DsJNAxX)RKY$)|Qne3o7wBp&qIy%@SA5|DLIl#s@)|qG zJ>WoVm?%vGiKkSFiJFL{V2N5S)2Nh`v!jQn{-Z*Y$$p8_NiK04!piojpnl_7)P#OZ5%8<$BRJ@c@OO%N!g*=N&0F?p7lGG{% z(KmpvL??$!l9l49v=pgY3L`Q>A#Nq0 zafnWlX+YyCu}z6GOPhj7=u_Z z5!GM1R4J1xwT^mRbU+R>c=)N+stj?UObtpzrc#Q7)l#XlK#UL(LI@fY=pqawq%EMG zAOVF)$+Q%xZ55=FN8|x9Ku`wc1MFp}J*h;tIY&^kAOtB=d74y>dK2n}$ut_kgr=5; zGDkySsAf(Y^>D~gVjfY>vKduH*&?Q>oH9{UvFgZNBdqeE#~-IYWSS7A24)RFHddS& zM`kEW4C8?P0Iku(m3zZMqCr`3LT>_t9U9zNBET$Aw8Siq(nNn|646j;I!#KvBq0@; z+fxUV4_p5`t7ZCHSXdz1pr$A)QKH2mpw=b8%qpc~1uRr5KrYc}loEv$CPF8B?lsIt z_D*p^-Wy=By%W5^kxZ$QI3~hN%E>-Vl1VXRmy{v{lNodX3F^Thr%+%CT!I+j#{LI5 zitx7!`@$7|xLHt?JN)Ybe>}+tFY>pAH>obhsT9b~SQj=F{ue7iF|l?LTDuCZ-GtWe zLTeA9wWrY9OK9yKXCq`qh3%-&mYLS0VOnQj+EM8+bX4j_VxHdxOA43HvG*xM&X=7c*FGrLcnH?-FG+7$0R1uH@MiS{J&3xYY;JqaiCNrIe zC=;cbRI_H3vtB?M3AGR>!~?bP?mX6fB=K@743~UHD-0S#Q!zoMQ)&T6XMT(H+@pz>X5yz-OGEhNd3VMr&k6KDPfT>J3(@`o( zQz->;LXE5!YFOgvw6dh(K!NXxglF?}9LCf1#UxGK|anQgH zr;TI_c6KtMDVb*cVVVJ{Ak$1HX~~>T>(8!li1o)}3`-&GADDwU=&W4@oNCP!vP&f# zfzU4~K=;E!%t#xNcbw=D11gr);MO9&g3gRHP|Yy4^K>#<2ib8tIgTc(jrGWCRRwbhYhA(wqJq_^Oev95auwK3U=)FE$%!;wvyekEOj7U& zWY=%mw&~IoS%MsF2?GO3oQbr`2AaVPVrKLaeZff*mixJ5FTYXCN|@o`BeNVgnhHGz zz^XJe2uRoR8vKqWf@I!$Te2SqCrR4Xl%R1 z(XaWeVS8_&Eoj#Yf;2JW@Fnq^82sROOo(6fgn}m|0FE4U1ZCSd><(GEnE8Z|V$G3& z%m9WHJO5P-n$dBntvEjxSS=b!GB~aPBvE31xPsNe%25XDODV=VF(@-lrPfAE)oPgj z{86h*)sC8;Nm!m!K@1?A8wIQi1h*KhV8INLWRV8A!Uaw2IvLthQN)(g=xr$g8z|GH z$t78c61wNaxHth8#|n5h7~%!*#4I{y#|bgLY;gt6fTUbSu69%cm>OEp)T9;4xH$o# z5Jxz$eMz5qZPWH24`;^ygQ8&!nT29_Kw9$*byi-3fapv)P{CT99f$ys8pOZJxfLka zARq!2M9(ViOdn=ApmIpElZp^s|QmbQdi$zVEc-kcHyBqjSZCL?%k@C{u+BOniq zHzD8fkzBn6GDW*zyx=7FEX+F5ciQ-j|5*DkQTg8C`yIskX)tGf}b4B&BApk zzy5>*oCGxt5*VHtN(Lh7QlXHLB>q$+LRB2V!r}m9DGH`Ha9R|GulbRIVJi$+8dzal zhnZEa_2DG!2U}I)i zhM@xGr-g-CyiP0CP(+R;Ajq&!Lo5T3R^kW6T^lWI)R^14foa4Zl^0j`?<+R|$IUh9 ze>QOr=s%-rm?TkZ!3u9ip|NNS9&2vjLV(6HZI*Dxu#WF7gv|@GW}>pu9ANz)NfK~_ z^ntNyZe7GW20ZF4@bVcQV+0KM)yfcUa4^7N(A} zcEhDDO$2(GOJfU*czVZ!e1Zi$_JLda>cC=QVIn5P5(`N}$pWt{EG9K7g%qqRa2L>^ z(S|2fz^zVt_QsW^gzBk-Em8QX1NW0dLW&d~z>ZKzQelSxJ-8f1iGC44zr)=ET$$>d zLSG*28juwfX_gUnSn9%H*Wze_tqFunb}AXvz!^lZTUo;uR{VzBZbo}|K*WE1bCce9 zWB3BDUmTw}va;b%L1PrX`@nZ_jnYmFmeJ$|_%6^*q2KUi`Dw6iNk(v?_Uu?q!l6l2 z3ZmHul&Se$&pt$22#bh7Ffa@W&h3@@^G423+f2@PpOfpy|30}1;egbAa2d{1MVw=S zo;#Qx_r}dmBsI%Xvvb3@)eR3iH!YwqXN*J)KIix$hUMk7(cy({N=AIkzV^2qJw(dQLKP!-{>3|hh$?*O6k&Ip$Y~O zyPl&f|C7DaFC7ZYJYEf<(ei?ub`_um*|jRmLjB6dq?>w>MwAjOKrFZ=5P8Be#p4PX z!(gIgHLh`bj$^`UaLF1)VqJi&0%q~5cUy8wniqh=#OL$@m_%8!@bvq>=zij&P-y)r z#x4u!mM9fQBd95b3g$OmkW9b40hnKqu3(nEw$BeIQWM|F?$WfqXGjh z2u&H>HsW+RJw1^LhPS7r--m+vhmZ;>1B9 z^yWVyz5x=o0DJcngqK;!6jFAxLA0<@ZmW*$1u$V<0z~T@;)=cprpW^2wF9%&z={ha znCNhz@S7ZVR=@@Wm+n6#rx_T0#NDCTdk}MN+$PYuLtH%+}08rjoH=YDJJPgQ>VUqv+ zRR6s;n%)n{*;i)!Mno+j1($im*T))Y#>Nb5=>3x-1o~91EvzL&3UfX-oFCO%9E4{0 z2O|i4ZcJHjDn!09wf@OYapQt#JDqMs zU{@fVZ-ODyEeGVAK6Z1Mpj}NvAS123B{EvCYiV-AD+nq?!lEJe(^>kxfvRK=4ntAP zThh~tpO)cq05OVy`-O2$n{GLng(k3r?vp(OSjzc@(7??z-hg4I;7NTRI7#N;1Bdkq zH~`#EqE)Npk&;B2jFO(hM1X%oyjbmkSj-s9!`EZpX@W+!nkOiDoM!acs~c?!N!9 z63Pc2O$R0(4E(_?Ykx|c?7A%{8>U@ua$;>rvS`Hl z8Xe4Fc`%M%5|0b6Wt`CT>w;K-U{=lJOsv=P`X^Mf_++GG$ty#B#=J74eejDpZGrC% z#w`Par^R0;*`=)lek_7fNIGEKNlPSFv`iFAL60nFOU+%g{Jl;C5g z6rjs&G((KJ5{{in($dr_8Q5X+EOdYMfj{{)1`g40Hl;6P(vTlE1n$7XG(~*MxPsC9 zCX7496@i9WE{kD;)k?7*yd)IxS7qX(*jnUU5RVGzHP=o626$^&gz`m)F2+X+hXVJO zV5NWa<9I2^F(hVILY2>AMlZ_w{5L78=S>W8ZPP;VE#5$MRECm}Lqj|J&9rDz2AWcQ zJHQ?Z!oY-xGuECa(jBbEU^cRN?1M*zjD=GUdl2~}MN5HknZhE)MW+}e#h_z~4bxW` z1`xyw!Cf#*nW2)IQiVfF$_A_eLUK7-iL`}tZQvzAO@mU*ERaCxQ%L}a{>UuY5k$v8 zSRl_3qPjBfZw>s?;;|Ey7WxD(9ZE(V(6C9(AdLZ;xYJDhd+<6zrBc)9f^a9BsRB&W z=)hN`ZymP4>8M2RATE2xmaamZtL9IQnVm7AuO@Rb6a1!!MK;|G8bCS$b`bS!@Y*m? zl@17@2NE~Gz@iQe6g-PzT$eqwf=e}11Azg+k{?3+=>DM1fb(huH~`Ub;N!#kNb_xp zuv_oAH=#t+j((BhA>qNzsc;qB9x@iE7apI`AIf8G2KYeh%xNAhG(Vs1ynRF+e3(sr6scC8U4ySHrOn{bLlwnCYMVkx3KMK#|a6nV~R`Ft`~=2t$uz=nznq}cw)1)=q zI5`xMFXmcgf?+*A%}8ba9;$$yt+KymK(J&3@O^lcAY9JBD>Nl&Q7}Y`fd|5tf9*7t zhMiK)F##kh|GIc!&BcfiyguY#(UgE7G(<`*@O(7UrZ@+}*&d98AS#uaMnNBeMr9{X zTESxhC8v`UrAQHQj~MD@-fU@s=0ClG$1DKo2?e?WQ7X2~?4su&vkYQRg3%{Axj9Tv zWMr8c^~w+!k)&CLvlQ7P0~?!S>5rc|m}K%&h=lYDqPB@ZfRup)1`kCtt!k*|l!zOZ z^wxL*6IU4S(}P6~QSNMxawlHGsiD?6YCO3*|GA7~*HAerO%AJ{Q02#5%ch>Q#h?k0X2Y(~qs1~R-^Hop`3g7`455|NSGNu98Gng)c!gG)y_Bfex z;(@YaB=zh!&QLXJl~&OpZV-Egb`gw7I{s3FlMFt&;wK!(_&~xm6L7-8Cye0~$Kwox zPaXsYXeNB{#BDqg{NdC*`}Sp_fCK61kVv4pK^aL@c6m!YhTj0(6j3ronp{eEjvPINLwoese1Z^Ygamf<62`Po z?Z~8Hh^#(6gb^ZCwoxm*yb#8YaXZvhCe&u=5Jm)s=>`ZAkxYHFsQ1j26tW30kU>Bc zqPq1_LpZIXZDDXsnO2HW7R&38#vupHpKoS8rm)DQj|)RvP?2LG**SzcrGTUobdHGs zffNxxkRd`(2$USoBxc-1|A+ELp!o7kd3~A%C(}GoJRO4Skw2DElkg0YOUXG!##akb+pL&F z6ZGh#nG6QFf7;%tu8p#MmBU~$ihjwBJB6Fwk6U9p$Vy%^aDb&qme{8|djLm$MZ? ze-Vq!qCq}o*)wyn&1Qi|VNCrYO5AYZDHk4I{9RebqBG?)uRL~=u$li3xy)x^D8JwT z2>&P>{q7Ouc7pVk?5>TCVY(3>Gx-=3Ub6B=$9S;xW+js2Vj2mT;e9q4E`*N-MeO3* z-~9Jzi87UO4wx?xl_E@uz_xujy%HTTxMP)s(MXm*bTydj=>sTJPpru1j8qMX`bU~cto)I z?AVd}GdRJtN~=@AfTKDO)Bop4jm9B+Xf9r3NMQ(Q$dAJC>6=5#ETR2m5DQPQK}|K5 zAyh(0c$H2&<@NN0cPw82Fg>9q*zPurCli``NyJu9ODMvUhme#v1JPayI>(n8$>qYh zzDIaTB_?f{i5B4uAjV$Im-;kj+*H9l>ZO?1N+A|}KWH5p5t2c|P%dH9f<24Q?8q=y zZ#Jm(2DZ#m+Yn7ha2Bg6CW8$+N%E%+v5xbl3`auNX+uQQ@GT;4D$zVtNgehXON-eD z+igp9&ryoj6@Vv>5{~_tgTPcM3d&RkdXBEd zK^8dKZJ5|S8zw2S zfk%xwz!3r)TxQoUyB`r`Vk{-+~K!G{5S)z)W z?J5Q&CySsdNC+OgaH9p?98oz)`h6r)Ss-M-*l-z$1#m~FHM zL^7EfGmwSI>{)SJiy#?#u;gt4nA*^Xpu#kGKLKhJs7kZOGN+!h$1Paz~zQLYMSD6;|LHh*)q!lwpc>=`T zgBO$zb}A56&b9n+VXB~&vw`2$sH2!*9fN#~OPZnxJoqQ5Y2W}fLp}yU!(#s$b}U`^ z?zViT(Oltw2~!G!(`Xjb20y!^&7Yv=i~mdLLTsQe9<&=+C^Ww9@ERH^X1>ZFW1ef~ zUqh4UzA$AwBbvN2{~BHl_ktj>0F2B;o{Pf#_@>w9Y_WeEP5lzgJa$Hl>wgVB{W`Ev z^2b|E{%a`mbPBtaGoA|>F*I66{aYC3w?K$tVgX6KFg>zK1}TzYhS>a4jfR0Vyij_$A7Xz*eg0wy;%Afq)AD z%ZLVn!6KbTc2fQpSi0XhAXuRKHwB_vFbVhovHNOC!N3ZFhB6gR2bx2^V=eLzaCLKb z_619h!mCjVARAVWO2ylcno%~8Xup7iPz7?8rb;MS1^~#}k#74N?J}i_3>5MxR=!e& z{Xlp>bd;)qp4qUL1ZOseLBOTx=NQb09rrpTW2` z*B;zCryrrngcb3rL$l(ahK{IoVix15B zbAhm6Q49VG`h=DdQmn1PD^UO_G(?r*DnCrkKzIZq;TQ6)1BdxaIk>P5fT8>Qhk+>p zEzTAp$l-IE=5GLG3~gGSbHWpae1=bd1F)%SM-V2E*>67#{`*;EZUA!=-1jr7AnpER zTq+PjrRwkS=^LO~Zm`xhBlmxcQ)XQcg>VtVDd{xG=&tD+Mz01nU4z5uw0z7cCRow8 z9ngMA-nL4tfN`=4_)b>bo*}_yJTEJ#&>y(ffPv1S#$Ieddz^XZD$xbx9-1G%*5Icn z#rZF{&40OVjITrht!JQBcv*VPg&n|r2yr$)lugDQIFg6MAYH}ZXutptfef7sW}LH8 zT%5y?;%^F!w1Gh#mR{Z`;R|B-h!!_TTvj?33j8O994hgy05Mc0?v#jNpp~dG1 z+WZDwgSNp@PPhFpr>n_^jb@YZ0bD^TFp?fNy&&lPzf?8atbZw04aS_%o7O=40u$BH zYJp;GhX2`oHKv&{7-NW}>cC|@#9HvqXA@iBxCqdSGr0@e?E7EM?1EB3EH|LXf7v>i zC~$rn3=%U#ADA$B%?mu|ooYdy#|<)=PC)PDX^nhyXn;{~sv{Wy|7Git{+F!-&cgkd zt%HuqFqf?Z6NJ#K?f{bblpO8;FMWqe?vVe|caY1)z@PsA*Yq8{%nZCV1Yq8LEBgfc z?%4!2I0PB%5#7=3Yc4pfz`PR#kja9;AWIZI&?zp%#(#+(kj%XJQV8BMI<1N9z(QOI zDpy3my3eNo8?8@1^B{2ND*?9gA))M_kYeE*r@mk(74~h}Q!qSVDQk#x1{QrFn~yH8 zDFw{M3$VK6J{eGmnK8J%HkO3YH}15i{-enr5T=-bz$}b%vvv_$y9%w{3J8oA#TftNvgYhqxj84I{G5M412II^tR&?MzMy^A1HC(8-X5 zEc5kF8{9!M93ec94u1TOqelOoaAlV~aGVI_JAc{F|EMdDRUR+-%pj~}Ek1hxkMX>j zGLa6;;C(jFM)Sup=qqXdJK(BUad3R904)cX$0R^TLkx0evU2GUEa!8QRp{aDEOZbN zZi8m04_O*A&2Z%MViAo8EPVRTf%?C5p!K^5sXtpA10~qSmaDITJPU_47mV{oR^m}>Ob?-e{ANYf+j#>QK| zXT0=n6Us7=IGD20iZMj|n)Z z8Y^P1WH63+%lD*Z6j9RL4%mMOEq~rY%b#$L(!k>jj3zu8A6AYIcp%6J^|J=00M z5OB&f4;q4uNj6E&TL(S*o}-*}?J(Ni{{Q0xl&lAVpIOZ)z?nH7Vp5V9amO5&{O^Qc ziVQ9yCChgsB9fCN`eTxOht0o4M>yfftXF7XLpuy!`NoMkhUZ4kiGK;<|IYZCD8KJJ zXUuTVG`u+0NI01hZn)0+*SIW^ktIuE^0(yA@$xafb+*t#S0z4gXGlfJBd$deR zI#CIQsZV&@Xt4rXYyCqf4rt(f447mP2IKlC95^U%nSi&U;7wAj^OE*{(XW}L>EI1R zUylX-lDkeN08Y9ltJHYA4t^y?m@>Ha#{dMv!NEqlDzcUL$%o=S(B)_##x2neuuT|1 z)0;E|322G|0ly$+SBh4frtxud!fSfakCx>a4+q|Ki87TVymHErrOKRw5~WIU5S$@X zseQzB_8T28dc|B%H4UR6a1Hj2@vd|LjQ=I-Z#e>i6<{nRT>DHcF|tcfm(r?K@@QEa zmIzWx;^k5&IQfbHQh3l9F1g639^SDhRco`bBB7eTpFHT0k{d7VCC~wX-WNz-t%kcZ zAY2(ginS?_p&G9GVgsjRZLBr02qKq0&`CsSbS;?tI^q!?^hrrIGO1~(I06> zWYdTl31foLofbKNnvoHuLTD&n@kbDjVR5x?My#YkxUgr?T2JwF+;4YB4-ju;npPdW@_8Y0l zpoHl;H8{Cb*qiE|x!dWD?x}b7auT^axi~`urs>GoTLAw~R%IN#7qh?q+J17 z!AMYop%W^WL~B7VKS<9e5{lx4f~I&oP;(OZXzbr1j-E)kf(YdTre(F3$)Ob;5g6e^ z1(>~jRjg07Wl+rI>QtsRrgyBO1O=Bx`N7q5q*2bp3j$5dBK82jKU~;@SmEY=euwFq zGEgenBxRLh_NVfeu>zcp#W9fmO)1l)NE5k~R+vD#6;O-5nHR3-gMU;0j0g%UEN)T9*$nlULGD;OJ9v?m}%YF(c8nz(;fE09lgDsU0k6_7f%-vsl&F! z6m@WQ^mKC(d6OdEF5aH-L*(iKzeocNTx{rv2olSq1kwyJ^73?bb{D!kx_Y<+X3#4S zFINyd>`iQJEKteK!^O)RaTj^HySpQmyj)ye36cmmVQ@GHYp|ZE52+(oxaukWYMQ%a|SHuh{rf097+%yaV z!PyILXi{Y;X)q#pN0FO{yU@iQDDNSn!FXc#z6HjG0C4eebocad5qf$#dU&`o_1)b( z3k1*+GCHJ+{aSSp!`;hp=~5yqp$_hjE+Rrq7Z3?ISEgIQWkYxz-3+3fV1xnDxNj^? z^`;kbv6+@Ia#Rs0w6uY6N2_&!D~t<;3Qi)^eRgwn_Hq-7T%qgEzyd;fS9e4aWY`ma zaIEtehei6eBg0COOe(uNI=i^LdJ9D!jxMeqY;7XFW@9n-a zcz_k1mk+pTvA;^91v*NUnlzP~07bM!UXJcwEGSGsrz-9U0^sqyr7DY%A*qnk4fa#t8BZl0dBl)_|MU?mZZYj+VK=jP}p z@`MQvM>_mlFmh1F*~10!0(!W*x;VSiy4b^01Y@FrPJ#0B^h8DL;^^w^;z<(_=53he zO={`KMLvE_-jLvFU(TR`9NDRp$#v03M`ov;vF@0Jvwvhe}TZYc`#eS!s*l$QN^I5#W z%*KygmM*M8awePP++s=+=TAOnJwn3o-!SdjNM6qJGs$`dZGqPYx7|6~4M%r~`Rmk{=bKEVOI0sm+c1xCm|l0k4ywdiOGNX4h<%IdwcjhqFr=IM7Uol zdA4W2fha(-J??sWG{p^*IKsk-0w)<{KG(s0#WF4WW+BTXm7&tf6DheY71X5)|Bu(( zK_)l2JPFmO7B;gT*+!z_1s&nRfr5oCxL`9dZC^ZqrE{+*vbDh=PSa`WyQa}Wo1m7Z zX*qD=D)1~}pCXiS+dZ~sa78lswIGEm2b;Ss89NT%QJ{$hMX~N|DHTQnSMa^jfA9*( z#NO`A1kJ<>fSGV5Cy)rwT~?!k{RNgCZ5 z49+$=3@7G_5=R^Tgi!Fh1NMSO1{%1r*?S6{oX7!n&S5Q9r1FlZ8{HU5?~$a);8JV> z+^tMwL$yNHCB$37nHPalbfusKXsC`T0{&9HM-HXgLMMxoOQmU)J3QzEo8SXB523$I zU)Xyfv5IMjNm0^SMJjgG!i)z}LAXzGcQ8XB7X6C8Asd?eMolCPV1&)k6^WpHyB>Sb zGgptCfBa@WHo!{X9{uK<6)EoaXs$&%bd9a)VMhoKSjX_)z4f1+AU%?|tdMA9*)TC~Fkv^~pc{RofVG>AkZmrE z@P%W79fpcC@9>-`Ak7t}G2=R8Cxn@ge-9>uUSv=}v|o5|XprFlQ3OK*BEr8Hw>V#G z7jl0eO&eDBj7iW3q#qbn07qE4A_*rECQVgNxbzSU01_$zQyFI@U@Jk4!3u9GM~=~q zfn=`cFo8-a4O|%-XCs}Ak3@z0f!2UKI;5ypw6Y|68h~vuHMyxhL6t_oVI~rsp3XB$Fm|EyLF%4dlxep)*u#i!E z5&eg-;J1EE0R@cTuzDX!nga7GsC%%8)sh5EoX*{vn-GsG2)h)m;@Y904!q@*o**zH zJO~@-CE}rTgi!Q8k1tu>FeW7xEoBli$7fN&DJl)jQHemi*x<-u@C{h7#n2#O4zIN+gnElhCYl&2f6wMb%yUM~2j3da6lbr5=#wk9_L7Cv7kvIVqkTabAzrD9Zn<(b)n<-3fhK2d;4Dl`;7Q~{R zEtMq8HE|TN%Q3D!SS^(*xgd3z3m_pkD>Ka?U3ZcMwh&R?^ec53_y+qh1O%4Q`xn?E z`Zru5a9weGNPbER_U9B?6l_3(O$pNw2m)?m;^BP_iWV>w3{458gwG(C8gfFg0c<;g z|C0%+O;LMIKP;Bq8l zyTSNK2OlmXM=uE!usxRnJ7lO7xg`S`Bs3-g^roObuQaMR7x$fgEB>R~WK2dX~|QKczsCSfrrXl56*+}C_pw7e4ESkm%Jvg_6Y zQ^|7W^Iz0bC<{?^_koolgv>IFp%E;AfMB?ILp`n`+-Alo3>X~@AQ(7gZ~~Da;WDne ziL9DQ#!Ob^f2%=&oG%%F67+Ad;3u_GDE9q~ws4*PuZ)hr%h!AzW`7qj>s@1K2=*B= z&HoM22TA-9S6zlwlBOb=>j9luh%K)#s5S+nFtsT#X`>YY zhB&l>mKnmvsgRxrUr*F~5dsI`-Fh1EqXB$h6b2v^80#7zV^=!kcNgkC>_N&zvoHPNc5O#443@wojnMq2 z4OX;n`m)u4zXiQ!dN^zaGWDYrCPHXz8hmFKHe?4Y zAqArFfFN{0Dk4QiGa;`ARs!L&6l6k6B>;iJCCeBS5CV(~Khiexg5nXDCLe2x5IneY zFnYkAmnG=r;1gz0ML9LIc|o{h{GKp{1kl2gn6QSne7TJdSc}1ULm#4mj6pqvqDai5 zFUJb#bUO$cmdIe`rXn6=Fi#Cx!=pc82}d!gYo1=_DTOOy&Rk`BO%~1^T}%kT@`n8v zS`5mRVBa)8ymz2N2xctie2j7B1ZqKo%UrTjBUh@RiZCzmFl>#e#RxPe&oavm(;9;B z!3~Lp_<@rbq=E1NE_R3Y9EvzA$6(Z=mIIzbH~ul?d16yQ4`9KFs3nt4H-pj1NnK%4 z)T;{|ePrtbbQr2GhGRq&jWvRS02;BLG5t}Gu)`j)Rp2-!;~l1$!tow(L#_3lh+z~b z_$Ii!Wr)NuTm*>RCt9CJq|ttUvTg;peGFbwPH#lQO`ZbUIYqW2;R(K**`s6`MaQE@ z{opbP*PvpYZX-Y%n^6uTFxd*@g!!HeILccVahm&f^6}VFe(!{9i!_`(XrAEW*3kbC Db^Rmt diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_buildingContainer.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_buildingContainer.sqf index a61f190..e15af7a 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_buildingContainer.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_buildingContainer.sqf @@ -8,17 +8,16 @@ params["_u",["_category","House"]]; private _pos = getPosASL _u; private _building = objNull; private _surfacesAbove = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) + 100],_u,_u,true,10]; -//diag_log format["_surfacesAbove = %1",_surfacesAbove]; + { if ((_x select 2) isKindOf _category && !(_x isEqualTo _u)) exitWith {_building = (_x select 2)}; } forEach _surfacesAbove; if (_building isEqualTo objNull) then { private _surfacesBelow = lineInterSectsSurfaces [_pos, [_pos select 0, _pos select 1, (_pos select 2) - 10],_u,_u,true,100]; - //diag_log format["_surfacesBelow = %1",_surfacesBelow]; { if ((_x select 2) isKindOf _category && !(_x isEqualTo _u)) exitWith {_building = (_x select 2)}; } forEach _surfacesBelow; }; -//diag_log format["_fn_buildingContainer: _u = %1 | _building = %2",_u,_building]; + _building \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisonATL.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisonATL.sqf index 5410554..0643dab 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisonATL.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_configureGarrisonATL.sqf @@ -1,9 +1,12 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ - - -private _building = _this select 0; -private _CENTER = _this select 1; +params["_building","_center"]; private _pos = getPosATL _building; private _garrisonedBuildings = missionNamespace getVariable["blck_garrisonedBuildings",[]]; private _count = 0; @@ -13,6 +16,7 @@ private _buildingGarrisonATL = []; private _configuredStatics = []; private _configuredUnits = []; private _statics = nearestObjects[getPosATL _building,["StaticWeapon"],sizeOf (typeOf _building)]; +private _units = nearestObjects[getPosATL _building,["Man"],sizeOf (typeOf _building)] select {(vehicle _x) isEqualTo _x}; private _lineBreak = toString [10]; { @@ -20,11 +24,9 @@ private _lineBreak = toString [10]; { private _isInside = [_x] call blck3DEN_fnc_isInside; private _container = [_x] call blck3DEN_fnc_buildingContainer; - //diag_log format["evaluating building %1 static %2 isInside = %3 container = %4",_building,_x,_isInside,_container]; if (_isInside && (_container isEqualTo _building)) then { _configuredStatics pushBackUnique _x; - //diag_log format["Building %1 | buildingPos %2 | _pos %3",typeOf _x, getPosATL _x,_pos]; _staticsText pushBack [format['%1',typeOf _x],(getPosATL _x) vectorDiff (_pos),getDir _x]; }; }; @@ -32,7 +34,6 @@ private _lineBreak = toString [10]; _staticsText joinString _lineBreak; // Since this is run from the editor we do not have to worry about units running off from their original locations -private _units = nearestObjects[getPosATL _building,["Man"],sizeOf (typeOf _building)] select {(vehicle _x) isEqualTo _x}; { if !(_x in _configuredUnits) then { @@ -47,14 +48,12 @@ private _units = nearestObjects[getPosATL _building,["Man"],sizeOf (typeOf _buil } forEach _units; _unitsText joinString _lineBreak; -//diag_log format["_staticsText for building %1 = %2",_building,_staticsText]; -//diag_log format["_unitsText for building %1 = %2",_building,_unitsText]; if !((_staticsText isEqualTo []) && (_unitsText isEqualTo [])) then { _buildingGarrisonATL = [ format["%1", typeOf _building], - (getPosATL _building) vectorDiff _pos, + (getPosATL _building) vectorDiff _center, getDir _building, true, true, @@ -62,5 +61,12 @@ if !((_staticsText isEqualTo []) && (_unitsText isEqualTo [])) then _unitsText ]; }; -//diag_log format["_buildingGarrisonATL = %1",_buildingGarrisonATL]; -[_buildingGarrisonATL,_configuredStatics,_configuredUnits] + +private "_return"; +if (_buildingGarrisonATL isEqualTo []) then +{ + _return = []; +} else { + _return = [_buildingGarrisonATL,_configuredStatics,_configuredUnits]; +}; +_return diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createGarrisonMarker.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createGarrisonMarker.sqf new file mode 100644 index 0000000..4f244e1 --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createGarrisonMarker.sqf @@ -0,0 +1,19 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ + +params["_object"]; + +private _marker = create3DENEntity ["object","Sign_Arrow_Large_Yellow_F",getPos _object]; +private _markerPos = getPos _object; +private _bbr = boundingBoxReal _object; +_p1 = _bbr select 0; +_p2 = _bbr select 1; +_height = abs ((_p2 select 2) - (_p1 select 2)); +_marker setPosATL [_markerPos select 0, _markerPos select 1, (_markerPos select 2) + _height]; +_object setVariable ["marker",_marker]; + +true \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createLootMarker.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createLootMarker.sqf new file mode 100644 index 0000000..5f2f091 --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_createLootMarker.sqf @@ -0,0 +1,20 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ + +params["_object"]; + +private _marker = create3DENEntity ["object","Sign_Arrow_Large_Green_F",getPos _object]; +private _markerPos = getPos _object; +private _bbr = boundingBoxReal _object; +_p1 = _bbr select 0; +_p2 = _bbr select 1; +_height = abs ((_p2 select 2) - (_p1 select 2)); +_marker setPosATL [_markerPos select 0, _markerPos select 1, (_markerPos select 2) + _height]; +_object setVariable ["marker",_marker]; + +true + diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_display.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_display.sqf index 7e74fb2..6cf873b 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_display.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_display.sqf @@ -1,4 +1,9 @@ - +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ params["_message"]; // As found in fn_3DENExportTerrainBuilder.sqf diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayGarrisonMarkers.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayGarrisonMarkers.sqf new file mode 100644 index 0000000..a6071ff --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayGarrisonMarkers.sqf @@ -0,0 +1,30 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +params["_state"]; +all3DENEntities params ["_objects"]; +_objects = _objects select {_x getVariable["garrisoned",false]}; + +missionNameSpace setVariable["blck_displayGarrisonMarkerOn",_state]; +{ + if (_state) then // if the request was to show the markers then .... + { + private _marker = _x getVariable["marker",""]; + diag_log format["_x = %1 | _marker = %2",_x,_marker]; + if (_marker isEqualto "") then + { + [_x] call blck3DEN_fnc_createGarrisonMarker; + [_x] call blck3DEN_fnc_setEventHandlers; + }; + } else { + blck_displayGarrisonMarkerOn = false; + if !(_x getVariable["marker",""] isEqualTo "") then + { + [_x] call blck3DEN_fnc_removeMarker; + }; + }; + +} forEach _objects; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayLootMarkers.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayLootMarkers.sqf new file mode 100644 index 0000000..aa1ad0c --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_displayLootMarkers.sqf @@ -0,0 +1,27 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +params["_state"]; +all3DENEntities params ["_objects"]; +_objects = _objects select {_x getVariable ["lootVehicle",false]}; + +missionNamespace setVariable["blck_displayLootMarkerOn",_state]; +{ + if (_state) then // if the request was to show the markers then .... + { + if (_x getVariable["marker",""] isEqualto "") then + { + [_x] call blck3DEN_fnc_createLootMarker; + [_x] call blck3DEN_fnc_setEventHandlers; + }; + } else { + if !(_x getVariable["marker",""] isEqualTo "") then + { + [_x] call blck3DEN_fnc_removeMarker; + }; + }; + +} forEach _objects; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_endMessage.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_endMessage.sqf index 97d8c6e..aff7298 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_endMessage.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_endMessage.sqf @@ -1,4 +1,9 @@ - +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ params["_end"]; missionNamespace setVariable["blck_endMessage",_end]; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getGarrisonInfo.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getGarrisonInfo.sqf index c5c01ba..50c6a7c 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getGarrisonInfo.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getGarrisonInfo.sqf @@ -1,19 +1,29 @@ - -private _object = get3DENSelected "object" select {((typeOf _x) isKindOf "House") && [_x] call BIS_fnc_isBuildingEnterable}; +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +private _objects = get3DENSelected "object"; private "_message"; - switch (count _objecct) do +diag_log format["getGarrisonInfo: _object = %1",format["%1",_object]]; + if (_objects isEqualTo []) then { - case 0: {_message = "No Enterable Buildings selected"}; - case 1: { - if (_object getVariable["garrisoned",false]) then - { - _message = format["Building %1 IS Garrisoned",typeOf _object]; + _message = "No Buildings Selected"; +} else { + if (count _objects == 1) then + { + if ((_objects select 0) getVariable["garrisoned",false]) then + { + _message = format["Building %1 IS Garrisoned",typeOf (_objects select 0)]; } else { - _message = format["Building %1 is NOT Garrisoned",typeOf _object]; + _message = format["Building %1 is NOT Garrisoned",typeOf (_objects select 0)]; }; - }; - default {_message = "Select a single building then try again"}; - }; - [_message,"Status"] call BIS_fnc_3DENShowMessage; + } else { + _message = format["Select a single building then try again"]; + }; +}; systemChat _message; - diag_log _message; \ No newline at end of file + diag_log _message; + [_message,"Status"] call BIS_fnc_3DENShowMessage; + diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getLootVehicleInfo.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getLootVehicleInfo.sqf index d096d5f..7a3bfc6 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getLootVehicleInfo.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_getLootVehicleInfo.sqf @@ -1,22 +1,31 @@ -private _objects = get3DENSelected "object" select {(typeOf _x) isKindOf "Car"}; +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +private _objects = get3DENSelected "object" select {(typeOf _x) isKindOf "Car" || (typeOf _x) isKindOf "Ship" || (typeOf _x) isKindOf "ThingX"}; private "_message"; -switch (count _objects) do -{ - case 0: {_message = "Select a vehicle and try again"}; - case 1: { + if (_objects isEqualTo []) then + { + _message = "No Cars/Ships/ThingX Selected"; +} else { + if (count _objects == 1) then + { if ((_objects select 0) getVariable["lootvehicle",false]) then { - _message = format["Vehicle %1 IS a loot vehicle",typeOf (_objects select 0)]; + _message = format["Vehicle %1 IS a Loot Vehicle",typeOf (_objects select 0)]; } else { - _message = format["Vehicle %1 is NOT a loot vehicle",typeOf (_objects select 0)]; + _message = format["Vehicle %1 is NOT a Loot Vehicle",typeOf (_objects select 0)]; }; + } else { + _message = format["% Vehicles Selected. Select a single vehicle then try again",count _objects]; }; - default {_message = "Select a single vehicle and try again"}; }; - -[_message,"Status"] call BIS_fnc_3DENShowMessage; - systemChat _message; diag_log _message; +[_message,"Status"] call BIS_fnc_3DENShowMessage; + + diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_initializeAttributes.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_initializeAttributes.sqf index 9bee0fb..f76c05f 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_initializeAttributes.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_initializeAttributes.sqf @@ -13,5 +13,7 @@ missionNamespace setVariable["blck_endState",getText(configFile >> "CfgBlck3DEN" missionNamespace setVariable["blck_startMessage","TODO: Add a start message"]; missionNamespace setVariable["blck_endMessage","TODO: Add an end message"]; missionNamespace setVariable["blck_missionLocations","random"]; +missionNameSpace setVariable["blck_displayGarrisonMarkerOn",false]; +missionNamespace setVariable["blck_displayLootMarkerOn",false]; diag_log format["Mission Attributes Initialized for blckeagls at time %1",diag_tickTime]; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_isInfantry.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_isInfantry.sqf index 72bf045..62fccec 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_isInfantry.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_isInfantry.sqf @@ -8,5 +8,4 @@ private _u = _this select 0; private _isInfantry = if ((_u isKindOf "Man") && (vehicle _u) isEqualTo _u) then {true} else {false}; - //diag_log format["_fn_isInfantry: _isInfantry = %1",_isInfantry]; _isInfantry \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onDrag.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onDrag.sqf new file mode 100644 index 0000000..0231da8 --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onDrag.sqf @@ -0,0 +1,13 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +params["_object"]; +if !(_object getVariable["marker",""] isEqualTo "") then +{ + private _marker = _object getVariable["marker",""]; + private _markerPos = getPosATL _object; + _marker setPosATL[_markerPos select 0, _markerPos select 1, (_markerPos select 2) + sizeOf _object]; +}; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onRegistered.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onRegistered.sqf new file mode 100644 index 0000000..855bed8 --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onRegistered.sqf @@ -0,0 +1,28 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ + +params["_object"]; + +switch (true) do +{ + case ((typeOf _object) isKindOf "ThingX" && blck_displayLootMarkerOn): { + if !(_object getVariable["lootVehicle",""] isEqualTo "") then + { + [_object] call blck3DEN_fnc_createLootMarker; + [_object] call blck3DEN_fnc_setEventHandlers; + }; + }; + case ((typeOf _object) isKindOf "House" && blck_displayGarrisonMarkerOn): { + if !(_object getVariable["garrisoned",""] isEqualTo "") then + { + [_object] call blck3DEN_fnc_createGarrisonMarker; + [_object] call blck3DEN_fnc_setEventHandlers; + }; + }; +}; + + diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onUnregister.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onUnregister.sqf new file mode 100644 index 0000000..2697b27 --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_onUnregister.sqf @@ -0,0 +1,14 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +params["_object"]; +if !(_object getvariable["marker",""] isEqualTo "") then +{ + [_object] call blck3DEN_fnc_removeMarker; + _object setVariable ["marker",nil]; + //_object setVariable ["lootVehicle",nil]; + //_object setVariable ["garrisoned",nil]; +}; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_removeMarker.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_removeMarker.sqf new file mode 100644 index 0000000..0d60cfb --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_removeMarker.sqf @@ -0,0 +1,18 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ + +params["_object"]; + +private _marker = _object getVariable["marker",""]; +if !(_marker isEqualTo "") then +{ + private _id = get3DENEntityID _marker; + delete3DENEntities [_id]; + _object setVariable["marker",nil]; +}; + +true \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setEventHandlers.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setEventHandlers.sqf new file mode 100644 index 0000000..e807bdb --- /dev/null +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setEventHandlers.sqf @@ -0,0 +1,14 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ +params["_object"]; + +_object removeAllEventHandlers "UnregisteredFromWorld3DEN"; +_object removeAllEventHandlers "RegisteredToWorld3DEN"; +_object removeAllEventHandlers "Dragged3DEN"; +_object addEventHandler ["Dragged3DEN",{_this call blck3DEN_fnc_onDrag;}]; +_object addEventHandler ["UnregisteredFromWorld3DEN",{_this call blck3DEN_fnc_onUnregister;}]; +_object addEventHandler ["RegisteredToWorld3DEN", {_this call blck3DEN_fnc_onRegistered;}]; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setGarrison.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setGarrison.sqf index 268fb11..926134a 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setGarrison.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setGarrison.sqf @@ -1,26 +1,47 @@ - +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ params["_state"]; +private _markersStateON = missionNamespace getVariable["blck_displayGarrisonMarkerOn",false]; +[false] call blck3DEN_fnc_displayGarrisonMarkers; private _objects = get3DENSelected "object" select {(typeOf _x) isKindOf "House"}; +private "_message"; if (_objects isEqualTo []) exitWith { - _m = "Select one or more buildings to configure"; - systemChat _m; + _message = "Select one or more buildings to configure"; + systemChat _message; + diag_log _message; + [_message,"Status"] call BIS_fnc_3DENShowMessage; }; { if ([_x] call BIS_fnc_isBuildingEnterable) then { _x setVariable["garrisoned",_state]; - _m = format["building of type %1 had garrison state set to %2",typeOf _x,_state]; - systemChat _m; - diag_log _m; + _message = format["building of type %1 had garrison state set to %2",typeOf _x,_state]; + systemChat _message; + diag_log _message; + if (blck_displayGarrisonMarkerOn) then + { + [_x] call blck3DEN_fnc_createGarrisonedMarker; + [_x] call blck3DEN_fnc_setEventHandlers; + }; } else { - _m = format["Object type %1 ignored: only enterable buildings can be garrisoned",typeOf _x]; - systemChat _x; - diag_log _x; + _message = format["Object type %1 ignored: only enterable buildings can be garrisoned",typeOf _x]; + systemChat _message; + diag_log _message; + [_message,"Status"] call BIS_fnc_3DENShowMessage; }; } forEach _objects; -_m = format["Garrison State of %1 buildings updated to %2",count _objects,_state]; -systemChat _m; \ No newline at end of file +_message = format["Garrison State of %1 buildings updated to %2",count _objects,_state]; +systemChat _message; +if (_markersStateON) then +{ + [true] call blck3DEN_fnc_displayGarrisonMarkers; +}; +[_message,"Status"] call BIS_fnc_3DENShowMessage; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setLootVehicle.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setLootVehicle.sqf index 27f574a..d624ad5 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setLootVehicle.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_setLootVehicle.sqf @@ -1,22 +1,49 @@ +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + + sets a flag stored through setVariable for each selected object that meets the filter criteria + only objects of type "Car"or "ThingX" are allowed. +*/ + params["_state"]; -private _objects = get3DENSelected "object" select {(typeOf _x) isKindOf "Car"}; +private _markerStateON = missionNameSpace getVariable["blck_displayLootMarkerOn",false]; +[false] call blck3DEN_fnc_displayLootMarkers; +private "_message"; +private _objects = get3DENSelected "object" select {(typeOf _x) isKindOf "Car" || (typeOf _x) isKindOf "Ship"}; // if (_objects isEqualTo []) exitWith { - _m = "Select one or more vehicles to configure"; - systemChat _m; + _message = "Select one or more vehicles or items of type ThingX to configure"; + systemChat _message; }; { - if ((typeOf _x) isKindOf "Car") then + if ((typeOf _x) isKindOf "Car" || (typeOf _x) isKindOf "Ship") then { _x setVariable["lootvehicle",_state]; - _m = format["Vehicle type %1 set to Loot Vehilce = %1",typeOf _x,_state]; - systemChat _m; - diag_log _m; + if (blck_displayLootMarkerOn && _state) then + { + [_x] call blck3DEN_fnc_createLootMarker; + [_x] call blck3DEN_fnc_setEventHandlers; + } else { + if !(_state) then + { + [_x] call blck3DEN_fnc_removeLootMarker; + }; + }; + _message = format["Vehicle type %1 set to Loot Vehicle = %1",typeOf _x,_state]; + systemChat _message; + diag_log _message; } else { - _m = format["Object with type %1 ignored:: only objects of type Car can be used as loot vehicles",typeOf _x]; - diag_log _m; - systemChat _m; + _message = format["Object with type %1 ignored:: only objects of type Car can be used as loot vehicles",typeOf _x]; + diag_log _message; + systemChat _message; }; } forEach _objects; -_m = format["Loot Vehicle State of %1 vehicles updated to %2",count _objects,_state]; + +if (_markerStateON) then +{ + [true] call blck3DEN_fnc_displayLootMarkers; +}; +_message = format["Loot Vehicle State of %1 objects updated to %2",count _objects,_state]; systemChat _m; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_updateObjects.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_updateObjects.sqf index dbdf17a..033239d 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_updateObjects.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Core/fn_updateObjects.sqf @@ -1,4 +1,9 @@ - +/* + blckeagls 3EDEN Editor Plugin + by Ghostrider-GRG- + Copyright 2020 + +*/ private _objects = get3DENSelected "object"; private _markers select {(typeOf _x) = _markerType}; { diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/Untitled-1.txt b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/Untitled-1.txt index d1d19da..6b9c321 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/Untitled-1.txt +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/Untitled-1.txt @@ -1,51 +1,148 @@ -class CfgVehicles -{ - class Object - { - class AttributeCategories - { - class LandVehicle; - class blckLandVehicle: LandVehicle; - { - class Attributes - { - class blckLootVehicle - { - // https://community.bistudio.com/wiki/Eden_Editor:_Configuring_Attributes#Scenario - displayName = "Loot Vehicle"; - toolTip = "Enable/Disable Use as Loot Vehicle"; - property = "blckLootVehicle"; - control = "Edit"; - expression = "_this setVariable['%s',_value];"; - defaultValue = 'false'; - unique = 0; - validate = "BOOL"; - typeName = "BOOL"; - }; - }; - }; - class Static; - class blckHouse: Static - { - class Attributes - { - class blckGarison - { - // https://community.bistudio.com/wiki/Eden_Editor:_Configuring_Attributes#Scenario - displayName = "Garison Building"; - toolTip = "Enable/Disable ?Garisoned Building"; - property = "blckGarison"; - control = "Edit"; - expression = "_this setVariable['%s',_value];"; - defaultValue = 'false'; - unique = 0; - validate = "BOOL"; - typeName = "BOOL"; - }; - }; - }; - }; - }; -}; \ No newline at end of file +/* + Dynamic Mission Generated + Using 3DEN Plugin for blckeagls + dynamicMission.sqf generated:: blckeagls 3DEN Plugin Version 0 : Build 5 : Build Date 09/19/20 + By Ghostrider-GRG- +*/ + +#include "\q\addons\custom_server\Configs\blck_defines.hpp"; +#include "\q\addons\custom_server\Missions\privateVars.sqf"; + +_defaultMissionLocations = []; +_markerType = ["ELLIPSE",[250,250],"SOLID"]; +_markerColor = "COLORRED"; +_startMsg = "TODO: Change approiately"; +_endMsg = "TODO: Change Appropriately"; +_markerMissionName = "TODO: Update appropriately"; +_crateLoot = blck_BoxLoot_Blue; +_lootCounts = blck_lootCountsBlue; + +_garrisonedBuildings_BuildingPosnSystem = [ + +]; + +_garrisonedBuilding_ATLsystem = [ + ["Land_Cargo_Patrol_V3_F",[0,0,0],45,true,true,[["O_GMG_01_high_F",[0.533447,-1.45142,4.34404],229.902]],[]], + ["Land_Cargo_Patrol_V3_F",[0,0,0],90,true,true,[["O_GMG_01_high_F",[-0.669434,-1.43628,4.34404],272.772]],[]], + ["Land_Cargo_HQ_V3_F",[0,0,0],269.183,true,true,[["O_Mortar_01_F",[4.13428,-1.79297,3.12652],0]],[[[-1.19116,2.72095,3.12796],0]]], + ["Land_Cargo_Patrol_V3_F",[0,0,0],179.749,true,true,[["O_GMG_01_high_F",[-1.22046,0.542969,4.34404],0]],[]] +]; + +_missionLandscape = [ + ["Land_HBarrier_Big_F",[-1.98413,-1.92993,-4.76837e-007],45,true,true], + ["Land_HBarrier_Big_F",[3.98779,-7.51294,-4.76837e-007],45,true,true], + ["Land_HBarrier_Big_F",[-7.52954,12.9387,-4.76837e-007],270,true,true], + ["Land_HBarrier_Big_F",[-7.65234,21.4033,-4.76837e-007],90,true,true], + ["Land_HBarrier_5_F",[24.321,15.1624,-4.76837e-007],270,true,true], + ["Land_HBarrier_Big_F",[25.2722,-3.87012,-4.76837e-007],328.551,true,true], + ["Land_HBarrier_Big_F",[20.9385,18.7275,-4.76837e-007],180,true,true], + ["Land_HBarrier_Big_F",[18.2209,-8.25903,-4.76837e-007],330,true,true], + ["Land_HBarrier_Big_F",[10.5823,-10.2063,-4.76837e-007],0,true,true], + ["Land_HBarrier_Big_F",[34.0476,6.36035,-4.76837e-007],299.181,true,true], + ["Land_Cargo_House_V3_F",[11.125,-4.1167,-4.76837e-007],180,true,true], + ["Land_Cargo_House_V3_F",[33.6809,29.3313,-4.76837e-007],90.6682,true,true], + ["Land_HBarrier_Big_F",[17.3999,23.9451,-4.76837e-007],90,true,true], + ["Land_HBarrier_Big_F",[3.64941,26.885,-4.76837e-007],0,true,true], + ["Land_HBarrier_Big_F",[29.6377,37.4236,-4.76837e-007],225,true,true], + ["Land_HBarrier_Big_F",[12.1257,27.1333,-4.76837e-007],1.36604e-005,true,true], + ["Land_HBarrier_Big_F",[36.0908,34.8279,-4.76837e-007],0,true,true], + ["Land_HBarrier_Big_F",[22.8857,39.9236,-4.76837e-007],180,true,true], + ["Land_HBarrier_Big_F",[37.969,13.8748,-4.76837e-007],299.181,true,true], + ["Land_HBarrier_Big_F",[39.5908,21.3279,-4.76837e-007],270,true,true], + ["Land_HBarrier_Big_F",[39.4658,29.7029,-4.76837e-007],90,true,true], + ["Land_HBarrier_Big_F",[-4.69336,26.6685,-4.76837e-007],0,true,true], + ["Land_HBarrier_Big_F",[14.4446,39.6458,-4.76837e-007],180,true,true], + ["Land_HBarrier_5_F",[16.6345,47.3489,-4.76837e-007],180.149,true,true], + ["Land_HBarrier_5_F",[11.1445,47.3962,-4.76837e-007],180.149,true,true], + ["Land_HBarrier_5_F",[18.7251,43.8938,-4.76837e-007],269.822,true,true], + ["Land_HBarrier_5_F",[7.49487,45.4861,-4.76837e-007],124.084,true,true], + ["Land_Cargo_House_V3_F",[33.5195,22.5332,-4.76837e-007],90.6682,true,true], + ["Land_HBarrier_Big_F",[-6.20093,4.80859,-4.76837e-007],75.8618,true,true], + ["RoadCone_L_F",[9.69141,6.51465,-4.76837e-007],0,true,true], + ["Land_Cargo40_military_green_F",[-3.2334,35.5225,-4.76837e-007],45.5098,true,true], + ["Land_Cargo20_grey_F",[-7.22656,32.293,-4.76837e-007],44.3033,true,true], + ["Land_Cargo20_grey_F",[-13.3616,30.4897,-4.76837e-007],0,true,true], + ["Land_Cargo20_grey_F",[26.2278,-12.2869,-4.76837e-007],6.20739,true,true], + ["Land_Cargo20_grey_F",[39.1899,4.03271,-4.76837e-007],272.936,true,true], + ["Land_Canteen_F",[36.6631,46.6692,-4.76837e-007],0,true,true], + ["Land_PaperBox_01_open_boxes_F",[30.7021,49.6111,-4.76837e-007],0,true,true] +]; + +_simpleObjects = [ + +]; + +_missionLootVehicles = [ + +]; + +_missionPatrolVehicles = [ + ["O_LSV_02_armed_F",[24.1306,-41.168,0],87.1292,75,75], + ["O_LSV_02_armed_F",[12.8894,74.8223,-4.76837e-007],87.7224,75,75] +]; + +_submarinePatrolParameters = [ + +]; + +_airPatrols = [ + +]; + +_missionEmplacedWeapons = [ + ["O_HMG_01_high_F",[9.55957,44.0073,-4.76837e-007],0], + ["O_HMG_01_high_F",[21.7991,15.363,-4.76837e-007],0] +]; + +_missionGroups = [ + [[16.9512,1.75757,0.00143862],3,6,"Blue",30,45], + [[8.01904,18.9385,3.12796],3,6,"Blue",30,45], + [[23.6782,30.5142,0.00143862],3,6,"Blue",30,45], + [[30.0935,9.90186,0.00143862],3,6,"Blue",30,45], + [[-0.340576,10.3516,0.00143862],3,6,"Blue",30,45] +]; + +_scubaGroupParameters = [ + +]; + +_missionLootBoxes = [ + ["Land_Pallet_MilBoxes_F",[-3.88013,11.6785,-4.76837e-007],_crateLoot,_lootCounts,0] +]; + +/* + Use the parameters below to customize your mission - see the template or blck_configs.sqf for details about each them +*/ +_chanceHeliPatrol = blck_chanceHeliPatrolBlue; +_noChoppers = blck_noPatrolHelisBlue; +_missionHelis = blck_patrolHelisBlue; +_chancePara = blck_chanceParaBlue; +_noPara = blck_noParaBlue; +_paraTriggerDistance = 400; +_paraSkill = 'Blue'; +_chanceLoot = 0.0; +_paraLoot = blck_BoxLoot_Blue; +_paraLootCounts = blck_lootCountsBlue; +_missionLandscapeMode = "precise"; +_uniforms = blck_SkinList; +_headgear = blck_headgear; +_vests = blck_vests; +_backpacks = blck_backpacks; +_sideArms = blck_Pistols; +_spawnCratesTiming = "atMissionSpawnGround"; +_loadCratesTiming = "atMissionSpawn"; +_endCondition = "allKilledOrPlayerNear"; +_minNoAI = blck_MinAI_Blue; +_maxNoAI = blck_MaxAI_Blue; +_noAIGroups = blck_AIGrps_Blue; +_noVehiclePatrols = blck_SpawnVeh_Blue; +_noEmplacedWeapons = blck_SpawnEmplaced_Blue; +_minNoAI = blck_MinAI_Blue; +_maxNoAI = blck_MaxAI_Blue; +_noAIGroups = blck_AIGrps_Blue; +_noVehiclePatrols = blck_SpawnVeh_Blue; +_noEmplacedWeapons = blck_SpawnEmplaced_Blue; + +#include "\q\addons\custom_server\Compiles\Missions\GMS_fnc_missionSpawner.sqf"; \ No newline at end of file diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf index 806d835..56d1a5b 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportDynamic.sqf @@ -23,26 +23,6 @@ lootVehicleVariableName = getText(configFile >> "CfgBlck3DEN" >> "configs" >> " buildingPosGarrisonVariableName = getText(configFile >> "CfgBlck3DEN" >> "configs" >> "buildingPosGarrisonVariableName"); buildingATLGarrisionVariableName = getText(configFile >> "CfgBlck3DEN" >> "configs" >> "buildingATLGarrisionVariableName"); -/* -{ - diag_log format["param %1 = %2",_forEachIndex,_x]; -} forEach [ - objectAtMissionCenter, - blck_minAI, - blck_maxAI, - minPatrolRadius, - maxPatrolRadius, - maxVehiclePatrolRadius, - aircraftPatrolRadius, - oddsOfGarison, - maxGarrisonStatics, - typesGarrisonStatics, - blck_MissionDifficulty, - lootVehicleVariableName, - buildingPosGarrisonVariableName, - buildingATLGarrisionVariableName -];*/ - CENTER = [0,0,0]; diag_log format["Dynamic Export called at %1",diag_tickTime]; @@ -115,11 +95,11 @@ if !(_markers isEqualTo []) then { _m1 = _markers select 0; _markerType = (_m1 get3DENAttribute "itemClass") select 0; - _markerShape = (_m1 get3DENAttribute "markerType") select 0; + //_markerShape = (_m1 get3DENAttribute "markerType") select 0; _markerColor = (_m1 get3DENAttribute "baseColor") select 0; _markerText = (_m1 get3DENAttribute "text") select 0; if !(_markerText isEqualTo "") then {blck_dynamicmarkerMissionName = _markerText}; - _markerBrush = (_m1 get3DENAttribute "markerBrush") select 0; + _markerBrush = (_m1 get3DENAttribute "brush") select 0; _markerPos = (_m1 get3DENAttribute "position") select 0; _markerSize = (_m1 get3DENAttribute "size2") select 0; _markerText = (_m1 get3DENAttribute "text") select 0; @@ -136,11 +116,11 @@ if !(_markers isEqualTo []) then diag_log format[" More than one marker was found; only the first marker was processed"]; }; } else { - _markerType = "mil_square"; - _markerShape = "null"; - _markerSize = "[0,0]"; + _markerType = "ELLIPSE"; + //_markerShape = "ELLIPSE"; + _markerSize = "[250,250]"; _markerColor = "COLORRED"; - _markerBrush = "null"; + _markerBrush = "SOLID"; if !(_objects isEqualTo []) then { CENTER = getPosATL (_objects select 0); @@ -149,7 +129,6 @@ if !(_markers isEqualTo []) then }; diag_log format[" No marker was found, using default values and position for mission center position"]; }; -diag_log format["_m1 = %1 | _type = %2 | _shape = %3 | _size = %4 | _color = %5 | _brush = %6 | _text = %7",_m1,_markerType,_markerShape,_markerSize,_markerColor,_markerBrush,_markerText]; if (CENTER isEqualTo [0,0,0]) then { @@ -163,49 +142,56 @@ private _garisonedUnits = []; private _landscape = _objects select{ !(isSimpleObject _x) && - ((typeOf _x) isKindOf "Static") + ((typeOf _x) isKindOf "Static" || ( (typeOf _x) isKindOf "ThingX")) && + !((typeOf _x) isKindOf "ReammoBox_F") && + !(_x getVariable["isLootContainer",false]) && + !((typeOf _x) isKindOf "Helper_Base_F") }; -private _garisonedPos = []; -private _helpers = _objects select {((typeOf _x) isEqualTo garisonMarkerObject)}; -diag_log format["garisonMarkerObject = %1 | _helpers = %2",garisonMarkerObject,_helpers]; -{ - if ([_x] call blck3DEN_fnc_isInside) then - { - _building = [_x] call blck3DEN_fnc_buildingContainer; - _garisonedBuildings pushbackunique _building; - // data structure ["building Classname",[/*building pos*/],/*building dir*/,/*odds of garrison*/, /*Max Statics*/,/*types statics*/,/*max units*/], - // 1 2 3 4 5 6 7 8 9 - _garisonedPos pushBack format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building, 'true','true',oddsOfGarrison,maxGarrisonStatics,typesGarrisonStatics,maxGarrisonUnits]; - }; -} forEach _helpers; -//diag_log format["CENTER = %1 | _landscape = %2",CENTER,_landscape]; -private _garrisonATL = []; -{ - _atl = [_x,CENTER] call blck3DEN_fnc_configureGarrisonATL; - // format["_fnc_exportDynamic: _building = %1 | _atl = %2",_x,_atl]; - //diag_log format["_fnc_exportDynamic: typeName _atl = %1",typeName _atl]; - if (typeName _atl isEqualTo "STRING") then {diag_log format["_fnc_exportDynamic: length _atl = %1 | _atl = '' is %2",count _atl, _atl isEqualTo ""]}; - if !(_atl isEqualTo []) then { - if !((_atl select 0) isEqualTo []) then - { - _garrisonATL pushBack (_atl select 0); - _garisonedBuildings pushBack _x; - _garisonedStatics append (_atl select 1); - _garisonedUnits append (_atl select 2) - //diag_log format["_fnc_exportDynamic: garrisoned building added: %1",_atl]; - }; +private _garisonedPos = []; + +diag_log format["_exportDynamic (174): count _landscape = %1",count _landscape]; +for "_i" from 1 to (count _landscape) do +{ + if (isNull _building) exitWith {}; + private _building = _landscape deleteAt 0; + diag_log format ["_garrisonedPos: evaluating _building %1 | ;garrisoned = %2'",_building,_building getVariable["garrisoned",false]]; + if (_building getVariable["garrisoned",false]) then + { + _garisonedPos pushBack format[' ["%1",%2,%3,%4,%5,%6,%7,%8,%9]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building, 'true','true',oddsOfGarrison,maxGarrisonStatics,typesGarrisonStatics,maxGarrisonUnits]; + } else { + _landscape pushBack _building; }; -} forEach _landscape; +}; + +private _garrisonATL = []; +for "_i" from 1 to (count _landscape) do +{ + if (isNull _building) exitWith {}; + private _building = _landscape deleteAt 0; + _atl = [_building,CENTER] call blck3DEN_fnc_configureGarrisonATL; + if (_atl isEqualTo []) then { + _landscape pushBack _building; + } else { + _garrisonATL pushBack (format[" %1",_atl select 0]); + _garisonedBuildings pushBack _building; + _garisonedStatics append (_atl select 1); + _garisonedUnits append (_atl select 2); + }; +}; diag_log format["_garrisonATL = %1",_garrisonATL]; private _missionLandscape = []; +for "_i" from 1 to (count _landscape) do { - if !(_x in _garisonedBuildings) then + private _building = _landscape deleteAt 0; + if (isNull _building) exitWith {}; + diag_log format["typeOf _x = %1 | _x isMarker = %2",typeOf _building,_building getVariable["marker",false]]; + if !(_building getVariable["marker",false]) then { - _missionLandscape pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _x,(getPosATL _x) vectorDiff CENTER,getDir _x, 'true','true']; + _missionLandscape pushBack format[' ["%1",%2,%3,%4,%5]',typeOf _building,(getPosATL _building) vectorDiff CENTER,getDir _building, 'true','true']; }; -}forEach _landscape; +}; private _simpleObjects = _objects select {isSimpleObject _x}; diag_log format["_simpleObjects = %1",_simpleObjects]; @@ -218,7 +204,7 @@ private _missionLootVehicles = []; private _lootVehicles = _objects select { ((typeOf _x) isKindOf "AllVehicles") && !((typeOf _x) isKindOf "Man") && - (_x get3DENAttribute "name" isEqualTo lootVehicleVariableName) + (_x getVariable["lootvehicle",false]) }; diag_log format["_lootVehicles = %1",_lootVehicles]; { @@ -229,7 +215,7 @@ _missionPatrolVehicles = []; private _patrolVehicles = _objects select { (((typeOf _x) isKindOf "Car") || ((typeOf _x) isKindOf "Tank") || ((typeOf _x) isKindOf "Ship")) && !((typeOf _x) isKindOf "SDV_01_base_F") && - !(_x in _lootVehicles) + !(_x getVariable["lootvehicle",false]) }; diag_log format["_patrolVehicles = %1",_patrolVehicles]; { @@ -289,7 +275,7 @@ private _scubaGroups = []; } forEach _scuba; private _lootContainers = []; -private _ammoBoxes = _objects select { +private _ammoBoxes = _objects select { // "ReammoBox_F" (((typeOf _x) isKindOf "ReammoBox") || ((typeOf _x) isKindOf "ReammoBox_F")) }; diag_log format["_ammoBoxes = %1",_ammoboxes]; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf index ca3dab0..84e9d94 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/Export/fn_exportStatic.sqf @@ -89,11 +89,11 @@ if !(_markers isEqualTo []) then { _m1 = _markers select 0; _markerType = (_m1 get3DENAttribute "itemClass") select 0; - _markerShape = (_m1 get3DENAttribute "markerType") select 0; + //_markerShape = (_m1 get3DENAttribute "markerType") select 0; _markerColor = (_m1 get3DENAttribute "baseColor") select 0; _markerText = (_m1 get3DENAttribute "text") select 0; if !(_markerText isEqualTo "") then {blck_dynamicmarkerMissionName = _markerText}; - _markerBrush = (_m1 get3DENAttribute "markerBrush") select 0; + _markerBrush = (_m1 get3DENAttribute "brush") select 0; _markerPos = (_m1 get3DENAttribute "position") select 0; _markerSize = (_m1 get3DENAttribute "size2") select 0; _markerText = (_m1 get3DENAttribute "text") select 0; @@ -103,7 +103,7 @@ if !(_markers isEqualTo []) then */ } else { _markerType = "mil_square"; - _markerShape = ""; + //_markerShape = ""; _markerSize = [0,0]; _markerColor = "COLORRED"; _markerBrush = ""; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp b/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp index 5c8ba4a..9c2ece5 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/config.cpp @@ -52,8 +52,8 @@ class CfgBlck3DEN class CfgVersion { version = 1.0; - build = 3; - date = "08/23/20"; + build = 5; + date = "09/19/20"; }; }; diff --git a/@blckeagls_EDEN/addons/3EDEN_plugin/defines.h b/@blckeagls_EDEN/addons/3EDEN_plugin/defines.h index 034f2a8..7b08db5 100644 --- a/@blckeagls_EDEN/addons/3EDEN_plugin/defines.h +++ b/@blckeagls_EDEN/addons/3EDEN_plugin/defines.h @@ -44,27 +44,32 @@ class CfgFunctions class Core { file = "3EDEN_plugin\Core"; - class help {}; + class about {}; + class buildingContainer {}; + class configureGarrisonATL {}; + class createLootMarker {}; + class createGarrisonMarker {}; + class display {}; + class displayGarrisonMarkers {}; + class displayLootMarkers {}; class getGarrisonInfo {}; class getLootVehicleInfo {}; - class getMissionGarrisonInfo {}; - class getMissionLootVehicleInfo {}; + class help {}; class initializeAttributes {}; class isInfantry {}; class isInside {}; - class buildingContainer {}; - class display {}; + class loadCratesTiming {}; + class onDrag {}; + class onRegistered {}; + class onUnregister {}; + class removeMarker {}; class setDifficulty {}; class setCompletionMode {} class setGarrison {}; class setLootVehicle {}; class setSpawnLocations {}; class spawnCratesTiming {}; - class loadCratesTiming {}; - class endMessage {}; - class startMessage {}; - class configureGarrisonATL {}; class versionInfo {}; }; }; @@ -85,7 +90,7 @@ class cfg3DEN { OnMissionLoad = "call blck3DEN_fnc_initializeAttributes"; OnMissionNew = "call blck3DEN_fnc_initializeAttributes"; - onHistoryChange = "call blck3DEN_fnc_updateObjects"; + //onHistoryChange = "call blck3DEN_fnc_updateObjects"; }; }; @@ -110,24 +115,6 @@ class cfg3DEN }; }; - class blck_garison: Combo - { - class Value - { - text = "Set Garison State"; - items[] = {"No_Garison","Has_garison"}; - }; - class no_garison - { - text = "No Garison"; - //action = "_this setVariable['garison',0];"; - }; - class has_garison - { - text = "Has Garison"; - //action = "_this setVariable['garison',1];"; - }; - }; }; @@ -148,24 +135,7 @@ class cfg3DEN class CfgVehicles { - class House; - class blck_House: House - { - class Attributes - { - class blck_garisoned - { - displayName = "Garrison"; - toolTip = "Define Garrisoned Buildings"; - control = "blck_garison"; - - expression = "_this setVariable ['garrisoned',_value];"; - defaultValue = false; - unique = 0; - }; - }; - }; }; class ctrlMenuStrip; @@ -175,67 +145,6 @@ class display3DEN { class Controls { - /* - class ContextMenu: ctrlMenu - { - class Items - { - items[] += { - "blck_markLootVehicle", - "blck_markGarisonBuildingPos" - }; - class blck_markLootVehicle - { - text = "Designate Loot Vehicles"; - value = false; - //action = "systemChat 'value toggled'"; - conditionShow = "selectedObject"; - items[] = { - "blck_clearLootVehicle", - "blck_designateLootVehicle" - }; - }; - class blck_clearLootVehicle - { - text = "Clear Loot Vehicle Settings"; - value = false; - action = "[false] call blck3DEN_fnc_setLootVehicleStatus"; - }; - class blck_deisgnateLootVehicle - { - text = "Desinate Loot Vehicle"; - value = true; - action = "[true] call blck3DEN_fnc_setLootVehicleStatus"; - }; - - class blck_markGarisonBuildingPos - { - text = "Designate Garisoned Buildings"; - value = false; - conditionShow = "selectedObject"; - items[] = { - "blck_clearGarisonSettings", - "blck_designateGarisonedBuilding" - }; - }; - class blck_clearGarisonSettings - { - text = "Clear Garison Settings"; - value = false; - conditionShow = "selectedObject"; - action = "[false] call blck3DEN_fnc_setGarison"; - }; - class blck_designateGarisonedBuilding - { - text = "Set as Garisoned Building"; - value = true; - conditionShow = "SelectedObject"; - action = "[true] call blck3DEN_fnc_setGarison"; - }; - - }; - }; - */ class MenuStrip: ctrlMenuStrip { @@ -258,12 +167,12 @@ class display3DEN "blckMissionLocation", "blckSeparator", "blck_setGarrison", - "blck_getGarrisonInfo", - "blck_getMissionGarrisonInfo", + //"blck_getGarrisonInfo", + //"blck_getMissionGarrisonInfo", "blckSeparator", "blck_markLootVehicle", - "blck_getLootVehicleInfo", - "blck_getMissionLootVehicleInfo", + //"blck_getLootVehicleInfo", + //"blck_getMissionLootVehicleInfo", "blckSeparator", "blckSaveStaticMission", "blckSaveDynamicMission", @@ -420,35 +329,6 @@ class display3DEN action = "['atMissionCompletion'] call blck3DEN_fnc_loadCratesTiming"; }; - /* - ///////////////////////////// - class blckMissionMessages - { - text = "Set timing for loading crates"; - items[] = { - "blckStartMessage", - "blckEndMessage" - }; - }; - // ["Title","Default","ctrlControlsGroupNoScrollbars","ctrlControlsGroup","ctrlDefault"] - class Edit; - class blckEdit: Edit - { - control = "Edit"; - value = ""; - }; - class blckStartMessage: blckEdit - { - text = "Misstion Start Message"; - action = "[_value] call blck3DEN_startMessage"; - }; - class blckEndMessage: blckEdit - { - text = "Mission End Message"; - action = "[_value] call blck3DEN_endMessage"; - }; - */ - class blckMissionLocation { text = "Toggle Random or Fixed Location"; @@ -470,16 +350,26 @@ class display3DEN action = "['fixed'] call blck3DEN_fnc_setSpawnLocations"; }; + /////////////////////////////////////////////////////// + class blck_setGarrison { - text = "Set as Garrisoned Building"; + text = "Garrisoned Building Settings"; toolTip = "Set garrison status of selected buildings"; items[] = { - "blck_isGarrisoned", - "blck_clearGarrisoned", - "blck_getGarrisonInfo" + "blck_setGarrisonedState", + "blck_getGarrisonInfo", + "blck_garrisonMarkers" }; }; + class blck_setGarrisonedState + { + items[] = { + "blck_isGarrisoned", + "blck_clearGarrisoned" + }; + text = "Garrison Settings"; + }; class blck_isGarrisoned { text = "Garrison Building"; @@ -498,46 +388,79 @@ class display3DEN { text = "Get Building Garrisoned Setting"; toolTip = "Get the selected buildings garrisoned flag"; - value = 0; action = "call blck3DEN_fnc_getGarrisonInfo"; }; - class getMissionGarrisonInfo + class blck_garrisonMarkers { - text = "Get garrison flag for selected buildings"; - toolTip = "The garrisoned flag state will be displayed for selected bulidings"; - value = 0; - action = "call blck3DEN_fnc_getMissionGarrisonInfo"; + items[] = { + "blck_GarrisonMarkersOn", + "blck_GarrisonMarkersOff" + }; + text = "Toggle markers over garrisoned buildings"; }; + class blck_GarrisonMarkersOn + { + text = "Display Markers over Garrisoned Buildings"; + action = "[true] call blck3DEN_fnc_displayGarrisonMarkers"; + }; + class blck_GarrisonMarkersOff + { + text = "Hide Markers over Garrisoned Buildings"; + action = "[false] call blck3DEN_fnc_displayGarrisonMarkers"; + }; + + /////////////////////////////////////////////////////////////// class blck_markLootVehicle { - text = "Designate Loot Vehicles"; - value = false; - //action = "systemChat 'value toggled'"; - conditionShow = "selectedObject"; + text = "Loot Vehicle Settings"; items[] = { - "blck_clearLootVehicle", - "blck_designateLootVehicle" + "blck_designateLootVehicleState", + "blck_getLootVehicleInfo", + "blck_displayLootMarkers" }; }; - class blck_clearLootVehicle + class blck_designateLootVehicleState + { + items[] = { + "blck_setAsLootVehicle", + "blck_clearLootVehicleFlag" + }; + text = "Loot Vehicle Settings"; + }; + class blck_clearLootVehicleFlag { text = "Clear Loot Vehicle Settings"; - value = false; action = "[false] call blck3DEN_fnc_setLootVehicle"; }; - class blck_designateLootVehicle + class blck_setAsLootVehicle { text = "Desinate Loot Vehicle"; - value = true; action = "[true] call blck3DEN_fnc_setLootVehicle"; }; class blck_getLootVehicleInfo { text = "Get setting for selected vehicle"; - value = 0; action = "call blck3DEN_fnc_getLootVehicleInfo"; - }; + }; + class blck_displayLootMarkers + { + items[] = { + "blck_lootMarkersOn", + "blck_lootMarkersOff" + }; + text = "Toggle Loot Vehicle Markers"; + }; + class blck_lootMarkersOn + { + text = "Mark Loot Vehicles / Objects"; + action = "[true] call blck3DEN_fnc_displayLootMarkers"; + }; + class blck_lootMarkersOff + { + text = "Hide Markers of Loot Vehicles / Objects"; + action = "[false] call blck3DEN_fnc_displayLootMarkers"; + }; ///////////////////////////// class blckSaveStaticMission {