From 4e03667320930cc1c5b1a8c0f674543e88384d00 Mon Sep 17 00:00:00 2001 From: Ben Price Date: Mon, 22 Apr 2024 16:49:24 +0100 Subject: [PATCH] Design Doc || Bug Fix --- Achievements(package)/Assets/Scripts.meta | 8 +++ .../Assets/Scripts/EventManager.cs | 63 ++++++++++++++++++ .../Assets/Scripts/EventManager.cs.meta | 11 +++ .../Assets/Scripts/GameEvent.cs | 12 ++++ .../Assets/Scripts/GameEvent.cs.meta | 11 +++ .../Runtime/Achievements.cs | 33 ++------- Achievements(package)/Packages/manifest.json | 1 + .../Packages/packages-lock.json | 7 ++ Design Doc.docx | Bin 0 -> 14931 bytes 9 files changed, 119 insertions(+), 27 deletions(-) create mode 100644 Achievements(package)/Assets/Scripts.meta create mode 100644 Achievements(package)/Assets/Scripts/EventManager.cs create mode 100644 Achievements(package)/Assets/Scripts/EventManager.cs.meta create mode 100644 Achievements(package)/Assets/Scripts/GameEvent.cs create mode 100644 Achievements(package)/Assets/Scripts/GameEvent.cs.meta create mode 100644 Design Doc.docx diff --git a/Achievements(package)/Assets/Scripts.meta b/Achievements(package)/Assets/Scripts.meta new file mode 100644 index 0000000..4ea9f0c --- /dev/null +++ b/Achievements(package)/Assets/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c30147bfe81807a4f99ead517f0bb3f6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Achievements(package)/Assets/Scripts/EventManager.cs b/Achievements(package)/Assets/Scripts/EventManager.cs new file mode 100644 index 0000000..f6e7ff3 --- /dev/null +++ b/Achievements(package)/Assets/Scripts/EventManager.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class EventManager : MonoBehaviour +{ + private Dictionary> eventDictionary = new Dictionary>(); + + public static EventManager _instance; + + public static EventManager Instance + { + get + { + if (_instance == null) + { + // Check if an existing GameManager is present in the scene + _instance = FindObjectOfType(); + + if (_instance == null) + { + // No existing GameManager found, so create a new GameObject and add this script + GameObject em = new GameObject("EventManager"); + _instance = em.AddComponent(); + + // Optionally, make this object persistent + DontDestroyOnLoad(em); + } + } + return _instance; + } + } + + public void Subscribe(string eventType, Action listener) + { + if (!eventDictionary.ContainsKey(eventType)) + { + eventDictionary.Add(eventType, listener); + } + else + { + eventDictionary[eventType] += listener; + } + } + + public void Unsubscribe(string eventType, Action listener) + { + if (eventDictionary.ContainsKey(eventType)) + { + eventDictionary[eventType] -= listener; + } + } + + public void RaiseEvent(string eventType, int param) + { + if (eventDictionary.ContainsKey(eventType)) + { + eventDictionary[eventType]?.Invoke(param); + } + } +} + diff --git a/Achievements(package)/Assets/Scripts/EventManager.cs.meta b/Achievements(package)/Assets/Scripts/EventManager.cs.meta new file mode 100644 index 0000000..c8a79e3 --- /dev/null +++ b/Achievements(package)/Assets/Scripts/EventManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f64ca1638a952f645af88a076be64790 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Achievements(package)/Assets/Scripts/GameEvent.cs b/Achievements(package)/Assets/Scripts/GameEvent.cs new file mode 100644 index 0000000..c200e9d --- /dev/null +++ b/Achievements(package)/Assets/Scripts/GameEvent.cs @@ -0,0 +1,12 @@ +public static class GameEvent +{ + public static string QuestionTimerElapsed = "QuestionTimerElapsed"; + public static string GameOverTrigger = "GameOver"; + public static string MoveToSeptember = "MoveToSeptember"; + public static string MoveToStart = "MoveToStart"; + public static string SwitchPositionWithOnePlayer = "SwitchPositionWithOnePlayer"; + public static string PickTwoPlayerToSwitchPosition = "PickTwoPlayerToSwitchPosition"; + public static string PickOnePlayerToMissTurn = "PickOnePlayerToMissTurn"; + public static string PickPlayersToMonth = "PickPlayersToMonth"; + public static string QuestionCorrect = "QuestionCorrect"; +} \ No newline at end of file diff --git a/Achievements(package)/Assets/Scripts/GameEvent.cs.meta b/Achievements(package)/Assets/Scripts/GameEvent.cs.meta new file mode 100644 index 0000000..484d30c --- /dev/null +++ b/Achievements(package)/Assets/Scripts/GameEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f6546f5c5e28304e96edb39705a9dca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Achievements(package)/Packages/ie.setu.achievements/Runtime/Achievements.cs b/Achievements(package)/Packages/ie.setu.achievements/Runtime/Achievements.cs index 166e949..cb15e51 100644 --- a/Achievements(package)/Packages/ie.setu.achievements/Runtime/Achievements.cs +++ b/Achievements(package)/Packages/ie.setu.achievements/Runtime/Achievements.cs @@ -9,18 +9,20 @@ public class Achievements : MonoBehaviour public static Achievements _instance; + private int QuestionCorrectByCurrentPlayer = 0; + public static Achievements Instance { get { if (_instance == null) { - // Check if an existing GameManager is present in the scene + // Check if an existing achievemnts is present in the scene _instance = FindObjectOfType(); if (_instance == null) { - // No existing GameManager found, so create a new GameObject and add this script + // No existing achievemnts found, so create a new achievemnts and add this script GameObject a = new GameObject("Achievemnts"); _instance = a.AddComponent(); @@ -32,32 +34,9 @@ public static Achievements Instance } } - public void Subscribe(string eventType, Action listener) - { - if (!eventDictionary.ContainsKey(eventType)) - { - eventDictionary.Add(eventType, listener); - } - else - { - eventDictionary[eventType] += listener; - } - } - - public void Unsubscribe(string eventType, Action listener) + public static void recordEvent(int i) { - if (eventDictionary.ContainsKey(eventType)) - { - eventDictionary[eventType] -= listener; - } - } - - public void RaiseEvent(string eventType, int param) - { - if (eventDictionary.ContainsKey(eventType)) - { - eventDictionary[eventType]?.Invoke(param); - } + Debug.Log("Hey"); } } diff --git a/Achievements(package)/Packages/manifest.json b/Achievements(package)/Packages/manifest.json index de946be..9b2bca7 100644 --- a/Achievements(package)/Packages/manifest.json +++ b/Achievements(package)/Packages/manifest.json @@ -10,6 +10,7 @@ "com.unity.timeline": "1.6.5", "com.unity.ugui": "1.0.0", "com.unity.visualscripting": "1.9.2", + "ie.setu.eventmanager": "https://github.com/itcOnlineGaming/EventManager.git?path=/Packages/ie.setu.eventManager#v1.0.2", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", "com.unity.modules.animation": "1.0.0", diff --git a/Achievements(package)/Packages/packages-lock.json b/Achievements(package)/Packages/packages-lock.json index e55f43a..8dafbb9 100644 --- a/Achievements(package)/Packages/packages-lock.json +++ b/Achievements(package)/Packages/packages-lock.json @@ -224,6 +224,13 @@ "source": "embedded", "dependencies": {} }, + "ie.setu.eventmanager": { + "version": "https://github.com/itcOnlineGaming/EventManager.git?path=/Packages/ie.setu.eventManager#v1.0.2", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "2f8c82a32f8a4ca5f332d42b4fd0779e25165c9b" + }, "com.unity.modules.ai": { "version": "1.0.0", "depth": 0, diff --git a/Design Doc.docx b/Design Doc.docx new file mode 100644 index 0000000000000000000000000000000000000000..11d21ca0d5b703caf0db38118a0b509b1c982ebe GIT binary patch literal 14931 zcmeHuWpv$2vhFssV`gTCm}88YF=mXJnVFd(W_HZX%*@ObGsjFZynW8h+ygUjz4dz@#0BBH6AscH)BWp+9 zFK)I*4%!T^R+dD0;Gk4F08rrl|K0u<*Fb&Zm~}4`lE_2S^M|-5W&NYPQX0?*zHju3 z$52=vpenENL+x*!sGthUAaSskB;+g)n=C4W0W+&wPbDYz?NnQVIpnli=R+}mCMM_2tZeR1Vqy$#i)?EN3jqDzF@Fy zKXhz@C2x}3Qp+_!;Uenfpui>6F0px8i<4j(t~ku8nIuUE>eZu#op>J4XD50l%g5TU z1vubeM&n@dr^u^DL!CJiI19kn2DJuC&MnMc%O z118QCEZ6OR>R@>_BfMbJ?iR!>f0uu7v&yn!(rg>Rd_3o)oi4s;G6i*Kl_P*Ze6aS* z>Jbb8cz*{2$p58D62##&{RG;XEU?AF0h^?*y^*B@Bg1dyf1Bd};`aBaS1*t6G4Er7 z7x)?Q8ZgtLu-b!_FUx2!y@s^{1+6I|jk>mMzV!CWv%Czdef(8yY<4bT+T9^T)M-0W z`x57yGD3I<%;J+ypXRT2S3puw`*&v7McWd}A*b@cEl9LTuG(3FX8 z)O{M^`~4y~GZN~lc>}V#{46`=rH2%6mYh`Pg++65O%JG2UXjjV{MJcqZ&+jgnq(IG z*qGkUTJ8QXCkf3Tqs*!A=x{8V7|Ao@^vhv!F572L-1EDN2Eu~qU~*x?7=L*hYoTbo z9fluZ^RxdXR0MpKF?a6j5ugmvTTnRn zB6@`punqdO8uC##n4~n({KK#(3X*t3NMLrb84b&+h`TURJk!$UxIMheYN{_PZ*{!;`t*(>k(HIkxsF- zg_n5`CFAkvTpe~O73xG7POv;x0M7(~Fts7Wn%?SUEc5y+>#zi8$1?OuL0S~b4Wx)q zgWZixngC_3p%DqH=Wtc!$?t43rVZ?lVZ*YhuvI?}o-oAr_uQf{)i2FjK1*eX+#8{y z{4}()2VI=aZOm+U&tl?$p(j>6nAsjH*!JHvCPHow0mZ0f#fh!bqq?qGF?^V4o^K#A zkhXzVUZ9UTyzU4zILImR_Xf!q#<<3ta`Bj;+AGkA))?c*!WV$Re0N)zV})Xnom&!G z+Ud@j8gxus_$5}^6pTY%DRSeiG{q9@!;~Kj(pl&<=w8Zmxn;_R^*Pi?FuL^AY$pfl zTAcSq+M)2#a`2-LyYe1eROeh6UfHZfZh3EGU>UA_jW3@-v;opm?YOpmtX~-W^;um4 z={Fl<#uHdR$ucU4K7tv#4)l_YjAoGrZWQJ8jo{(6fzx6Qq-8y4;%iGvsKxIl@TKvh zdc)uK&{0_yaoJZ1skq(MJ2Dhfa&gJ2QzGiaN&^&pFPygEBDM3U!J;@h6Z0|iT|ehP zTFiXDNFQLIGBp%L;%*BRx;<%JS^A__K%iEMAN-?IBuyAjD>;Kd_`Mo~>(*=nvZ~^y z&pYR+wKTQV+POAF{)3SAiPabZQNl`=)f1+NtNKLq+@~Kq2-n|+VD~iy_LqCe;HReP z*I=DxcF0HD2ezJMc6^cBnLYxF6gH5ABcL5u+rbX$ z@Tn1h8%uzG%k1gDDn*0*N~qErw$Y6+K2tf1d>2tFSE%JM)baeBfKo>$4B^{4mLS-um}eRmp3 z9VeKI6mVh~uwyyRNCP;J;IFwuLZ^0YX9R8w)9&*9$xSyumIA5w{mp}7l0I=ASesz% zRrh^gm}%Ty?@t^PfkVnYkfeU3i%JzlZ+T`^>jjuY{z_j|E;&%1us0eHiWjU*4K=pY zw001YJs1rS;$t=D%3*6>4L{W9p>*(~mg(MBXpFhb2;V$vRw0bsd4 zNn9zAGIEp=)^vU7oh+?Sx;@JCe4roK8?m9RB`58NOnY@n%ppk)o;9?TyM zyw|&P9+KY2yB(FBmj>2jgS6)?8YaO{Yn{H0KG`1J2lwZnYud(%k9BlDSEIz9u3V)RTJf@+YKoWq{pO zs?PO1U_BM&cGeoYYjG< zk(dhC-%p?xgV3ixwteu|UiJxnja0eIuAM`s>x3M80MFk_my_%`nhwC&b^Lg)6_MVE zVTz>Tf}XFL7Iq#YS_6XROqDW`D*wHo>= zuz%XVHHxW8RgK@&FluIgU~1TkPaxyvEw8KVq#omYcK_?dDv-~&=oO6AA8jKCgwB-*jnfwVdO#__2 zu;Wl<)9NY$cYox&}UOfdt8BzOR5kl#twKSmyZrdIzNg@6D90zh*1zk4f>9|N** z;D9*jEdcmsxxM5C_bere*A`y^A_V-!bTAXQKf0>KB~GXHS}*M@Qyivz+1I9e!d)Wg zJ&JOM?U9Zmt2~xyTuTV5ERN-kz$OB2{>RKRDrb8af+}{I&}Fci!GnUG*GF6%x5I4{hNli0Mjp4dAbnaZVsVE!d-4yN+B;n;{x$VzyaJL!|>xH=)tDg= z>RP0>XRw0sgpQLh9xX!+mm4c{fJq6TCD}nt?Ov%#8;m4|7^+9Lu$d)$h2@v4czjlw z_z?Dj2~+uLFc6=5VK{brd8E9c^U>c028=Sc9*=7(Fbi=8><0j}B^Hc+Xu(I;?!nxS zURXHVQq(%<{hPg%-^lo!{WxI-#75^*apK}Ln{TLyDN9W^%M$$BJ+F4ou5Rjvx-xm)?C&2jt7BdT)b{T6_DuG5-XHI_wtPU|p6^1I z@$ajpdLzCfR3~RElQsEV#5lgD$a}E#{tbnn!{nlRuqQPxb zTWc;xIJHorIH@da-vs8@W8gjp4Hvdg2$BvoVmFG4nOxxJcElk071{bDHUCOQkTd8z zpgzX+8>jIYHcrQ#j#OTVMoMmor?IAs9$1H7A>Et9aX)vfL6~s&}3mTd?uyf z$fwsCaWyVb9G@?2NNAoAGVp5A_yA@am}KtY(awS(24DPW| zFw!5$Pe0TMz$4*}s!g@}2~#)4tEyVOh>x&s#7x;g)1Df#X6DrlA4{a$(<$iVd&yOs zPq&bHp-Id3gpRM^Qz0l>|jwiV%l^HS;Lcj_~-M z9;eryQIHn1#6f6i8-t@k-L)fzv|&7@x>8!}y?3^7z$yF^oyvFZ3oP1IXX zrObh(xsb-EfoWO0#>9E=T7qzMWG2Fu&r#V72L11 z7U?jFQy?x%r2xfo*}i;i_Bd}Ql6i|}AZp)3&X~k5;i?{w_wd1jSZBA1CH1D=s99w& zpOz^I%axvXR(x#GI}xFKG~TkSDU3c}#pckXYWX5MV#o9% zyIcRGqhFw&51OoB^e#M%op7G^tiXHV{5gkyHQ8z1;W4OXUB~WN@m$4)z=z%K62ct> z3Sg8LZ}y`sx3{ihP=6tID<_!<-NKmP6L--QiYD`tS#X>N8v#ez$UKt@-XD1_JODL9 z>-C$(?m3Q;c6`Q+FD5h&dl0R>*W`|%a?Kq(%dDHP@K-L%WEv@CvPg2KByNpx@Ah*&Vdf*tCgjuw6Y6>{MVg&*tK! zTtw--G25*^Ia12cX~UN7h$+}enBNJcB#p6aYL?-&-owl<4jfi6x#7&#Nui;onlXGB zMk|{cxO?=T!DKWTX71MgAmqm9 zmz4QC<@(Ei9IfSyEKL6V002l90sz3DfADSxM>k8O-<{5xwv|J=ILe#1@&h52SL?6X zy9mP-y9$>v=lF=z_;L<=YyKEL!y3^@M0vcQRb6gi#B2daxfOSXm5S(60{krFb8;*j zLR{I9Pz z{Cru514_L&0-yy?PbBSF;}QC9-nOwJ4xM^WAM{6*S{x{9A!zrO&ffHTYC{&Tm8meK zRQl&Q!y<|TcKiCSx_b?^<@+r$LSCYvRpGKQR^Nzr!-Uby_+paX!tR$L&J_%2KB5v& zIk?S6^l#IvWvDQTkpk*N`=s~uRbGhX2Jgj%ByRGBUd`glL1b+KLjXOzYa7l;mIyl{ z`cqE3z&>nMPP;FCSEtelL^0u}(SlqILw5ozwf+<8d{w0OT1B!n%|$^t`68~~4%y+6 zGN@r>>L1AL{2*1{$8J=8ZpGeYY*dSw9wp3)QGVd^8I%fydGwXNAS4v zn7CmLxzq;KCW+ADditauTnSwKpkrjXNnyLlDEkoQ(c4~Z)ft}eYMZ0sxvfs);$t*2 zu)SULpb&HeDUkP)@Pj3&JmtNLtVPZ5_OYBJ$53%yJl z67o)lH03c)Wa;|lsY!nT#p%)yAM2)xU2E*zrZrg#W3W}pQpFaVB6={S6iT8zZ}w{B z^m^o;^E1{!{e4^+i5gqO|&Jkzs$w^cua)sa7N%l_z2j+w43&EJ;h2-bk;dw_6+BH*y79r)1!C6f5Il6jqUtCxO5?)+L`2!1DUtr<;Go+2X z^Vg3H#6$1qw)`gGCB3L2Hl>Pf(NQ{j_cBWg;ka;rDD&Ah+^Fv;QbofDB}U6Ym456Y(xxv2?`$!AFjV7-3Js|eCWC=Z5*mAPs}x2-<-GF`NlxnZ3*r39uL4WftU(S#+50TKtB+IWW1aK$xd;-c(8m~fKnckPlEa`0O?xkY6_HOFYTQrb9%qW9Tn&?c>X(Rv*|l&Q zA+(VEB=L5x&t>9P?(iKU^dkBB+AesTRP&xMcP(&$8o|a!7ufp29a%yjTnPEWUGz(4 zrP-KReO2?Q`u*YOR6yUaaI@bM3Imcq!pLTaPTt2C^Az+{8u&*xj5{m)N~JtNlLcl;{|oTUjJ zvT9jFlbXewu3w5YcNDU1-uI?q@e6^OisZeOPX3BI%Z%s>%o+Yt2qmU zzP9T9iT&AcK4-&NztCHQMDYfR1Eio-fif_`3QSDo+Qw6Iku6AMh0#BpN(zNI)ZF3} zF1m5u)7dIH^^IKoC&M}g-JV07Fpon(P)^o){c{77^H_g zvR0+N7bkM*4e#Axr3XT%jo~n*w3{4cljYaJ1<^#i7=uIG-QXiUmvy8}uvpwYB{KW8 ze8G6!?+%vsLXL=v*3gdi{;J?w_5SzGrV!^|dFaAdVJf`FAl9Lib08ex8pTMU^z#HP z5FFr=#og;t#YhnJU!eUkXaWV`&}F-A1%vK6a|JyJa|O|U+w0|t{{i{eJqr%jKUp78 zXoNq*p$p~&!4gjkF5C*Xip5MF~|&+UL%KEWWW z-}Zk9{`yE5^b`*m^t^vO>o@F4dJu2m|2NL+&CEujm7tElSCuzY?#!jj$%y-|#`-gJ5uCg-0Uu`ruW{W=*^q& zQuj?r&so#}LZ=3Bwj_o0u_gM?@f_wix2@zUPSLA*HXA5fkYZM!RZnX@sYG<5eeE<; zO0WsJ#@F(kCh!pLG$Sjqdy%ap#@U28yREL8ja^ZSx7)3}X6-Tt7jC`-awqUDpo^>n z*_#5jl73*p=F^&42Uec7Ah*sQi3(gD2lk+z1`D#B1z+dmjKWJbbjfc(tCbS_V=e#& zv(2IRW!M6N5=c?H1tbuu1|M5zQdb28y_b?;`OPmvRQ#nszQaqg33n?ZAXk5RXeZ+S z`X|vI;{S+*z!^(HBKa4PM$>^x#n^`9XTAu5|E`ox_%aWt`%wuYw;ia}>dPt3DC7cF zu*E^MgxUm>%jZh$9e;<3X;RHnbq`}HHt;D+7<*;==&^4n1;DqcJrq5X%*O>8C_;sl zE60VMsKy+KsxRnz7My9EP|eZ+2on0(ioMyqbx7OXT~<`P1y$; z(mt019U&>_jgIlgtP3{B)?}~sfWeO7tuT)yp$pq8ZQ1${s$7jMO;HdZ?;5izKiap3 zdv%5kDvL6%D^H$eDF%BTQETwsW}&3NSIPW*ewLAo;k0uP^sQ%Q|T|?If#0?dmJ=boid*_#9S3^jkZ4Ra+RBodC$AsV5K6C z<#6yQjtp-_W~Q4^U{It7Obqhrrp@w5<_ga=wq06-m!^wS%owUy4D$;fn z1EVm=w2cIhuco0HP)ghOS4|bi&zx0pOe^f?D5Hcy_0Zr2y^w9;Pj$Po#8%D40rg3a4nh?Og$@e(S6`4 z8}#N)W@yS-KDF|4wrZRSv!Bq*Prg+)m{?e!y!u$T`s%P){=?kv!pgrCA5D^>M`OSe zPM(Uns4VCSiSm+*w(Ta>Vs%*^di!mdg6NlwCkK^X+?Hxiy6oP;OOPC1c51D$QJM&N zV=A*IHET)SD!7{^B}Dr z;CcxydCrC0BE0#SW1~GPl%3vp;8}(mh75IbZZr)J-?edSgEjNz*(B20+~wx&&DWcY z(I$T;Z!wlis{u@+tpd)=q5Ug1;9{h&^rxug zS<-~{8Wa4`Pq2H$;EO2!MXc1B0s(nPEGGEAMLu7;ks2lmRx)zg=iB@}&*m}2JBGG1 zeZ|B#{)9Z3t&N`zlFq%KV2mZM)kRUhV%eIpOI^R*y4Dee-OSsTc88L4L5p3e{@mKQ zQ)WCN?DgO|Mk&BjHESfRc+gHNjBXHA;s}t%TDR;rKe038C@H)@Y;60Q!+l~zpL82i zKU^D+$9zwZW{NY?4^~})F(~F`9wbPDwKO`JY5J;Z%B!}iuGh;|E>`AORKjW^?d<_E z8?SCV{fLd>Fiw>xpJg&LcLJIs2ZpBV8z1({I=C||uE2F5&KISW#T6gJ>61JTz1@6x zP9|yBy2NT)Qbg}`o?EIyRyhav-9R_>e*Yx z+wIN^u{bZfIxcUaoA=j8)mJP_JhY?s`D+m#e{Id9%<3zvFVsg}Uazc2VqK{VjQ=q< zeQPOB3J%O6W&(zgQ2u2I#=!LcFJJX7jeZMGuP1CouQDM8{iMCaC)r}O6MS4T?JM1Y zDB0tp5}zoRW;N@wYvPZWEKDpJXqW)PGr z)yzo4oMMbIrS!eefi-9(M7L$%b51SGoRv>tV4ZtZx|7Ij(V8s1GEIm}fu}%Q>;`6{ z;Q?2%P-q!h2;c4YEpJz%cfnVpmNs^8-gG)Clau9D7-WAH6;D>N9n^RiaEz`eyJClD zu)?ChQUKz_BBKty87Bg%`hrhr0T7iFb6*BI=A>@}KfqU$`7 z-H;Y<Frk#m9GDoTWf(wryB~C-~-b@kb!9+z}ydcdmCE^MgtrB-%SRX zf&Smz4`5@8jF*wyWkL%6Nqa>|m%S`xPC0=QI!gqy1CD~C?bnR$K^44Qb4H!}PC#ik z7xfLS>B;r*%GG%EMouZ=!{uiVXNfuNBJgs{#Ku$d*S1z!S!x)naug?nuM$m2M{Z8H zWr>xsQ6b!0oR`JKvEsG4vDOm0$l5(>z?4o*KznMFWgFsJA3q9;ZIAcH% z3Y8j^^tyNfcR@Vqtd-{mSfZhP07!)2_qs&T^ zwaHaC#;Dh#v#a}q&Uf=XD-K$idYU9Uc>@IH5k%wq-h(FuGQ=Mc;w#l^jHCna9#(lcVll~m5!yWkxe=`F-uN4Et zX1755LyHOp{? zW+K8($M$XBiMNCwFj478hCfi-)zKW4eVs`=!xx&LWVl(WA7-harM5aXdQ;q#Ww@cE_?pBtx$|+$V7%(-3YiD$ zkeMusnG_Z`*)1VnmkGltpdwTWM>FjULp_NCuK7W!Brw~g#bSoSSrN@4m=LByknIZW z>n01s=A4g2QbK0uqs9gAl^s>hohaE}%*OXrnq&<y@{G)8i|;dK`T%dQZ^1CaX+ zNA-sg)pl?XtMR@LdS0JL{fh%G5k`*p5b!Mvn3_r6+fgV;stExqm3O@;__#DX9ubV4 zj;9RaKNGgLhxb&9jCX^`U@%R(&Y~%*iP6xH3CZ9A>ofc?g}X(Xn)#p3Uho}3I`3l= zrVi%(JFEH;v7QKY5Z-}P#Q$JwAfWU>R`#D)-~Hp;{89dgwRrMUe^v0;wL*VD0e}Rc z2mjN`p}zzFzKG%vXdRF@{+`G6=e)na!~dEt_y-sOfJXW!{Qr_X_;*czPa*q57ax$c z{Ktf{zpMEBB>W#L__6;rH})s;`*--?C)56bH{$;b{y$S|e+U1aZT|tDrT-`RZ`}Lu z8vahx{?M=nI#vj0E>X9hn40RPs3{~i8Um-%P-BA% S_-$Pp9H0m2WIZ{4JNrM_0|}e} literal 0 HcmV?d00001