From 032a5f9d121b8e6189ddf4122b6a1d433ce6d8a3 Mon Sep 17 00:00:00 2001 From: jeonjimin Date: Thu, 11 Apr 2024 00:26:52 +0900 Subject: [PATCH 01/10] =?UTF-8?q?[Feat]=20#524=20-=20MyPageView=20UI=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20-=20518=20=EB=A8=B8=EC=A7=80=20=ED=9B=84?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=ED=95=84=EC=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets.xcassets/Profile/Contents.json | 6 + .../Profile/profile_ex.imageset/Contents.json | 21 ++ .../profile_ex.imageset/profile_ex.png | Bin 0 -> 72028 bytes HappyAnding/HappyAnding/TextLiteral.swift | 2 +- .../Views/MyPageViews/MyPageView.swift | 233 ++++++++++++++---- 5 files changed, 209 insertions(+), 53 deletions(-) create mode 100644 HappyAnding/HappyAnding/Assets.xcassets/Profile/Contents.json create mode 100644 HappyAnding/HappyAnding/Assets.xcassets/Profile/profile_ex.imageset/Contents.json create mode 100644 HappyAnding/HappyAnding/Assets.xcassets/Profile/profile_ex.imageset/profile_ex.png diff --git a/HappyAnding/HappyAnding/Assets.xcassets/Profile/Contents.json b/HappyAnding/HappyAnding/Assets.xcassets/Profile/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/HappyAnding/HappyAnding/Assets.xcassets/Profile/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HappyAnding/HappyAnding/Assets.xcassets/Profile/profile_ex.imageset/Contents.json b/HappyAnding/HappyAnding/Assets.xcassets/Profile/profile_ex.imageset/Contents.json new file mode 100644 index 00000000..583537be --- /dev/null +++ b/HappyAnding/HappyAnding/Assets.xcassets/Profile/profile_ex.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "profile_ex.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HappyAnding/HappyAnding/Assets.xcassets/Profile/profile_ex.imageset/profile_ex.png b/HappyAnding/HappyAnding/Assets.xcassets/Profile/profile_ex.imageset/profile_ex.png new file mode 100644 index 0000000000000000000000000000000000000000..4580ce79643d4d7b6e77e4264c45869c9a300a8f GIT binary patch literal 72028 zcmcF~<99B+6K&m|+V-h!+qT_P8&BJ(woYyH)V6Kgwr#if{oQr{h5I3EGWnF1nIwC5 zcK#|UNFu=E!h(Q+AV^Dzsr+X@KtMoAV4(i%wdF1A{%3wUN@)W?KuEa$*FeQnn2r7$ z1O=!_ihxv4 zyUY0wWvM5U*$!!+6J!%6G_^@W?-kp&AwG4hPsk*vM5<+T1(vV&S-*&9ymzg+5+0r+ z3{U#MJ!-q(6i;ZysfcE%eUb-XwNP$p-RsLf>7TUcl_1(bvmyr%yn2aD-r7Ft+1~qC zlWH_fo6&KarBzbNkd)0UsN|Kwj_79w4SeYuov$3eO7?KL4QpCm87^yPpS*r-ec2%2 zfMMC4cG!pGAY-9ICv>83qBMe7k^0@lmq%W6AUHj=expf`qz4@e`~TvLr2woWHRC(& z#2c9-EE~C4eTFi;tm6Jb``AaK|AH^3==5lRJ}dk_6hm#CyA4n-^i~axFYvk<1qCWU zTEaL4pz4B75r>>b^TPN>pBou5+mo4W#&1Zjg+m3TJ-Xlt=zJ)z{%CYZK5k?;R(Lo; z<&h;kmSod0vekEckVXy++@m$peC%YHEo@ly4qG|&09$hR6K4XQq91Fpip-CG$> zF1q#qTRB**@V3d6nWv8N#P*v%`D=qA9J(tTt@ym|{}{*Wh=PZifppPO{o z1>-~4Po#Q>m~mm3Si{aN;L7m$a>9f4{Nc@i*Y&j#y2+<~cqMZ;T?FG*H%vOhsfuFT zx(C;^J2c<#dgBJ$zPFPS zeVT%<5EeXPYTfKB5Mc`U)Fp1sV$w$MU}y?dWFmszaDq`MxglZdo47-4l9X2DdP+H> zJW3Gxn8=VO-CUf+M9xZT>#b_eRv*c}HBsH?@@TmUcPec|N5-5As_t$$f5ypTE6sxp zIrXkQInOJ0-E{PO9eHnI{TK0@hNst#`y%(O?PORqAzptrr+LmdlJ~}t1)NkQf!7xEL13bJH>M<9(OZ5hC{usk`GI@S^*Z zZ`9U7cqJ2ujVeT5C9kS9*lkToE8SDJp!eYkdC@}&$X6Db8#%#r*<9b*Iqpd+6C3Feu!;)Kei{-xe zZcX9fd&4_Z^*K@ZFRLci)o0-4a0E{1yKg^QP~%XG1JXzr>!lOh^^DkCo-wl_TIg4= zSSTtycwrFS%p%XEMLg3~0d(=AoQ8Uycn@x5k5$zW3|mF-3n!!xQFD4Z(Y7#n2y<-X zsXlkvEEA_>NMIUa+ebj2K_9}nU>pH<1OelCxjQMY=PoYnHs#T}Y1iDvx{I?}_EEvk zXYL8*k$2bO#b$kv9NbwW+oNJi?+bws%6zq^>~>!QRzM)r)@v$JaxE7fST`Nar%Ff# z=d+yll*qwjLdtI~PM36swjY8(xIKx=Y4`3PN_6 zoY(I(HcR&{)jAvQW1=?awc%|pFsa8+>TMhmOoz;A1^i{)+08<9+FByR_S9-fHR2N% zsvU!ww(a&_7!oB+7BMk8*LbP!U7mtekwm;RhkYuv=fJ|-B5IqOhbR!#U8jRhl*$`(;4H~lvk<3MD9uI+G*GeUw~=98nEsoGWU2sGs(>)ksD>ZV%x78fi}!o= zu1)s`wGuG#jY{8oH6^#LT3b7^SC2H5k(2%Czj)gHLg6^%Kkk%zP-e+{Ry zU5!pw;5wr{_n0Tg)jr)IM;jB?-kp7VthzoF+=S(oYwd5GdP+W9kN2*S$4Fh0lM6w_ zr^}@TfvydrxY4&{fj=YXuSObkLu0Yq_iuI_Ppic*U+V>xTI#LSrTrk}hKQkND&v;^ zgt{He;lFUo)+#lsfLy)YEIXT>)Oj!mTpav43jHH(T!kRKgP)6uLqlB|#0@xf93#=o zPm|BP>bpM!6+wX07hu9|!T=i*=g`x5A-wxshyCLwU4#T%kmon0k}OG)Q4I!1=DV6v z3!SP{k%VTp09pu;tvST=x-o*t=CY@g-zm%E3?0A0a0oc=8ub94q|m*j)YF}?*xWz) zE_5B;`2F;GsBcBqPH(+pdH4*dzFn1+-1h~l8FCBo#6Niw%XDdDJ+>o>)q~E0%7-m& z`kCfma|TbBmZ9^Ip5e-h-lFQg-EX&AMqmA5ZvBPV*O9j^vQuT|bCHsxwCIxA{@B)j zpfvzx)oF{bU9_b#3)rnoOPP?^M)5JUl=oP5VmGgK=;MP_7D0|Y#&z8bE3NDmn2O}x z8Mn7AjJ-;J>$?xydF?u}{EDobrvHd+>qMZY#;$jDnm~y}5+6wk))3yd zs$eHXIu9k%|7oOSI# zGG@N%Q=sS)1ks1EBElNhbJ04%9m7YkGkHgCW6BuS-wKi|mRe#a&=n z1oj{1RYn*>G$2|k!Kph4sXYGZvF!T$9q_%!e z@(QQe%G&0?g=;o0L~KA~zf>9fcp=~g-vB%Ye8_0KhvgZnXbEvEe490t=<`+D4Q~Q0 z>17IWw1YNB!Ep9n4s0$I=WoEM4=2Q$Eei{#VgZ%Z^a`B8Ny-;tb<2M!q<-V5LTH(j z+)m@tWv!J;%_{iKB|urdg+K(fLe9YRZwG)SbVJW%ck2pFPhWtppMZMtvx`k^i-ZYe zTdA|YJAE|{46|K-di0-aj}G9XwiLPfts8dx46wf0zvjv|uMEnqrF%R%1z}onC^P?> zv+P-n$+vEk7E|Hm&0)|*@-F@GrtQJ~xvfP=C<8+XQt8DTdAy$L6))TrO|~a?do^*V z0WIA2^fSiY@*Pt7A9{j@vuZMK@bS~4Clu|@>hFep)tG%Y4d-38ti2v`wu*{T(;QgE z$7I8JK#H*LfEOERflQ7SXThDFzD+_Nmp}+!}ge?meegEOIzaTvv#nyRv9#PiSO_ zlHEl^pkc437XE=m0G*AeFD8b@Z-}6V9|4OS4!qp0T#0X4Cr{TzZ)khj&fNkf|Dk$D z$N!+`+Z>`*lYV!9lFr>yOQ{%bpuC12?7B1sQ(sYv5*vkm>bi8O2zBjpfW8S7W{r*G z1(=wc00sBgWITT7JIPdyZu!+TqqoMh;g=E0aOe#s79pX~ydF11$8uqVqq+C(tFH8~ z@&qO}el2W9jgxDJPKel*qJ--b5&X%2Vdmb9HJp&Y5;wg}_MmEm6Ra2Hf-vSAhZ0!r zb7_@Yx;!Yn!o0+HCv2cp>}y6m{vOOkT75UIcuanSEpvJset(JA<}y^jV-(f`kslQf zVXkQ6n%u*)#| z_P(O?U#n3H837?6oP<-Hx94jtO!QLZ zXiKmtU5tLYSdeW%7-CUbi@ttvbFIf+-XEeJoNfA(i`2&HkS{|({&VNy)Q;-&xrs%I zOgL!53{*7D3^ zHZ}ITY1j#`@(S?+0?fcnUa93E9E4R&>hg5n31E) zu(V|1B%kzOX&IXf4(v(#FV}x?Ck`G+H#I@}Nz5Qt2!=b{uh-G4g;8Yd8bOXcG1B^U zc$po#r+{tEuOHW~1?mzswm#p0+9(lXKi9^nb;o;r{!UA4gBuV7w-8qcg_}0a<#rX2moZ3!7c1hu-~|nW{m1o-Nzp?7C_8 z&~N*_e@zjv8X~Z40%<$=Sk_x>Okj**#C5OYc+!oLq51~k5P9@qfDYQX=k#vMa%2D` zhPTCld>=>q$^f>5q94V0PYN#0;&lTTG}`HP<$=d8t!`St1qi0Fc%a_92)&@!OlI6c zLvn{9-TRrgGCp}?tsXU6Z4*40(73``U}R82GvD_7_-{I`%HyGS-3eOIKZZ#<$~g^b zHL2*MnS!?#8Y@TMU$iUSLNBsf4qvKo`a`AN9Uu~^AcO}tx|N*!E{>gR+~yWmrKId1 zH3C#%y4$N%sagJ+`PXHg*m#>E2Er9WSolXp`PsxPlOE6&0&tDT(NDITa5;_G;%whY zml6fXS`T}}Rk0@U*T%soyLjNMyUUC(7cU@nyv9YFVH&xE9h3p3o-SoqU^xlovM_y-8}U01?Q zn`2eVX;s5tT?RRPU4L?L8~%*D+OPd^V(veXPTnwLeksEMb4jaObsi_5W#gLcIUPmI zg))qfpk|s@@cwLOc@B3L)-hz#xUb$a#WG-bquZ+PiG=qG+(P{mZsno^Q%cL~6AX2-xFF1i-XRv-(6~#OJcC zykj5@`1IDhRfjXMa!T{e03E;SJ62jGf7iQ%%V<3riAWk#Hm6D*kJVF&)Y$SRSXGL% zd%O(iEUdo@FV9q&z4ZzRqMe8o3jTLfZ^!#ECuJK)kbGQN%y6kPl$4T8=j9;L`PkMQ zI7F;N(N_HF_*|Emwx@B2Hr8Aw*nbg1Rrt#oA-XiST@-|b4u7CK4QDm%dOiF@yNu>n zJb1$UMhrplW{_m+#!(9T$;ouUr!aFl!?A*ZpB0x7t#Up@GUq&B)mX8X77-)@lhdyv z5}uXkx5Zptov06>^Gm|W(Qzm%LzUB;lyHH{?oC7c zh_Y8VcWW_oC1wLvtp)^kG_7;Ji+W96XX#U@%S<#BoWI=GyVk+O@V;~HG1V!wbus~K z?+!`W3G;5160e)w2=%9SmbU~$#0_{G92L4J;`n5sU6 zn#(|zub}f-3eG>yjTTt!&U}0=3FkNNlX+86j}*=1m44Oa<^T@3J(Z5d_2w9%8c9$7 z2t?oNq|Z_0t~m-M-g{adYspf~J2NlEb=3mZn zsU3FW_$BCA)=OI{3^l#-g9(2%5{PWWDmyb0>kZ+yv-lz*Qej8rQ3yK zU|(}8sO0WW+*i#SpUJxqe`%N-=nIC9CB+%qI`r2gU_Z!Aa*h7t=;|RHpv5mxGMy4> z%sQEnc(J@@{RqdiLwjDM75vhKw1k!qRQGMuO?}vYj`bO<@jWTZ{kaqTKstnT@#)ij zcA)x?Pi+N?rmXHY*-{8|TRG(ex5+VfH-{rcZH0T|Y0Vc2v&%xWac|1eZ6bwUE@H?s z*Hm0-h1-^?YP2tU%gAtNdNPUA)sL7Y<`59>e<^v8Ze0k2vc5JHGZB-`N%1N)nMq%& z%w&?+DF0&78p+ju5Pt~bM^o#PDgeK{pKn`9xTMf_?&ICr zZI$YKYujDwSQs28P-7cPB;M(Lt?xvdn=a8?xHi>|(e7;tLwfXf3+0|n3IhQ{MAu$e zw&!#?3JW|Y642sHIUwLU-~-gIdrctefA#;~_3ne^9ao7I;!BtDjtNDzWCPt3;9Zjj z%(D1Gtj936-UhM%A%28|6AbRSU)BLN?{unL(FynkX9Qnb06DoPBSG&QYfs)#ob_n| zK9JS;PX!%g3~9}>QCPVDZ|rdh1+uNupE*&tx)LLT;lVwgJ;>hr+)Xa}!0vxXknxa# z#rWQ3huDmnA)5Y#uG@M2YmSeWQN5yO#4NDgrA;r_4U@g%SY+ zN8BU!O5}j&bX0rvGk))>z3}VboINQKf{hxT3$-^(630Vff~~Wo+uhFRSdn10IiVNw zFCiY6H`) zQ~a{Nw{h!rV`VRLP~q9;66DwF!QBQ@kc<(^nyr#?h^Ea-la}mxQ4(SV&IRyyZy*b# zNdZa3(Anfs5S^INj0Z$MjZ~a_C*^mu5wv_kKY}kmQvhm@{JW^PiObRo{~4p}?IEH#O#X?dx0E@$%9u<3KB;wF2+sF+;!A_}0 zKfps2zBd)dE=XIeYh=)Ii{G0=8x7GrQO-N_8<>`%QcCuMRzhdyf^zi6^z%{n@hr2C zcuAd$^X+X`3NkgV0vGdzGGNF9oeJ1Oz%6-+D52jdmw=`{SSf%G^140S1Z16Yw!^A2 zNf@cu8e2C`Q8hH3%=Oyd09@$Mlv{DZtlkT4>BGEC>ZoNCo_V<$Jq+oY7#_D4#D>kX z86Dk4Qlr_F_O0CRietuXE?t-|j zsQ>lM(4@26rXDw8;&Kw^MZj4x=~+gMZjpDSjNG|{w_tFz0u;Ez|LN{@Y11OU+N*{n zBTX(F*2`#rnv-Ce3&b;G=Saq$&|0%4Jp(dY_X$B!RZe9GRPs8|yS~#&2y)_*&ce+> zCAhQF?iF{!WGZ_)~{rk$)jH zq}R>RZ9X*PU(02Yt*YhO^lSiDK7i3g1HZhQZr<6Zu}4l3m6=JIW!L>uF3YYD*{8e* zza*pT)F@MJRcXNoNs*aQMokgDpbNK`cn6|o-rkVLWx=vE`J)fRRd&qAb(m>wpBX~RI*$kW-69EylDY_Nn^thg<x}M142lS(V@G+@Nm=VzyoZZ>5I+cYGPT{cC4uHW#M*H2C^-y29k+gxPyOfo zdydzV#!j1=1}IoY);$-O@|FTh$)s~`%K~VGb|1gZa<9fT>(m4|Nll(nqaOP&vbGqL zKw?sfk&^^W-i3z^{EFl!a}>u|c6N+m7i|?&qU)+dX0o}gpVQ%$GX^wU5qcMnSw#oa z+IR2oQzuW_-(f<0_E>1oa;n$l&6lpRIZu>SF;;7ZqF&q3&vh0~Q69Y0ca$;xJU{|@ zNJ7z;fXr%iQ@w?$SbU74mYErN%%HyUg)7FHKQ*WNMhLafQnLF8eVrS;alq8UNmU~E zlM_XfsgvwllS>u8WZ+dZxjawe^ zXj^lpN4!Jl?$RWKb?|3q9qi^-@Hs=TCm|=g`%YpP*1_4OxibhjkLybFB4`Fksw?b8EemRol0(DmuVyIG%@5s0I!zzRy*hUUhjp&e zAi!&A3WVReRBaK^@y!rf%y?oo?Sf7IMXwLIJ^ICm&}bVOi6)$D1oaK5jU&~9D_Me! zwvrYC_qv=94{U(7Ge24Nsw8@9Jq{5P?&~1N-9DLHTKsi`?z}&x3VZl%QGc%>;5DqW zZwC5_8Ai|hzRSlkaxT4>;_rBvj-6duf#E`|RR=L%MxTc-X~cR-w*DaZDOP-{nZTO#4CR zS3$zOz`ZCpklrLZr71jW?RUlPX*OFyKZI@_ul|DF$O%1Ch>F+8fh6SC4vM8%c>Uq& z#poHg+BFC*CpZQztZSA*@ADE~_84?P&% zDe*Za_t~DYN<%YVV_a*UZta1$B4RX6u*IZ)7jkb<gNXE;K$%0H~K7p}LSc!BOCI(4}iZ1`2)j4Ep#py2Egz#?Q_(v|*1V8QgvWh!oR>8=SKw}KK zh_ri-2!{6S|^9vFLG$5dsR z275E1b?Lk|{`pITZn^*QI#;Mjc9a)kAXre;K>T^oY@Rf^#|KAmUnGRG(hu@HX!ns-2p6zYegCR-DV(SKSH{oK>BjOq;)<0tsJp>Iu}Ko3IF1e}#!(Tp-Wu`GYqBuEDtxr>#3xEJSS?)5M`mv~1!jS+YjR<%P-P_l3jJgXU)Da-}3%cnwD&R~qk! z5`Fbo?f=K@jFBr$$TiscUL5Wd6RFD2dGF`7nSh06m%NA!VYJE_wi;`M7$cBb5Hdui zs8Tn-OTdr?XA=NU^+&9m?*0s()0JSvmatkZ3h$AKml{MohpaUI3+3ba&7d+`Hfw7^ z?ht{K)H!gcF_}->?Vs_?wE|dFo==}5zsow^$D-XPc)2tUveDOT)smFRFCm)HpXl?u z^Akv3u;AnYAmSRZEklP1AOUF^s7~BMH4G*Bp0~;E&I5WJ6gYWS3#bV0nF2ASNm3-Q z208fK3GNqa1`)Yxq&Nvp;vRYM7c26P21(i>zQ&e~Tiw*@`c1!Qho# z7u=QjuyurE+Q^5LYfUJPPAqo|D7LRYF9i@ah)t`bXk_Xz?N*nkrS8q>3+OoJZAH-vcYkO_oH|x%%;J{=3@B> zZ<|fsZzv69$3~8fjf&g@H06(T$S7vs{-|o0Rs+rMin<_;9r2D~uHh5yvXVdS=j)U+ z=mb<>(VCW5qst^qTZ^e`K2|k@v=DteTX9Nhp$)fmgS|};S z(>VF2{|%lt?5F%zP}C>B<D>1}z`lO{WxA5K` z|A^${TVAtm%D&r(=d|#&D+&C&2phjrI7IO76EzXG#nmwxsa?xfljZ8-i0crepjfA- za;pQNKN9nX0gF=L^k}w?`*Rn$gB793uX{aK(S7L(F&Fn?u!94*#}#|0z{e9V?bu`; zsh&SPL1H5aGK5%x)8%xMaH;9FJqQWGv)hdh5&-C(aRVG+d@0e!?YQJp$H1+2=JQ9 zL~eqtR_K^o7bIGV0n4=zY&L_l=6Dig>|k?7;u{EDEZmvl&Fxgpfd*OO*VfCRb!=Nc z83)UD%i;~Yg$p}|$S_*4Ty4kQfisv3MnXUG*a6o2h!0*y#fnILe=@gU1U-c{Skb+T zY;oM5pl&@iD-_uW*#1`N<6=m(vBGEL5GeDbkc4zJ)D5WS#Q7`mYJ8UvUl$Y?c7fCL^c7ha*!ta7x~lh&=AHD%Q@7CD;{S_wnJhodzB$d^XiNV!iEbr6>e;pDBdifrhqvqDrVLP4*fh8^6Q8E6bb zRLk)GNcR}TWxR;r*gVzg4w_JZaHacLb@0LWHbn!(bBzZECeDU&pHJh3Z}JL`j!~A) z?YxqsOJlm9v!H@jH}oFdihubkq@9dXXHV;lu`mC%Fn!X__TpVW0^b~D_mITRbskvU zm8fxe>J<-#-(`1XsS2q0QaH#R3aCF)k~^3|s^$^m7C7JJ-$sO=UXwNq78sc5RKZUvA^OSrOxrBE z=*E2hzq*IKvm1Sf1#-9ey5{K)1={6T0wj~srn`dQm#4WB606fRLr~(OPdB&?6p=^X z?SHRS1J%8+r!P46%!ytlaDIylT1HS()e{D?2xsBKRtTcAvY`L?__&PE_;>up_a>X= zJT9<)N9e_&=(1fp3bn}B4z&Gr&w-p78siWx!Nb`J7(U?nPD?FiHdWic689gG#tR1mGK6%C3Ec4+q+0+ChKue;%Z{8)R zIbOnb{XW5YRoG(aj;)L9;O6$5yL>^zx~*#k1WJAL?NB}&uO-gYM+u@5u$t!F*zLV> z09HwOIk8uvAvdw7mnI<}f7vysKhNz}-hn19$i@W1+o1ENH*L3pqtg>ld$gk1^W^oA z=uA}o!D24y9n-7~spTOD&1RZl%9Td4YTI-bOtpZAL#lfaaxQRA5&YzuCQliDzLT9; zbzfjvmxeL(PD^X_tI3du$hXFp2UCt?nFDtH>yq2|`uLPpuE^}Lc|u{Q<1?@GSl)23 z$4++o>oTV9^@!n!xrql0`sF$CIrf<)_p7VQ zo`5aw`%OX3t*;Svgs|n0H%N^;V)%zgG+o++nlI0wNPy_#AaoL2L9(Va$s`*ZkR%{|0IMk+eJqnWL%0~LWT*fg(d0Uf1QWr;Js|5|^5<*3^Hx8a@Nv<9L;+#ZQ* zqD(oj;z)a;8qbG+m?rLXQ`d1=4(G0CAyL$v?r{I9ma8o|p*;x{7>7Ixa2-xDq(?q# zk%)s33zw8H0#Wwc~O#du#ngFYr*$ zbI%Hj5QH_7sT<@;x)%Hp6cO0meVFu(i8^ngfO{}-Ajc@x3o?b7aLOiSt#?z03u&vz8@wD3M;(TXqiv~9p;^{g{&y3Y-khei-evlcbvnQtJjzI( zXe#I=^cgw74!>~-b$#@Y>HQpD-6j{mKObyfNlIGx`T}x*Jc)8&(@xqg!lQ^~8x%Ct zBmQb1d+_?J$OS}yxM?Qz(U!>?HRj5!M43q?t{t*8i&Aby|E`DjM!Bt^rULlEr=G06 zeyj&|#Y z!E6-%(rz1nNs6_e4xkph*Vy``b_BzF=>`ypFYdFXgM#O)ns~me^~&J zih}*80*u(Ct*9zuR~37NW7@J7nLcI(DuF6{Gw}=BK$T-X!Ys`ZI5&t|$5si;QKt}8 zmzc_ToRjIK^jrTA6>94#_X@rbl!1{^s)-x%vp0IJDbUBAM?x? zQ{TI@x?|tgYhI2Bd>c(c+=xQ`tq>o5@>S>(n|kBy?~Ym=>@f5lG6l_{OJnI`k=p>A zKP$8dJN+!?_G%_x*Yo-~6&@ ziwz>}&cl~uMrVBip-`K!GV*9^kEK4D)SaGK7PL|?-H z#57JHck%-Sp5mBIA5q+>-FJGu$n{zFroP5yTlQT4#>y9sx+X#e+>zC0sEs(abS+7c z1hjtX&fw{B+;9IgC5p;3v2WsRlUu%t1}A+~(IU*Ogy6vQ6Ugj8s7Iq*N{tq>bquDS zCWLSCAS+s~*s}iORdp|aJ>3&4(}uwi@_}*8)INfC>2mjZ;D-|rcYv?d-Q_1pst~L~ zeN_6j;^qbrwHJetXUDv4O`BUi(`$2^;aQ6yjdHb34Z{rrp4H{!|BFC{bw=#1D+Nhn znw)$0#8|A#4XF^k*Js>;DNj{j#mS}g@SBT?1q&a@5lzo8xXfzP2+#Ul)QfwE$HdaM<{E{frq8^}j zA93)C>ei_3_)H0;MZfME&Ta$ZmWG2u@9$Cm>F2+kfi!b?J5tgsJ~!wAsfz52u7D5% z&giLZ&Tc;1mw)Z^e_+@97+sedv{#j6Ba+j|Fx=I;h34UY9ZY&UqnoV=Z!_cm@`v*`k4vei%c@4g!Rfu+fuIyaV0S*Ju<6R!wFkFn8ct8JrjF61%_;z7ti>0aA%77vc`-^Wu zX!3X%x+uk>fbev5t<9o_MT=vI7tZ%E_32tFgtvbx!ys)EhB33^iGRbtZH>@TBeW(GqI^FJ#-LRsp6}V7vHbu+5c%3 zKQQJE5~ISs3Pdrw4l2AR2?5+D6Bm{2asTn1EKzlTuuVi@JXo9~5==9AK)~S84@Rgj+|0SWY&|#CwOuyWO3zt!b1@T*1TIO^LGu zjZTZ(yPFEk?pG`-=6j!defZy#o}D7E4quJoX@w*qr7fNE$?K!J40&%Ytr@V>hA?Mj zpE7Pe5h(8=Hb$4|LpkTGA9Jqh2J!&MNhGDNC+Q3vtJbYEkHvfejQfXA;GPWhxkC3KXtulVEG=~ZScVHBT3tg z8j8-=5Y)7+kryM=a{#rd+MfTkb6F$eq^=}JsAW zv&^2)x)OW8S0cZe*onwa0~X^Seeu~yj*jtjHpi$jMvZ_Bmtn!cQ?D`t`VpT&(qEv*PZ>66^h*Jmi`fDF7YGkaCF+x*1D1j z(hz7g&juG5M1a~~01HC)S}Ap*5l)D$QDR9NADaKg#&)-OxkaSsl`$XD3w-V0X3DNR z#7|r`?DT)U@KN~HDWmVJh##x`z^W%JK#2_8!3+f|5I|uvsj;Xm&bQr@MuF(+X&K8s z{f`KL=D%-Xbgp?PX6*C)q<(aq(InZ-zFX&wv>`U!ZpdyrP3eJ!>a|1(Z^DRpO5a(U zm};VbDTo!Bj`_F#3FtA3p;r0T_c+6~g51rpOEK`q}$8^bif>v)bv{_k{JH&o1e{LxN)#X2!7U?IX#IEB4JV4xC<^Bq!2r z;EDFd5e3B!+9t`G`AYrzAg-gqw$V#OAqfUPbWzEoMljfIA(&NBe!CV1S<@#!r{~Ea zu^AYLX+Dk}usWFVdkYz0S4hGx=TtL(l)Yey^%O@(MzF(b*)&c5Th5y%Zo$*R zQ#y1)v%x8K)6Mrfg0S@qXP{d~lsOP}Me>(Rq`W>YuWRG0Ilr@Nvc0oMkRF$6dM&SX zXK*j)XxB>q+YNWt(4cF>{e4+QnnioRct;7-8jI&9{A}{aLp%jGv4g+uxZSF?vfSPY z`S7t#tTSjODB4xIE8DFafxh>Z7Bj?u@m^?*(km5Q6ajd5(UtB0FQ>x1x|6SBD?8@v z71=GCF#OuPu-%jLShfyirNg`ZmR;}Q6i)(LYVj^WmNeH5TF%Z-_iK*E|XuV1p9di|jw zpR|(y;EPZodt#qBB9|}{ElKIglscgg#1fDNXP!!`jO#ltK8x#<3h*bVY(+1;ACb(H z7i?@cQcxw9r?ED~P>ga_O<1s_Za2DiQFYTlG-{@j%zZ^q2F*|v(FzAodroD7O@<9J zG$|c%A>VKNwmvfcTHP~4mbVtSx7`I)P6Q?UhD_82v zq<$L``STEjfri2ElAXF!cJa{Uo6j*2(tmcO`+mpQX;`Yqvj3a+Tg=x>@K8_`E@rF@ z`)Z+}3$PX(o^MiG#ttGXB)L%(&jz)zsa-Bnj9|a%e7dC|5pd+ZGLzbNIGtJ3GhG%4 zv>#Geg?92UV%VQ>0>08v1$zY_w@rF$+r*4};|iqM+!>E?;+ zJ-P2eYJ2|}$EV=o!u%kTUx0JxF^rCk*TP#OC^=|f03V-){kFb+R_^iA*nH7ONRP!g z$wqrIg*YFTm@52n53!Y4Foqz)CgLQH+juWS^IY0UVh(i{^N4{8=kz%c0$O@o#w>j7 z%f9xi{M+wI9uWVBKXorG{!B9Z~8KNS+UrjdfWKHh-OzQ$xq$T|`>=NC5-E!-q$Lyg?eQO=R`h(=m)`4C!DJ z8&1rXNrpxbo7+3R-)E;~Qx~`W;*z70FFa($AxX<_v$4{E8!&}wMMmuFz7`t@DI>$s zD7JnQIxWXNEqz|@hIzA%>5d~~4V`H?3}SqiRk7$}ybA+xfXvT@R(m-rCZA^Oef>F~ z&uG-zLOgTOBl^@KT2@e0g%{xu1$Za5$%R{Z_p~&9o0PI_HTyL?V^m{r_su;Jrodv> z5DG<91u&W|if5H}(w&r0Xn!foqCocwfQtAXW2uU&e#_teQ}=G7>^;x3gX@lt9Z0JY zfJ0s}DI<>IBduXCbt;N@Y}o4N&9uYeSk3qIHkpEo_)nRq=*Sh&iJv)bG&*-Q#|43}cZE0&}+@Bv$S8FaSy!cq#5(~q^fpSuismfN_baiYtD|_dthNHF$Ebx+s!Tv zVmWk+*=c=U@wRtgqi%i|Y%yi&#YUlCf3$8f-g8gq<|&ZM>Ol{C!Wa|R{`&R|Drw5Y zBUhBhsbH6$xt?@QOhUe*o>ZVi0NIo|uAgp&gZp1C%^J%z1BH1#%@% zyv<3$jq@@@GZYPni1bwYk^TR*n-V4k?>eoTgFBB~wk{sR?a%gdS`>6ShxdH*U%Yq3 zn^x}eDgypw5$G!#qi5#R`=Piu#w8}`=H-F}J`yX4JVjE|H!^B;&ui*KpERiOJ>qV9 zWYT0r=50}!%PtF9TRu^!<0LQY>Ahxjotf9in=MAv4;noTuk&^V!~W&{XwiA*S!#z= zC3xsLG6!7i$xT@#RSKs^i7_;5r9~#a-z}tJtn9>@JZhah3gKXRXMmn~&jYV*LgeyH=~}0SQXo_bD+*T z1{wG@ZMezSU`a-@l3yY}c;r)zQ)R61#+!_|j-b|352_HHEcamD)0q9Y7x%qf{|}+2w>R{i3?duG#~yKRrE7yi5p6hN!X=?T zINszz5pAymt742hYxLM`!d6pM2ISDn`1BXAz@l&l8)OjcCWt0THNMYQ)#P1SyaLN} z*D@Zx^Xs>DT`%UFC8@cgh-IbF^Lk~sm z6@08c{!Afg(UB=4^RC1^L(y$gT=X438@vu2XZ_rX@*xnW*sS@+!XpB?c5l$yOTkGn z1RL)BwA0Vt9`{$?`0M}p?T`HU_r74#%{_JFOBnJbYt99O8-`lQk_~AcCjG>*YU7D^ zBFEd0J_hJvmpjIr>EEO@v2r0yOZdn`& zZY&;mH+BpuLUlJ?8Mte?T|?>31mlf+YvR~hK7V_voN-qo$>_M#(8;q7YT2{p!{x5N zeSTb}w`xy0MaqohJ|r7+CE~4bYkR9MSEiYmg{PYwM^M%P>@k-wGHO**df6}yT%*VC zuJ=i^O$r1OttY-=2ElM6RtWBL7*u9q!Lf4ktcJ_*lT?zW5J2P!Sqse>yqnXCju{eJ;A%7 zSaAhgQx`z<%(}l8ly+SN{_M8?-CIyO$p!H#i+5b1*ztm2OEzx+Ib0kA4J12t&DnWX zT+vQwsUnu&*3_0?SF%64fYbdBW;w0<3)pCP(OX@?a{6WB`D3_)-y0>>*tu3bW74R@ zp1n_n)u&>q$9f;1=goO2VW6TPi{-J|ntfXK!S`D-PtB*?fO8PN*8$Hl7NK48`S9nJ zowsNiv6edP39yy5d61Y;!%H{C=;4@h@)wNV(WvwE+1s+YSz;<_n36;Py?&VSo@|N& zKm}d-_oZ?=FSz-|Jrnj4|2>Y%9=3Ug@WHAiogG%u@}x+u$7fhxj}BoS*;o9FBAs|R z3ydTx0M?z2x@0bdZ6GN`m4dp<<^hX#sTo~Iow;T-%phZdNwl7FX3g*3Jo;V=jyHZZ zIsbfM=-p1ow-DB9-Wpwechhlte~+ zC8OYEQ$WE%7U&3jF){>tKAuuXS6L{8&@6^9wzoEmJp!d!YV(jZQLG}BQJB(L28;Ki zSqMBC&{>CGg>z;k9B=Q9=cuVj2Tn74{kt-QXMlfWpQ1Pa+0jm8|G}yyQE;=+v@sM` zJJ+_?3{~t{#CDp6T6%N+=7;+dmvf#!NM^AdG+@r$pjQ2)gaT}jp5*QF0@png_OkhY ze`gjWo6E_EYWZ|$!b#nj>f&Jq@j{YR*+p>?Yh1_;P@Yb+SSaq&=%!4QhK+RTcX<*H zglbu*F_w2MWeiOsk67v?j{;*G%W(oF=ZwS(M_So|#VzH8qwSkHRN)_E%=+1`6oS3p zG6L#Ohly)kT)U$)5aR_YRO?G`jv_~Yz9bE&;^O)`aw zg|c4nKj4;@9+7XlFy3=NE(bsu-FUkhLq!NHzEFMFTZP(8yTG!y0GoCip-DY~q#20; zrN!G~WwY`L1Pv@3Ie54T?P5i;5<`xpz3eter*i!1+a=as>-{XBcY5P?Q4oDSmuaC< zC~pen|LTRHdk~)cj@M9xf3Yu{GjwiBm%i>D>&N5;ta~Et0OpFYKZ-F-Jjq>Pe=cXT zP2E{{l=DOgNKNe2yeSc55T~`~UMu1h+zQp=Vlqf&)QR&hgDM7EV|E5paH)4|Wj7dy zn(42!EY{A$KqZg8U1_+>&&j2o*Tj$E2vaLExmL5RVO84YE0n4x|~s-Tq}i@tRh?`*49*qC7s)7XYDmk7$~0z`t*O{8Vm#;tt72Z2Ntr1ugT{ zm|o?1fDls<_r-z!4dkLVtUW$||FB&9QgH?RyN&f}_wK3a8x}3yLr_U$slKykOV`kP(|KA; zq#kc9GBIz#qsEZT+FKVGD-N+sszT@rt@@ZEHI^PzKr-<>^j%Y?nxsZcH`9zR?dh#` z*~BG=yf`mzXsiPv?(&PXQanXGa6o?Lku=N&aw0Se;7R{gjBr&b`UJ|iO+Wadf$mjk0Y|u=*g%8 z)&1fE$ou6nyc?C|{pn1hxL0J)7>ZzfN95ok{fwhu*c2;%rzq4_rPYFx8?D50?}D}1 zvXt-M#89hA$-rnu!R>$k$(^@Y;p!Ke8$@;hYm%Qmx1N=T-J_4c<8w#l?}@N)Pj+9$si_h)ezm8L;*JL-QG^3BoQOae$U zT1axr?W{c2;hP9I+tWY05)-l8XmL(3%>=IP@=_7_ZC`Hw87ZjQa#7jL0xkGl3vOyk z%+gK%z{P~OcEU+|T#31YNqG{FI2guO$mT{4ozys&LR=Mveob2=)%W}6O=7utt%de^ z?Mykgx)A`1z_r|-B_jZhuCX_vBVdJ8*kWw*40?u>8@Htzb>@ldgMz)d=_4?RA9w8C9^-eopU0#;GbF*C6neJEi=)L zYmGo#{vPykDA?^;&%XG(lPu-%SLAbC_e9vsg z0jc9d>ewXw+o-g>O5E|Najni7ck4cODfROmm4fw}Bb!X`S$8Jp z-YJsIw#b(4sMA(ta!fH6oPD^@mBVqpn#_MzMLd_)!w->h$03d0-=4z}^fgGi#jM&y zs}+?($WFV+8+SU4!7B=31a_Ms7hgLsDWz<=?Wh_kXz%qYAAtfanu_C@C(r6Atvcss zyl*m2)S<9+lj}!K`&JdzeCf?nto?TR_t7t|3xfVE_Zq^J<%P>yvydBlRK9m{1J9m4 zE_-UPSmGr^5oVNzP?axQT+s_H7Jsl=1pOHVxy18DHjv@y&;zgRWwiR9mwg-xUZFH{ zy{E!!Myx-Vv*(Ion+>vBE{n1(8L1aQt+_V<-C2JrC3Q19q!^-F9;TAqr3|CCM*E`x z@QxN=wIg$k4Pvtyfj9J76H%a}UG%al7{KD-vW|W-?_q2sCE_`6js4UDXzwxI+@8{N zZJ9cwY~rn*byP7|cW|zJRIYX~*E&tyVpH>&3PYJF-b^E) z25Tl(Hf;3fR?h+R)DW}s^{~JT&Eq>Q)h#tzX+Qf>Ex*NLO*)BBk;=B6JU_)Myh~9s z1shaB4tcCL#C>XQR-K0-rX(S-p;eqmvd(?WOY?w|mB131o%1s6qqWpE4s*ds!{CRJ*I&$tuCv3j+`=|98!fTRHg0Vj_wgrWt&u!ac}i{ zBmFh%Jt^z2u|g_7vY7*^=FJRR00bAll5aZYqhI>sH^}Nhs|}rMi|2sX)4NQT>EX~! zy-z480yxL^+Y9rwhDhbRJ;lW|RC@D+CDU*0kYuDD^q`NT@yT4R!!@T+2MfRQuJ8mW7iUz|TZf}b=oooDRmWwNn8>wl%>xig3W(_8330ZxW zDe%Y7=|lGi<5gD`{EDN1*YuTJctc;;w^F%5%2Z=+K6rBsQ7iA?y}<-y>M(lJmZGDz zqvW?0SMZU~pu8&ZC)Q=O)v%x$&xxPsF1DqA#>q3L0c=B7&!aI=Cr$=NG))aPJl5r? zBP-;|dCVQBZalW$-)wE0v|Ebjo;A)7nr-8#X?1-uKyh=lE!Vdz*6c!6LSgO-)6#6# z13tFe-!1IoNb<3ioH-oa*f&3}AQqoBY*u4`AEsenHqE9&JvdIl_ZUWB+^i zXiPDCrJQ?aS@}T9qBC%_)q0gmt;N0JY(CPrbqw^`a~lPri&DV=O?(zG2*nhHzh@8q zV!`2wqMrbI6zG&4p>o9iQtrfn_W1P9t^-?1Bh1P_QgfSv|{PCte-uo`;-l=(@h^HsUN8*Iu!?tG}>yVXkBbm z`^aJix^k_ko7Mne)fADK+vgQse%#>JSmShT#1>hNPW25snXva-)RY_+6;9GknI@=z z)UcV?>Vlsww5Vf$G^B? z*V5gI#cxqvfGW_EE09*>?q(DKd%13sFnSr@Y|)WnpXM6Oq^PT``P(q!gCn>np|a+@ zcbj8#?wJG=P>wK4QkzM_-A6AuOl)n-xUIJquHk3_m=TD5`t_kP$Jdp_2iSIa|{V>)F52J)$9)9&^wnffBSts)9rQA9LI0 z%qE2T-1RltNHv-wL?Mmt`-W*!xb%1-a_RWp=Juf8V5f~cbgvBMb!)v|)VD9AmEs1r z{ubg^3tIN_S=Z%rT=zuS%ME(QD}@+`bPAm4#?UUOSej?g_MdLBn$8MZCYWphV>L5j zjG^87`Ir7ZSLD7j)5LP!#q5z!Z`$77LuLSK=U1tGdEfL^XyU{=7*I9X)D!OaiSP## zP`BQ`5xwj-n*i$WG6IR^#-}Z#J%{g?h^mugkjZnzd@If4-Qo4OZu#?K>5hd1`65u^|&BO9Bh!vAoCoCV>73wQf92NJqI| zUu%UTm2Z%BQ^DgyK3zS$WcYw9#!&Cqc+cFM((p(3NvOPq`g}xt)`3_vGe(?G$ML>( zuDJZ3b29EuDuy)p^dij3gBLew!3$oeCAPu9XaLv%3X7Y*oYNSR1Co=ClfsFkhJ8^d z$kLM)y(f4tX7Dkf$3?a;v#^(&^)Uy6h=kh=G%xFG%*CvQ0A4NPR!poy4IJWGU}Hoq z_X=_iwybK)Q0ZhO9Jgk)P9`+?zASMQ#{}DzavyhnwLUJ)?z;Mhto_HrDCizbvRkad z=5BGbSHxAVqz9b3)p;VoSWOe|a+@8D^Xr=Sm-8kP^k6J&00HPXYKir{tp>fB#E_e@ z&z{e|^M;l#2;SwV-Zx8O($W!VGVdXe%4B!a@pbE)J$uMu{BysSdhJNT;XbR!md5m= zdlG)lmYO63ZIi|4r+GIVzd_pA#Lm+^Fz31R_6BW8LBzecR@F_cvA26yzT4AI<8j;{ zthu$W!h*MiS$9w%oEaCy8j$L9u6R+<9=hLY8JWAl zih|DQ%91m0%qsSTto_}jl20lyAEmaH(vZSJ6cY}AVePBu9*9T&59X|9TV8DC!fOv$@9klNhDyr+b}BK`mYt;%Eo;%5686qLirz)8~>*qdo zt%snk9+4p~B{dCG3%iXbym{f}LK~!KM623#+GuM+-&XJq4-s5q5+;UJg~8h&)fm_d zCd7H=SyLm4x`D#Gxdm6EfPJ$uF2oIvs29dew4{U>0wIIk1(JEWWw2nCTG?EDExS}{ zt~vhMs3hE#7a2F3IkgoS3w|vVcipeA=JQ4F2F{Y9(m}h%qJX4dYwj7p*Rf7P+eo{2 zGAUWDX+Oh59L>hk5X=5P2`7}*l4vQDg&(0-E2?tg<}WU3X!RnrjhMQ&t|Y?T-IP#? zP#U_}0}E2)YzL>r1yjZz0>M2&tHTeLLRH0>RRMSkbRaHO*ba1*4;><>v0U70ij2(n2E#RU)zWUUL@> zs|rQ(h7)QvflU4D}wWg`x` zdIk=f5ziq-w6DsVO4mcElxi%U&59Bis35I+eYMYB@|Iq)BJJ97H_!+;E0g!jyvS@q ztRy0Dy`>XZ-SuXX%SO*{MsFzAYyw`3P@^hm+as+}ZtlYweL;~?y+lGV}L0=N~&s`6_Ee{uJ4^%Hv;dj6v#92OrAklQIF)xcgSyOr_Bc#qpHhsBxb&)8H}W-diq< zq0MNIG-Ff$+^NZPH`0}k$LUzym^c?pwKzY(V`y<#Jd6qk%lY;dbgHI0RiJ7*yb%X- z3(Vu%1Gd!q7+y?F6@}0`(O}3R!7en0Fz+GG$JpO(nRcjE#3fWD+Yta zbq>5S?ab=dw$qlqaT@N(#n28r@IZW$jAJm3D?U@u&iusB?83CoCd^Wi^&LqxsW##O z@W(j-oLak6p8e8O5Vm)*Z;`57%*&o!uxN%1zGM}KbUA5~klOq^*M8u0kJm-+p|CI3 z@?IqT8>9(ldSld`HBC*rX*3J&W=jL3aRb{1XbiweN&@i`N_=3lw!w}>>jqQnqp|JS zBm#Z8J!Y&9e~#*k&P~fY@;r=XrlO}J(`g=+tYN2`D)%~9t5;>(W7T}Oa8f}e2N*|7 zC3f7qIr8>^!ss?S9*|8@q^$#+h*p}rEQ-!4vkh#w+s_FK!IhKuyibz`A1brTZy*Th z;HqIJ*|Hftjy0XA1x=F-h6{|eb}xrK0+rPZvT8cxmpjm!Cw0S>oFqC2-5W;wcxZ2t z<x0ahx@fZKCVu=4lbImR1#?k9@kgYi=Eb{N57}XrvC*Xo-^;mBgBVf(zf+ zG$UB(nYFY+zP*UP8Zr!*XnSn|hFJ=`ZRKcyKkv02@MNRKZ$AGn%)-0n1+IH0?AP8K zj>?Vta{)~Y*p(w&X=|v~i<@ViCIupm)J~;YtW42VcNh`kk@uZzFF4L_Yit;w36PP^ zc$09f`Gu7tsS!;Iw(0@c@ByHkg)q=t0JY z=i*q3E0CHZwevUcM7_dT@2M+GS86$!*T?W8vGeKtUYQd!@6l(YuKko(b#3U-RN+FhnSplBa`%$s%7r4 zn5tpa1{sQ0AU0F07HV9DSNZr}70@WYdqHoET3TEiEjaQV?BJRf8RIe+R2Pa$#=-UE z(KoN%X-q+Q`{gwGEVr1gxz?Tw_u-8$%>Mh4_#>5eJZ)3Whu4ht0-h?Ppuv5hP-@c$ zZ*0*tW86PY1y=9Ftl_j?zYZ+44bR&4+005~jVDp_YBEW!I(;}Pa&DiO2APm*LjByT zbZnpSzR$v4K&KL4QcW?UdJL8mzpK-Bf@L2XxvRZ6TyJk31Vx3~3l4f*H1uBDcFgya z#A9qa@*9G6rVWa(=pNR2?9A#6$`NU-tQH78tNP}1W=p)>R*1ki#8#5AGFk1`tNRr# z9n1YDpbiOaRTQ|`gKr@~%xfJfy;FcTGk$Q zQx7J|U0DEHrAb>Zr=z;OPX&%vi>a?vpNCtgYMD*3<)kz0T*>-pc*UZ($I1qjjeLsH z^O;^N-DkwTs50C3#fs|i1rl&_uJ{kJnVc(%&T|ajl_=9%u5YfnA3+LYyX`z4r}ngy z@n`T2>ivNQUa4@-Q24Vps&}UzCgS&Y)v~n}G9{$cX2qTWZjuK9&+Bx@bN0zZ{CL&V zl$};Ryr+Kr1;*;W?y0b2{eS+8@a}T{*XGMud#E#hnVGQQ;q_v<(O6?5M_#9O-MTr= z3R~)?#$FO8?)^Bxfe$W@*2eqPr_SA1d-~b>gNsp3o4a}HzSC(PDv#ZFj*M}%?+VGa z3N_m1@G`Up;l2Ol zFNLdekJddGcC2>Te2eVTb$mGbYQbf1Vi*NY%zo-{o855-YQ!r_d}xh1jyouzwQtB41}STr%E-? z9W2&{rtjJj!8AZT5s_pYT`&Itgc?;Gnl>>5CIbx$){c%-hoRI<&k zSYwv6_M;)eDWj<6*`I%w9^~Tiux5qux3k+@*&Pp)R?_&~#z;$gKU;#1S%rMYkn8&X z{=ISEeZ45c{^RdmU2nSeTZ(^k)M(O$F;lkG8C~cx4kkV4(aCe&ip zS{}ns2r`u$Z@2}+8pAGJ!gHEzd>@!Gsm!Wjf>}IIAJ+7kKe?Dk>ub7E!;4%uI_}5r zREI)%$uT~UskPRz5RK_aUI5R?n0b-0x7NEW_$DI|V~8Ta6loZMJXns^AuKmn(iA6^nrU{N4Muc5~LtqyjyED4HgIA+>Xn>I_L z2)yzz$}PA)8|2Lhi{&1!7e&~ye&TN(JX3P*?@VWRBo}QOimHsF@ls>yilIMM7q+-F z(9TV(JJBnO@L-!5CW0osE5XoOf*ak)X3N&4R)IN9VPsPdW-!d<(+#}4b5dP>@|xiV zP^oC8os%$X+^DHknUZe!-Lpg< zsl^9PI!auJG3GG#2N1ZYgLsD*=M^{@<=%!1)(8Mbaen)-Rj?1SI+SuS`l$8*(DNRQ z>ma5KYZYQ>#&J?1j739!OgyV{P^J_+1tP$*bd=viH4mNiV}fX%zq0iXUcGO9<~3(e zC6lZXCZ-P>zg-z?!7A|B2ucCA-qH75Jv1C@aiAwKmb2o7XWF$VsYSo@=~F&4lma8; z(3;2PWT4rysWS?74uaI@mkr^^tw#Ik0z+IcO83n_{@!~Nr%zXq7kT}fKb+rDgza4z z_DC)=d#M@1Jl9r1+Cn(jrjxF{HD;Fz^e|H%HP*)F8_2hAss`o*f(519ZVd^oHIg@N z^scsImJA0%b3ruk2aVRrAR@^&k_luKZ#8cZIvX9-gfjU?@G-prViCK5-N{z3cZODJ8)gue2aOzmc3mK7)dqL;D zlNWjY)4vqn9aDHJ4CbytOYSt59yTK&!)hf76X0tkxxl4kt7?nOJ5*gIt!zSiskTv` z(I{7UcBI?dgRsx59b%2AjhlV>i`$x(;%BvS1gxS=kanp=5n@|AzzBY#W&p8s%ci6d?gc@z&F!9SHFyB%zQg*A*|=9#*#$EcC}BCA&PfH!KSr&)6AgNk-tS&FCq;?n$<`ZTE|El1b*MJR^ ztX=VRbQ2yntibJGP>tc`pLvoZa|`L!Rn7?XRSQFKuD1ES+sk0CoLc2T;HJ8_rc9iD zr=_1G4_sM#xt;^R=H`N06H6cJHqDJ!blT2ItNsi>5UsU_CD**SmxQVX8a6sx9mhf+ zbRfox3|rF=G0)2xW6r1(RnYLjNQpI?n-5v!`J}A;@ti9I(eEYh4PsbTs$qiqtLD<{ zpYZOJ8iOVd?Cpk8$g22JB-C&$lhy*@z>!^PW_vB&c;2dB$u3iJQ8t9%nTnpy#5JIM zuNS_sdU7^~6wRc~*kA-KZ!D_!SgHpn=B_iZ->UG>XYrY0yk1m6=e?GfX#IbSg+lZGz4P{v`%V2fJ zI0;Zt#OQGzlk7d9ZY?Y#`>RhU&hWCW@r77yFJpYIEWf0khguuu6-RGLm7*&t5oh)d zMqp{+c`OwCU@yF-y2Bh%O+YIXg~#uXKXa;0GiNiMlfF6C7STn4ua7!eU0RlN=ovl? zHuK$)e>Vz_=df8Ns?p3-)K+AwfN(xMH}4K)cusH4Dwwh}rR{9R%DfDw40d933ry+K zvdgvdac_R+y)UkybAQQ8yngMs=10p$dwRRcmwKDlk$s#})OlGbIrNkW76H>n<4ZgM z9eyv8Cj~ByuUnHEkFy)ybZXVGA#}DIh809(OWpa@O+kNQjPj|27tG=^#tx$k3%3@> zX?!w@2^8bKrB|D|HSv;Gso{zD5!XMsB@Uw%cAX(Q2OJexQ&1|Kr&5=df+n+awV=g3 zBs4%&I_)TgPWklSeN*<@Zk?Dfh85)aV#~wxxtvKQ_Dt!qo=NZ!Ll2}TEtuz_DMM@a zX?ViWYZjzVd-1oLLeWmTdJmm{(3;}goeZpHU`lr}=P{tDa3pwsO*>aI%MMd$ViEcc z(`}96H$DZ&xd<9Us&#SUY>g=8WwQ0W>|AhPbl_-^X=Blm5t%EK691mf)iauvJqS8E z_Hz;RKlji6N_fF@*MF(&C9~|le&R2OXNuiHsEhh}5_TVz!afwgwE)CPxX+)#BS zQ_yrqWxn36jRQBHW38Z48UY>8Dmb{q_C{oEje_L8N;bNM$)0+dfBiL#eUmXad-udLIoZdKQxKW#imJ>Yv?Cp`=2rsUQ z#z)rzDE6kyNqYcnceO}Jg;b3Vsjub@^}A8fJ*?|(1T7WeeSg6L@&td@|@m+TkmPCo@*0rxdtK*VCfvawjGB?)KN*|b>FI- zhT4L9(DvRlrE6k=ZaUahQ$KDk#myS0_r~?clvd0j$KQHW7QK~qYM*(j8H2&cZHxLd zIZaIUknXA2EMk{hLA^}Jd%rFbV*+GD?~o=!BaWAQ{wT%xmnr7 zrj6T^jsmM$5iN2;1_z&yOajVAQErM}?(D13>oc8(PnBZp#XG?odZtmpt1zeMd1KWD z&6c^*E7m!Ofu*bs#yhVX+_s}()4lVb|E>9Z=PGHcF0m5dzFxtLdr!c^zj(YQYGua}LmM2qdbYMbglD z{H=W z?Z+?zK%my`r;*$f$Nj0<5##t9`;VaXoG^0Hp!s_7fZqIa2s*Dj(Mbx`e)k%6+-|y&7@9J)Qzf2A(_^X)hkh|skxtQ@{p=U(%9S2>28;w zz*W>NLemEES?C($nk#8m#|1B2K@jl`v_W!EDk^3Hmz3zc$MA?zZ73y9_~gcEvFwL6 z2fjVgMh_4wNBlhv=BYHq_3kNnyDG74f?GW8S0Eb4_emTmr_R?qzeT6J=YZ&pLfj-FjDY=*zM%lJ-3uqIpT0{a^=J0}-`9f~c~IvBujTk~uFQ zF}#km*6U10vdA_y$ocd&SDAfVWa30D0&6svKG&T3Gv%*uc`1On|F!k9S@!ArXC*b) zH0hmlpuQ!p8PL)SsT~yiH*xGD6J)FsOPWgaeq|1ZfdSR6k2!AG%P8?AvAMxnMnzIZ z$JrmfscvyCUa_~i5PSZ8bh*cLo_8#9b{gA6Gu|7UPr8t4Y6h{R#{K{c-IbQ=`R1|s zBI`!=b8TANW>6nd^TTttb<9Ix)6<)zoZgK20kFQ4Vs`~Qp*-%-x$h7o!?ifSeG>uiZjo|?; zd^W)_uK|j}t*K8l^)R7Y(kx?M-)sFXL~w6`DXf{5o0enE_q`Qzap6yPC1thpklU1% zRCg7hgCP|_?PDvW!n3%)vGH5pGP=gR2I2)9Yn4r*xuU`|W8=!;Y{N$O9xUM8tAgD5 zY$qqrYRv;@n7b$ER@sqn@eoXycSk5Eb`3r=fcHhzdRN>ej@}4EZhLkh-vo~QQjpgr zA01zZ$@Cl6HP|x+Q3isJY(kOwr=Iz1%~iP%)_o=HSdYFfUzyG2>2hzcoPo$-ErwEd zjchKoxD`|v9lgHpeDW4sUo8$VY7ABZHzn!NRW(#wL3$mmM{7;M%U#{5DLe3}8yRCW zky;p$C*WahW#ZCJP@k-+LWUwn!}a&qbQ3&*;)AmeeG)>5f0Vtp&U_Q84Klo*zV-xg zu*j@_GB@8{PX`NYde2grUY88jrZx!wKZZ?gf_Spy~ z05LsPnT+16wGS?(mZ!JeykZqm(fW#cpbveg%6aCq(cM~ydb_8ovk~F90xSs?Q}D^Y zqcz8yeEhR|LN!zrspPKO;yS9b;B}iWR%M?k==_?=QBb%2n%pPrz7uv|zxLbmyNgnN zJHk5T;%#iTwtN;dqSpEsI|!9?+uJ8H+rLN@n%k*THx-ptYhv-1jA=F{wjMc834G%eMQSCd^VbjU@m*G^YBTxjwSf4IP^>391Su% zY-*TL$vYOeJLdsH-glz_S0%>lRD0}$Go1hK%8^gFA2SrrRnY3jSiPnidRcD2f@lpw z7YpBzmNPaWXxr^l&A2P!WT32Ce-rrVdqfon-(yWxYKP%$E_)#9=X&|&%kH*6f87@` z`@d@a#1Djb6k&b}HxKl}#x`ikL$!<=x9wzIgdA45S*_H)HWwHQfG&QBmM8aaFe-7i zzMB7wborx=iQ;Rm)sdKoz<=6t^Wdns#h|2vjuu8Uc4^!&q9)jL&h>X<-}CcsfLnF@ zT$Y-)_J?d1NTkM_9$b2%3Swl$-G0(ujN{pkf^Vxwv=j|rvgg)=j&km_BvwH%Rj(M9 z$&}_UkN;>1udHI&o6MY>S zb>|9qYce?7n`@AIgsvtNxy1gs$wiS^(ok;@GHN`5nL+&?PlJ zWK&Orxp;1cqiSCgF5>96j}udkjW%faPsESj)mBk+-7sRYynn8fC#IZy&Ew`OtU+Rp z#i0d!^s%$(JYAKNS6oGNdu_ZmZiKt&MA_|lM&;RW}yjFMWap_C3G#4&5N4t zt3~guFCOyTLpOQ~Vd84vMWC`@r+!l7VD7o!+Ze}D-L7QCQ(qQB@eXj@U0-mY z$oO0QdH8XIc~VAxs%cIOtvvfsiBASZ#;jfh3;Y7&^Ly7>=3cM+Uf8kz&2P(Bx*_Rd*RI4g|-E1BP|u?m{U*uFegcNE=IJ)X)z46HbT4k!?}R$**=#aeYk z+NGxYq+0JhDfCf5(3DD4B|}d4&H+fhe{kjV&}ciQnSSnUrC=cDk|P{IOkGQX8xw-o zf|jH=8>O_ka?C6<-Kex(>l{Pkj?sXf(#*<3D+9f&U6)90S0)Dj@p)QmRjVD%Ww(1v z1YX1{A*8x)-oC1WnPQ4#QjW~u5B8Z*l)Y*YFVyi0MtpLNI<}eCJj+oWs%CiVNSa2;PkGw55S2F&{Ti@)%gS zfu`e!@ml0-5vu|)(n*^myH4xvqlE<)pLbd@p%{UC3tBDZ=MPV$v8p+@H10(>FTgjW z4ty8|cxrW`#glceI$mbi<8C_DixuK{RhR>nPG!}g*ouZ46>O4<49|$hXYf!&$5H9u z@L#_fSbpk&<-j`fXqAMS{nQ-P!fW;}6lHNo?n=!$gV3#|rzg>GeTrLD!H&Kk^!z|A9PNGICE+*vkXhoNT1qp?fUyvZ1=WzCqlA zP6;3=!iX{09BjO3kkcD?*j6Z7*A?cdbFScAHQaeDEb(bIu)?k3U^Opp8%(_o-T7ex z0D7jNvbPN7Ru5zX#u)%oK&`(ooqNv4Hak1bx#a|#JWElTMN$hglA+O+5?mQ$2JY1! ze3nw2kX_srQG7x>-gw?T8%4GvnQm zIcBI4k+Sw2@T>RG%3dLgi1DkE%tpyo!38(I4)zGXw?tc-bFZi`pj6mgJr~DJct4HQ zgrE%he;M+Rl?3m%{FDD`9HV?c3;cZx(20lGT&lgFdg`h0@4QC7yA8uPv<)??>|LDO zPzsBq9AQr*TdJ|K%EM0Ss@BI`|-4 zk3Ej+X^dt&^d>w~1Jo=NmR|+nLZzhA`lgZV?vz;v&$RA3*ZefxY8Jj2K|~doURSJu zm^!(z;NJ4O*1)^#@115?wC{Sgbh3Zz*8;XjF=r!wgl91D@urbFxmpV~}3d&}n z>%2G5?JGy0ynF8{FQetxA1A~W_X?^fmPg)##qW7=&0)W{ZaTPn;ssWR?oBqc72NQL z!Hk66JGRQUy@K*!#SmfX2fFSHD6~QT{4e`$;otfvual3-RS8$GJ{4Sf!9eBOarFLK zt=wnp?weF2T*1w}dbNC)r{u~LZ~8l*y!^yZ?Q;HyaT&jOw^H6X<+p5zoqE^0**doj zma>_Ru^i&nqmMi%?f!+b3Fq9*tnn60%@{BPE5xcWv-G)}oUd0mh0#)J4Yx7ZqFYF} z_DKA_*QqO^v+(PX`?4J}WoIbjD76%WwT%^bY=!()26t5>>i zQ0>R2gq5XUo7LPC5bI3Qgiu{;5{*!dg5n^XTedq575JJC)}U9#Ymb&iN#yMl1Z+aJ z;t*t%r2@&vPJm~?IrBU9LKtTw)38uaho5i599cg<(?OSxW03S?6=_uwb*3|%avaTj z8eG|^IrsjDB*wV?J9dv#t_C473YYv1QS^_F7{c zI->Xb`q5n+RRK3%XZ z1&BT9*(Rb^UYjLqPdNy9(|9d{Lu8+g|ybU&{S)|t7*D%iFeh<5NK3cP6Sq|kVG@gP( z{Eo8PJ*`vDMJa)QFrS0SlRqA|yFdJ@XaCW)*T4Re^x+R5=ZC-jvHZSok_-24lAY8NyTX`G zf0bYW;gD-etERbvmDsl9^`YQod$Q*EV4e0NBNxHI4}f-z<6WU3y*5`%pKP2Lem_67 z-gLIDeC8d5@9d^X%|Q71G}*>O>4+%rR?EpL=ozq6cb^R|+>!BK{U+#o+k=gg&Q($C znCe{5ndf6!8BTDqS_UtEQ50T7Ja{*F9jYy5(=g|Oq_tFK%)N1whF zPk-(>&K`+v|Iq*8cZKEZFQgDJ?1~VJAtuz zHlJ7SnT62E4iRn~mCPAHj6lHk&oga`81$ zj-OQ}HMQzEe-30=%&a@ET3aYvfTh|&X3SbZNCDzi#T#{+Y-k){wDTWitN={8^5w^p zRH+KDo)8{)mnvAfxPT#z+T=t-wsNe~9Y;%Hs?l-}%}|CP9zON6-*xoKU%c^#!*)16 zJWjX!cDVT2N7CW%JkFS!{_w*$^81QAf0f3Gd$t_+Nrx`(i*($5W!Y^wqiIC_9R&Sq zeZ><+n|?Sv{O}{ul&c(G*^k4sZ8-VRPyK`bjx z77Kql$l+N57?k9fyKe_dpljHr}GIrf8%%9!l*R4y;_%$NOfA_<88O*Elq^L{( zq{Z=f(T85vbw3HaJC^)E0J#vJ;_se#lZ0z>E#A0sE&Sw9ihSfF>-?%$t-|5$Gj8d_8Xg_zqVXj+a!^(gJ>Jnn!x3AVh4{FtsGJ`9+k0?L9iVc znUwafwg7oHY=qGi%>uWNjIk~gbjqDxN;7T2oQ3VM#WrZLOXjAw@WA`I^DbCt7;m0H z4!DH?jwLWd&?lKz)k&J5+C(iig{blU$QrEGdrbRTXJ4LNW**(~gr=2>iaSL#Mh77D zdC_yVl3wkRXGKR77aC1O`t?q>cak*;Q6VNU*9W7=4#vRKkN2V)dJt)}+5{}qXu-49 z3iz-Pp93f28Zj8Cw^C1`v1e?dfCGepED#E|xWAixvc2`(AG!0-{^<{t^J-GRi`#kM z^!=T1dU`QF{O}??@`=yJH@@+5#gLvTp66BW-6zZcpEA5OyTHHf>wXe;!{u~?lp9t- z4|(7F1g_HYanYh*^EL97UwPbIyDswS@~7ED&o*he6uR9|j6`ZSH`ixJ|MY+Ut}lIc z|5FHE;hmyD!405)J~t5J>N~f~hC)fF7D!;FN=+RZT;2kzb_;D49YdQcbaeqy15`{O zcC?A*O*hgEKNf8YseUR}?b!fCv5FM{D+WAl)i zDmLqA%XFEg=(GmDvEBlad3h+h_3hr$WyK5FliDFHS`*D`?d{>P1^KLx9-cMU$keNS-Wia7O#E%-h+SekABIY|K+crJ$g`LuFu{X@3gYY z^kY%fads2+@|w;9kf*{S27W1n7djpPa?9?>( zTLCYuT2$e&d~h^J(emml>wALb^%X#}cFcp#MYGMWHR{$j%iPy&Gwjvx)!%!Ytn8od z)m>R%(^?O`Y43ep2ZtfFGRa1$@*`z8O+d@!UWU}voexsrbtV(U-r93bW|GsIJ0;dE zHZu`zGsfapLFZ(g>ej>MPFBvFr2?JaK*Rg+qb)UWrC}th+p?@Kz?%2+x<^DF{|!Md zUx;t`%18IVZoBS(>=Pfoa}zw^ZV`um8`9+*%TH~7IPS~Ym9yNw@v){LzMHHS@q(>7ey-T5-%-pZOXYnD0hxU zo_%)62hC~oZ~W@jYk$x0d*la~tLCdAD{uTFk$>mcid?>^?pb3+AlR$hV{EXt#EmPq zBW@Qvidfg%ehf`qX`p}mG_{a(oz$u`*ptp-vuo9E ztYho1dhB4Wup4IrYSu%WSC0O=#`^k3Z;=HY00=nx?K2}_48!RZ9Y4Kf-cZBw+fDsL zoduBecnlX(wwZxOZ5B;A`gC2^6U1PyKi+TCg9Z&nv`Vc!LsZlieg12|qLr`zb*eyj z;PW@})xY64uKv;={MOh1*4aU^?AGDpbQn#>u!AF5tQ(RuB$n$MWfNf9K^*|K^*r{HiZ5GQXvMmRq+@WxYY#c6iNe zugw3#xBs6Xd3#FeP7tFa4^M!6 z{)RV+eASmK2!n^bc}@ol>>X-uK9zhpy3GRcA~2T6rWHYEI@YKk0XD?D_&WLYnuvXt z5oBW+V13G{06;H=fDK+@rDe3qdFv@u*S=Ci?JhvUjAW8f|Fc)C9vP%kY+YF14JKpgpzUaG4{-+$T%csjt z+&zRY7FXmAZ#W3_JVmWLh+n{*@Uwz-_Xk)0zKA8T+|7A@ULEPS%a?yL{!hhKg3EMp za4CLdGY^Ny$MLHkJAB~LUw!zu%G3OfT@UIe^2syl^SlT<#{TTfb{EH)isc_4{&@M^ zj}>9>G?Ru=L)+t2z@ROgUwE5fl2aOOT}`1fRK2!9=C5_bv*E)W)l|kpqXdfeEYlIy z*z#$!MUsmI7WZG(EgntTbYwCsx*9{@VQ$z=Lqic=+LI0Kok>2Kjqz_CK3Tm9`&>U% z^sX`LVJO(8Ko?)%WlMP}6}9o}w_=n^$}uf~AH7u6tJ*lnPt;{c^9kj{C#gN&2es~) z@Dk_BkPCSv2_fCt?zPs?a$vYbTC8}Fff4Lv2#~VX1O)9(KQr$qSqp6{pS}RLjVy~d z_fP@-e$B5e;=8XvE;9hotzb}N{*|8H+jpo;{7I^NlYux%b z9=;JF>_-}g<6M=xET{a}%SH=s}54xL6(k6nPXKF!N#p$Ym*cHKh4q}Ci& zsSx!4@tNX~ZFS7j?O!})@48r0Gl>86Bs88yKlorMw@*4@bl9sI^3F4;{T>@XI$c$2 zd=APkCWyu+adZ(`U!bTi6p>PrN3OheBHFb#duBd88E)Whq1^SggZfFcjdUk>czZAqv1!z+3AK^uc%5P(WbMWag_vvo6z4EZoJMD8?GNn# zdxsaAzhB&|H^A-c3INs@%@5bBNAra8P%xpT>$XL(b~UvHP#v477!mmmUm@~E4+(=o zXzbZ?VZ{zMe~c}xTX9;eqrO_tEY{t|PAGf9jm6~_2cs>P$GeE-(KHb|5Il3_@nPY; z!>LTh?5)ml{jfN`G z+I$(Z&R82a(4hz~u&M0?a>WDiS$rMC5|8b3ow=?#b^v!H(~usK#nj%BhDiEOKezGp z;N-MZ=P^)V(-Bu{yiFELXm2g`m51-P zEDsCaWV9b!Zy-622t)9*AKl4^KNSgy57}nPWv90x$BA5)R=n^+}v3w!A|PHeGo#L zHm$UZK6mL6BeyftUO}pRPvM^VOg*WsnGp95PVzBaz`X{#(OtG!JJ)~ncA3KT^W`a9 zMO$2mOuXYTOE%&x?tJk^FpR`I$O0EC*Ydr8X50L0!;%8#&r0*D9;lg=kRVf!u=ZeD+-1 zZx5d1t}eBm%izv}b&<_VCQ^3YKr7i|gcCv}<0Ckjmv`DhreTu{eMazt)N<9WMlLwdElIb72e>XDg<%x~_YstI zL(gU~5K#AMZ>_m!Bm#x+`a}QetAEqc9r@PxeE;c3m0)wN{QW~oigyb7>~xR6oa?@E z<6Y2^uE6)JqQwRH_qYFN2Vb>!Y5Sw)hp!zl2?jB6G0||@v3X$S83zYXQGw5n4GiBJ zQno3Z^Q>%Yrc$`^pwS1TTfXjrD8K&8g6z+HlO!qtx}2nx>TRlp8k@mLD5An0wIWR$ zW>_-^V~EwBaDJz~P1aP#uAiL2^4Jg^7id zPSX`Kx1_{+8K3t_K3*|MIzD*3AY9xnX1e&?(H!`UqT=#cXl_t3zd zcVUeLd-{Gb@CVHkR3oRpBbdV2ot-8SgB5`vAn+T@RY|o(=xGOI`W3Gcxv)ehl9rwT zYWw9k&chZ9 zWJyDmnon+|R@7`=a1?0b0~Tz7DL(br%@LEjbAzbRT_SCa1BPvtXr zXlz>Evf1{E5tVzkD_Yu5{LEZ+qQEEX$qp?%ln2xofyd~cuEb%8w}#>u z(z+Lc@5}dHaodnj?`-NTEImNyHx-2TwU>~OPqgr%{Bh>iDJuY#y|0{|tF}eb&Z^jr zERmJ5352JA2;}Y5qX-5D1`b3F#1z1QBj0?cJaL~xriwyGReKd#omR^ekUEo0H??^U z+3^Oc^Vd1y)XtglGHc1lntLs#vG!QrGv2JF>jLgur|BBGCk^_6p#o>*16JCqwy_d% z3TwNX+wT&aKr-xs;%d|*8mIBFFz=X))e*uJG#2@BtqecH~O zzx{{)*sK4f?_uypfI(Hr=Ve^?1wbd__3N47+%Nw%Z@p3^?7uGi;5Wlv=grKPw+`BZ zYP-`|TI2OW8y@iIK&#JT1$@8_0XqP9!%)6@0C=nNc_k%Rz`L%WNy<9)(~)x=<}(Gr z`NUCqq-ed=DVT@-#nfB~6=>pV+opu&L_Qf)L~(K~iZN0Lm&N-YQ*)-=Bvl20fv`i! zSs!oQarT&VG)rNg3eMH^nmx%>>(DJd81-}ZE@Loau(VgKfF0<)(ZRv29P^Q%uiga9 zP-oUiqw${Y#+CPuxt=*CbFB@7%MN`V|Q9AzhGD;DhfrTwFQ)LN5cveU~5&_`5E?}(bdkXTso;>q`uHT z--6g|_Y2EgK#{ZFIiGywA!JKasueesd}iT-%|N63En!RnCaH8@FQRcJI9T~9?v>vo zPp|rMv=UAxEy2vX8=nAa)S&_`$lwRH)|-l>v@{ zf8!eF#VcDZH2qP8|N7}xe#d!;t&7BpZ|T^Jp7~bWUds~ zy;yG*;@xgA3vQrD8aLZu8-jFJ6N;1vFNVhmwEEYm&6t z%4pD>Ilf~LUMU;r!b<6tZR3OdR7kv2t*6iITE?1hxPz^MO;$o$n>gD0lIO_HU1mGv zp!4W!+pB8LgHd30&uGjnGWN-n${^9!&X(R2i*uV%QFwP5u@EC!G0b#&Mr92SJ}N6) zysub7?k6$+#JbmxxH(ImbK!h^^U&PNG;_n}j7IBmI_S530mLxgOYsMk6E9@3zoMrB z3p-~!u|~&wm(P4v@eJOu8uh6w6P#=+7ChoPm#^LKgg^HMsq2dZDft-za=KVXDwf8$ z1;B_JPftp$C_m19Qvk-zx>wvJX!Zv$*ka}&;(EsP{gp*K{G(s->z?>3S8y-qx=-Br z9DeXeKm2657f-@!Y8p*=(;)QY<~27v<+^Ef=_Y3E4)-0(A#1Ei_ZzMu8%ls~*_7A{ zRu7iFA?q$k*&)TX@B4ZAd-;7fV9fH`IOb=|ez>*M&;Ti`zDxX^?C!OXWa7YqXaJxF z=fME3P(eOx_>g`2X{f<4fv!cYKo>r*hon1XSanqWHuq zy}oiWXevRE0f1HV@I-33p`n0x%*|5!^5edsyfu!^G`!T+`}5awSi?j8Bz@=xycW_} z#T0C3yaS`;&E_q=3cQ9LW38^iJqdV4xGlgMOG1V8R~|o(8H!n3LaSKfZ~$=;Wz1U& zH(Yoq|8|CfjO88|0B6prHEOlt%0poTfoF&Sz^{ZqrzcxEJX}gPrOxymn``2PhH|{( z%9l6=ZvMcDxTvaY3s~5^^BaH5m;Skz)4IRx!v6mEfArGkpnLz2hR5)XDX>{tanSC_ zrYZ=hZaea>(Z(Zb0Z6Khs}2JP2eIJ}N_rqLRfK#86rcI=%^&9Wh%-3qmKT!s<@LujMPrPq&ZgGe8=fXqNMUnsFgX zL#Lfo_1dguGF)zghwecnYkCnUuDqtnd^ur8b&&Dj>&T-_5V2iqC7Egk?O2o4#p9jKu|VKA_*TKl4S(4cd^H!CiA5y!17 z(Gg61zPvyxWJ#dY6q&WbQ1z8nj(Pl3HEypahmW$kBw)JH<$LvXFM1y{kSO+w)I3(!D(-8GO8lzBL3M%b!}zjxtDX^D?<9Jf(6Vb?sa3$M~X@( z2p5Z>=aOOr`o3JiYuuLjTCF*#uq{)eiKVV2B9()+t@a}%9x&4uWiZIVkieqDfndSC zD^Q)}i>v^%DUtWNwc#79qQIg(ls3d`tHtsyZ+Y{V9LY<(UbdM1hoAoNqvgIoU4-)r zgcdgvE<0Rsxbpa~ACkH3Y9<()MeXG_7N(56>cJ*~V7ZIW*ss&nNnm-G60kFa-2(hD z7hlqFJ!q1O%mzVhcgoy6({ExPXo5-*c})Su78qtwVm!yTVz8zVb}qpzG#O|PH1Uko zG7?|NL27AhR-`{F2s~Ow&qD|6LId>S^i(Y^Ue~Cr&yQ_Yn6(vis&(L4UNf$RD0W=$ z=}Zz$%WOb!PsaRsrSy)4Dax&nW7v?zQiS?rvVt1dY^+clOc_jQt*P_c_g?T>No zdhB$w`QQ&e{n0D(60euVvj2^L@N>U^7`k^C{dp;yp9ss&hK#7H+F4FHNws*%^11|z z(%4WzTPaJO%SJ~k>FYp7+4Tz6DPvAuWsc)52SOYV>)x}wXj{I++Rq9wGgE|~)pIC& zRkz+dMY)x~RX*=Fh8TdOPgGscQ&Y~Ga;g(mL#W+Sb9Hg0y7w-y9L$(hHTf)x`o3gw zcQeTP<}nLtmKU^@F6Y3R;Iq+#Sp45MwPMUCwCH`aPBM)7y0cs)p}L2__!rS!c{XxqYNWHhpUaI76i6VWd!j&CKp$vQd3_b%Am#LMK8RW z?BFKi!Z$?PY0YCteg)$5#UA+VgI2w@ncN8xo%uHhi3bBiHaq6conPNrS6>LR@|5%( zz=KdcLYQu&>)wWHe8hlEzP|iCW9rUIZO!#>o96nmZQt@uzwOJOk(X$_43kPNjt#1t zC{*$Y3pSElZvCFjtkoe5hLWol)Z67@=_05=?r6PiYD?C5y!IxKx@AXljP6c??TuPI z9){poG?zJ;LdiOy!Bbnw-1+jl#o_viny^UuQKc0+f zGfqrxRPc%;C0|rNV-?27!Y}6V5tpy&mBkXD!;&Ml7GlRD7tp6cqlQIC?5+L(lsF?M z$Viz16!d4K$}Z4SlVjg1YqK%SADlEK#?=qHe{hX$6RRR}J&NZzv&lB)kC*0)=9|Cn zcm9D-|G$3t|Nc|*60DchjsNR^?`NJY@%YuDmP@K%2KODga;Dg_#yuJ*o4^kW%;A@f zQMr_*hNbR4)>!oAy(e>rn#hp*6cUQMw zAMz+Lhvn;$i1t^-4F!S=p$4`9iwdP-Zm<#0nJ;DoOObIlxj5x9SMTP#ZCu;aT{X5D4{i#eGIMnpqnw6*|y;-|=6>GlJ5mRq>c& zOv(0_W)8ZpSMG(4wN|`HHFR$&N&F0j+4V!c&dqLjsl@m1{VRXxr=FCTV7+9*{@4Dy z5523;sS3Il6X*?RCzMwGHryxxbb}FCNDXnenVj- z#TJ+BaqxSyrct6Lfoc`VS2Tw`AM2$?t24$E%=2iSFpmqb@xJ zO|Jo$fn}#MHc$dU9I`b{tMPzaY+V1MWGko;a;75iK7AT8=KAb=Q@}G0d{jbL%F1V; za7QsfFEhr^;;CabIJa(XWTCX-tAF!H|HX?g@GnWs{x|=-pLx%a)7w~gKB&-Eu5r-5 zUoQ08=1JXg7u00wwCM;Y#7d6TYn+_)MjC287!!;|3_G8Aq6$P~Pd%=0T#e=7F~B8` z>|BGdoJxAmV)&9g5p=*Q5eQ@Xl-lZ|(E};pj>|!hAfz!=oPfYtR;-}9%t1ylaq!sJ zMlT!E4QAP}v3hOIrRf7Rel|;BotxfyiJiWWpJ8-PGSsToE-Ax1$0ZC{s#2LL&2;SP zmTQO;TDRCzF$R)}Qm%s@=@mF_c2M`-d)P?@?exvFy=W;o{k(oR;s`|J=N6-DFv8T; z1LgepMaB$+-8Z=Cq`fu}a80jKz>766qE+5IFjtPwGSRyCHjR3HtVy3KLk_uf7@D?? zw%-O?>ca~Qb;rH6mF-!#?lrYp<0Ab%T3%@cnCh@eVk*6nvUvQ4Ks1!de5To)xsKnu z`tN`Jmp>&h(t6Q_9TvSj?02}^zO$|(U9V+=K{V!c?mJzl=y`H2<#b>Uw~n!+j4rR! zG5g-*a}$318GqMwoPVZ<2B3<1VFWgMw^K!c-w&K_0(vcuQ(QPHpk3dxA%^5R>9!e7 zF-nR~!lD9pem9RBCEyIO)HzhXy%*c@m`Qi8yX}lYy}eSl_DuSt#o1ZLE~;rV)m2}g zdM)2YPT$jcj%#R(rp%t{Db);}0cF|;K(bk2>vZcFf%@=cizhCN$6Zh>TTPz~8*%vi zIW`&=?m+Pf0^A-n8zBU)4RfSpd#3a)3c~I=JET?(rq3RBF=V0)Y`Q!_sROoT| z91UglT6pjLV?Jy7?3PqpJj+(WzpKCJ-+FO!@h_?y|JVP)&pcT!;vEp`UEfpCdn;;j zp~KzWaqN%!s2ZzU@kj8gswh6?Lp^|0kywqP^mwkhq5)&h6>n>=b45*^0MS|l3Vvp` z*qzD;CU_u_1I{#DdQ?XN_<=j$L`}_!loS}_!!bRFul=%#A1Q*c1fm-hxETQ_xhwut zAq&pQpl!>RvR3z>GHh zo0C%wpsOR7h$`#7VwKsXFI=wHJyfu5YA)&o*Q^aOy7iXU8m>FjV;ct<_20bqs0}%p zy2Qu9{Vn*-BM@|zuS$OxDB3V3sNRUAqPM3Wub zW%F*e)&fc!*8R?%wboOGaP|HF_~)OL7h%07WO!7v-zI)zU(OTD|VyL@5n8B%cqMxm@HUcx* zG`m_Dgy7HVptWi502GStD%kP$iZ<&KqpA1WSi?s^lh9PkEkZEuD9bjYOLs zmDr-)VARTcdu4Q%nH9Ktu~#-Q2`q!`UvAZk+qfgO&VgmSj+|+mz07>K-H9=0-uu0C zD?e^<=fXSQpiLwa8EO4yP0P0Tz_RwuV;WAw_NrW>g$1n~ks(CA8qdC@IEWY_;wXLQS*H)rFs_w=~mgHS;9( zCP2Vpd9|yK-UPDa3?~BH4u4yp?P#T)-=QFDwEZj)$ zl#Cu<9((-ve7pR}-}oe zY$w6kaaF*~viCOd!L6`YlEsPjcA`h+&eJ`Nb+_n4(A^qCG>^a#*f4&MWLF?k^W3UV z48<3z@mnx+rz|mL($FOi9(xuP+0L`$2Lbv!t(`Y#~0(^9!jFF`uhOX;9 zsz4e~c>LM#OTR7dburl&UcJxMV78(nXUe%--&*Z?2tJ1|vr$OVO>)sjGVwUsa1D4? zNUIef4$Qbn;?vf=t$|2;WPG0WyLXYb&vuWhH3k&+)BeGN2Ven?q3iP^c;nCvsac)D zhC~ujw%69VeP)EniJ!%ayo2fK#Zk%=QNyAg!6W9M!|zHh(&fxr1*-m|n^kbAt|^WXl=m4XaEUEHH9tX(cQ#g z6z+%?{#VeNYmPrQ_F1yn6y8B=eb#&Hl1gf-4`dLH!_+c*Y@|2OL8i_y1G-V20e42i zNfkiU?loFDrvTmnzz*fI0PRW~kCIq`cbPG~7SI5fM=X!uIS%2m-EsMTlq{08xOuyU zcArzLgV*m?unLt?F|m?y*K3i9g)-7;tjU-Uz1e&9Xu!$eyS$LI=XQ*9XZs6oO3Y3p zuPutjrG3d9;4_uG&}~`iL#4&JZ)t4(l%s_s?vg2DNVx$@Ov`MX`my|&t$o0WG%W8thhxPYy*)>jmJZc37I0p@Sb3Zz2u2S*CK^v9a~`|NVZLW z>$bb&M1(6zS14EB<7AW9#A&UZS=1?eZY;ZiRHaW^XPx-QigSvsCs6_~R1 zwp3CV9$9eU0{}Qqjj`@9n!Zc*-U}^zRJ6Sf1mGTO2$84-76mgY=uCNd+#11;Dw^*h={#|g#Bi9FTyujQxa!sk43FIC|Li{bf@qt~>L;2~Z5 z2?mP2jyS%@wOFCI4|`;M9<|7X11AQv4xO71jq?$EPZeFA>qd5%vI}=7$HgiyRSBT@ zq_~V6tqd!&8)|A(OI|Z)#A&Z}3y*@u*+VqajNY53PFS(Hv^>jMQ3iV#XH-nco#Rw@ zYpKOZH&G1}yi(a>yet?+gos7v9hwf{`h$F>aYLCKN$Z0 z`~LDZd4cPmqVcKgo^VjvrblOnzq^-Dj0&~ee4ITq*F?%GVa7c zHXa$zYS_u@Vk7$xwhSN0TR@BEJ4%+R#Vo=og1{MWFT&%1_SCAT6L-4(@x zd!{2OBMx5;%2gxWZBMbK`W(o(GiIE|_?c*Y6IEg3`*PLX6}v+bu+yzbB`i_kt)5l^ zxl8~Kj5-x;jj0g=Xv%C>05$-4k%&I86*$CPX9He-=)it%Re_dgu`MC(cD*S8VP{@n zVD;VE$&Ts4J>Jl1jKTl1U>8dWztT4M!!Ez%~P#o2Uy<4C4aA&%8@EBfh>gt^~t!6(`|y45uI zIo_2}&gQNLGNjnS*1`y_Yj!I;SeQLpds_wWL%a%v-%r2P^TpZG;brSp=rS0@DEMPRE&9xMsX&3TX;s z-#lB+a1?XP0sevCj(2(!P46AYI~p}VK}8o0FbmoX?qN~Z;RN%e+Yam96v0mUOj&S2 z`Ry*?P^|bO5Z5ZW7UM|Er2t12V&u=+7p~Pp6h-D0ZHJqzEy5L9*RoX21npxQZ{3^f z-qSi;xCkH(0)JK%>uEvM0qQBQBPqaV`)jw|(F?%m;%{whOgb9^N^GF~_uP%!MDq6! zS2ToYryPh^l+&EQhrBG8i{)xBZ2z0T{(rkBFJRrXn0?sw@5qS3QLf6dN9wwF1l1aA z@8iOs8KY_ZD|}M831aT7TU5kTu)yHM-@c93zUU1$uWk=D?YuG2%^7!M>?H-l=$4BP z0~CTGno}KYG_i&m`frctHMG-{fWRt1m(9Y971cN@>oggiq^KQR)U~W7x1>kntAJ#o zF$|+vl0ku~BM4>@&=gcSQH7UniVDa<>=IK`j^ls{GS*-L`YmVDwadK{H_sGx585`1 zgA>XH_h%cnUshd0ZO3@JU0J$t@anb1ZmM+kTLbcfTKC3)MLf^>o(eE5I^1?nzD?dD zY!vu0e=c;}4+g2Ns>I^llr?{jA&TOxI0AFZhywtr%0Ta@=Kpi8arZ$QHB%8);rfg^ z?k#a*i&9$Q877jGG?PJ#T|yEPp?2EDa&Ldh``jh8tkRy{yAGCqps;HPT2(N+ZJ@;m zmt;myVWyas1fuSoj6+YYv9L=?HwA!`qg$s+1D8=@^lY5b%4a`wn|pq-Y~L>0hW>M2 z_fFWe{AT3KIm3)aAc;i=I{h;-e)Mi1A$UcQSx&KH0eAzQ#$OO(mbzx2+%ePA$)pbv zv#-Pe9%V}@0}$zpnA zNd^%FR)w9fW}H~VA{jE4MC;sxW)J}IHLIm)kp}%N1OKqGO}Uz|Fs=nsowWc4%BCXD z#)0<%7$!p%mG~9=-Gz-}k}C{>T$weN8^cbx(x-FTVe0t_;KO(cZer@Fvd` z+}JXe6RVr-!i@#tAFQZ9)y9#5Y@^0v>7h5J;Y}czZVTK1ijF1sil2SP7ne%yDg_QFp#1O?D|PCz5`;u#?{jEQZ$C ze{EL-coXBN26~60(hm+c3%w;=IYN_8(^>Fm5=Y-AxpX{`&|uSPUYxbg>K>Ehkb>*J z=Qilk5&}c(Y0R-jS~x&fXAXk#nV;6QdbS8Hls4ds54R0bL_NJ8ZQ()=PUj~G8WgtM zOe~buP&X&$5e34fPSjW2>y8a9N$+KU#xgbF2v-S-bXGDgDNzQ;Ff&cRqNprduI)8+ z$XwZ;>R7US_0?-u`huZ?0E65bUk6GKy?IM~l+(lTQBGsSRj$$JiG99v&=`nG&W5RF zQt1w49z;gi(>8#les5=I&b=SK_nnU8^klS1U~8whD6!k>KOHz*>K(1SV(itl9>)_t zTXDuPa+zRgC|d)I#nw{~daFN|tWb+5u9rD*0*=E}>I%ghUb0w5L`+etz+tkxJF9?T zW?LktrOM!=9UMG-*wqy6#0(+G^9Hrl@>7`413h)%`#B419Mz2l>S<393ym%=%mD8R zWY|i6cwJ-Zb!ya^`s8gkc_6S?ENh*@dV3i42Y;mg^sTzNZX)~yV21M6(TR0#b%>p7 z3^+p$i74Qhvy6>2lO_Z_2qiX!6$3^4e+ma^=~Rl+uIGVbA*>EY_xMbaJcN!6!@V~> z)98KbY$8+;aQqz9*W2|hr%X9ID9Gq0EQPJ8Q2Pa+Jq8(i!ZRAIMAln5G`E_!w<~wD zx+r3dJBM}1h5HTnzqcq5XZ2j;r-Jfzc;|xyw&uN2(eoSEkHYrW+-mO0+G`VWj{5!m zy}5wlU?2AF@7)gDKYF1lEFB*mHxF(YLB05slQY``bcCaUfcE}lr?hkGsfR&V^xdY; zkV1Q0Ywi1umtP~ae=WR=bytkN8qO0$vyrYHF$XvIq=s4_``9D)en&^EaP93|_5gu~wz6Ibtrwmpu0ZfgAl{%E z<$>o7InXf*2rLTGRJS)zk}S8j2Vfgs$REl*%14a>sNs`s=6aaMR9UoP!IuGmT(24^U7XOVFwj=F{$q&cC5M2kFdH6I{Tg<6wOjRcml6&f`=LWG+7#YxR zue>ZZVvF5wjMJ{aeWSk581~L@+t5Y}+l_3)oZD%$$k%T{Ww!nt$TDywr*$tb7K`e5 z7C{9m0d->y#TQmjcfC3S!SztTab!0S7}u`x<$I5W=)ESUfw{_RS&Kx8e_D6F{-V*3=8tfCrgipW3KyKHn*(Q-|L|$~6__QvNFbSb0KCz%UJW9(v2X3OHWs;h_;bJ$W%z~F6hWwY-TKQHq@H>TL9b4Us32g~4s;y^4S$F;Wv@-?A3$(~7F^?bjTAK|{ZJ^Q?yJM;1}y z>nI0XB(%L{H)539F(|N*oCY|DRG_oTLL=2~>U*75aAv4`AIh^p`)9LhNQoWIn8Ks9 z6X^lE6VV%A%a(`r2i}pC)m<_6n&%x{zkXbE3!ZA2&}kZF<75R-=^Tx5|U5`AnXCV)BWbQ2FOUSh#76|=rpIXv;&Tn}qcQ2=l zCV@aHko^{T%?jgTrq)n{Fw00QUYF-KHh={Waws|=a{JRleMB^o)d$R=n&c#0sL7nGk9k>u$YBgu(#uZb?%eQTfUyohC!xyPj>Deh)ozHo0a+4Bn^$EQNGT z)tD2t^+1hnlU+uo0Yx<2S=8Y`xmuI5wlT)kSOZ4|*SK@0_YG?xqe(^$mYahtgIwJH z4i6tWc#|HSU4|(Y{SLu3{G0hL$uHa(6S1goNPK8%2l0ZgWr6q~2hq%1&j7@cr(v(r zN29TR_aDC&$blbCFMhuo{hkncyvDU!{|0f!N^qux%RYD!XfX{4mKK9tT z3XE*o12RR{ZoT(Cg!AXO>}0?8)`>loAVl3*b2+qJJd4?9p=Js~`6*~%C-fi|o92{} z$6Vwb<@r>bw+&htkUKJKJ@xubLmt$Fp6$>;2%n5%TmQsiCe>4RaBmURl=0$z8GwgA z1EfXdy9ykFgvMjoG>iDS)PVRR%p zKiq*c^SXv%uv-W}Yswwg>R1u{da9ltoiXo^oW!wLZ_GzO`iL1Jy!~nY8A|q&Qj6u@ zY8VK<;Z(Gs|2Y|7<9R!7&DjJ`kF?yEK$1raeiQhoPvtKU|Jo}TH7@ySdos61!*HKb2 zrZql)bODQ?-T~&OF#4=P3#F%Fn(9p;AHNJmWw@yuuu~hV$!XW;b`G`QFtxvWG(k=g z{c$OtkW@5!u>^6EUGsMs3rD7DSpW5)?=G0@DFVWKy& zBmugqfx%-YSZO+Tcy6HkR)ar1BbfRp4?kvy0*7o6PqJYVEAA&804Rl>KflY8-i(b| zV?C5mZcDbem!@*FJY&Q*t8o9#8ivE5#}yezTicYRHbPEeI(Aka*?eKm3bwCtDC}dh z45DQpj)F4YYc~$VJ6w0g*bx>jm8;`JxGXd&qK;@2lwdu(3*J_0GqEs80mKheNnv}{ zq9UR{^3elrT!y~*U5gMxXz09=NAh$nlfo%@#ddj4laY~8?>Vq#l7;wCFCAKz6>&Ppbr7li+(#C9sM?0HbOHY(vfK!&kqX11^ zb84K=txRX$%fY{b*4dix!N}@+o?^q|PrN2@2^G5S%#e)qNHmexkO^iHFp|wEowC#h zq7RxsA1zIG;tJl(kwvxe=EtDZWK>qEO({2GiAoQ+-wHGT(t^us^(v9Mc9T%dWw z1nJ9@H`;#z})Z#VDK+Gs|R-InPZ$0Jo)-%g%>DhrrB#BC-EL9%$gnLO5 z5W_f#mD00gE(@uzaYTLJm4&@95VXv8abB-WR9C<0fn58Y`n4V9*>E0aS~!q8tMC}N zFL}dG6dP~MGB7CC6yvM|)C2Z~^c^|(jF(0XMZlpOwjVmU^*K;Hf}uLzow{(wfHToY z9$e(K7lyZ8xuc}EUfMH5M9!{o-lV1CBtRiiUa8AOFDbCK70)Y9H^{XM+~}R|Y{2V$ zDu2zT?d~#Fc*)f;2>46(caUq$fNQ9|V*qdsuPXp&CDKAwT03;=djOn6ZVq(bORE6< zkedS>cDgq%Y`I#QO&|)n@%HVC@Sj;a9EEF*tEF*Cc4~Cc$M}vX$=sbfdyH3W6mtl# z0HZhbF((7UOzW+9eNiE)*O*`|OJGf1{l(v_y)VI2??y91OgUpN-u|1~QQ4BJ--}r-#Y}g+ z{N)B;gctZwOyjpl9=rz1i7p*=u`N~1Wi3}11v+~wrB2KG_jCJTrsbCM;kC|`H&fu0 z_`%uPN}P>s9vUCpT4(jT*z3dtCfYXsjtQ?tQ6qr4<7&XSk5I1LGBsN4Go#!JOoZbC zZ=|nY{NO@w`^^rjPz;O)_y?S8dwYIwjlG80*PS*xH>xEGAq^DMuEh6H_F9dD8Pj@i zFm@92v0kh?4L>L%eyBE?13kKH$+J!_o_d@P1)SR7`|eHiq!7;-CG^kIT9NnXb(ly+ zQR55_ps_U1W$ZHX>+xq2xI?s>Dmpmi`asWaxjs^_6%UrEMj!`r%#+FB?B77^ee$b~ zYL@8nMAj)R5d_9r-8?Z(A>dZl)Lx@%=989yJ-@WpKr>@|bJ2&H ziLakJ#}g=0YWt-=)2%ss&by?R-6Bzt5?W&xNIR&#!>ODuM}3VGgm6t~%cU7?bdOvg z)b@O#gDOfgS_eX4E^n>aV$@mQj|Q8bTzOWIPHHuyf^|oT3J4fN7AspX!f2&9;|f5Q z8XcmUb^{Raq#hFZSvatI?N`G)TzAK_ck${hc8_~LzFIAV&rB}^k$Ie6<~3EvWz9KT zNzFW@oop*(qoJDeGDki|Vkbs0eJU}KTH~q9OQLV&I z(Cp}ZW>2!X@;(4j65$4`*=8$F>XYHI5<)1p?#wkCY|!W2-S{`+5ef8LQHBnMGC30e>*dfhA>lT}Ka!?FmzCd6^ESBCv~M9k88phbJb#h-4BP3q8Hb zKB1XrT(SHWK?#OuKeGdX{iuEWyS36{Rh1Ge7&$e**{iArtc$)ig#rwKFhPBcU(_PtIKMVg{C5L#NvFA$|S zm7_cnZ@mA!sz@5Ohv<4XVla8Zp%g=)HO4$lhyjua@YxF?%pv zzx?l9ytiTe>B;gtwdD5HPOTZj_y9^=uVD+o2qR_82~Id-I_ufd7R87wYsfAD4}cWg zTMOoxwi#XdHMMqB%eA#xh;xv@VnTnJC-QA>-raaEQ z$T&ncVD!o0E}`H_{Lxw|rY5l>Hl( zg=%CN7oALHqccMvK|DguJFy+pt|z3>)_?k#GZ+$hh4NEVke+Ed8;)~v7=k)uG>Fvl*$@*Ck@th-|D z-+lA+{MG3K)JrH=yp#$*%!yYx- z+sRG#HgQdMOQ|4EY&ZpcZW3U4pp0v(u#5ug?+)ygT$(r~OUJk#{GQKb$E#CJg$@R_ z_p{TH_|!m_9Gux8g4tl4c$(ntn@1AL=pza=An}f1z3^*k=CYhdRQrEr-wN0!_82@P4>9yc}vvZ3d~_avYP7sMfz>f}?tVp+&t{$&F%N(&6@_i zT$&hv_7xqlKCL!-@tpCLd3MUA(RhQ(f+0Aim2Ia!WyNT`jkE6Fth8=46O(8tI)^w| zq!WS|ajK0M;yZla0&Q`S&${5k7(Q7g6v=pH2mNB>BDnIAJiy0N+g2CJ?3f*C#$j5|4pzV`->98pQ?;d&DmS zLolXg{m1qe8@f8*?;-uE%b&e?HN3-h*TgIK&+q*0`T?Fmu5+?PlfagR=vf{cKn1wK zWUIM~i%w{9uq~hNS;q45xF+RuM&%Sc?bk|3J}YfC(sJwp>##vzww3<$Kwu7oI=Xu`5L{cuF$1S}PNhQ+TW3)QuMHWQCfc>lg!q?+)RQ|u z6fX}6ER?KO>{6q`GOEdrLYYC6R5TE1G@z342*UYMpQ;FY=j?Pv9Z{fX=g!_kcq+rt zNU4=>CB;0dubkJF($rsGvNx~6@|Rxi8Q7^A>qlkLyz9e891h!iqna5Dm!VJ)oxD zYQ@|iwQ_=r+@m1P;CDb6yM61#NMg_iG?{eVQw%UwS(HwZW5-}8vnWb;32m%Y{p;8N z(z`Hpth;9HtCYXqkMZex`W{$=%UBv|!;BqUg-A+>T*_8NMWMxS!36kLf$q#GH0lrdVK+3`=$=be-8#@(r=7h`AwqVCmg#+-lF z;B;eo`!F>Yxqg86(z7Xsd<%6b+iPW!mKcGlsxtGIX-^IKIf@Q7izYm36w~qTYq!E< zA3hguTtBVR-xfMI39PB<$?vI-DSI7bz}27I*_%mtr8NA-D@FL)vU>3S{e@k_wYQJ# zIp9#3D|!J=fNMK5*6G}$1{gU?)19gg)<~8o;#17|8{u89F5IQ{cfS2MPXF~we_^|Z ztWV(7BPpRHPh1hA^%gJ37KY7dYK0xg2~iC}VYKq$qVdX#fk!=51K#Ah{TZ7V)y}}p zr;IPZdHdEW%O=_Ya|_41FzJ3vv?0(KVsf=vNnp2hp|p@U$|_x?(hbDl(@zR7-?TdN z+RrmWn*cl8ocbNV4}Jid0XaCCh*J>2VyI2YYi|V==RPt2_Wp1K)FS`xb?~W7CPZCe zTqn+Y5~9wZXD-hE@~O|h19bilgV>IXYJ88G>fMjWToRBnV88oDXNcpbfX zjx6PoNx~_ z#1PtRIE~cvbni_!;SMRgbh>AGNn?XicvUBL6IkYXK0K#aT=)#gQFqSy*7qMX>ZYbQ2)9j&kIii{>yiS)t7KGpg;3>!e4 zb>JC?AWhDs6dfM%dX4*^33p-LHP4O(@BZh0_CGkQ7yoAm30F8d!L`<`_gWxaUdtVW zMiG0%fa}#2snb|ZwXg%Nm5e%`!Y;++ULZ68k49kXIpR3u_g0!c=P18}@V>mErO0?X z&(C9M@9o`Wcu)4~D*@AihPv9#8^ zTCFy;-}3dEx<5lU%yfFr%$?^8-RnXHV|YxDhU~q=1eC`1;<2SE?o3b~yM61-vYjKtTpK5t{*A;pK|C zx)W#^HFMMAtC@iKZKab8IaJ|3v6sSlYhG1zB^%cegjsz+ytZ`4B zZ^4>uRPGBrQ2mDB9-`ar+FQ5mJA(7THTeVgD6a*m*xZZHh3b~)4i^{ey->K(q}&Y z`EZxkU7z)ab>p=gm$n|=eYxJ$!(-Ftni=ZZ7j}ACZq!OY9ChPDem=yJ3^e9QMin$! zc82!u#cf4~(pkv1KOBT<2D(`eMr9V8NYgQ2f@i?%qpc9{&HR68cmS1WDAo{EqqZrY zA+%CmCxsfik~Oa%l#gPMf~zg-wUIzGGz1x8Lq&;9QF0)wwgLG zR?^|&2SLyw0uMFo={`-5JgJOVlv~@W7+XMZzn7+(yv?;wEC+Qh!XO}FQ)Be`O$|r~ z#RTGsGVJKQVF<2w^k4mRpZkq*IeeyG`<9VqmM#iVOen!Nw8Ak`ZFNe<*lOu9ttrrWI3~}O^Hhpz z;WbY7VN$Hg+1pt4Ga)p?;ADqLd=g~TmMo6$5H%mqQGc+(yVQmNk-PV91h2zG_ zk5dS54yw7m_3~GmN<7J%dSYXSIUs1)<0KUKg6%y+yB~H?1^&q+YHA<#`v{QIrJg$V zhr3sHgM_zoP_TD#iRP_^_9vHuN`_7|U7LbNuVwon4h3}j436IO^B}}7Ikagmo$vz3 z5rXbzCkmr`R&dB$IBqvQH<~LBeuT^rK*4^4z5z)pbTA0XaUj~LWR!oqq-RhXrhH7qJhqwh6_Y?trr8ow{0Ojd)*n8@xWoE!C?~c;228ba}Pa2#2H!*|7y+Cf8rN^ z>f&qRF0S_^jQ91QJpWry+(f=~JlVM63XXfJIfBqM2we1j{-zHq03upS}Ss^-h^ z=x^6j7{Yf>Eh2ym<6Iem%Jl|9Gd}E10CLu*iUVVB+hnE?qT_er=|SE)f3Rx@4W5Uk z8ub~YFMVdiC1(VTQ?xz`R5PGfV}hmt=Ny~h+@h=XNqp+^yR51Ip!J>_JJzrMPcMIN zHOA*D3skHx7Y_~5_Ler!QlgOrCYV_`sKWemw6Y3A-HzQ!r%O9I0n)&`49byh$lfwH zdZmrx6?<-dsHEt9xDCq+h9GSHoHw1x<%)?kkD8eOH z!D+*+`4YHvf{r)kSh+8IZawAYb{NR*?%f~b!=uL!0Ay(QWO!5Fy!s2y>lEwS?eKpjep)v7vk)7&mCXr5&=BQJ{Qr2 zM;->iRpvAxdSQ`jMsEXlNh+f4NEf5pox$LQNCdq75#+e5H{IP?gg4*3X>Fq>Mw-~v z;%rIID;VqC`;4 zJ{H;=S)%gIb!3&fEsZ{u*m{z=k>s5R=g21g+p&bnLkD^GQF%Qv0eUog)u<40TuWzK zb|J(#P56d=J-7T3*u<3LgyzYNNmkaxIznh&Wu`1tTj0E`vs3#d&36pM`QgvSj=%j)mHdc&x=9;Ul0t+TH6kC>#?o<5W4%*=nqVBQHoTN@(DhYV0;NQXbV+Pwl}( z8iNDueN)aMm}X6Ojg8%G`3ya%`p7>%_{>mav& z0eO4MN@W{$3}x6(t)d8xaX4Zx?e1>b^MaRmsppfEK~l}sB^<_~DZFCuwHmz+EO6NI z`<#UkEovY^CN*LfdOuhd$?f_m3r$+J<@jMb6m=UBsl0Nu>_2to$#>qq`opaE&DgR2 z`v3Uyr?0(z^!#i-KM4B3gYsc)3gqoL01$5ZDvoZ)*rcAD)RH!zvz+j6JV4|{GyQA> z?NgK@4G)8vNDM&e-+1Fj_{c{tv>I~IS z_a_r9(sUVtZMl`fQk!>Y%{97CEc+f_Ybb1@S?iVNeJE`#@Oq<5^WH{25*Q~0-#f!l zBVOoWCHR@`=lAyJt)q)+MVZQ(0{qJ9n)0n=e0}X5oe7)8WvSIFpBV9dj*Q7N%x$6L9n52A!RTDN{?Zh8#({KU@HtKi(@f!hBPpGxFI=>XNH3b9u*MygI7i->hXr5&;<0gz=vZ813 zxm~=u1XCRCv>s-8+u58o^4`2xr;xfd6;gT+=CXEL*VDM4+b}T8=`d3Z%R;gw+GPr@ z6VJU~Uh6COYjZrH6U~*IG)bJpz4Ao)wf&w*n6bkpau`KkI~WYdSn7W0p3$qO#^fUf znJhd%AX-I0_(4!fXC1RJpsed!w1Ru@z!MLuto)NKF|T_Ud1Y@7YJCF|izosPl85Gz zYQmD$JLGW~MuB&O zz)Ke;ai_wYFThV7oWzs}^cpXpM6=6Z_{=B27T(8|!aZ1De)7*4>R4~)E06)o#dB|M zDgY&&@}=P6o@BLsQDI#PwZ1& zhZupQ!t~Y#SUHI#uf-By51s?ImfT*m&0^7e+pAFiXhtH8)y8L24IV`h7?*k4 zF4**)q}n;}JY}2wIvkv{>P6IO*v_-=wA{>pBbsy3BJAO1bpnXm|v2d(&mmGw~S-o=RGGr-)9YYV=lpF%Yf?5O;lfRxZ8Yh91H_GIlJW zj$iuuPhJEi5cwodK>|6s<)B`oafI2MOsw8qxB-nQVzkLw1G}=&?@lyMltB6HNuJ{nklXjTh55hNzJxsT{(X6;1DuiI}BfA zmbSJgdMX4KEhO(^dry=xDKf!O-e-z;8iO2TXyH6Pq`^<($*aoHbOY5M+p&}h336a9 z$^dL0Iz}I1UwG?jk|Ksa2HhWL z{U6`?uYdjD{F%R4qowo&MG|@|bD$oN`-u8CgQF;=RGpR~v=SR0A|-~q24)52kDdnL zbbs|9eLsBkM;~p%8TRm%12?u@oOtAX-7fg-G%sldg>6MBG8PR!vDPbZR-||9wL6#8 z^4hMm_1wta0~YZC?6Y<(-FaH!c`^NBXskDn_X+wWi#`mMUN~<-cQFPDftJ=fjIY^* zoPop_{(Uq728QP32)MXJr`NT%RWaTPLYA0?+!lLsfhpc1R4W`m8Y z#^@t}Xn*2Q>|1(uvmT@?b(w8d@9ZKLi1HA+;~*j(n`vy3W2+eG|5>E&rcu2W`N-w%Ah;J{XByl;J=;3~ULsIi74X$DwL zy?*`Lo44&xOg%B0=#uO?q%HlNs6O}(XUm~cQXTwiMkR0P2PYk1Y*c2K5VJ0}`o6bs zo`#)TB3qs<8+e9mI5@Wz{^ZBbTdw~1{{CzB8r#*d0n}kai;vsJN5^%dJm&Y=fkfAX zH(WppH~>HA3h$$agjnRLki3Czg^avGv~8b{u(g;;iAYLCLF2gFeGctD*Bt$>HnhCc zb>A2})|Fp-@o-hri;q2a?hs-&sEu-99wuxo!vYk;L8YtYEUlysMrPfcuivl`9iAM9 z?BgU2nID*fVL}5!aVtF31^Stb3Q)F6MDYQev`?`GtIwjKk7c?Ef5`9+994mV{ws< z*2{PIIC_GtG)Bf@%*j@(<^eJeVyf?o9D^%85&j;uRyO28D= zIHqKz9pl?|KVGjdcj=2i|H+raeX{O5WB2u|FZ|Ax>V=;k#@s?l>-!y5XU>!siYoEI zpl;tf4*UDN?3^mO0c)-}>z>mIF({|F_hnNJ{h;3z1Emn^$&e>w3z7p)%~P-(H-*#Y z(N(`rV$5*>CAr6Vu#BX>vAGD9XbJj4|ZKorE8QKr~QO@u#g=n!FO$YGB0ThZa?RUFbt0 zOmLa8sS6DT#5`N2y-2RP!~EpxGa_L5xOq(Q*LA}IXl!G=Q@2b~>4B2Rfq6W$&tKs^jz8N2?{m)}F`>pNNZ9H9GWt^e)Y zzxL9<@zekQjq08LY-nW+k~_TF0QE}nITAKtr}=kWuwd z)`7dVTCj#o;9|;jU3~Av!$Ah#a%XuH-@IgE@%7s`gV1Wdo|(U5U`O%Y`8IZ0n7}6e zMth(2kysx6bkb(?aMktl(;9yr#tov!%-TIm>#;Y`P5F02o#n|eAafWwi`+{FOa)f0 zRvi_t`$6SlFLU~J08G`ALNALK92JWXgXHj`c)_E6(A#0jXyB1KskQJAy@sP!J(!IFf9ble}`nD6zU{o-A2PrV!KzV+tdLOZBF_~_)r@_ z*o3MIvE*mI^b0?JCETa$zBhKPXJ2^vFs|YYZ@zi!@vWVig@SHiDAC~|Soc!%Bp!yj zv4>`Slfh43HRrK;?6XrID6HoOLwzZIt@6@HWFH2ESzG|Bd<<1wJ4{O3!A@f>p;2E$ zP&I*|T}UkP<;+=m(*)8GTzt?E3oi*8hkhunT<3M`^{}>mV0DxQW>%m|IrPfqKuR1En=J3v9Witmqmn%w0v1z0eitn8LL{SLo z_%Q_u>S8M`^|C_*;+d(a12Q&tT3id92x?BLfdii2_h7Fl(9`h>N=@+@51K(>ja0%( zMjiB>sxd)55DN_>DPy@_f9=UH{ro5HN&WnXT@Qq@`})=Y`FFmy8uL@uxR5EN_|_Y@ z!mQ@*R`(U0P9Ak9fJZV_!_>^-WSc3Bq#=QG4OF_*$?kRS);im{SENG8YRSO>*54ea zXu)&O5S-IJO}nw{UdzjENg~>S9=iG#nw#H=`dqE;SBXhc=_+$u`tzMR|N48%~Q`^4JI%zUkDGu0`bPnad;hwJm9|CwfCth>Tra1 zM<%2`CncC;dp-nC$JU#`RBUQFcKjlx30bEsdC)zitaH+P;EEyM)C)wrL6lYC` zO-jBrW~LNLv|b|MC3s%~)?jsIY5!%_{#8HkHEzkilr*kL?>BK3lHmbCIXb;Ac@3by za?&qBL7(Qrme3>&fQL&juNxJyc$13P@JR`dEjKTXuB@mnO&yV@$6ma??o2@*790Y~ zNiRZS3I2wu71|F>21+ID)<~xUaxcY2y!ap(I@SZ_*?l38uMh5p`j8KSaKG`!Z8J>U zU_qh~Do<@KID;Mi$X@IA4k-{YP_ldV>KpcOk@rv2NeF^bab{p>XORFsx%F`ua>E@X z=sSriP&dmEY}U*f`ni`)0@gg#Y$~e)B4hNZBessUto~}>>}{|_;33f|4H*V6?FIY& zQK9in(y| zYtp%;E=av_4`(I_!Dwid=qR4u(#0NUVyWe#66Ux@)|n2*l|(=7j;Inr79UfZ-HJ8b zK3XaTlNg7kBtzpsIMC`jxWAq`mVRPEBJvYx`rPIFfGG3FSr4SKV?A5z@!c%FxV7jG z-?(-p79Gd(KnvWZlMGSKY+{&cN~f*DJo)#pz8>~3?3uA!eRR>^5%yz4dK;~2w`F?$ zxaNgDOmxFd(dD#4%jILk(g-w7wRHVkSLV$IDcWsHrX|k`OTy?Rzrued)?imgCqpI zWYajW-8#UJt7UOt} zIK*5dG}O9e=e>s(8F;n83Av7M(6a$ASXo+vh5O+xudaIIsw-HmK*Y6TBG;J^d^YLy z?R&Tu2rMGHqEJMz>&3lsy?;OG8i*3aw96FOU`uLjLXmzgosV)>Lkb&@G?X%U-d`FB z%i$CK)KHb#d55-XFyhb{bY??Hx9I&bEv6nw+r}k`S3_J~y8P3B`jzkiuKTvm{==^S z^}qkMU;l}p`irqXxF=8tcFwYCe$@wb{q3U$vV7zt`=)Y>QM}GH+dH>yDESS9=N`R8f;t*2(n%< zXd8#rb!#HrerGQ=xthz=AfjA7yQZB_x#6QQ;7qpfViXOTkD(n>2AD+-VBj^SR==LW zxL~Cs6ZiC-pJQN~w^xH;8`6R0N~nHNwDO*pG+Y4}agsE4yBQQ3o2!hGe+8NNB6wI|DCF z^?Q7dv(quSu;{sSTh?L6gRQev4WpsJ!UR`fzebDoy`KBUpZu{0DnI{0>!C4rtmpst z-#xr}boOF>u!jJL0L+}6jOMw53}&xBJZw0G_lvs8zW@47^8_$*_Zpr9`kXbK@Fsz+ zzV5#7TiqAqgz&r84vPA+kxBS_&J=^RwX@I~1vG>f+WY%3=l1r+2b1RrO$( zgL2YG@Ul?LwL`1>M{x-}UGbg(r-kBs1nL4MzVJGIY?uOvAxvdHSMc@sv7B4eQ7FGm zYO6E&aINT2LsuK_55r|5?YC-pF}Y&RJ*LdFwXkOgZ*9HpnLmRt9lihH7R;fqP!F=3H_s3qUjD*oK7L;` zvb@{%P#HVcvoE}S5LWq0-_4%F#=BWhZP!irFqD%}`kI&Z;mx;>raE(G{!H)1jqFVw zzDSL%`R4IyxP5aK9(iov?&7&~i*V!miEThrgz3A+$9K7AtHURL&%G~!zSL^S=1tc) z>@3&BR+U1~kr2Hf>5%Z(%Ofxhtu@NYK4sHz~%b0Y6k+o_JBhQ9mHuGhPHFM|5D zOCt^WtUOX}rQQ<=bXpBurLg1MORG}!V&##V%rpXr!)gtLL~S0akX@^qc%bd?2cd~P zidh(wkA#}2!)*%7+AKff7{VuXP-7R`T-Io4b-KD*Pnajad>=KkyxaBA z8N08)@xT1em7L?#@Ep#QFG60iPXNFmUjDs*_(nMQ$i9VhH*5IjVvzu9yhpj~IpLFD zp92bENH^a;4IlpKet7M>H^ZZk?M|gJ<%&KT)Q1oR)xJaUaxQEBAx`6-{E67cG~?qJ zyhiWDI1ZB>4b4Ul+6FZgr^imIgEPhO{h2~$SH$I@jS0GOt-BZ}0gb$dc3TrpH}S|D zMj;T79C<%9I$bBjZGc^ffPC^zl9+{GPfF8#0KC6VYPE7I%XhbKo-!&KC#^as)$n?z zE=IgAUK59i@g;1^YHumsLZg!R_vaR|;hw<(_|(<2Vs_?Y+%_G?*-$9r^oxF%Hr>7qn%b0p5eHNVisq@( z9Bbj7jBiQ};BiK8-IdXY=sft+Jg5Z+qIg>UTd$wBVRP#RmoZ1uO?{#ZU)JmTQ^e6) zI&})Q^3<3c=*Lb!_v$>HtW8$(*KN>;Msa!bh}G*yDhuK3sFpzJ6M!4u7h3SH0-H6# z7XQSuq6kByq_ZqiE8b?iwBI-MT-AoMc0ZQOqVxjT%$)oJdlrEtsRgI1R>b|8 zr+(_ku7rnlJy3Mncd~x*(!X%^G_NjJRQMZ<`2@oG>}+@)oa(!KGnUCJ0JOWmAQjZK zzDs!Y!{^KkqArX^9H*djP+RrijLDK8MyP5R>-@#8!7^C){X;HI7qHfun$> zxI8xN-fh+yI1bBElW52$T#cNf3Xf`yL}lvt2gzl*T<;{)c9e(4!Gdl%qzM2yc`b}; zJd!~;ZV^kg_Ltzj`*sa!D&-lga;;_6X68lmBu4g zQa8o#EJPzUMV3zEoTY^0h`kFUl3Sje5)K5xUt$a)qbkO zXO*tJ3k}P(^;e{(8dgz4yEgAf_tI4xeVxgZH!6IdCeHeQ9-Vl;zg(*1STy-%=Ja4H z_;S<~OP5~J@Bx`lZ1Vp1)|8_ef_R;!4OHw&LB=GOxhC%Dpmam8*L3y9(b=c2K;HZz zUk|-!Utc)6V^=QCx^x|0hRAoY(EQ|>v%pLX&X{tVy1ANk<{I-VQ@Y7URn_v|KBmbe zQZi9{p3PG8Dyt>E3asX|hNNg0bq=~Kwy=Axm^WhhIf@KYCI(!d+AYbNqsN@;$y5Hy zFg7#~*{Hh;$6XW7OLrybcGwUHQ1xJF3BN!@Y3Y?Ly*h%9c+Fmhxjqlh?-dRufPnO} zxusq8R}@?mCZxM@>F$z7N*d`@N`xf@M7mjEK|(r3SQ_b)mRzK}ySrhjC6@Yl|Az0L z`}>`9?#wgKnLGEH0bj_&)G!9`nH!;f1bJ+igNaiMk~CMJwTFPjED>v7TvC=;VQet< zCzXwQWw-!oS@-ms&%tNUjZKVyUp|i-VHr%D>by zh$j+h|CIEVFXWkHvo!hyjZ>u>zIT(0kEt=l8pZ3rJL8=~OO}ZEC7699!5wMFrXoKY z<3wVRy!a<{F2y}WQq;}Uc026}3E(i;&9rVRen9$4i$FMJV>`$yHhYVaCbB14B42Dee4v6CFNTh?>8ORhgR_$_sf$o3Eeu0XXMcDOTLZU?DJ?6B1JL2+$tq$&ZVuW8N8Lkpr(%dc%UMAE zCmEO;9T%S?u}voz33x833pYsMd~*)^*V`B)FBcX65?+sefsdk<+zoqLW8~DBpP53` z471+rsC)%`6GEc?=LAX4sJ-pNWw2mpch&HScJk=_Rc%DPUuHT>iS(_% z7~ESZp09t}tXHf`k%o1oAn_BqFU-|AM1{8^c}`;j4EI@@w=qO5{y`fOXKLdJk=kdd z0Xi4(uYeWWW#G%yO@1WrT%N+^w`Agr_#rnu%^hID z>?D=#?4e%A1O}h_rT3}4=FPXVBL5|S@Jk)(`RZ=%!88?N3#1?*Y{*NNCmN*Zsj;Nu z>@A^N9WwsJ+qsLflH}o{s-HqQTTld&D@iRJ9zteTQ2vN_xiMlfUpafolw^kIMLi_5 zaz$KZ$NVlQGj#CO2u;E0NxGSWjiJwWc}cRa-NECKIV@|gb`Jbb#{EGsmKap;pgN`Q zO^{t()4br%3y9z{LMmCKE86s3dpsDRM_XNf?-ub#8>>T5Zs&KZCBAJ=91qI{YME+q zE%nXd*T#@sb3D57dI3)!^`9EG3sD|=wCVU6-m_dD9v-0NTShS5Q05FvAECHt7kzG+ zu&pTfAZ3s6_B@ufLb3UCh{FaGUE6qT#gOEPjb0;_fjw(;(L#mT`tR6_HdBK>iQZk@ zwWNN|*mWlEYo*Lt&|LaAIg*|2NIeC5=gD@P1Ej!0k{p|@s=VEdvQMWa(Le@o8Nw9p z%_}g?5s@0zSOMy&k>@HmaC(t`tny3fh>B!sW%$>~vB#b4`)<^={)=yO7;kK! z-{B-#UzXnMQ%rfuKJ+I>Zc=+Kv;NTdSzhu+?^|eit@H`VosmCBPWj1*;;r?;n43m`(R^{5(E!NoT~d z4Tb{YCNvhocJ$`xt26MZbqaPS#iAfE$-ehqDt)q&V{3aIx{Z;>F&h19XOT1`C+mAZ z<^Ym{U1tTexXp+J%C^K2_~y#mY$BYDP_MbVnB8oZQev*R_BjZ?+-TnJ>fhjxxb;56 zBZ+Js7F$(S_HgRW{3L9-y08G&`fy%Qqbh!Z?b--BZ8^0Ts^@wWJJT z{E`)#NMP8$>*QqFkRnoQ;Xryg9o656t`2l6w(0x}@eKuQ*##wtBzSV1PwDp>M5%1KY+HhAT^ZMHZ_q{4( zY@heIhch8550)#@;e~~a#8I^q{)K-vd`5U*=>YsHrnFV*Feh3a1~lgXMN7FDzi(t6 zmgSYe`1qIgZMzzSdP#{**r?{GgYK-$oxDV=+6^uvN~E^Nk@q;mA!ZMg0}6_v_jz{Q z$x}ax$0CKj=NiUJC${S8pXLkx76RmfXeD8iuU`A++`f_)9d~QV#)0)icDomTugpY- zj~=8I2!3YaZDZU}uEik~{xtu&hxxIs)2`&Nh~^Isk@}f|ceke6Z3n*i-U`7xmpe95r)hi- z!+llXM-X5K;IYiM@AVQCRB+l;gjYT5?}QIY2B^8Lh)tL)f`oI5wPH-9cdAe(z9%*k z>yIWwdADbQAxpc4qI2|-B@EBlmzjK{(qw~T9s@<)nz%KDmca6VyI-5jU&MP3W>bXa zu+=Q}kI&!5Hwm0rIuu!7#pAu|zNj|l-s%Y}rht+cQ1Wl4)!pgv$)IA{_2^PDQVIQA zZ>In5Vww5+IDax>E0&`cUQw}ocyqBTG z5jjGdz;a)_(ryq+061iC`-|P7G+k*57E+iuSF()LvRH%eMzM?5_9V%4#uyW8jp;Ha zg04*@>oKlLJC0AF{iEaFcxx+j0s72x%=<`x?*Rngpc#F_$70wbK7KL<47sl`yLnYM zSOEF`>+~dpU-B)=N9^M{s)A-zI%HIOV>ay=u`#X$Fb#Hp8YO(y3Dm#$4X@gFw2jNk z9lDb`B@AUXCyjo5&drB0w_?h2MZdu{>hl+6BGjq$m4+GX;qLY^lm^kt@=2pOBWEiC z=Q3Dz)PEju6Z;-aR6I>~u?wAlDvzm#hA4(;@#*LLKYUF?8&##L_vxe`6RNvNGfB{* zK7VMMuyVW>J%TYf>$On3G7V2xnL`6eX?>Cxy#~@;I3jij4+Mm+S4}JGLFltnnYJ!6J z!xs!4v}voa9pQ`d9GK$RwU{v@AIzW9_#T(p{&U~lmzZ1YK@5sM!Kw_H0tTnQ{l3=K z_qC*vC|z5UYLHlJ6&C(m==X<%Ejc<}-vngp!j{{ogDWZ&;{WXD1aUFD9nT7d>qE&% zz74-Kh)B8x$BeFkOjak!aa5mr$Sy~S;Ie{hPnh9~G|Sim5zlZsKbqlB z6dZJ2xga7X8wFYz`w=sOop9XPW>3FbfJa!chSpY^&Nd06T}Z^!5F{$!ug~lk)@M4mqT7PXdCUYK1{uwPz1X zRf9gb5$r1b^lKC84WO9)0KM~~t4i3#fq$d5yj+wGX>WX}FR9O=ax5b#8t3C1uUcco zXv4wV39~@*8Ffh3Q|5@4@T$YTGpuSk8W09S`saF{1-KwrUFt zDzQw-_X<*fbPHC(Z}wEH0@}*=qSCJ)EF$FTJ70&Zc4Z2!=K>I#kJ3tPRmbh&I0b8$j!qv~=kET>Ws2a|zj5_L1#SFV!WiEeoCY6-{O|7M>a~=ldXj_0RJF&S!zmJ+i{l}q_C8XvW}OFdDra0nyg6hGj-7IP>IQ3 z^__VP_Xv)27rd47`_;?pb13sy^(lcsaql?P6s)_2>6`pN| zm$X=U;z2g_2)FIyWFCpw~Qy(3&B<4NB?qz?!5L08hT<$ zN|fHekyaELhb-RvV0C}9@-r;*{$@XVw{SQ3_u5Ug+)N&%K1B{dEt8;2jMjNd-{51z5`U_T{sTSXH2%Na< zOv$CPd3}>&Z`hZW{}SN*$8r55)3z)C;a*S(VBGG%1V@^%rCl8wPL?py_aE7B66Tv< zDm1}+x(YuAI4%1LZl~lPQScrE48gFfFm6|ML!;P)(tcdTzw1zKyQvSr*!j85T; z{QIl<@F5wm^AujsY-8@`54g{7zDqWWOs{??{h*&cA*37pS>KUN(l#s(ok&z-E1GGJ z%#A=rq-CfW>9U`xrLYb)ZRtkXskPL(r?lyx?4FSF=e}Qj%D6Rh0XMH zTX+(&)7e}X41eQ#gsD~S_Dp%SsBrRX`H6*yS51m*b(D-C!LOVptxMquB6| z>>q309}H>?6xo)pF6C%F>1;P=G<@*yJJ;E~w;_GzVb+fXB#!(WSEdzyUI2B0%KCZ< zo{wfV$>TN2SvwM@uoDwDLX0^`(Z&b~drI{)N$s2ulvFPhR`O{XYNQp`CwWTih@?kYC*oe@5Uz;b(Omk8 zDMyH`?-9Q4=%@AjD%$$=xODAyzelctzNjSXahOfl@zq4d_ce*(=sXu)|CH@2jlNp; zv>Vp0^~|Q~=DV%I_K_hblsLLh3%%cATUJc7qrzFQkN@SG@{~yGljyan)giqI6q z3A%a?!BubQ&?VY{kTyz*HLTxij_r%4?2@ja(fo7czoL2l`^>sv-4%M_%om+uWO>qw zkHjn{Xg_HNo%n}e1SY+i#+@MRK;g5K6Q6mJ;PK+(&-Avk zqIY}>9*uZR^*e-lA@TuF%Z6g5VNuQ$QY)1({PuxP-71~?xDw3s%5}n7rG4*WE#h{InJ3r%~~>)A66)=1}9Rw{vC7_s#PRNI4mdp zc_qM;9Efdi`~&Y%D}e^IJ{x$YjDIZKsr60?+q%AByMBP7AAq;xst0(ApM?A7NZzFe zUXwr?rf*yvJ8xeQ;cOw!yyWhpr^3f8rJzDb!mG~xaKeO50!#QEiDh@D=(#E$oma^h zst{8=mnuMWV~Ztnc?fv5*~gN>oA=eQdKzo^Y+QC|dJ+#sA!^YdC79bLA*KKRgqx>! zGO=;mSm7ovZ_5$2-^^~0OSaRHO4H%lA-VXnSV`}i$-I-jsD!?!=U#yz@kfqdEtvGq`VuV`Ep|(6*_jQ)wEPDOPqTn|z}%YwS2@rDaRCe!!^5KSs;%7?5LAqlVrW%M$R?UskX zO>|=E09$w_C*mgDEF@;CKJ#*<`CMb@@E09AWeOUOhTPfO)G({?U&gjH_oKBs z))+H&M7|KirT$ZahAG5vL(WzJX84?{Iu&_TQ}senG2}u$QPb~r45k9evykc+2Sy0` z>7VJp>_r!a{UURSIoNj}--`<+joqxOmt(_^7O+<U32KQbtUF z%;Nu`q#6VDC;!5KwOTbsad5Gd{dD_6zg8$-aOvit=I4To$Ifm{lDVw6l=)Xx!K~a` zzpE5gUcN3>;RhTMIZoAAD800fPXN}+KL-koN#NB*fLV8tTj)}T+SXc#x8Rft8x<+T zId+6Q5>AK3q*Y$0&}mcHvALGX%(&?4L%Z<{BN>~kdKh`Wbi04sqV<8z_lsi<5)3_T zrk96rC$`<4N{r)QL^*8Xma{%uH#lvbhPf;i`{c(e+t5TUy6IIGY)nX*MpqZd68Tab zS(5MQ-`UX-R6j1>_Nhya!WDaVPE2n*#xk>3i=`NBsJ5`*Uz|tF9(9tn2qOzB z)9Da|x*wP$eCNyWJsqPTkxf24?LNbsGFKL+*x0r<^fx&*;)#b4Q!_$9_$8xOdyh^p z^AbO{Gs_|~oy`&b@XG#cynS#a=9vst#-}pE;>b>DA7H%q>H#-@JdXu~lBP|5srp-&nW0*P#6q z^h}rMQR;>(aAT~MROAS3LN8( zFAEnhTAT8MQa_7u@x(6><2#_RD*}7Se!!@{-oE RQUub=QdQJcsFeF0{6CMW*tP%w literal 0 HcmV?d00001 diff --git a/HappyAnding/HappyAnding/TextLiteral.swift b/HappyAnding/HappyAnding/TextLiteral.swift index fc358608..241a2eaf 100644 --- a/HappyAnding/HappyAnding/TextLiteral.swift +++ b/HappyAnding/HappyAnding/TextLiteral.swift @@ -224,7 +224,7 @@ enum TextLiteral { static let signInWithAppleViewUseWithoutSignIn: String = "로그인 없이 둘러보기" // MARK: - MyPageView - static let myPageViewTitle: String = "프로필" + static let myPageViewTitle: String = "나의 공간" static let myPageViewMyCuration: String = "내가 작성한 추천 모음집" static let myPageViewLikedShortcuts: String = "내가 좋아요한" static let myPageViewDownloadedShortcuts: String = "다운로드한" diff --git a/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift b/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift index 5e59586b..560d0eb7 100644 --- a/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift +++ b/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift @@ -17,70 +17,199 @@ struct MyPageView: View { var body: some View { ScrollView { - VStack(spacing: 32) { + VStack(spacing: 12) { //MARK: - 사용자 프로필 + Button { + //프로필 설정 페이지 연걸 + } label: { + HStack { + Image("profile_ex") + .resizable() + .scaledToFit() + .frame(width: 96, height: 96) + + VStack(spacing: 9) { + HStack { + //뱃지 영역 ExploreShortcutView 머지 후 Seal 이용하기 + Image(systemName: "seal") + .resizable() + .scaledToFit() + .frame(width: 30) + Image(systemName: "seal") + .resizable() + .scaledToFit() + .frame(width: 30) + Image(systemName: "seal") + .resizable() + .scaledToFit() + .frame(width: 30) + Image(systemName: "seal") + .resizable() + .scaledToFit() + .frame(width: 30) + } + .frame(maxWidth: .infinity, alignment: .leading) + Divider() + HStack { + Text(shortcutsZipViewModel.userInfo?.nickname ?? TextLiteral.defaultUser) + .frame(maxWidth: .infinity, alignment: .leading) + .foregroundStyle(SCZColor.Basic) + Image(systemName: "slider.horizontal.3") + .foregroundStyle(SCZColor.CharcoalGray.opacity64) + } + .padding(.vertical, 8) + } + .padding(.vertical, 12) + .padding(.horizontal, 16) + .background(Color.white) + .clipShape(RoundedRectangle(cornerRadius: 16)) + + } + } + .padding(.horizontal, 16) - HStack(spacing: 16) { - + MyPageSection(type: .myShortcut, shortcuts: $shortcutsZipViewModel.shortcutsMadeByUser) + Divider() + .padding(.horizontal, 16) + .foregroundStyle(SCZColor.CharcoalGray.opacity08) + MyPageSection(type: .myDownloadShortcut, shortcuts: $shortcutsZipViewModel.shortcutsUserDownloaded) + Divider() + .padding(.horizontal, 16) + .foregroundStyle(SCZColor.CharcoalGray.opacity08) + MyPageSection(type: .myLovingShortcut, shortcuts: $shortcutsZipViewModel.shortcutsUserLiked) + Divider() + .padding(.horizontal, 16) + .foregroundStyle(SCZColor.CharcoalGray.opacity08) + } + .padding(.bottom, 30) + .padding(.top, 12) + } + .toolbar{ + ToolbarItem(placement: .topBarLeading) { + Text(TextLiteral.myPageViewTitle) + .font(.system(size: 24, weight: .bold)) + .foregroundStyle( + LinearGradient(colors: [SCZColor.CharcoalGray.color, SCZColor.CharcoalGray.opacity48], startPoint: .top, endPoint: .bottom) + ) + } + ToolbarItem(placement: .topBarTrailing) { + HStack(spacing: 3) { + Button { + //TODO: 알림창 연결 + print("알림창 연결") + } label: { + Image(systemName: "bell.badge.fill") + .symbolRenderingMode(.palette) + .foregroundStyle( + Color(hexString: "3366FF"), + LinearGradient( + colors: [SCZColor.CharcoalGray.color, SCZColor.CharcoalGray.opacity48], + startPoint: .top, + endPoint: .bottom + ) + ) + } Button { - isTappedUserGradeButton = true + print("설정 페이지 연결") } label: { - shortcutsZipViewModel.fetchShortcutGradeImage(isBig: true, shortcutGrade: shortcutsZipViewModel.checkShortcutGrade(userID: shortcutsZipViewModel.userInfo?.id ?? "!")) - .font(.system(size: 60, weight: .medium)) - .frame(width: 60, height: 60) - .foregroundStyle(Color.gray3) - .id(333) + Image(systemName: "gearshape.fill") + .foregroundStyle( + LinearGradient( + colors: [SCZColor.CharcoalGray.color, SCZColor.CharcoalGray.opacity48], + startPoint: .top, + endPoint: .bottom + ).opacity(0.64) + ) +// .navigationLinkRouter(data: NavigationSettingView.first) } - - Text(shortcutsZipViewModel.userInfo?.nickname ?? TextLiteral.defaultUser) - .shortcutsZipTitle1() - .foregroundStyle(Color.gray5) - - Spacer() } - .frame(maxWidth: .infinity) - .padding(.horizontal, 16) - .padding(.top, 16) - - //TODO: - 각 뷰에 해당하는 단축어 목록 전달하도록 변경 필요 - - // MARK: - 나의 단축어 - - MyShortcutCardListView(shortcuts: shortcutsZipViewModel.shortcutsMadeByUser, - navigationParentView: .myPage) - - // MARK: - 내가 작성한 큐레이션 - UserCurationListView(data: CurationType.myCuration) - .frame(maxWidth: .infinity) - - // MARK: - 좋아요한 단축어 - - MyPageShortcutListCell(type: .myLovingShortcut, shortcuts: shortcutsZipViewModel.shortcutsUserLiked) + } + } + .background( + ZStack { + Color.white + SCZColor.CharcoalGray.opacity04 + } + ) + } +} + +struct MyPageSection: View { + let type: SectionType + @Binding var shortcuts: [Shortcuts] + @State var isFolded = false + + var body: some View { + + VStack(alignment: .leading, spacing: 0) { + HStack { + type.fetchTitleIcon() + Text(type.title) + //pretendard 16 bold + .font(.system(size: 16, weight: .bold)) + .foregroundStyle(SCZColor.Basic) + Text("\(shortcuts.count)") + //SF compact rounded 14 medium + .font(.system(size: 14, weight: .medium)) + .foregroundStyle(SCZColor.CharcoalGray.opacity48) + .padding(EdgeInsets(top: 5, leading: 7, bottom: 5, trailing: 7)) + .background(SCZColor.CharcoalGray.opacity08) + .roundedBorder(cornerRadius: 16, color: Color.white, isNormalBlend: true, opacity: 0.12) - // MARK: -다운로드한 단축어 + Spacer() - MyPageShortcutListCell(type: .myDownloadShortcut, shortcuts: shortcutsZipViewModel.shortcutsUserDownloaded) - .padding(.bottom, 44) + if type != .myShortcut { + Button { + withAnimation { + isFolded.toggle() + } + } label: { + Image(systemName: isFolded ? "chevron.down" : "chevron.up") + .foregroundStyle(SCZColor.CharcoalGray.opacity48) + } + } } - } - .navigationBarTitle(TextLiteral.myPageViewTitle) - .navigationBarTitleDisplayMode(.large) - .toolbar { - ToolbarItem { - Image(systemName: "gearshape.fill") - .shortcutsZipHeadline() - .foregroundStyle(Color.gray5) - .navigationLinkRouter(data: NavigationSettingView.first) + .padding(.horizontal, 16) + + if type == .myShortcut || !isFolded { + ScrollView(.horizontal, showsIndicators: false ) { + HStack(spacing: 8) { + Rectangle() + .frame(width: 16) + .foregroundStyle(Color.clear) + if type == .myShortcut { + Button { + print("단축어 작성 페이지 연결") + } label: { + Image(systemName: "plus") + .foregroundStyle(Color.white) + .frame(width: 36, height: 144) + .background(Color(hexString: "3366FF").opacity(0.88)) + .roundedBorder(cornerRadius: 16, color: .white, isNormalBlend: true, opacity: 0.12) + } + + ForEach(shortcuts.prefix(5), id: \.self) { shortcut in + OrderedCell(type: .myShortcut, index: 0, shortcut: shortcut) + } + if shortcuts.count > 5 { + ExpandedCell(type: type, shortcuts: shortcuts) + } + } else { + ForEach(shortcuts.prefix(4), id: \.self) { shortcut in + UnorderedCell(shortcut: shortcut) + } + if shortcuts.count > 4 { + ExpandedCell(type: type, shortcuts: shortcuts) + } + } + + } + .padding(.trailing, 16) + } + .padding(.vertical, 8) } } - .sheet(isPresented: $isTappedUserGradeButton) { - AboutShortcutGradeView() - .presentationDetents([.large]) - .presentationDragIndicator(.visible) - } - .scrollIndicators(.hidden) - .background(Color.shortcutsZipBackground) } } From 947638af3a9c377d64358171cdfe2b2dd1092c2b Mon Sep 17 00:00:00 2001 From: jeonjimin Date: Mon, 15 Apr 2024 23:17:51 +0900 Subject: [PATCH 02/10] =?UTF-8?q?[Feat]=20OrderedCell=20=EC=9D=B8=EB=8D=B1?= =?UTF-8?q?=EC=8A=A4=20=EB=B2=88=ED=98=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HappyAnding/HappyAnding.xcodeproj/project.pbxproj | 4 ++++ HappyAnding/HappyAnding/Views/Components/CardSection.swift | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/HappyAnding/HappyAnding.xcodeproj/project.pbxproj b/HappyAnding/HappyAnding.xcodeproj/project.pbxproj index d0d284bb..af923ac2 100644 --- a/HappyAnding/HappyAnding.xcodeproj/project.pbxproj +++ b/HappyAnding/HappyAnding.xcodeproj/project.pbxproj @@ -1403,6 +1403,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; @@ -1425,6 +1426,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; @@ -1446,6 +1448,7 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; @@ -1466,6 +1469,7 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; + CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; diff --git a/HappyAnding/HappyAnding/Views/Components/CardSection.swift b/HappyAnding/HappyAnding/Views/Components/CardSection.swift index 6ffa2df3..5db447a6 100644 --- a/HappyAnding/HappyAnding/Views/Components/CardSection.swift +++ b/HappyAnding/HappyAnding/Views/Components/CardSection.swift @@ -30,7 +30,7 @@ struct CardSection: View { case .recent: UnorderedCell(shortcut: shortcut) default: - OrderedCell(type: .download, index: index, shortcut: shortcut) + OrderedCell(type: .download, index: index+1, shortcut: shortcut) } } ExpandedCell(type: type, shortcuts: shortcuts) From 72a7d9a65ee5c26760b8b27266345f663cfd6327 Mon Sep 17 00:00:00 2001 From: jeonjimin Date: Tue, 16 Apr 2024 00:39:21 +0900 Subject: [PATCH 03/10] =?UTF-8?q?[Feat]=20#524=20-=20MyPageViewModel=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 섹션 접힘 유무 UserDefaults 저장 - 섹션 최대 노출 셀 수 변경 --- .../HappyAnding.xcodeproj/project.pbxproj | 12 +++ .../MyPageViewModels/MyPageViewModel.swift | 50 ++++++++++++ .../Views/MyPageViews/MyPageView.swift | 78 +++++++------------ .../Views/TabView/ShortcutTabView.swift | 2 +- 4 files changed, 93 insertions(+), 49 deletions(-) create mode 100644 HappyAnding/HappyAnding/ViewModel/MyPageViewModels/MyPageViewModel.swift diff --git a/HappyAnding/HappyAnding.xcodeproj/project.pbxproj b/HappyAnding/HappyAnding.xcodeproj/project.pbxproj index af923ac2..a582101a 100644 --- a/HappyAnding/HappyAnding.xcodeproj/project.pbxproj +++ b/HappyAnding/HappyAnding.xcodeproj/project.pbxproj @@ -172,6 +172,7 @@ F9A86DA62A0B54ED00405E12 /* UserNameCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9A86DA52A0B54ED00405E12 /* UserNameCell.swift */; }; F9AC2BB62935201C00165820 /* CheckUpdateVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9AC2BB52935201C00165820 /* CheckUpdateVersion.swift */; }; F9AFF6E32A59153B00FFFFAD /* WriteShortcutViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9AFF6E22A59153B00FFFFAD /* WriteShortcutViewModel.swift */; }; + F9B99F262BCD73A10094F47B /* MyPageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9B99F252BCD73A10094F47B /* MyPageViewModel.swift */; }; F9BA11D329A389EA00176807 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = F9BA11D229A389EA00176807 /* GoogleService-Info.plist */; }; F9BA11D429A389EA00176807 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = F9BA11D229A389EA00176807 /* GoogleService-Info.plist */; }; F9CAEF832914855900224B0A /* Date+String.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9CAEF822914855900224B0A /* Date+String.swift */; }; @@ -355,6 +356,7 @@ F9AC2BB52935201C00165820 /* CheckUpdateVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckUpdateVersion.swift; sourceTree = ""; }; F9AC2BB92935D34C00165820 /* Image+View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Image+View.swift"; sourceTree = ""; }; F9AFF6E22A59153B00FFFFAD /* WriteShortcutViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WriteShortcutViewModel.swift; sourceTree = ""; }; + F9B99F252BCD73A10094F47B /* MyPageViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageViewModel.swift; sourceTree = ""; }; F9BA11D229A389EA00176807 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; F9CAEF822914855900224B0A /* Date+String.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+String.swift"; sourceTree = ""; }; F9DB8EB82939853D00516CE1 /* ShareExtensionValidationTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareExtensionValidationTextField.swift; sourceTree = ""; }; @@ -706,6 +708,7 @@ A0F822AA2910B8B900AF4448 /* ViewModel */ = { isa = PBXGroup; children = ( + F9B99F242BCD738B0094F47B /* MyPageViewModels */, 8788E1A12A484518007C3852 /* ExploreShortcutViewModels */, 8788E1A32A484533007C3852 /* ReadShortcutViewModels */, 8788E19E2A483FDF007C3852 /* ExploreCurationViewModels */, @@ -801,6 +804,14 @@ path = SettingViews; sourceTree = ""; }; + F9B99F242BCD738B0094F47B /* MyPageViewModels */ = { + isa = PBXGroup; + children = ( + F9B99F252BCD73A10094F47B /* MyPageViewModel.swift */, + ); + path = MyPageViewModels; + sourceTree = ""; + }; F9DB8ECB293B30EC00516CE1 /* Recovered References */ = { isa = PBXGroup; children = ( @@ -1084,6 +1095,7 @@ F9136EB6293612310034AAB2 /* ShortcutsZipView.swift in Sources */, 87E99CB128FFF273009B691F /* WriteCurationSetView.swift in Sources */, 4D61A767291E1EE8000EF531 /* NavigationViewModel.swift in Sources */, + F9B99F262BCD73A10094F47B /* MyPageViewModel.swift in Sources */, 4D93D0752A61D0D10042CBA8 /* ReadShortcutViewModel.swift in Sources */, F96D45BD29816578000C2441 /* StickyHeader.swift in Sources */, 87E99CEE29080D33009B691F /* User.swift in Sources */, diff --git a/HappyAnding/HappyAnding/ViewModel/MyPageViewModels/MyPageViewModel.swift b/HappyAnding/HappyAnding/ViewModel/MyPageViewModels/MyPageViewModel.swift new file mode 100644 index 00000000..4f9373da --- /dev/null +++ b/HappyAnding/HappyAnding/ViewModel/MyPageViewModels/MyPageViewModel.swift @@ -0,0 +1,50 @@ +// +// MyPageViewModel.swift +// HappyAnding +// +// Created by JeonJimin on 4/15/24. +// + +import Foundation +import Combine + +final class MyPageViewModel: ObservableObject { + private let shortcutsZipViewModel = ShortcutsZipViewModel.share + private var cancellables = Set() + + @Published var myShortcuts: [Shortcuts] = [] + @Published var myDownloadShortcuts: [Shortcuts] = [] + @Published var myLovingShortcuts: [Shortcuts] = [] + + @Published var isMyDownloadShortcutFolded = false { + didSet { + UserDefaults.standard.set(isMyDownloadShortcutFolded, forKey: "isMyDownloadShortcutFolded") + } + } + @Published var isMyLovingShortcutFolded = false { + didSet { + UserDefaults.standard.set(isMyLovingShortcutFolded, forKey: "isMyLovingShortcutFolded") + } + } + + init() { + shortcutsZipViewModel.$shortcutsMadeByUser + .sink { [weak self] in self?.myShortcuts = $0 } + .store(in: &cancellables) + + shortcutsZipViewModel.$shortcutsUserDownloaded + .sink { [weak self] in self?.myDownloadShortcuts = $0 } + .store(in: &cancellables) + + shortcutsZipViewModel.$shortcutsUserLiked + .sink { [weak self] in self?.myLovingShortcuts = $0 } + .store(in: &cancellables) + + self.isMyDownloadShortcutFolded = UserDefaults.standard.bool(forKey: "isMyDownloadShortcutFolded") + self.isMyLovingShortcutFolded = UserDefaults.standard.bool(forKey: "isMyLovingShortcutFolded") + } + + func fetchUserInfo() -> String { + shortcutsZipViewModel.userInfo?.nickname ?? TextLiteral.defaultUser + } +} diff --git a/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift b/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift index 560d0eb7..27a7f2d6 100644 --- a/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift +++ b/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift @@ -8,22 +8,16 @@ import SwiftUI struct MyPageView: View { - - @EnvironmentObject var shortcutsZipViewModel: ShortcutsZipViewModel - - @AppStorage("useWithoutSignIn") var useWithoutSignIn: Bool = false - - @State var isTappedUserGradeButton = false - + @StateObject var viewModel: MyPageViewModel + var body: some View { - ScrollView { + ScrollView(showsIndicators: false) { VStack(spacing: 12) { - - //MARK: - 사용자 프로필 Button { //프로필 설정 페이지 연걸 } label: { HStack { + //TODO: 프로필 이미지 - 등급 시스템과 동일 추후 이미지 연결 Image("profile_ex") .resizable() .scaledToFit() @@ -31,28 +25,12 @@ struct MyPageView: View { VStack(spacing: 9) { HStack { - //뱃지 영역 ExploreShortcutView 머지 후 Seal 이용하기 - Image(systemName: "seal") - .resizable() - .scaledToFit() - .frame(width: 30) - Image(systemName: "seal") - .resizable() - .scaledToFit() - .frame(width: 30) - Image(systemName: "seal") - .resizable() - .scaledToFit() - .frame(width: 30) - Image(systemName: "seal") - .resizable() - .scaledToFit() - .frame(width: 30) + //TODO: 추가 예정 이미지 확정되면 넣기 } .frame(maxWidth: .infinity, alignment: .leading) Divider() HStack { - Text(shortcutsZipViewModel.userInfo?.nickname ?? TextLiteral.defaultUser) + Text(viewModel.fetchUserInfo()) .frame(maxWidth: .infinity, alignment: .leading) .foregroundStyle(SCZColor.Basic) Image(systemName: "slider.horizontal.3") @@ -69,18 +47,23 @@ struct MyPageView: View { } .padding(.horizontal, 16) - MyPageSection(type: .myShortcut, shortcuts: $shortcutsZipViewModel.shortcutsMadeByUser) - Divider() - .padding(.horizontal, 16) - .foregroundStyle(SCZColor.CharcoalGray.opacity08) - MyPageSection(type: .myDownloadShortcut, shortcuts: $shortcutsZipViewModel.shortcutsUserDownloaded) - Divider() - .padding(.horizontal, 16) - .foregroundStyle(SCZColor.CharcoalGray.opacity08) - MyPageSection(type: .myLovingShortcut, shortcuts: $shortcutsZipViewModel.shortcutsUserLiked) - Divider() - .padding(.horizontal, 16) - .foregroundStyle(SCZColor.CharcoalGray.opacity08) + MyPageSection(type: .myShortcut, shortcuts: $viewModel.myShortcuts, isFolded: .constant(false)) + + MyPageSection(type: .myDownloadShortcut, shortcuts: $viewModel.myDownloadShortcuts, isFolded: $viewModel.isMyDownloadShortcutFolded) + + if viewModel.isMyDownloadShortcutFolded { + Divider() + .padding(.horizontal, 16) + .foregroundStyle(SCZColor.CharcoalGray.opacity08) + } + + MyPageSection(type: .myLovingShortcut, shortcuts: $viewModel.myLovingShortcuts, isFolded: $viewModel.isMyLovingShortcutFolded) + + if viewModel.isMyLovingShortcutFolded { + Divider() + .padding(.horizontal, 16) + .foregroundStyle(SCZColor.CharcoalGray.opacity08) + } } .padding(.bottom, 30) .padding(.top, 12) @@ -138,8 +121,7 @@ struct MyPageView: View { struct MyPageSection: View { let type: SectionType @Binding var shortcuts: [Shortcuts] - @State var isFolded = false - + @Binding var isFolded: Bool var body: some View { VStack(alignment: .leading, spacing: 0) { @@ -171,9 +153,9 @@ struct MyPageSection: View { } } .padding(.horizontal, 16) - + let maxNum = shortcuts.count > 3 ? 2 : 3 if type == .myShortcut || !isFolded { - ScrollView(.horizontal, showsIndicators: false ) { + ScrollView(.horizontal, showsIndicators: false) { HStack(spacing: 8) { Rectangle() .frame(width: 16) @@ -189,17 +171,17 @@ struct MyPageSection: View { .roundedBorder(cornerRadius: 16, color: .white, isNormalBlend: true, opacity: 0.12) } - ForEach(shortcuts.prefix(5), id: \.self) { shortcut in + ForEach(shortcuts.prefix(maxNum), id: \.self) { shortcut in OrderedCell(type: .myShortcut, index: 0, shortcut: shortcut) } - if shortcuts.count > 5 { + if shortcuts.count > maxNum { ExpandedCell(type: type, shortcuts: shortcuts) } } else { - ForEach(shortcuts.prefix(4), id: \.self) { shortcut in + ForEach(shortcuts.prefix(maxNum), id: \.self) { shortcut in UnorderedCell(shortcut: shortcut) } - if shortcuts.count > 4 { + if shortcuts.count > maxNum { ExpandedCell(type: type, shortcuts: shortcuts) } } diff --git a/HappyAnding/HappyAnding/Views/TabView/ShortcutTabView.swift b/HappyAnding/HappyAnding/Views/TabView/ShortcutTabView.swift index 182f49fb..05b2ba50 100644 --- a/HappyAnding/HappyAnding/Views/TabView/ShortcutTabView.swift +++ b/HappyAnding/HappyAnding/Views/TabView/ShortcutTabView.swift @@ -137,7 +137,7 @@ struct ShortcutTabView: View { @ViewBuilder private func thirdTab() -> some View { - MyPageView() + MyPageView(viewModel: MyPageViewModel()) .modifierNavigation() .navigationBarBackground ({ Color.shortcutsZipBackground }) .id(thirdTabID) From e2f470f96a831c72b9e05a741cd8733768a659c8 Mon Sep 17 00:00:00 2001 From: jeonjimin Date: Tue, 16 Apr 2024 00:44:52 +0900 Subject: [PATCH 04/10] =?UTF-8?q?[Feat]=20#524=20-=20=EC=84=B9=EC=85=98=20?= =?UTF-8?q?=ED=8F=B4=EB=93=9C=20=EB=B2=84=ED=8A=BC=20=ED=84=B0=EC=B9=98=20?= =?UTF-8?q?=EC=98=81=EC=97=AD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift b/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift index 27a7f2d6..48f11a8b 100644 --- a/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift +++ b/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift @@ -150,6 +150,7 @@ struct MyPageSection: View { Image(systemName: isFolded ? "chevron.down" : "chevron.up") .foregroundStyle(SCZColor.CharcoalGray.opacity48) } + .frame(width: 24, height: 24) } } .padding(.horizontal, 16) From be5c3b785cc605240a723c9ea0f0fc07e2a012c5 Mon Sep 17 00:00:00 2001 From: jeonjimin Date: Mon, 22 Apr 2024 03:24:03 +0900 Subject: [PATCH 05/10] =?UTF-8?q?[Feat]=20=EB=94=94=EC=9E=90=EC=9D=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=EC=82=AC=ED=95=AD=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ExploreShortcutView 섹션 타이틀 아이콘 이미지로 변경 - ExploreShortcutView 하단 여백 수정 - 섹션 더보기 버튼 색상 수정 - 툴바 아이템 색상 수정 --- .../Assets.xcassets/Icons/Contents.json | 6 ++ .../Icons/loved.imageset/Contents.json | 21 +++++ .../Icons/loved.imageset/loved.png | Bin 0 -> 2448 bytes .../Icons/new.imageset/Contents.json | 21 +++++ .../Icons/new.imageset/new.png | Bin 0 -> 1694 bytes .../Icons/ranked.imageset/Contents.json | 21 +++++ .../Icons/ranked.imageset/ranked.png | Bin 0 -> 4038 bytes .../HappyAnding/Model/SectionType.swift | 83 ++++++++++++++++++ .../Views/Components/CardSection.swift | 26 +++--- .../Views/Components/ExploreCell.swift | 9 +- .../ExpandedRankingView.swift | 2 +- .../ExploreShortcutView.swift | 3 +- .../Views/MyPageViews/MyPageView.swift | 7 +- 13 files changed, 181 insertions(+), 18 deletions(-) create mode 100644 HappyAnding/HappyAnding/Assets.xcassets/Icons/Contents.json create mode 100644 HappyAnding/HappyAnding/Assets.xcassets/Icons/loved.imageset/Contents.json create mode 100644 HappyAnding/HappyAnding/Assets.xcassets/Icons/loved.imageset/loved.png create mode 100644 HappyAnding/HappyAnding/Assets.xcassets/Icons/new.imageset/Contents.json create mode 100644 HappyAnding/HappyAnding/Assets.xcassets/Icons/new.imageset/new.png create mode 100644 HappyAnding/HappyAnding/Assets.xcassets/Icons/ranked.imageset/Contents.json create mode 100644 HappyAnding/HappyAnding/Assets.xcassets/Icons/ranked.imageset/ranked.png diff --git a/HappyAnding/HappyAnding/Assets.xcassets/Icons/Contents.json b/HappyAnding/HappyAnding/Assets.xcassets/Icons/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/HappyAnding/HappyAnding/Assets.xcassets/Icons/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HappyAnding/HappyAnding/Assets.xcassets/Icons/loved.imageset/Contents.json b/HappyAnding/HappyAnding/Assets.xcassets/Icons/loved.imageset/Contents.json new file mode 100644 index 00000000..d4099dbb --- /dev/null +++ b/HappyAnding/HappyAnding/Assets.xcassets/Icons/loved.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "loved.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HappyAnding/HappyAnding/Assets.xcassets/Icons/loved.imageset/loved.png b/HappyAnding/HappyAnding/Assets.xcassets/Icons/loved.imageset/loved.png new file mode 100644 index 0000000000000000000000000000000000000000..6204a756eb8c4639ec31238f2148ef16bc76aec4 GIT binary patch literal 2448 zcmV;B32*j^P)GxGOB-OW(iGBR@YBvd>N6ES($~fgS`GVU2h0( z62Jrq#v!o~!HTnGNDiKGI$gYoOSpg>9Mc|*LislV;X0ohBf?&|h+GfC8UJ1)!IMAy z0;jVnuC^^3H{CGf%71NnCf(i{$Th@bCBClZidxRT9Rz?f-r)zM+kdwxP#^fO*G%3ZX zEGb#Hho61;&m8zapU?werR)+JtkM)gz`EY59yCFZ*qa>Ouwq65d;cr?p5Z3mqU^%K zk`Xv_;bx6u&|4uLw;=aF`WG(z@xLDh*FEXZgUo@}lqub}?Xw9sL61V9EPylESHGeM z3^l7g+<6Ci-dVHGU3sG$$A73QLijV(993Na9qYb12rS&!A9ww<&%0EO((&oTzv2xj zRpV&*EluDT_};_S612`O+gSa!>zK)%F@x(}y8V6X0~a6Nk&1*eK>^FhWPk0fo4Icl zTsXmod<6I3{!8mg87#Z+4-7Z1pLVbsxDl@0MPjL-CDOWmfX2Xr7uGcz00tQBufEOz+`;<(>OC(|)a^Z9 zPk&G2t=@!uKf>a{*EEK6_#wD&=fXaZ?pvQLSP_+B+aM)#ORQmsN?6EePT8>I^1kX_ zxJ{z~e`E0yo{r!t4>QzTOd#NH-)3Py}<*({W59>^LbLtrab( zB5!s)&}XSr3`oitMm9AFsu$R2B0-jm(P)LO-r&;v>L+j*s7mJ;nLD$ zIvr?(&M_Y$z*<*}ie?i5QAh!%tr<@fWR@KqW{k?ah+4RFIuFWV1LDGxikjhQNjg%g z2*~s5dJJ-)TbYdW^0}dg7^)xg#z1*VJmcSzRz<6cyK#%jKy<5hZk#|er zn)baS`PV(i9sVqv!;03?s}6dus~bZ0t*mdWgxb9!hnMH&>?!?LP-y5W@8xvne|pP) zCm%vJHIom5Ivg^>HkREaR)eIv4Jgn$3&Zf=kN(g>yEF+_(hU$7yV7~EtqZWh{dWM3 zzf)bxit?J)8G4;hTiEjeyOOJRY3V~irb1oR0HEmSLbkEqM$m!d!t)%IFZY6h--u2F z?4o_KeUd@RVj6LRb>Nsx*8s5 zu$>%cfR%z4EtU#|58hVj#X(Ceo2_i;uCBas1Aeq<5EYztknIO7MGvXxwA^kE0N`waByAxr9fD^OBzS#PJX)LLU>H9Y5r501BP?9sSVSDlK4rWaf$vEA7UzKUAu3 zSp8W7g906Z1fzi@r0!mY0owfR-D$rIuokvE*}C(nT&k3ob-EEEfE#c}%knUMEen>i zuU2->X~nlpVL(h+AFTXC;o+)mMN~;gZWGvW=Pc5yAmmh(btPC~1TN?Px}APEbRkT! z5ax2T$VyeEEL^2AE*rM8zBmwJ^$chzW>f~S*OlG(2-XO~2D$e+&3MJ(LAFDnclw$( zU$^AyC0iGg0Vw7&;tmDJxZuEbPT3Bv;)&0hGu~@Cwl032uK!a zwx7d0>=p7p&X!-~j9^RQI;OmRf5L~8tc9@8!oEx0vNTP99mUdSw)klDANV5Vq7*q3XuVD1ZTXeKfMTO zSLMaU4@=;OrKYzq4eipaKAVOcJ?@HeTUyqS2n>3#*x_5nD~0v)|6@A91|I71w)p-+ zewGkHV=g8i@&zPLX8eS~4}ow=xiqYo{~gn$YT&quAE89Zy6?B?%Nl7~WBgU`(0e8!#-rl@m8?Cbyu$aM)^wI7Ru_Ljd-`_so#wG zZWqIjs9jk0jOTOHi++K=jXX2hDE{j?W_$qcXZC$W#(q-4mY*+Px_q?VB+neyi~q2! z@?V)D+*XyJojdNEFI-&^S|`5=Y?L>?r914dH~leN^T}H;tbf_QYWWomt0pB7;iAp} O00002zKMA!@{m zKz1x`e5p2|u??AjV?sdh;*)z^m&2({Adgm$JO2s_K7T4Z7Cqw@d`(lp6C{932c73Z z083Oi2Q`b*Sc}C8ggfFW^}_rf^)Q47i&So+v3Y_$CyNDM(cK#!DvcA|pkIfX+I2E# z{uZwgd!zSS<4xy>U>`MNRiF_5zWk9*x6OA7yzeiUQ8R_+pfSIKusb<1$A~V_0J#MY zetELTG3Cd>+i!dnfxRWMowB#=qXF`dAZa5ka-CuVBex&7k3uv+Zh>rSMi|GI9tzNT z`94tOF56t|W|2!^Jol(=B1+OnCOR=_P%#s2n0zKmDkX~iGTyW) zatYLgP2&ki!}vwCh6lo2fmi2Gw^^1auSH`bbo-%9#VOayCHgW%E1p z`K_Vf`SG7VEOIN*B&XmYS*tFLBjHkmFp>3;2`I-Wv#u+M`w*6B4bHnin>0u3_PFDz!sDDFPATyFl=Fc$;-RBY7oW9N-e9a#85G5GJwYLmg z9!x>1dgd?mH`w9j;5u0Z%@6-QEGtetD5mDTO3lftnJZ9CkCWA-^f~3=03}IE`G^Zo zadhOs>B18EV$pQ6$_{0b)W>*GV+k1fF{I~X)#MYXqC^nIYuq9?BwD$BGxl7btK0T%rv*aNJVcH@!I#@pM8`d4(4f%;$;SL1Vrg$TeZ{{D#m)@cf{b7gL>$V`>tso zzE~trgHKMSTiw<-K!w5SlZ`BKLLyFxbI=O0K7xZ&pBHxZ4n;B+2Roe?f9;|Itd8K- zZ%;Q1ixU)f24_$APyu#!cx5wGYtBTHsz5rsDn=+f!kw4pGyW=fcs(w6@H$7UV`1qM zN9t~Rss|JKSklIvAC*N|sOE6dp(74D`Y1qQfo82*GA7r9QXb-`D0(nvsK-6lwD{L& zgie1e=6#>v^Lp%DNNhYSAD!EU!5{1-BE6aHy^Ampbu%O5P9ar=&< z$NTON2qN>y%6u>Cpt41`MnX1Q)9+lfB=(AC8(Pe?%jW8_-S{)TW7>I?^PqX!vIr8h zl=%1xB21Ek)B_F+xq*0oa#4y)kDSP^@P~VMIz>}Gy>o3!jZS?tlr%`%aLN`$3Kxzz z85WhNs$S_jmu>d6kb`){+m3shJW#%}^F!>X$7jXHknl!xHvQ7-dL=n!~sN%uZz&6;qqQ z&NHr%>&XiF)M$o9Gle|VH-dsz$Jv+Y1Qw`Opcx^`h;1ob{36slf`Y#1p*-2|uwb4- z?E=}GUYHkYhq~Z?$1EBcL9UFa%M)bgU+MjhdDJg(X&6vy_~f-~@mbQ^1)Al8mxQ#1 zMi!qXt$ze#Cg$A3_V!Z07*qoM6N<$g1*KKF8}}l literal 0 HcmV?d00001 diff --git a/HappyAnding/HappyAnding/Assets.xcassets/Icons/ranked.imageset/Contents.json b/HappyAnding/HappyAnding/Assets.xcassets/Icons/ranked.imageset/Contents.json new file mode 100644 index 00000000..d411162b --- /dev/null +++ b/HappyAnding/HappyAnding/Assets.xcassets/Icons/ranked.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "ranked.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HappyAnding/HappyAnding/Assets.xcassets/Icons/ranked.imageset/ranked.png b/HappyAnding/HappyAnding/Assets.xcassets/Icons/ranked.imageset/ranked.png new file mode 100644 index 0000000000000000000000000000000000000000..4bb16a8e8fa22f34c5cb13223efe438fea1573fc GIT binary patch literal 4038 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 literal 0 HcmV?d00001 diff --git a/HappyAnding/HappyAnding/Model/SectionType.swift b/HappyAnding/HappyAnding/Model/SectionType.swift index 46cdb649..ab99c034 100644 --- a/HappyAnding/HappyAnding/Model/SectionType.swift +++ b/HappyAnding/HappyAnding/Model/SectionType.swift @@ -106,4 +106,87 @@ enum SectionType { ) } } + + func fetchTitleImage() -> some View { + switch self { + case .recent: + return Image("new") + .resizable() + .scaledToFit() + .frame(width: 19) + .foregroundStyle( + Color(hexString: "E4C139"), + Color(hexString: "E4C139") + ) + .shadow(color: Color(hexString: "E5C239").opacity(0.36), + radius: 8, + x: 0, + y: 0) + case .download: + return Image("ranked") + .resizable() + .scaledToFit() + .frame(width: 19) + .foregroundStyle( + Color(hexString: "404040", opacity: 0.48), + Color(hexString: "404040", opacity: 0.48) + ) + .shadow(color: Color.black.opacity(0.16), + radius: 8, + x: 0, + y: 0) + case .popular: + return Image("loved") + .resizable() + .scaledToFit() + .frame(width: 19) + .foregroundStyle( + SCZColor.SCZBlue.opacity88, + SCZColor.SCZBlue.opacity88 + ) + .shadow(color: SCZColor.SCZBlue.opacity48, + radius: 8, + x: 0, + y: 0) + case .myShortcut: + return Image(systemName: "square.text.square.fill") + .resizable() + .scaledToFit() + .frame(width: 19) + .foregroundStyle( + SCZColor.CharcoalGray.opacity64, + Color.white + ) + .shadow(color: Color.clear, + radius: 0, + x: 0, + y: 0) + case .myDownloadShortcut: + return Image(systemName: "arrow.down.square.fill") + .resizable() + .scaledToFit() + .frame(width: 19) + .foregroundStyle( + Color.white, + SCZColor.CharcoalGray.opacity24 + ) + .shadow(color: Color.clear, + radius: 0, + x: 0, + y: 0) + case .myLovingShortcut: + return Image("loved") + .resizable() + .scaledToFit() + .frame(width: 19) + .foregroundStyle( + SCZColor.SCZBlue.opacity88, + SCZColor.SCZBlue.opacity88 + ) + .shadow(color: Color.black.opacity(0.16), + radius: 8, + x: 0, + y: 0) + } + } } diff --git a/HappyAnding/HappyAnding/Views/Components/CardSection.swift b/HappyAnding/HappyAnding/Views/Components/CardSection.swift index 5db447a6..f31528d2 100644 --- a/HappyAnding/HappyAnding/Views/Components/CardSection.swift +++ b/HappyAnding/HappyAnding/Views/Components/CardSection.swift @@ -10,31 +10,35 @@ import SwiftUI struct CardSection: View { let type: SectionType let shortcuts: [Shortcuts] - + let horizontalPadding: CGFloat = 16 var body: some View { VStack(alignment: .leading, spacing: 6) { HStack { - type.fetchTitleIcon() + type.fetchTitleImage() Text(type.title) .foregroundStyle(SCZColor.Basic) } - .font(.system(size: 20, weight: .semibold)) - .padding(.horizontal, 13) + .font(.system(size: 20, weight: .semibold)) + .padding(.horizontal, horizontalPadding) ScrollView(.horizontal, showsIndicators: false) { HStack(spacing: 6) { Rectangle() .foregroundStyle(Color.clear) - .frame(width: 13) + .frame(width: horizontalPadding-6) ForEach(Array(shortcuts.enumerated()).prefix(5), id: \.offset) { index, shortcut in - switch type { - case .recent: - UnorderedCell(shortcut: shortcut) - default: - OrderedCell(type: .download, index: index+1, shortcut: shortcut) + Button { + //ReadShortcutView 연결 + } label: { + switch type { + case .recent: + UnorderedCell(shortcut: shortcut) + default: + OrderedCell(type: .download, index: index+1, shortcut: shortcut) + } } } ExpandedCell(type: type, shortcuts: shortcuts) - .padding(.trailing, 13) + .padding(.trailing, horizontalPadding) } } } diff --git a/HappyAnding/HappyAnding/Views/Components/ExploreCell.swift b/HappyAnding/HappyAnding/Views/Components/ExploreCell.swift index 98faa9c3..20fb848a 100644 --- a/HappyAnding/HappyAnding/Views/Components/ExploreCell.swift +++ b/HappyAnding/HappyAnding/Views/Components/ExploreCell.swift @@ -102,10 +102,15 @@ struct ExpandedCell: View { Image(systemName: "rectangle.portrait.on.rectangle.portrait.angled.fill") Text("더보기") } - .foregroundStyle(Color.white.opacity(0.88)) + .foregroundStyle(SCZColor.CharcoalGray.opacity64) .font(.system(size: 15, weight: .semibold)) .frame(width: 108, height: 144, alignment: .center) - .background(SCZColor.CharcoalGray.opacity08) + .background( + ZStack { + Color.white.opacity(0.24) + SCZColor.CharcoalGray.opacity08 + } + ) .cornerRadius(12) .overlay( RoundedRectangle(cornerRadius: 12) diff --git a/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift b/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift index 118f29cc..7eee781e 100644 --- a/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift +++ b/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift @@ -32,7 +32,7 @@ struct ExpandedRankingView: View { } .toolbar{ ToolbarItem(placement: .principal) { - type.fetchTitleIcon() + type.fetchTitleImage() } ToolbarItem(placement: .topBarTrailing) { Button { diff --git a/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExploreShortcutView.swift b/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExploreShortcutView.swift index 4dccb0e5..e6b726a3 100644 --- a/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExploreShortcutView.swift +++ b/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExploreShortcutView.swift @@ -23,7 +23,7 @@ struct ExploreShortcutView: View { } } - .padding(.bottom, 40) + .padding(.bottom, 96) } .toolbar{ ToolbarItem(placement: .topBarTrailing) { @@ -70,6 +70,7 @@ struct ExploreShortcutView: View { .font(.system(size: 24, weight: .bold)) .foregroundStyle( LinearGradient(colors: [SCZColor.CharcoalGray.color, SCZColor.CharcoalGray.opacity48], startPoint: .top, endPoint: .bottom) + .opacity(0.64) ) } } diff --git a/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift b/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift index 48f11a8b..dba31b08 100644 --- a/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift +++ b/HappyAnding/HappyAnding/Views/MyPageViews/MyPageView.swift @@ -74,6 +74,7 @@ struct MyPageView: View { .font(.system(size: 24, weight: .bold)) .foregroundStyle( LinearGradient(colors: [SCZColor.CharcoalGray.color, SCZColor.CharcoalGray.opacity48], startPoint: .top, endPoint: .bottom) + .opacity(0.64) ) } ToolbarItem(placement: .topBarTrailing) { @@ -90,7 +91,7 @@ struct MyPageView: View { colors: [SCZColor.CharcoalGray.color, SCZColor.CharcoalGray.opacity48], startPoint: .top, endPoint: .bottom - ) + ).opacity(0.64) ) } Button { @@ -126,7 +127,7 @@ struct MyPageSection: View { VStack(alignment: .leading, spacing: 0) { HStack { - type.fetchTitleIcon() + type.fetchTitleImage() Text(type.title) //pretendard 16 bold .font(.system(size: 16, weight: .bold)) @@ -150,7 +151,7 @@ struct MyPageSection: View { Image(systemName: isFolded ? "chevron.down" : "chevron.up") .foregroundStyle(SCZColor.CharcoalGray.opacity48) } - .frame(width: 24, height: 24) + .frame(width: 28, height: 28) } } .padding(.horizontal, 16) From 2569a9d78fc4ab79149fa15e33286d697738431c Mon Sep 17 00:00:00 2001 From: jeonjimin Date: Mon, 22 Apr 2024 03:32:20 +0900 Subject: [PATCH 06/10] =?UTF-8?q?[Feat]=20ExploreCell=EC=97=90=20Navigatio?= =?UTF-8?q?nLink=EB=A1=9C=20=EB=B2=84=ED=8A=BC=20=EB=8F=99=EC=9E=91=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 화면은 추후 연결 --- .../Views/Components/CardSection.swift | 14 +-- .../Views/Components/ExploreCell.swift | 114 ++++++++++-------- 2 files changed, 66 insertions(+), 62 deletions(-) diff --git a/HappyAnding/HappyAnding/Views/Components/CardSection.swift b/HappyAnding/HappyAnding/Views/Components/CardSection.swift index f31528d2..62d55a6c 100644 --- a/HappyAnding/HappyAnding/Views/Components/CardSection.swift +++ b/HappyAnding/HappyAnding/Views/Components/CardSection.swift @@ -26,15 +26,11 @@ struct CardSection: View { .foregroundStyle(Color.clear) .frame(width: horizontalPadding-6) ForEach(Array(shortcuts.enumerated()).prefix(5), id: \.offset) { index, shortcut in - Button { - //ReadShortcutView 연결 - } label: { - switch type { - case .recent: - UnorderedCell(shortcut: shortcut) - default: - OrderedCell(type: .download, index: index+1, shortcut: shortcut) - } + switch type { + case .recent: + UnorderedCell(shortcut: shortcut) + default: + OrderedCell(type: .download, index: index+1, shortcut: shortcut) } } ExpandedCell(type: type, shortcuts: shortcuts) diff --git a/HappyAnding/HappyAnding/Views/Components/ExploreCell.swift b/HappyAnding/HappyAnding/Views/Components/ExploreCell.swift index 20fb848a..ea37fd39 100644 --- a/HappyAnding/HappyAnding/Views/Components/ExploreCell.swift +++ b/HappyAnding/HappyAnding/Views/Components/ExploreCell.swift @@ -15,39 +15,43 @@ struct OrderedCell: View { let shortcut: Shortcuts var body: some View { - VStack(alignment: .leading, spacing: 8) { - if type == .download || type == .popular { - Seal(index: index, type: .exploreCell) - } - Text(shortcut.title) - .foregroundStyle(SCZColor.Basic) - .font(.system(size: 15, weight: .bold)) - .multilineTextAlignment(.leading) - .lineLimit(2) - .blendMode(.plusDarker) - Spacer() - HStack(spacing: 8) { - HStack(spacing: 3) { - Image(systemName: "arrow.down.to.line.circle.fill") - .frame(width: 14) - Text(formatNumber(shortcut.numberOfDownload)) - .font(.system(size: 11, weight: .medium)) - .lineLimit(1) - .frame(maxWidth: .infinity, alignment: .leading) + NavigationLink { + //ReadShortcutView 연결 + } label: { + VStack(alignment: .leading, spacing: 8) { + if type == .download || type == .popular { + Seal(index: index, type: .exploreCell) } - .foregroundStyle(SCZColor.CharcoalGray.opacity24) - .blendMode(.colorBurn) - Image(systemName: shortcut.sfSymbol) - .foregroundStyle(Color.white) - .font(.system(size: 20)) + Text(shortcut.title) + .foregroundStyle(SCZColor.Basic) + .font(.system(size: 15, weight: .bold)) + .multilineTextAlignment(.leading) + .lineLimit(2) + .blendMode(.plusDarker) + Spacer() + HStack(spacing: 8) { + HStack(spacing: 3) { + Image(systemName: "arrow.down.to.line.circle.fill") + .frame(width: 14) + Text(formatNumber(shortcut.numberOfDownload)) + .font(.system(size: 11, weight: .medium)) + .lineLimit(1) + .frame(maxWidth: .infinity, alignment: .leading) + } + .foregroundStyle(SCZColor.CharcoalGray.opacity24) + .blendMode(.colorBurn) + Image(systemName: shortcut.sfSymbol) + .foregroundStyle(Color.white) + .font(.system(size: 20)) + } + } - + .padding(12) + .frame(width: 108, height: 144, alignment: .top) + .background( SCZColor.colors[shortcut.color]?.color(for: colorScheme).fillGradient() ?? Color.clear.toGradient()) + .cornerRadius(16) + .roundedBorder(cornerRadius: 16, color: Color.white, isNormalBlend: true, opacity: 0.12) } - .padding(12) - .frame(width: 108, height: 144, alignment: .top) - .background( SCZColor.colors[shortcut.color]?.color(for: colorScheme).fillGradient() ?? Color.clear.toGradient()) - .cornerRadius(16) - .roundedBorder(cornerRadius: 16, color: Color.white, isNormalBlend: true, opacity: 0.12) } private func formatNumber(_ number: Int) -> String { @@ -62,31 +66,35 @@ struct UnorderedCell: View{ let shortcut: Shortcuts var body: some View { - VStack(alignment: .leading, spacing: 4) { - HStack { - RoundedRectangle(cornerRadius: 1) - .frame(width: 2, height: 30) - .foregroundStyle(SCZColor.colors[shortcut.color]?.color(for: colorScheme).fillGradient() ?? Color.clear.toGradient()) - Image(systemName: shortcut.sfSymbol) - .foregroundStyle(SCZColor.CharcoalGray.opacity88) + NavigationLink { + //ReadShortcutView 연결 + } label: { + VStack(alignment: .leading, spacing: 4) { + HStack { + RoundedRectangle(cornerRadius: 1) + .frame(width: 2, height: 30) + .foregroundStyle(SCZColor.colors[shortcut.color]?.color(for: colorScheme).fillGradient() ?? Color.clear.toGradient()) + Image(systemName: shortcut.sfSymbol) + .foregroundStyle(SCZColor.CharcoalGray.opacity88) + } + Text(shortcut.title) + .foregroundStyle(SCZColor.Basic) + .frame(maxWidth: .infinity, alignment: .leading) } - Text(shortcut.title) - .foregroundStyle(SCZColor.Basic) - .frame(maxWidth: .infinity, alignment: .leading) + .font(.system(size: 15, weight: .bold)) + .padding(12) + .frame(width: 108, height: 144, alignment: .top) + .background( + RoundedRectangle(cornerRadius: 16) + .fill(Color.white) + .overlay( + RoundedRectangle(cornerRadius: 16) + .stroke(SCZColor.Basic.opacity(0.12), lineWidth: 2) + ) + ) + .cornerRadius(16) + .dropShadow() } - .font(.system(size: 15, weight: .bold)) - .padding(12) - .frame(width: 108, height: 144, alignment: .top) - .background( - RoundedRectangle(cornerRadius: 16) - .fill(Color.white) - .overlay( - RoundedRectangle(cornerRadius: 16) - .stroke(SCZColor.Basic.opacity(0.12), lineWidth: 2) - ) - ) - .cornerRadius(16) - .dropShadow() } } From c595312511da69d0099433d6e2c354f03185343b Mon Sep 17 00:00:00 2001 From: jeonjimin Date: Mon, 22 Apr 2024 03:42:23 +0900 Subject: [PATCH 07/10] =?UTF-8?q?[Feat]=20ExpandedRankingView=20=EC=A2=8C?= =?UTF-8?q?=EC=9A=B0=EC=97=AC=EB=B0=B1=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Views/ExploreShortcutViews/ExpandedRankingView.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift b/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift index 7eee781e..278007d0 100644 --- a/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift +++ b/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift @@ -73,5 +73,6 @@ struct ExpandedShortcutCell: View { .foregroundStyle(SCZColor.CharcoalGray.opacity24) } .padding(.vertical, 6) + .padding(.horizontal, type == .popular || type == .download ? 0 : 8) } } From 2f7dbb6d8ce791d15ab8a9c3779dca4c5ed1c2aa Mon Sep 17 00:00:00 2001 From: jeonjimin Date: Mon, 22 Apr 2024 04:12:43 +0900 Subject: [PATCH 08/10] =?UTF-8?q?[Feat]=20navigationLinkRouter=20=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=97=AC=20=ED=99=94=EB=A9=B4=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Silver -> Gray로 색상명 변경 --- .../HappyAnding.xcodeproj/project.pbxproj | 16 +- .../HappyAnding/Extensions/SCZ+Color.swift | 2 +- .../Views/Components/ExploreCell.swift | 157 +++++++++--------- .../ExpandedRankingView.swift | 16 +- .../ListShortcutView.swift | 57 ------- 5 files changed, 87 insertions(+), 161 deletions(-) delete mode 100644 HappyAnding/HappyAnding/Views/ExploreShortcutViews/ListShortcutView.swift diff --git a/HappyAnding/HappyAnding.xcodeproj/project.pbxproj b/HappyAnding/HappyAnding.xcodeproj/project.pbxproj index a582101a..dbc4ecff 100644 --- a/HappyAnding/HappyAnding.xcodeproj/project.pbxproj +++ b/HappyAnding/HappyAnding.xcodeproj/project.pbxproj @@ -22,7 +22,6 @@ 4D93D0752A61D0D10042CBA8 /* ReadShortcutViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D93D0742A61D0D10042CBA8 /* ReadShortcutViewModel.swift */; }; 4D93D0772A73C9330042CBA8 /* FirebaseMessaging in Frameworks */ = {isa = PBXBuildFile; productRef = 4D93D0762A73C9330042CBA8 /* FirebaseMessaging */; }; 4DAD635E292AB61700ABF8C1 /* UpdateShortcutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DAD635D292AB61700ABF8C1 /* UpdateShortcutView.swift */; }; - 4DF15D732A4ECC7D0014F854 /* ListShortcutViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF15D722A4ECC7D0014F854 /* ListShortcutViewModel.swift */; }; 4DF15D752A4ECE1F0014F854 /* ListCategoryShortcutViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF15D742A4ECE1F0014F854 /* ListCategoryShortcutViewModel.swift */; }; 4DF62DD52A0550ED00A8B377 /* UIScreen+Size.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8795A16F292AB945004B765F /* UIScreen+Size.swift */; }; 87276C382933F6AB00C92F4C /* CustomTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87276C372933F6AB00C92F4C /* CustomTextEditor.swift */; }; @@ -71,7 +70,6 @@ 87E99CC128FFF2B5009B691F /* CategoryModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87E99CC028FFF2B5009B691F /* CategoryModalView.swift */; }; 87E99CC429014572009B691F /* Color+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87E99CC329014572009B691F /* Color+Extension.swift */; }; 87E99CC7290145AD009B691F /* ShortcutCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87E99CC6290145AD009B691F /* ShortcutCell.swift */; }; - 87E99CC9290145B8009B691F /* ListShortcutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87E99CC8290145B8009B691F /* ListShortcutView.swift */; }; 87E99CCB290145C4009B691F /* UserCurationCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87E99CCA290145C4009B691F /* UserCurationCell.swift */; }; 87E99CCD290145CC009B691F /* AdminCurationCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87E99CCC290145CC009B691F /* AdminCurationCell.swift */; }; 87E99CD32901465F009B691F /* ValidationCheckTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87E99CD22901465F009B691F /* ValidationCheckTextField.swift */; }; @@ -160,6 +158,7 @@ F96D45BB29804057000C2441 /* EnvironmentValues+Alerter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F96D45BA29804057000C2441 /* EnvironmentValues+Alerter.swift */; }; F96D45BD29816578000C2441 /* StickyHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = F96D45BC29816578000C2441 /* StickyHeader.swift */; }; F9724BBF292755E400860F8A /* Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9724BBE292755E400860F8A /* Comment.swift */; }; + F975C2102BD59982006CC401 /* ListShortcutViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F975C20F2BD59982006CC401 /* ListShortcutViewModel.swift */; }; F976E82C29368E0D0088BBA1 /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976E82B29368E0D0088BBA1 /* Version.swift */; }; F976E85129395B350088BBA1 /* ShareExtensionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976E85029395B350088BBA1 /* ShareExtensionViewModel.swift */; }; F98017182BBC29A7004F2EA7 /* SCZ+Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = F98017172BBC29A7004F2EA7 /* SCZ+Color.swift */; }; @@ -236,7 +235,6 @@ 4D93D06E2A5956E60042CBA8 /* ShowProfileViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShowProfileViewModel.swift; sourceTree = ""; }; 4D93D0742A61D0D10042CBA8 /* ReadShortcutViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadShortcutViewModel.swift; sourceTree = ""; }; 4DAD635D292AB61700ABF8C1 /* UpdateShortcutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateShortcutView.swift; sourceTree = ""; }; - 4DF15D722A4ECC7D0014F854 /* ListShortcutViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListShortcutViewModel.swift; sourceTree = ""; }; 4DF15D742A4ECE1F0014F854 /* ListCategoryShortcutViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListCategoryShortcutViewModel.swift; sourceTree = ""; }; 87276C372933F6AB00C92F4C /* CustomTextEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTextEditor.swift; sourceTree = ""; }; 872A7D8E2918393B004A05B8 /* PrivacyPolicyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyView.swift; sourceTree = ""; }; @@ -286,7 +284,6 @@ 87E99CC028FFF2B5009B691F /* CategoryModalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CategoryModalView.swift; sourceTree = ""; }; 87E99CC329014572009B691F /* Color+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+Extension.swift"; sourceTree = ""; }; 87E99CC6290145AD009B691F /* ShortcutCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutCell.swift; sourceTree = ""; }; - 87E99CC8290145B8009B691F /* ListShortcutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListShortcutView.swift; sourceTree = ""; }; 87E99CCA290145C4009B691F /* UserCurationCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserCurationCell.swift; sourceTree = ""; }; 87E99CCC290145CC009B691F /* AdminCurationCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdminCurationCell.swift; sourceTree = ""; }; 87E99CD22901465F009B691F /* ValidationCheckTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidationCheckTextField.swift; sourceTree = ""; }; @@ -343,6 +340,7 @@ F96D45BA29804057000C2441 /* EnvironmentValues+Alerter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "EnvironmentValues+Alerter.swift"; sourceTree = ""; }; F96D45BC29816578000C2441 /* StickyHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StickyHeader.swift; sourceTree = ""; }; F9724BBE292755E400860F8A /* Comment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Comment.swift; sourceTree = ""; }; + F975C20F2BD59982006CC401 /* ListShortcutViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListShortcutViewModel.swift; sourceTree = ""; }; F976E82B29368E0D0088BBA1 /* Version.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Version.swift; sourceTree = ""; }; F976E85029395B350088BBA1 /* ShareExtensionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareExtensionViewModel.swift; sourceTree = ""; }; F98017172BBC29A7004F2EA7 /* SCZ+Color.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SCZ+Color.swift"; sourceTree = ""; }; @@ -445,8 +443,8 @@ isa = PBXGroup; children = ( 4D061BB92A475EE800F76835 /* ExploreShortcutViewModel.swift */, - 4DF15D722A4ECC7D0014F854 /* ListShortcutViewModel.swift */, 4DF15D742A4ECE1F0014F854 /* ListCategoryShortcutViewModel.swift */, + F975C20F2BD59982006CC401 /* ListShortcutViewModel.swift */, ); path = ExploreShortcutViewModels; sourceTree = ""; @@ -597,7 +595,6 @@ isa = PBXGroup; children = ( 4D061BB72A47531800F76835 /* ExploreShortcutView.swift */, - 87E99CC8290145B8009B691F /* ListShortcutView.swift */, A0F822B629164D2300AF4448 /* ListCategoryShortcutView.swift */, F98017212BBC3FD8004F2EA7 /* ExpandedRankingView.swift */, ); @@ -1038,7 +1035,6 @@ A38115BA292B447D0043E8B8 /* ShortcutCardCell.swift in Sources */, 8792479B291BDF820040D5C3 /* SearchView.swift in Sources */, A3FF018E291ACFA500384211 /* WithdrawalView.swift in Sources */, - 4DF15D732A4ECC7D0014F854 /* ListShortcutViewModel.swift in Sources */, 4D778A34290A53BA00C15AC4 /* UIApplication+Keyboard.swift in Sources */, F98017242BBC4061004F2EA7 /* ShortcutIcon.swift in Sources */, A3766B232904330300708F83 /* ReadCurationView.swift in Sources */, @@ -1083,6 +1079,7 @@ F91A72C32999160E00CA135A /* Alerter.swift in Sources */, A3D348552BD1233000DE814C /* View+Font.swift in Sources */, 87E99CAD28FFF261009B691F /* ReadShortcutView.swift in Sources */, + F975C2102BD59982006CC401 /* ListShortcutViewModel.swift in Sources */, F930E0002BBD51EC003C2686 /* Seal.swift in Sources */, 4D5889E82AA36A52000C4849 /* AppDelegate.swift in Sources */, A33F74AE2908D8C800B8D0D0 /* CheckBoxShortcutCell.swift in Sources */, @@ -1103,7 +1100,6 @@ 87E99CB928FFF291009B691F /* WriteShortcutView.swift in Sources */, 87E99CCD290145CC009B691F /* AdminCurationCell.swift in Sources */, 8786B2E229A7F93B000B46A1 /* View+UIFont.swift in Sources */, - 87E99CC9290145B8009B691F /* ListShortcutView.swift in Sources */, F92766552A61A032009C4EC2 /* WriteShortcutModalViewModel.swift in Sources */, A3FF01862918552E00384211 /* AboutTeamView.swift in Sources */, 87E99C6E28F94EA6009B691F /* HappyAndingApp.swift in Sources */, @@ -1414,7 +1410,6 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; @@ -1437,7 +1432,6 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; @@ -1459,7 +1453,6 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; @@ -1480,7 +1473,6 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = ""; diff --git a/HappyAnding/HappyAnding/Extensions/SCZ+Color.swift b/HappyAnding/HappyAnding/Extensions/SCZ+Color.swift index 7ba67af5..53a1c536 100644 --- a/HappyAnding/HappyAnding/Extensions/SCZ+Color.swift +++ b/HappyAnding/HappyAnding/Extensions/SCZ+Color.swift @@ -73,7 +73,7 @@ struct SCZColor { "Pink": Pink(), "Purple": Purple(), "LightPurple": Lavendar(), - "Silver": Silver(), + "Gray": Silver(), "Khaki": Khaki(), "Brown": Brown() ] diff --git a/HappyAnding/HappyAnding/Views/Components/ExploreCell.swift b/HappyAnding/HappyAnding/Views/Components/ExploreCell.swift index ea37fd39..90a9c88e 100644 --- a/HappyAnding/HappyAnding/Views/Components/ExploreCell.swift +++ b/HappyAnding/HappyAnding/Views/Components/ExploreCell.swift @@ -15,43 +15,40 @@ struct OrderedCell: View { let shortcut: Shortcuts var body: some View { - NavigationLink { - //ReadShortcutView 연결 - } label: { - VStack(alignment: .leading, spacing: 8) { - if type == .download || type == .popular { - Seal(index: index, type: .exploreCell) - } - Text(shortcut.title) - .foregroundStyle(SCZColor.Basic) - .font(.system(size: 15, weight: .bold)) - .multilineTextAlignment(.leading) - .lineLimit(2) - .blendMode(.plusDarker) - Spacer() - HStack(spacing: 8) { - HStack(spacing: 3) { - Image(systemName: "arrow.down.to.line.circle.fill") - .frame(width: 14) - Text(formatNumber(shortcut.numberOfDownload)) - .font(.system(size: 11, weight: .medium)) - .lineLimit(1) - .frame(maxWidth: .infinity, alignment: .leading) - } - .foregroundStyle(SCZColor.CharcoalGray.opacity24) - .blendMode(.colorBurn) - Image(systemName: shortcut.sfSymbol) - .foregroundStyle(Color.white) - .font(.system(size: 20)) + VStack(alignment: .leading, spacing: 8) { + if type == .download || type == .popular { + Seal(index: index, type: .exploreCell) + } + Text(shortcut.title) + .foregroundStyle(SCZColor.Basic) + .font(.system(size: 15, weight: .bold)) + .multilineTextAlignment(.leading) + .lineLimit(2) + .blendMode(.plusDarker) + Spacer() + HStack(spacing: 8) { + HStack(spacing: 3) { + Image(systemName: "arrow.down.to.line.circle.fill") + .frame(width: 14) + Text(formatNumber(shortcut.numberOfDownload)) + .font(.system(size: 11, weight: .medium)) + .lineLimit(1) + .frame(maxWidth: .infinity, alignment: .leading) } - + .foregroundStyle(SCZColor.CharcoalGray.opacity24) + .blendMode(.colorBurn) + Image(systemName: shortcut.sfSymbol) + .foregroundStyle(Color.white) + .font(.system(size: 20)) } - .padding(12) - .frame(width: 108, height: 144, alignment: .top) - .background( SCZColor.colors[shortcut.color]?.color(for: colorScheme).fillGradient() ?? Color.clear.toGradient()) - .cornerRadius(16) - .roundedBorder(cornerRadius: 16, color: Color.white, isNormalBlend: true, opacity: 0.12) + } + .padding(12) + .frame(width: 108, height: 144, alignment: .top) + .background( SCZColor.colors[shortcut.color]?.color(for: colorScheme).fillGradient() ?? Color.clear.toGradient()) + .cornerRadius(16) + .roundedBorder(cornerRadius: 16, color: Color.white, isNormalBlend: true, opacity: 0.12) + .navigationLinkRouter(data: shortcut) } private func formatNumber(_ number: Int) -> String { @@ -66,35 +63,32 @@ struct UnorderedCell: View{ let shortcut: Shortcuts var body: some View { - NavigationLink { - //ReadShortcutView 연결 - } label: { - VStack(alignment: .leading, spacing: 4) { - HStack { - RoundedRectangle(cornerRadius: 1) - .frame(width: 2, height: 30) - .foregroundStyle(SCZColor.colors[shortcut.color]?.color(for: colorScheme).fillGradient() ?? Color.clear.toGradient()) - Image(systemName: shortcut.sfSymbol) - .foregroundStyle(SCZColor.CharcoalGray.opacity88) - } - Text(shortcut.title) - .foregroundStyle(SCZColor.Basic) - .frame(maxWidth: .infinity, alignment: .leading) + VStack(alignment: .leading, spacing: 4) { + HStack { + RoundedRectangle(cornerRadius: 1) + .frame(width: 2, height: 30) + .foregroundStyle(SCZColor.colors[shortcut.color]?.color(for: colorScheme).fillGradient() ?? Color.clear.toGradient()) + Image(systemName: shortcut.sfSymbol) + .foregroundStyle(SCZColor.CharcoalGray.opacity88) } - .font(.system(size: 15, weight: .bold)) - .padding(12) - .frame(width: 108, height: 144, alignment: .top) - .background( - RoundedRectangle(cornerRadius: 16) - .fill(Color.white) - .overlay( - RoundedRectangle(cornerRadius: 16) - .stroke(SCZColor.Basic.opacity(0.12), lineWidth: 2) - ) - ) - .cornerRadius(16) - .dropShadow() + Text(shortcut.title) + .foregroundStyle(SCZColor.Basic) + .frame(maxWidth: .infinity, alignment: .leading) } + .font(.system(size: 15, weight: .bold)) + .padding(12) + .frame(width: 108, height: 144, alignment: .top) + .background( + RoundedRectangle(cornerRadius: 16) + .fill(Color.white) + .overlay( + RoundedRectangle(cornerRadius: 16) + .stroke(SCZColor.Basic.opacity(0.12), lineWidth: 2) + ) + ) + .cornerRadius(16) + .dropShadow() + .navigationLinkRouter(data: shortcut) } } @@ -103,28 +97,25 @@ struct ExpandedCell: View { let shortcuts: [Shortcuts] var body: some View { - NavigationLink { - ExpandedRankingView(type: type, shortcuts: shortcuts) - } label: { - VStack(alignment: .center, spacing: 4) { - Image(systemName: "rectangle.portrait.on.rectangle.portrait.angled.fill") - Text("더보기") - } - .foregroundStyle(SCZColor.CharcoalGray.opacity64) - .font(.system(size: 15, weight: .semibold)) - .frame(width: 108, height: 144, alignment: .center) - .background( - ZStack { - Color.white.opacity(0.24) - SCZColor.CharcoalGray.opacity08 - } - ) - .cornerRadius(12) - .overlay( - RoundedRectangle(cornerRadius: 12) - .strokeBorder(Color.white.opacity(0.12), lineWidth: 2) - ) - .shadow(color: SCZColor.CharcoalGray.opacity04, radius: 4, x: 0, y: 2) + VStack(alignment: .center, spacing: 4) { + Image(systemName: "rectangle.portrait.on.rectangle.portrait.angled.fill") + Text("더보기") } + .foregroundStyle(SCZColor.CharcoalGray.opacity64) + .font(.system(size: 15, weight: .semibold)) + .frame(width: 108, height: 144, alignment: .center) + .background( + ZStack { + Color.white.opacity(0.24) + SCZColor.CharcoalGray.opacity08 + } + ) + .cornerRadius(12) + .overlay( + RoundedRectangle(cornerRadius: 12) + .strokeBorder(Color.white.opacity(0.12), lineWidth: 2) + ) + .shadow(color: SCZColor.CharcoalGray.opacity04, radius: 4, x: 0, y: 2) + .navigationLinkRouter(data: type) } } diff --git a/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift b/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift index 278007d0..4bb5c9d8 100644 --- a/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift +++ b/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift @@ -1,5 +1,5 @@ // -// ExpandedRankingView.swift +// ListShortcutView.swift // HappyAnding // // Created by JeonJimin on 4/2/24. @@ -7,18 +7,17 @@ import SwiftUI -struct ExpandedRankingView: View { - let type: SectionType - let shortcuts: [Shortcuts] +struct ListShortcutView: View { + @StateObject var viewModel: ListShortcutViewModel var body: some View { ScrollView(.vertical) { VStack(spacing: 5) { - ForEach(0.. some View { - ForEach(shortcuts.indices, id: \.self) { index in - let shortcut = shortcuts[index] - ShortcutCell(shortcut: shortcut, - rankNumber: (viewModel.sectionType == .download) ? index : nil, - navigationParentView: .shortcuts) - .navigationLinkRouter(data: shortcut) - } - } -} From 8edb68759a38d04fdefb2826c7e93984752fdc03 Mon Sep 17 00:00:00 2001 From: jeonjimin Date: Mon, 22 Apr 2024 04:17:36 +0900 Subject: [PATCH 09/10] =?UTF-8?q?[Style]=20ExpandedRankingView=20->=20List?= =?UTF-8?q?ShortcutView=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HappyAnding/HappyAnding.xcodeproj/project.pbxproj | 8 ++++---- .../{ExpandedRankingView.swift => ListShortcutView.swift} | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) rename HappyAnding/HappyAnding/Views/ExploreShortcutViews/{ExpandedRankingView.swift => ListShortcutView.swift} (94%) diff --git a/HappyAnding/HappyAnding.xcodeproj/project.pbxproj b/HappyAnding/HappyAnding.xcodeproj/project.pbxproj index dbc4ecff..eba336d6 100644 --- a/HappyAnding/HappyAnding.xcodeproj/project.pbxproj +++ b/HappyAnding/HappyAnding.xcodeproj/project.pbxproj @@ -165,7 +165,7 @@ F980171A2BBC29D6004F2EA7 /* PromotionSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = F98017192BBC29D6004F2EA7 /* PromotionSection.swift */; }; F980171C2BBC29F7004F2EA7 /* CardSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = F980171B2BBC29F7004F2EA7 /* CardSection.swift */; }; F98017202BBC2A6F004F2EA7 /* ExploreCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F980171F2BBC2A6F004F2EA7 /* ExploreCell.swift */; }; - F98017222BBC3FD8004F2EA7 /* ExpandedRankingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F98017212BBC3FD8004F2EA7 /* ExpandedRankingView.swift */; }; + F98017222BBC3FD8004F2EA7 /* ListShortcutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F98017212BBC3FD8004F2EA7 /* ListShortcutView.swift */; }; F98017242BBC4061004F2EA7 /* ShortcutIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F98017232BBC4061004F2EA7 /* ShortcutIcon.swift */; }; F99569182901DC4D0060AAEF /* UIFont+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F99569172901DC4D0060AAEF /* UIFont+Extension.swift */; }; F9A86DA62A0B54ED00405E12 /* UserNameCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9A86DA52A0B54ED00405E12 /* UserNameCell.swift */; }; @@ -347,7 +347,7 @@ F98017192BBC29D6004F2EA7 /* PromotionSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromotionSection.swift; sourceTree = ""; }; F980171B2BBC29F7004F2EA7 /* CardSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardSection.swift; sourceTree = ""; }; F980171F2BBC2A6F004F2EA7 /* ExploreCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreCell.swift; sourceTree = ""; }; - F98017212BBC3FD8004F2EA7 /* ExpandedRankingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpandedRankingView.swift; sourceTree = ""; }; + F98017212BBC3FD8004F2EA7 /* ListShortcutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListShortcutView.swift; sourceTree = ""; }; F98017232BBC4061004F2EA7 /* ShortcutIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutIcon.swift; sourceTree = ""; }; F99569172901DC4D0060AAEF /* UIFont+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+Extension.swift"; sourceTree = ""; }; F9A86DA52A0B54ED00405E12 /* UserNameCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserNameCell.swift; sourceTree = ""; }; @@ -596,7 +596,7 @@ children = ( 4D061BB72A47531800F76835 /* ExploreShortcutView.swift */, A0F822B629164D2300AF4448 /* ListCategoryShortcutView.swift */, - F98017212BBC3FD8004F2EA7 /* ExpandedRankingView.swift */, + F98017212BBC3FD8004F2EA7 /* ListShortcutView.swift */, ); path = ExploreShortcutViews; sourceTree = ""; @@ -1073,7 +1073,7 @@ A309862F2BBFE6B90004D993 /* View+Shadow.swift in Sources */, 87E99CC7290145AD009B691F /* ShortcutCell.swift in Sources */, 87E99CBB28FFF298009B691F /* IconModalView.swift in Sources */, - F98017222BBC3FD8004F2EA7 /* ExpandedRankingView.swift in Sources */, + F98017222BBC3FD8004F2EA7 /* ListShortcutView.swift in Sources */, 87E99C7028F94EA6009B691F /* ShortcutTabView.swift in Sources */, F99569182901DC4D0060AAEF /* UIFont+Extension.swift in Sources */, F91A72C32999160E00CA135A /* Alerter.swift in Sources */, diff --git a/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift b/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ListShortcutView.swift similarity index 94% rename from HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift rename to HappyAnding/HappyAnding/Views/ExploreShortcutViews/ListShortcutView.swift index 4bb5c9d8..317f4698 100644 --- a/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ExpandedRankingView.swift +++ b/HappyAnding/HappyAnding/Views/ExploreShortcutViews/ListShortcutView.swift @@ -15,7 +15,7 @@ struct ListShortcutView: View { VStack(spacing: 5) { ForEach(0.. Date: Tue, 30 Apr 2024 03:03:09 +0900 Subject: [PATCH 10/10] =?UTF-8?q?[Feat]=20Color(404040)=20->=20SCZColor.Ch?= =?UTF-8?q?arcoalGray=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HappyAnding/Model/SectionType.swift | 45 +------------------ 1 file changed, 2 insertions(+), 43 deletions(-) diff --git a/HappyAnding/HappyAnding/Model/SectionType.swift b/HappyAnding/HappyAnding/Model/SectionType.swift index ab99c034..c4a82443 100644 --- a/HappyAnding/HappyAnding/Model/SectionType.swift +++ b/HappyAnding/HappyAnding/Model/SectionType.swift @@ -66,47 +66,6 @@ enum SectionType { } } - func fetchTitleIcon() -> some View { - switch self { - case .recent: - return Image(systemName: self.icon) - .foregroundStyle( - Color(hexString: "E4C139"), - Color(hexString: "E4C139") - ) - case .download: - return Image(systemName: self.icon) - .foregroundStyle( - Color(hexString: "404040", opacity: 0.48), - Color(hexString: "404040", opacity: 0.48) - ) - case .popular: - return Image(systemName: self.icon) - .foregroundStyle( - SCZColor.SCZBlue.opacity88, - SCZColor.SCZBlue.opacity88 - ) - case .myShortcut: - return Image(systemName: "square.text.square.fill") - .foregroundStyle( - SCZColor.CharcoalGray.opacity64, - Color.white - ) - case .myDownloadShortcut: - return Image(systemName: "arrow.down.square.fill") - .foregroundStyle( - Color.white, - SCZColor.CharcoalGray.opacity24 - ) - case .myLovingShortcut: - return Image(systemName: "heart.fill") - .foregroundStyle( - SCZColor.SCZBlue.opacity88, - SCZColor.SCZBlue.opacity88 - ) - } - } - func fetchTitleImage() -> some View { switch self { case .recent: @@ -128,8 +87,8 @@ enum SectionType { .scaledToFit() .frame(width: 19) .foregroundStyle( - Color(hexString: "404040", opacity: 0.48), - Color(hexString: "404040", opacity: 0.48) + SCZColor.CharcoalGray.opacity48, + SCZColor.CharcoalGray.opacity48 ) .shadow(color: Color.black.opacity(0.16), radius: 8,