From f6dff86a548a3f70e5f6aaf855f7036a024ee982 Mon Sep 17 00:00:00 2001 From: "DANIA-DESKTOP\\user" Date: Fri, 12 Jun 2026 15:44:13 +0800 Subject: [PATCH] Finished and submit Phonebook project for review --- Dania.Phonebook/Assets/1.png | Bin 0 -> 9979 bytes Dania.Phonebook/Assets/2.png | Bin 0 -> 14562 bytes Dania.Phonebook/Assets/3.png | Bin 0 -> 54070 bytes Dania.Phonebook/Assets/4.png | Bin 0 -> 46373 bytes Dania.Phonebook/Assets/5.png | Bin 0 -> 23278 bytes .../Phonebook/Controller/ContactController.cs | 289 ++++++++++++++++++ Dania.Phonebook/Phonebook/DatabaseManager.cs | 128 ++++++++ Dania.Phonebook/Phonebook/Helpers.cs | 105 +++++++ ...60522034000_InitialPhonebookDB.Designer.cs | 52 ++++ .../20260522034000_InitialPhonebookDB.cs | 36 +++ .../20260606060442_UpdateDataType.Designer.cs | 54 ++++ .../20260606060442_UpdateDataType.cs | 50 +++ ...0610093320_SeedInitialContacts.Designer.cs | 91 ++++++ .../20260610093320_SeedInitialContacts.cs | 57 ++++ ...1130136_UpdateSeedPhoneNumbers.Designer.cs | 91 ++++++ .../20260611130136_UpdateSeedPhoneNumbers.cs | 88 ++++++ .../PhonebookContextModelSnapshot.cs | 88 ++++++ Dania.Phonebook/Phonebook/Model/Contact.cs | 9 + Dania.Phonebook/Phonebook/Phonebook.csproj | 29 ++ Dania.Phonebook/Phonebook/Phonebook.slnx | 3 + Dania.Phonebook/Phonebook/PhonebookContext.cs | 31 ++ Dania.Phonebook/Phonebook/Program.cs | 4 + Dania.Phonebook/Phonebook/UserInterface.cs | 48 +++ Dania.Phonebook/Phonebook/appsettings.json | 5 + Dania.Phonebook/README.md | 40 +++ 25 files changed, 1298 insertions(+) create mode 100644 Dania.Phonebook/Assets/1.png create mode 100644 Dania.Phonebook/Assets/2.png create mode 100644 Dania.Phonebook/Assets/3.png create mode 100644 Dania.Phonebook/Assets/4.png create mode 100644 Dania.Phonebook/Assets/5.png create mode 100644 Dania.Phonebook/Phonebook/Controller/ContactController.cs create mode 100644 Dania.Phonebook/Phonebook/DatabaseManager.cs create mode 100644 Dania.Phonebook/Phonebook/Helpers.cs create mode 100644 Dania.Phonebook/Phonebook/Migrations/20260522034000_InitialPhonebookDB.Designer.cs create mode 100644 Dania.Phonebook/Phonebook/Migrations/20260522034000_InitialPhonebookDB.cs create mode 100644 Dania.Phonebook/Phonebook/Migrations/20260606060442_UpdateDataType.Designer.cs create mode 100644 Dania.Phonebook/Phonebook/Migrations/20260606060442_UpdateDataType.cs create mode 100644 Dania.Phonebook/Phonebook/Migrations/20260610093320_SeedInitialContacts.Designer.cs create mode 100644 Dania.Phonebook/Phonebook/Migrations/20260610093320_SeedInitialContacts.cs create mode 100644 Dania.Phonebook/Phonebook/Migrations/20260611130136_UpdateSeedPhoneNumbers.Designer.cs create mode 100644 Dania.Phonebook/Phonebook/Migrations/20260611130136_UpdateSeedPhoneNumbers.cs create mode 100644 Dania.Phonebook/Phonebook/Migrations/PhonebookContextModelSnapshot.cs create mode 100644 Dania.Phonebook/Phonebook/Model/Contact.cs create mode 100644 Dania.Phonebook/Phonebook/Phonebook.csproj create mode 100644 Dania.Phonebook/Phonebook/Phonebook.slnx create mode 100644 Dania.Phonebook/Phonebook/PhonebookContext.cs create mode 100644 Dania.Phonebook/Phonebook/Program.cs create mode 100644 Dania.Phonebook/Phonebook/UserInterface.cs create mode 100644 Dania.Phonebook/Phonebook/appsettings.json create mode 100644 Dania.Phonebook/README.md diff --git a/Dania.Phonebook/Assets/1.png b/Dania.Phonebook/Assets/1.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8be0de04e47e31171fc551c85a16fbc6035ef4 GIT binary patch literal 9979 zcmcJVbyQSs`|k(o9zsDt7#gG-6e$4-r9@h~I~0aSLO?(oBosvy5ETI_>245_?ottu zk`B)`&%56DJnuTs`K@*SIBSiG5Kp;p}RTOm)2rO0j zy^{bB{T{}OhT7^Uj*+on)L;7V zy&=1L)jP4urYlBe<_egs$i$IEv}@+D5O$&&9ij z@ZF2mSofZlotfJCX4+iGNqeq&C!>pGis6^kz5-+aH3{Eme|&$uh&&@!AYj(MmF$KJ zM{fV&QlV6cI!BZgj?4`SWn&KKdX7>hU?%$O&!MU`YUY`*AhLxERjX6)l ztia)nWyuE`D`n+}OHxU+*x1+wg@y9BZjruu^X5bFpCEftI_cxJvhCO5H;t$`R34R< zm01X9Xx+KP?knV1XS!ED?Rw+(?c^n4chNHXn6}Wsm2oCYO1LKcqaV&X z!(3pG1?msZAwF1lQRcmR#Y{_5O7l|rrN#Q1_toy69wDa@-j5X(&C8zh`9t%=`ersR zXan90x_9ot`zBaxdHH#tjhTpHMvSJmb zBaKyN)yR<{jZ+RIr59J(^OCia@m{0N*5JHy^(q$P#$yHxr(%u#%`>L`$12&O5N$31`5$=DlkuNbsnRCJGA+ z6WusG@@Ux_j(+mM_I68%xK>_ub!q)m55ddL&3*7)_7Asj;#9R4KH~Z4Di)%zuWzk- z@bk*OO~1MpS3ITqG1$af)8Zwi`TgS;qpMb*JSdBWcC_fdKGGbhd^F-S4pM>Jq^(V% z@B&G8=?a?zP4xi1gsV!ZHSc2d$vb>7Q@c^ zWaV;Jdn}5;S($+-V$Qq9V{@+QNl^Nh@Prqa*=THKC(lDURO8vo<58!`*4c2wWJO8j z>%2S^A0Me%;O==mJiIZ>!#H{g1mfDYYmnb9b8{&FqWA+Owga079?R&^5O$qu@d3-W zU)>s|I@^rHpPxm=EJl}O?)Rz%$S@&LVq$mBsF58)thL1p3zpP0G*;7}?iaj$%OJj^ zM^(HPyT>52Kjno85wYt>WMl3MOE>t7HAq8YkhYF zgUtSWS4bllX*y=Z42zoc#z(E6T+h5M>iOK!`C}(%jOs3W$~INVi^N}YrloW zxOnm6hskw8S`xUu=#9Glgw#~rvT>4}fyli*Z|9lXi!wRnvjIDC*8aR!dLojNQM;?7 ztel+qSDupb=)Hw+Z;zKfi<+4+9TwUt9d|~AEOx~A5=g= zNA^1PH+>C#x8zl5KkUqV(EanUeQ(J2saOL&ERAVFJ=g*&7cTfN9Af9b)eoQ3B3xhKH zK>20U$UEa@&1C$sKU#-)3IrF&!!uPW6*?8K%O@cfsI?NCn{g}W!x7>>i4B@jI z9phzoB~Xc{YJA+rq`oGDPtynCl)W3ya^k5=dm z<9;osS|YuQejg$ARAcGeH%mwvXXE?##U91PXd4+_v1}fKTcdew~ zs6XbHW+cCS`LdRdPUxkp-sZoistew{u_V;U%E}TF6l@G+gf_X=e{};fpJE2tjOo6{ zDS6e>-=E~i(Z#f#D;n{-S6oJ=KzO=K8votP+|o28c(Cm5 zdQQc>PaGGcIYoL6jBC+CM8w4GPO-+7u1aoh0_u45)j|8oIVU(V7xr}MvPXkha7_5HlME9v)}3u>eLa`*YY ztCF5e1dlIWeOP8Uu&_2>wl?P5A3yO#^O?B+CG(#fyPj7WdFMk7S+6a%Ri*?S%ty+h*9qqhqfi6~Cp!a%S)IFAeIGh$TT6vx zX42{E>%S~1p$J7aT9%l*yCV?^+1VuWNF)Ic8}0|?2{%#3_!~O+wch4XX82x9Y`r)N z*P?y*ZXA5HcC(onqjBu*5!N;|j*gC6ASA>FSek8UTCG;s)~rQD<2zUnFGaC)wnj#M zKPkZ6LXX1N@83V(HN1Vh<#86WIvht;2=`Pa-azLwewaMYIjl6CJ2x}wSK}_$nUc#R z4V0wQd)T?9*{)1n?hX4HOsFtEm&CaHx+)tf*&GPhm zgXc04v8U|u_yCdwFR~8(6%qmRc71Q{5>c5ab6x<#jR|IZS+o`M2YM4 zm8n`^s-T8ogSf3Ojdx3m(gX2EW}q_KU*F2wJUiZ4gvtt~o=ZRgBOPnGndNdrt!ty* zaQ#lUIw1V$ci+i6qPwx+i}LdFilwEi(9J6KM37Ul3K3_s+W|M6p~WG!GRk}`- zlwvN-L&5Fr?rx5~DDru9wBs(B`An@ZEgfC+;L95p;#rt-7x3qFzh&m5OwvUWTl3SS zT@?+Dc5>O1kdu=D=gA7v>({S85wRn?z-til{yqPQY2lJ0uS-hn%X_%FDS~n-rNoxO ztf|=t-?H4Q`pE~L3?KbmUyo>+Z_E^P8uQNTdkCk2f=Vu?o0+Qkf{x8BU`vVm{CNjbg^aO`Bg@lHl3piX(w|8>7E-#NoL`3v? za4By8BkCUN~AE%0xhu_=Wxi7XPEKV7}vFf^Z(+1gQ?GzoHlSs^R#If?RnWs1r!t?$?G6-7$n^hU=*qX4uy@3jVTCl zv`kE5prpQH2S6Leyp3vo{%cTAmjHPLDyb&ccMe7%$SFc`;)dyY` z77<}D+{cw~+*_YC+`Lz9QswoX?5!RTy@)0~qa!6^cj~CN&pJF&#o|wkq9lqYUhu3tvdWVWv94|6UNYFt0Z)jGfh6-BkV~RursXx-kXv9S;;H83kT#d zXiF6x)@sO*ED5*v;IkbjFdqr2Vg~gAQs6DcU8kZzK9yw&2L=YdaY1icf7j40B)GYS z*(coLjHS1RWg(ly>b14!nWF1k1J_DALMUwYOp9s279v8PUiE2S_b!uQnuU7&eIO_O z<97!tf&bF1J^f}&v7HG1$K083i} zc^!3a>%WES(RFmj^6CC;q+XGYQl-YzD-jPKU=f6dBqdRXc=b94QV8oQ@5+Gi%($#; zhe^m(?SEFJ|4PT(+kA4CBNr2&{0K!VEa`^jJ@FBOh*PMt#x!%M;yQ7DCe4)5=Y%-t zB=7&!{Tg2rr-;N!TUt2$o&&AyQ!&b+!~o2u$J&^XszMb0U6y#B#6Sv4;^CfkiP-=u zOmccG;`NMKiPGKJU5Q1*)qp;W=vi)t-TdIOs4V$Z!?%nAH%xwSd_{|kE%=IUa`{`i z|C|POc(ht<)$#ZeSS#yleC!8u&9X_f4(8?|%Qn1xd=ZoD%HTSOKQV{5KK;2|k&Pk% zz28#qG|IN>7ro$F{qP<0BldH!o8wPXy4e-q6c^)%PzY3}?op{5V!b+TRVeIz5Tz!9 zq?CPQ7@`Ogd<+-QC^K zj^)sg?X0N7B8OH|dhey!CeA0)xm%K{7IKKZWPV=c$q$z z0td^%!J*23pC4&ejl*7htj)vISd$a2yj}$#%OJ8OO3F=1p+0==Q66~gjmkB@pjjQR z0+gzrFv>#K(FPZ;gR4Mu1#q zCO9|cDsh>I=Rs7i4Z{6!+otPPUch?Ur%!Zn9U#Rwk52(GG~qJ^gn-ZZbqW!WjZcO^ zeERgs{d@lQXIa1+Ni|0c6Zr-mllG!&L1qh?)*p8}I$hK{ zcGoLs7oPgeJb*F_8X_?}yVo_eFH?*d1B_f;_(nkiB$>UTN>X{_Q`u)Lvc0ooc$Z>} zY@Ob%R>;+-GC3*fIrP7w74S|WRGb=fe_<^@e}8}@7;TuH%^<#~#U;A-rT!nfG3fWI zeJY}e&(HwgzU2iqE?xm@GPkla-Cx$R6)p`mJ^)>M{O& zKCGJ~#oAZiLr=Dx_~_8t*Vi^t?v(iK*<)A<#v65ZcFJjJkkQf8SGT_%p&2e_UR1r$ z0o?TVc)YcUB1?zml0hQ-rH+|L>|i$)sBes0kPJ8wL~7%f78FFS z??ZP?Vk384CbZ$SQg72Qo7& zD{?)*y82=$Dpt}zx|g3njT3QW1?%$cbLs!2C42}Y#<%-~R22^&+OwEBTPlo!ny03w zMo`$0Do#&NCvEt4Q*A!qChfN3ux7bUlC&@>q@$w)aC!_I@zLnrl8d}r`=@{wgLyv9 z=X!py%!1piF$r6_v~1~o#(3d&oO(s6*O1SY0P`s9QCSVF?t)EGtB97s!NbRApJbht zaHyOdAGN%Q?OTWlYig{oaR1v%3w|qgqIK>j$8t=3GSAi3)qS3qhcgr9Nep$I0Oy?Z zw62L4G0wRv?{zxF9B>yYQM$el_oXT)fuy;jSXr@+-le@$edOah+)Wko@;4&YO^dP2 z$ZT8vz5=D{?k{iA!C!)$Y5-p`QXKpM#5LGnlPY(t;o;$yZmNLICVY$v5D%>j-2$GpBER$7fEADs*wYRSq5pUv`pWLrW?NLnHwX1 zn&=;q`@Kv93hn zgV<3{*OYB?W%}EI&PC~NO_la29$R-STK&7>l|0$G(|#GcoiJmSU6N_Bep2;!z)#y8 zgzN)sqF;!zd5h;l2|Yerma-FTOt|W_Q+#IX* z6_NRK;&l)pllS^{sbQ=%`yZ9uzBQKecCC8(>?T0OY8CPK7R~cA^5K(0$yFz|2}aS8 z_GmR)Mf&)FtP_7NSVw#I&rECJBNfi$p%W8E0Cr!zc=4bwm(hPs$aklpJvSgsjD>LX zbV`!8FdWM*8lO>`oupvx95Yq2W5P!R-j-6eoGbU$w(BxWxMo4P^ZLfxG9{-PapS;R z31o*+)h?6bwI|y>NiLRnKf6xO&2w)x#^i@%rQStZTk3$|vma!E2zqi8W-@pnC-9s` z-Zp`X+?;SKE^!`>ZuVMiw-&Zo`SJ?vqk^}$_ysI4DnfPzi;kPDe2LQlW9WAyqY}9{ifCbK%Dfol}cq-{gu~|Gonv=~I z^3H*QjtZAa49Su5`exn~iVMwmfew--MLYW@-W&PSy1KhM{LI&`UD7W$Rl0lk65#jR z!zVEpsFz@<6an^t&bI6#Fr{J6v5#XBC(!kvnKzKs)p z)8$Q0Rfz%b!RbbD{J)77@F{HrgQ(xXe|vC8*_4fM0{N!_)CGVjS$fKKzhIjdDEu4{ z5U84;Kg1i#0GotO#(3v~y;}sn9}4@~+G;}ww;9sX(l}~)6#@gVAxL-*#Pqn#SeS2T z{mjhc&(;^**164F#s1AC+a3l}pTB%z=_)95o0X|D;ZGZGw=8K~_Ecp|Z2eMV8666v zHHt|}1r7m_q_ZdAB-V8HUZtBhXG?i)PW#L@Ig2mWY}8)|mVR=hJ*Ce!Os@!IrqzuA zEdX5%f$%^y%AReJzr9;?K}t$WGU!ASVB}^imF652|AWcdGd%Yc^c-J=96`nuXl??# z27Vr%uwlox;-Fog!=X31eG@E9WRcg;SRdiYYxUmzwT1pXHbwws3FeRYS4W!GymPJX*Z3@F zS&Co$eT zJ~iUy!6^41yMD0WA3uKV%z9j%=sE@73#t)5%nm?CgN6XjcF@9f781$mN1!Rag~RCg zgZbY5`&dxR5yFvS35 z(YwR?82t?dhu5s00dvM$Qvpz2)oRiq-Bd{7<-+=mY^1_#;bAe1|LOi8r^m-Z#0gOL z0RkM)tnPB~jxL6U^bfS!0PsppWmgSQh{|?Mh}GkVo3l9A6b7^35EKD#@zTzKY`hki zqCBb@ot;x?;>nU`rGI%+J}PR}^D2x!W3Peu1Qs+_?nDDrnw`62=@ogDD7$fPfBc|5 zLz;~1o2cb6b^ibu6c%gCs*BhRC^pQ1Kxjv;t^_+$P;H^*x*|GQlG8!Nnz?X-hv)kV-;S6jv+m)!9WGHpaM2EHCg=G>}uVoI>clA_ayi5HmgycpIB%U3MS*@!B$)GgO(-F z;b{WMc3~$<94wf-Vg|dxCLmW4TKf7DYqAwl`2vg}uI*$OZaVD$noinM+*{m2kMZ8- zl@g+pZXh0x^J;e}7u+qCoH=@oK}{w4 z9imv-_1jaRa+*v@PgkD+1NP_<5d_N1`ub<7Ch+6{v(wPb%wsLCaOl9fg@uHm=y>g8 z&_@f2o%QHFR=xKr_-pn}b3t1t{ECV4un{ORzq%j;C5?tzazu-3qavddxMc(ij9YHo zX^f3@ZO6>upuAHKIoEsCMME^tzkm?T1k+9)6u?LW)H`th7RH6?HVkT59eLN%mn8un zY@Eq952DZtNGTe?u*d1qeGmw+?3aaw(dF|iF*jI_AB_ef^OLBg8)Bll7&|mn*#7zs zr+?3IvnaY|Z*%`#S&=s~qBBm94gf|7k1fCh4liI#0hb2PZCHrlR>Ly@4`Dz`xrzg#Kw}KOcePs&fcuY zZa1o>gtdKZQy2puv{&1NboPUX>Wb}U~=yuoPU0(3*>?7(Vd0Mm~7Y;;BgO7?NE_t{5P(lPJAR`p3Q4miUUs=KwUv^cX49YSbO*_Yid~> z4cUSTI{_Y^7Pzn%qpO4Bc+$X{Nv8BSN%qJoNy2R=_UM}h2H)9ZJo~?%b^0fl{(pZm>i_ZRwrx@jw;#OuKa8*c k#_s<<)&BqU=go%n1KerJ%g49jfi;Axl7`}Y1@qAV1>DKii~s-t literal 0 HcmV?d00001 diff --git a/Dania.Phonebook/Assets/2.png b/Dania.Phonebook/Assets/2.png new file mode 100644 index 0000000000000000000000000000000000000000..7c58368b00ea15d78bf615672ed6884193f462b9 GIT binary patch literal 14562 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 literal 0 HcmV?d00001 diff --git a/Dania.Phonebook/Assets/3.png b/Dania.Phonebook/Assets/3.png new file mode 100644 index 0000000000000000000000000000000000000000..64649d82fc5fa1c24724d5233b89b8452f80ba27 GIT binary patch literal 54070 zcmd42WmKHqv*-zd;2PW$f@^SV+}#5~0|a+%+}(q_ySuvvcXt|hce$Pa`<^qi&dgo2 z)_l4jny%;B&6e6)_1hJqASaHDfR6wH0f8(jA)*8U0YwRxAK+lXfA6T1$H8Ba_DbSH z5EbKuhu{ZjV?kL#2#D$^#23Af;AeOni68b55GcKWKahjgMZX{*rbi@21XY}MPSy;a zRm4}iF5k~62!J@BNXf{^(7Mwx%N6s)(wCL3O^byClyU{6BZRPuvp!1MQuXsnz(q&< zll83uIa*!#PsG&eChuG%HlBgn&tHu9Mw7p~Ii0bvP=j~zwCr&LpC)>IHe_OTeUwXm?4^C1}`t;#&pN^#Kp~8?Zi8VwrmR$+o?Q3rD z#L%QG)Dv1NRWJU`W+@bvuE?OH!})-(m1o&^~+i{Csg$KfaFFD z$CJxhBpdw_X9zfpk#k{ghU#h?6Udpw?t}gFfuymf_3z3=BT@z-$Y#xi%F%O48+E6# z^oeZy$emqx0sqv?E3=cmEbOlDu7P}nwTu?P=i|MsO~`E^Lw^^Z)o3~2EZn+0Xy-v< zjv|xN4GbDb<9l*xNlPCNKX0fq3`^0uA5^Y2!z)D+?2E57I>I5~V)+TUU$N3Z!U>vNyBU?M6EyZ*e+K$dYjVwH5*t@GyhfVxqWpZ{0G!mInDK!EKy1=1=jutQR#A8? zT`FIQWT9{pvmwH#+)P5`DU(pQGl&%^#3I` z9c}jM9T2tvxbeiLuj3l_(0eE<^9v6#<`)33j0YDK+9|_tA>Jr^comAL1D|Rhpk69D zRqOF_W}k7YY$k9qg;F+V5vx)Gm_}R_XZo%@5a>Fp zKVv*4lhfe}Gm*VcHCp?|pL1~-xc_X8{(4QPkL@M2?@~E)=2KMq9#faq@`g_8<&GC+ zavj%smPz-lkLfosQ+@gLK*Vbwyg$li_S+wP zC5nli*%}b8R+}PE%0AZLO1)F6z0l}QxGj8I?YOL*$!mXw{utqP_nMXgA8p@-QmJmO zf~*=x^bo3S&hhi$nTr=gC}r3*raFA>dJiJ&_F>NJS<( zQMQF~3_k(vJUzn8FxKFmpRmBouoBiJ5vm*c(=^$%SBiupdKbip49}0c#wL^V3bFOS z>qK=G%FTcL7Kcj(;IpId&)y}BFiz0i$@;%kXjq{1Za0mU=(y~xY zju~lK>kpwHc>iK=tK;ncf}hdf8O>@KWczy%?L#4|aP#HY>BbxKUt$~%JW+aB3s^j~ zM2^%eoY(URX7%3FScCf{{rvL;^#PFDZ?@x}Z@h+-4x6hu?|8XYa$Hg#&Nyk7f{BR| z^RpyHe_$2#ZF_m^NLKK8+z|1Pq^LKpSdup~vLImzDcfb-qF52kxi|6jg@r94`%AH- zYafu1y=$&z>)dMi#~Hp;)#b;XYKh+MKNrIaMBKhcO?%pWoBu9#lW)574#@N!Bga`Z zCO@LoA+0gSGR}BRJ6fUmG^HzeCO$*W={z2w=TQG#b{O^^zGB01jy}0-bJu=P4M0!_ zc3DoZJp?voDIHDj5`H=61zjo)M3Nso>QFh2@7~~0np_YFb+vN*Os$KKwJ*D9)mkdw zbXkz;z~A`oD|&x216ep!Io+{FEysUD#D)rx-_Pd0 zy64$i?}bwJ__+K0J(kxVhr2Nq{)riKM0+Ee`I>5f!yB^*W<&DX)^?GnNKjd1C?((* zBS03)>_j(1M4}51K}zTXu2DFfI?rTCE$y`)Vi#&+=J843`U6v%`p|Dl0!XayKt8Ew z0`8v%`F#qS0+%(-e}AR|+0=fI`F0m1>0t#qrvc*oST9d`%D-XYZ1pMoQf`l2x%QP- z&LhU6LF@0zq6P|mhd0ok*9(ob$m(g~u_CUIvwBTG8tC&TxIjhdDe>f>miEjWWk=aa z`gVk&rWo&$w!Kqs0tnpJs`lv(GmiDLfqEPSD(Y&&CV=2NyvQQ+Q@NT=*hO#CFVB{6 z9H;b$5h7N~8_pwBgZRzn^rjOn#5VLG_!wx$iK)Ab#rd_|%Zr{s26B`~Rfn^Pz(Ogz zs7z>tq9INJy=@q&P{OK6-0;lK$kn_&Y&Yzv6>m5RT>)F8u>QoEE!ms_hrz284W)$f z{3-xiViJS;cZ&kL1=gey%g^gmXR}0_QZ7Tyr5wZ)Ikhk^L@=mJAN>9bHy9PSd% zCcL669eX!>h65l+3xefk?ktYCdw_2cUr2cU%+PYP&x;=cmE@R!wMDV6FRxSYvw>Qw z$X4c$0nrS_CKPx9FAI#_r7uk=hy&v#;XT$~1zC$w`x)ugtS8w3Nx%MsOK8;FJga?# z@v=YNIp&OQ+l0k0uejXD5QIUZpq({=$L)Y$lr&Yx#6f{8csJ|*j` z;%0b&6gf`vUz%V<6Ib9|zajL8IQ|-y%8moM{Z|*(vHF5jq^F>^ldUrdv3OR zx8t^23;mI++MU(ABFC%-P+5AtE8=9p$oz4`4N~MfQ>~Fclx334>4ucgo7?gZEf>Q}=nCF~69ZEqt z&z!!4;!`%i$PaZ-vj!;fGa-p4Uz<~xOYF>)%c}6EaB$uUhk30&n^e*FZ+J>6mP9_q zVM?K3W(Ok++d426*Dfg68FCo5vP>=1UHwG-yJ5#vIQNBi>`>KniBFkMc&(eNNNr`# z6#rQgyxhV(suDkipEXiQwa08Ho>WsxHJ~eO=wqGvNUr4%7g+;KwXAub% z+1=hs(Ujb1^;-tbP!B=XmnTwZV{3cT+`3Mt zYm2TIyVJFkrY<}qrnQRbDck#pf6T-?ZU?zUdN`9D!ZI$n>E$tUg*Kqv1ZWQNCkVC! zpAqLvvuSQuL5?Uyw*dp7;&$I5dW8C~-_Zrt?}`2IG1_fr_Z2*{dg4k78Ekp`dE}Mb zNq-O1kSA0Sdn2OQLKcNa#&DPuu&sE0H5R6US#VlxzzwYAxukUIOwY2qg&7W0QRl`T zJXS|R=&gR^G%hU5;pPemok&npKk@aDQ3evu7ASo4AgCWiQDk*rjN5U~H%}}|&qnbsXW*?XkBk=Hmj7F{|$&B%!9JK2%oyiJwxiq1Q zs?IRNWiLHzHr~NKUQkp2ws^}DpL)r|bv%)E#uRy>**kfvE_7x@Kk5C2A8~BR4hhDj zh?YG*-KXII0j1%u$-!_K>K8jgD;#UoQHE7krbsOe=b3+b`h8<^9S0MkcEKk;J%5>X zB7b{Ap+>$AJdk zm!=Kr3zp8Q+ux1Bxc4yV9zrS0ju3O^#=kSxy_GwSgI%1s)+k56d~UEcS(O{F(2%qh z{&p(vCG$etiT=Eq+SJrYwaHA!9r=0tbpPPtWUPs2@AvZ>DrTmYOu4u{J7^UPLcu`K z7)nEShA=%)3K=FJUsYK}HLBo&wAasKmg+PIPRArgru{;)jTbV$gj!nIQPuuDK*vw8 zQoz(OVtRoX5ec_M1~RUJuwBk)dKnvQUY%QA*bkqOR7XAgm zh-zsm71RVulU6@%{HZH)uX1Ce!Hl^5MQ$~r7BI~|CB21r=lu#I}>K{oFAd|JA)c;5|0#_$-+9hKpaLcCDpFFj547|^GgNpab*&v|!1SWp(3nG1bYH;AnGa zxOkjKaEmxxcr`$7=WowUsp?H07B9UL1*Jv~f{Wq_8sMXg(`n*Ei;|V4FA45w(yfYo zH#a-khN>KC-(vH?kyFa$rkdQ>nNCVc@!WYtivAY~g{^;<%=G zeWAt%f}ZUfs8nJ*`1<6d{!^gU9jBj-?*Z`0$_E4vQjo$OcMIEga_umlvv_Y=kaHuV zrdbn)Ym1daj75EU)Q%>UO)ZRFhdR%#4ZMjlB13 z)LYp0)~-AGUUPJhu)&Z#vC^n@=tZuWbA`}DQ$k=>DWB)jMl|=_$Ofy5fJjH`Th(zU zw%pExgd>a4KT?zZ3qurkr25bir<-vtSXj*fZ#)XA2j-gvr;tni*NU&_-Nl-$42(KK zrLtVAA%){>FQSK2sw%liC%y|8aAn}^PS+q2Z)VH61nUiqKdiTsB)$o%i$WXlbG9@O z*1RIuwNgW$W{_|-AF&?k7+gx4*j63ePpSII4nmF{1Ff0J6#pLHy@s&lf;$tV_cOjw zSy5RL&wI0s+X`Psh6&W(0!yH*y7+_lB(HFi;3}vs1eO?x&mXcM`cV5>`r?Pv35r?L z@<`i>4S#aD6U_AZP8l*5=FB!}d!d?F-3`!NQOV68?qmWCO4QuaTyJ^{EZk<8TN!{L zA?BqZRE0vzAmM%JWnCa6-&RE&(L^5wfcX5Z+9Z|Yh9p1Gs!7~&u<%%6)z5v(s66M& z&hj;;JWe%G9|zk{{sgWK6u7UPLV_P9zW_;Pmyi?cl{)D;z}(IQ?4FO7UZ0C74u|&^r?AvE@|!(fRlu_5u;32(fcw?M_Mg^9zl@iZf4E^19YO* z+J#hbPr)0K3nI3Xd)wWM>#R}kWn>R8AGDN{f+Jn}aG%-1DtcqnnKQ~+fE$h%9i3G1 zVv5+S?vk;04;`!37tTRouepRZ;K@!zqtPWN9LA{SH*!d#N03_LbwsMPVxIW=Z+bZ}o|m%s;FFQ`c%Zn1M0D4`{=>@! zZ9^M7-yEeXM>tmbfBeBh!KHTb-9r>_GSt2Ky`P_wDgWE=*i^FFNB+j{`n))uRh+#F z_|NnQH>#os3zl-By)`a>=8QbYh*4M0Gx6&l-oJ%!(`e1Dv{<;iUiHOs;OV_mPOQ;G zhW_h(u58`T!0=vPUCUEDP*7jm{+01}7yFM-V5`IzqbWJ#i&I>IgO0*1ZYJB|)k1hzVu*?_UMq3w>3;)_c;Jo_cn@iv?#n>Ni+Cs7+ zT`X2EC{6SC4*%_qDOayA|HWB?J1108jz9gA0$$UgDgPDCeg9v@9#vS%?Ck8lu>Y=x z_U%fGkg%|%tSp=EOVqWba}q4<$Dbbskg3g$SgiNw+6SAe={$zmLqm&Sr=Mtrb^8*`oSu$@_`aC=UFdeJ! zK~;U0{P)Gp;$8*;$Tj(a3@|D&p?{NI4XrLH8+ds;D>tEKgnKnHUIXl=kc>(!GID>2D8BLrrRsgZJO8hC)KM2pXF>QH9;*p?ob;`_PPv37~%=^N_ZWR=Suz$w8= z|D^AD@`X7}6~!Rgxt5;CsPQ2EQgU#(%mf zr(Btfi>uwVql!&STbr7inhC6aT0loEy(XBlj9?=yN9@d3L_2VXwG6spKVl^6zwj0r&9cM7; z=noTDZThGeF1jW#@rTNloGdzeGU78Oq8UPrL~SrxmIcNLY9dqsl{?Rt-5pv269-y! zYYKVLNUGWXjK{ZEZt-c}?xu1oYd55Px5bo=NI~IkTkiHC<*}uIc+!IxsAOZ_kzPVd zu5j9YD**G%@GMVKhS_7ib#mu^8FPNrWSr%&jTkStr`;&+~s3T;^BpjED5Jc@yfY`z3{G>N-Q@;fZimuK%pikGgdi)@EpTGJ zC0T*zBc{b}KhL^;rwhd;&JWxBGQ;qw8b}Xn*gZf`Uw{8zGFbJ&?1HXx2woHh>mn$O zOES&#fNFA0x^%57r#k^l%M2&SvVl&4o9!QcbQz+fIfo8U+jxLVdttqdOH#V0h%YvG ztSx_2CP=0(dwFc(OkQJ^|5oUFiAX(}QY!%=>@64WVcUb7F-3HAJ1QjQ6}&lWX=vX| zSEoK;GwH4eM7Z?m?gbq`lT4c)DbS6@zR|2Otlqx?zL%}^?Tw`_)p>rrUib1YqUCSG z`IdH{XuY@3(UL;>;+USXmCDw6+5dppvGT-tJXy(dN;h70w3JQuvhX3+2O7|xa6r(K zO8F8M0D3;q*dAE7$hg2URlm4FCJRsMf1@$(c|sZ(1B8JW#VIifn;b^LShu+47#gI+ z6Jc)YOUA}(;K23%ea8#dT;Wg(U+fNEr=rSMW}dC821&~0wxG7pQf1q+^S zlC20FYx1X(0V2okL;3aHb#;Q8#!^9G4V+?nRk^BT;!m7{=JQcRi(XfSG}5BcXihIG(g-BALhXS$I9i!2Ib7 ztz++tS-Yi&y)`lAY2&4}W}$#zH=D6Gmb^=%^!@ur+Tn-4Lqq)?pIP_G_sYGC`NPB^ z>ei3ikXXj|$T?bN_}h`smCSGxXl|H}kC>I3GUGkUxI)&X2V-BmVQ+aS(AjaN2cwZ`4ID0kcJt$dvQ$H~N( zZ{xp-H$>B>9W{;k2p>uW~0r@G21smHE+Xg$%z0XGECt4=73?7QxI2f-OrH|wvm{2dF? zF#5#YA*sBJKVmeNZd-dQl0)6~v+Uzsm!4@TK&>c)UE*oa*SJ+e$`hV`J#$V$Q!(O1 zvpe-Zu-&O3{y5-aQUWQA9=KW21XNJ2wdY5+UD(3k3H{>8YrJPwxXkk598xj5KB(mD zT#@U*7B;$1z5!Rgz_y{=kpDE{v_d9rPuV}Lz#2JRc9_M3B@0KUDAG&3^)Ae78FHa|l z)+A4d=x9EnD(>Qkggrr!E{lxslHEeJ$; z)_OzJYnaOoxd!`INcfJhxv+!iSrP_bcJQv(YZhOQ3R-ceDw2>hNB6q|eCr?fA2%=0 z)CMf+fAn{Jl6Q?Hlu~iSDRCOrTb}sw(05P9HyZd#dvC+~NcG%^ zvo+I-h#kZax;^BtwOZq5w~)xNBO$o^9fG6yDn2=J{h8JY>jT3ovm-@R zpGHi}9j(#mN<@J+V2zZwc)i(Q7f7TJ48{6=se@Vm8VxjhA8v6xUaF%_ui=Ig)=eGo zAYvobU{9Us&>TKLp0Bp*Wmg(GGEtpTI~8kOvD$4>w{|G}o_gfqQgR^aAOk1p^Kz@90ZE{+=LRP)(mq|!o~-}oBGm?NcYMI5BwoEg4h{JY&4>JgSh zG2wTFAZkew#~~*x(&^T@RtY5Fd7Y@ zL{-#X0A$pyQz!VV!y-6U>f76$a;0_>wk91nb1kRCXnz?RWTBeVIXe4mGis$S&sQ;6 zvIneSE2Upk1{^Oa<=pmg0Y(7}qL>PGhZw^w_eu?KZdZtORkx9R=aNs44zoCvieQwa zt;`|KvNEo1tCAO6zfB}H9i>$NZYk&PjzjH5Xr>J{9-jSO+D~c8-Ka!P`QesimVzYz zrk0<&+_sy2n21yOGKl|oYHu? zP>p{%S6c|uQG8RGx;{yqVd+9jq9}Le3uOTMnw7b^zm7z+~In0hV zSU=K3HDMFBY~mh?tW_iLyr;;FO&|_Qmh^CcYwKT4(3kSmk=p%DCdE;htGc3RiaHyg zB`a5`WAMGQZo1&}ghF&gg?i8z{`eYxIYsmRuyWHD|J!I2!nhwho_v{CuZOc`>Jm?0 z6u+77F$1sMS%)4EjtNYPD#cdRotzx)A%570vSqf9`ZcZ(TyK!%E!QIUS`&yn7(9tS zICC4QYWEEhUSsAG3xjW6{rPoV$fAC`uT(I)E>{u2f!_X_!h&_SUus&q*lNgbu2foG z1MG$@;&Myt>jNAiWmS%mF){t_>l2aNOMYss>rdlL7R~R7i%m_aX2~Uviq3$BXhJej z$RjWe>e!o02Ipdq#gf?>#01jW*{{_Il_w!*%8hXqP)pFKdB(-VIk+qxlcoS?X@FOL zEbF_~_CBJ&-kuAk%EJeWn21a@ZlX%P^HEnL+#5Z5RLT4yct+A%G|N`-w24OO&FsO3 zN1&!`Z}gFipg~b@ff$zYn@U<1J0)s6BtGlX?B82A`&22z_PW%HtxlhS5gnO8j`Z55 zTYR(0T@r8_CpW$KS0}yhBKyYZYFFyHAIC$w?HQj8c?g$w8{X$*MFv9>dQCtXfn-|#bFJb z4;-+I%Ek%O9Q0Dm>SV1KOL`To1@!cu6ZehP7nibWCJJi$g|}d|Ps!b67)135X{TkB z0~#((-6LT91Ot>TLj^)n6d#^a3Ej@jYhrFWH&`>eU_U58AeggBov%B*EU|9A9W#N^ ziJ;@7vggS&*GpYtoKs`lM9y5;+iCv?Loi5xdDmFRc4+ktxQk${ISd?dh=T%gKef&74bm*$YZ@51-pg zU?SE(&<5>=;MN;*VY0o>X_#$iJcQ?$dhT7{7ko1umJWxrVjAjSKy(|yN01|*nT4L8 zS6XQ~@VzCO*lWc6_}hT;YAC9+*0Uej#zm8b19{ZPPnO54gX+uW4{UqbZ z-C+;`*hjJLb=G-P`^Zs!-&0}B*<6d7kbumpWrE#0d^L@X)p*9)L|aS?kePv6D$S#% z&0VL45YL=vTVkL`d$wW3?B|-@OD*)tQNz7+!kW$CZZzDmxq~BD_M%`!EL#c4GP8(F zBqrT`E0k=jzr05HF~UfKWioDIbe1QM>o(%N{(cMnG)dsRHKO~tdwQJ39J}nxT_&Vo z&ErMmPwfnuAMba#T_b90DCk##(iexZwqKf;#HsSxqx@{_XY+NG})x*=FhB1 z*K`!&DW{l%hOz~9W(J(KxAG$@t|SpbS}29T{iZR~;ERE%y9&$aZy?|W2t*m2Ye@>N zQ^~?^ANQ8s#9j4m0RbGytWdHP-1MdvHB{8~x6mWBcVeM8To5a6DXBRp^@}96*dJkjKW|~;I=T_ILu*VyKh`goX>xV*Aa6iD~vLI(JW-LC48Q{2l zy}KI&!!B}cK|%FfLjQ$l)GdOnY=@Oh)(9ar4Lv+`|I-6E@NE`i$1`*(Cl$f{RMY#r z_NIvNZf;Vzl_?L~tGcX?HZ&-OTKZ(OXWZpZ57hBjq3Te$K~Ebp`qb0g{CM0|?oH3a zYNS-1-$j}o+EVs`WA>Dne-<@y`5l?uW`=!g0B;LVxGBAF*G*}L^iFIXXZ%S;;s z0mX#jv&@aH?y1JBgS=)7zM17^U#DKuhJ0E$f@_A%HolClHG^P02c8LlEh1!B#;y1t zWteZ9#qg`MUP!TTGdP(~fEZu~8{-iv0(J51*76|(G0A#*Qj!iC(t!ksyr9mhw_iwh z6FF*XqtwS$+W13Txj<_Ke-w^B$vuft`*T&b4wGNgW8k>#aZIdq^FW}t=e?b{uEA5Z zjt&I0Hh+d&Adr%R0tr=|XI2WlwdQXlybVT;M4v$~W7*k((695tN+hKV$C>co^?>>~ zoS!n^Y!}(Jo0{V&3zg0}l2Cvh-qH%J>>aN*p(m@`M&H95G{R&r%ALg=`Ue^bP`(gN zv@fka6&cCHN*{foA zGQa_wKPmO)@R!)sI|~jJCVy;JwH)G3AALtXidmy2WgXoJbKJHG7D!;VY4W)lwS1p9 zP3*(BTNs=J1GcewF(&X$`ZmJ7t}n5JwxFHiN)T3=Yi7NFS4#c_l^H!@)%C z>UP^Oq@HFVBfvF4KbIRE)qb?v_~FHGeD4AlGRHPyeg0 zARTFiZJ`xnIwk5V8WN9OvwWk%YG{lzxX6Bh` znEV4k^R*m03%5P(rIaatJjL8)!c+A;9gVBO_hVC3$|%am*a60w6-8V^k9WN)yPCO? zk$t&p)&LCGt@SzBwc<4u!(&LImNHk&sq~A3g$3u;p7P>lCp1e}(pHoLWzXW|bDZ1> z!}|f&lUz_p#Bq1l)>qv1N)}H!7`q0`t=U75G~3WZU}FXu(xD)aDhf}BM`|+92-D9r zG?Eq=cQ-wzpkl!4$YR@RoA9KHRbtRS7{MQ7BN9 zbFJm>=jO#R9$y)MdRon5m0 z*T~8r{bw)p<#P(r5)s<+0R1P>3ORzICyfRrDw1(H#x}AG4^=6AH&YE|$C}tC(E0k9+a6@jO5A zaKnHLdJlcNL9J0(`Ogh(yx~zdwxR6U{&7bm-IHzh4}ZcVxkA;4lTKebDg|`uKLI8 z4~|^$%83`QgUT{Q*EDK8ly8}nx4VyRE2T-+1G+NHUi~TvF~V%VE?de z?7G*NK7LA5Y}5@`#@PM0KdbUypKpa??M92W6jB3~mInc%n~rPMrF_CJ%NrO;5Dqr> z1=&=wV|(!L20p~&MZ@DY_Xq}Iw;NuAJ=PohA+1)4f7zW#>U=|>X+{I^{qls?m94=^y9|FaWcCBlF;iN|&7q zK!rz*>Z?_kH!0&u24h7=-h?0$LJ@B)g{H*j+B=M=3qK@;st;K<=UPVPc0W)0cn-GV zX7j3yzA&~#{{Vso z9+>}W==OU^16$b$WeQ*VY}&e4sGT>BrZ32&7_e+-k_aVu=@FuIx;ql(r7!;-&fxr9 zVwr=4<@}yLt%{&aR`HPTjT*U8?mJ=1HIp>TO3cNDLL6-Y)AIto1@&pyAD{8OydP*w z90+skjE@h6yuSj%ci$pS-LEeJo*Q-_S|K^mRqHYd7o4BOiWi@E2S=aVAYYkx%lVEy>g}pZmce|6qU0&rr_YMG*&klSO zYY9*wLN-#|9lqJ!NOE24n*^ zcNfxw3UM19#c>$Z*32aNv<16@-I}PgxGMh{LGPJ$<(p(2nM#&nogQsAOp&84bv^B) z>EJlIf{Bm&NwWo2Mq>6Ek~nzZRhxiTVCkHx(r{-=s-D_BX)1@W_Pb$Bs|&-q%(DO7 zsdCcQjjTlYKeYL+(^Rt?o;=Or}f2M@5}I%2Z;SjyOD4sIuf! z;lW7sDK0K<3zscg8f#8T$&UNG(WCvfw4&3&Z~#YqUyLcg{oo`#H%r96v@N?&#ab#FEGxmkS|W=y~wdji+2Z)c=kKx`Eu|g(3@S4*>c|xq)D; z8ZA)wYI?WR^l78oB~n`TNieiMh}mow?$f6fT|=!s40-We)4NROam>r`@c!MCFLL?B zg>9m58KU4-(4Ri#RP(2YyjxB%d(NVPpA?962V#1ekN>#^@$x=B zus%=z&(wWrGy@aOf2Z;L_fKj6fWj{o@PEa=0ID^(h>&ditXvoH4Tcx%CTI){jF6}Z z7hkk@;!kOHU*@5VW^MzbZ0*_QO~XhpnmmXV8`py7$SZ^f6+0)dtJRu~&U)8D@Sg6( z-Mm5yNrh}7UB_=&eG#p&(${(H5{Jb7BlbFmV}VhNZI8kU?Ibg#a|xR38C@~f*4et| zI>)aZO5(^{wf&4NAU=-kyiN(9!2@bKt@>at7Nd);K1Hy_E%Ew5+volsefj=1q%)%b z_8y)4`Nyik@^qslID|zW{cXvake49waf{0wn<*?J^Us27M(eOknvE++JEt(JXBkjT zf0f*IkcnbHQQN+((%XAEp8sOJL;)khq3hLceQG?theTmL{`0DaTtw$={eF{MXQeIP z$E(*KrN1dLnF+*#UGWs*5*w(?(-|T360tnZyG?RC!RGs}jXc*Gg_tnTu*m6VV5*nl zgj{>sH86x{j&m*zO{pgKpXO6mTg`}Dtl#i;(zm6y^3>g#DQ=A*S{`6 zRe!zyD${g!-V$@#d>pZYyRA94e!lljugAEJ`D?Lg%f}4j3eM&xw9Q%lOD~^*Rz$0D zIp>GB_Nf+brw=52s{}zO8!pe|$9Qi$s1WL_FC?V0$RkOjEFme^ANUMDXm}B+yKZ01 zLUS`bEUFJooX>1U5LDN*O*pfKBX5jwI9K{=dM$fAqj#giCKq~J!fNSw#mn)hMh=}6 z+MK(7ls$}Ifzy5=_7on&NTFT@V_7@FQ*a2*+sFO1{r=2Jm-SR=0Io{_e*$*Vs&44{r zmWVHq^@I;bC>Z>UGJ&$jXKu!r@Ov(dT`r?*qbZXF=fegsS8s(fFF&D%ZW*8--s$Oe zY(gmbxoREn0S+DUw&MVM8PJ-LH3)aBVC1s{ouG|CteajMYJ`F`xK6 znK%F0jTsZ0>zhvG*hcV29xN zveb2+mmJ8&^O>h6#(@*L8EayFFPR}f@F;41@6Q^EqC=Z)GO>p%cgl`C(v!XYd#B9{ zUIzj3Xjx)s;X2@yB(C<+wj;v^H7p^m56y{yLk`zf6gl$+@72Z22C1{6!c^mXW@Bbr zpJm*_D}Cn&wF-)$eCv+UBNcKzKjNHJmliZjtyGuzs{bASz4uJJc(xkoFGcOT;nHbyR4v9bGF+}>pwTyZeRho({<(IHr+sak@B7D^1E;j3Z zmjpyIQO2>m8GJl|2>Y`DN3@PX=_WmypxE+m58{JdjOu!i47#|j7gkIZeKWN|EunZl zHl}7^p}helE*dw&9$sux(V?_STv31+3rXz|(gy<-FONZaB-9-u?W7ki?;gG%$|egK zC~I3dPI=t2r+@u^J-$vWZ+d3l*Z&XlF06KI?YAwsRNt_JBCasQACCD$i`2EiRXw-A zt&gb}8`4sap-LO^9AuiLrJ{>v-070E3aGVLOqAcMVC1T`Y`oM;(xy~>*4XN?X%A zg=f-&Uy3%R&G9lG5Ruogm?!D+#@b@W?6^asH73n?N?KYC;RU)I>F`W9_O$p>L(BMf zLDRdE{5DH=eH(0TGOWLrQE0T@8=)tsKAULc?1*5+0b^%2EiSWWpaoP|Vip6`))s@g z{j08fq)YFsKXRH<}!pmxf z3>S5(A-iMu=$teNe*-PeuBdgIz0>lOSvUP>2pG{fW2CCtk)l2m;G5Y|t3P1597`+y z&DhU<6j3Dg;p<@G8BAHV%Z1_x*pGUa`CSU}!rk)re>8Ow8h$%>@DMZhGAQY4NR@Xt z$)9S)a=y+Ys8n`{D8#wk+*7}>3l%!#diJw2&pYL< z)uk$C%H;92(K4VQ+>lf6xIbd`hh#X9yTWf=muSmwt*UXhu5-#%xOAo@awrW%PCrOW#mBu_|U{_W2F!Lsb!D-o^gJpT|?B_u|Drw;8(4 zuaQ&$3%W_Q-RQcVAK%AU!XOVW4QYDIP-?`dLacn8sOk*!-kwN2liO3RbPJg2R$tUm zYQ7I#t__k;S`$ZgE|CD0gG3+S8XsQz&r_f+zQjZI4^La_G8|A45U00E;^ih$c$M1{wzWOBu7PiyVv5` zRKF$|?DR~mQvthG&jx2UKK$nv)rYH63)_QLg0R?HNe!UC>v@H<*rWG*Y~49dB(od+ z5Msx+MKk4Th1dUL>#f4#2-ZMboCHm9C&As_2?2t;ySux)2S{)k+}+*X-Q8UV_klav zd*5?j&f83X(^d8LbXQmXwf&fk3EunL_-&vhPC_`Vh zotUm84RP`Nkw|FG$-59p=>zqRGQgzHeo_vX1Bb%wg`aqUa~#FK$K(n6$xAuD>rf`9 zfc44NyhB_?$|tS;;u?noMSGU6wtR> zi++tu$j$g!~u#K!pBxt}QMF=H);*F?VPM5oe|bRHRdUS&16HZx4E>n+W} zp>u20v@YG>xdxqQnuc;Rut(qa5)L6b@+>&Z86Oh8BvL;ZEO0HsL3@kUqrz~x*rjaLVrr9YU7t&vZAZsEj#g>CtTTNpZmeW@F5)yD$jHB z&7PLt)k3AB_AdPOv3z%L019(JfAETa091q4H)il>=j*{agzVqI&F6&A=$(c$4!4x6 zSp6MLNm{)L`5zDbjIvwsK6~cBjTk6_ZNwfvGZHi^n@FuaNjh^!S4Ool{sJ8>u*K?K zaZ425qrq+uaaNry5Hx(e9twARob7K5kdit)tcNqjiwk3o(6+LklC`J}+MWh4d^E8K z`u5j-9OL!l6ko&-1Z2CeaZkLgs)?Ox1)8|@XGRFiUZ6&sbf}mh+bjFbtg+`qUVnXD z!B3j5>C^6jS86}R`*OoF17l#&(IcVdnv`f6aEyWXbRlz+LsamG`vWujr14t@OY9jc4VE!bisteUTSs5gHqk$;9W zz$6SBTSie&&Md5b*61fsiCNiC&A;sIt^7GB!0nV)o?7>7%cy&?X~2lJ=+gbe>@P<#mMOO5h%!ZEtC@mW5mUeC7$1mRqL|f?B^vm1i?c491n}k6&mpn-_ zfc{G;vs~b7N^p{Jm>!vKk=ZpUSmJzK6`kjl(6g16>#Yam&2K=C`*NroSw*?tH~L&i zY5q!4v;XXsc9U|(^{nFgV#ReohDi6c^XXog(`hVSt^o(`LMV(0+H12bOVp}PLHxIA zx6R-!!P9OV5>n7OJMgB$qD`;s9;<*}^NQv*^J(xdZ!ZrO?O0LvaB@p?!D)`m`Rr`r zWDs6iEqiZY?PNt)?sSUr>SD-Ge_^v~z|PGNuIrwOaG}K7T2l2av-$8m)8@&bo=H6hOd3ND0~?f-v`jx+{@=mU9#dP6q(Fy6Gq3w z3&{bXv}cTgxuu7W_p=ImfM8iOp`6NW<6FvvB9QdR3Qf6oV0H6&i$9+8vpBflnYrTIG^{wg#dWdl}PJ}6K0<-BbtRN zBD@2HC0?>HDm5h)qSGz1ELvqPrAnDnni!y4w~yr|-wz+DWw)eOUP3UE8y=(~;piI< z=-(?D^6M1?5-X^ge#pINx{PaQ^}K|HjT9>z0uLcwFPpiJsV63_Ya9`YuI~^U3&|YN z?cUr2@3TI}?I;_XVcfoTQpbm)cY*q2*XGpOjxb;)wFuTBfdTCTd(@`wn}o#WpNQ`< zSWWo`ep|TR+9UY~^d_*9QDhd#TloqR;9%@VFu3r>n-T4GzaY0aae#A9&mB(@Z@G1g z^Llz?YIOveoqTAw9uFwm3AgL%og};t0_mpK6Za6W>mk{ z7ZZ-O_aegWb1(N9%hTF|>phH~_T*t3A$>mE&U~4AztwfMc@ILLYy6YfG_ZL4#@pF> zRqe1=bUWFi>y6&Ior8PZa*-r7ib{91ENe9Ne87gXF-pzqhv&lG_Zh)4pTPoh?1*mX zd=*>0jkbxqJEA@Qp>u)E#|yuW<3sqRo%zk77y*dlmTS9in~H^D8TsBErIYSw@|t6P z$DsR^BA%K)rTCk)5<3Nj;-}VPV_9p{}&wseRlJ zUL;tquEnPf$M}A74eZDFVCF}Q*+ShWTJk`&?bR>uXushO@P@uac%eWQUGWu>msj~< zMH!2uYBsx!A2@XPLs@l^%9?j}=cJ*qw&=@tg;4efnx?Ks7dK+iju=;&a@ zyH+g0t7LBM_2)wX?I3DF4f;rP0GG!ks59O~dU$ z7nx*1&1UqOVu-F6EHZilUV2jeNJWN2wT+O{oVqSQc`7bFONu#7ab-g{`!-3Jv}(-q z3eNN*M~a!KQ`K@!V%&Aj7SSZoSHsz8c__&c_o<7 z9HuoUYsEAQN32d(J-;wWP!?P-dh;dY1(92}sXiX)1q*VxBGkJK$SnQR$-ttksIj1F zjf-TfYtf@H6Yx$Hj61z1yrw~&67032b#ol+*qCZDGpqQ$cM<&1&VOo(hRo@(hH7=P z!ZmnKY!IT@!~LqPu#juDHi6R68*zLT%PF%+yf*O_JR{Bj^S1TdtkU;EzmOs&G`JyQ zI}9H)AwQiSJ2$$`y6r5@5E!Df2Mqf!AO(2DdG)?uSU9GiFUBKoEVfZ7Ih|Q**wv_P zL;>eLt&=y^yk6|cWCazrz_iw~oMu4T-&x2&KWlr+5F)Q4%^q#K%dXJlUrRP<%}FR~ zmS}-Yv&Sx-t|>+x@v2degOq-KT0AI8D8$zit0-9#9D+)8*^`IER!*X~UH>;)3ter zS-I7XIoI^1NwTL=kG9nG3LtFY&*XA7a8mUFjW)0l*DQA*@sF zw4|8s0k;vLeM-k?e~#(e1GN8lcT2LD4ody9iJG1D?|fKizEqP9)6MIXuMSIakc)S> z+ABJELnc3M6W={i6zPx==L5Fb6HY0miRctyHs-Dw3G>0$T(~Z6|bFGmqptR)C65em~orBVhTQ9-oW;V!M-g; zkxgMqIZUISJ+FWrh0$B$)i-kbAbu%j)rl_JPy~87A4m_@EIS9HECIXC(FH1+l3ss2 zmpx!gEV^X~q|N=xq0j<*I7)QW;V)wA#LzASLqCp&1?1w2jkLFk`|vEWt*IKAPWhA~J4$afh@DDAj9ad;1sh)U{W_X|pT-8bLb9i^@m zTa)iAA@;-#Djb}8`aBrsp(eBg3@2Pj&|&(7oqO@Z$np6d4y&^n)%(+s|GPU9VN96| zGp0oem32_f_5IHhn2=UNj!pyh`fyCk7~%rSul`fplnw};uw6YqU>A(S-%UQlj?P-N z4lA-vpHTfX{Aisp0rirA-!d3SYkNL@&QP9dvm|!?o6fgoGP3!-Uw(C`SUmMV^bgVz z-b|}n$iF`H^d;C5FA^dOxmjZutU4_<0NIf6*}Da3YH6#HiNo}~<<5D!^u50dDMd40 z+`IyWHBNCcIzK;!wkf$CqL#{ZEG3sG{|7UpqfgAP?HT3719O!}5y`yR>Mw>D_|egJ z-)Im;m2f#SGpTM|6%@+*sSh36N%m@h&vcs?n(Z$ChMcu`>C_Wc102Q#n~+$_`IS~L z%+p!Rq8bH=nIOt-ym{i-^ucXgtM*Qa1X;p=c89?QqJmt9E$P=xhwz(1m$p5=JBD?D zmPetZTir)}rYmUZYOtAUHw@(jFrpIH~NECf*%uni;%CxCp4dv5b|>t~j-cwuPkjP8MsqmsqRBJ$_~#-Mi@;wSDNz^QTG!_@ zyT!_wxn(u|44(RPFRnU1Ib?rtln&Hga07rD88wk7u~YFIHQ-6k-Q!>ytH#psK4w zLi1irhMNXGhBKP)Q2I{5c9!NP`9$yBmQCyeF@ATZ7;sAwZhsu)i+yG@Kb_2SLi-v# zamD;J=w(z~oV|&0Ueexc-zh+lo^IDmI*$?(!cK!NCBI_0(xYsLuj0f_=#xf_p%AO9 z6l)?+Pzf&Vat*QVLFhrDH0^;J=Ji!7y(p*7c3)ZX%;hHX`)p z<>co}+V)CjVOso~Hhz)ckXvx+zCqTyk>GD9O@KlqJ2;b=#$(CIbkyIpg^tu#MQf|9 zlv)}>gS-l7_an;#O4+qT%-o(VcMFK$%ZhUplUXM0VtFVDyNW#t173+A z;}}Cmueqo~W2w8HhS?1d=xPC{_I!RQVCUb4Nrz&8u+UIa7I98sH-?s#(UOysA4YvJ ztA1_THTe6(SH>(b6lrKeRD30qaddDN9egz%fGmv| zC{U8~-fP>*9{%pN(Y9~Kw&m^utHS0!u#4+O*r^k?i%BH3alN3dW}=j+8@NeJ1msfE z{3%YgA!}iaseDn?K8$|0&EP(S)I(`YrAr7sQ&>@uTTfIhqLlvw7bjNkjmdjAYpEfjotuh%xVAPi~~3xe#TAy8X(=iO$WQ~OZ6 zK5+3%gw>Kc0Upb+M%SOT!O6N8<5HScqpcG7&JDO-Lp|Y{2gYH61X<{9d(hF(*yhi` z;cw+C(XXbfkNfn>D)mF(TPb~Y;CJ$+Nf?(f;TNb8Vu)Jq;@3kpQO;?)i_DNfRcC!y zodL^<8Tu>mQR-=C5JUE2(Kkhx+op>|u;m~eS1FhWZg`Exir~_G((^^0IsQU)9r(Nb zmmQrGyxnjW4H_$yB>QuDb^{R4oR5&)OW2x{gEJ|xt0tL`UtN6AUP?{NvGLq^O=EHk z3tIzjoA-BWo!wrefzHXk0W4PKPo%S+Y8batY$AQoCIO&zXu8Z!F7)2H;7%EmLqN6A z#)2!&NVw_U;ZF8gtX+zT5`p0J@$}!X3UGk1n7zN7m+I6P=1U#$L3{MSbX}qL>fE(# zJ#Qr_HkPssKp=ae2%R=rBz!En_A!g3i#i(zZ%Ih}m*1!2@;WStOPSvv zp+oO;ycpdk-&&&Rlt?9TH!+)*^#N@Uy?J^tjU1Q>m2Uy(u!B}VF~MDQOb-|8X^2)m z{0l4Z$jde*O;kWA9viQm{1OAwQ3``Q(rJ)*SIjcE@WtPt`2$n=yvM=s0$5YR4qVGg z3hmyI&*@{3R^?#d#t2PV+&$%Q5yrOrzP_r^Sv^!k??U;g#$hNGWsJ=KcskIN<%^#{ zIIHJmG^2p(=-44Ec|ATjmm%`;z|q7Aa~slY?;Q&5QdbAlRgP1%xsq7Ia6LQ5(j`JM zD~LPt`2`+*bbKq#F8r8FlLT9C;fL%@+i*V`J0 z{xpP)M(RF+3xEIas(%u5o2|?BjG@?Ekyx=YM9AKi&?I7wu6pKNBI+p!q+yb z*DAfV&)YPiL=j!dyE%*+oD2krBFHORf_pR6Rs}L-?=G6$4`5bGQ|@G2vM5DpkEu@F z&TMuY;?7KIb>uo+n zUa_zHPJhm7-dkFIUoGTdEtmQ)l64KF;QxQ=S$?D=$22L*W&RJqw9!gOl-+F$+tcv*gPVued>vso!ZP*kza*G> zJowzWRHZ;Mo2a7ypkM#mkV|jn)FUywxVK-j`jvBditoRsjZZV7;7qfA4#3yXJzOQu z^Qw!fMF{^TXjiKn(E-k$p>|2WBdk6)+#S|z#xBs`J z{6B)D{;m|v%^l|cpDzY$&HcQ9l;bb!bQ86aAN2UdB!-6JS2fIXUw297-9v`H5T3?> z`Jk=d(e$en91>94rM`O@_~`CK)y5GAE+9BGG>!2^O{rPb{^*GD>IA5iT4#$uEE{3_ z*HZXZ{Bo}&#Ep5rYhc$ZV>S6ND<#u?pRRjKQG-TOb4$78O*L*Jjt19jog&+P5HT4Zak{h$uc&l$_;Dp3PVJSOY( zFq6KpSvj(Y5+7Ou&{v>4WGEn_n1QA-_k#ovJ=n4FPr~6&)P!PsmJ-z(Up=67bzzrj ze^1wYY4*a{ReLptJD&1_5iKe%_=3eMkUEyTm2|U$Ui0R}ED2BXaR)gj7&)}b_j$WB zOrz}?H`9)mvuBf&#ckxL0M6dDbEcPE=5Xi)agE2VxV5e?BPnBZUb2yJQJA3V^$o1I zfDxRX;K~MH--n1TpZAf?cpH7-!;-p`%mzcuRAxu?<6c#WUTqBD%^;FM>Mddy{cB)R zE9f!(%$9R~^ieA7@LqUPW{gM9J&iqjD@p~`Aq&V|1^^a%sn>Xr#Pc+1n+u1%7Tu0j zAwD|}A{7cOIK%JFG?`wFtc#XwzTnFBgB~BBvs|NfZkE1n?MUl#CUPHnZ|+uL2T9{% zEW2Gy?QM1T9$6K!m~HTScOEknbU0LPf9&1hX5O*E~Md&e~&Fy2INCNmW z92}i{`icg2Kd8+vpFC;m3iWp3#Z16F6YJz@Q1^N zV#Ll{Wacl{iK=X|4xrlA>Bw$%S8pkDu%&kb*2>JRyq$0&zEbg%ZdN)}IQaI^V9OXj zanpJBsCMcd9r#Ks*HlQH_~H`vD}ygSf!*SGy!Jzl3w5V~^O8){B~p}eW3*aBeNUb!5Q$VC-b_E^%(T-2)+O{_&YkSYks>6s$=MC z4sPy2(|5e-;v_gdp4Ik(AT97ENRNIyW ztBZy8$HD0u&x1I+Hx^R~M?@wg8H6pSzNZY|d3H=yJDGxc8J|>K_Dv^XuRM;x_v)G76o%!sw(Y;!dEqUl_%q?$@;bK!_^MTTVu#|_O-Y9edlS5)|^Qn;y z&q)#8y$Rktg$&JpsU{S&`7s$crp;C(sys@D-R2xq+vhp11%}=>H!;Zpt z1U`PrAy-kZr?SAC$$`PCYYM8H#PZXWG?8S23x`(MQxdAK*5ITee)}p&MvfzcG~!cr zu0GJS^YwtODAqV$M}CVWD5($V-Mh!>GuZ1xkEM5JDR;fm5$|F6W+@BqArvk@JGlQH z=+XGtIli>nC*YTq8B^8hF{2|y@2wZt%gF}cgns2UKIekLn_y`@hlA&-v@8SH@5LF! zhB}YUGNTn%3|>)=5J9>^7G}bU5xzV6DbW)m$M;);A>H>18Bi7(C=|%$F(hR?&bsOM z&ag__702g6LFu}2;7%k1Jry{#MQ1Jf8Y#I%(RDEx-~Cx~Ki(t2o3hmLWe7u``lC~J zRQk>cnbGVf&1WmRmU=(iL_pKheXm%R*Vq}?8~L$0^R&e~=B4M|H{tY9`--=A5l5=k za+YD|;p`+a_Xz6B(Jk9iH#mUBd-VkCYgjB6T@e60th+H|E_0b>_EWLaDOc3MaY0Fy zHUYkeA4qDmi-NZo+F~faQAJ0|9Q1Qo2Tp9)NM@y{RX1K=M|GMWy34##^<>^6eFhG_ zbmUe7s#5L-WFxg(?e}cdoZ;IJb!LE5A5!-!0DeVS*-Ud}1apxpFT>B% z1y^TLw;D#8-ku*lg$tOv*L+W#@`gSaHB9pgDfNj!y^nZh z29xT?lHgS+1O`sHxQ9bJtaGQsm@3NIHg8xt!LFtGxtX`74f;Lzvl>~h#iKf-9tm%| z3z0t+0db^fDet=s2tHw~&uzX>b3#5g)Tv$^HxpiA)G+H=UI4eSSKPB{TQaA`XqfEF z6bmg`a463WDMO}4%jc58bmK$I$=?vOyBO7uG$#mARg%!e0{;1aBk_Ek-aJ(PcxviFr}WJxYqH7q!cp!?9hHKKFIvY zIO2zr^ywg~v_;18{Q=sG7UkdE-z2pen8+$C1OOjiE8i&#n$5`}*t1m($GFKA8knvD zow`fXel~4orx)x_ucv}S2+mb@(jadA0XJQ~I2COL`ZCqrLCA6{zuF>X1G$F5th z4V{T(k&#VCchIZRVbl~RXLKbekCJ=0zn3*c5;D6oflhac%2JR+qTyLlw_#tW_45s_Fd@1&A$_tpajdGOv>eHoE^ zjT^tG$T#`}nX|I?jGFSX!bQHD`<590N3mVY)7DbCEuqnYXo1Tjj@WK(9L1HqQ? z!4Y*w45s;vI>NROEy8ByWe$28j3?G3RpA$>q;rj&zj~x@x{I}BPh%<7nhLBS&ZYUX z;nx?K$IX3jiJQ%ISYBDqfjVVunTqy%v`ibzS@|FwAttaaT_P{>w)Z^|ert0#oROC} zc^^m2j~!whMVCT^Zp~HN_vJ{A+q<6_5^)Nx8=Ks9my#nWcTomvNv_s!9A6i?1#@C~ zv_0AEk!!lDq-!L(3;Mi>&2GTXrmbNm&$pEk$G{dnb4X0FUK55l@N{#`iDI}fb$HvW zVPq~MD;E)wH#oeZ`@6s}`tl^51!jPGNW+huo5CFhdKJJ3$u-jS!Fs67_OVtfTO}(b z1BW^lL@77Vqfh2@30Af7c2w-uUA7RQ0&KSEDV*}vUp=(MJ03E#5;t^nXB;iAtgo}k z=6U_LC8OS7n>$F4GmT*ypW+^ne&T~#_t1G&czt1}+BE<@$9PX}H&U*f=yCpRz+gvL z#&)SCZ`aF*2>=9@FtZi9 z{BWW}ZyUCME5|RU=Nib>d*3gLgUdy?HMIo9fQl+2z}rZ*=ESt;^S3{reP%)O7lD|H zJ(mDNn4Qx_o0V|bz)y_}icw_SE`^}lM&tyQv6sH!-NZd!FIG_wU)h$&*F-+@KTY%0gwsKJXw`qpHpHEAUeH_ARttV8gJ(1D2K_zOQulCJDGRsf9*drKI*?|IDlXL z;zP8I&-xJzAj-vHzMKA zW_cOC**7&X>3X@O(xugf+G#ml=m{R$X2w`vK2EK*^(!-EI~uGH2dtwVh6W{$s=Hn@ zZ)SD`W!(FVFvVXU%eWEq(&3*D^Lm6&sSy}t4K9zdvCE3@;_@1jtXI#g{cZGOWwaSB zK=6k{f-5d7$u74zJ1Sf03=iT4;mp^-+ve++u9%!yAxKD%2mXX+hR(w^whBX*_nhM| zcb`lLP01RKe*F)3>Xv!MM!b&Wj|s6r@Udf*`IdtTk0wOeuf%$}|ME#~{zWl{(A@GK z_xYZpcP+3TyhB6}AA?1XF(%`Lr8ufJx{~TUIaC~c2X>lGMoQ1m1bJ)^T!EoQH$7vYU+`ASRMpPcl=*dn-)D5Wv>@keKIS~UnXaWemy?zZ(;={e1vuk& z3}{$X8Ta#IA4Rs*HF?PkO!x2veB6jzXw-O6ZgY;4pS^FzAyG1RanaUtIZqB?>0Vih zUv)`6jvb7~N{!zQ1yZJA6=&rW-m>TN z28oze35MYMR>U9?tO$%=cEGX!EPXqpWVgeka*qR|&P=8tBXasPm@jf$*q0=|0$Dy; z{DZM$krrE=35&=W+ykRk0=s#!lONsQA zJl`{{sXv_X!j3+K0yt8#@iPa+U|Z8H6D)Z#Y%7aT+0=QS^pAF8Y6}S_$X5d)5QvG( zFK9}Z4G^TqS6q9}-ru>*W1SB37`dF3V{iXxU3Ydqi_i2{L960+Ii7;_s7oJu&ysS~ zp%L5!|9Q3RRRd?y#=^miH-Xg%OwoTCmt`*7{w4R2!XAMfJ@#&n?fD20M_vz|6n*Ij zYuv(AQKsl}3?Hxon|i-P+|1V3r|b{&^r)zuhUjxpPqF#{af0eUWoeo>9RxG4AyP5q zvLtTSMdlSHX5_%d^2P6uI8ib2TbpaTU4FNmXk1sfb6fLv?8=ZiE#xb2-IQ*F*W{CM zLK-MBz%BufA6X}1RtAM_Pv<(R<+%3HkbFwVN3*{UI^EAlF3gLATkNi#WN$O5j5I&fuy%pSoE~I=<{Kfp8PU&;O&~(% zmxrC_Ft2Tuzr*b%S*f0!hfFpq8O$ETIGH%7u@6r?n?6pkVQi2{ewVJ7<_=y+;Wy+L zYmBLH7hg-;+n5gp-{~8x`bYb+Qouni%K4m@fNF1UM%kx?&vmE@?jc4^ph(KG#tm+-u6*x_$fLBKGY{h;UN71qJ*# zH-uwu@f%Y>w1k4HkN``0?8>>s{wj%!>0r*B7)s4e`Mq^!;?RR{y~qEp#l3^uXf9v+Fl=+sNwuaUi1mGbm&J z(UMlcOYg2RZw%cCjxyXz*|m8t$6>4l9K;4kr9I@3+fD>Xk%G^k)a8ZP@91_`=V9;Q#nrZR^X)`UK0@z46BCynZ`RSP_wKnwV6yxN$Vn?^G6Rsiz zQ6rOjw-4MHkCRCyczUKv#gsf>*JSRV-@)P$^^kY6W{?tmi(~aVssRl^j<@eoJQVt? ze58MJE~79xF*@I9jpMiT6LV~V?sOO|(u7DLG=1gOb2NR$Kmn9@&u${)cLQs<`PhsE zNcX_QZ$!@VlqnI`Lnk2Z6s{l486p*TE0`rzW;+x-hg{kN7LYtnHK{jQ)1TZDnZ3@a zzAI)IkkLlh*WU_ikXKl0LSbS6UlL}=HxkGwlq#BpFD#*hw=wp`K@nNQ%blsKccRAc zHCdXE`hfGC&dL}#D@tqajG3cCB|H3Z$sGUEAC}TZFNSo188!0>c^$*c946XyvX=`9 z@9&5vUb6BJCw3T#JloSHqG~>(EU;OZxewh~lCp_8^>yN~>Kp8t;Z0ej`DOTAKWE-A zj>6qvxq0}wr=Ri_^`bA8!MT4w?hf_vt3I8#t0-S+3cs%^%~xvwxSUZHfb9eC_dwCg z1Fddetp327`0A?Q+KPeb#z-gA2dH0JkdGI?U-d~?;xfWtK$%v^N{XQ8sF^RB>#fW&0nh@zNQ_CgsvN|xDK-BX^>k@jtcOy7=~uydR-R%*7VXBU4^@ckC% zDdj~c!_N+JI@$E)`oSr93q6R%hEcR_GP5fKaV9B8MpistAtXnImd$a1V;s@s($`U7 zL-Zn`0;5veX6DoV(Dz=%iySZ|dySI@tu_35LdEkaWE~_kL<(+K2yCbl{;-}GU~~d^ zUZc(M0ySHxL^->P-s+m{x_6Rbq)752yr{`zRMcG@{ZdP2u@i}nS81g9>f0Lyu@R}C z{WnNekMop9K*6hAjs7f$>>?Xcihe6Rw?gt8eASff?)K`vcQyTEFXW5K!e5ttq=*Q! zkxG^%Kc62|l`cikpbHu6Hz#<;DZw8l6^u2Y-%~D-qw(+htFz9HjLTAvHAGrwQ&^BW z&>4gLgTHa*a0RRG?QHwiFdWFPks?-H)Z8<7LUo0gO)mErnjUKeuRqOgElZ@SM0rvt zQeobkOENlcNxcMV39fd_VGfMH9BN&vr)|F7Y3mK01kzaIu>trp$203Z*L}P-$M>qU zNkHH92pIL{b{Tx7Y5F#+2>J1~`mqwpK0Lx*G(70EeEfsRUF%WrEv}iyiyL!;^SDI` z7#HxS)P6ziOp>3gw`63oL@u}5;M2S`D^_5k9cxR-WUYV?k z!3B7YWS1nMui*Gd6hGUvic_sux;sJ4;e2*Wzl*${R?jtnBnE2{uWPO`z!|kV zZ@*u_lwh2du!@Jz8}wTk6Jp?e&Aj{(K-w~|zOp^*e1bOx0$D{yFZInQj41q8D^-D9#aSYI4V{um1hY>%_mK@7m%dN|LSA0rd?ard@$=;LX zmBY?p^+kH}`9!%?p5|^oN#_zJY2@!4&3p_IzzdPqsBi6&^&x<|yhHoz(znmD?~$t{ zG-t|OUb@CNZL42-@u64K2CIeS8pOh8M@zYXEUL+S7J4L7a9eqJEnD&3baT|s*uSkU zxf_GOIf_K(XeDPW(lDD_rrYkmAY7>Y)>-_U6}xz49$TR)BC&dTh%e-W z$ulQhbL;X$hQGCzWG`^kyZ#=5&YDkJr!kxUwd>)Mm!~w>Zu`kiiesek@y{mo_s{8> zLO(wL368-~fT=NJq{32`rwfOrCFzAG`81m!E}6V3b(}%=W!7tJrDYMoX$Icu#G9oa(rT}H)rIB#nw{J{b*ofEaqT|So7J*_T zGnXkCz|^-O|J`%b>PjxHvTl9qH8>xt%}Wdsu8i)3F#OPZwf zJzBo$Xwt}{Nx_8CrdHYO8{ur2;MfUah`eu#Q(qRj&r=7_@N@bRoKND`sa*$1js5rvF=;yWer@rCrS-<1H;vqcJ^a7 z9hJ6j7m+O zz?5$)Df(Fag$_Nz1$tlJwaHA;sN>2^w-@D|a%=4Jcc!5xQ8^rnpR9-y2Gu^QJqs3!DXQ~ zKeJ577w}L?!}rzIJl~Jk;2q&mbND!8ta0wc@J-|PH*OpJE-tHz^{XClG~HFVP%MwL zr(R`B#^W8fa!EDB5yj`7XJmwt{hj|wYV2yat9y1Hqr?rhbIUlzxt$5tuLZ_pZcVC6 zeCylL{H5xVg=EBO+Gwtt`0dHDfOKmWWe1-oRE-!r2G%^A9x(S*^Yp;6Jl(gpbgV^v z^X_F{Q8iDbl4*cIy~zQ-%S7U{%w=CaHnG7(Gh{p7D%bi~baV_BaZkQC94pFblZ$+2 zzAwfxKS@C16ya)W_5AH4KWT&&s|spQtjfehbj~=JM?mA74zL>XP>j(XSt?aqL!3U| z4zKu{fkjO~{p)Ky0BPIpWgY6x?U+bv+VLzG@z^4i6t_9MOK5t&i?aFMFKOv&J5S9+EgZ}WGKbJaZ@yg z8fdFBQ0*hnFJWyqE4(I;Fez|EJ5=}eo}2n@zQ-8oEGY%b&iOy|8lrT@4`z(n8-l z+5x7YJmd68xSt7iHBFvOI~-HvG@S^bH7|3v2pHkSJ>={B$om8UQ`NCawOoD8YpN0P zb+yl)yqYPbcIHA$7_sWh+h%ijFDXW42{Y5#cGhI7y1P-teum4hPVVlLrVq;8GaYJl z7Ki?-QDSpT1uK`{NmSP$_hE76$4gOD%$ZltXI2(h(E#%vMTf! z|5~ma?s@R^a}~d$I~RbxD`|g~j+iW8@Knvxzb?|pgaQ0(ElW>(ej1qK44Q;C{E!S% zmC`yRe)CY}(oD-OqcJD&bt_{_e0x8Gy}>`fj&A2rSACn<@^e(WJMB zXwQ1R{M;kB9u?l!##&v)ib1$@Jiv3#>$2DLHQ;A7p`@c1YymE|Ef>m5C|Mzwi#Z@{ z*Wf#Jeu@X%gha`1_cNdLo1y!5%@-&yS2Jg~CRIU4Ps;^OjLjURvlG#IBcGFf6toc7 zNmaCQ{#70RCGz=BkKVGK?cs^Uly3tydMtz)cz>wqke6VDq#Q(%3p+D#*r$m<>=}9P zuLiOHsITr2UIzFzBOW^b8J2cHdF*DKMnIQA;gxFyxLy5uU&jUpzs!=`I!0dHFMLdv z?0KYw#F)&BD}9QP>y=^u^XI*T33`6bm!fPruseq}{DR|8bA;SnPhlKDgkDPXT|;s0 zi?)hHa|skvB9tR9LE2%yw)VsUA7Nz%<+Rr?yv|2IVePAlO3Z~|<&CoVSSj+xv^dy$kt!I5=3+LtLAT&%r2BV~cUojP& zc_8Mbqy5|Os^C{e`QKq{g_vJL)JxwQoP{=>fw{FvG8veQ9dHIEHv?>Z7$#m(gBR-^ zcvEW=NT1R2lNeH5uLk>7QE=g@y4IaHzpD%I5Mb+3H(<+ct+)SGb&{3tBdzwMg48O& zlQ9?}UTRq&AXXxl%8yfhwNP>MNyO{u#Z9k=8RxAZsulmn5?L&e5wN17=8_5Can=KCabY}HKkRo%tawuQ*n^w%E}m%9PB>}zjLe{r$Gg*woOR06Y~WLvDf3By&deZPx`jJ&9Ohqv(emkL+VEZ{G6 zm$iUYgc6dSFMooGTh#6jb@s*$eUtsM^iLGd~b>;U7#4+bI=nWBNm0W?B|9s%Q_`&FQpH(!K}* z(n$>hi2B)%)Z+CDdV2Z&UzIC^TexTGhYK8VGJ4}sY-563G>pDO8zZ!D5PWuG>DqyQ zjL{j+`?VNzSwf@8zv02e4wIGS;I)0+2bzgKIx{l}RAdMV^*puI+NewBz8wdVrg*7M z6Vo|)(|cuo6ANiWJ2Z_=FUY-as??QI;g^pe=#*MmZi+R~&Zpgoi^JKs6Em2^T+Ot& zJEB4dQp{Fl0_MD;Df-5)FCPiww>$$kZGM9not$zd!}kYEh$~ld~jTSj&GKV(z|bu~+>j92ikSOOyEjQTNW>kv(s?cQVn$GqEwz#I~J@ zZA@(2wylmQwr#6p+qV7m_xzr<&TBYp)gQg9c2{@xuIjaS-JkoqhE?t+#>!calP^iv z%YTWX_w{rU{BE59)(?(!6u9rWqce{3V&&{EScH+;8DkdTp4vwr%U$ui?a+E62p*J? zJ?--q5Ld(?WHkj$Qu7gAl-+X&P7Dnl((Vmp>f74N{Q-%OXMG&K7Yw_|90s2VpRAF9 zi7QcJWD}DXiTp51>`losK6a$HJI;r!KK|Q>YH*x_BdRQpNz<5awGl5R=7C73!-cZI znv(Vxo+|bW=z4{hF9H+ssDB@(n9yuYFYX9d4%UX~BJS-*?U|wKWkHSDQ-q2v)1H$D zVGwrH1X&7oIm1Xw{`S|yf?Z4XKpzEPQrdtfy!J6EdwjSft8_=*g6>cfR#Nfj8cBkD zyB82ceFqy$`sfF%F(ZVVLkpqmh~4oIVFPy0F<%}@XuqN$CUN@Rgm%W~&r7EpO8qT! zN_-OT8M59ec}?LrftOSLq-7)uItG6tT*OkH{fr5%wzWlZm-;I3Ya!MQ;}d}?S?q0yI^v^1 zouoH1RJ3#fkumvSN^{qarAHH|56b2-aVoPvtAVg0MUNCcc`1=+Mc3ni4>S9r`mYT) zsj0ZnJFznGH3CBg&Qv?E8>WoSaO*cm0a|g`$)3JNl8DPry`_n`52n6FGc0nhTlf`iE zbvra%0t8!#;;A4X=3;ha9V^iFHrft^>Uev9&n#z%OUarg~`^5e*YFQ@iYT$eKbuC1`yTqas2|$J@R=Ux`|j zP@i-TlbM=BV&|p?$Y0eDKv2q&<#-6|Q}#%xBjKFanI?{e9p$9oSRXP%uo zsqVz6i&Mv29WPyN%UnhAqj}zKq2_hX2Y1zH}GJxMw37 zdhCKS64PNvv~iy1+Aa~XTjyQnchK+ym0~3-c<+^~cw=6TFfw`=@b>oXFVFvc%#h4; zw&wD`b0=#c9>?SqjjiLK9h>z($m<`d3%?X8(&&K_MU?5K8AP#D{FI^)(Z#BrM>%PG zM@I*S#SC0La6@mSp_?*7ZjRsR<4={wcc7FsTpmx`FH`VQPS8(aIonsf7pIptnsE)= zDO+m(!e`QBdytk{e7{^tk5LVNznzms+Ldeu&X7KZ6G=D*ZIBVTnaR}|c+(ZTqVKGd zMLiF=&F)&YbX?Fl_)0mXTp7C#qCY07Pq#WkZYXgjRyc%I;CtN+naD1I*KW8yjIu!A zN0YF!#sDuWOU9QcE0B>K@{n5GLWGtCxQ4}M+Ci45XZ6e1gUDWH0r&pXH%8H%P+%gb}ln1=+n>_!Ap1p_R< z7n;Vp?e-Z1ma}DdWHw}~bA@&!44hb=$i%0|YXQO1r;1Z$f%KO>M^vv0#8n~$MUFM{uPQOZj%=uKkF7*P2^Sd#_V`|*vTnkQ7RDs z3u-ge)9V3lJ=Ji?NeK(1ztN}c?w`tN8*!A*5Z@nfM_G?TvEh){E@347YIY>y;z^oM z`=Kb5RXf5robn4_eya5sqF|TLfM{?$2D(tbCq%k7wc#~E$?xe`?ZYdV0=(92 zC_j4cjl@%f0P?Nl=aU|7Q@U*K8`+44hPquXbUl~G)*J_t0lF*_DzQIddBg8it?u`E70Nrcoxtb(Fe+ANf%`a#V~^{x+` zG3Vp`Y+O+-boT#T?DL(bDCe`Al5Exoo4ou`faU=w@py7pLD;5E_`4a^HPhnmzFt&( zjiDM0&e&?c!L4yDE&To&Bs5x`Pqx_kFLDWP?(Q4cVy0T(zJ25H{p_&6<=_3fTXrRf zrIX_u8|Xsu@%14eA1G{(enELSz&9Q+edYe_^FlQv?`&A5gje6k1?(HbjVxVr7T@Aoy3&Axt$pSzifb+pDl^mvhgif7-Ijxw(*)-G)$d zcMXE02#)E?Qo?4mN6j_pLnfRn&w{i*p;YZ=k2wjAI>Vd%N60Ud{GwkT%D%}dVs}eV zR@=}&KJ|^$LE9kzcu_4_Yle*vyIqjQ&6fGrWrm|YEwB%BYF=T0{3UPW2Bn_7x}y|b zIH)^zUo>UZTD8{=a^!BVH>Bhs! z`LgG&ZCViZyY(Z_Il8w%cBFxHtc z%`+>6UEa~irr%Kp+?4wB+aaS~bapa1JBRRr)t ze`lW-(6w@80{ew^H5!VQXoigVP*OhD(y-^~^Jc|oysLW24?J&WH_thSMC3Xxmn>O+ zqi%IXVyiwS|K5kc>&wJp?(SzO+?g@9J8q@f9l3(3r5g4&xBe@glN`s@o0W_cQ~mRd zPZj;^i>`_29ems_Bt|yZ4D03%?olm7?XdDj{LpiYZBk{r|D zUVQ?$!Y>s$wXO}yP`dqEW3A%_(f3m@BKw}N!Dyb3H7If$;Qpiv^>^DW{AUc36g-oG z0^&-=;4kFcZKE#jTbvyJeKUYFZsJd#$Db)Q-eI8~(RZIzjTLKuL;AKlkyNAXA$Had~X{)P$O^&Dn z5^?Q8ahP)8-Enzml%r;v=U+qH;Als%p{e7~xuj82ue#7wHX|l`M`%=^&HkF&POS_6 zq|G~K?5`C^HES1YX+Ty@V^ja)+$P7FZ^GzxE5hYj`0I4@1R;CISH~?6h1P)-K2L39 zV_%n!K>2*PgoW@bwOq}8bE(zlJ7eZzcYi*%_lf;NfoJv9&EU~;$D_g!mZ{xE7rU)j z>LBxLqJg3IHQU~DY-?umwMu5P1*v1*@a7`4cyo7kq<{ft-*dWcjm_LJs5j#7k9!u| zt&OS!$}tQDuLc9ENOEZ1&K;S=?R|^L%4l92f+2TbnI5H_J1b;yICj~cE}u~zwoc07 zpig1(Iu{|hCykP4lih-ev%S@{!s~+%%!~lP+V|H}iBD!4gaukw4|D|FG-(TNR+yzK zllO{)j@q3B`#dcr$Ar@Q6lR}Kg(|EgR)y!=Px#7HgMn4%AXh@%!PD?)=QsEDznd|Q zA8%bbU(`5y<$Bps6q_97>1d|7xE0nF*YCImki+}_72b|m)leRHmv@F5ymj7=y8ZXV z5|{iDC){Ip=QlJtF&~**9RYT@KmMDY?OEs8A1nN4iA_u87&bDGkQn!f+jp4!Z)=M@ z&E7`8c)2v<>JL>+x*vbG(@Wk+V2QPN-z+tHiP`c=pA6IyRgkX5AZP1)MNluCoITsEt4VA4V00>h#VZUM z+b%S|`S_k-H@MKbE#sti-j%r0>~$rnwO(yF4r%x%0O ztd+rg1-e%!H=%}r>83kTg#4btlHsXnQafev@Dt;U0Nt=d1gF*uCT6^K$)17i&*9qz zHSbTGly%WTm?yG4Ci=f~V+&Cr^I=-DqLvjcEX+=b()4CKf)Boxkv>b^@$M2qDH(S@ zDC>)6^3Vg@&N2FishnGxFzB^%I zKZEFtniWXSY>H|wEHyo{`Gdsn9mF~$Q}%4N;&8}^m_be0)$=UvQso_D9iabUWHnz- zlLW8%*VxlPr-!~p<&dhXB&qf;qlb3K-!Re!{5zMaFx!^Z0{N6Aj>DKC9WEt&YXW-3 z^?(XT2mI(Y_DQ-M%eq9hk_O(gE-mFl=nDwuX8ZFWrJw0|(1rhU!?Vt80 z-ZekpyLM()%o~{Z=LtTNVza+G3QOwPH~3z{g21%U6lsl*n(J<|#5vLt$9|T(zw4XU zAua6U9z-T+-XeQV##Vd(;RFWBtqpAFBB(wQN_dPDfP>Uj+2smZ@Eb+w?o=$eWOsW^B+*bd2vySGWXO8_}m56t%H21G>6$E3JC! zAM1BUWr)rhkFZ$~mGPER93VXN{0%0Klh_{-Ml(wqw~e1Sx?Onn7-i%$i+xK^vev$h zF*A?U_nC{)=P_;U-fWD{@jR5`+4$v859HFY8nc!BkH;dWQ|dYnrmZ;B#~-e=UJ%Vu zok>uGySBuFI(A7i)rf}zcOK_RPC1ToKxap{uhCI8eAP`~Y`N&jqS}5zxtXS;m)A-V zP#y4+d)0as4{Xtpkk?xo?Ru9b{hg{)pJTcFV00K;%7LdjQnEB#$_#`-%ksE8!QFs$ zU=Y>RllqKr>|pbu(1`g+YyStc6ooVk(AQn1>3TXI2Ds}muHE1x%W^FYb&+vwIfA(CfhQV_9qDvc23M?r!MOqic7~qCA0}4eO(g{eaX)+*VmH9w`~m9 z#H#L)E-Cncq5(Yh8Cz#yMou2L`kPqWv4N#YuNmKBXfoDXX#EBP_ERs9!i@;=q>Yak zjEydJhPiFCOqSRG+_x7gYRUpVql=IH2Xo&vuC-fs8mHsCjoF@LZD8d|V`e&dD+%o{ zRnu7J73>V)2|MfJ1D&HgrKLQ|SG-43jyc5l9}cwF8=_44ctr72c%E{?@6|33Dm_yj zozJJ;c(Ws!E*&hmJ_`@MbUt;v)~+Uay}cAp$2q#5akDd(+#ep>zBP3`5GNwS)M7dD z!)MzJ4}PFS4n7+amlkYa+jcO4e!xj*9D#sPsDxGO^L1@WH(ONIqDcb+f!TH%?{?JG zV&uQ;w~I$GL=?^=cG=F8+gU3w2wr8Fm&Lv&6SnTroye76$Q;A>hi7~-0QI)8KgB)7 z9q@#YNJEpeLD0@n*f33uHhbvvGVRS_Mu$>VWxkpHE#8%}Yi{g5f{NU^*{ic&NLDLj zp5nM#T^M=1X^yE7CwHlgWOu7y>=+i7TjckIT!3QXXkW;O{j0Zh#%}aE-($P%TWXWh zbLRYv+INhuhp#~qKAQ=hRgy^_HsA+z_itf z;}Ny0^}PC;bZ81Mye+LCck$-6cgTZsy)T`MCW43?YW9`uR`$wd_O_nofougzjImXY z!^Z{A$OEx(rC6iEfjx8Glfl$1ZpV8=NX;$CwQIAVV8ZQjhw_4jOj7uB{fTk}oT~e1 z_ett^MS>yr3``kV-Q zSklw>0yjbA*asksKOTN%v&FfFZS$Qg$*tp^MA(B%q4tcri|~sIH@3_ilR3c-{cnb3 z^-<{doL$ORag_1oC)c`XRPmMY<)mj^d(d_oed#m6q z;nL-GDs%#(P7tvB3%kp^dgSeNh%x)FJ_&#qgZ$!l@u5cWNy2Zt`ifjP5B}z{3U=lU zSGvE=Oz62Ba`EyWK0DQHFAvAo7%f2k^Y=bxTJ0>91xKkDMU&h%2tQNv|3Xj-4dy}(uKXSyN7rtz8k+rgj}eI2=j z1e|xKqs;g3jV4>gdUv0*cP!7&Cj0%-GSqkbJJMLE;vew~(q1RrK5b@_`z1R(J8(oK zM(h0@35SvkU7!|oq&uXAZ4C6`xMhnj&nu}Rnbk@327s1z$y`hIi<$ABf+bt!&V#*- zaa6kFR3^mnu6%D-YrVU#26V(Unyz<&3cp`ps{EUw7ncv6)D+A15_Nj04!FgN-95?! zaE9m09d1KM6WMK{=H!ku%JTvp)U zC}Q5kFzeN>lLw2)3ICW)bQ&K|uDRyazo;vL!*8?N#Ue{oNWhmAHB-HT0?*@x=;fH0 zWhJ4@&Bbt;Q%?28SEWrq%{e?x?Sk!P(npCJ)M@Sw7_mVj zy0G6!O`cmhQ4S3v@L+DNSHGd~-ePRMhh4hWqNub6B(F zcuI6P<7YcQpv3C*K?C@#!GE(EBh-^5;7Q$}R=0{EEzn!@8Sd0nzS~pH&+L4ME*-Fo zy|q+d7&f00b5W-8*bip{LV=46(U4uuMpIVawsjg)U5~7c#KY0!!>JU(qN`=Lkvj2}zv@#G{ zrfa98DbckQZ91>3AvGTde*||#mo1@x?a<*``X@P(E(g19chrnAVNp`@-RjqSB zx$IX>3bhJTQVc#A;kOUKG(c;pY|59^^MblU$G7%k$QIWEp1IZSX1CFo6Mg--wL77Q z0`@l9!Tsa+;)LF0@)p0z(Mk52WNVLo$ZlFs6(L?RCsQhz~@Tr0?s3s zZx)bgmg7f zMviLVKgS$mK3meD)?}|IGqpHWOapBJdQ!v}P(Gf{6x>MXrmykeNHH)tSWQoVFL!6l zEt=HX`*2}Wk*afXKse-kJpa|J$*I=e7>yAQ@jl}@o`#QWXC$44A05o>Yf+hhFmVU!E(%k#jin%j)5~k_uPc=*a5}42Bi=P)8!v2p-YJ){r%3hyUil(E>*{!gj(x~RDo8u~#efv!kORCZdlPasx$dsn`aMlyx#jB4gNK&~ zoU->P-?Kzjjn62Z&%|$|Gk<&@UTb1G8_HZkrO6WjN(8G1&b_9CLj=y5ioD@*p+#;> zNtj^>lbX^r{W5;!Z6wXh3j+5P!QMp{c1dMcxDC3aIg{-5p}#f~KFIu5h!SHg+r`xpvd{a5|l;-t=2hFo+u zS8$0XTSIMnxugv{_ zO;w{w+#JcnIXw@^s=Qz!XcD3^_wJ|zb)cbUy&#FcQV)H1(L*YWlR&sbgo#|TG~RKRxk!^k*Z9mt;bkoOtaNmMH(&g z3j-%-gmt>SuLn|MqIVkLe97W?k&wasUAtr);cLk_cLpo@g#-nbi8J?n#PN!^zrlQp z!Fn|@iV(p81_~~nd1LFP#a`&`(AAAdBwWN}uUf%cpOuwKi)Sy&5htBPBX{1igq7vB zw7O80T2Oz}EfrHhO;xPC+*(BL9t0R>R3kdrj`|h5O=@V={G?yW;6=dY-_B@y zz}(jGjoiFP6Owg)1B1ZeI&c~5IcYB5gGL-uIHinkKIa2%HXNV%ioA?TLhs2qzAHxO z2MreR&b0d%zj9Tpc4BM3VqYjTqPKpzKQ=fX&LnLP5vy&>D4ZyN&bUrSDp}jgE9d6? zD95@Dv+G1clxLsi(o13Cl=Q?pZPHl24jDXJSfJ^Y2@THInE$-F@oSiIzN|^lZf5^k zrdeEP}mUW|!LVnbf*AsNFMAK?NllDoatYv|TZaYz{@|TRp z2=Dt>$S$e(r&b@*K+6eTrQxBGR*gzt0{@t;$UNR31{>8VM41ZQ=vgx@kD7Lfp$^ec z^Wq_3L5q0sk9ml0x%K78^ul66eA@J_{i2fY=Dq$Ge8Pr(Za_lQW_f@eO#4ms=~oBz z>6F*l3wHnV7s#?x!`sgzw(6PeiJk6wD)Dz5t0+9v(U91}+^HcvmNGE5q_XP$)wSppDZ-1GmH!PeiK51DbGXS#?C0XIZ@AX}?twZ`1 zJ$dJh49&QVRU8kuB=w9;zp9uvl)XM*ft=w3r~-|qdzMDk?3Pe$%;%%Vd03-G6ZTH8 zTRrSW6`o+=uGo7F9hNQ*;zJI+Jwly3!w^(<>pB_Ckzj>jI_uVK4hnPYi`2Kq1Fh(kzv9UAZ&}0V@nj-q#Hr+a1nJ(R8-ZmFlN$ zhiIA-Ehhy6#N=1Nt%}yj?8}_T#Z z>^|AvuSPh_zvc&Y%g2i6h(>w6Pk$4YO&Ktv3abDTepsE&& z`qsKlH}Pi4fIgC@8)u~2q8r1#B_4`GpF0DI7GFk+CzCVVEEJZBupuS%)J;o{%HRm>dCjHYL3xh z9NfMu?B0?peE0XPOD6_u3PW41PU7bLY;WqR1k<^2@hX^^TJVJT^J=vWn>9e-YaI7nKQu)Dt+3B16Eb#x>joC2S&0||iC8Sx=> z@&~6DfKXI!rl?_|i`>g!o^|uf(Bce?tI-5HZHx@^f*P_&OW5GNy>zao7o(NY8%qo$xBAo>@favbr(ypc1qB3Md0r$4Oa!){CjK^PwmW< z!o|$BX}eQ)&frRvI2Uf;CP<7Zr-E}Iq@(iEr7#dMr9o3ftD0$XiOA(ML{ARU5~_=- zp0nToa1$Zdw}wT5m%}4bvU{w{yWa*kB8IS+Ka{t#qtFyMWdFg=&N|4wq*Tr;Xxzxp zhQDVYdFda$&r{f#{d?hLAHXrw25mj9SZhimYQqZ~6-Ac+1On$^ejJnS?MCEK&gl@H z)nQ(SXN5~(OV?QPrZ#(zWlS~a4Z$rnyum8#?jA?5Duay;h=)Ct?M(EE?o;laaQw!o zKWD{Twf|{1{6@bTvh6Eq^BQ1K6Ow2@k5Y#}2H{)+KpN2cNjcQ7@b zE#_$FhzsH3e?B6EZ3-SuV8+~{QoNs9IJYCKDUmc>@kleBVdu<2BS|9Kq{S=U2assh zB;qTXk2m2WPbU%ZY8*UIf7mXmA>ASILtF-_d}-gB0pLl`2sn|ZANoySbqjWWO|xd& z2G7w8Q6AU2zdT>{gCQNC+(4IaZ_g>^1NSgd0aaAs2ohAWW9kz#0VjvosCG5X_A5O} z9@Bzp(J|MY^_LT1CBvVzCvrMW!s98Df~*%?LxZol>0JM9g~{a{ILul`aua@Ye}*c4 z^$d0{>1$f4ACz%u^|J{7JuD)cq|%m$a^tiBPNmoNy<6}*!A0?Uqws#1j@bu|Zr!B}Z+MKNB7)nX^&#kM%waXEWzd6yW|mhKc1 zcqDrf?1AkaU9(uL-6aygzUU-k{8}LQz-=YjvBOkNdk>(b-@U&{gdr8kDZ?autB5zrHgTPMCKly} zc5)H*{A4)ObXK&GDz~#k&i7R0F>GrZ?mkDL!1W44K+dbzKpKBE&8>eV?NSo=2;t0| z8Y!&G!o67Y+;%x3kZJ+7|4b>*)l8(lKE+!ZW-nnVXlQgq{lrmoMdnRjPm= zR#$H1>OnA=+-lXXEEft!_^Xd=mZA+p#|ytk<*4RVo3faR`Udfyg8WyKO_wCq)WuPv z%F)PNVBborAb!$5J}aPKU;!L3Y6!y)b>5Y=~n93wOHlWjksiz`;=<;Tw-5>6uDOBIOk5t>AE+!OH0z!1?6ltIF4qSAAZ zf+_P^JmcVhI0$*>B6k!nU>)WCCPKDLekk_Qmah5uL$q?vYj~pIE`nS_cxtM~{w|DN z&{Uf-bO3$SF|&*hUZ@0Qwg16&ztUjfzXje{s?{3yXw6|^>kkdG+TL9V7I5;8T_Rv_ zWM_EW-rP+_6JZ9eMW{0Zu6wD7H1|t9!h6lUizaTQeYO|+@F`T zp#|}a-i{zFMk9z-RTF!jsYQ94UNrVsdUj3SE(LOYTr%ilI_?H@$9)G=E()rh% zW%KpUOmlLy(xM(w6?1zVDUHV*tF&O9+P&!`(kAi6J*U=HADp2m?1tyfJ|&)1YqjVR zRa^ktQ4x?1>oz=yW9N?MO`Kc4yCg#LenC?c`FqP>Y;q$|ME1tOxsv+y7R=rb^QPLB3ZU)$v`$5#g+=xHl^;fbMD?FV-XuZ*q&Mr4(i?!U-; zEh+lfeMj<%jNw#nA2M2Nlr0SN{0TT+4?u-@mXq;XNWPf#KPxf>9Wz_G|T>rbc(0@?~Q46-@nLzas2%Msk5CXq7Y}; z0HW{z6+5jTz2X0RN%XxL>L=j;)c!x)@MY`(fKVyv>!@J@qI@n?bo9$R-w#L{07(8D zmo@5tu+mSt)M})g`3Bf!oTH5)qr5A}tJy#VT-14h37Zo-y%o@C_fVR=YD?H+T_sa{ ze2dVi8=xdw|P&RkK40O8)Z zFEL$uW}_WqG2SKobo))~372^$0=+hWoA@FSiL}~-$#1lpdZ+#}j@-e%j{dXYzwgHW zDkzUQ^XUp~EeDKA8oT!mpecGG@cch3K!K(dxRF;`sZvvh5thCDv$qAFtHt zOn#HQBFc&k_JkRII1s$l))0!U_m*I<)MQt?$bl*la#hp*VzU5awfa9QE>`b>V)72j z?2!u9?WGeYjB(0nVZifv?h7gfE46jbO~zgm((5G{F z(yL9pOPuelmfg7FKd>6%jsN-(LR@X4OLIh+ijL{6b)%o7nAqMsD3)&zoo2mV{5JZ9 zTty-lf2=T`ccr@>i4Rp04gao{<&}N)3d!Kz=WE8i`Hs5E%jRE&zi&k68NY(sy)Dr6 z?P?&8<15lk8*{qF(PL4jD$Nj5Wmy1mPVWkrfhc{S=!N{i0Hsh@M(wU8qAfK zbW%deGoC?t_k0+J)X{eHa1Y)>kU1U)OA!@owd}$o+@Hm;pl0WC#`q5wpYrouhun%K z$$ak}EDU!j_Nu%@TR&-YA|Sh(cVup(qej86i77LS`H1OdNwS~s4W*)Dua6$LWww+( zoB*z&HT3!LrBPkRE1NN9*zIid;2bgzhWRB_JnXmjcQ;q*veP;UoxkrrI1vZy8Qfxb+@mN^66&s(mJA=OM#4pZG2;5*u9T`~cH9q}^ zQ25es6Kzx5m!_UO#+CshI(@-g{A~MBs80`YZPaoORm4d@Y?W}z965OI2z+!LTWd}C z&fXaK-2ovnKi$$!N=G*btM{&sjKKY1V~}a|m!}y3G)ADX5XaYABu!=)6h0WzGaqy8 ze9|L_#)zPn=;h9p2CqGOS575SW2e1*$>D6-+sox$=MUak3jXtu0^(wWtxT`S)AyA8 zCgGEZ8Pa_3N(G7eB*03~YjgIY75Fk=LyUNcmfemUg#XX%w3G7Ix-(RaZq`t$_wY{( zR__hDy8WshfXxaCSau@P_21^Af+jPbPrltQ8y;KdAsnBnh+I!KSLsG5ye!@%m2rAp zYrWnXD0fq_GO9R1J=Xx zxjTmt2V?K7KDHH9FG_nW-y-il=j&Cl2|KJ^YflHoH5$v&){e!GIi>#`04UOVFUgP& zo9-1shF21(bD8_>l?E9GJLa(VMn&-cisWQSRFRRkuGNeZA&yPh1 z`;MM3Gj)IdxBSLpf2cT{QJ!a**zWuzUK84@kAl)=S| zadQdYIx@n|Cf)7PUV9U`@-Z2LSCHaVPrifiOWnJ5fqLbeIJf~6-a=}=ti^|XlYr9k z76Ss&v7qK!E3V7-wUJcr?JbJ9x?uV`D=A{tJczLHwo`^?Aa(qWVSWv@?9tn(9+S;_ zY7{Peruo@|U)1u=6T>fM;EJ&$7W)ai?4JOvcOgP$uvA%xV+VA$_`v7a1Boc{VJLpi zApI3*Dlqo8I0M>LKg>@7X5@LMJhW(r(U- znegW)k0Uw=wbnRHO-X@dMGcXW12^YX}7X(57L0T;K)W3$bZ3k8r-o@i`qg2Xp`3>V7Tvi6(#ho1GVLH*fqr44_DaB zD=E9QISf||;Z~e;e&X-mP6*I6;t98)bnJ`*E4L%_MS_LBtXCX!S8n#J-gy$p%t$>Z z-(4D6)%M)BBbkm2NA!lXZ3!TtIPL30-$I)^@!1XzY&L8P%gGiiA~I5giBiSc8DoF`84;e~j;naq&0heyRVyv=q`(y)3H8}3}3zZ3TEdYP;y zkls7qUGGXP9SbDni#<+TE@WyG7(3(H{q6u>SSY%G)EuGyUq-~2258$ITw@vHxnVB8 z(Vm8T(RO>p6O|*uHbQG;IzYqIq#KNSkO4n}!!q((aAijdr<+Uu2HDY@Q#1-%%^K8JEpJ(AMw`5t$79fIFjss8? z>ymAY#?z~xmw|e7Dg~A>vDTI=(-eQmj#XeKb6da?u35%lp^w!F_q5_Eim2wK#guxQ zSU7<(Rs~+o!D5CH?%;8`x%*YZH@quloT5%bZi=`Vx+gH37^sZ*oUYczEBYE!DgF5g z$ts&Y0P_uv>Ft3~!&@~}ZcL)<#r&IIEb{OiWRE}HMOM7-%GABmuo(M}A977Bb>n_Uj2BUApHF>=_oLiZsnm z$iz1I32#^awG@I~p;k^=-I#qVzQIB+Qz6e+upf*4$P~_OZ|o_XEx=PIS-ld$wZ9>M zE^WwtJtHP9fewYT;Znmcevs+P0aaB2LIqU%D>>5)n5VLn`Y$kZqpR#WS=CNQbDpoY zPYA!;5Qc{HLg1-${$5>KE`I@w0aT3xG7A| zmZ@K2LmjpwG|2@G_TW8*u8?#Kp(`Ap&cI?2I|JGz^dkN7$IVm^tySy!;b0UXr`NyZ z>UnoCO;E9>En$6V;{Z&SmxE{bzM_6(b$3^gp_PimPn^ z-gf(45ARJuhuNw88ULsBKb(CB^K9y{EdK@Zz_qaw$ zGpB9(yC?)eYg>Ewgb2{?NM6_El*H5{`o^!vZ6Q0kcVwI5cye^K+`^i97L4V|966)0 zygh>#&8ldd*%#O^#%zBe<4g75s_|v~30U_FkHtSco>A7dk)GBTD*#W|C?AsdCWhih z_^SF-+$I*#cVA7HQ8q9(8wD-ne77O3(~46m;-Bx{WxQ zqktiPZ`RS|&gcVEym45YoLTcgT&lM;7>or#I9_4YA6L`8JB!4Z;p+D-)9%vu%s8dW zJC#iDp|}{;5B9Lg;e2nn#>R1POtW0~Jg8D6qQhL*p70(Z$x7$0`nJI7aL&dusY#} zE%_H~2EAUEw|^kmL$RCpvs85dl!I)|Qv%LWoV>DIBF3)tMJq`K$RKk8+m8#5PS*yZ z321F()ygS`#qgU$&7GQIwq_{ zFKBb=m!8+sc0NW3>4rmfOOHkIjfh>1s5x4HS+n2ZNBI`XIsvHzY7df>6cp>qn%3mU zY<}ejuF3fFTLBA%j&*Gw@L+!aRKO-iV~z?dgK4ZvyHSOD(8y~g2RqP%;VTqE+5I1* z(J9S08)M)fXSUSGZ)T$atigS@kg!G>nU`SU{}6%yArF;`dbnxW11}sz<#ZJ77nj)o zrJaF+=1Lk{eUj$C-xUb`Eoj-l(Q?bF3*Gla)?trC`n!{OmhRCuzWsTaUs=H_j zMu5nHiG5q0Z}(+ft?IvQ$EMM8XHF?M-q@}v-dLbzNBN{L=VF^O#G3z=K{v{Vl-_!b z|2rK~Z%P`z%$C^7Q*!s-aVHi0!*eV0cW=YAF=ot=pYhiVSwiOLtLzbV!J>}$CALX- zQ1`3gJjJTd8CKI*at&oY(wwV)6@I@2k*J=-@ey5-{roq`&{Sq z`JT@`Fy837U?Yjq@Y>MKL0Ak5iI*E7SeEgN^UJvs3ohwJRq`xzHGY~x-p^a>b5!O! z8p>KNqA>@;IQ%H_=n4O%l5>oWuAaL|NI>_71@Dn!@jRWp|3%rrtJqynRfj%nk7TvE$n5#GL==DOMx%B7h~VY$g(CF^WwWI z52H0J5>nF^pCBmDu4wMekFvd*K_4Pdv^Y~#q73pf3FO$`a-pMYuXCYd4#ef|a!h8b zi72@V+ZLpCb20n;P0j(n|166^G+%UwX{U?R!_7oy=O;&2Ur4;sln88d9@g6{58;s6 zl$I1DP-goF{I^n&N%LBls=U9JEn24XU+GXFi;yC`+1ty7C+`Wqa8fjKQNhgS_#6sP zc6{~qEED>myw8l!rSQ{JtVIAYM76O|^B|Jixk^(VeR3!dQ)lo?Sz7;G)e$G4ohA+DZz9u|TgqUuJ?8CZ5?ZU5XV*BzsLpc&% zopo)4#ez9&xBX~CcDW0v9B`2NS*MfxHq9_U^D}PwV(Y*;9`+3b0u9%-dWRam#(=lu)H&I>ha0%?FM6cb$TJ$pz^-IEL^38L%GoYcY=N=J)$O{*eHgYDu zCs)0aaUVCR7#>fINu!>BwxGycX-?Sg>}+x@moCKyKejr@#pNa$O)8ErvZIBtU&{tN z0&-*CG;+RtU?rb#BlZy!wFCvEVYNASI5=Y@Cm@ zWnq%O`VgtX?+9V!$W%xeHg>MbmMnE^v$+tm&CG6U2Ct<<$AZ?);)lihGLs9#OP0T| zmPa3q3e_`yno_S4g|xCLYv7nI%hBFC5L6xxn$Gcj(>f?FL(`l!C6Q zU6xCiJ()7ZS~lxO(_2C>^WnhS`9&3#_F6!*__NPO^4bEZLFM)j6&~pt>`N!Dn=qEm{{UGTlv`B)sK}wPD^T*}Bq0bIKgv+?`_CVoJ!AuQv2&mqa-i~9J^YF<&boRm93jQ8g5 z>8x-i+ujkA0r)1>dpnJ4zF#q4dhEKcv%AOCL{1eE>tN25ZB}->pk7E4f6?4I0+Naw zj9knTILvq55EQa!^LI8xXt-(D6Dy&W zG~o=ad@(mCHr6JBvf?_X8*^4uonWfxT1Y?@&x-;#k!aODNcN*5X{1!Jg3ewUaOJZ* zw+Wh_nfa~AVZ$p z^yhM%&*(2mITTg99RtLG9ChduZ!4PydP%uY=WB$^=V&Hht|>;LcBV7Tnchul>Td+x zCZXC_wlP8E=J=|d!7|f0_6Z1Ye4Ne5l3HJCu|Xi;mYC>H$2DM_VO)qmQw@R8dhsz7 z885B2=s;9=*xu)t_ZUyH8^sm>NEeDZG2s|RS88}OLEk|086>2mJK}+zONCjO zw~D{Ob&Z!0%_Y5Rzl^t^>D$Udm0^^#%=L{P$KUnp7wsWt19DzxchS5`$75-0*e7s4frM1`ER zFhwtC=G#|=Eh2?$8(MJyP(`Ehlhb95RPOfpFi=RVL zPk~_DPd5401b<~Yo0p;cLG9+NhTLpMX!Ta8#X4B)lVAm#kH@OFx#7FS0Mcbszb$^dNbQT=hM4`I+p0;Z8DSTO zxl($ZR+Qoo!d^Rjrv<4M{U@YEYE^?UV|ftx?S^ zs5PmpVnee*C5Y62ErB&)Nu|VM=LFeYtQo(g!XO7V;-6#IFd+T}Xy@}PpRp3dr%QcY zW^*3@SZA{&Vl7FG;KLduxH@%O_6tz2^=L!L%oCim5 za_^9D%+dWxrifHE^D+aY5`W3Lzf5uPw@w4YY^p!iCF4X$)7jY4B$&~h>K}(NszbV1 zkujGitU)S#OTV*@f`giUqd3MMQI?kK!emuxT*-)fl*0d{txs537;``c$^H>7iAWoX z?u>*WdMEoz=$~aJGK2oDex(n!`v1mAc|E24zUg-@ZtPid{69InJt#qLP00sDPN1P) NI+}(W7YsproRbilUQ2n3|AMN&lYo2%~0nu~VA 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 PjB2FKQ contacts = new List(); + + internal static void ViewContacts() + { + contacts.Clear(); + + Console.Clear(); + Console.WriteLine("---View all Contacts---"); + + contacts = dbmanager.ViewContacts(); + + if (contacts.Count == 0) + { + Console.WriteLine("No contacts available"); + } + else + { + foreach (var contact in contacts) + { + Console.WriteLine($"Name: {contact.Name}"); + Console.WriteLine($"Phone: {contact.PhoneNumber}"); + Console.WriteLine($"E-mail: {contact.EmailAddress}"); + Console.WriteLine(); + } + } + + Console.WriteLine("Press enter to go back to the main menu."); + Console.ReadLine(); + } + + internal static void NewContact() + { + Console.Clear(); + Console.WriteLine("---Add New Contact---"); + Console.WriteLine("Insert new contact name (Insert 0 to return to main menu):"); + string name = helpers.CheckName(); + + if (name == "0") return; + + Console.WriteLine("Insert new contact phone number (ie.+15166024355)(Insert 0 to return to main menu): "); + string number = helpers.CheckPhoneNumber(); + + if(number == "0") return; + + Console.WriteLine("Insert new contact email address (Insert 0 to return to main menu):"); + string email = helpers.CheckEmail(); + + if(email == "0") return; + + if(dbmanager.AddContact(name, number, email)) + Console.WriteLine("\nNew Contact has been added in the Phonebook!"); + else + Console.WriteLine("\nContact added unsuccessful"); + + Console.WriteLine("Would you like to add another contact?: (y/n)"); + string input = Console.ReadLine(); + if (!string.IsNullOrWhiteSpace(input) && input.ToLower() == "y") + NewContact(); + } + + internal static void DeleteContact() + { + contacts.Clear(); + + Console.Clear(); + Console.WriteLine("---Delete Contact---"); + + Console.WriteLine("Insert the contact name (Insert 0 to return to main menu): "); + string name = helpers.CheckName(); + + if (name == "0") return; + + contacts = dbmanager.FindContact(name); + + if (contacts.Count == 0) + { + Console.WriteLine("Contact not found\n"); + } + else + { + Console.Clear(); + Console.WriteLine("---Delete Contact---"); + Console.WriteLine($"{contacts.Count} found\n"); + + foreach (var contact in contacts) + { + Console.WriteLine($"ID: {contact.Id}"); + Console.WriteLine($"Name: {contact.Name}"); + Console.WriteLine($"Phone: {contact.PhoneNumber}"); + Console.WriteLine($"E-mail: {contact.EmailAddress}"); + Console.WriteLine(); + } + + Console.WriteLine("Insert their ID to delete their contact (Insert 0 to return to main menu): "); + int id = helpers.CheckNumber(); + + if (id == 0) return; + + List foundContact = new List(); + foundContact = dbmanager.FindContactByIdAndName(id, name); + + + if (foundContact.Count == 0) + { + Console.WriteLine("ID doesn't match to any of the contact name."); + } + else + { + Console.Clear(); + Console.WriteLine("---Delete Contact---"); + foreach (var contact in foundContact) + { + Console.WriteLine($"ID: {contact.Id}"); + Console.WriteLine($"Name: {contact.Name}"); + Console.WriteLine($"Phone: {contact.PhoneNumber}"); + Console.WriteLine($"E-mail: {contact.EmailAddress}"); + Console.WriteLine(); + } + + Console.WriteLine("Are you sure you want to delete this contact? (y/n)"); + string confirmation = Console.ReadLine(); + + if (!string.IsNullOrWhiteSpace(confirmation) && confirmation.Trim().ToLower() == "y") + { + if (dbmanager.DeleteById(id)) + Console.WriteLine("Contact deleted sucessfully!"); + else + Console.WriteLine("Delete contact unsuccessful"); + } + else + Console.WriteLine("Delete contact cancelled"); + } + } + + Console.WriteLine("\nWould you like to delete another contact?: (Y/N)"); + string input = Console.ReadLine(); + if (!string.IsNullOrWhiteSpace(input) && input.ToLower() == "y") + DeleteContact(); + + } + + internal static void UpdateContact() + { + Console.Clear(); + Console.WriteLine("---Update Contact---"); + + Console.WriteLine("Insert the contact name (Insert 0 to return to main menu): "); + string name = helpers.CheckName(); + + if (name == "0") return; + + contacts = dbmanager.FindContact(name); + + if (contacts.Count == 0) + { + Console.WriteLine("Contact not found\n"); + } + else + { + Console.Clear(); + Console.WriteLine("---Update Contact---"); + Console.WriteLine($"{contacts.Count} found\n"); + + foreach (var contact in contacts) + { + Console.WriteLine($"ID: {contact.Id}"); + Console.WriteLine($"Name: {contact.Name}"); + Console.WriteLine($"Phone: {contact.PhoneNumber}"); + Console.WriteLine($"E-mail: {contact.EmailAddress}"); + Console.WriteLine(); + } + + Console.WriteLine("Insert their ID to update their contact (Insert 0 to return to main menu): "); + int id = helpers.CheckNumber(); + + if (id == 0) return; + + List foundContact = new List(); + foundContact = dbmanager.FindContactByIdAndName(id, name); + + if (foundContact.Count == 0) + { + Console.WriteLine("ID doesn't match to any of the contact name."); + } + else + { + var contact = foundContact[0]; + bool isCompleted = false; + + while (!isCompleted) + { + Console.Clear(); + Console.WriteLine("---Update Contact---"); + Console.WriteLine($"Name: {contact.Name}"); + Console.WriteLine($"Phone: {contact.PhoneNumber}"); + Console.WriteLine($"E-mail: {contact.EmailAddress}"); + Console.WriteLine(); + Console.WriteLine("1 - Update name."); + Console.WriteLine("2 - Update phone number."); + Console.WriteLine("3 - Update email address."); + Console.WriteLine("0 - Complete changes"); + + string updateInput = Console.ReadLine(); + + switch (updateInput) + { + case "0": + isCompleted = true; + break; + case "1": + Console.WriteLine("\nInsert new contact name (Insert 0 to return to keep): "); + string newName = helpers.CheckName(); + if(newName != "0") + contact.Name = newName; + break; + case "2": + Console.WriteLine("\nInsert new contact phone number (00-0000-0000) (Insert 0 to return to keep): "); + string number = helpers.CheckPhoneNumber(); + if (number != "0") + contact.PhoneNumber = number; + break; + case "3": + Console.WriteLine("Insert new contact email address (Insert 0 to return to keep):"); + string email = helpers.CheckEmail(); + if (email != "0") + contact.EmailAddress = email; + break; + } + + } + + if (dbmanager.UpdateById(id, contact.Name, contact.PhoneNumber, contact.EmailAddress)) + Console.WriteLine("Contact update sucessful!"); + else + Console.WriteLine("Contact update unsuccessful"); + + } + } + + Console.WriteLine("\nWould you like to update another contact?: (Y/N)"); + string input = Console.ReadLine(); + if (!string.IsNullOrWhiteSpace(input) && input.ToLower() == "y") + UpdateContact(); + } + + internal static void FindContact() + { + contacts.Clear(); + + Console.Clear(); + Console.WriteLine("---Find Contact---"); + Console.WriteLine("Insert the contact name: "); + string input = helpers.CheckName(); + + if (input == "0") return; + + contacts = dbmanager.FindContact(input); + + if (contacts.Count == 0) + { + Console.WriteLine("Contact not found\n"); + } + else + { + Console.Clear(); + Console.WriteLine("---Find Contact---"); + Console.WriteLine($"{contacts.Count} found\n"); + + foreach (var contact in contacts) + { + Console.WriteLine($"Name: {contact.Name}"); + Console.WriteLine($"Phone: {contact.PhoneNumber}"); + Console.WriteLine($"E-mail: {contact.EmailAddress}"); + Console.WriteLine(); + } + } + + Console.WriteLine("Press enter to go back to the main menu."); + Console.ReadLine(); + } +} diff --git a/Dania.Phonebook/Phonebook/DatabaseManager.cs b/Dania.Phonebook/Phonebook/DatabaseManager.cs new file mode 100644 index 00000000..b78e0f05 --- /dev/null +++ b/Dania.Phonebook/Phonebook/DatabaseManager.cs @@ -0,0 +1,128 @@ +using Microsoft.EntityFrameworkCore; +using Phonebook.Model; + +namespace Phonebook; + +internal class DatabaseManager +{ + internal List ViewContacts() + { + + try + { + using (var context = new PhonebookContext()) + { + var contacts = context.Contacts.ToList(); + + return contacts; + } + } + catch (Exception ex) + { + Console.WriteLine($"\n[Error] Could not load contacts: {ex.Message}"); + return new List(); + } + } + + internal bool AddContact(string name, string phoneNumber, string email) + { + try + { + using (var context = new PhonebookContext()) + { + var contact = new Contact() + { + Name = name, + PhoneNumber = phoneNumber, + EmailAddress = email + }; + + context.Add(contact); + context.SaveChanges(); + return true; + } + } + catch (Exception ex) + { + Console.WriteLine($"\n[Unexpected Error] {ex.Message}"); + return false; + } + } + + internal List FindContact(string name) + { + try + { + using (var context = new PhonebookContext()) + { + var contact = context.Contacts.Where(c => c.Name.Contains(name)).OrderBy(n => n.Name); + return contact.ToList(); + } + } + catch (Exception ex) + { + Console.WriteLine($"\n[Error] Search failed: {ex.Message}"); + return new List(); + } + } + + internal List FindContactByIdAndName(int id, string name) + { + try + { + using (var context = new PhonebookContext()) + { + var contact = context.Contacts.Where(c => c.Id == id && c.Name.Contains(name)); + return contact.ToList(); + } + } + catch (Exception ex) + { + Console.WriteLine($"\n[Error] Find failed: {ex.Message}"); + return new List(); + } + } + + internal bool DeleteById(int id) + { + try + { + using (var context = new PhonebookContext()) + { + var rowsDeleted = context.Contacts.Where(c => c.Id == id).ExecuteDelete(); + return true; + } + } + catch (Exception ex) + { + Console.WriteLine($"\n[Error] Could not delete contact: {ex.Message}"); + return false; + } + + } + + internal bool UpdateById(int id, string name, string phoneNumber, string email) + { + try + { + using (var context = new PhonebookContext()) + { + context.Contacts.Where(c => c.Id == id).ExecuteUpdate(setter => + { + setter.SetProperty(c => c.Name, name); + setter.SetProperty(c => c.PhoneNumber, phoneNumber); + setter.SetProperty(c => c.EmailAddress, email); + + }); + + return true; + } + } + catch (Exception ex) + { + Console.WriteLine($"\n[Error] Could not update contact: {ex.Message}"); + return false; + } + + } +} diff --git a/Dania.Phonebook/Phonebook/Helpers.cs b/Dania.Phonebook/Phonebook/Helpers.cs new file mode 100644 index 00000000..77b2eecc --- /dev/null +++ b/Dania.Phonebook/Phonebook/Helpers.cs @@ -0,0 +1,105 @@ +using System.Text.RegularExpressions; + +namespace Phonebook; + +internal class Helpers +{ + const string PHONE_PATTERN = @"^\+?\d{1,4}?[-.\s]?\(?\d{1,3}?\)?[-.\s]?\d{1,4}[-.\s]?\d{1,4}[-.\s]?\d{1,9}$"; + const string EMAIL_PATTERN = @"^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,}$"; + + internal string CheckName() + { + string name = ""; + bool isValid = false; + + do + { + name = Console.ReadLine(); + if (name == "0") + isValid = true; + + if (string.IsNullOrWhiteSpace(name)) + Console.WriteLine("Name cannot be empty. Try again: "); + else + isValid = true; + + } while (!isValid); + + return name; + } + + internal int CheckNumber() + { + int number = 0; + bool isValid = false; + do + { + string input = Console.ReadLine(); + if (input == "0") + { + number = 0; + isValid = true; + } + + if (string.IsNullOrWhiteSpace(input)) + Console.WriteLine("ID cannot be empty. Try again: "); + else + { + if(int.TryParse(input, out number)) + isValid = true; + else + Console.WriteLine($"ID is not a number.Try again: "); + + } + + }while (!isValid); + + return number; + + } + + internal string CheckPhoneNumber() + { + string number = ""; + bool isValid = false; + + do + { + number = Console.ReadLine(); + if(number == "0") + isValid = true; + + if (Regex.IsMatch(number, PHONE_PATTERN)) + isValid = true; + else + { + Console.WriteLine("Not a valid phone number. Try again: "); + } + } + while (!isValid); + + return number; + } + + + internal string CheckEmail() + { + string email = ""; + bool isValid = false; + + do + { + email = Console.ReadLine(); + if (email == "0") + isValid = true; + + if (Regex.IsMatch(email, EMAIL_PATTERN)) + isValid = true; + else + Console.WriteLine("Not a valid email. Try again: "); + } + while (!isValid); + + return email; + } +} diff --git a/Dania.Phonebook/Phonebook/Migrations/20260522034000_InitialPhonebookDB.Designer.cs b/Dania.Phonebook/Phonebook/Migrations/20260522034000_InitialPhonebookDB.Designer.cs new file mode 100644 index 00000000..20093748 --- /dev/null +++ b/Dania.Phonebook/Phonebook/Migrations/20260522034000_InitialPhonebookDB.Designer.cs @@ -0,0 +1,52 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Phonebook; + +#nullable disable + +namespace Phonebook.Migrations +{ + [DbContext(typeof(PhonebookContext))] + [Migration("20260522034000_InitialPhonebookDB")] + partial class InitialPhonebookDB + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "10.0.7") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Phonebook.Model.Contact", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("EmailAddress") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Contacts"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Dania.Phonebook/Phonebook/Migrations/20260522034000_InitialPhonebookDB.cs b/Dania.Phonebook/Phonebook/Migrations/20260522034000_InitialPhonebookDB.cs new file mode 100644 index 00000000..eea4bd9b --- /dev/null +++ b/Dania.Phonebook/Phonebook/Migrations/20260522034000_InitialPhonebookDB.cs @@ -0,0 +1,36 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Phonebook.Migrations +{ + /// + public partial class InitialPhonebookDB : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Contacts", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(max)", nullable: false), + PhoneNumber = table.Column(type: "int", nullable: false), + EmailAddress = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Contacts", x => x.Id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Contacts"); + } + } +} diff --git a/Dania.Phonebook/Phonebook/Migrations/20260606060442_UpdateDataType.Designer.cs b/Dania.Phonebook/Phonebook/Migrations/20260606060442_UpdateDataType.Designer.cs new file mode 100644 index 00000000..782c6b65 --- /dev/null +++ b/Dania.Phonebook/Phonebook/Migrations/20260606060442_UpdateDataType.Designer.cs @@ -0,0 +1,54 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Phonebook; + +#nullable disable + +namespace Phonebook.Migrations +{ + [DbContext(typeof(PhonebookContext))] + [Migration("20260606060442_UpdateDataType")] + partial class UpdateDataType + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "10.0.7") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Phonebook.Model.Contact", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("EmailAddress") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Contacts"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Dania.Phonebook/Phonebook/Migrations/20260606060442_UpdateDataType.cs b/Dania.Phonebook/Phonebook/Migrations/20260606060442_UpdateDataType.cs new file mode 100644 index 00000000..29f6029a --- /dev/null +++ b/Dania.Phonebook/Phonebook/Migrations/20260606060442_UpdateDataType.cs @@ -0,0 +1,50 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Phonebook.Migrations +{ + /// + public partial class UpdateDataType : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "PhoneNumber", + table: "Contacts", + type: "nvarchar(max)", + nullable: false, + oldClrType: typeof(int), + oldType: "int"); + + migrationBuilder.AlterColumn( + name: "EmailAddress", + table: "Contacts", + type: "nvarchar(max)", + nullable: false, + oldClrType: typeof(int), + oldType: "int"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "PhoneNumber", + table: "Contacts", + type: "int", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(max)"); + + migrationBuilder.AlterColumn( + name: "EmailAddress", + table: "Contacts", + type: "int", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(max)"); + } + } +} diff --git a/Dania.Phonebook/Phonebook/Migrations/20260610093320_SeedInitialContacts.Designer.cs b/Dania.Phonebook/Phonebook/Migrations/20260610093320_SeedInitialContacts.Designer.cs new file mode 100644 index 00000000..580e68a7 --- /dev/null +++ b/Dania.Phonebook/Phonebook/Migrations/20260610093320_SeedInitialContacts.Designer.cs @@ -0,0 +1,91 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Phonebook; + +#nullable disable + +namespace Phonebook.Migrations +{ + [DbContext(typeof(PhonebookContext))] + [Migration("20260610093320_SeedInitialContacts")] + partial class SeedInitialContacts + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "10.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Phonebook.Model.Contact", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("EmailAddress") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Contacts"); + + b.HasData( + new + { + Id = 1, + EmailAddress = "johnDoe@gmail.com", + Name = "John Doe", + PhoneNumber = "110000111" + }, + new + { + Id = 2, + EmailAddress = "john.doe@gmail.com", + Name = "John Doe", + PhoneNumber = "114345111" + }, + new + { + Id = 3, + EmailAddress = "maryjane@gmail.com", + Name = "Mary Jane", + PhoneNumber = "110500631" + }, + new + { + Id = 4, + EmailAddress = "alicegreen@gmail.com", + Name = "Alice Green", + PhoneNumber = "120305141" + }, + new + { + Id = 5, + EmailAddress = "bobvance@gmail.com", + Name = "Bob Vance", + PhoneNumber = "120775991" + }); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Dania.Phonebook/Phonebook/Migrations/20260610093320_SeedInitialContacts.cs b/Dania.Phonebook/Phonebook/Migrations/20260610093320_SeedInitialContacts.cs new file mode 100644 index 00000000..c1622c55 --- /dev/null +++ b/Dania.Phonebook/Phonebook/Migrations/20260610093320_SeedInitialContacts.cs @@ -0,0 +1,57 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace Phonebook.Migrations +{ + /// + public partial class SeedInitialContacts : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Contacts", + columns: new[] { "Id", "EmailAddress", "Name", "PhoneNumber" }, + values: new object[,] + { + { 1, "johnDoe@gmail.com", "John Doe", "110000111" }, + { 2, "john.doe@gmail.com", "John Doe", "114345111" }, + { 3, "maryjane@gmail.com", "Mary Jane", "110500631" }, + { 4, "alicegreen@gmail.com", "Alice Green", "120305141" }, + { 5, "bobvance@gmail.com", "Bob Vance", "120775991" } + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Contacts", + keyColumn: "Id", + keyValue: 1); + + migrationBuilder.DeleteData( + table: "Contacts", + keyColumn: "Id", + keyValue: 2); + + migrationBuilder.DeleteData( + table: "Contacts", + keyColumn: "Id", + keyValue: 3); + + migrationBuilder.DeleteData( + table: "Contacts", + keyColumn: "Id", + keyValue: 4); + + migrationBuilder.DeleteData( + table: "Contacts", + keyColumn: "Id", + keyValue: 5); + } + } +} diff --git a/Dania.Phonebook/Phonebook/Migrations/20260611130136_UpdateSeedPhoneNumbers.Designer.cs b/Dania.Phonebook/Phonebook/Migrations/20260611130136_UpdateSeedPhoneNumbers.Designer.cs new file mode 100644 index 00000000..88db56ab --- /dev/null +++ b/Dania.Phonebook/Phonebook/Migrations/20260611130136_UpdateSeedPhoneNumbers.Designer.cs @@ -0,0 +1,91 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Phonebook; + +#nullable disable + +namespace Phonebook.Migrations +{ + [DbContext(typeof(PhonebookContext))] + [Migration("20260611130136_UpdateSeedPhoneNumbers")] + partial class UpdateSeedPhoneNumbers + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "10.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Phonebook.Model.Contact", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("EmailAddress") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Contacts"); + + b.HasData( + new + { + Id = 1, + EmailAddress = "johnDoe@gmail.com", + Name = "John Doe", + PhoneNumber = "+18708291967" + }, + new + { + Id = 2, + EmailAddress = "john.doe@gmail.com", + Name = "John Doe", + PhoneNumber = "+447457095201" + }, + new + { + Id = 3, + EmailAddress = "maryjane@gmail.com", + Name = "Mary Jane", + PhoneNumber = "+61451146406" + }, + new + { + Id = 4, + EmailAddress = "alicegreen@gmail.com", + Name = "Alice Green", + PhoneNumber = "+13052428540" + }, + new + { + Id = 5, + EmailAddress = "bobvance@gmail.com", + Name = "Bob Vance", + PhoneNumber = "+447984372345" + }); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Dania.Phonebook/Phonebook/Migrations/20260611130136_UpdateSeedPhoneNumbers.cs b/Dania.Phonebook/Phonebook/Migrations/20260611130136_UpdateSeedPhoneNumbers.cs new file mode 100644 index 00000000..51e5754f --- /dev/null +++ b/Dania.Phonebook/Phonebook/Migrations/20260611130136_UpdateSeedPhoneNumbers.cs @@ -0,0 +1,88 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Phonebook.Migrations +{ + /// + public partial class UpdateSeedPhoneNumbers : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.UpdateData( + table: "Contacts", + keyColumn: "Id", + keyValue: 1, + column: "PhoneNumber", + value: "+18708291967"); + + migrationBuilder.UpdateData( + table: "Contacts", + keyColumn: "Id", + keyValue: 2, + column: "PhoneNumber", + value: "+447457095201"); + + migrationBuilder.UpdateData( + table: "Contacts", + keyColumn: "Id", + keyValue: 3, + column: "PhoneNumber", + value: "+61451146406"); + + migrationBuilder.UpdateData( + table: "Contacts", + keyColumn: "Id", + keyValue: 4, + column: "PhoneNumber", + value: "+13052428540"); + + migrationBuilder.UpdateData( + table: "Contacts", + keyColumn: "Id", + keyValue: 5, + column: "PhoneNumber", + value: "+447984372345"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.UpdateData( + table: "Contacts", + keyColumn: "Id", + keyValue: 1, + column: "PhoneNumber", + value: "110000111"); + + migrationBuilder.UpdateData( + table: "Contacts", + keyColumn: "Id", + keyValue: 2, + column: "PhoneNumber", + value: "114345111"); + + migrationBuilder.UpdateData( + table: "Contacts", + keyColumn: "Id", + keyValue: 3, + column: "PhoneNumber", + value: "110500631"); + + migrationBuilder.UpdateData( + table: "Contacts", + keyColumn: "Id", + keyValue: 4, + column: "PhoneNumber", + value: "120305141"); + + migrationBuilder.UpdateData( + table: "Contacts", + keyColumn: "Id", + keyValue: 5, + column: "PhoneNumber", + value: "120775991"); + } + } +} diff --git a/Dania.Phonebook/Phonebook/Migrations/PhonebookContextModelSnapshot.cs b/Dania.Phonebook/Phonebook/Migrations/PhonebookContextModelSnapshot.cs new file mode 100644 index 00000000..5e1b4275 --- /dev/null +++ b/Dania.Phonebook/Phonebook/Migrations/PhonebookContextModelSnapshot.cs @@ -0,0 +1,88 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Phonebook; + +#nullable disable + +namespace Phonebook.Migrations +{ + [DbContext(typeof(PhonebookContext))] + partial class PhonebookContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "10.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Phonebook.Model.Contact", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("EmailAddress") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Contacts"); + + b.HasData( + new + { + Id = 1, + EmailAddress = "johnDoe@gmail.com", + Name = "John Doe", + PhoneNumber = "+18708291967" + }, + new + { + Id = 2, + EmailAddress = "john.doe@gmail.com", + Name = "John Doe", + PhoneNumber = "+447457095201" + }, + new + { + Id = 3, + EmailAddress = "maryjane@gmail.com", + Name = "Mary Jane", + PhoneNumber = "+61451146406" + }, + new + { + Id = 4, + EmailAddress = "alicegreen@gmail.com", + Name = "Alice Green", + PhoneNumber = "+13052428540" + }, + new + { + Id = 5, + EmailAddress = "bobvance@gmail.com", + Name = "Bob Vance", + PhoneNumber = "+447984372345" + }); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Dania.Phonebook/Phonebook/Model/Contact.cs b/Dania.Phonebook/Phonebook/Model/Contact.cs new file mode 100644 index 00000000..948f1efe --- /dev/null +++ b/Dania.Phonebook/Phonebook/Model/Contact.cs @@ -0,0 +1,9 @@ +namespace Phonebook.Model; + +internal class Contact +{ + public int Id { get; set; } + public string Name { get; set; } + public string PhoneNumber { get; set; } + public string EmailAddress { get; set; } +} diff --git a/Dania.Phonebook/Phonebook/Phonebook.csproj b/Dania.Phonebook/Phonebook/Phonebook.csproj new file mode 100644 index 00000000..4fd875a7 --- /dev/null +++ b/Dania.Phonebook/Phonebook/Phonebook.csproj @@ -0,0 +1,29 @@ + + + + Exe + net10.0 + enable + enable + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + PreserveNewest + + + + diff --git a/Dania.Phonebook/Phonebook/Phonebook.slnx b/Dania.Phonebook/Phonebook/Phonebook.slnx new file mode 100644 index 00000000..0b5434ac --- /dev/null +++ b/Dania.Phonebook/Phonebook/Phonebook.slnx @@ -0,0 +1,3 @@ + + + diff --git a/Dania.Phonebook/Phonebook/PhonebookContext.cs b/Dania.Phonebook/Phonebook/PhonebookContext.cs new file mode 100644 index 00000000..5661c32f --- /dev/null +++ b/Dania.Phonebook/Phonebook/PhonebookContext.cs @@ -0,0 +1,31 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Phonebook.Model; + +namespace Phonebook; + +internal class PhonebookContext : DbContext +{ + public DbSet Contacts { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + IConfiguration config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build(); + string connectionString = config.GetConnectionString("DefaultConnection"); + + optionsBuilder.UseSqlServer(connectionString); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity().HasData( + new Contact { Id = 1, Name = "John Doe", PhoneNumber = "+18708291967", EmailAddress = "johnDoe@gmail.com"}, + new Contact { Id = 2, Name = "John Doe", PhoneNumber = "+447457095201", EmailAddress = "john.doe@gmail.com"}, + new Contact { Id = 3, Name = "Mary Jane", PhoneNumber = "+61451146406", EmailAddress = "maryjane@gmail.com"}, + new Contact { Id = 4, Name = "Alice Green", PhoneNumber = "+13052428540", EmailAddress = "alicegreen@gmail.com"}, + new Contact { Id = 5, Name = "Bob Vance", PhoneNumber = "+447984372345", EmailAddress = "bobvance@gmail.com" } + ); + } +} diff --git a/Dania.Phonebook/Phonebook/Program.cs b/Dania.Phonebook/Phonebook/Program.cs new file mode 100644 index 00000000..76fd4c3c --- /dev/null +++ b/Dania.Phonebook/Phonebook/Program.cs @@ -0,0 +1,4 @@ +using Phonebook; + +UserInterface userInterface = new UserInterface(); +userInterface.MainMenu(); diff --git a/Dania.Phonebook/Phonebook/UserInterface.cs b/Dania.Phonebook/Phonebook/UserInterface.cs new file mode 100644 index 00000000..32a9f9b1 --- /dev/null +++ b/Dania.Phonebook/Phonebook/UserInterface.cs @@ -0,0 +1,48 @@ +using Phonebook.Controller; + +namespace Phonebook; + +internal class UserInterface +{ + internal void MainMenu() + { + bool isCloseApp = false; + + while (!isCloseApp) + { + Console.Clear(); + Console.WriteLine("---Welcome to Phonebook---"); + Console.WriteLine("1 - View all contacts"); + Console.WriteLine("2 - Add new contact"); + Console.WriteLine("3 - Delete contact"); + Console.WriteLine("4 - Update contact"); + Console.WriteLine("5 - Find contact"); + Console.WriteLine("0 - Exit"); + Console.WriteLine("Please select an option: "); + + string input = Console.ReadLine(); + + switch (input) + { + case "0": + isCloseApp = true; + break; + case "1": + ContactController.ViewContacts(); + break; + case "2": + ContactController.NewContact(); + break; + case "3": + ContactController.DeleteContact(); + break; + case "4": + ContactController.UpdateContact(); + break; + case "5": + ContactController.FindContact(); + break; + } + } + } +} diff --git a/Dania.Phonebook/Phonebook/appsettings.json b/Dania.Phonebook/Phonebook/appsettings.json new file mode 100644 index 00000000..d0ba8df3 --- /dev/null +++ b/Dania.Phonebook/Phonebook/appsettings.json @@ -0,0 +1,5 @@ +{ + "ConnectionStrings": { + "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=PhonebookDB;Trusted_Connection=True;" + } +} \ No newline at end of file diff --git a/Dania.Phonebook/README.md b/Dania.Phonebook/README.md new file mode 100644 index 00000000..83705378 --- /dev/null +++ b/Dania.Phonebook/README.md @@ -0,0 +1,40 @@ +# CSharpAcademy_Phonebook +Phonebook is the third olive green belt project from the C# Academy. The project introduces a popular ORM called Entity Framework onto the project. I programmed using C# with packages such as Entity Framework Core and SQL Server Management for the database with Visual Studio 2026. I also use Google Gemini to explain certain things or when I get stuck. + +## Requirements +- Use Entity Framework. ADO.NET, Dapper and any other ORM aren't allowed. +- Code should contain a base Contact class with at least name, email and phone number properties. +- Validate e-mails and phone numbers and let the user know what formats are expected. +- Handle errors so the app doesn't crash unexpectedly in case EF or the database have problems. +- Seed data using Entity Framework so the user has some contacts to start with. + +## Features +- Database using Entity Framework. + +![Image](Assets/1.png) + +- CRUD functions: + - Users insert their contact name, phone number and e-mail. + - Users can view all contact and find contact by their name, + - Users can delete and update contact using a combination of Name and ID to prevent conflicts from duplicate names. + - Phone number and E-mail are validated using Regex pattern. +![Image](Assets/2.png) + +## Challenges +- Learning about Entity Framework itself. This one is a bit different than other ORMS as you have to start coding the model, which are the entity (table) and then the database created. The setup is more elaborate than the other ORMs starting with making a Context class for configuration and a bridge between the project and the database, and create a migration through Package Manager Console to create the whole database. For CRUD operations, EF Core execute SQL commands for you, but instead of SQL, I have to learn LINQ commands to Read, Update and Delete. +![Image](Assets/3.png) +DBContext class +![Image](Assets/4.png) +An example of CRUD command using LINQ with EF Core. + +- Learning about Regex Patterns. +Regex patterns is something I've seen before but I never really understand what it does. It's basically a way for the computer to identify the pattern such as e-mails "@", domain suffixes for email and phone number sequences to be extracted from a string. +![Image](Assets/5.png) + + +## References +- https://www.entityframeworktutorial.net/efcore/entity-framework-core.aspx +- https://www.youtube.com/watch?v=SryQxUeChMc&list=PLdo4fOcmZ0oXCPdC3fTFA3Z79-eVH3K-s&index=1 +- https://uibakery.io/regex-library/phone-number-csharp +- https://www.youtube.com/watch?v=V_DzcyGTXW0 +- Google Gemini \ No newline at end of file