From 36e992bfe23b1556380ed5a3d8740486b305faea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EA=B2=BD=EC=88=98?= Date: Wed, 24 Sep 2025 00:04:06 +0900 Subject: [PATCH 1/9] =?UTF-8?q?[week1/mission]=20=EC=BF=BC=EB=A6=AC?= =?UTF-8?q?=EB=AC=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../homepage.sql" | 21 +++++++++++++++++++ .../mission_status.sql" | 20 ++++++++++++++++++ .../mypage.sql" | 8 +++++++ .../review.sql" | 16 ++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 "1\354\243\274\354\260\250\353\257\270\354\205\230/homepage.sql" create mode 100644 "1\354\243\274\354\260\250\353\257\270\354\205\230/mission_status.sql" create mode 100644 "1\354\243\274\354\260\250\353\257\270\354\205\230/mypage.sql" create mode 100644 "1\354\243\274\354\260\250\353\257\270\354\205\230/review.sql" diff --git "a/1\354\243\274\354\260\250\353\257\270\354\205\230/homepage.sql" "b/1\354\243\274\354\260\250\353\257\270\354\205\230/homepage.sql" new file mode 100644 index 0000000..c50ee4b --- /dev/null +++ "b/1\354\243\274\354\260\250\353\257\270\354\205\230/homepage.sql" @@ -0,0 +1,21 @@ +-- 4번 +SELECT + m.title, + m.description, + m.point, + um.is_complete, + um.d_day, + s.store_name, + l.location_name +FROM + User_mission um +JOIN + Mission m ON um.mission_id = m.mission_id +JOIN + Store s ON m.store_id = s.store_id +JOIN + Location l ON s.location_id = l.location_id +WHERE + um.user_id = 1 +ORDER BY + um.d_day ASC; -- 디데이 가까운 순서로 정렬 diff --git "a/1\354\243\274\354\260\250\353\257\270\354\205\230/mission_status.sql" "b/1\354\243\274\354\260\250\353\257\270\354\205\230/mission_status.sql" new file mode 100644 index 0000000..542d388 --- /dev/null +++ "b/1\354\243\274\354\260\250\353\257\270\354\205\230/mission_status.sql" @@ -0,0 +1,20 @@ +-- 3번 +SELECT + m.mission_id, + m.title, + m.description, + m.point, + um.status, + um.started_at, + um.completed_at +FROM + User_missions AS um +INNER JOIN + Missions AS m ON um.mission_id = m.mission_id -- 사용자가 이미 시작했거나 완료한 미션들 조회 +WHERE + um.user_id = 현재_사용자_ID + AND um.status IN ('in_progress', 'completed') -- 진행 중 또는 완료 상태 +ORDER BY + um.updated_at DESC -- 가장 최근에 갱신된 미션부터 정렬 +LIMIT + 10 OFFSET 0; \ No newline at end of file diff --git "a/1\354\243\274\354\260\250\353\257\270\354\205\230/mypage.sql" "b/1\354\243\274\354\260\250\353\257\270\354\205\230/mypage.sql" new file mode 100644 index 0000000..f7c09fd --- /dev/null +++ "b/1\354\243\274\354\260\250\353\257\270\354\205\230/mypage.sql" @@ -0,0 +1,8 @@ +-- 2번 +SELECT u.user_id, + u.email, + u.name, + u.point, + u.phone_num +FROM User AS u +WHERE u.user_id = '1'; \ No newline at end of file diff --git "a/1\354\243\274\354\260\250\353\257\270\354\205\230/review.sql" "b/1\354\243\274\354\260\250\353\257\270\354\205\230/review.sql" new file mode 100644 index 0000000..0a4530c --- /dev/null +++ "b/1\354\243\274\354\260\250\353\257\270\354\205\230/review.sql" @@ -0,0 +1,16 @@ +-- 1번 +-- 가게 리뷰와 유저 정보 조회 +SELECT r.review_id, + r.star, + r.content, + r.created_at, + u.user_id, + u.name, + u.email +FROM Review r +INNER JOIN User u ON r.user_id = u.user_id +WHERE r.store_id = 101; + +-- 리뷰 추가 +INSERT INTO Review (user_id, store_id, star, content, created_at) + VALUES (1, 101, 5, '음 너무 맛있어요', NOW()); \ No newline at end of file From 0df7fb0cc2a38a3054c107b04e81974196b59f56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EA=B2=BD=EC=88=98?= Date: Wed, 24 Sep 2025 00:26:22 +0900 Subject: [PATCH 2/9] =?UTF-8?q?[week0/mission]=20ERD=20=EB=8B=A4=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=EA=B7=B8=EB=9E=A8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ..._\352\263\240\352\262\275\354\210\230.png" | Bin 0 -> 850994 bytes .../hello.vuerd.json" | 2976 +++++++++++++++++ 2 files changed, 2976 insertions(+) create mode 100644 "0\354\243\274\354\260\250\353\257\270\354\205\230/0\354\243\274\354\260\250\353\257\270\354\205\230_\352\263\240\352\262\275\354\210\230.png" create mode 100644 "0\354\243\274\354\260\250\353\257\270\354\205\230/hello.vuerd.json" diff --git "a/0\354\243\274\354\260\250\353\257\270\354\205\230/0\354\243\274\354\260\250\353\257\270\354\205\230_\352\263\240\352\262\275\354\210\230.png" "b/0\354\243\274\354\260\250\353\257\270\354\205\230/0\354\243\274\354\260\250\353\257\270\354\205\230_\352\263\240\352\262\275\354\210\230.png" new file mode 100644 index 0000000000000000000000000000000000000000..6d4c828b3f7fb65f79d1693f130d0bff47921c96 GIT binary patch literal 850994 zcmb4rc|276|9?b@iY`)wb|O@=WG^AfI)f}@6ta`d*oVkcgh~+_V`nU5A3GuY8pdEO z$v$Hr494<1-CN!J`8@9D`>Q`@=FH5QbI$v&y!+4V5E|oQ(VS?K`4+=eEwi zeT**q_R;4u8~{GC@tuzaUTB*=DeP0deG}|PGdFzjgE72x zZ`tyZr39gSzv^lK^RMXc%$zoU(}g*$PX9Lbc|3olXU+_iEr7|m5+9i8m$>@0kY9(6 z#=85pzy*anPtTwCKc8&(X1-jM>{Hb_aXwbeLc(56ZhFno#bv7P(xPbjn9Q_i9MtC1 z^JDI|oo_XBuDJ>qwS@21W#kll<1SNjH0}E=4IQB>j-8K&-SqI)mWcc}cW51s>rXS1@s zn{T_oZ4~;8cJ=dAurt0s^Zf%h<3=t-Fo)&^4J$E=~_^WeZdjy|YJexpDlS+u{v{%TgsMXlbw;#!pX@gV?0>VT<(&gX65=} zrhkAtT!8v3PX1B(IKQA^fk~x@`+HGK@^ojh;bKdQFp_gcH^T3Xs-%AylItX@{>+~N zu1kXkzF@brxI#Ssx~-rLKe%H2Y_u)UZr~coa&aa2376z!(+c|fXavjcf8-o)y97=HgWQbl2l}f613kk+hsoDt-27j!hYt!DfSnkwT;WPxxJAQU20K z9d%~k?YqB_HhWLj1V1RgI!Xd(F4u;HgxG(4O5;sdX&G^!=5A%no|7H8)>Vp`w;_?Z zIPck$Jj5wp0fa~56hi~vUotD$AsTwo>vW#NQ3WwEhJbZZ8c95ZMQU@WxL$mZqg=Z2 zd3m4rd=f4OKGOf_43DUN-;5`kOy4NL9+U=+)HuVT{AYhAiT@0a|6wx<#jINKAdnO? zzq?x}b2$OePVCj1;~aT+=ttPM5{f^H6vK(>ktCk25^ zDsB8`MfmxaAC?-cbb8aZSZFUb$NrgNbu|_%ek&G-!}XQBItsS18DP*$julhwlTVgC zNR%Q8(}ArWTS7xoW$OIwOV*l>4mWWB#b1egQoahUUAKj!)=n#*$%^*BDOGbZ|Il|e zIT@)KBUorBP(Q$Wg-U%c7fcZ38RQ=eq`0O3kaVUeHlWk;MS_4d$ATuwKjI z|IpyiCI6?oVLHArsYytYp2Mkxj(5jp{z`@Mf{cX~SCh&QoGt(AWH2mVoU^z|jQr^Q zD@Qz?tHe-v*x&A$beqOsw$;^6|0XPY*h`{(Xu-X)<9IPX%brX&SHL&a+5XBA?V4%* z<%%bgI;;M~PO#&?*lo|DG9yb>)fc$lUPC9RhM3rb`N4OIV4HWFMRPGkPC+4|HH*Ic z*&jk6lnw(2<>{nH745kN^rD0HJmH!=3DlPf$kZ3Yks#Lfm&S_+A+DEsm#!PcrJ zBTCl@tI|(nLVO+CoSY&t9`JAP5QcS zknQLfb~_p-pgy2KW$tq9hX?=C#ryWrwzsRd2C0eANqJJ{dpsg_y)}wBJrHniX?^$o z@>x+I0~>AewnY`cD--}w76GWL@9g%=-_jJYGwjtq#XMIQnM|dh68M$Hn1Yxl$N|ee z5sRh9najNrYX@?-U6@$r>?BS){>tzFK3Tjo)A^enMfMf~@2(*X2CKd98jVpoM+?HD z@EdX_R#CvZT%4|o{!&=~X^#+<(}&zHBBdfwU7G0@%N6wa5}e! zmQGsY{VV#P0{N9#ak{INzI*oFycl`&7D*iu-gslr0D2F33#e(+BoEus{q9wmD(6OM z()`}9hVPwzCjgu2rA#=rVvwPsp^+;Wky|#Tw`3*kwhf8;J_i9TjWAt5^h+!HN5KAg zk+sP#|3ZQ3Z>n;Jjg~kV-N`ZNJVh?;Po1zVa4DRhWAp5(l<*5f4pTSsU4QdZx&i>b z4g?%M9vl3_TVeXX6T(-9+4YQ#?b_Q7_TusYtN>u$8BBS*_g_fusR9>0jKdv3EOyv| z>L*y(tj^wEK&qSTMNq}pqhxX6uz`OV;6HuPS4d9*|4=MN$GZArEY=Q`&{tOP2kYkM z>mN{MJ{%kH<09-X(K5mXvb4c(*B4K!rG;eW=UdXrIG1MO`uglHvCZ*)S7p{sg}v(d zJr#Zdf&6=^O14Pxo-GdDd|8XE8slu8^Ps zC+I|Jz-PcJ7$T9VTjm5WMm+NQfn(-r157OkpCO}5PA2DDYG!7ozg!sc$j-~ln`bi9 z_}>bZDh2#k!~1E!%#VHI%bBb;;BX>19W>TaRwiYXpWI?&V`Fw7$0O?jbEREp{vOi% z&b$J0UvIC~+FBV+a>IcmJcVb6RCArVpH}?O7~7RX$Kc|EuB&hO2@Hqz;|mMhB87|| z>FS1<@rku%T!fE3{9ZKs3K^Y_YCWJJgG;4z?-rjVwoGdoqPHC&omcrPfIMrB_#(1NfqcB8R4-KSASI8cAsfE zV<3CXpNEDfxT~X-a|_a+`&wgXnCYd%e^}Umg(KKGAU_Y!nC1)q@E`?!wmWH{kq3gT zis^lLylXwgH1>PJ9KWA#b&rM7Ra{KWz|8C%L|XdGiQNAr+TvwtIT1I{NnSnE^_q6; z@DzD7Y>2M!FH=;ArL(f=`VYdQA52?nJQ5rtdaQ+Czz}ltLNQve{mGBhg)q+0-s?^% z$jiHQ3kiqAuga9WsB+8xz}7z!h?I%K0}W)|Y(vGno|Z-_pG-7*J$5g|Ob!>kR)WPg zkQ(acbQHyjjVUQ9%aXD7CZ+G!+zQQ`{{Xx@7pQDoC-XnZWARt2SNgNpv(X)pPP~(& zjeu9+Dg-6*9r{XT?%TTy?>krL@;wy%4|)D2-YzA2wi!DIhkQG64w{yGQ&4G_J{-<) zair2LZlYnYtZb{qS91~X`KBvP*`aAV4Y23{?Qq zr&ij!9!iMY$KmMwZeyJ6ZD7@986Tw_(q=Ns>s@|&@DKI<+jS|Z9OA!{ruE3(-GEN4 zh&x;Ht*poDQW&y`C;y&Gmrjx>|Kl_bB%@atr`TXQA~msYsyjsuFWrlV+j zm*}IH>apVOm}>8b{t^-DmtlABso+0FXv)>E_nR?$&Zcn82XZ+)kDo?RhB<1w&V@^L z9~ZuFYGGl~Y=oy$T?qD;5f|0-0gOwX;FGuJ_1<_88;L_oOJglYd*`nOVxUoxfi{cD zb$KLmUw=Pa&DgD(5`MXZq`?a&Dt{VJeA2gQ@m7ZPH}Ybj8MeZWC7rL z_X`wAVFFuwK@+y^i(lD)M6$mO(6?PEmonl>P?6u#UMw-Na~(w#yH00?Iech#;lJFU z1BFr-T&qbBIud8nH`C;IF4e|?(liQco*gt8?A&~_lu%`>!`B65l;DsxNL@yn{qolg zNr}0hv|{GcVK(lQT%4R|U!`weZ;vMX3N5{wp)Pj5u&{9#Di1u)5w+pTr4OTIWoH}Z zE!_XOvS%gV(kgiNe7e0hqP(okL&>r`lI${J2A2csy9e>}**Q7TV|Mq3-YhH< z?4B4Hpi{E=c_hRnj7FkBMo`-wDkU88&RPnYcagc-M%G&XK=fI8y;5*R8h^y0#z*qU z4Kd!r>mssx6kKjkY(#X1`HO{-D8E?fxM z38i1+1wGpaW#Nw78!K4_Rd({b z%i*$z@1Jmyt##uG22ZyE5t+eSU|+_o_}YtUsNKztxYo&YlF^5IsveIep12Dk^ZVb| z(P1E6I-SuKck9`^cd}*-Zk4GEABu{^^t82S$@sy9pj~QkS3Fj|brzQyrK>9x_Bf#y z$rx($+%4cp(LH(Qu1s!VQnaU_3qbV}1YC|c1XHfIT>YTwz>brLFfZ}y^ zvK3*iY_7GH38~F)BL+(AFg_(pe?w5_G#U{)EyFf}Zgumqw$6Aw)E15m5)^CJg{r#U zY1LoKAE<5-6!?0g*X@L!?_Kr5;{jr8JOMW{Gcvwz#=U#DY}hxNhWA*XJJ~5XGcZ9& z+-FHAzayGF{{EiSdh;?qzsO-eb6s)qv)s()NTsJyk%&r;m>9>c)aGj&VSfe`1rgDR$) z5AGg$mn|I1II;8Pp#00lDB~3-(0kCCiecBi=SUAC8jI80|FEif)SKWnMRoTEImN(l(*blcRaX(W%rcK8!~Ylb1&bV zGCC`hp^<>J)^XE*&;)TAs6TM@lsSUB9{OtTUAYe}$4$wGu33 zT-byi@v!BR^C}5l%1Mj!9$X)>&0&CLFwFqA%G~ZiU99%;7v~T%IYo-w9<=@J1R`ZG zYs3*83PM9qie4;pwAq#NS+Isi`lT{@u9Gzq4Fj?IJ>Q}u@pwk(r=)N>8(r@#_5-q$ z6A@-7Ek@=++!hwA{bu3y>)m;xGaJm`0Ez4 z3QubNm#>~Lm%41juypL4OD@E9SjaDeSc0C$L3HY3c-_9xwR+5G44=mZke{Cm%T*Jp z>{axEA8P_1>~I=yP%&No#H#u7>Da90hXib zdC*Z8QC&JGkvET=-Dn0qxD#N5^97IHr?;oBksPJxa-R)5cgpg_Kv*Dx?19`jo|wbL zaB}>GQZ~IEE~Ax{!8XcB$kX&&k&KoC*U<~ekjzNKQ8|QN|2l!tq=n&n(?Ol6z2cHC3xAA_IVUZO0qKLvqst_d9N;B=lBq zwmT~GFYQtni$%P~m|WVfsu18jwDaS>^^RWS)epS`)QUs~*NaDD9;P8(VvtW-nq59C zaSWVYyyN~R=;)fEWvqZei~T5q@}ev8)|-`X?~ESwJ@&1)zO+c`xhrSO^yD_aC?4|z zH|iLuOD-u809P=>2Vc9u^LB2MrdfH>&!c=8J`Gu)E9g|hx7rsE^zm#`&0MJSt^*O8 zvf~e0=^vzjNewjCFVXKQ?@1#FNsQVt%Was_U1Kdi$m8}AQ}LD26DJL~sbqX9@D%+R zz(ETq6FQnB_*AZJER-*LA>stFeu5-k2>SHNiU8}$p3}qV1IlARd4p!Jo-d64Zfc5jamqBZ6 z`*hP(>G!v`wpJ88LT$Kre4xxzNB62aL8n?l2epJizW3lkUiCpV`j#C9ox7>7-Iv2e z0(RN1>*j)?&kh`UnNV+mNf@x~_;3t)+p%Q#0HIwP#^chjQdw>>dcR6a1}GMkgPQcA z2%$g^{o)6m5-MnKS0S-%YpN>h3dBBXX8ft)IC*>Q^6RUSj!ILuuJ zvBT0v#F*!NnRvQuq(ad-l2TrS3heyZ1K@%gKg-ZZAvE*tTswKq9o zfYOf$cN^N0=gfyFCQ5h)wNV~*teRbEiu7n~pIxltA|x)v5?jz3vBa-v;e`EO@8R^e zP_JbrsE_((op5$y){;9LgTu;EB=JKAKCNQ&(P7@4o%9R=n4T{G`@eWWU(9)h#tsau zuwU;#!Qjs_?MHF)XZ>9E{HfpDkmEvO4{}7x=X98@j}Mei$8phA^=MFyVWHsnxmQ+Q zK>lR5?Uy-IsVBmW>JkLwDU@pYhoX<#3VSr=>r8xhj+BqoMWuaMImxx4_)HLn{xXWw zhjRPYp>|jK)@RJZ2OWJpOI<13$<>%M6(qzCWALN1Z=;*p4EA>S+bw;uPfVIDv<8_m zxCV$8RV15DZY;B&y_0d~3pv;E4}J;Cu(|F!B%G5;KbPqQSO-Jo~c6Xo>~P$ z=DeQUlZKbG;yxqWGs#kqzkIxcx82ey!IqSK%J3?I(aVo-m=`QWu1sF1vdo2eF_0T( z644GHlv<;VCOa()LU~R>riQPQ_iiO@W*ip@8%Lk%5-arRiz@Fbj}v%{MzNp9y@ip$ zQSBoagp6qg_IFVen`J`q`-nAjb3tXf3MN5E=xIowC4%-n{5nKFvv23i?Dy8$O|86z(;OU)=O zV%^_!yM6KBh`BQM@q}I_7AsulYg6K?K3ka6xIfNA4k;Y`IQ|xr(ORHCeY1C1XIK_@ z5=^$yxu2__W3qgoY$fSLucdZ3c)YY@g_r(e5p+;)KFT|?$dXszjnr>mk%TTYZ&AFd zL4Us}d~)OvsPXK{D!H(b&de*Rsn?*G_3ErFnX(uG$qaWv&-KHteMcFcQ)P!TKRUX* zmx^sx+<-=o=#R;ZtaMqXxDtEU``m*1ZZ#Ely(k)#cG5syJ$Ea{5EGdapDR_WCt`HG zQL!#ha0or$=ULRr=pVV&X?XBE83IuS_(**zLp#A=VHP2`6@2f}&#?)Eqnhw0p6%;H z&YIL3W^b!=%5$b76-$2V(bq22dT~C1(A=e$VLxrRzVD&4JvrDkp-eMFbSk@eYC$3v@(H$_qB3ACHwd9dt`;x$6nQ$FsR;VI-rp4U|m}N6oA>N~w)& zW?6iM6zsng0w5Wjbi{i2yt*IS$i7I||0;=SQ>kVRhb{E7P>9~>r)lfiny8V!Vkj^3 zeLbqPn78reI8AEa=jCR>^D#E-`?6|tS`(jHK1>czqm3n&p+BYug7q0di)ixcM=ydD z*J5rZGrqGyTm#=1pY26=hDv#55K@QMHhA|oR4yyF>hoy|88zzoYSAl;9WEb9!ypY) zBeON)W7v-4%ABh-0&cc$SH=|ghi6{QF0QF7z4twJ9H((mow=;yH~%*`^}n~`xei@6 zsoO%(Dk!nmlDzM98{XxIy+tu8=%z-vK zSC+peieWFZy353C6(#*9sl|LW` z3&`MULY)57LK~-d2h~PbS{#m%nW8fxB2^_{t!88m!~9UK6^hB& zg2KYfSOY?KPKRW(MHIvZn`hS8AjiyIRvDz%NcgP6%dSB*-)!J=yuGyi$z3~<0*|dCOk$7W-&8}_Q`Pepfsg8LbUtM*b){jxhCLONs zk#!~hRtn=K0hx3WdRA!y7zDD_lvy@Etm5+xb;yZtx=0wlILH;{&OrVXjg;@M6C6EX zIU8}^ut`3`d0ny$V&lX15V19zHdO869^Vu6pi`_IdC<|5|2&CXEJREO(Gf*pA@f(D zDdHYWx?}nVXy;VFcuo%pX<>Fz>kBA?_B|2vO);OZ;yiKIAfzmNlh@=seY=CqB%a3~ zXHc82Dfa+_c} z!8PRo2KKV@EGiY)tkL=wFX>%y=`t~ft@@#1hPj62}xcshv5OeJOqR(D=d$cHD zZJ=5tcr$k)XRwZ0-VP{q<3tG3N**d2^fI=xS!j(9J!zW7QBd!COyxQ!Zxur4a4crw ztzw{^Wv49V!@*m8joz2$C?EGT-)7KW++3=ozdAutml!_PsxPTa(?v6Kb>$heT<$c= zr{=irjN{@6dh%VQ$DQuF%)!VGacgQ}d(p@+IGo+;gS0EAavY;6yH?0+6mVbd?1{~> zAo97sbWE&N$JXW=9_re7vbD36lr)~QPI;$q0=as*GAzYrn{mXu#Pk7+)yYc4{WWvM zicT8%NT-}d%iH&91__$XrZ(jh755--nGS;@aTYxzO*4J+&7mWIh z#;s{hdyce&&ZzHc)h`h}!lk?}4&UV3-iY*6>7r-i7(BbzO}^GuX5(d0#Iu4NSKcy6 zF!{#onyRsA#d}Y_rF1lGZWNa$B*?`HlTBqnjZDdbq5XN2uZbH%51IaM>0tS3hCfR` z{-VI!VqwBo4W|3iMWCS@Ja@&ee`yAr$fWW;2LHq#T$&1NM({!KN5#7Pf>(;G#)`oL zm4io&Mkljf9+2F0ZXUPkvQ;)5zG{PCZqC^~k>eg3yT=Zn1K)=gfr3q^Z6I!c0Gw}y zLhI=?9@3-d6E}8{otxEbTNG^x4J#s{7#h_-4a?jszOx&uxt^^y_sLNFO+r83uTJg1 z4DjFI=8n!M{|W*Jl<2$m$DPSOlKuDAzVAB21W0gN_|m1kmp<^uOT*l*!HECe ziTMva|HCAF7cRZh;E1j&Bi+s|DCaR)XZm;i|6~9E`qtNh|5Y=8{{UhY3In+XxF)+C7M<; zTDMrRC_45j#(IaV$})3-L;hFVF8?^-KH6BY0z|r;bi1)*!NYt&gsW0Nu)_*y_Njol)1C-rKuQ zce`+5F<~cBYZ#Z_ev|)?BnE{)>JDLzuKs8>f8z#O?%cA!aNz>bUp6f@?g$RPrl+UJ zW26ss%7L!)@`t!CTaWN5d<6uNk&_d?Gy6HIQJIO-tnKjR?#l@@s(kn@1z||Q2QDlP zMrPy1A9qhnMz7wm{6B2nS4hE>73$MZOE*yOz#sphUtfaFvqQxakKfX`w0I#oCoE2U zyXB$EA`R)UPR=*?>`$a4l1N#lH*AZF;ChCJQ@)?xFh~kR%C7G=LUJswDamPq{BPg} zwB!X@2DmTM>-NkR;&AMz#9=6)36ND$Q9F^=*cvHBp5&-l*~IYr4{M>?*LJb6FW@e$ z#d{EngspINp5ITp`LDs?Z|C+6JqOGSk4xsW{gkzD`}ug5hrn>0#s}-ntgPoVP=en;NC33ZuPcmq7*EJjd ziDtwTKN6)}96r^%&LjdY6@GcazoluF^E8kVpF76**aY@j$z^@O(r9mYCy|gWbuS~y z@*09)Cf(r?r zG(^~w(M&Uz@>GNJufd~)8`ECWesKY3<|IsC`W0nAK3Clri5P0iG~TPvejvGy^}@g& zW^6Jl^@8a|s&MgOysMlsMUK^75iHM{n6Ev^BoVognzu`Q61>vXlLxIq6O#Fz4>?` zpV)ukNOrcpwZXnFl84D?5yV3_I?nCuixa{-0JRi8kE;^Q&4Am=*%w#YmKX63*a=6b zY-VKIel4wKS+CD)H_RC!Z;Wex>h#&8j+&JkqSmjvL&A$>x4OrZwO-q0_NBqCkXzl! zW5W{Wcf-uS##>y_@c3W{UGaKyIRcZN7izMqo^owL`w!?P-UgFJ+tr2a07}}nXUJs6 zojLNw);?E+b+=2C@Qp{;M1-<)-+a{p+VbIRpS+Zm^0p5wvKbi<)x{KS-Vch3+i?O0 z)MeXZ9k*73cSxHZD%qQ@Qf0!QP-vxV^i2 zM|1L42C*fhn0R14xhe}E!RdOSfPodEuc)(mQT=N&3V!4!YSP?C!W;z)jnB$@vRUMN&n
    zUm6 zpfcoHIyyU)bTp5rIxgOpQLswfd=j!;DMYCZk?qUV@YY`~wQZfw5#&h>Ep2ySOZ_~` z54lSgK{#%{%TmiJ+P)j7Ddm?lOO2UQi*qc!C+i@4fzZ9RDVFW1-nmE8CHARJSpE!# zG;~tYPc^~_QnPgFzX90HtXl9Yx9;|h%5vntpM zSXZ|oF+Djf-b3!vVO;?FckXPhg-2Km`PfGUKGPpVyDpCGR$hwCv6#)%SS^xcZv~nJ zX58Pxd7?@Zs>|YG|0W*lGc33A8iA;Su`#TcVO45yUmpf=Fx4m`du<6|me1p5WrOz} z5@u4qSVgSO6GRyKJ+?e1a$*KYt9c0w z9egPIK8jJyBYa(zfR&5Dp3Bqj*J;fHLj4-?gpD-#ZI7#adjDHkZZCCWN-fv8fOm9~ zUbQ`~Qxll_$ik*J98pV>?CBk1A!O_bv|8~pj%mzCT||Tx@-lGisam+CMs zc7-?K637B21M^2*FAqV&o|NuvF^3QAgjdYtDr-zw1&yjCxT+oB5&biqGvd-dzp0{B zE)D?08`Gnmp&n+cs>=sdGhAH90ysSO`e;dE<|(Q2xhe3CbjT=)UJ$SvdcDx4FZ+5Z0OaMkWwPO+E!GhU7?rc~6M?79Z51y6bQP4X3)jJIFx8ZG zr&kjZ8Jc^OB0hP*&;}oIMJTF%{FZazc({BA(9bfX43YIcHz%W>DWQ;?bA4diZe;@Bx3y3UXA`sG-#&^yRCl%U z6gU1lZ20RIi4U{3WAC2V7X_NY3&M`v#-H2W=~A5Ex#2vA=0jbt>}$=raA^i@`^Ps^Og&i*otgv-3_BN9O%msss*kKiEx10r-a)4z$Z4mbwy&SX6kz=oS7 zw?cQ{96532=UmuYnc*5`xdw|zrTTs>R+ z9w0gf?2C5>7RpE+lE=U|A2xEU3`$fjL!DHx8VnpFCTygbYm?diD)X5p)j<1x4#>1C z)4iVyI=&4XNfXnP&aDd6ofLgEnB%=8D8kmO+~vGFgPil(qXeyYtBEK*u-n_Ag!{d` z6)DgpyET)vkmp^aanlAV1q6HM+-J-@TpC;M>vIF^gSHW7d%A~PsPm5nu6-K>xLO^S zRQq0}ay7p_R$3zXsXEVlu^YUYZK&*hrDB!dCLupQ||jRLe|rG<+3_PF-*Wy3pJ z)Y&u?mRWwgE8N}SRMZ*8znOwq6QMWLnIMO4{~a9_>rP z0z(m>rWMGifZhZ{h1})@t5Z;!U-^IY6n`Nqm@>_x%A*mcu9%FdL7xv!??buYtS9ta z#^`!JuYVRK+v0iOZ09W3P+D^pd0@wGm#b&4osyX?H7TJ>J&HaTDP?NkqFSVa`wA=Y z4Cg6R9a13-JXMwO)_*IJF711TVy#;ip6I*xx{7(bH@lwwp0i z>V9@Y(~gVd6AhjgV@H7oeL7zAgBzk(yr}A1>oD&QPMJO5UKTMWnsytxHfWm@vdD+> z%EwO?9GmE+>N@Hppy6vN4GcMz>oJv^Q(SqP9!Tqyr$qd>el`As{6iHUcd(3}tZ^e0 z&ofa(?vN%l^P$*KvG9Y^Oh?YiEx*w0Z+e}SScL%M)a?Sg(Dc;!7-cc(^%Ape6;);` z8RZyGI_zOm?aVDZOM#%c#Jsc$SOP-v;IiPN5yj3L35f#N|^uRn+ykub6 zh`8fO#fFS^2yhElLfCL-dw~mtc@6{Ikn0(dkpNB_orhjgXlExzQs8t z4_~WUV_4BVme6tZ#zYr`f=2X8B*!HILNdmF0GL@Z8x}a6UXq+}LvCkQQ$^BwW9gW7 zQ@2-=N_g;>iEm?73}(cmwgK0v)Gk>8&UDbk5eZ{Q#UO`8SFG^r(a1G%n_ep_5NoX& zc}zU#i}H3D4T#g1KqD_}{b}C=#sFvQVEfXGob}MS*^pe4I=|_&w@A=_-zA>$KB)`6 za9DQwgQE(A9!-lZWvE9eu;JPiKY@7l({+S`l}H9du&oyR<32PJ|5=_ z-$}-~ebjc1%6ytIF8*ZVPWjHdbVbON--#Bh56qgF@`st3QSQF{yk}aU9hK>d^W5EJ z(Ci}})f?@s;+X*hMgNMlLFM~GKqQ0Wgu_^*%V6_?lFT8`x5rhU>Z6dnh0XY0$9 zOK+vUxBdBN_-_vsJEBU|T%2@uFH0~6dEZkG=VW&XmtS!0*pk{>o44hqbXi4nq`@g! zf&Tbu7494Ca-A!qZ-4w30A_{Ks!vFr7Sk;+T`0p%YtnQE>_%tjh`>y6E*D%M$KdLx zRg~~kQ(@egRNUCO%0DpG-|UPY!^R2mzB-$^SSa=Ve3cqBvu!qTTB?=0PrN+^F^8Tu z!9L|pgYQy`0KF0;3 z1EWGl;QJNMuYoXiP_}k!GtSB zjEjthyL{Tk@G&;C&>f<_S7|B3r`a7tRAi3UgD3OxYfp+lp)Al+#kF}EuSrtPN*s`h z#!=h;yQA3mtDfB+HapRMo@}>zr_~@2*_VK*cyRu;3eSu2?AP_HJOO`*T|i05;y-gs z1LaQJOhL-d#+Ut$N5}AI`^0C-=jHA9zSKPX>e+qyA>72)NN**E)@BQN$1{mJ8+t|~ zbm85-6HP=&nE(lZm>=T5GP4%I#Nl4D z0y>uExze0=_I-No$P2zWE5Hx2NO+(A+%~y0ErFh)=}8bc%Qg18S7YeLxcEc%o6q_ zXCagk-mzM)P`y1_@b$K4r*#u2JzWuI*mYDWm@(qw&gY=?P55DYjK+t?jU{=`J_xC& zip?+aLLO7lsVC2aB&u0m=}p`x+1EG5!&O-HkawAv_DuppKdJZ!x+`Jq3>)V=QYB?q z4699^6^0H!NMEwBwoVDs&3uT$TlB8L*`J1O^fy-2S@bPt#C@$9bd_a`&OgTEJq!di zyZ+qyI>g%`8Fu0aSx>AixlMF=DEC2KWzuBL`fCIw)FBFY_0$VSWowa+>%cgltcCMb zTZk!<$8*jG;Xx?~;_;T0GS4te8`3@T*-7V&8okP}1r>mD)ZylwdMO~GLkVV-VKbDj z)rZZIxm>Lpo27XBtbuUn1lH*@a_8?3nxM8*IZi=CAz(>(XQfLq5^*OsO-3s-!kOKs zP|iL`YX8g)_!(|sqWPeQYvDBXKAYkNZjYHWsrzz+A9DVoLVuq9!PkGbdF`TBL0653^p*{qj!pttqM|{jVKWk^|U+mN=E zj@WJ7cHmKNP6?k(wb;NTcq&Y>x;EGnxn_~mE_Y1AXECpF!DPQ(Fy|})p12b3;Qqj0 zw>APpb?3E^in^BIb}}$gmB(S?CP$3V@FCs^I9qfX*CckTm^jJxhZUqp{6a#h`T2}K zvMv~Wy97i?jHw8GhF{i(K;TX|=^|(VLeM|%dX5ZSw1S5ZDkaWXXwyv%4q@WHkJl4b z=Ts>i!7OYSyaZG9o&_fD#MJC(mYGQkmE}T-;L>7aV;@rB$dt*q{_TcxX^rY~)l(2` zmQ)qgZ7kqe6;j6i$#t_XONGX}C^c@0Z28SB2OA%5&um4Kev=z8=&9YQFA1t9RC=r} zAB~=>rpj)+x+=h0!3Ckmc3tD4)!yDhXnyagsg4~}cfJuXV+n0m#vOIlG*NGe`Cdun z(ke)^ep(~+TA)KUBFpk~BJ)ns)&@1f_UKk@!ef#{`8*GvdnEQoYmN_F?Sz@@aJ|af zpcF=_4N3L(2X5yToUhwtLX;})x>^{&+|n}wStcomh1sKIHgW9d-p{(0=b@|C#%8-v zlUWE18XcCq2Kdp=;;75Abmo^LzY)iZW#w&T&zgujqlMtd>`_v8H{)L0^#NO;Py>2x z@|afh9nN@6zM|+pe(E|`m z&MT%*rK>r8TG!mcQQ-EZYFzo|8gGD=*u;*fsO52GJ@V&%Sg01>9D7oxKkx`I&ym~5 zg^W*-5DTT#GVf!rg$|~s@)|bW@=>RnFgQGVC=EMuhxv;MNjyGj zU8WJe9d}`Lt-Q9-ovypp@uC4JZK?NS$$&ZBQ#sceE+7;1BMhJJvY8;##!=U$DevNZxf?Se!T9Lm+%SlO=hMy;#X3nTDSjiJ(~8H1e>Rx6`>3$89} zy84Z(iIFL1qom|6D%B;&F9TrbD)uJHZD$QX546`SMwhp<4qjw_`9KH!wktVe=-YU+ zxU0hh$pmueo}*{){v^hX^%*C}%lfb&#Kjdk|=R|L;thzvpLft2!s6h@{U!AFGmIZJK|&s>m!z(8wN;Y+{x>Zx4~yV z7qwp#zGNM|DDYJHe(sfEn*46dJ2e`WmKf&H*UpXf-e;@&!=c?ZVwcXh%%b_H*fc8E z+=94+REo9PnR+Wht|J{3+Bd;>1nyXI3nXXcX87H1y|kHC>=oAd4|ezOz7@>S7jUEg zs+@P0oI->N32h30zEqBn*w(&z#RJR*+UI20^eoq3SFU5b6X{1rMa>Az!wqrX@C1Cz zik>l1kwt`=nq|$ao73BLqfFH(TsIs%Pfkw?TYWsO=v3#C9b^wK0JYzTFjfQnf{KL7 z@NG+ssED?TA?gQ7D1UCn_CQfNBML2V|ur@XT#nee!dq*xD z*)0l?GU_b9u$?t}1aZ`yn(c^a#gs1?QtL&$dCr*P>fthd*Jn=@t=n-Qr~*pI`L`gA zyhUIF-}`dssxp&v;+Y`taJH46~G`cU`R7p=JPg)lY2WDvev|7lzxo{Jqx>`@f7~D$7=s}bzNS9?S`g-fwjMsg|x@2 zhImcgOGYfwVRdq73Ow^jUkP#sv@T&BD zh4U#DAr(UA0iHo|dQB)|@?D9B?!uxzC^GTh#lGxUX>tcSPcE!WFFdz>P1tzuB)#b} zhz0UPn{eT=bxY||8dpOv-m9<~Shr3ut zfBnQy@*DVHBUoa}rAsd8D+$8y%a~Rw$W^?2fj+xr`;mIGV5?@CvlFFIqYZX&^xLF| zB9@nd`M`NxK!RvKJVqu}zxs0S+zaRPD zc1J)C{Wvv3I$M+PO$?iPuh&+$Czt_z^NGS9&DFOZz}OsnfFwH=wvxtrd;Zz2Xo6iq z_V5^A1Te=Jgc#?t1c;=0ib!mBZQ#NQAxebqz@^o6`*$eX$U$-Tjb3{l68@Ephq^1f zfFv5=V}gkt=xMl085UZ9K&ZSDw8E1Oa&;noG9h)jq<>7i_3GlVSSG8REb4<7=|npv z*CG!E=I|>XJi2HzYk5;w?YNTUbyVlp)%%?FZvq3$`XAZ5uB6!On-(usKHf?md%9Y- z4pJ6qvKqC>uGO%Is1F^Ay(Ijk9LC1dB6}ipwil$ie5>!pa!O;q?hH796V9f4MwuEf z!p>W0H#`|lfm`$Z`~PD|6)B9^T5TD&Cokw<3b&0pDC2CR($gd*yOPo;0kJchK0esF zJI-Iey*-}gm=pw$+?=_iZo=B?E}L80)&rHh?S_Gcwrc354Q3Lvi5Pd_pI7RwWXqhO zG~%Hq$y{sl%P+zkkId=ns(o!(%`X!pLNfk6lddyNr1oLW@`WGB9;~ z&L&uXdu-2Ry3(h>(T7UVUhHN0%4x5fq(d{BCsoK-B*E!{A;KuGFUntHZ3iewiU6i}$cN*a zxYO6Q8z%{+$IxG^dE`GL+F0&y{7a4)7W z?@}Bd&Tdag2;$+a4sxs%yHGZf0m8^RKIyu$oUtQu-7Ulv)oZUE%Dw9PC6MI!-1b`8 z@ulT(UREl3sV=-9IQ=~SAn`04a9avV=Cmh-Zl@Ow67v>oC>h@G#d%V_8oD*Cmu8Z! z;=>9Azw}XUM4*^Y3$Gw7y_%iTiMaI?3n8Szr^)TR#dCK($J_C;R)&s_8t%gm6|;dQ zaY^{r?J}K|y`!#J)iWmZN#32V1OR4jS*jdS>}}uBt`1AV+Rkc`y7UlL;wYqLo^s~KA-SiCR z4*S$aO>dzpOhG0){i6G#)hG`j{gg zY%euyNJx(G%vM>%Vva?&|}iFUu>dH|j+i4y9C~yjE1T(|eFfgO14OHmD+d z!|IW=#^%n!b@Nd;U*Qx^{Qpt*)nQS!Yrjg!P%=YzhqQ=DcZo>1q<~V=-Jon_I<_q_Yszu(i7YE{d z>h2nSX_)Hq7hAHo+V+;;0+Zad-YgA&mU|4`XfiYCZgih|y}Nlk-TA zSQuiee4sK1yO=_3u3B;alJ0pKE|L-toXGR!J(&>-XQd|XxK35ZKFXh!SStIxbMOZ{G*>#pPFezKi=<838+x_`&_ z%iCYfI(b%AXof|ueo_!w`pNVdnQ4Uc?1;%C6)KFvCCowLVG{Nf_rojdUrvCZRIN#x zD}4Z!Mrl)JrT4Gw8?=GN^B&oB$bHMsl{AetP%Sz;;TB7`y&v3Ovi8Begw~r^X58L? zrxK_3b4hm&{8KUUhAMLyH!KRz{G9tH(3Za^)j*y-;^68!41;D_AUZz4Uv>TT-#sj# zs=t8i*BIO09Y#_JQz3*_jvuK`dAB-*i%ug}Tj`=JR$<*QM8(nHKNPn6{kmu%7T>;- zppx`gauk$~@v6%<%4aXDE}>1^V|k47_2R~J(eOC~L@L3Vn-}iP!=blq~^S-lN}Afjr0(iF5Lk3cS=pBuSrU&8(BJ*(CnalVbJEtW%InDC%Is zY<%^s6gUStXBppc@eV%z;d}qY)Y>_MK}mL+)j|mZYa+6tjF)G5q-gBS1w`KZ_k2S! z3IdQ$^TiXGun>@f8N#dO<#^W?FZw;GWX;?C$zNzn8TP2#5>gDWnOXl=L$CH_4#Bpo=Qk^I_9X3 zDljzjwX0OT`m7>1c`d4|UR!L>6qV!V=DmnRGv_&$n6K^9R->`h&<2@NBwR zMdiH02wbW{?vRgndSUF~hl9YU92_lHSz!$gZiyAi%(tbox+-dIiX6EL=`ELlw6BNB z!EiA@GVo26oE|uF3mNOEwxQ`o*05g)Gv5vL?0GU%d;v^ZQv7EZ4>ATt(5H>2`ovqu zysDz`o00XK079qctejpZ!C$Voh5XtwqhbRt3!J$rniW{Bdo^5D=FB?>WW1psnw!`Z zc7hATdme*tOll)*jr4H1j@;BsY*uF*6AIa>FfRmRc|8~YV>T|A7{o3TPCQf3IDd_WHnS5&FVMDR=6G6cM zCv~1}padWMUGa<0qjWpjB#&cEYpp_!#Ux_7+wKnNuwXNvFMYB2qUfQ>Drr`4QkCLD z-l?b&zh16Vc-E`A7RvaWd-BJHCfDalQ!d(5ppJ}NBk6yjDy*KW?+%D8g|Wpay#Ii0mi)XzvlNrXjwM-Bdp$ZwGAHx8QJZewlnOSAK;A;3(~ ziOyREH*s<)$!vTv!gIpnmPF9|p@|Sv{%ofTHmQy_&3(%i_vvtDI^pgp|I+^Q%TWlg zO$J3a+9NMT+2quOE4cRf$5vC2Bz5V-G*E(lr{AM@ZXp>o$Mwes<9+IvIe zW^pwa59=ar{hm2Z=ON?b^h0Y)g}1y{G54jN7WrRz+sP6l$mL=ug`;eZ`(r#OyZ}fy zchW;aAS#XrlNUIVXl1@_;xQY0`J8FBAZ9Jn>zoEYXzhj5MY*t3f>T#i)CIu++$%y2 zmy#Eilo({T(%h|ZFC3H|0bueLOxs!&D!@}{lR1^SRl}O3I->ki#a|#bvGhQ8Z=x@i zJ~ehnaQ02A@gA+hN7ca?7L})psZGThnU+&I-}9$R%Yf8Jn&$$(B+ULboNq-oOf_*L zHI0eMytVbB)VlOVi&-<8U&~2%a>aYgR{CarhRB9JZRglX67I!67^ftMQl$4~RjAP; zx!ZQTP4qVpN9v+R<&8p--1uz%cWOZs2_Z4Ji;HIMU$L@Z35|g- z6I!xQbk?Vz&MVg-t0Jl3`RsM%q0_W88HK;T8d$MCV=7WkSwc}nBU6dh8xTST8WN_m#Xj`~L2P8orqjS&a%0ueC#doh5k)!#Y!p zc|o)L6`LOzZ|3ybvk&r_P;HXE>Al(Kj`{O5G4aK>)w?T2;uiNsn0t-8$!O9=s6OUV zMdD89=X?5(ObrKxQr_J}`azT>wK5l)^@VxRBeea}FP#}%=$N>CZt%w0+l!l#^2vs@ zmoCQ!<0e|^(v!80a-!)!{wR}CelI;fgd`pTGJG>6!O8nqKLDm(0tSqQMt@qk&PAz-7Wv>xR_hSF< zA%%DJ!1?x^Xp~T5n$E#f^lbYcZQD$F9OcIjUjVe&6n3Ch^|{M2%&pZaqi{KUIacwS2jg=#-N2E`i(E!m7JcOBYaalA?K7Dmj?eo!kE567t&=6<=}+$uWV`}n z_Bb0Nax8@SyzH{uIfWPjem(o4ka=2%Xhzq2~E1#c_K}h4%(e>fxk!-klIS1h2JLTd-p0*N`>Og3~`)yh0e-Puo3- zQ-G@z(fGaQ{eqbrpdphoI0Zy!k&TFIxMQg62SNhyugLz;6ykUt=U;g80*+gDD-ya4 zwid|~pOi#}@zB&*m@!h7@cmy|%1$Y~!+SAdF{|PKdaZLpVe`D9!{b9;eD;ASfPNhm z>)#iVxvob!U9SXo6{$I>d_2TE8Y*-JEGnMzZzdWU3gO8aXWuJPtz5M}db;2vBo5kQ zGqq~yx$=IkvQz6-6F({-%v+HLc+H==-DzuO{lD+-Ce3)UiuXuKLj2Wg$oO~_#8R2W zs-2Yy&;B?Zj0<^xz_73Q!@#+;_)Q!k-lcpn0F*nVOe>w!7o8F*>ael;>Gx6vZXC5Y z{Rwz?BPLTK7jmdnZqL;io`hN@yA8Rn3G&%aIql7SsatSjexv2w&mf+@?dW(B8z)3@ ztGukzHC*|=-dd&NVqa}#k7b??zMUO8^G6jq2V0Bam&%mvDf@M_t;#T&Gm`B&dd4S3 zTr2Lpu*;^57lC`M3a-fy6fkki6rmagGO|9YFhZ-yTU|IY-#h1LoPVK<{aaj7euIoF zaGKm0+QgicP+<396cv~f!a1lOT~xtNDm*3Rx&4w^-j$(Os%$h@;Mck%yTZOp)sWj! z_2jg5yt+?e`e32#Z#iyZv$E#oDmN_OH*Q6lGGxT}%nJ|hJ#&(oNm=F&0LCbP1t7FN zBcr<=h3SAySgaNDFb4_`v@ADp-rBhxK|t@gXf%T95jH|N<@w(MO= zOba_;Ou)pr92{ZyN9Yf8mvcunkda9fy%j;n$Vs?;eFuEDC3lZIKY-(L`5UkLYO9G` ziRUC2A)vhMCb@0Q@yQc&KWgC@ghB+a_N!`p1J@&l<685Sn$9&ZTpT}4xa0Du_DIVW z?IhfIS>V=JKQ6v+xQRUBPyNO3aXoVFIp!FVxKxICekGswArFeU(@bpWIT!;)tiC>d z>AAAS)tb%Ol(i>)OH$m8*N|4d;3S^?GZ$*oC+2;1P6WVS_m-(ZP6>#ud&K6-hC?3I zcRz%aYrwbO9?5)7OLnKA!PuWW`{OUep)rnS84A5pgim}XyJ?OuSp?K(3TIDo!xhh6`X&vYAJ7Ib}?tcGH?W&rJr_1dhQ#& z=|76t-(u)vQfAeJwOKU)@XLCkX&%nj_%P2xgwXCbVZZ24=x`zj=htuEHv{_WxEHTg z8|7a+X61_clkXiWFG#{_8Rg#yf?NTH$qe8NRF&16+0jiCDM0Ek22^*(E?>Z0&Iao` zzcVle6cjiE!qVSWdT&Q+nKWH*cT8pq^V5j^Q4Tbye%)jMXxo*v?JA&lCR*TAd%d&d zErQ#;>2k7~i9&JS_@1EC?ekE|%0Tlgv~Z>{vsPf?nA)B#9E#?1ogyn_niT+?N|YQ% zT39s8DFXltI#IMYOv?oa(ZKesuHK4`77nsZsyd9`wxdY;c!T>y@*qMwi&(m03F zUy|m3*OxNZkOVMb9@ol_2Q2U0QTn^h`OnVW=TIp~%*YEX9kjZMlkU1VORzGvCx#aj z`Fez|%e$Xhb9XGl4KfFHU-cZiF4FOlc3Khznnuacsqsrua zHRij={brODwaLkc)}!We6Q3U+x8D+!KVj0$nh^@KK~kb7^qNPCH9E>ZCWUnKXPG&tuik%8M|*%4or$&gO|%a?7bA1#Ff$DKScg|>#g zhN`BC-+U=Jbw7#oyMhBU_1LnOJ!s>?Rf}_+T};r{v4sC*i)#m@$eD7bdXA6M$uB{o zlh<}tV&hj?>%+4RUjnu}%_cfb8-M~7QHvR|V4r=wr}zH%l%qMD@U=^xvO9We`)cStUZykVtnq?cbYKJF+F?ctHrk;-FkY0;Nj85|e2b z*Vf$$msH!{@Wk6g!cS9wS;rD|W-eYVfv&x}tD@evM{*n%p77t$bC_P+aNAA1xS!&dZejHQ#`gKUP$X81SCh$(LKXdrHp(euhM!3)XpjxN1%Qf{5d|%K6mr>s1yA3DqlW{mgKzmtz&?p~ZUbO??@L z^^`*?*RVa1!b{VdvyXb=DGG*09W5&a3#e57z*hWIb&e&?_5$OBAV7+5W{HC!L0|K} z36lP>$=wQNMpr%t7&1_PlhfhOD=cpqO-sW&{FhNC?m$_|Av99r-s~)i%cAqcPBW&J zN+eJz*_m3F+V*q!18j?Fd=)Pb$e{A6>B+5;K+u)DZx1gm6ya|(U+M5~@LxmzgyJ^> z7|N0+V}Y51RPx`uF6d)Z=Su7eSTD{uSin9#b$^3Etu2x12N<(yU$un4UvEzqp|DGp z;j!8^87y&@&W4CRZdm_b{oE%tVhc4A>4yxYj_1i^8lnXcCNi*SRch8P2i#l#d-(o7 znE&{+uZskBY+#C_1O?(jMs<@w{MJqTvWMqu@cQch!5NsnWTgvlsS3MR$X;EeEpg+mLiE5HW%tILK{t!CT zhhDh6!xIqGiJiH%vuwYzR89|K59=L8&t87EatiAfd$jgCL%8}$@h}1$U>%u0h%eXb zb?W{ZMK#Jd_M0ruXM^0u+>EPKHgn#Onf<@1&p&25@glH6B9szJO5UHuzm}G?*U-QB z1SIy}>JKreD@=f64DVHmOT=oTh34x{BWz2MpS5ALs{aoTJiqn>Lu9OnXxKb@U@R`I zPvksE35mz5i4~%G4x9wALKH8sIiin!+={>ANX?_Q?sZwNABhXJqCfsldh%?-mru$0 zvN}#=X_Wi8=^TriU&2Ml8<>KCcx7#}S4Pjhb}J(MZ0Q*>+S~_i{d9fl zg>O|9?qTk?-yW!5dI2o`Eo`G z6`kG)cu45teB3a|xK#6v9KpWpQGzLjk8Yd+qCBiXT0nLQ3_d=!`bk`bW^7SrAAVX6 z`$50ci%11sdaF%k21&ZT!jqEx{40?vZB~BzO&B?+6r5ATuQ7Qe8RwbcHqCAFYmjFl zR&oR~W26(@0#Yw8cwNc|6s0E(*`9qaAZWj;Pn+>Z_4Roe#3_<-EEl46$hCa_ZFKI9 zs}|dTnIUcDqCUa;7T?nEt{qOc9^5Rhz=Yq)-nXfj>6J=I+Piw(?wB_Z<`8EgjOA1` zjC8w1m(+VWZ!8YQ|CF$k7PnYEG)-%yS&W#nm+o1PFq~7Zm(yJ$v#b-qd@9}seu;$f zAOHC3ii_a$N=NHD%Kg}*UbKoJa{bPKKeGar?#8#R(xXpOu>Hvlof4i)+ikJUgxTRY z8`#R#G8gaAzGBqMV5jDY8V|Zt(Xo^sPy>a8a57~L1(|Bk=%B~a>RFeUa08nrUQGKO zHrT+;!YPQ^_9FDt`{6xolZA#0tKA7RbH?YQ#8bRLRht;k*^L7$OFj&Ra#l1pfKCQU zFF(yK35J3X$q!;qU`x%>O91Si=~qi>Az!T&kN9(Z(WPu$0Ch((rN#L+$Lc3WjnkPT z^r<6&+Yv5)Ghz8~=h~o12BCGNya$|bKV{yMG&~_ap|OQHP?Kg^ew2q$(HK&_xwa^8 zFIH-klb-D2z2F6kwy!CWT-jUiD)|Am$Rwc;!5kHoR?&;cyLl$$(G-y|iXtt(mmLg! zMxF1x_=63fPvfmSQ;p|*pm@H1S;Ou-=e^Q8Gi}rSD;vM30!a2G+*S_bd2(uHs}M`bEd9$ga_>9T!AK!`1?!FRNRIUB!xBkyUwx4#Dt{Rlj1w6G)F=IZ2AJbZlWjK&KvM(bv@pc3=p0;0R#E5&|f4 zdHP`oz8^5>JW}$O`ij%3|3$ zWT%a^g3hz2oA(H3wHyKtd?f`=pzfv9i#qSik%^fP`i7;h#6+#Us@TIyJ;NHsXFO1& z#;jrPHE(iPk*{aawir0ApPuzqo+TO|AK!FdVqaQcf9{9~i5l@4W}$v z=(bN!BF;=4B|hp0oYkJz@Up246I);cW(ZQfG-wm4kpk0;&#By(LjTL;|8w%7WkNWv z1GRuL4GXQ}g4C1N63sh{KEI2zNr$%So*k^s`>}`4t*qCu6>>r+`5VK#To0Rn&n-MY zYzjkR4WXL5xa|p=`(eQ@oFKzVHZ&A^YLZwCJ9e~u`X){B&n32Lm@9S z!k=4@@X8e0FBG=iA}sMpNA_@c)D`Y%&(F)4Q{V^*86k!R|4gJKzuyTr8qp79 zEh)Wip~k$y?l2nI`W^4yjXX@`PR7vZ`(!4;m-74G1SZu-iA58SfvC>~pSs?+qZX&( z#hq?OZ?$G2ShV?ml5V+D^zNpaq9m#-WNe4A5?Ca|40`%$hRsD+oVp66N^oiTXvrMK z1cFSzn?y8Feqo>pUVT9#N;9nBzm5`*1OzkkE@Ex00*OnD$I{IuUH@WaRNJnVoUW%C zy5r^jIHRl=XXh&H=`00L)R+R#oxDV1p8p~?!YJPH*5@)UqeG)Z4ipS@YKds zulZ#6{sAPlgWiAAeuX~G$e?u_$~U4=&&zwOmnRg41MsZI^F?%bkPc=LE{mn<@ zSflO_NhwB-vDXtZZSYkN_*^+C-|_Yeyb^?Qvcproeq4aS*= z^JcYHf}SfbU6=d6*_8gZQ&C2N3$UY9kUr*t(3l5`bnVQY31mWG@9Jx}V-Bo3oGBbe zF(AV6L2b;@)K@meY+~%A6%rDis*)c%Us6{qS)|$xhB8Z_s}mp;eq1nHc$!7YKEIkp zP)cdw+ar1Hn}{+>gz)Z==8HH6UJwtn#0$o+D!hTilDMj>ss&d45LD_rS~99-7xY*h zDGa}v=sU26tFMd%OQN#+_w=CJ9Lt=Z-lqWwu!xKZo*X)gPHiL!dC(TP`$kb&xri;k zUP`-yEog5^UMuxA+G?W>&>FPa{bIN9K%!G7`E8^NuIR6+(i^w%Ns+iuK;aPd}-%(W>jd#K4F`5b-G?h+nykVr+Hv)QJe6L{-Ozg25ONNHoe( z+p<=n-Hmo_LD#$8#OUbEVWf*3!6x(qELZnYZp|?TcZBJw%j6Ky2HlW5Q6~RI4rUW~ zdm=|LjC>$hQvw;w3&)h=>-$BNpqE6l%f1HKp~>MjYW~S~6njaUcb)H;fDAg(q?e0* zB!}#rom%lWhT{lv`bBcJ4ujx*7Z*#T-QZgI%h-qP!-=?tD&%45a`yNW$;U!wr@n8e zAtC6KyRX(_9nPDP#VHN(`7Oc!O8)+Lz9NT|*mNipni?L3>0WiOUi?sAG89(t3(;Y-#*S`uCvNnmqhFTpNkGl=dEc04pSE!iiNBZ-(+ zzwtX;pQ+<|Xh=OGMv%MEP?>fvt&WImP*U0=H_sBpl0#gWpRqjD8|R%R6F0b`G3Xdt zh^&bFOEus>?ALz}mjCm~K@+L-Sx&8`tZ2o+TRB^qLcrDeN6_=ou3THCxPkunc+T}Z z(5!~BE(rtEkJEq=e&1%PP4|{M`yn>>RSh(W&P^ADF0{us+b$I86Fhf$LuK#;_-T=^ zRKPtU?SYFU{vCw>@dp0GKaN1bZ5ySqzJuuT-*NHrp?H#8l?|5;90ax%Ne&w1p}`i0 z5E`j|V;tttgCg5t4K2UqcKiaaJ^vI@U5J&shQ?&DFin)38iTD|TY`(HIoGRyzUEcP z%a0}k)J|6a*S!Bf+|r+sEfuF!-eKxz>ZH!MSEFWOd9esJRPakNEK)fOkuX|KO8prC zZId%CIIg~JbrH=UejT88FteE$C*hkX?g!fmiFAt63 zr&2WA{JPq1p%L#x6+$hezdnU2Ch%xqFhAf=|1GV{SfG4j`}UZ*^=EO%H~!1k|2a@Z z=BO#NhIT)wt0SfKkB1bflz~i0g6-QEYd>jQ{WanpNRi&p{IHWyQ7hJNY~kdzNw;=dL#9muA0Pu|1yW6G39?VVgC9? z{vWTHX!IoBi5Pe3_9wV^N>Q&#kFWOgR=G-USoHc} z#l`iPAO6dg|M{|k*V~3qd4yr!nD%V`XFI-c;ApwgKgQrv0JyjLvqbISzrRj?U>zGG z{!LB2YD{BuSX88|%%WADgvX|=x6;r(rn97(Hy|J9*?K=em4#4OOSxpp!f2Dsgr-w? zho?gY1=Ixd_|haGNiHLJnK&gF?4!m%f$!&6p&1<_Qe4F3{6fwsD$L=Inu(uz>A9hbP)3@C^T-kMZ}I{qt%27^JGMUY|o-@eE9` zoVMzk3wz--+YM@)^W~pcRhhwI2%1)OfibI{P6JjC@lG|mp3b?Ya=BbX)r`jb z4gXjof_+5{A46!LNvWg%Jv5NSo-njCZN>_!^HJ$jt{8q7LY9Qqr9=+ytyuA08ea)# zM>=j@kgY=bwr!l}APkNA6pw1o?~XpQH45y$tFv^@-S}kKrQ(noBu*z$zPwYntlS7+ z!qM?+UGlnDUGH`^qT=P%LanH-cAy&$LQLD)AtGMbTDuD0h$@(FYKv|V$Dp1)KUfxM ziVLMoeBuhq)K*ugr!}mRm5~{BA^oNXbX9UtSWL;!%iAS9r=^5Np=>=Rs<&3C7g*d! z-DhS3e|iSH_LPy4A&U=dwE=Cd1O&}&{?iL!%|5*4sdq$ZNC+3Igqe@`2+BE$=YUj` z1c->}2cOgG+;7u`J9vQ;g)G|C=e*qfy=#YvNUTgOu#i{wk3LE7)?iPG5;6_-DcDeI zrEY!++gCcVE!y_7cejH&)pdUQSxY9rPUeqEZ=Cg1#Jiv*{{%Ds9&2RCPp_#E>_2XH z+4voErrC#BGt4WCie?U_S5;Q7TF<$XP(Bgfz7ZUr^L1yzcRcp9nM4}yi;s_=vUMl@ z*;si+>I8dtT(=HkS;pddyEN@Z5us3zBrMMpz)$7Lg9XJ|_N!mYm90J9CJp57KVD;g zJ9_LrE49$q$l(=G+b)NLl~O=3&9kJt7WGDnAuaNH+4iXgjBZyfBX!>B2$9F;5FYE~ zw`Msp z%AmeAyL;8lZ#}pEU9-Qhl(Yzy@zY%rVX+B|zsVLFBjMdaG&<9ApP;fVla~0*sZrIq z3G_HirgjsauG=r_%;4%8O8EA3%H}#h-j7I96NA!{STgVDMYh%T^q{l@*C%W903Txq zAHc8xYTYX;lXop6U_YDhbT|xh4tUXr(Xwog$!{!`PhU`ujY232EF^)neW6I8zV9Zt&Ip9(O34}r>} zT?|9(F2K3?4%GES{X}F{UIh!Z1HEJ41~vGYuHOM}HBMEZ2eCUClw||xa2(SyKUVGn zywrabE&*6#3r*nPiQetpWk&K1BtGDOu1Qf+_D%^;0Iqk+!Y za>enb0)n3@gETfie!dX<<45K&!I1!f;{B)7hlsTFlPKVZmB`9agsVK^P8;8sZ@(fh zUZ97s-~d@M_91%_DINlJ;nQeEw$YL%e7SCB8QD|Vr)CSX(!9;?7pcR}!ZOiy>09vf z!*t|)AR@*UR*%2GsJ_aZCK>@&5}@Q|WL-G96gW-C>PY>PEo(F=4esuR@g3{r^sH`s z=A!`Q&hzwYjTQWPDw4I|plQ@gqQvI4+G;qozzjHEnAPPdUBz^bklx z>85O|#|let%Z_VK7ND=?M&f$~Y)|{W%@&q_+sG+Io+#xKO`0aOJ=$-M^<-EtgA(iQ zw_f}}it>5MMoRfMwjA;bjkKz&DlYb`$cmdZY7d!n3IA~$;=)9sb)#Cbdi^5x6QQG~ zGgVU(|K*Fk?ygA1cf0 zpt&Ka?IojzMw^hslbd%2ahHCmTa1|rwCW6x=lSlcZwC^;mG8}RY4|4^xKHbP<0_YH zYGk;V2pWg2_<%!Uh|dY3o;>CgZ}GON7cq__7@uC}vXdRi<3z1S(}k*KkfbLJ+bbLv zA`a8izF3`{3ILkFF-PgD>g+E9_GnY|k79SA9M{t8A4XpprVE)3<$HeuY!qb{m(TS; zL#S1B*BSrIZ*5bhbMuKD*%!Jnhn-iR8a3&&+H!wAdj9)7?3*g?;~#!3^XZd+zbAFI zSS-Fynd%B&5~B;9OVO@*)1bt}F3miCN43OqoD=jSI00>lXq2K|yB10Rn4KBD)1p(f z7v!866I1Ld+BzDkcippU7J=I0EkGd4hksnflOjZylW%0kxxBe-w=gs_Iy+;}e=|o81OSix#{2l~;E5_OU%Vx)bOED{pu&;Wi#H1*AHgH4yE} zNPAp^eWal4>&f^hts>X`oV###o$f;+sRAk|T9eW()BpD)i>Rc~zP71WXX zn7gOSXjK_Q4K2{osm|$|HyRe+nbNR!&L?xN+*{xrzj!BSA9zW$zo^$ZF)0Es{&c3;Jq$Vw@0(#rrf^ zlJAs81SYcXaF_x`ijAC0y8?53S8cif{t^5hOvAnC@(rMlXjz?YvYN|9UBaLEKI@KQ zP;df_o76^`JGfbV7VQQU769j^BR$UxwZ1wrjnlO})Uo~;AE9(lM+&e4*hTH#lUHmE z?-MgzhSG)g;omIIv0&JmqZnS{5a*|Tglb>oU;^j>hs}QJ{?NIGA~d8wr^MhBPba=> zWl_=zCgTk5$G3Wxcm+7a(fYX*Lj<8ut1*3bMS5$k)VK~r%Z09*uja?-2KHW}&sR)G z&e{BU@PxE%M#jA@6zg6Y%Ww%32<6V)6DdOD76Pf;2GL$6<~+O@xQ-FE0cprzna3%by-9~vKeJlrff z{PCk&aBevx+rXTIy@NYAfyh^eo(sA7*-T3_DqI758Po8VtJbX#&$7bO9blxOIz-$8 z_Sy$}LfHcHN{2svNzS*FSNIVkSiyerXph&9S~E-9yrL!2hLW}e@q^C~oerDot*Tr~ zPUrEPcsIy^wganF+l1U+cRU+WfT{oXBCZ!%qjK(giL{QtP7r#~ zyVpeRevM$zFEa7F$^@%)4shpk92H*TR8~Qh7fiu&y#_~Cw6<_xw&+>vGDQ9!szx2E zcH=HGa(zY&moMjZta%M*`;+cC!xumNH4hhQ6sKf58*Qs_@|?6V9;16M*oo<$w-=MT zB@wWm7#1hpX&Lz5rTE>zg6RD-{;M6kX)ZaP?Vz?2S(X8^aqC2F%A8^RQ6{|J`MP(T zi<2ERojFhXPo8!>v-=jzBQfS{cyV&OS4N;*Al8Qm%2;mtb-zaOXtOt6rt*S0^!jJ_H4ma@n2M=80t!EVsw;zl;@OSSj&{*ZqoaXssVV7bD0pE zI`ij+@{iw=xt*bgT8wKT<=YW)EJsaQtNB&PjzHD-~cOPRGb+&PKU zF^jRo*-zrwOLZ&y6&_}>E42utF}fpt<5mqmzMn7o!MPxcLcwx$To6ATh_?HdkZTvr z8frT$T>?(G=?LZ{zj?BXJTiE(1jy>lpQAUL{HJB{I}Fq&eh)MeRHT{!ruEUXz%s`& z=!eEyJ4hbYtIYk1{BXMUAujp#4jshvL0VGB23hl+gksMf@t(U)@cL7INugu(W4&J$ zD@rTqf(oW*Tbn)4nh0=NQ^x-&cBWgsy*JQgkkh^#SK08f6zMm)1Orj@041eKxuOar zUGcgd*N!FW?4TvZ@az*)zx6+#)^$#`TRJDY+IDu~gBA1IZx)$4$Jo$!<|{yy7ahhU zKmBqT^^)wBxd&gj++WTe0wQ3=r;Mc7X_hZ>kI%=4LDs@*uKhNlJrROaKzq>X2Ec4@ z_#easz4f_oVOUM8ZOxB&Tf)vkD3GL<)Bb^I^1Ung!mmfF z_X_aL8Kuhe8^}M@S&9=`^cdg)Eaw&yTJJusXqG8L79Y=QOo23&Htpva-yno>w;(YdsZm48=1S`6+x>?d$x+*ETjK zc6AD>y#;3O$&%?0+}d2<);v4Hy_P)v8rYSLo$|^5*gI@;m#HM58lwyLRNWF$<5;si zm&Ii^oP?X{a{ebLQPU>SIMNU6p)(GRAi@`2pJ5j-l4JT({R#K36d7uZmB1WQ_v05lUSPLp)_@k6a|t#0(oICdKl`tyXqq1Im7*T z8W-%2RryH3^>81Xl(`ob zmfHoJzK`~(FWS z@);ZKh+U~Nwh)C9=754pwAtV|b_j_R+-X)Bjip zEPPCMJDpcMgLlO?OR9#HSA%7Yqu#q=@qeiXbw^CX-WO3}*+{OB)9_dhKMfP$U7lN! zc{N1!3>8Sa{m`7L;u3jKzP2ehqo|8L-9Cx9Bj{X;N+c7Gh$eXjrOX0Zx7_5R^}9r{ z)t@V0B?LZZtr2E@=fE;UR>BGGv)6TJ4T~nQm!f`p^XzxK{Z&nw=ir~jy|Uv`tqw?e z=$v*?-csMDhkN|=q!_9zjc86LOH+9J{%sA7-+n1RMgg<&{Ick`SP&Cr6`;<=(5x?- zLN)iXLC^jr5(5@B^B z51apf(byP!e`i0;Sg65rWY)X?g@~ppoiTyuPwNDDLeQz>7mzJzCsGp!JL(k`<~Z$< z@{Y-FqoR=EMuU+68!Y zB^7|3sq(bwIL}7%*TD+%3ClN7d1a;Q)vBJ)fo90mL#!3JiUR0oJ-+ z+xp`dx(k2?vEU+m>2b^ZLAn*iMeo8hXN(J>rf1GJAuxz99})ua^vl8ao5=Xr$d6)Ykzm(8nHNE=X?X_d zIR3=s4(Yv++CbdFn(gE4b;GsHSCbOwJKuzD=i$GS;FR z2$SZOdT->GADlEHHrCwxC*n8Wd--M3HL@V{0 z*;ttX=Xsov@K?2v9Oi`6zCb?3Ja+N3xXRwhJ(rr*L=H&QE7UL?9?fofN4dBNWUs&i zii4G8KYi8VD)Q&m!7k?*+~ zX4Zquf6_~n7{G-T9ZVPFNuTh(A<>xQw_(RH2aYj)=00i(tyEZ_@j;RWR4suSe& z>HpT5_51|K{w)K23pnPz{EutfA;;a}cUp(Q{#REx*#M;abd?djpG(%m{eQkoy>_Ox z1sXYi{PbE~+54(-P7Mh?>M~e!36cM{Q*4g(HfCh8I{2tRU!ij*E^E2(ne(&r?Xx zGq%f@*PTaYNLl7X7wzmfM~V~pi4s)IfD{jOQ2l;VCzd`*MU79&bqcPz<98n-)e3%0 zNr_a=yozOvS-8a{QCpvGeSAU}Y7_I?dhyF3!ODI+ja1M}2OroM{VZduM9SxWxGXVl z)UR^Bu!tE7zIxC_;PAib0TQ}K`ynCi;GEzXz3*2aGdJ7a=|&NcxZbLCmU?9PlJc*A zSF-91ilW{mrJ6z!!l`6YfCtw$0f!m$AFnk!OM>hmK4TBS`Pnp`{!Biu;*Cbo#ixPz zVE;)fb0VTKcYu>`6#$#*$6i?nG?LJxt3}US*hQsS`iY27Nlq9Zv$|pA4p zavFMv)g8>1IAIC9zfGCpzMD|mxZ$#Dc*1TQM1*dXL)wi&OJNjzC71)ubCfBuLJD;$ z_Ykg;u2;_q12v)?SN|#sU&56RDm5+sT-8W? zQ~7$(3oL62z*|gqbCYvVQiM9^RKS)$z@|=}Y!OeCj1(`_5W-%${HJ@I${|t|v0+J! zf{={s4bY1@BVsFnQvkkSrP_3JyQebIL3`H|O(z>Sfb0(AbrFZXboqEnLpH^ERKI2Q z`ymJ2M(ZvF9D2&h$r<~<_6`vcsS<$-e z$SF9!OY}UkATY&Ojc>ZSI4H7+ZmM-y&V&D#YL`eAH@b%0>k^T_%y4pirNuVWO^QUZ zx;tG&N&FV`!RXm$8%w7$5Bg8k<#;iY7?;l`Ckm>nP$AOgpYKq;dwA_FC85hWo}(RF z9o<1hYwt77<}e;|0P5Rx`zf72N8;7=vHD#N?HOb=~^|s9t8;eiN^& zK>};hPH;NtOu!9ZE|sciX+Y+XSkXZOZ+fjcQ=qkiixM9rxL{2?(u391)Kn_$Y}D`} z+_0Y>C&30ppc~Zs_~3mA#OR_@skc&p?G=COi~%hXiC{i~bcTXRw75`aAK)mRO(%D%iQkLdQHx}C@rYoERc z`a%Uo83_3LWy1tHN=(vvtp95YeEp>py4w}u%Z^@^sm?%e;$3h+x}@h{9`jy=&jNv@ z6SpozeFqPQjo^6#oYY7kk+<51zEr3-v_9TDR?hiW!}5Czix_SQJ5br8V7qI#4C&TJ zRFlhz@|57QV+vZRNzJYnL%M*&La{Ede1wsMf~c;IG{K3nc{eyHtwO$$nA7kN`Wf|4 z&Z%wKynV25Fo)EkO@pmWHXN1B{qbS8wR-5CN>Aa&Z42xk|Di&O%sg_NItUbmjZ9-D zZ3*rp*=t5qQ0i8mYvT^AU6}|?8icdb9hLrwp5lu`?V?7^1A|N~$3w?c1%ZHdtLWJ&TU8#=5;)h9T+dgGfbBV};B*J^R#)*mKSN7JzXU61mS{+oVSF zBB;du(*F`OessKoOL?xHwtBTRni8LlrVA+xeY%KV%={^S4?YUm?AWa*1)hQZFi0$cG+f0>Gr$Wc>{bZVUdlg+2m5@nbmRd);R5)uH)M-S%cm zrk#-l&=92it$#RJKSLHQ<$q-HGNtd?_&`eNe88<6eAZ`m^qq(gbL1cJ;W#xJSpn;sWpN+|3Ig!bfL(b6 zpHv?OvR^QbnMq$PFH?GTfg4Dhluk+#AFN`&o#m!5?%ZOqMLG3|Kir=SC{Snt^>#G@@}MB(FUw?$L%T`oDo954PVewYBT& zpe^v+^Lw4x-S}*6x=lKgY{)itB1d0N>oH-Q8RZ1o-+Xpt_FP}1%1mzS>Nu1Sa2$QO zeUS;d#x-G(Qj>~08(ezk@ul1qaF+i!z2aCXh&~^^qwhIH*hRC-czO=U;kB;7lX#M562CLznRPneE2aa|ZZ6?dX8F*~TumoX8V5#7Z5 z@W4!BqfGN0XF4UErwdO8PX;%KvR&;P7@eEUlE~>r`%)oc?cX-B*~5u$&0M%_2Z@=_ zIN)b%#1sWs7bmJ}8w6fh5Y@;2=omtnR3D5M571tCsI`tBkw z_QESiOpJpbiO`}H;EFDfeWb%OKT%qwi_>I?*1zxTN|P|w1$|s&Z227h0e9>5@q+7U z1Au7O!DK5gn$UZ_qbRHZ{}}gL`edZnrdS+qolS+THUho)<)0`BSp2Ln03Iy+jH*5w ziUc6lKI|T9wv~#HWVprfX26AJVgGkk(#o1paJtpq8sndF`NwRwo#kgKh|j(#_Z_LB z?|v^L^TY^iFtWK971;)#-5V=3^FaJ}P0Xa(SKW;=Eg`Q_>%^w)JG{2{+`O>Pg%I(J zigS9*MR8R%QTPh@wfL%us9>~uL8mdKS!Fbs@9o*7hfe;80qaFkTyAbdzjAc5KS?4e zyvz3O$qHEj61`()h|^Dkg*Mz{n;LxGChYK0@9;~A4S~?v?zEBfx9Bs>V7Afolg+`J zIliDlOePBE16T9kAL=j2?0dQif@bw!DlYYlZZ4*>a=HZ{k)+Rr(-5YUs_FAFh;75z zgczAkU7m_jeB#TY{k|YYRt9o#E(vZUHdkF&zW;+U5CY3_BxO1iXtgpEI(S(^Eu{fk zd$xlyK#v2kHzakxPU@mHL&>KCo4!|i5yWzbIc0p*@bL5hqxHWw<0X(r&H;{vP6ZKk z0vLnZ6U3PdS+A8cQ60fiZx9-W{1)Le7;G8)Zs}%_WnXP{hiWWMaF&;I`1Ow4oHGF=f0oeWITg zF8_?UrK1GM6eX^?h>bfFXvWOdn7PUbs9d5Q(mRbheyFDaSx(_LC%nq3ErOQf`2zKM zXrr`5gl7x_#!xd339(x9eVYhR7S|JE zc}f&3ux7p%iV9V?Lpfj=;}moz-k_^(zCHBTo>CG@M9%M_ddl4CSi)jwy{2hugnp&5 zkP-u=qa`MshSgKU39{#C!~>m!<6D{L_h8f~UM7w8sDLh~7qqN1Q*5w)6S;EO_9?VT z@DAu|xI4BS*BZU>&p!Ih1fO!)IRqH6U!xn@iS4n?$iur9_Ulh&{|Kq|Qml)}6Gz~Y z2@efth^Q4yL{vn7Rv{s@OZ2f=yTx0Nunt7XAm<+hzv#m&wQYLz;GZjKaMVyBUo?&SG!S zVqX6oRY5gcF^w*%2qEyT)rfA!ISL;^OPAe1JXOpep6KW$l8x$6;fdTyTGyz8k6GN`jljQ5Z zx{8&4GC+#e>DGsV!lnl1^~z?J`u3XPP5Dh6+%KNGfT*Nrdp2$q0^U)UQ7!Ik1&+m* z43A_=nv!?pWh*4_1IwcxE@yvNNxtCY?{_GS5$4Got|=)mm*`h?YTeAQgSU#Fz#0Kh zu|!f!2GJQNaA(l`LEWRNV!V?d{s#VbEG*XOv#XlBl;29r4#11ljAOdrM*VI)-f?gd zP=mY#hB{JMxN#exx!130q7#5RQnzseX=p_rha^AKl6DQ(67))eBtWY(VK1vgE@)>g zWM6oLm`bZ|Jcd?(5Jd(Z$i|Nf*P9lj>1e#EFxSx{ge!dKggy#MG15t~gX78DA*8e~ z&&<_i0${{oe1a_Za_i4kV7xbiqq4LZOCF{}3ips+Z0rhm_N)HeBxiK)h_U$FC$xoV zbVneCsnnkQ;T2h*)`M_&EyjD5G`8+;JQVd^rEkk1SxxI*RS_TYikRsK^gk5~)cwXJbp`O-i}`ly>trf(8xCA)1# zCpJ%z8D~(yTKJGAmd&ZjsWzaMluuZ38Wq+^w*4yQEhTncJ2Zd*?vkshJ zf#2$sCHw2>6$lkP-TpfSwTS>~6@T;zZGaAU8S5zh1n4j6c6~`Y1UUPe%KpZ^H_Q}# zw5o9OD@kJZWx#m$<7d)Zz*LM?w}jg;E`u>CxV&dXWZjjuLGUN#Q?)xkTr`__o9$*o79%2! z%%8Yp^yU7>09gc}>zjC3^D<$#!MFM($~gu04iZ>?`iBm!o_)cr>TOhngitRk;V3q- z?jVEXNxPe{&FZTigb-~s1MVy-9fid!k8@jY0=i{BKr%=_dI$2NTGb!;USF{ixEg!v!k@%o}F_ z)1}`^-z3gFFS{wck(qkilZ$U(C%s=e@iXfz=R2_a%vN9qlvG)nLLd`+l%eV({c)xCL5F?Bx_r{7)@i z5~6uYdPuo)(jFkn(5j#sr9x2(Y7kE0=5w2SX-|%ZKU&-y3CJ>wRl4?0q9>adm^LDa z%zJ1Z+VfjaGvQ~P$viI8I!_T~{3zaCUpEw&nkJpLgVbZ~&}5?C8yC&bQcc!!npD~? zt0C_wh!6@LaUMX5_H0BD?|Mucnr_)-q`t-ttr)yHgi$9awPUpdml4++CJ1cE}6|hAeTz7O8mZK-v<AuXebX{sg6|&@%7h` zu+I}h=feWaYo!gltQj$#+Z~&(W#!pPl#PRpL9;Iy-D3`W69DS8Z{OE?x zmY?B&ZnvO)$l){{lJj#i%qjc%GqK_APqs^sWnX!c8oiywp!#awXD)LarA zqlnf+X0fL3T;}&p-y%ey>xZhlsPGCOv0l*{a$)s+4LA6OK4DK9NU%f9b7h zLi%ni_Y@)_c$-0eG)L~RcYB#?boFI>FhaLT&%ZD=h>+qEAP2~t!8LEgtmj>S!+43j z0l8fd?*veTnht3HxFf&mUy-BDC8&h#o1P5MpOy!?n9QZ0fT-%}8# zbYGnDaw04ydfzKfh$oKAJ{8u+Lihl}++9aWIYV{MQJx;El{0X3RsMUKZ`Jdz)dv-i z!f!L0b?~oo>B_W6SZ(7?ysYwyisKyFb=ofz3P}+m5@#kc()W%?3r%%*2L8*`*F1M# zTDLcMK2HhVKhnSdSAtCJ5lF_8PpbwluE<*E{^RtfffqgcgLDF~$;WV&o31C`A#mO0 zcmn6W0jz~y<&?&2wv_tBg%Jm3gNk`hqd=85fgITRz=(;Z9Mj>Xm7Dz+kmZW0zQX44 zNmyW85Y1sWt`~Fv4&E(tqOm81P z+h$9FLdobz-erZFFa@*;L=-YlnN*wrI*@-D{K%a zz&w^Yu4f}dy%kTl&&9OWmfz`oxISbH9H1>*K7{32-n%&lsKF4N&1VD*f;7^kMflYC z$xyacr0kF};$p}^UyN&TOi~hlq{gMRbH#a|*<&FZ%dBsJB?DrS>?etvl#HN%JBk~j z>)E*cUg7%r-b?{`3b=A0_4t!hJRB`k8TM9}=G1}4>8TJOITl7p+kZNfr^Q&9e!*Do(5Di--x(#?v zXmoFhBSkJWc6IO9BDsj47FkJNA%YP_>X|qrlztc^u}`i+Ogn19b?l{~)`;;R`BW|ZWwn@sqH9xHe3_MyNGs2Vr`MeAnVz!|kzVXxw23*Uuu1&7H|>egXy^&E z2OvMR`TA4*va0fkQ5VeF@G5#$AYawjs4K(YUC-D#_apqHJUc6GK&}H6&q>LtDhiW~ zyeN2khP;uarIy!N=k62>F>TDug$MO)Z@j+o1~UaoKyS)>QRvS@e}s;jR(ocMN~y9tS^1UW68aY&iofWW-if0Fc4>LQaYWInn;|5Uwx=*Qu`@_V3Bg>UOGcTI78)cIC3s7 zBRpFWe3kcgz2KFCRXc)3of1Txw!rS#x=as?MQua{&2ov%FS3g(Qm(c4bH#Qk z=CXOa{Mcd`)^vBmwqTWFlIJ^UnHf%FlO`ec{6+ox7bY*7(9{hrD#960sd&uSlI`vp zf8s~fl+vy=TY)G3*Zl^Qxbt5_qeYIoh40_BCjNA3F(!27zf$1==TuJAi(<^Znx}#O zA(sh2&eK?w#tmW#W)}=#p`~h~kFsu@muE{a{_P(3`NR$qU?ZW) z_!SgL#ardD$nDMeGfIskE3s44nQQg2^|7o;>T+NFuFCD>-u~=;v`O}y-HV#;9QD!v ze$VWqc;@>EYQ(W8V&@nT3L^@L{%dT2|Dk!{_UuQ@TQ-eG#T%Qsvz;|DyXpw0aMb!R zhLGQDQr0^YvU471m@*t!0istD1hii^o?B9<=Jg59LOd~HFEN`$+Tw|pxOW5?!WeM8 zAN|Im^pxwLgeSzYWrGJv|5EtSuD5sG1`b(uncl)yQtoVX@L0ZnTyJQW0h})SxPuui z!X%mvEG2wzfyQIdZg*q~9Psbe*~7>t#pO7+7Icsoj(#L>t1GGKrhdpg_>VIR1Q^KT zj`?!>mY=qRJ6|I=k+`*UaJS0kgas&UU)Q7)oqmv!8!EvZ8aGJy=>mr}EZin%HJ1e(a=+>uvHn<)hSn3OM~~T-)wm53q6V zxp_92P&!t3&!$+I)d4IkC7}~SHRw1n4yDrV48?|$ILRG_fXvA*f&EtXDD5c8cyBU4 zCc>;8T@{~Qu_!Ythhh$HZ&beW{LRaqwg_v2RcfoT$IQs}Op-q5jN2&ZsN>nSYmN!p z25GduI#jr!Cv=o=lCjt^PuX{6y8O8jvxU{~N~^<3ouWklqF8rJw}B}SX&ak*i#Wj` z^SN!=;Hk#C*JJ(?{=Qt$)4Qs<bD^$os%rV>s#`=W_x)`F%c1{fxL0)1fGjRa8y~>R7hxfUU zHKyP$=WmlKzUGf(2`%kb!cFW49C6%zzjh!q@j_e#3x#%t!Q@FkY@3Z)M+IVS-h={X zO~K%{z=t=ZuE|WkQE);@CJMIouh9BlbonAF^;P{4nOSE8b_=4zSRc$>+9Rf6WiHhz zU*ToykjeavofD{f@?&VPtEBPhL6Ib~(Dp4Pa68RU<_=3P$KE#G4&}Bi3LLwwwotl9 z$Q<)Ibr6iOIVlbAcV%9Fyb5JE!%e4%K!zRh5<#o9^YSJJrOAs7kG_uo$_Sm^Jw2V> zldowt_x_jmG%$1$2!;&={n~$5xVJN5T*qqgn>At1e%!W>fuoPXV{scWsNj5+x{Dr|<6&iO6x6vu#uqT9IC4 zk*D)=B@hdUzC(Hf_X7pbX0X$Sp14K)*#J*4Q2Z<^HBG#UU-o~zHLH_g$KYYR zvcE|Q7#`4hTQ?%$!LmFh7_K}sNw zKEcc+KswAi-b?yK4aN5i(65)_7pDB-o`FJm6*^r>aPg1f)?xaqWNTjiBz0_EA@H?p znx^ZmuS$aMMBEGCWwDc9TN8=+RyU$rbj^OU#zO%~#quYC#!sW+Dq+7YizN&zdu49` zf9qUbIS63}XvAg@I1gDqEhQ*stsaJEvFVjga4U=8$DAzCBJI!Dl@WZ)F<`Ngix?wJ zd5N~fpq#=v4aKJ~`lfYZH(N?{soT7u8@?Sb&;H8u*eo>GFm{i8(Sszk!B1qCl;rr5Yyy%EAipeXp@)gr^}kx7&cJHL*s7HrOj*9G-dDYK5x_$ z&Q~{RngRoXzE-=fs4kzFLU6WYL*5s!Z7mKoW_^flZ~8<-C8S4kKoH{>1Y+cv z#kVdcx^r`D*%)@~0CtjWYEl}i>sQ%oSE64;xXM9Me-b{9QJbnOHR7k1#^RCc8!&Jg z`-2ft0(o#h0Nyt5wWP4!TTJ}!k?cQD1s{+iZ!I~IJN*QO5d&CSFXAu3-7*r9_3`< zz=wOxu`h^n)|sQoRSU4IE^6Rs*S0 z&SVEl(7u~SqaI!Yawa|G&9UrGz!h3r=cVHBBbn=Kqiz7G&&r(32^Xdobc%&3_J)7E zRH(@mvYWv$6zIW=v{+3Qa$vtYmL@N!S4uldXHU))^^QIXbV@%;0`bYmQ2oFzWFe;# zUlCrFLygST|CkQF=KD(nl^|j4JovDiNIN4h&?gXNLP&7Cja(XIF(-S?&iFT@n9_mD zvElnv22gRc->uk{H8Y~W7;y!RL|b8+i1F?nr#~2!A7UFBC1e{m!x(q9adM z48dpZ8hH3+qHH1JbS93gipOi6Yj#(np8SIEn&<$JIJs*nnV_l5SZO&HY7x6Fi~)go zF6`?9YzrL{i$QK(3UFY1g5v^QvGqy&I=VfUU_CJOFniLtwN-c&>xbmJ^v0*^+rbK% z{@K|!%qm1Hv55>7d6|<|0sI7gtzY8X0s$3OooG#d3zP)3wpuJ7^}GOKH)>+x>#+ii zM77(7x)dE%NQXXk_8I*`N5R?jj_dd>8h^EG^JgtI`0Hq-L?r8Z?EtPPY8NY*)Pr(n zRolX;*SE*lt1i?Y1gy!r@}m@(uG`uAGusQ!|+lN_H<`tUl`CSnPZ&W8<~f4 zU5y#^ua1@Loq%xOB)yXD<-W0J_36X0Tjgo3G?H?LkNB1m&ybH&DElwwVrMcI7EYba z%`eZr+7cHi91|#OaBIsP|!wWwM2;=V`LMWwqoq>%Kttj z+hA2M!YIBeHkdr^Q9wIYTmqdDu&D8e4QjHH6lILcc1MK_9ojw$rX*#a)VW05H6J{_ z#``)ECTOnNhXrMv0tl+bhHG7-A_;1Yqs3Dp`vLf`33>+h0n0@^Lu`;(8iCuANO7l$PeKLlrFyrUs^y@)_rXktO6t-z?$tL{9I3WSp%`jg7w{Fcp~9N~OOs zntwB$iaYK;RiX}{Tt}`HV`361|H5h?1~;Nl=1vK}N_tpL$CD7l;T*2NXuzLA>oa*# zoOmp3zpHIhfLK2flVw&i1-Y}hX2AQtkM@7M3s-LHKY;|bw0Dafg9cN$JkFR#QJjBk zJ={)soUxH_K$0aCrA2+xV#m%P*RIsqnLhh8csFs@aTQgb#{?W0QfboUjvRhcBJrs6CAc^0^ZcOu?M$l+$)d?gY>5(l`#(l&^zm99X%40^Rdfb|{9q zaIpUh<_L+&hqx1ZVCFx|g>H3WwQhx2K1x{T_V^XpKOPsi+x6fKkgM;x#R*!hi7a17 zHv$2% zwY9bN$0HGFJ?fq2#Z+kb^SS}#ghKtqhiv1~<@ITsp3j%(-w#JB zGjg~t;56U*Xv-@1#E<}RyziTR%uO+MCmhN8He(uwN1oSYQVL^PJq3Yy3#bv8SCgH% zB3&82GX?|A?KtjxGdjJbO)Ne}(J&qn?9o9{c28YwjKM35zU2m z>L90GydqnE_s7*KB&HjVKI0ySN1eBxf#7gTB&9~0jS;(1cv6Rof#cGQMm+%x4fqX& zuY~}}N)XR#9oVAw*@|@ms_$SX&YPdh@Uly(V?h#>x(kD1l3-2Z$ZIu1M-x=^r`jx-w3OLbPGm)?G=FN#^YLR56z1#-Eg-DA zk;jt~gUnU^2%oY-*7#P`CATz|TpqEG)?=L3(V5h8S2effB#VC$(Z%+Ga3SeH_bHdYV{PY4`8W-7dadj}iiQ2LC9*gSqv=$ui^VM7#?0M^@OUI0sH=EaYj zZY;_hkz9PPs?uS_aKmkHeTqf`&&#(ic#XZU?~38~=4rT^e^4`mcjCIu7tJguO#jn2 zIx4H+)8pgIb5YVj>~+j`UeCY`COyc6CuiFW(lBI=?h3rusvl1RUxrQ5QtEDA%XzDtd+YQ8kbKO3W&AfNDcc>G+tJ7{wV*?hdLY4+)k zjHUFs`GvNw&j2Vf0{6uxWpDr&FC7gs3+kF}V~!4r?m&QNr~-WyQ;h=lc*r2#l39)g z9X{T;PgGMQO&7~-O0Vz2qEnOyIpP_NIY#J`kRyPt%U?s|wM_uGj!8!G)#+!tE4gQw z{c_&mT4F4}O{ty}s7HL#WlL*$v&1}DX=01M{j*eh#Zf8=-DMg3CBE0t*cC!8tm zKxam8Aea#ED(#6|?dO5N7!&D<0U93q(Oght7A) zNL{Dxj~V!njR-_9;(iU!e=+}Z+mCuAMiBbu*`V7lxb%~n#lN4|{!8;72;>l)AjoqH zRur18vm<)YZ8Ez-VdNX|H?N1CP;v(+peR~D5}qbNI8$O&M&1ig38ib-WOB7(uZj~` zKw7dyL7vmyY)XwWdPj-!8a*ov=Cs;jk+j@KD%Dn@$NJ!;VQd6<%08i8C0IcQhAkf7 zWl?%+WIsmDj9dRpo;UY$t_DyPYEK$Yw}z*W0~Nq~CBUTqrtK?& z2LdYBzsGq0$IHilI7Hkyu(#T$*nlTfFw8m}&$GXMfYILKDeY647b;Y+gP&jV*iCzh zM4(K_xJfSJ*Os|1H&f)C*nWSVHPvSi{#JU|#%H(*Bih4wD4*TJ%2~JOYJ;#VF@>n?b-pqn#!K|cT zNLI_=wnx>DFCnG0X)?RL`J|Q$u#WZnoOdykAJe_o3?>t8E7QVim=L1Dh}y zi68N(z>ys=8$ZLXxL7c+QqiEVskwoEhA3O0zN7FRNbMpLac*-?IGTRAjeG=9B{wha z?M!11ITe@4;ci)M$&`4{y~G_(ToW23r+pnB*!k@Ka8vh;z8iQxnUm^lm`!Rv|tp^c3*q$d{ zE@2!r_wKqp%J$?8BI#A=LixR7zN)@MSW5WC8?Up`ynv8%#xdvotJ)sICN%r;YOAMC zL`EKq*_;dOeSSBWlA&J^MAPpq4^1-@HJhY{=I|V&~z^XBJ7e_tZTcn9PN?KO$7MKau#q)C+6& z;=-rrH$`R4P?`GFY*w?Q=Q@{D<~%jGW%~jm@Y(3oTO$iOzhD`OU72e;6RN&GkD*6)+W^qTPkHcm0f-?)b;W`z3_7;s_>!{FEAl+fEmDZJB*}w^cgg zoo4NQj1w7-893b(;J*pY_F`d$-1Hh4NJg!1-~%~u`OjLm|ER?21eH|2{Ha@z02pYR+Sjb1*! zx_(IK>QH^^Iu+I+mQtZxg&K640e0uNjN2QmrTh1y7z8X4P*I{}yy&n@<8Q>&ZyjStwZfH)pb*8RQlN2R9M8Yl$^HC&TzvNfNoJ@$P3Yf>`-6fU7Lcp8S z!d|4y_B^#k|LtKX*>RqfwB$9`t`3hR7)v*2PqfwZi0)-7{5n&#=Oclw)V76PA%y-3 zpvM$4Lc5|$BnH;5ckwXM=5k&}vcwHXk7@I4K9QnGHZU70pARhd4B3i;bqx1EmcQpH z0&7z*JL)R4?;+yrX7f#7=b)W4Cv>jcBO1zHur(A7*G|@&w-hzC`=Ja68C6ahzDD;g z70=%^<8xCG%aIcr#G7f+)?eLqSoJPrXA#B-^XZxjn#v11Jnif$z2q0QA-7X=wMe@felw@<$6;bu0L^LJ>;;&^THmgjCMU*Ju?eAmT4)MWpS&^kZ~)YqI!N`c)v83-BD zmfED{Fy!XJH$J~~_Ky6zaDsmDYdl=*lMJT&8q@dvdse5yKV`1_^JM!5C5EjXTs~PA z|D*qv=#`Wp<^^SEQANU`&Z|i^C2hGRdJPGU7w*!nAHI8g^@lkeCc8P<**35_C(({1 zF3XFxgdhbNN9qdPEuPgi|Ew}*cP7A7&QPqBY;!gRC&ggKzhr#O9XKCJ0;e!gzii0; z;BM2EF;M*d#Km$j(|0-d0kvge_1p$D&7bLr&iQ$zrM6^U;sW!VxBIbuX04n zf$q2WxHVm!`z-^Z`=L9m1nFPaL13-iH>C|y)?tP2g9aEazWfRS!w83xQA%Uo$*Cpi zR)Mz)gX=CQGt=_S=2CaD#P}cYe(gaQusLWBR*`d!H;#fo-TmBn+QB0r;U~aF>IN5a zI{kRrb3$~;TS2SAS^9xh*4}_cN}X#&TkC6amqSNJLdXT7}%_pO)>*soj?9^f#YGey_k-lmn z{f~a$L;D^JbZ`Ds5=DTDJlg(obb{Ye`Lmx*ks&=p_>aYj0AvLrxGD@TKpUS{UujBa9sS|N59&c}#72r>Ujm-gGO z3#{2(EiM61PXPh%&X1Sl+iZ);8@6@k^KVJ|?;d}9<2m(5pA0?j9nK4c)hB%FpdV(A zq7No8AV5!`|5Onbg@Z1RS8G5{o?PQG>pve^@!PtpeaQrMkKq^k)6gdfS{^C1erAkB zzWBE#?#HYsBjCvqAR>lm+bpJ_Tf zO!V#{VO+F+iqtFyASa;FqJRTo5;8Qj_+S|5|GsR)lt41FlcdIeD_!0Cc3iOe62eRz zi5Zor&3a#z>gvhJH#0f8-VbpToi26yz|M?pvWL6Ss+eorJTjDL)mpd$0-lQ=$-i^*C8PT3jFF1fz9 zfg<*-X4PQu3*~7RFh6(Ewy)PkIzk{hbo(hN1M2_64WqwGK2unaD8l_-C}j>irMUK? zA9L>uaki^%N8!mKH@|3s)!gY##fkUGoLlM781)E?gqb{yWVVzn8@uGQ`QJb64&>ED z9Yi*eEsZO`hNmBAF6omTGym&9_}^C)`0Z;Va|JTuTa^EEeYJv-a@MqD*rU5fw6wRm z=l|{UugfFF7C4!0$?xUj%lrI~djnj#Y8eUTpWE1r{EG%PjiDI!y^D3f zbnIq-6Io~2SYMvaZM4(XRyGgMQ~t3hO4$JE&kw`H$jOsd|lYHRW_=-ExSi#A+PmcZL&8|yxNI23X>g3%blg2 z9Oj`A*J_Hc`6f9U%Q@UyKO-fAHBQ`&bMke754-Gb;AxIswENWhdQ#P|50E8j#Kxox zwSeDgUrC0;NGs+xKH{fm7%Xyus>C<=E(pF(Y zzB>{Y4!OwxcWwV=8T@@nA^7YVnr+LMyuC~YOzBvb(nl*~;TZWNZSF68u)f zI$Hb<-%%y~^X-zMQwJNk$ZhmvlC>(`L~Xt;_VLU*pb)d1*DbCo;(uRpY(uu%lh4jX zuyu0r-K6S}!f1NQ=90>1fQrm#ZsYwVWA_64P72@b8;Q=Jx*Yvr5|pN|tK<%`vKZUjBE4(_~(BT=dtw!b>uC!A#<&PlFO^W0QWF zeds`6m6Yo2Kck7%Iz5kd$QB&75oDyap)m;*xtbkN4faAg{<`kG@SPgjptn#tzVbmJ zF`U;k8ZTRD*~yQ4-h!c)uh;CUoI&$A%gPvgq@54DEXd8N*b4hRMM3d_e>~*J%yrQ{&kniczD3w=K{hhu>Gjsd1xHUY3)U z)DyF3*x)t(|FmTPdlQ^|7I;(}bF(i%oz-A2Yrb93DYixNKTG((maJ1c=!K&G6t5eP zK^A-aVS;-a=Ir`2$^_Z}x2ZaPfv68B+2_ep37l%tUTVK@h^-UlX`$p)n~(1FK4>2Y zdmsEZdS8-kX7+p9MyEp1C^Ub+GCIk9Db(uX*RKHIV?(D2^bIRELQqoo0e=0+-EIR*0u_{L?Q`|9^Y8>)&1Z#pNwxE!O zvMg;(wiXf-diE;w9HnC5Soez}hegc$~ zj|p#11NN0ULjip>2Z!k--Y)!5QnxLn^4KRToyU{KWh`IPT~7NKju)B%a+uI5UibvZ z2!S$-ddaT!N;;w629CzBhUj)@)y^IVMl7S1eo7eyFP7(Y)Pu4~4t5lEQd z8Zh+{RcbRRBL?}CM#1-R?xKi!k`+o?#z7T9-d84^@@*`YpW?~2jeER?V&9?-+ME)1?ZO*xKDoYr9E$sdv<2z88r{4J)-|KEd4 z7>R^f`$gb6?da*KR^@DjJxjzzPF$J&((r|)5D0POs?Yyr)3ORO8tc#Rc=7ezriCh6 z`eT}%`TvCfe`EvcexR!^!wZ({Gd8Iy!GBsRgaJrBFEqIA;+1HhsMgm0f{joXyfZk9 z>*Rk(m_J~!o1OO>ocTRr{?%>xS&3VNt^IUi#%%4v(#P%^_xUBJgSfzZ_jl$Cj50&% z7jD0cRC{dWasjWDpN>W?b0b4FhPPL#rCat2GI{w*S{Ktsh>DC{XORh=YEA2~s38@G z9BQVYoAz=!!*9ISpf5iD!i{)0$HVi6%dELQSt(4nU`braB8A=LfJ!DzRv}|T22%c$?bA+)>roRxZoWCE$9oFnh_&VMXmwCla(qu#U|bYTp=12W2nz4q`{kOR)v{Nh{ADUge7%Mo-IKr1Wd6 z3N@`!rV59vl0i(%2173!5y|L{Fc%kAQuoQhDuGvmPtp`ys%pNgY!I!1e-yei$-@=B zSe8*BMR+c(X?In#TLc;;qDEY21r~hryDDN+g3eVo%(Lm&0y)Z?BO3k?`Ci#dlavM^ zO$i=LHO?yWR~RK0J@X%Ft1CTJr@-BX9DK1t%PxY0eay&Ub`4iWCwL-d3y}w;t zbV+^JnJ!250HJAjPa%WIw}V$_o*6q8GN!Z=n|9E=9LouKYYDaTw84y z?b`ySp*U%Acc(ys;_g-)g1ftWks`%{7YhY~yM^LKiWYZwcXv2>&)M>R-~OF_x7NDJ zP1dvK9COU^zZ*eOxO%VT)hTb_L#piC7cTOl?~4Jj{@|)^PLR#eC)myF_eJ*pr@sE4 zkz-%)%&n9pW^lu40S|B7ma7tTtr+JKs&`*5phMhrnkXk#W2R=7E5c@CzU};Wk>=^J?y7xVF z>5Fnw$60aEN8PFe_7V5-V9uuS$20nOGX49nWtVI7X)VPFti_{WhXxCb`G{Du*)sA@ z9Pc;MT!{wk{{D<-wl1k&7z=8nuDx`em*&lNaI)b~yau{a$05b3)9GU#Eo;yii+_ny zpEMJY6*yEyYbg)AR~qJ~E+L_AgnI4Tai5G1M+#_Vmlw))kA=yOcwdS-224`q804C< z?c&`lRiJ<+f_cS9&T8x?0?DEI7@{ABBYA&x5Vh5?yp>DZ|F* zo(Ano1w3#u(RF(h0*FeK7V^R|7RsAR8`6$hi82@>6_OfYu-s%z?NNNncx}md8rbqI zZ2EtUGD?z;z>97Hfjc4B>oGevkvEy{5ynYm*>!`%^LCy>XAv>qFZZ4)WNB5$?F`*n zJyZfm$+3Pgo_|Tl%X5_4>SRtEq`9Y{?>5dRZq(H9i~f#}gP6wLC^WM&IhsZ&ury&M zSH#HFZfD?{&&pJ(Cu*kZrjS~xw9b`KwJldl{cc?HEa}|;_~gw1e5r- zO}E$;-hfK@;28pNo%Vc;(+Di%$ld1xBVQu+JqoY0+o7zWQQZ&hFQi#9Nq%=k)z1T- zB6L+69@em&bDevPPsOd3DjQnY>}96&5?4^A33?=X{ShZ+lT+(%Vi%n#eCn+76V@4S zh7g0A*f!c7Uk?FS?UqAdi^s?2XPeZz4eBna?u-%@XL0jMv;d#ZN>U>xG4>5Q)lq8yFQr^5yI>6240)fR4eBTH zxmn7}oH)Q>u+Xbh_OUgYc}!k2ar)*|NtaG`XApV2tpJ`XAL!SUnR(CCe|3icaT_H` zj>C@^r5=sIK%O6&vQ#I~&R>E7)5vW@deC(Vb*eYqJ zb+^!K?Z^T*rD64f_4@TTt@^XIe>DfL^uuK&|Li5yC;wgcKK^js-AB>v+>7XOb4+Ki zN}W?XBGl`$0ff~x&tPDp&y%uD2fQTmZ#LFiZ47u8a8V$?QKb_ZiuehzEMio()Ocu2 zkP(^J1fg;-t5mTqUm^Nl&}hx^HaZ-PHT5!WzH#%v!QnUQ8UU_Dqj)pYjem*x9l8pV zDV9^R*fK+O?>E(u1eGUQNK6JJF|k1h3g=ZrWs`A=L*pZ4R{?fdKhFoEpTu&EfQdj& zD-FMII^!AV9~1{7RX=P+)+G$Q(-VIlC{T z=!2Wx7Af{yAz92Nqbv+~j0ZHo1dAC=BGA`}G~)(a!I3 z#g;J_9j=*NuYG=+_!+|UzE_)1%I>@7iNvuBQTri@iJgjj-~3^$0=1{oF2u?tJClyq z8A`{0^33H-%Jw1;!K`XRGfY#hC48bMCXQMWytcZETL~4^93D~g1v9T-L31=6_nhbS zzn2LALO@WL6BU6#ARe9Or4Mh)t#^tMBH7uD4=0BAtV0tvmH{97D4lJTv*6PIpz{#C*L>rH~B0zw=9Zg-lm7-m%d+1L?6C=p&hQsWmjiIX|_ z^mKY@mO?T6A^qYv>wEG4?D_v^>GMBSv;S9_dBtJu;IepcA@Mgf^b@N~s*FM;2`hV@ z7)HoP&61?dTOL7Pb7kefvrli4?S9Q$IJO=B0VVLA5x)i4Q$}v1E={*x;qW^yrFm?S zG|a=2ZOb%jSwuZi^u8DU8%oIo>4K-}p z&s;_vW#QMj`tX&DheGqGg6$KvMwgV)L8WFJuhkFv;v;c_ClBArxej5K?K|U~8^}`9 z>VoVg4CF5;M;-%j+ zyD`}l1@@(_eg5q4?$uM>F=Q|@c*C{Rd)*6Yu|wy6h14WE^`7e&|g+vq^~^<|xkB`f3m z$*D8;D}NkRb=kC<$A>U=Iu&3T%Ml_i`1oA+C3*se9qKK|P8|q8V~jv8v4JS(W#sgYQUEvVXu9FE=x{Y-u02lPy60re!RaY7WWD z_g3P(wwuEeL{51l>3xF-5?;*vMkW$wwrdLd)mcPy)c&$hj&M#R`=59ALb`#nWzgkd zQm_)L4OOd+8A(|!YfDK?>lOZ>d%*e6_fGO9K2(`^6c%u@Y?u|}@v$--kUIP+J`|F6hKPU+MF zkTBUfqr{u|mvr*acT9i|3jlP8N%Ti8p8kAAFdqIsDix?oyfEE*0X5K%WigNb->Pba z2zn4&PLT#u#&R{v!s3!89_xx36NRp*2TnX4vyL7XL8;_sb%Kl=IDIp3|a@|Jj`(?&bg);I$zCTsz87#nH)P)JASy1pGP1K;l=vLkotY(PLo zAfoeB60NYSc0Urlo{uuHDox_WpNdNDqeb^=3?P=7k<}r((JVaNE+nmAz!Wx5%<6cg zKTlj2`#Rv0MD1Vd#-O0Iz(L_O^haw}GK=Y3gMjcmp8Yo?U;850-9b|33nEMn{3 z=k*^v7Ze{z*^8P#$QUq8OO)D{QkMh z;Wj$Vnj6wNdth+V^&9ThUdM{xcdYUHhK*|i&2~pR$L4jV`lP~=7J0*+<8wwCf{-36 zW3AF9&X$>g+gmCRnWK6E%ro{3HV)8Kgyv@RA^N#bbM>ONzeJy?UuLu4ej2R-?1Rt4 z;TPSx=anPjnykbwZrZ}6eHZkrA45!s6Ah?pR31aqsD~xVL@i4qdgv4a2bK$nPmW^U zUAZks%e9WF{u`qX*f=|t!e;TLo|Jz2WvCQeoZAa-PfFuaP&tdw62je&Z=Hw|RL@hdQQVZMNW@q*ZokzB^TpOI)?uvVlAR+wrpbhkH7cQp3Ld972n3{1iaQMx5 zLJNKa-gl29RJMA&hHFqeU`rZxRgh(>m;c*B)M-YW=x#h-Au0)Y&DQ}Xg&2QNM>12@;w8&=!`hV)a&xcODK!5cIunQLXoXtXAvo3cGf#aEg>4;nBqnKa*}JSwk{t~ zz2C2g!_qHrlIQk=NY0j7l$-3E%b%5VOGI@ihG?^3noIa=n1lG1 zS>#2S*9Gxc!q9rIWVnnxZn&wZmik*l!vEZ#(A2c28AsjE7FT*!%_^Y6D22yi!udX3b)k93B1FZi!0go^iA>* zyGjz5Tqbl==UVXYC1-~f6m&8Ockbm1uVQ0oRlOJ8O)QVHC@I|E8Q);(XsrBDc}*^K zJab#!RN9Md5$0ci2U?(IIpRN(ZaevYx~vMOTX5FR<8I@fp~CT6{%*5@hArFoo;y>n z!8eKp<~&8XQ0@A+fb06~aqC1R&CB40ufT8ha75$WY+iR@PG?_NeoLc1uf(V98>lCM z_R@cVhnzrpr`I0j{<*bm0;Ew`<^#EW=y4MzKH=2x)~g?@Dd)WE)oXTFd$}K@CfFcS zn;zs(u&swp_NpHBw4=;G|gQ(mOtMcz|qZ4Dv3X_qme>Q0(FieZ(y?f^Qokp8dE^YSY^Cutm z!5c1DPNW4W2fh^HrYn5xq2~9WywUceH*#sU;&?<-&?J=1H2iSc0&~`5vbohV<9b>i37UK-(b@ zQt!TfCz4L@bsDpdP&+lvR_xL6&vwPq>nzX>u^EUguhLAN(c2Ut5I8+GwdelZ%*WF+ zt|4C5TN#HDg`%9FypfAzFs%}g9j8FY`e0k9`9>4{{i<4g^=#?+rhc&L9+qGmQGW`)jAj2VN3X>% zNn1XEXlY(!H|4R$llP9w)X>nOXwB6M7KCRS5kVDHLL~)B_&ORSZ%TrX87|(+B_kKBkZ7To zENh371b-yZuua?hsQcQQgIa{Ud&AV-uamDS>87uU?e&P*RFGSWRHglwR>lNJq^Ld+v%T#+pp$CpCc+YfA=76jjB~PY~=#Vy!Q+~)HV?=(uGCr;a0{lXA2c?waJ?dDKU)H z+yF1%#cQZtF?Y(YAo#{bbeHn`*f-9meOp7Jvr=oTde2iQ(!#x;G+4ZS<(C_v@&Ow^ zVY>`$Z#uwZ6r&(k{iA_f(D!m*Cr@kSmN{|xusU&C@++3M#@4A2N1lty46sC+OZTP; zB+c=`fXULQ3{Xyq(}2sxs=i=nqq^)GUp_eL4MzcR|LD2VI|wY9=nMdzP!cAN2C>Kf zpzxsA75wI8%Vfj*ARD-y>%ia%^Ecmcf$$kcm1#C6u)I5*PT>ZQXc8}U+gc|`#S1`n zxjsY6y&a26Fk#kq#QYpaf7;-=?&((en}sNr_PfgRAbv@|LKI9r+1QOSuF_;?CcW^nbd_3_IRao$Hb0%kCdEt?kj=#Qyyi zCf6o|G8<}ZXZn9AwF24L0PfixR{~{=xosb5{**`D3*+tTzK0#$hP&EM(4Fl`^cqX8 zN4~LTo99lL%-L!v#p=mQOW_46QA^VRYb zUXhvID>|ya(En2>SiO`aSD-xqtv8BfWUiigm~Lx0v21Ir$(l+B5h5ZZs9o#m@{j>e zzF{%v&FSZ1N#Db~7dYj#&76UrbNX95NX4gqJwA4z%NE7x$6?RdVBP)^sVqj0$G0Nh z8#Ib+{VqY5lVBK_1r^3R`VsxDB^7M)DJBc&i_Ur-Z**J~np)BhsbWj8A~~3=mmj-# zwHuRz1nIYkDk2%(ffXg>k)2yZqAcj+EK}$3C*Z2w3?rMJsp&==rZX7aGCNeMUzBlY z`gqYK*8IvgCEZ-Ul})FnyFm{%bX6t3>bIAZ)0d;%!Ae&F77iIecVTS8JQTqlP7xU}#R8Wz{Gwwjueu!2N( zgajQEb)d7d_}%;EfImsL{niXNDvtARBm1K+8!SG6K3m!A1OSKz8)xClIha0#n^kP` zmkij_k$(l`v$gld41(buage-ttT*;B=w-dww5eFl`(@$`*?;@2FAKq-5(oFf>Ug#YHEWs+9O|R?}Fh1 z$sVIgF(FIpXr@%a4=G)|aPMd}paR#145ieO;JJ!5OPm3I{(;WetI*D3`Z%x%CuCmCr8bI86`dr0#Ll|`7AY>b*ctWk2xz*f5rP5+4PuV)MVU)iHpt9Dt!8VinhuLxpk5W$;>Z>EG!OfA^}vu z2@ma&EJRRnb9sC3NwU#U&8eNvyDYDy#CxWVZ%I2^5v}s6+IxFw<;Ei!<=xOvOarWIPWa9idM0vA9 zK$a-2>wQNYZ#fW2<3~@GTlsGD33Az8qR8>BuHWN}X+IXkDPP?FPjC-?KvLG`s(-GA zflSn(k9}_C5Jp@i8X6FWi+~e(+$V)6Q$|(p%~D=5rZ%#|`Qge|a707mt3rL5EP!8j zjv=(~=*eGGpW>vhBt!NIKtac5E0fd_;f0txpe)~Njm=l8(JxE-^eK$?N?$(ZSm7Xz zy>RDaPln2#m&_AS;ntLGPI2{kuNVQH`ic1YxXyIANu$Tqn=J8tOT?zIPjeT}|7EfJ zx0z{&5n=YtElCLWp$?&Ik zrQV&KE=bX0&XuW-I=hchJl*eUJ+EP|JfzvqQ?xq_7aMS@o7d0tS+RXXiV1^o_s@aGO26O+XYbFw8I9NiB0FtY}~JD18*5zTLAoxHFlTlUwD zIkC9Fmpjt8%2{CSy|=5&<@tdW&f^vc*l7n?AFNTm4!Z}L%!r&ukcZu^`gH;0efbbD zLEm4juz1N<)tODvR-8D#4mGP?Hl4+MOmsO(|g99iVwvT;o2Fw^IVi zKh8-sPZ*>$Ugq%|4LI!vDuEL!<>SY+G1|@$lTOjz?-$&C&JgaFKA7r#KhOeg6Jjr5 zZ!D$KK?Y&VqGG=j?1;4ANf2WHWNEjuS>^Bh@Z^CC9rZ@bpm1c%K&lG$lf6AjE$qeJ zYA!1?hj9(lb+fyydeeYaH8`^N4VxBeub4ThrB=$DA$2)adDF!w;-mSbHDOad)eLMF zTWjzH+|QhpsyTg4EQAlq9<+*Vq=qb~?t=0|;)miHg_4K&lTV)X?MdjGQ93IqKIDlz z!tQ+Jw@vgG(duua_?_Pjq1 zf~slQbF9o;Z0!5;_hRt!{=moL404d;ps+|#=2j2o?VjqQ6jb^!>*^yt`31#SR z;?6J3RC?C%`6w2pmt*xNpJ1l8WA!g|9~!HrDf9p>ytL~eDjQs~zn;DP>c2jwTc+#a zKoP?;EzIC9H^S{FkYZVSsWHWQB~1Od(G#yIPRD&mc0zb`gaUdXD78%K;B`pa>_6fW z2oohU!$Hj2MositnJaJmOf^o`;Mo@kCPZNs*R7&KO1q44HugQ}Ac4J*UP+Q%yk05; zTVGtFwpfZmNTz=AF4MC8p`=NjtUR@g4>i-((rPM2dlN5J`0Y;~FywkJd$A;c|DlXV z_IK@=#r6!-7rm}H@61Y-*;Y`HK zv3nBlIz@4Y$m%VK*H2MARMd*5SzsqN;&#_EP~_^>{%w}f>9j@T%SlE;^%s(OX|(_7 zBb7cO%(_B~%XcLX-f#U&CU!dfM?0=I#Z~)XW0?QpycI+Gp^XZhQ2?`h_fRtl_Ytt^ zH4iV>9m(nPXx77Iy`ebqWhIdvxQh5S^ask0jk95-#0`bg*V>X2)gM*xXqUE`=FbSb zPALJ!7o6F5W#ypy0fWIBf=RYc)IQB$gz2V&AUI!zZtwJG72hFiF*W~ z_HXhfz8Jpr@Ngs3D*w+cfVxAQ@YegON)H?|A7lv4x!MTg2-qvKdF~Q^3^|&wmv=Ag*T+VGZhV_!82($H z$a};$p!fP@#S)&$zOz`R@UYHjprTc#Z7h7_D!gOAt(JXXXSgFUBmNbtI|db|{*pr3 z{&+rkI4;jtPxiEH;d{FlEYdq zt<+U%%YDaA90Th7d9s#)HPKXnJZ0OmQ`gKPoaU?au)B_SeGy|`Hv@rS_zu|`9QX%$ z1n!Qmd0$0AN4#^2^}PxXzYCFnWO<|XwMu*R z=~ZVe<{Orta(w1CTEEIJrd-f9#C^clLUhnuxvzGyDCJ_<({uKRm24dGtf^<@ z?Zs?7;&szA4Xoa>-u*i`ZNkg7Bkkab?4+&#UUMKXr$rFh**Y;N(VrGNOLdLQz8WZc zYg~L03^13MXMw@;7w+q#FWq#Y64+tK1bjxG%EUDkH{iE-U*u!>*-OsaaQfsRii|vm zJdUMQh}=}lKgua9lm;fKDX`*Z!>!(6$C4SVn%?|?Do69afKIykPi<4wEzgs^V zz*x7qayT?yO@z~R>{P~v1qPSs0wP4f$OcN)aQxA zlRzJ&Tw~3EivU?`Ncv>$$;3l>ZIO9i{iT=68x(iN#{|-%RzIcB-GlW)-B@F=&9q%_ zg6lO(#LYj}^&7oX5LoY+$`yFxeBQWtzwE~sWI$$;y;;>Jl3AmTI|sCuuNKAPs1}PC zqNZ!#I~zelAEQk=@)(^xz>mdGkx?KZS~(IdP=21%4Q{z>h)~cU8{bELv&>`F-llO! z&L#$Eb@if)YA-EL41h&{zdZG*WQXGoF6m3lhT*Zo2uL-@XqCDONTId%*^QEMl@nFJ^!HsnQ&e0te`K3z4$d;z}{)aPXtIe+|E_l4IvBZ=7 zDsT!}NE1&X<2ZyxO)9PE_NhZ*8>m(ITyJ6;~D#Aql-qs_QcgjAvV z>_+M6=s70hU6cUI-U#;oEi#-MpwR#NBRBlju-g49;ADv9Pp~iG`7Ed~Nt#|hqS(Gb znU3RbRgyGY(hVNoEZPB|y2&0*gq$|X3mo%L?nOHl?Hw|#Xa8%Utwe(`bTWG}C$01? zcBm2$toQq`>s$Z& z?SFiJI~WM?GgoJO!eP(MOm;IS)};A^WYI6TBPriONv-*kvG4BR+clR?cHjWBK4&nr(44658yt{#b8ILBruaqiNqLm4X5d& z$QC814mB5~0J9q_e6ldBgK#6ds0F{2G8?+8>sP>^G$9 z%NrhZ`|#2~;#PxE_Jikv4@mn7H5*x1reqJl27eCM%wks(2oDQpBie_+-gcn3bcDb# z#|Tc6^$OA9*q`xbIM9q=DEo1fZb?Rx$bma^>^c5*EEZ4T22a4!@?}AGy&)W)Tw-wJ z?LVqav1j19{Be;;fI>sxc8TCCYLEF-s*W1m4T;A8n)Yf79L2+2oK(N#9-_I(^Z&*&xAOczW=h7m-C}yQ!N? z1m<}Zsm(SF_?~WtX3Z^GE@)O%^Gjn4pn8=8tjDRiPSxm;xN1RP6~4i-UG>Sbd*gXD zEtNtCe!7N7b-^vqTlcB+v5UW!>K#)_;v1TsX)GeW-l>jh&nsB0H_{W~05|Mh5`amOB<{tgN+K>u!NtsJ_V5CVmlr9lZ;XybyC4UJ>|fAl z9#pvX!M(iW(WUySTuL3C>G83bK?$&0`NZUeL*<;xm!vqD&$^1BYYcae?W4N(JVM7{ zIqHXAP1CIT@Ugd?a@Bqw++T3bHh2@h*iGSFSd)l@K74nFvmP{+&@qP@ej?bL>iKT? z95WWh#o0a5>U3WX)=W zlacLaoSItOmq>Ob6upU`LbZFWWSL*!tv5lwU;o6<_ZSqDA+hn9d1UlvgH-7iH(ft% zIJqGrfnUl;X>(by`L<{biBgO$nNjSUa?nFVJG|S*6tEx|e=snuXww@H}-=gO3Z7Lh>N} zpk8oG-_nPV7AqUn?%_z68ByKuc$?SlWj=XbR-kB54-yU}<>4)AthBn;lB)gqx0~$P1>Rna16?kdH;7AxrIfMj_8-#7$^Pwu zD#U$lmoqEx_0p@E-%CYupi^K`%bR?^#~^)Qoq!HQI27o`dGx08k3b*cBsK{IZ1o&x z)R&SBAv-bOk=g1&nrW{nC}6C1+;$9{S2%|hyGlC2M_3PU_p0Jf%ckZcV_=6&FGd$8 z!kMVosN)x1+%ZQ)bHqSAU(~azv)FyAF(Yw|nyRx=p(^;5i*MYysNtnHpdI{Dz3x)7 zu7>MY5QD@|eT1y{cs$%)8QhXcoX#hLN0Z|B+~!t+8$5xjKws2vMNj49|drl02kp?sP`2B~Qq ziCI?y=Us>60;wB&|MkU<`0a`s^brL=W%>||ZRz8rAfK0BZU`IjDP){3M{%KLa(4Rz zJ$<=9FZ{H&V8YgVD!1U$gRGmACqH9XwSak2A76szQ|w6zpcpb%?M9CV;*+1I;Gx;# z&wHut(2yVkrDBbs0Oao-9TWt#^G}Z>kAFvg?HbJn)kOw{;&I9d;tPQP@J1{2y^~-@ zBgYqy=;A`~KAf)~47j#j*?hoHCU?&@1k3Xcn}(W@`S(W&xHg7*eP6~mioR# zjg#$$uZ{a|O%fQ=(SD0};z31R^D&mEwj2++YccKeq;43Sfvixwkoe{YC z8QCvHsYN2>0iH>0#};rF)f!tg;n{kifB)3f3Xfv(RNWmNHL_WiPeCnIG)jUhnHEuf z6~(Dq(DHFtR172v2KH(^K%AxWRI(FTb~juzU(?Zil~aeEZn;o3VN0a?ETdwfh5@0-3I3w z97WPWWFB0Gd*9p}1O{f`Sk5#1rwc@#i}iHBc?hZk!~@f?fX(J+62jMem~*33bJqR? zz;%|Ub(L75PHuuk+>b`)Z?bazFQE$f!DHDl@fB(#0c6M1EdkT1+h6-4P=)a?%F-BQ z*Un@vbUk(--Poc!G11;+7H$b_5M0R%jvwfUjmNX?74LWe7zlMK)`tI5H^uX`cYkC( zkLpo&6Qect26$QMx4ESSl8XpsmGH>y_0h22;W&L#%rJ_XDJR#HWLvxWLv|7uREigGPr!#)tT`o zPJ0Ja_a*OsR(1%ZbG>H0FiC{@UJmR->O1&@c!`@9WoBB zfk`o+lQ?(lj11DEDw@yHuVMro#Q`HolQ&IccXmQSBE;wV0OOu7HgTU(NPQ}lUT-r1 zNys-{vVLrCxbM@E*Y0mpiWT{;U*sv&O?>I`LCjT`1w0j`?@>X&O{SU2mlLyqQII;J z&tTbBaE%l+)76CjvRtC=K*6^Vo6(8*^1^mN>d^(W$^DlfnX-G>gitI^D$%nlX#AkE zr;J(|J!9EoU~`A#;74fpGKPEF8KR4&RiR#ZOJurHCb61FOh~_Rm!Z=cE!gC@kWXIX zLB52s0C{WafaZB{0IQbI`=nnb51%NkRf;i+Ni%O?d0xEd6M-*3MGVvzBr&oHCV*cd zG(PVHJ%$DijD-UpMfpDp+JqPO0&&<7{=K8NnneEfDB&YVZrp_Dah;?8f$qKbEzeSl zr`&s+fux(4?E7M^`M{^jm#Mb%1dFAB*hQ97FTeWOY zKPyWAmYdDa=q<+KP2A7wuIf(AO>s@l&VX-dha$82@Z2SM*188gYVz0BwC<5cRBd+|C#JPniRb^3@=t;tOp0FTnG(Q4l>w2u=yY`c>db{S{Mt-3P4ASS?8 z(JWQ%b}GRdodt8zljITprCYUn?aQ{Ih`$l5q7eNoAVGe;zhj)=L-{Ys4h!2WfC>wZ zPUwv#FwYd0+d7dFWmemwYtSz-9$G{|8|-ST2D2aHg*~m34!YNAhg&eRx9PR`vzMF5HViJcOTCccyKuF3isP!}k zpX5OXAH*g{ULHrH)M4t&jKcd;Vt|4jNb}Uy=Yz6Z{l99;M{dmQw<2}#3?EpNdi&du z&urlVV%KEPU4eCh4~{S8K*U;algF;zaM5^}NY-Z*C1l3v&diXHQD@W?Q|s1TXQ4jY z)J*$AVSEU6Q*iieW8u)s)6xx}=2dCbO4moJSAl?TN3X7ft(Yr=hx63-b@ya1Beb6B z(9d||%tEP_q`-CZqbT-J*eix$kDxIZ3I9wH{@^~(?Q|}WZJh%`4*%7lx9?vfSae~N zF#F~{pDp*A*=38;neuu_n?VZ${kG^1O3-0%Kn&VeUQms)wvN?0MR=7$QDSXE;v0ghopCB~vDi4) zTj$MwZVK5F(y0RX={&x*(iD1nQYEOaq$ffu25Rxn*iQ?}L@&9F?LR6m%7AkTo5^;l z*_vK1y9;kzxD2ekDcbIaIgVw_OkzMa_lsy~CK`$FJv4xIbAKl!D6)~pHlZ7o6glN! z=InvIG8Btq+SLj`-x`_@wpcTSNx35YB5CA6jzhq3Dtjh;b8?a8tRKnS8zIb`=Pi+t2L(0UL4YHAX~SL6iA$oE{_RD>DFR_Y?Mre z=i&qBT7ls%)YVTd13N+vzZITJOP-|wKQ=!wVDSO1WkK@{T;fmOjV(eNnpxtNH7O;I zj@A<}o1Lrjni+_9eAWW2N3(o*4%1V>>L!WK9$?|Y@@dBP8pNWy_^&bXDiY;aeau_} z?%>GC&5gNJY(pz#^k(kfq5^kZlL?%m^AzSV~(poVz2 zy_pwg(rP_4XR9^5OE#=-Xg#ubFeD)+c6uOt+JW=9Yo87RpB@a@R^Yj?Brli&r^*sw z!H-e1{d%vjM{nA0T4U!L+OF&yD$5PqJA^KCFnQ;0smSiC7RrC8`;3Iag)~FgPL^M_ z>wk*@vx;{B2xe*5+sTW)4q_BXv^q&ZP1)Z%-3xYpv$(t^n$lNOYT-9^_i5j5Zu?q- zv*c@1iX2A`tJK7r{%|)Nclk8j#FH^4pBcNNT~Ild-Hx#BZR&adVKT^JFJFb49Cj_1 zns~vm`&#mv*XUgz?Mf52@pL;F5QHp<{&VZ^^e^_Rb5ou?6xDn05L>pOy>Q|@9b9oA z>cr8}q%MzV&~zv8GG40&jTXYTH_NY{Iv3L#-8A)22l}Ve&EbrH=y?+z2&Q3wJPmo@ zCC|SDFOF7h;P{rRK<5EeZpbLPl-T0kX}IvZVcqlM$WvybCmh81;OIc!`LGc#{J7H= z*YO=MP@vHNJTbfK#f9-g-T=l#m(f#>6s=V6e!Rp)32 zUO#;JWSO;!5)>ss9)j~x%GfXH7MXzwzwq=DMFmZa)*@Jy>7?g2F85^=KyH3D+Mv#kv{s@-#9Kf$I7K+= z0`HN7M63#qOo_WkrTy;7kp`2QQhACLnjbna19l;AVfuB7%jCe^wfowUYYvkt3$gX4 zgJp6TllIv+paJcT4^o2jG-1<63k^}JDR|YcAt}eluBM;lZ*R4Kda?c5#93$vY)7kp zuy^qpxDurcDBYYo&9z@xv>L1t(rs|S?srRrvwCj4^%?G5`9u=h;jHVH7n9Ro`Y1Y9 zw0@oyzgi%DN05s?C9!r2!8+~j+8&Php7L??$Snuy`17B8lk6t*J$C^Q7k?RQd6`Sy z2D@s8C0%^r54YLejljp=z{^{&5HI+wa`#69ggyK^Rsm3t-%KEkA2Mf2{1V^RWO+zR zLUO?&(#FP!vCJp_6mWdEB+G|7~Ha=ae}>3BE{imr#0$ zmYAyN@8qlv<+z-T z^Jk+V?eL_=-~i7MCyen#9?Wz`Zbt-Ua#@KL2U8~-#W^VX$xY-5x97c?F^tb7PbolW z^zxpt^|`Kh8$Y;{Y^Xaz(h^<4h!muBI0z2?DibSp6&b^%Hx%YhHN~Y2E_RFzQ4fBd zdk3hLCgbD4##lv=L26=3b@g%VbBk`*=VT3j2hCU*q1bngh`|;o+!v@?c;AJi zcyowTf530##${x&v~9e#vzjY8&3fN)w)}SZSL)$(+Yb(EJq)5^ zxVkOfaHOt}rkMc7c@F(`|4%YlgI>kqR(A5L4qp&!(jENhM}3HDzm;$BR@*kb{bq>e zeQNmdPS)^lKx@%JO3$up*6TNc?%Qh%fO44`PE~IhIzi%5q0p7=L!$5<&=M%`>D3WCKj6RrV5P5!&9s&$wm?n>RQy})Xd+gXl#;Yo9M}%*_OA{zOE{98<*5byMkZF$ z3}2c2=qyvGT`hwtVj=Sl<|HAZ$NlZW=irUnUHKC(Ac+Yb%fqa@Wv~6w{dEjOmhxdD zvx&E{W;ZhOxxxo>OjFu6{f{8C@r+CQ<#^A}xF18n@Aq_j>fXL=Gyyuh^<8hXuAUie zhlMY%33-^(!Cb_Cp`T;Q*yvy{@w)F}lJBI@57?nHi9tm~)YsQ%z9BncVtfCYbllPC zaS7vw7j)U6`~f(u=iB*@Yjah}b?_VpGz%a2!R@|0HiXMQWbSxgF+KJgd58P9o43C{ zwp*^>_08KDeyEw{UUpP-^9+ln*ZD}nG1anmeSFhA-)5*_zs};2{Mvcl;So$>EWZ}E z77387*|l^Lxp)NLoYYnLUYFd6y!5}G1L7PecA;Iu=G$36h)g0Gbzmw zCb~>dD7wpg+{6NH?9{HmK-O<6hGD)*G0if&}!CBKj#pc8og%7Xo=l;I;`>>?y z+HvojGpYA&vVkXdP{jueUS?$*K{G)rQ8i!fL-q{=r`=s;>=l@<1^9j6o|K$IJuL$_ zrJ^jDNg>$X?Z+UnFmYoR7m&;0D`9I+k;D8Jp?%rDWwgo%*1&dV2I+sjaZr<$+L@}J zWLl*ax?Ne`Fd^=~+>RDuDdv#q@bOdR@r(_0aM~8ykwIxn z0&j4n;X0kg%23Qz%SqvwwUCPp^f34K5RF0=_2|w_Jl9)~%UcB7Z9qqbw!MFU*Bg3% z0nkStdd9*la41SFNK&?jir@5TBa0=~#<<*nB<*6{#@K#@>0dSx6_Is9@vI+Fd3riM&)!NxHh_>~!y616Rc#C&GF6qeVf_)j` z)4+k)$J6#^6B*>MKkT>C8BiDuwCmyv&u#h$Caj>A4T*5Thg`hc$q)Rf=e+>90-zqS$7 z%1%;l+?QtkCQcFU{!Wq_aoo)}BBo#ik@b&+!#JIfJ=)|s5jy`zx-tiKaRVytSkZ0Z z@3E9qV9wGrSM2tDDs&^AOlU5EqnKKD?_Kd%3mkcZoRGlm6^~1W3T~O*AA9M;=;q*5 zW$LP5xs9GHEZ>jUP?)eULgR)m_L0U87gTK63I@uRV#*G(1+6)_E*xigvQY-?G{jZX z-chXwmL?{U!n1X5N>e^pm?Y}UMh)O?JrRE&Yq;a-{k-}0`Ns!~R5J;Qsis=YqvwxjD`|wTap+{CBm$ux+fOAo3R2wRS- z)Cr&RR1|vf+fOaNu9O<;XGKKiahNW;a?qW{7{!n#nlWNf*9uVbCQvDE&qL?Uk0L0F z9$YC;ZCMuL5?fuPF!WkZ+1v8nfR9K?OY@YoZQvh08FP(BA2^uG!Es)1X5Yk`uFqf! z-QF?&N7%x)*c%{wJ-u+LQFHBjm`aTK9Z|Bo)ml>(yBJk>V)sYM3Xk65XEWI`6Gn^Q z?@#;?r;LxcbHA)DR`FlFjJ60;pvA)7mr9ff+b&jXP_AU|8&c`Cq2N-Vt;b-?xx*mS z;nSAI_5CV6+tudY^~np0u(FLw8On<%ATX&B4{pE?8H?gP`i=?j#&4rD?sw>1xdEg2 z!SJebSowmlP8;g;WLkco``OyILfH1#H-H3E9@_*1^LWq|s#x4lNLX}8m3v%N{wB5j z>3aJ(WCj)^?~;aClJ$ik@wh;+$M1a#hD^;FltP>wr}A0j`iY;Pzx=76-10}yoV)4?@?hXuCrSj4({~fkeXg0pR?y-KT1bwz=0$7-x`a|mG!D_IO_Q! zapB=Vz^~VFqDwW`s=|DNHw$J<-}4EsSMf`OLnYJaOg%8Gf4yKu1+fBOPQfl24 zw=+OKJJ@JeBt|Jbb)SpjBn&@TCC7}YT4{VgMm?qGJ-Zi;eN89L#j2iD#S`;^0?Fe`GNHl3Aw7!hQ@EN zfQ_NXzK=39n;eVo_dh`)nkxtuu9ggDy!nV}G7SzYPPVE(e|917oloRvU958XT(TqC zL=sAUxpJ#aXS9s}7NL8n(NAbnU8`YE>(g%^nXJ-Uq2;UfTG%c)CX%bJW{G@uA2h+Z z#kryv>1(_`=54e~0nVgym!8gSBdUy>$AVHH`)T6;)K7XC6$V|}j|=#CRA3>!JA-Vt z38!PZ#W}82jxKDj#C;JEc0D_Z%ry_FzxYp?{(lj>=PTkr=QSyME?9eLxv&oLiK9P5 zr3Bm;-|1CYeAlyZxZLG$`Sgo- z9l^)ra3}u^&FHQbSc*U{SPdIDJS|%0rLg7UEr_^BVJ&S3C*Hy&6#=l=+6bkQN9l`( zVdeVf1Mc@|9{~OyKHE0VhUT73t8KsrpHmmm86rE1Kx;&O1HfgwE1~ryoA4e9VT1B{ zlCp&zJz)4BrtZaWaE6%as{1jS&sg*{*hq6Qz)N^@zqU*a86d_o9D{+4g+J7AdBkHMI17o33qAJX#}^li>05 zb!w(x7b4v`>}wDOo|=TOyMNQ*f=^b$AzSpHN*xrXXXHHNiiT>W*&WPiR!?T>dKxIe z%l4ED7BWBVa}3rntLyDEXsah=-K2=3Yj;lkXptdl(N8^w?qf*xPGNo7ohEwa$f5S0 zZ$(_V6&l{bi!$CnSO*P-}KY1ZbXjs=(C3-1|c<5NVUt@aWr{8b)!7D#J#=; z;|0M3DU_k&uOPNXK#~AZ{85KUjXTwp?7332Am|8ykM|=BFgryqgw~ry5J!S?C@vJV z{jD{v7rK`K>CQH+*-xD|kCu22;Rv)5i>3mk8Y9^Mu%V@`>N&7 ztgR!`XRnMxpva}H41}R(6#)|u96QDx(uV&y(3mOUPJFz7ybiZN4Zl>;F;z)HCmHED z)()xZ#80}$0?EU$KJW)yy=^*cS#MLNoB&O1yF5|8ZiA{}g^6>hUl+7JUMVSv>#+uF zHY0g`=OL^xeY`?s{=`K_2)X|or;z-j3o6vXkl#{kFoF9+NZWoU2ppgEa{KzS-ppeM zdf5lDlFl1F66hf*7?{m>*gJM25jOt$>1<5u`}(+k#`BY~{Z8rz877@C7r3u#w;Z>} z5nSJroDq517MTlaX%MKwYk6C5CfwCefMkvFJhV&9nCE+9MtKdDK!1Sg;b|K(18oNS zlsiMp&tQN68LzB%|91gt%$p)h+#=c&CMh2&RN`L`nAc$jQD#GJ_N$+LRvvI0#Oz`F zg`J_%3sfszR!S$vkF`@7!zB8q6N?yeNxm^^HONaSb@U`90rEBPPfD=}KWDTkX_v6? zdHma+?on!k1HzS~vTHrd()RHIF)SdlJZ5>q;s`(d2z z0zhHQUQNNuk60%)Y4*)>Zaq#7SkMbM!XDwEq`#|^JXO=|l<1SJ5%{gwm&oSO#rIB?!j|gw?FcdB_-C8KXq~I$-C?aEX<*eK`sz}% z3THo&`s<2S#{kIhc!Y;TFN1b{%0^D%^2zT&#FOlW5n>4d_$%cN8gFRbNbdCwpi1DZ zQT?v=0r}-PZ@9eBZSifaU@`FFL9;BdM|dF)`CeH?<>8%aL=aLW9>mT7O7rwNv-|Qw z_C~OaVlf4D9zdxr1u^?=3j;_Z1XyUeI4wIqQ8ya{_9(;`%fS!d#{;fbRFbh4SoNII z3*W#ss9Kbg6Q|8GP4v-JU4G4?xcrYe?tjyk&kb=3*;4V1M^bTUlWGEvr8Tfn@Ebm4 zAK+W{hdbY5qVT#dlZGD8QSs!vH6a6p%bKUSa9xPUq~UB8_IZuGefRL74)`LNftRUO z{>zXxez0c;NwM%761Z=VJ}ODk@U3U@Hhp-K;Mhg)w?e~GYE*7ybVKjMhx_r@HehIv zF)xe-?cP#3*`|C=202CAg5R2l84A|;yj*79RtW-5@%dI{Lm@c+UBLTBGr{NJMENeNM2xH7>knn?ah5|N zD;}6kaXiub==+%uGldYN=aSoDye{%J#v(oRZQFYjD*i<{Gr)s!GKnhaGnE;cLgutE zn>J*vZ8=gZA>Oy&Gx2KkuF&xMBjZk8J-veeWc0-r${>~+jTyeVf8}rTDNG7sIxMtj zx0iY}yS4#yqFsT{OLQ{QRyv_~yIjJRQWam2T{eH7FsJzYK%p*6BCGIrwAiM^A#Av& z%%mhF?@wd&(F|3X4PG_^u;$L;+*|cvJd4H}xJaaLF%G>oBKC=`!|zkiqN!fB;Cn=s zBPVH3e7YKbMCO+K`Gh6!VTh?{-%dV_MK$PpR!c7_v~?RgA}8Qn z@pg)lw8$)Ux)y(kLKvP(*xaxQeN-A`2&w70y4!%WnNO}%bH7xw6S@fwXRWeGojAnK zuKW8q9!IZWCwkjUzKgRgBxLgH@oGo&ReAAe7Spgzfq+mpgeR|bwQ*Lb$JW-M@6 zRf%Gi3z{%W_PuVtbj{pGU}w_2+LWAABUW~}{;$-U<1Arp!OC?+Yz$1+VX00Q+Bp5U zVlYFv#m2nd$GurE3G12&}C$(Ek{2pyFB4#ce57( zOI1nR`ail#8^w&^u12-MAgNL>d9FV}M!IhVDR8TA%de&eSGnfbCt(-L@H7LYDoU?F zXpE_(>6u67v+l#*3*nkO$*%daeK}bGc+n#gS9wykC|a>4T_Ijq02N^qRt-S^DSh}* z7@;cuwmSPLVb#sNu+D9-Y^JHRUc<}Qy2(lb3jLnvKGTp1%JDK=vnwIOSc1!h})P_S}!OM~&_k$`+ zmcp0BuRkep8Lf2)$N`}Xg_TUOOI50b#b+tZ0Hz*t-@?9mW82!(>5E=mTvD>^+Dj2^ z$%|6rF&$|20OQRjuUjtq&YH+EytUcGI80kQ_F@)73oYD>hWcuI{#}i-{oGS$HO|`S z_zn2#1m|9`s@RiYQZR#e99AW-{YnwmR{J)c$cY>bLIxdaS8c)MR%f8Yyy>1fuKDS0 zQ=8+3Z887u7bNKgw<_R<&U*n_m}qg?y)qK!NP7y{eu#2^`a93>dfotfY_KQnk{;kB ztG7L2y?myEbB5fLb>J{pYOI{sk#hAr#x5UF)i`=P9r{)KJDVxXS6x!FYsCXyrg!mKVELSti(vw5}^4)~FC zLkK>X>fUCp?%v0=?O4al)p zyGzD6$#Le`4(-i?(@F2phBg77+KyU>w`~P2YcLKZp3Y#M?ZT%<4_yk796Q1V`LdZA zsO)4jH)h*`6u`-0ytJ|ZyQ3Y=FGH8>*|jJhyCrk?RnKVPO%KmJ0;Jx`v<&{a?7(qbd*U=#e>vjJ zzc<5S)c=1%eqaOB2Rpg=`#ru=SKXmSiOevz(M%1jwf<$dzML75G)sW93&+W&1n4VXaIQvDqFQ^)X8Y(CoPeiy7^3+FQiY2KY!Pz>H!x=0f&ekl(MZbdt zufTbUiw2i)oLx#`;wQ40q<~JbGe|h*cO?ss;fuY0t+{1z^wQj2edQkKc{C5frV0#1 z5feppnuj-Kkza0~i?-3rCumTqtGls-lxWntR?IFf5tJ=~9qb+(eznwskP>_};<7~H zQFW+*-xz8{mY+cD$G&4DLgORm-{KUL>GtVhIJ6GP((}~i&w5k&Pb?>wOiW-5-8TsS zeeVkH{Q3*(;psSt7`hL*eQ6Jev(t}_;o_2y}^IZ?`L+9iAtFHuJ2lxCF zSVSSzU5Qnc@$JI^taP_eGI%4{SE2>=8wbt|%|USJZRYDe*$U-2rd{x5Dw_Sv)x9WsSI@Rc_q~%AnoXBWbw0^81vlnwknz{E z*p%zPt~~oEdyG8VI@b@?v*VS$W&Adu!aG>}RpJNI*51xA-oFr0^a-Z)AsT3X9haCQ z(uG*nEZ5uCQrdYAPypPPg=3YLzrL+SEy@mCmtI%;9@!|3A~#($PzbIse91_aX3t47 zL-f;L<}Cd{01uz-7%Uc@aGMgrDD!c2o10>!Mr%mwla&~ta2;aWd6I-+khln5Bq2<< zCS=k6wzx*E$9x$XwApHKUwa7|tZP`D^ZSJ{IVk3n!X>#|6j>SAv~O{$jE&~ z`%Bu*p$bU;l6}V)1mW?WsuHOu4frrBWXvg`#4?o!i z9pC>nCy0S@rmJV4aenL$aT?eo1rLZ~O4$@z9$~*e9k;)f45baM#rDTX|9ffO%4ADm z9Sy4XrCijEk^)S3=NTNE9dC7TT)Tq5lU;lfN$J2WN_cL&w~A;IX_FDzEo}pEXaJ$1}6qHnyT- z#qAMtb1s3^#Ejod>1DT{Ueg!mX?qf)7&d|_llfMKEO1;Yjb|~qpQlmK@pesUjbT0= zSkEml9f(dUqrK!%ok6Pr_=~p_P6F$s><;}EWse;cewk^;CG z<(A=(S){!U6vPyU0pub3_$jjk44yYn3@98f~NKn_4kXZ7Fk;ZXECO`oUc+n9M-(4Pu-|K&aIJ&0O9{ z7X6uTrpm(&r~BdZc=#9bwC!rZ2sKr3EO9yPZ(iHs=sw+{~#cjI{Bu# z{yMn&R~-SoUH@jFG*!ve>m$WdB29B!tE2q`XesU+H`I+P>EqdF)M}61(78I zWsqu{%FztkTW+r(GLn*87LDqGQ*b8*TQRa@R@@UNvpIEDpr+WmKWr${m;-M2!*; zTjX7$Z0K~A?0za6r01d&l0rZ6y41+*-oS5(JWsm@S3Vk?Js=RSQ7sg(Q2#JR7D~p& zr2c4`aT!sss7G&KxlfLKVE~)T%8Alh0Y*m|=joQqlbIh#ed4A3)K!F5k^E4cJ_y)Z zZsr7*{t{U+L|viwm!NBf%;_1Nzm@y>qG$E}nj_x*EIKgT;qN+^_3hb2mLl9Aw`LY> zf?I_wk9~4?uXG4GOTBJ5(FPJL0`8q3a-N-AdVqr5?d3k;{KrLrjlFHPw^9~LJ84=8q$H*aKVej-;_0|~N|Mi=zmaH;u%UEjXpQf=$Li#WD9HT39)+!^m{`2Yp$MUi z`HbsFZbrMkd7z!sjDJIho!!#hTt_thk)`%lcOC8;>lst*DS$cRn-#R{6!;WJ2~~bp zTkn}HX!d{7p?}r|WsM`keS|l8U_6U*)gnJ?_+40Ds}U45H^*qweAHT1xBBo-W0}5Y zgxB78frsLto(1_vH%T@%KTfvo@4L_>{yHCK-f%Y|c!`2Jz>^<^7U$I5AuovoqLymc zGsScI(~noT$3+%B2>&O|Wloj&n=$<~7B=fqNK)``U0eKn(wL!f-=Jev@kgk};}OO> z9{*QyuUNrwyU4k(8kupg-?@naZQ!`_!>Xb|#k3XT+N0UH%=3g_%{RWaCwOmV-8vMX zz7u53H4I)T)q+Ro*5@t1|GhPPj#dDj*sP8+gS}|h@1PM%#@-K{iVn6vYCH&+l%@m< z{!EyB=TByy#ZmJS>QL|CRi?G_K~Axt*^>pUn|&b}J~G+*9d#_LuVNXIqWn2`m*N3`bxw%!Jlz5sjvB5??zeE%nQEA=FF&Pm53j~&inDEVY73|p=u5T~e4 zpDqE8H26DI=FLg^Q0CZxQ#Xk7>p9kI%*gEZa&$V}FxP+rl?blLrMKeK%LcN@6#_rv z<&UShhU1F%wf)n)Zb9-zDQCw>GTl6m(M$K!mHZ#4THYE-i!{i0YqwxV=;AO0It*}` zhUE40Vw&jN7dM_qw^9r4ljPtyfiBbLA3cq!VlPAs#0!3Udrjs9vBpbdM#z~+DHN5?L6@2KxgRznSo|Ko?^jJb?{QM4lu;r1@_T@v03f`&OYg`0xJB4L zz#FWfy8(TFE^od`V^Hj~@nQOF6pxD_|I*uQIXy87&vl=)mF8JS;S1FDWYDr*gV$r$ z$X%}8rvFOpjp(D;jojm=5R@T9ozj?uE%%vve}_z8Xs?IVT;mFVN#9YfMPbR%gJ+ua zn129Dgn%h4jo5^z#>l}t;Qp^J)RXmAd#tmEx4MDbW{!^`i^xfF0s4k46jC z+9@}|Xzge8Jip9*g=aLYx$zf|QPd<2pkE#y%)y3g?GYp8^Q)LkupJOqIb_Tw zcd%{97@6CJwbB+MxgSN?OuZW)po|h!bkEp%?thwtFM4vF!lHE^PgG>pU`OAW|Y(!F-0gbt~7OyobxL_N^jFm90S<03x z7oM}p+&828`L!F70|k3w6S?yjDji<^Gp;?gRR{GOd07e1%s}x46Y-%((T`@($PN@d z(UTh(cJkQjrs;4!xEYK=x)Ootk2GT03X{^#lpi9m0N{W2Qz$5w(#lGn=iL{Dm=W^a z2S_%VbV~yd6)GxW7wUIHy118NBj0?y)deKkR7KoD98mk7&1w z%uJLPjLh+0w=4=jwJcRM?UmsY_)ga`t1*ngu`?mJ|C9^0;ThYZglBSvyLcCo{4)Sf zoQz=yMH2^}3bE<58SocVvn2(y>w>IRf?U0xt+Sw1ELn0b;EM^*kW*mE02 zmb49=zvNb~&y?l2qxRF57_WDwPv?fXn*KJb3wUE{$@39 z6ogXAdE|y3lQrH?egjH+l9d5(`yK5GI`QL=S$pPO`aa73+)sbz0(>+Ji^jk;t?EuU z7|sZGW6E`P9!+(Ld%!8*NqG`S&jUApD}@)>+R(1Gs=6f)G@Vh^Q<%1u@Y23;h}A?V zFqsHNcS^f)9OJiaNl6<`<6RbVUq9YH`o%e3JIvZP)6a7B4)WJ#jK3c#@Uc#vlKMlJ z*i!jfOhw(NbGdW>h(+d3ljsJWzOZ_plr2rZqwtG>V=tLMQ{Ot$0&MyiFpm(_PYewH ztObAQ22ef)2{DbiRv9J5YOGE*EaZSRU_>&4H>Q1^Jxq zIy&wb!C6q&a2_FGL?gtglcL}X!1{ZJezcsUvX0+y>e+R=T)Q}y>K@19U}U9`Ca~fy zz^*j|Y90!xmkIx-;^sd1-a8XwJ>1CPM4)~Db`s>S(L1ifHs^UPr?NxEJTTX);z6?# zOJk^%Eb2}4-(!Oo1wA}#yuzEq-bT4#6o5fqR<9EtwEl2!aAU(!(fC(qy<<0hblyRx z9<*TiI6|0e*E&v7fw`FBoY{90_AQ52t|$CI+}qzm-xS2enpJMP493yN>D)ZF65pe_ z7@12B2vB|Ep!}8*(I=eY#Fn}C>9R#^EZ}$YJou*0UJg|$*izxtUy+db2wC_X&MvQA zBkd^Z)5%Yvm%DHI7=vnwIduEtnj`6dp6KX$%X&C5481|tSVMBVA;Rbhruu1Qds;jzIOrs_xc zl%_SB6f8^~l^AZd;9B%s@-tDreYx_3H=YZWuNOcmn&piloEYQ)IA_x#tSCN55ghVe zOlK|gYTnf!xjqmZqZ*jpb_vGCi6u8NG?%qTG<%?S_!)= zBGvCm;(UfD7P3ol43raCW0VnJLA!tFE3UukTVT1wfB)_pOEn&WpT$|24D!yIZW|%( z3QbqyX9Tix4Ei7f!GyojskO`%pxhuWS2lIvC&0Up(||(1G{O5Bv8?&3x8Bo^B16RD zH}Ub;t5xC6@Ecj#kn6np?Q9>lOyeG1Tsx{N(}WB5h$<2_+Oxyq(NR0reXnoXK27oIPXPX8xQdjuYy#`RE-zfkVgv>5Dl$fQ!U&+>US6=)%^pQjvVSK3h3 zDf}3Jwp3u+UhDoVbb85rNyYNF&f(E~}NqGF6$Wld2k+kB|tW-P8 zbXFBc^hW`pU~L{(ygp2`?s#{T8akW=e`7q{>J8UFkVux?2>4PX+(!$$fL+6`;qw>QHN0dz& z7=j(?h#z6CWh|4n`2^#|a9R$w!X-8J_I7jwkHZ`>a!B{0aq(n(&?n>1$$Ek+(Wz7S-TC9Gw9=8Q}o%Lb=DFLhBhVn`D*@ zg`Q-GJr7FX_lp*~Z5RpL8i zpUe&4O$*N`mAI)^=(VrOHPiy0E~5TC!j4qTz+j&)#u9cKomw%V?JVI>eYBEzCmd-; z{{yd5E96>IDAJ9DgvPjfHD2b!n7pHJ^gK)6hPv|S#qDpK#aYg!S}y~57nKJ+#G4%V zLm$Uc@|kF5ID|1;zP+2$t=dxT-+^iE^H*KQ+fECGLH%Pwc?v%7LT5a)v?O<;zO7GG zl`Yx0J1kor-`Ll%TBn`-W(drwEH|e!{te<`JJ$m!Kt9{B`|0#!GD)h8kf^h{R*~Z$@MI7;1acQ$sW9sce#8qSY}!N z2&9h)+39t`KBqm z6)#7CKQTdyJFXSLHaww8f6v$F+hO!G$jx&5^YYDKt>;9T3@g+19s!YWN@}mhOh!CW zQkwg>L^0z`?)tZkJjaI&ckdZA_H(YxeQ32~2* zX>_wb&Re(4!>Fywo~*hi?4Qic8le85$PaTK|IyBj@eXR~`LW@Vz$pU!LzcU>dd1S`hUlOBw`d5yr=a^IsgxuFvF{Wn}W!3^aBEo z&56y};@F)3>U`aFy}3m}LDlzYLZIDp4A&QeJk=7N0$i@ea#_d1!+K_NI+;{ac2yqg zD0Vo@uE@7w*JH^%oWWm%?^~)DN1xBTu^tgAsd3|d8SY@-zL@xClyGb;yA&+J%DHuk zo~HpBVbg!UmUP50(Y%_PVbnAS;PSFT%z55`Zu@iJ`VF6(ykkF|AD=MH2{-(HXkQu; z1G`@~lMh=h=Qk!NQ!;^RAr+m1+X7ANQspKN>J_dtIsEYBS-XRNENZ(`w=|(Wo0D|1 zQ>EG3lc#X8xqqaas-w7L_p^-11AFF#nqh{-7aE7-xw5j9(-fZ}`3}%@!DtuMH^opH zv3f)4KGWMd1no7BgGbhfjAPc%(PVkf&M=DWX9x$AN{9$W1x^>W zxmb+Y@)GMP$`u}4;7pjP|II~ILwmQ}D3-`mC|Whu+SE6X%szZSPM>JYS_{Pe9yxE6 zHd$miR{wffoP-x|m=q;FS=1&gS$STrl3Fn0ofvJC4MjeQ7rqdn02wunaS* zZ<$dZ)_6G5xsd_kYwnOuprgF&CuY>US)-GN_N^EFz6B$V%e8l1cSxPnLH-{Fo-=Qx zRyU$KYBmCNTmnO}MW`M8d664Mdk~Y_mOQb>@=}DYYFZ1QoeRKLj4L4l7r_toZHW8T zK99@mZZsbcV|c_(q3&lww;rUTva)=#1wCQsF?SP~9cOQlNsy^T@EHB2hr|WRt|*~S z%mOGW1|J`9)+m5EVoN0@&o{FI4%L(*Rg*jzgk>!{OLFG#=Anb^rRxf0pnFW&)2GQh z5pFe0k4?lcJ~DI#b%$p(cJde=nU#>~@UsyccD&pcj?7FwBkKVl@{dER#Rj0c$C z7rx~OK3%ZT+=68jQwEpwi%hNsQ(g2t!w{ut@*1P~!xJ_H@S)k!z*b^)wmh zkUUUy&Gpf)p@odl^R?QdaAxO}UyI`cX1f}`Xx~lL>+6)z3;Z&8Z;b4F6kT7h>F~Hs z^QRNxs71X;<0z@VT9$-=na;h}_C{Rig5UFSD)yRcq@;$2v#2iVpR?PkX1SDb6L7T%6UxA~y%vVu6w1y>4 zNc;*tN*E-_*Y}akS#KwSP~Q=3R`7*93vIaf%Ui|6!H*uhY=65k+($q5hN7 zQ*F{*opBx4_Z;Txz0=^F=WU;c1w6=<#~dpjN8O-FfaXF^W{ew)(oPJ!H70#*Jeo8f zoFxab^p{ktLvgEAMP>8~}VI7U-^97|x((PycZOS!8FPdPLF^F$8oa1F|~vIRhH74MbUQiGM&~dWXw6 z&lf0m_X-O;!D`R6f_{#dtC8X8rJTxLp?tmT@4IV#zFDq~f2oi4riww08szO!#w5GX zQ{)@!Fn@rV%>5`|*j`fJ!&Po&QLNqd@ivMCmgYkEQV<G-B+BBt*YxTc2#3porqD7 z*hZ&5h^=W_$E-BFUKXt{;Y(=6yICg%zxD3)lS0-vqt&Hb%#P6PZ+X_4AnF|jB?(GYEfJQ?|S8?Wj`Axd*nSje8viKR%+?iC+RmY z{{Z>b2t32*aorXfUo^l{b-pb(xOqMUWy+iqG1f{L+dluTp17&Jhz)t_Fk{WE5(2s} z@`CSOu?kgJo)bPvwQM4u74Mo9kHKGUq<3nwhrWt*g~s ze^8HXYdDt%Fn!99)+x659a0VQrfUo1bHwJeRSeYz+4j#sIGSeo=q*2gm3FWe>*~vyCK|(Kson0#T<>j20 zdNFR=6nsUb$3E%v#37k9;D`C^CbVshWRXboBH@jJ@Dzg?8JE22%#Sa`yPC0wH8W{N z^9TkKAwRGV-L=zVp^kq%8m&22Im;c&^2o+-pHr(1)x3~$})B8+I{ZIWe zBLTek->kBf^{H0j5Gvib{hYqaT?KxraKxZd2ge1fJ|NizT_WO@OJ1e-E!`#Fs7zSP z9+rrpLn#wyJnrH4k_k>2M(n@6{CQf$U_Wg&^W~~g-~xvO-) z|Fb81Zt1%l5l) zEZMZ9^YcIjvIVE0??U5K#%*gq3v!Sv(b9Glxr$e&^jrw#z(~5~R%j-4 z&Fh$D>f}MN<>>FHx@@l!nON-3c-13Q~WSpnmc(Ry20rqRuyR2vyNuhnE zL|&O9xelNSv(sysTcU$Hmrk(zRv#MdoeWFa*x6LA0^N>e8g{mQJ7@qWdL;S!G|_5U zaz|XJ6LUpaWY2HV9Ce;6t7%}l0PpS%oG>u1bes6Bu;lSLAO~^bto5AZ+M7;)+?K3` z6JZg?A{RVjEgx*!0vcl_p^tcdgO%m|0)5nT+{z+8P5pA@FL(VSYAJDoL9O&Y6E($r zHX>Jp5Y*cw2TJfCqC`Fy#hs%bNjy(tpWu=2bQA{B1C>8mkgXSvIj;5akG{$J;1ixc z@1Z>LkBKZty%A^s^&fETKSY2(P*hrgFh51nJhF_Vq1^L#TKekTmnzpbgPWc#;Ua3y zpy*R`@be>hr2oPcl-mfe;M7lWcOKT(P-13xARi}#t$3H>67)0&3P#GMX45ebbT zSPL%$Pt4qugamIC#ob>*l!K4&FDhmywzvXAQGcp}O5*hVp)=Xxpzi0>Z3qc^;dC&< z9Gu?LjHG>eEfZ9%>HDf%PHB|q+u}>B#>0(mPhtU4<ZK*h^Y>T>h97Kb5QpI*_3J!GT4>Hn|aOfyJ|( z^M-0bF^m*fm5N>bC{QspqOPW9TJBG>FILZVTQw^bmhPryKB6VBw*j9dAckvE<6@dE ztqWgQOff8{?Fln<{O*?uqERv9eDt;3>jzj!xX@P{)edI2#W}BdY%2{thNNpt@l|%J z#HeFq1u{W@+pef^>1dWbBu?%;I`XPZPzCA}4RsR>@(0VHaPQ@Tv$HSLjTM9g5Ze1G zfFn+VIwX_SB*G5|()|G*#c1b2h&R_2pw%x4=dhTZxiaJHAtEnU~!(U=bj-8PMD=vo$?BG1@U;8&H)Eb#%ZUJ#h#FxDgR z#(i&UAn7&Z1pkk(w+@SI+19-S0YV_S26qS^+}%C6y9Rf6cXtcWxCLn3g1dX;?(Y8e zI(x5m&p!9u@89m{={aY0)fjVBjraGaJLC<2Ct|vVY0MCNE?l{>c(N?07@N|A4Q;(` zSUypy_9~PJk6g(g=R*-)koww>gQ8DEEnGF zMkG#&hjCLxq-D*f-}(lni09LV<#oZHigyZ8h^QZiLEWD`SFX0)9Sq-wf40^>Qq}pU z6$9}a%QvJx+T<}UNf~|t+S{z@5WyWSZ^y9Akgw59*1b2R8@^P0g=&i%+4|&FaxKyY z1&5BRL9oq6k8Ehc(A$$=$d{u}p+-FEb5EFxs6mTxGo&z7QGkw0-99t9#s z?l`*t#WU;7dV6{ibNYKR*Xz&~>(Vt0-Gj2|+T>ArJ=>18eO{k$H4N};o;b*uDZ`gn zMO`js|AFW47=-2jOD94(KuosEJtjoX=NPWu`&VC(o}r@9L5%0iuV}}7+bm@EPP*R2 z>OM3UZ#i^|@W&0`_;n$dz=M#XW4c-{rc@LCxJStF(3ggxtnWLxY_-B9flaU|pK7rk zq{oqe67e}8{D2ce*{N-4Xn^uWX(L+uMU4D)e>}T2ixKvaYEUaZ5;cY~5{u!|Ev+B{ zYo`@?Dy}d9f1)eN6*)U@zz{#;CC*ny%NNXC0-NJP^ksV-l~xfWZ&6c}O2$5Pi^gneYQ6?Ct}o;GuKzVVB5t@~$*W)ksk6`jq9aJ&F| zDOzl!M)c}*mUdFquHvPo1{+!XR9|6(8KLzGc;&9lVnoLHsy zGIegja5E%lF+U-F%x7UbYpQANkllgO{reFYA?^lc#ZLx^mg2Dar|O659?@qsf&jut z(%dM~G)wUr-)h=%zxqb$Wai=yaWJin#ypDze0b8i1lR94INxMNF}3_+fHS0uR}J*_>e* z>okZ58VmHPSI!yVRu4!#ESp}cHH~;Hzp~@c)hmbx6B({ewJvf_;emP8&0Qr)!*l&c z+!l^z4Qwh!?`$eAzCc>%jS}DaI*L6&>F|&_Y#=I0C%ncYXB?pld~DbYSb!sqe;M&S z+0_2-b|5OnDfeMs#ZlvIKwOTb^s->vR zAVWA5ZY>GNMk}F^O^Kys=PJb^cMTZ=IR#5HcLm<0y)e4(c~A=~r&(>K>HuIt(})o8 ziAvgXA}d5`lFyvFRmI&$Zr{vk#sBM4Y2~mo`>vK%d%Sxz|6Xk|{7_y~TE|>gd?Mxd zzcAhJ!VP9dAd4h&#xx&r%jn<;eG6mBBmTXQH-zk`tx^3**vS(b^_A`WfkV&>VOR#S zT&H~SSNE#Opt6KsW?CkUYrqC%&8EWV9O9g2pO7>(3E|I|KdTcdm*NopVQRlHNgJ1k z-*Kdi&+{5gHl@ZUpJo83)ZFM<1Ts52K*xbRa;p98 z_v25qDC@&WE{4IuWg>r%LYbs*r}#a;s;oo)Q?dJo(uo>3#?4it3Xlv1c+R-r*K|m!n~R zrl%L&+vGm>$8QWEJL21rnxq#+b|B$+mmrtvOCg=Hh}ACs?SWBA6|)B-Cng@#Qy#oQ zc1ekAlONWU5DN_9RIc5ZtHqaneEQxI=dkKL|Mi3*R@i1{b)Vrf zL~~(|ob6n;sYTfERJLf&C*1+R8mdH#tIO=B3+d&ebAKf+omj>}L@{6H0bNRK zh_U8ddi?yi)y)<0=&1~vYmSo1MQs;Yt<*YKUnkQ@ z|2wPyth{IZ;YXN${%5T;GJ@cp;%unLtjNa<7l{0Ue-|DcdnjN{mW-ah5LKid%Pa1% zt@6`b8iN(Bz`vI*9vUpicX4CCmoSu-nrjsaPPBsuj(n5IPG52Kacqr$tvFUFBIsQl zR1zE`c3enmE+naI?CbQs&5U_^<6NVi9Dkt?OX4`)z2E(Q4JxstW%RT}?YK+}?RHAD zj-V;MzRkY-5OoH_x>cB;R7|{!VC-{5x+S_K#`hGF(9efv4*PPAg;#ZX><%a2ff1P# zj3%$~v0jUp1GZ`FFx{xV1?eqdF-xHi)qwJ&{BLQN*rJ}$V`TZJ+#?x}-t=+#K~jU6 ziNxm`ld1_@t`m_>r2ALp-SP<}_p}k4vMZS+*I^Egrl+ewb_bk(lojP$ja*%CuiNuP zj)8{o@RtkPUg#S79nvh}G^gf(_a`>A7l$e&!k4S8CLugx8LqbrT5q`ltgW(Gql)($ z6aKVyr>15P{Nb!|y(f);n`g3N+6&3}H|7*dT{8JPdb zlhRx zL>Kf}j<%5@zNOgLcrGn+8tb`08Q*-3is`g^8(`E>l$C0DIHpkC!B1E`Nq19T`vW^c zQ@K{7fkYQDYlf=}1`-(&)r{#}wu1sOc-Fni9ey(qhWjiQD&^LGc0JUIQ$F~&5+&jHlbUD&G8cm7TP(-FTX+8pRj?5xNMubSk%U0$@>4!D zm9VDh3&Vje$t)ba8RZv_nqU9$3^=+_B;ciH7AQGrYaagn=>Y zWppBQNRlw-%=PM5ljb6K*&-TKbXt#pN?k;Mlv>~J87J9{zAj=*bk}N8Ey$d9t9rV0 z+lHo^xrhX3o3978%XfS~S7jBL6EFFWHS+;;N_|ukGy5-IiM-xZr7m&?{;U|HkYi?6 z%aahT&Z*tWg=0$m0;K#HR#9fff=-U85G;Oqf(VYIV3eB^LdB>(C#s?u*}?cwL}dD3 zc`*hKlCpO6T!jAlhlMt2IN3b$5|UDKp~TEN(>&WWu7g+`L1CoC36GS(fbqXO8~!HC z#Na`aQXCuOd>G)}8qDCC&F$m=XL$aHL$+HP3T&jnB%{}v=C%=_dd59yGJax2C|Cl& zE11UG{zg0~n*Q&MP6(x`nNes_XFjh6Omv8L>C-4b0a(?Ya!#70x0AOP-(|+VxI~eg z)N=k>nK7eeu&&+Da%!QQ6?-@vj$=JZc6YUau#W2=2gy%_eYt%QJbR##ob3MGTvt=` z!z-cJ*onxQqBrMqFFTf>%rN|)XR^CN#-8s_{gD|L$C=pdDs=FL`Ksnouz%zPcC zLNaeTO+<#WjWK3NzE?>|uVeAF?|J)M2fAK8T!Pe^VGW z{USSqgV|*lj|eE^cNDk#QR$+00k+?t@PCBXE~S(4P=d=ovbGOB9Z;}ytxC3 zF&6&Hg9YxegBYrYTX_5_xw%uEP+uVdjUWXeF@>BRhlxjgSrC59XK}V+kM|G~&zMc` z$XPB7YmWT)yKdN@noxns$wPpgNvQ{QP&d*VNAxbJ)2( zeF^oFq*~H7h9lf5i|=($=?zp1RyxJNrTd2S-?BX)8>#`KxiA*ii4@h}0pl5%6B=U= zn__YV_RQo31V5X|>I?4KcbEYjGY%nk;PK)hK!JTVDtg^g=)pI`Hl1XoJb7rgqc@8- zWn4A9YE7g-m0{Pu`TNA=zwUQKM3Bh*z{#O_Vvf~!uF;&x69$h++Z3Ra=qOyomcB3& zXq`nI6UE}Pl_|@^i61RH#zw2SuU};xn4B>1b$TPKv=2W#+d_HE`G21V|2+EN!SJtv z(GdF(Aj>;NkvXJUM22=UU3r)9IMG-KM>kJTV{?6b;+pH3?tPqkzuZ#A+t8?v`4#vp zn9SlMCOq(I<-s=vQu27&- zmsT1FnfSEVWYl&0*S^k2Tw5P>EYr>~S$zUs%`dBE0jM@x3z&wU3$8hkV~@t>@v~=h zhm{`)zBpef?`;nPyek$+LG}SD+QXn zp@h8UNxy+4%o%1b2-{qKf$8&PV?q&pX|r%YwYkiG-kxg@Qzl}~47=JBDFsf!x?vpK4E-qg zO8J@zbq|R%o4Vl4&3s5(Hk)tF7GVQ|XU@g-#>L{Jr-T_xu+zyU*Z&^M{~xPk9@$SO z1ilv>HrP_QC4dih&LLfP}vgG zk^)(dzDBE~_0*qVX|t=ta|+i7j{jS}`R95Y*DxsD_EnW=%qQOz_hpcU5dZwZ!v;=o z#AO;GfjB86C{ej7g~<8-i4K1k0sk?NIZTlS9#nSY{7&@)ej61Dd@uO-gtS{B^`qxy zakFcZbeRvU{favqF?F`-^X$HW_}tInYvYO803x8#_@?EIkOLn&ayQJnzm(zC1;Q|0 ztoInz8S_eFpw*66{z(J~xgLyciIiN6jjX0$JfM@-KQy`-bE+zm3cc@&Mumzs)d{K% z*2bgRKiuIDN0aW>oK7v>j8l zIAh-XzmDpEEWQ7;(8VGAzoQGVQBsY`5L+%4Vd`CKtT#_M+^-lgXx%z#t@2F3wTq67 zygVH>V0u0-?Q1N6K2?+j=e<>Ed{ep=%`Xd!iu)3Hc$kh!ij1z|23Pf_LBujn7F{Nx z$+=svSvkKei$rV(%{;9=;-1k{0PF5EsC2R4f%sMoq2xXdNT8R7MH%k(e)6Wmo%qZ> z7lQH<>3D21SO!xLFryuYPW0|&@h?wKWG7~rT}^vd#(#*M%{3se`01*4E816vX6`P4 zD7N**es&XcZJS@m=gb`|z+S$!*I$(JQyNeDhHcARw`C!3hL~di4#q-(GhSP42fV!4 zt9ysiVsx*TS_g7M-9mwse|k@rR7y3u3QPZd;ebyD8y8 zc)X|$K`-^}$Io^@cUQ&zJid&1+P6-wJ{e&C;p=8!{DSAG7h4!a97>hsOK+wuNUZY3 zXd2;j6p-KvW_!t;FfV%xmfe0aUSjJ%b-_lM{yWQQ&Dy8S1JViF*Vake_#T%p+;Uwb z5haZr`j1{~Ff`=lY;tnzSubOG`=lZNg9sG{JBkC@QyQGDAx$Rsciu`r_x)w%+4@$SkmSt}zeB~eWsGs_q+hDvupeBjUkT_pzT>`K*DLK_pSd^SbOG)FB8rI;W7-=u( z7Dmwqe9hRpQf`vy*AJ~$r#fzWsDZ!|NDB9_s_vqXkeT6G3%U7m^r>7xXr7bu&QY}KOF0P@^`^bi=XwM=MY>_VQtevRX!!iVa>g>pDWSRjfs%SKp*Km9!;!DNgNK+~tX!r3pTT z!r%?W#2_A@o+s{Y16JH=%u!P?ljs61ccw!Qd!o$Rvk~aelnd z%P7hw=P<(q1DxKY;PF0=eusLXxA)q&h>YPZ2H8`1A(0PhtTs?WLs~p+w<@QTdIz7&TDIx>HEt#3jLl8 z&z<2RJfdE#@%Y8Babf%aTT19|882@=5hgmHG zGfXBeMk`T6)!!A6$iVdosTzn7CNZB$IKP!>80v>D;o*F_uEKh=@|%%Trz=V-kPd!Xbgs|2GSug`18>wlHoA@hD3qC5gM5hn<~G zi#e!HacNjMUuQl{`Lj^c4**p%TEJHks@VwDGICtx%~F69CCOdzO;0!Ren6OfQXUZ# z$O56#Fg7{38khvP&>I{@dH>m-nmA1nOLTLIZkl$Nl;8j4>vS2vFk&Eq8b0=K_il7l ztshOSVY8A14gu)3`@M3rjJu5h4r)%6$0VQn{`vx1WbQ!t(@)*FyOzj#b)q>Lp^hYL zr6}E0xZ6VRi7w0m@xSTz9oeW}J`wZ6?SFyJ?#;8VAv&!GW)3S1afzIbhQWTZ-~`4Z zyP}HzVQ;oX4o`i;Lndek?`Q;=4<-@Tw}<0_n25Ee3E&|M;;ezxfDJ>7ELTQBG(+La zlQgBEqco+*2x>)FlRpk)(H;_-TzD-tkEGKE-N*RGbEXF0^+Y-XK<3SYEMmN&>LQQC zmh;@xR%4OBD7zhFpX?Y4dAA;||`A zV`AL_NY``s`+vi;7lfQZOqo+J(w$KA&;Pr)v)+r zod6!kxZT`i?H5nuk^TF4wyJvV^zhGf^EK_o6)S1c4eR`>+515{*{=>9B4#ku9iEaUqYZmv7XiaS@HD!x!!&OzyX0*P$uDS{@{7r#{l$ZU)S%%K56(F$x<)aFh$I_jLqI6l3YX4_Xu={KWQs0)>7>q zkBO4dB(dBK=l8arg6-i6LC|RK$u#)1D zx6!*)$8DO4<|fQIyl5#T{5SLz0IxZp{FFiq80vAi+~7~Jnbqbff9tF0J`}+LA{lGm zr&DbmnrPJSl!zf2R-%YuEIORVxBkeEGXJ&(`yyz00CtAFy}JYX^{36xs}4{Dw}mY0 zZtn@=VCE|-2P6MfU*>V}{JM*8H1Tllt4)^sFd=XPz}rzX!csd3wl2Z6RT>?9MaMx8OeTvm_56F*lR>YsY^U&&F<3MxQ> zeM;_o1oXslZgdB)PxYj+Uul)oQdjp_>0AUanj%!$DTl`6oE44c3izX2?BQyf#S%W-J_L<6@b_sj}JMD{gozW*$<^?yPUi8#Bs zF26jU&QF5OUrC(bYF8}#>hD3vxi0Y%CM0KJL%|kJudN5)(yxnp~gl z!*@>&QF4tjbb9k1RZkKy*$TCk-Nu^)xTILx!vD;x{(cU1S-#_K1uQAx+!jehUi3mA z+IO%F=ul0Q_6}giOG;1EVr|JQ;=W3!^$XRVo}JhG#An=viL_Ywo`;1ZpAUZQgpD+q zTochoS_(%&K%FVtE%_SR>)aD)?{X%A)AV+bnP>}4}xL)mOPPUdl{&aw5{#siUE9xc` zHbMl4`k}gcax@ZX`-qTtw!Oqk`ICsKw)g6FBpgS*?S&Q??6zuG2wCZL`^>Bqdet>r77 zbh}Gi#Y=Sco#|Sl_{X{6fj+1Uo;Y?_SJh3=H4nGsr(RsQo#$EXhJ#0+h4lwH@ zt~hMzP(>$VE_o`ZW6t7&vUwL=c{JW7-b?5#hcjGTmb)v z?!sb_Nu-*FlHL#utLc`a20{4eu|Echi-SF+Uf+pMTY_WU=bMb1cSW0M5#YKs?fFCqi0!~p0iZ0A+as^rg0!-*UyQfDKcI=dvnz~$wDPm z1iLH?=b90g!=Ul%gl4UFRg|>_xA|G(!46qz?2z;Hlc8BY3i>JVr(>CnHG@Kj>vD{D zyU`IlRP=t>9~l$@0uC21T*8kI=EnXOOPk6D{R61Ec!-cu=P!J63&C9QZ^cRzUFX_7 z#mfYbnHJC7D;EIH(IPT$`MK8gd0Fp=|EgW1#Qo0eB09VuLZv$v`tLh0iHqNZIKpep zd{aBB0HQjM4_R#1a%}TrhWj@)(R}~0MZ*es~7)`J&f zrcA*{x)9_M;rNJXl71-UrjYWDZ$&u(DlGDZs|SEX(TEtF#jf<_T9fFTq_kkcXyOms z*}TkW#Z^p`ln93n4-XG3F#ceEeZ6>}+|t(8@tuxt%*W`)-E~U z7WvzTIkSGP-6qNL$qIi0jE_WUlexUGuy9T;Q5Mt$WEq!YRcYx`j~`vrCi|&GuA5y_ zBC&UNGwfNYla4RbQiH~~^@NYvj?t6Sm zp?6Zt@Q8RhaN;?kJ#gtvacC4nbyIER@HC10h%+7-$-!3&XDKO|_gNdgB)W#0OudZT zwNm;&<_)bQk2=Lq@$eG)a^qrXFiK@Ob9AizZzm(MpKQzIj!C)Iaq6Kjo`^{AKfy;9 zf9qym3$6*}bK?-Xis$M350=Dd{~gbKqc@)7)wDsA9+Jk>>iM&!QpZAKc-C$p03{XQfb%Id+nn=< z`Ji!Mo)4Wva;3FT!KfTozd59gx28P$3f4vhZ^m|#2wxIrZ$MQY$wpo!VmJA^T-u*I zw_Yx37S%nv>e_nNL9f=qA93r5dq>jiW$uQFX;top=~zYPYk`w&Yvf3wysri*2+88< zjr^6~@zzWAeK1d<6_X?ll@h*ll6wqZ?wG7t)@l%--W}d=%U0GImb-;N68qlug(f={ zC|_bm!@p#iBL~fx8R6)SqIfj*v zAfzPLP7FwupHcth``l7R!^X60zo$oYEbrV^`J}gqv6?_!Ykp4(QfKRdFNmk0A z#7n7-1y+~sy8DABF7$=G^N!Me7|fSPl!tNNKt;$&@qa2iy)=X9*7Sug&$r3H)E7>j#yS?6#Fbu zRkk-NMAjcw2M?=9?vM=1#0A^wHt7qVuEuko65_-yd0MoOQ8P@7aFaEEfilJ8Ksq~9 z^&|uaU+-xo_Qx3Lu$R25B%KR&EKwgx45D9sQH>}TF-tCxS9Oj~C?<{<4K5qAwLycZ zGk$J;COg)&3WQU`_{LSh2NDQ%DXudkT3H|{KaI~-JjFLi5>8#ts{J(=(%{lkqNy@23|{=f)F7^{3Xqr>)cz_Tmq${4a!#1c z9V&8AFi8Kor@66_vMu8xDi~=eChJl<4ahxp?2yx+{rY?#{W1^rX!$4Xj*oGYfz$XH z+nshIULNMr<3j$GxUn#283gjy7G;Yr7%%SjQ~=d2g8=^OwKg3LadU*S>?}!ufsmBo zNKB1RwiiIQPx5r*_ApvUxcT;A-!e#Z;6W|EzbPCx(*mh?YHIB)*8F)RX0(Bpv%PwX zDtBrO+>uYtsFBtJmod5wm@wmhlSGSQh{1*&EkFwezih;bfq~k?uG7Z!Udys~Ikt-z zk|R7d8jdRw{lil4zgT80(X!_~DW1lod&h^6qbL4n^ml_wBO?vl*mx2qe2N1z0IQc< z*I((M!TeCJs}~VSI0y9#NQp z8+&FI7;=p%`N0v4!}`lP)ywl{N?b=>0tA}_W(pY41-ZEEkhF;_podu%=XjLq*mXVX z?wjSf7eV>9-zDb0^nwi{-UjYYmya(e*#bVm=cAi|5d}HLjA~1N8NNf(UNnQ{rBo(%J|Qpd-IrROKC3}wUP0b$+>E%9C$oB>u;@_sC418daTP(0dw*f3<1BctBW4%Ofbbd)$XW}p}kwuZ2f8e z_Kg3g($x(Om~#f-N9h49 z=4AQg0-iCZ`g!`Uox)UIYVE7L^Y^!N=3zN8c!3~Zqdqvgqoh;Z^@oscL0qU*F^g4B zJa*eRuhx^=kv2YaELeJJsZc&a4;+L6U}2BsaW8y%!@$;&(!t&N`Av;KpPXLq>E-=5 z+MhE2=jdzz8nWY;(zBO-5qU;8Sr;TL|L?tx>b+kd4ICI*> zj~w1l#;96ck{-Z3YxVWiEw<>mW3kkx1WuAS8Y|snWCP(hkBGn=_ONu02u`2PC_M1P zq26}HHy7`5ew;Q|x0>sx4udfC3P+>NB6=d<6+I@pe8gf{?{tqZ1rFIzPb<=KEM49( zZsu4V{Z^D-!@*hFpohtvHs_j!VZr#7?=B>Ya(i@;`pxQUjw&Jhz`G;tAYT58 zvY1O?#x(Y*O5QQJY%tFq!%N*hAB8!)bLu8>@Cm)DmE+gN=jmy#t$#GfPd)P^D_UMlfxUa40HyYAW$I(o*D&FUejK-Gk8=?Xpk-l1YASy%MF4 z^D8H5-z&^^lQ_-i_=Qjb0`?NVT}?B(1@{p`#3g8u4n3MZdrE7Idid&kKAI z&5_`-G8eaTW~?Q`O%AN}SGA~(zKW~4g|%n2%BUtBxs>E3ZWVnSZ2905zy#g>gFi2Z zh?T-QHI6i1O|h}!GZFW`?ws@FQ+}sl_vtY=V@wb?+kTy+csh~up6Kr*jIJgEG(s+< z1Qs`FcaEJMKUvuBL2jJ^Q+$c+!Jr|u@yj_-L?Sn7sbhD9G`U@!K zeG%xpX%JW>4;38bpY<3>_yXq02QzS3pvq=Vxb;KdQTkqWp48>OR`5P-JbjLo&iE_v z+R~_1-Q3@D7omiBUq&v>4U@}84#Pu^skLqG-pyN9T{?jI|KmQFk)L$1aiAp4a+uYOr5jbLzTPQ)b`Q8kSfa|2(fOS*<_jGrnzMbL4jWw0 zb(1Z6oB~D%k(z`z@D68=;H^mta$MgY=_T3^iwMW4Iu6`zi2pP>fh>x@zFLE6DtD8@ zNMn^>`d9v24*??#M3|&7t11y#(;`+b;bEB@H6UvLHc^GV=qBY~id1(SESwk0$GHE}+U*_GKmuFFNya zzd*M?UXD!-*pdyzn~L(ldY}4DI#AO?(B5ER2BoSoswOc{h1cBpCRuF({Rl}@atS30 z&-`5&`U>$_(I7r>O)|5hWR1vqn*GSqNa9P=>a=-F{WM*7*5HWTqRbX$MPp{1_NjJ! z^Ia5hSe2C$H0Alnhi}qitnjIgJZCB_l9b>m{aH}7&E9PgkxCB%8rbzCBE#{eo#|HK zRBp-?K+JCOu5rA8=XL7uJ?%#=lm}8EqJnlXU>qXI|G1D~$4#_nnCs?(F~{k=^V*$A zzE0eZT;_sV6eqzRsjVFkqhA^WWZPw@EJD~6e$S_C3Rwm{)w&J12<&WH!}$srQ?q=G zt!xz-mjNL>LRbzu;i)Km+#@$P<%U|3)pz~L0IL$yJFCNstA|yaScH3OJ8K@T7hj5jB!b21+)$ASl&S<}BteX|u=gd8p3@DA zIf$DMWQeG0S{BHEb~+D&vHH8`J|Axh)SJtUBVwLL?ICKFUD|fA93nGPx}$v>lwL32#wkT!QdAecGMR{`OUgdu z)xl*(ksS(=FFrRFcO2bPwp}h!Cd^GLbiv$eB@USvG%Vh*AzMOi9E24DD%9Dj>bGsb1dbV8+w?-g<9_Eq4KqT8gFN6^q@RA5}rvr=uAQKKn5 zr(lfPsws2@49`{iz4P_bG?{-z=8F9X*X3WTf;cgv+vkn-)Y4~Qqj1w6F5_tmt-3L1 zbg-w?Ys32=-4P($ldGn8EF#F)JtNnUL<8-9)|wX`+tyx)A8`tOysGuQxB0AUj43a~cIF;a;z}JVum`q*Y4}U} ziUm!aFjfT59U%F!>-evH!w(LbWa<`-?}#tM&FFdDy=yk@_aEbqkJ?B1i~}wv);yVT{`E9H&os6#@M_ z=J{?*<&O#St?LrCEHXJiHzG5Jc+C#5(^~;aJLAz zOGYH>d-`Fgc*yoKeXE$2ClOFw(SyXN)(2~rxVc{4-jwS#1?%*3zsmZQwh5d2c_iXQ zzn2kxN(Lax(oHoS02<>Oh7(E5^F)~?|;;mn0}o=yKs)||n? z;vG!mC+)4p*+3X3+)J?qJxE(B^C=W@qyX7)R>A>>ZRC-jB#hLr2`tj8tf_;0XhI)M z(nf#iVL;O#d%o_sHY}00HXbj>L!s4TI`>-(unrBFTh+=~3rA~M=+Q}&s?;4H(1ZiI zxAb(IF-3C3r;XM!)V?-Ka-WQc`cQ1?^pAz1(VTzpAqdOnDR@cB%jZPOP?|#i){zdx zl+r5R6G*(^ggvsZ% zjU@h#jvIXFS7lFni^+2=!~2le@L|(NzI39>cSA0{UCv!fXPO@j$51mGi*-@}@zD*d z?lp4Asf;;NI_ei@xWrBQESEcYy;f&b9Xl*KCjgpHiKaScVr%aXoDhRT+tJrEh6|TJPh?Q<3T`F6SUU|vN2EsyIbWH z9TG+I&DSpzcsfL)g)&czadOG4N#(swNA8#T_Gd!O5sJ)$l?_dR2|ONy;i>YAMyt3l zq8TQRhQTc%T0rWhTSOOG30ife?vT&2u zqd+p5gS~3J+nj9Gr|6a{>tB`I&lFl)-Ztw=2BacuewUT$pnoO{Rb8S8m*7HQh*Zn5 zj!dceZ92ApZ!vRT5V(5RBa5_%h@!0(f@b&}mx2EpxY0c6E5?-Fn~uz#OxSLF(Gt(5 zQ6HPt-w$JD8@q*EQDvXdY^PTTQL}{Z?Il=2}pVy#7eYBSR!)(iHOx` z1C|Oq4)NWYuS!PfJ>!j2+v&MQLWb%#N@Atyo7Jy|O;gSCS1+ff84#)|d4y}hK`69+ zEv}eEE6N5Pf^CpNqqcXP*EPB#X?2Tf^MY-Vy+$VZ%UxCLxdUCwpmFYXmKpb@L%VU3 z#lSt})e=0tTZpAmJD8)Sz1L>7R0;<39;;f7BiVg_;9BYY{c{8N_cN6RXY3MP6gW$^` z&aQbz@t<+beTGb*(6s><5BKE2gX_=RSGzRc`JHZ;B#$)B3R^{)whgPTE}n}50`SmC zgj<_A%#a^p9VdL>;H~;1n7ux6Knek`R-I;KNxRWs1Z#VGSu_`#)>>V2!FW>MyNB&e zaS9)EOA&0x8CmvLJ&KoJ*X?Nb=6T+*DA;kkzg)mpofmY5g#)4JPR|JQdc5yf%~JJz zng;?oPor_!-Q2D|U<&@~=Y8-?+!>?)&H4UvZG7ZelSnLiKfvEH<+?}$=<(wA8Ctgu zzkvNOC!6+{lMd1HJ+NyGkL?Lx`}jUW3sXFaH;awXsOOlau92-57<9Ad zd4Boed#mQF5|Au99ndIBHpLGFTeonD!S*v+L|fc6cD~}@r8Ktn*)(m2<{(``qSO$| zVssOB8G_;|()?J}k=4>BH)9zqGcJfX0ORJCJC|TgaB}$79Fx0GppN_Q2>#4F*jM?g zgg9Xu=92IT8Fe3=|2Qo=y)qloa%T9#klIiPYBnH!m@(+d00$y&A}x54m~=q)woL?* zfhv{duUBs0xJ{rF1+owyWsIhY#zbzIwW&UOUn1DL6^z#K8>ZQZu1GDet?^B;V+Z15 zvsprTvEd7uuzZ;mKfpC_(;)7m#NpEVx#xMn!1;M4V%SI{QUm&N#v%Dx!*QHbbH#Yz zcH@0w&E3ycBm4E;SV#gJf?7#pky`p|M}*3sA7*n;nn0Hlou8I-^K&hl;+2*2Wpne0 z*0*yFx(!Eq_B0XZ$$3;%o(%CQaRNlwzP@LPi9GHPCh^Fq4!Or3R~5{iW;?DO6Zb3P z*R5_-sAHZXL4|t8BPn_tN#xdcix-n!!p>mu>yYM4E%xEV55Zc0#wE1@AT44F-u%eYs~C zgN95`F?SRGeGRG}!afkg+U;O6F9Loy-zJ4li~f{WZyDJdhnOZsp^n>CwXH@|s#CMp zxH-l)tnkqH_3766k;El<5*qDk8037sGF>RG<65&~ub->S)nOp};pI>Z+AzG#GL_!O zFK$}v>Pnd^^V@CspleTvtW9FnwN7uhDnpm%bM5T=5o^cUL(|s=8!m|_*4;e9gw98J zObI@(cgf_~=2?tOdfhhl>7!zkf^(a-w&tyOVH=y6H(z4Jr-zas1-HKQE6tAeUI>1m z0365=KVp4YY{-y5x&j|6RTo`&B>8SOnM}$Rp>()Sq>bW;}X+%8y+I6T}C}dlKK1Eew5eqyj6QNx#>NZYxsic z8AhEWgCS_3nBMpY<4W`YBkL{0+JK^L(PAYOhhjy76e%ukad&rVaVw=*fZ}c?xVyDz zDemsUU0NK17k3B{$V>0coq03&XZ|Jm&e?mPwbowi%@KX!q&RR^ftZfWMOIaN;zD}~ zxH-GWo|!pGrcN+%oOp+_Y*kWEVyCrZ;DwT1*z5F>Ht|A(6ryGAz`Lr}Qy~)?SoB&4 zHxvT&$1B?rA}pjEVUPc%L|W!Or{S5W5TU1(nb-wov8m4O(v~S2E7H-W5YZ8Q!0$>f zk%1p4v%VCzA`t@%Hjjwth;8K*Gt<{;Wz-$9Ut#ZgsYrbHzDE75PEB25Yxbc^S8&uW8-| zXQ!p>)>)%dt4EU~U+IUtLt0pfStRy{Vt)os!4JFmiE9{gJi6v}dqq1yQU8XSw_Ur! zS1G;Gp7~@j3tGpyH*&MRRncCh{8vf*$D@4;X>=y9qRg-4vS=RZ2@?^;25ijNCggkW zVCPmM3ce^=Ph)mJ4%4w-M@2Sw%0jP**Q)enIz^~2vEO9<745IJ$ylZ*AD%I5Dzi$n z_u|U`nnx*oA=jG%-*6E5+E+!x7yztNdH9+!V++gE1vul6wLx zBeHG?4>CPKc@XLLGtBkJliOtBz&r+;-P?-Qo(7G7o`oqRl5s%s&fv1p0E~w$r_M#u zn+3~}I{MaPw9=aErMa8T>BTaEcS-Ji?{5C76*%Ji%LAgb;WzZ&!< z3gJ))r_LaiYqZZ{g>CKV>`v|SAMa!QXv}CqVrDhays<|IxkU5F7RTUqq*ZsXg9E4} z$Nl5$_jhR=ZYXiXoJw<8ZrE|cGMr?4m_r)HVYEK{@!IoK zb^md1@F=^^U;o4{g5sod-<*TtZ|K^Q>TmeEJ?rDh%cs;+J_pFJciBFr>>BywGwZ@w z@@;N*xmPaAf6ucH|tv^0#!AyICc!Hne(%B3)zX6Y?I+OhEES&vH zqnVd4nhw&XDe<<{YalUw_x2@6_WCTh+Zf{HrO!_9F8A0bn^j>7IEjCq6mc210*n#1 zX%FjJB^m)go_aW=3!*dXfu3$lj3VMT0uJ2UnNL)k(A=|V+&PRV&q;$xSLC~~3(d7R z+?m4Bq;J@D0@U~Att5AU5QkS!w^S{>4(E=cGmz2$r|Ui7e8V@Bs1Z(++hOn|J_@|U zKkh0`8L}XLDmn9sgKOy5V~>oZmNLW&NNsr|-Mp`Hp6~vW4_tpAtpyL=@KA*}#XRk9 z_#N@9k9S$-TP7Om!{5h=Rf(y;>o|8v)KuTSN<0sv{L@@1+}P4-`j^uc^@Bp4bp`ru z#3uMYWHFNqtD)tmz!*fea-OEt6#;9^rI>yhnyW z@#r?2uIyXDVKog{A^hxJ3wKZU+kL8r=Na@#owRFoaOBInx$XMT@)d>nHsT_!>+hd6 zz+8GXJ=IdZZGq$bc5^u2q*h(07vJl5XMp|xguc<{9vD!5}qpPyu!A%IWe5+Bd!flVWt z5^aVWTV1Z6*U6es#cNf)ODs|?GNiYW_1+;>Aa8c~J`{_11v%7Rz8DQu>F$AMt;16d zJdJ44m39t}GPx^|vv$}DqoWwDCLX(CFtxQJp&bDfy>UGSE=d!{VeJ`*V9tf5IU>dn z%+bGtzu*gQ6ZD@Vi8P{_Po=OV2Q2HEn84(>NIOzYUElPqtO9erijPIk)1S1$7J^q; zQ}AC$P~FL@ym%9&z;n=@);>cc$S@(h4fZ){8K!4B-W-S(HJY5GyDOpENauIzBqAtp zmb1q)KUn_l?!adxZIvVrDE~%;HCxhEvLpU@HLGg|{z)c9Dt|{?AaXtuE^=qUrEAdJOBi5I`Us{Y5G0K5sh*I*U7daGY5U z=i{h-LMiD`Rm8gac*4mc4r%__HM45>JW{&%GtC916vxrsUFYhpD2 zYCXp^7saiCo471G%ucV$wGDkz8WMR%-V?+tS?)c<`2mzy3ght)=6FP>b5EUP4h0rM zB{8WBH}yk*954Hra}X5ypgi+a1y^W=6m zI2d-qC%u&ic`x#klFBw$I{hAgBEqoAe#x5Nzw+X>`8S&U$ITkY4uWB_xD1{)pP^9o zB>RuN0A`K!Ymxw~0U9w|buUww>6fG;glqO-lcA9hkx`J1Um_{(DI-!GcUqiz?>fq0 zkD9qoh&jaC{2^>I2`nzQ#MoORau7*ukgOnBP*>sE*n)43Z$l4$CJ%H*Z_(Xpj!Mt$5_|9*=VuNKnuz!2B)OpD1?t6v9h=3M=&0EH1? z^yEDAP_#3QsdTMBJE+NZ0tr{BdAsBiQuZph+1C_0()M{Z%%&kHLfm&@2Tg1_%C)Lj zo@4!Fr?k>or_j_{)9=8*UUpiM;xAcIAxE&rI>ZC5@rz8GjpDlgtY6tTj;;bc>%H?A zWVK_0CY>uiq}munWQ!Ds=CnDw=|g1$C#V`!Lcbd*d^&U^ z@jdY5`r{JDpmUgG#zt5exh`d^%{rl*kZcqs@Re+%+LM*rZf2)Bc>1KWmXqi=7dhZ} z8Yp@}w9@Yuy$3%E39hkVwliUK6B;LPYrtk+nY-Nx+-W~UDux;>)-E9+l+$`GIb@XEN4$`vtJ{;S|t~NpcdUhh^YZY1V zYnxxQziJXX15CO1piksEy+A4g?oK9z0}9}R4#sliJKy#x>uqCSQ$#iIfrUG<=62x- zLPS@)MRpa321AE@dBihrax{rhvQW>Bay`V#B1b(x4;1yk=KMUdhT+Q{qHMtHavzggQa0AGfrQ8?aG)gRG*-y6h1xiozzHZe`i@0_WXCF zLvd=_DG;t_X;fmAO+iME4No`9$6oOB^_}b%s)hrT8&w5JyF*AkN0j?9I!zGsN=DE~ z2ES(W6RbY|!g%q6)USdHNnvQhRvR5I!$h$z=dl8B1GK_n1@;b07ac!`NR)DaIz5J! zxowAaL1N5NV4j`(>>p}n5H?}WZ(VOnun5oGbP~QlJ^gC7JHzPeuNiA;@JwTS5Ses4 zjX$p4L6}^my1n8@0R0Rv6f>&pdg2Yy|7YKP;6nv`Pgfy(X|JmltH_u1hUuwk#icA# zi12vTW4(jE@zonc&-Fr5qGc@e(4n&TgM}_f3pHOJ6Czgg5OC((?IiVI*2;P%wQiWG zq6)v*Dq#_k4WA~m8TVI9^lmzl<+Rikl3`zJ{5r`zn=Eaott#O0&>P`Os6sE$pa1&F z;2fE^IxmPW4HzJZ+eqh@cH}K(8XL>tOQvGr`UiHeE}ym+u!*0C15$=D%8csjgrm~0 z@ff+P1BYLHEjJ+AU0#1`EWRCKs~SmN++)>?|1OS9=6Ne_HloK~-uV2~=j1NO-tEHF zIAb(*6Z~N?PF#-pOl6F6v-_FFv)WV+;~~nj4{z9#?ANXjek)G`HoJrFce^!D?f#Vi zK8q)akIr^=ad`(1#=vGQUsuX*EwZ1(*jOVxQWL$_Aql4wLzgb6CsocY93^D#lWGNc z5)Meo$WdFUUMPyjb2_+P{nc#!_%E=Kp5-y*;b9#({oVyR5=Dt4oN;OxoEeUa9-nTS zx=2ut`G04!SknT7tb%BR(BE)4kl$=m@}{J$B10>x%h9_u*?Tx=DpJ8+8jUL9bNTGK z3)kqX_3bIABIlTmRh{>d@$U^+kfN9mCrIw#kGrY}0h3a$qNoOvLWvxhUzpETQJRM{ zn1~rQ4g`UG><)AW|ApmJ8W0fSNYyR3oYLl?OuiwM;^*z)XZn^v|rrM5R1NureZb#{_|Xg_cWZbgHGy zz1m%qBA3arSoX60m<1EH!B5&Xpl8EM21`5PL^pl-;$I77RU$ETAgRh}9L|#w)}~81 zTRgA1kuJlBs~V+w8X8fh&Gh%j9OulWg-MSGuH`MAXT6tFySugz zlmejd_8n{TBh@N{UX49cD{<-6cH_~)_4r)^KioGvN)M-I_|S1sq`L{Y(Q$$VP$Mu1 zcD_`D_n=iqJ;Yvh>Rb%HDtU1qFPgFt7aEfIdUochcy4$acF~&n&M1XsOLBfk$A=o7 z9a(tv9nei{yvak4O1sX(gDS^T`B6#mKum|D*Uy6}DsF_eiC)|ae0SvHH$&ww ziZ63*Bk*K-%1IBB9;e_!HuyZR+G{{-fY`5>#wW`c)18^}lx29ByQgEr8?w;1&>Mqv z-0(rY1F$tbcxA+;8>^Ru_Gge!h`d3YV+H3}*s?UsQqw7b1Z*)JZ-azSX77ZI*ftF8 zU&vrcGZ zZr}B_d`_Ywb-cO1&QKufhH4#L08t0Gfj^Q^sQVWYaTl4Z-{(WH=j+c{6_8M1! zci@Gm$jA_??}(!C!BkD%D3MxP^>WzhDxKa9Y(SGWHCothB$X$>>cyp}Iu)qua6aJI z#$p(ja@IcR50OnSnENu+?l;C$u&oczpYHr~B1JYXrvf$t&IFHWO7iCt$#~4*BDKjl zpL3|h2G<5KBFP!tzq8!vKw<()ip&}IaCMn`v&B4dd9(jfu9G8(5@tEnduuC`b^Nux z*z^+jg$j?+vr{a6)rar7U~Ep3fKUwnO$Lt8w7X#H>^J@f)%fdeiZay(x$;NrvehA! zc$@0Iq{ElvwGTvyONAsG3=H~S5>9GoZm%5#hA$VY<^jJU-pp&Kqm|ID2Mo(UD66dp z9`Baqz7_UI#-c`8mI1ua(QJS-Ki0T&d&!&Cp2()3kG~^9z33{61ScWh?R1g-5?Q~5 zS2u@Wt1gTws7bdQA6;CCdwj5^Hcq^HKr2(GJuQ{L0tKJxn~2eK|ly7J0!a~l655LB*3lBoT)cCCW6yn zP%fIhk`1edH#|Nb>v~pQe9OhfMYn#0^ag-SN0%NbUGK1%$Sfn>xqBLn&8cBe7)}&> z3y@iqdgaWDDp-#He(n(&V>`vt9gg*m*okRlxoPi^f{KMtN(q3Xu)q=|)6$JZF5j^} zSt3Q_=7<5dUK|wySjqnEJdrw-Fj%L1B^J~p=5(mSbZykW;M>)*B=8faUle7oY zf%2wu(Sr-Y(jXk$ce?1`34Hcz^r|DdN-9$P_%J;1HsBw|JOwmqM-MwmbP{D6YU{WPQRi+zk=R&`Ud`}0t&e#`@@4i3Mv44hDt=5b{zpj!Q1eO4?SkD67E>)Yq90pJFjfApoSY!Pea9wpI={aZ2i z5KbaBxAdc5{mp?eVriT@>y1a@)Ap^_uO~+X!%`2q7F1^aktDqs9{T6Z*|3j`JHN`u zC{Z^kDenp%$I^L>E1vaX*nD!I3Pa3sor2~ri8f*$^Y68WC&^YISXa02lRxZ zkZAMn2Xp@#mn6p{ro-Pu+#>n4$QUVdb|V)k!Oiv2qBPcUe-zo_>v%=>V43nRbF4&P zq|&dJpoiRo>x8b%Ky?TmXn`sfHH^YGaz5%K6Prwkfc3Rf&qMmG$apWx>n4a$UGj~k=NTkQcYi`qKF@kv~(Owu={esFl{wvgX(K@YdRF-P= zKxeZgdVAwy$g zP&`1;Zp|ABuIBmbw z@l<&zaCknNxLvAUa>P0uOufyor}u{0fkr-C9KL}s8xJqs&1ocBVmc)Z)!Hov!~`8je##uDDpr z&+bki`wbxVeaKzWVO!9!jdlSI2+8^3N636=*p zRNFraWd=T#`Wyt+mtu$JL_5HKoRqpky0>D5lxB-ex5$Atw5_&VHuu?Q(OAgd5Ch(O zBya7g9UodSWRAN^;TM25Hy=PX^zB>Rp#G|#Lil=cGYEJK z^qYA1R4}>ul(p=qJaV|!U0E{%Y+|R_#64!-78Sw2J$H3D-FoWt1CUK@c&$$Qo6N-D zQP>VH2RPi79{Y(Pe3k>GXYG#8eh=;q7AXZ4k5$yD{o2y?V|O_=j%9H6)7`1vw6<5f zJ(B^scF6qX^EjdMxLx%q?xO!i6APww0LIN;>Hz(Im{h!a*6q_m1f z90+m9on35uWZo_-%I?AMB)COhtVn`$iJb(emYq+lIXGh3@A11{d0q^#8^RF|A}9A3 zi1V{^pCzp9L)sem2!pfB$;+@Tf5VO%WxP!V0S%a>fWXpbv$K2zIoE1U+w>qX;0R9$ zX2$cCXAFs_Q=CLF=V}DeuG^~#?aNU6(AZJW@Ltdr$iiMw65`i}v{Dqy+0CnO7> zboDSE#ijP=^m)&eEP3CnHu1NE?`xedAx^x*l3~S(2(ldnAFM;~+;`H2Vwbw-i%k$f zs7Sv}t7au*jmda!=K@isz)K7FClan!G^G<~I$Ggt=Scn!()d5QV+l6dKrDKh=lO5I zMTv^epU^p27w8PDpfWi74M>| z+KnDB9Uh@APXc}_$>P9|AF=fW>2#zaf9d^)D4Bi$f))l)EpSi>Ln(-zPBPvyXpKy+ z7yqI8t(3FEz#4MYtwj}!%#XaIjrR2}Y8A!0E%(GnCp=B3N{U@~=`}2}Q=nLEq-0A= zP7pzC0TEvV?q@?RRzW`_MVQt7)f%nub@V^okea`ye*G!0=A+d?b=&OJG`fy8=e z=|*)O4~9;vvo__0uW=!6W<$S>mnPdzJ4?>b#|$;t|Illeh(rmYcR*1Gv`adR3T3WD z9cT#>&HUyxO?9FR{)nDSuU3!DR-Ii*nT$w?YH(iQ6Mh|e!yJ_|L~QM|*VGUz{jqbR zcQrSU&>>MB9Er?rdpMyZ%rrrcQ<<0+Vd>v1EF;eD_DnSrIWk{KeLBFqNOi&F;l1t^ z);lF$?BuPAzP;x2!+wbLVMo@pIXLc{gh!icX~PfX>qSMERG;KTAM04&s~PR z(sma7S=Wr!S^8CKGI6lM>FWT=dh(eqoQ#MRWfC_zQ{?vA2-3ydG>9wR6`v{EygYY+ zPO8KRwKaCoEC`Tw_9HLE@QT*xibkc^Plt-qPc8kvS&g@NHkRN|ZDyYDbR#&=o0Zg@ z%MVL@10mtJ$=r2C?fO6A!T;yO1!>`!%#Uy>i%`Vmm!6q^|ru-kf;4z~8c zpUrF4Ez^sTt6`k+d<+bU3mt{ecRdwh zgOCI5%_>YNR1t;^=Wg5X#$0tCq^3U-QVbIX6^|``_=(MhIf>@fXI}XU9g4Ye2Q45J zGWI!cu+Z6%+j!vAD!>F?z7vFfb-k9RWhH$`BCjLou_*MvBp3H@KM}#mQx+~hb}f#Z zF5WV7f7Dv#@7yoDl5X~%m=t@km+dmD`xGOr4aq!;N8FVQVER| z{ck|)Kc>-NlFyJ)Kdd7v*>I8kq4+^zedcFY8tG@e zrI1&USuD?Nw*3?@#>L0qD7Z26!N>rVN{_L2B~<`c@r=Z@oxkN z@&E){Z2DPW0}5H$XbBk_#|a2i4a%(C-uz*V2&sRyNvk`I)+~uCLF9iiEJ9*MzW~YH z;hPkx=#_vZAnAuD9q#^Zp-|!D`dJyz1=-7Jf;dHSH^6j1>nO7SspJ-opsyJsq}v7E zk2Y$LFC<8!%-=lgVZ|HuHj`Pg7*t109FdAa7MQWCx*hDrFMi-WJhQ5V_nOBo-T z?fV`f#0ahSb9_k`q{0qs`mGE{B=UG z=AfX-4x%SgRU$gCgUNmcPw_&5kYMOkhYxpq?_szu@#Mlg`Nk4 zi7JUvOSt_i>lSC(RS$z1G5U`Uirf00K#KVdF(cQ?Dh4qzPB$`Tl=8nNmBIbbNQ#w` z>-pKA)3#PsS=zt<|8bH3U7V(_0A@9%ofZ>TSlWqDpDxFp57LANAf=CEN)ZL`nyb%J zy~LJRdNJ#5lQyei&Gw5ft2g8cI>?y76nV+9I?x8{P8L)hT2f6Djw~TT*N5U2sFX&z zrm(znqrdJ*gs%kZxM2o0L3Qe%pn^~cyqXBg`$<%~sw4S~YD01X#24UWp;NZ=Bu}>2=mlYV^_#bx@B!gfJ@ha3)o>GOG$h%sGHMCah?|vj}F%R9#&X1*Mk7$MXTLyvR3IcxjzVn>MI#*bx3V9O~C*PxX zH}p5A?&RW!YIFsf&;2lBtB}fDPUTL??uVVxCakj`9In;r!U>nB=lTKuJes}_7Zld! zaH|r|PG#EEZ69JPW=rOEPNZJ07*!qKTV$F2%v@}MrrZB=SJxujGRLuNBKQ^w#Vb;e z#2U}YQFKuxogd=54e`?wMqE;tbU+$hOV%SIn(uBPw-}X#VVr4SH+Jv36w_Zv#5tKj zq(zDOug4JNy=NS6l-Zp(@#&bi#2moY+gT2)wubc-2ZonS^cwJE7HB{S|Aizu)$!2E zQ_M4lR~^kGPW+`e^j--}dsCzmbg~0E&{qMkad?&&{}T?c! zGDlc{M%6?7e%iYA8vi`+>&);;b)Ov8U9-ZL`ENSnK2WGgsE# z5*7c_z`;tFo_G!g?Rj$^GOkZZGFQ~6QOzPlLR!HrBB?pup5cT_&?S@xTg);kEVcsmdW zJjE0DEl(^fzk0o1UKu)vatnO?t3~20g+rTfX_%zU^_Y-|&(#I5Er*%Dxnuo(9GDIz z-tEQi;yAbY>pDY!isaJL#C(wTg(Lug0_Iv{&|?%Y=Zpa+XLy)-b)&2%p9NllY3k*f ze34p+utXgGb>BLB$&1L;trUF|w@K04>_+7S*QxJ8A594e3}6K(!~AaXbW%&m-rn+X z(x!e1xZ7ABJUK4yye2q^bqP#s`fgC{g(iQt^PMW5xt`n@yY2+BX1NMgxd?PPElaD~xFn&=P{Qf+@(Y5Vyz0#nmg zBzEZVadU?2v#MTfN{gtkDl{3|NkGuUUqk+K4c8H8gLDImm%&^|@Dhdc&*mnc2^Ro# z*7wdF8VW5GxTL}(?F?9NiHgnXMV5N zUan=IqjnOk5!Be!fTF>eUTWetDs-F!6wOYaj=fv3+_MzENu9&opeiPOfr}mw3ev|u zw-W4|m<4d*4d^o@nbf;H!K*pt#_jv9q#p94b)cOQ(mq@IOC-2 zpLr{J_M!_*UhM(LNWhZQNT|IklD+8hn`TU~x>KAOcdF6G! zzCb=(Dm*eLXy|Uj#y=L%*e*PP`j?N+DH%UE1A(<%m?N8m0M1;c-4-)P`ckKLgN5$ z$VM7*ATcCUngwz#PEnv3hlUK9+G~E|m9EEQb7MF1A*l84)*X9#%Xr2TTjRZy^{bu;lR-anz3 z*ZF3DW>dV!gc~6}&tfrpk?zW3G~=+U zYvP|mk{&K%#BoRHKlQ!m)#UbYQoqn4gO-RcWNcS(uqL21#KB&RNA zdR6gauHPMTXWKl~>DqW9^wwngQ!X|(9)F%>+MaJAd7`rJ`Kss>mh|JV5Qg!d6s#M2 z3Te?GO1$a&;_E9yY!2uPE*lnE3hS!)gsQ z$B{^TIs3bG0E^sWjnOK246x+P|P8WQlED z_+gm}U6s@O%8X?a9U*M|3z|oNTe`nS#O2qd&`Tf>z(!GdRa8`qn`Lm&U3$j%PH|}f z&tdRtvcCRh&GRu*aX*>ztix81!(s>KZKs;(DA|57k%bZ^&p&Xf=UQEbiehw``%YK* zU`_Z%7n+NIe`Jb<@wRA%Q*ZizzeIu_v4hTpi))mAFPy*A>%4iJJHV-KIoMRPQwwsF z{@!`5Yl?6imA$-fs2XjnnsqwLEM-xLMdm@WRoOu!@EH7iVQlx7n_h~S*n>57I?b_# zZ@rk?+PKr$lUs5DFU|(bIX<}GDv+*8&Sib+(JsOaqetWDp-&%sr@h3&Y@jpNYrus= z`$%-2$4+HJF`|ZOu8CT--wZ*RpN#e@G&AnDf#k0ka(LaZ#F^mO@;-qJ^3HJczjt4@ zc20Vu0YDuPw6swV{3TRdZS}Jh2;t`R(7|2!DG_V=vAb-aF6>5zGTUb@%C#spn|dB!eI>k67IXfwB3XWl0D8tI zdTf(n`bYDhh4h38^gecqT#kp=B&=@2o@6L3R;=MgRPB4q0547!7EMPX=8~#4W@eud z{NyUrF8@u_1BE5a&#uwu!^6p|Q5;C&w-I|YLvN^!I@#L$4%{sPH_k2ZFSRbKXRC8> z;OxFmk?jQ>Uwq<)ZjK3_+)DB}XXafRIZA^9r)rL4zF$G@qCOUZzrU`R!LjO9K)sPZ zSg2sK4A*E2`%7Xw=**S9p?S12`r)paWSEWg?}!hWBQgNfB?#Ffu}af0dw-cx6UN z+(S()zqui($BxwT87i4bvLf%jLTD0M3k6?s+0ZZ3t|y_Iumx|VnpddjHGHYTZmyMy zc#)ezX0E}a|3%KWx0JSmD%~qmc7vb9DokC;#4dz2t4;wAhB*Q^`?K>KCIOFbjFV?* zrNIl>bgz>PHW>nL*8{p9R!{v)P#Z(~FIZC17xUr0*qmPt`a-|c<*-$?kJRAudr^w{ zh8DhArc$Q5jcC3=>dDg7YTMinD^qz1-_sAkkLs>7`NyN-rEDADJd+&aX)}?pmtTbv zC2G`R3&%g_f&K!^#?JjD^uF!d7$wQT9$Gyq!l^`cy;BC4qs6+kKf=MIc9ku1mwjJU z@tDrR1wZqU-B|_;tFg|8L@=E$@)7x(F5UcakQE_}%65Sf(cef7E~n+C?VwF2+^Y$@ zI{01oJMmK+I;kjKj;*QmH=Jn)3k6DEwEWl}~yXTxi^X>KG;qh*H)Fi^yHc~f}X2Q>M$BO^cskh(Wm!AM}Tw&*_` zNnvZ~2Xp4DifgJl2_ff&VBU3^_4pnuo6Fu9($7I& zST5vZ&o~r-oyFm2(hk6$FKkkWWTw87hcWM^o(QpBLocip@;<(K%;f0%+y>w;b)At- z#wHE=3CZL>4m^+QR1^aGy_I(^6jO*x87?=Q;4*y|ZF*v>Ur0Hmde7#N-y%E```dEh z^V#8aL0jYg8*LMhI-7v+lRd}R^Cf=`WHW@K`Yq0K_?>cnR0lf7we$_7o?{OQ$YcuW z?T1ioVR)WNVyfI3$N-mE%LeEI_U!;dg4)380*!l`4@o;ya<&>#30UFNgJ zF;XnWf4{gZ425Bn{tbS1G57^ELoW`I2V%R)tZF%Rt_dR-vN{^^FM1FxYZ>3`TAHjz z^ZuV{>}V1|D`RG20AV%TNKdqKY^iX_TxJhWJf=rg+@I1!f95-bFVFZ2j2gVm*gh27 zxbGM;cIjUIu6*nP@g9p+I`cnBmrgf|^<-`MQ9Sz+-N2 zRm5+#H^P>HO;JxVnD9vtaU~v2R!%DP5q5FT zfsTfB;&MLwAuyttajxw=WwHafg<;QsDbj^oz-9VUxyIx}BjU9l6@{zLOli1QgkzmP z!hzq%6FnM@ZQ2J}kUyNhV*a$u7U&wfWfq`@(TeA7jMSw z|H70{$)&~a(zJS`O!C(K_#Pue#!-73k6xVVCvs&dN2M43r9IHp7j;lHUtA_@-o&Ru zO^J?=K$SNr1Yng2$Uw0bK-!qy=A8PA$nUKg)UpA{Ita=%2_L~^WsKp6Br>2MJ>@%sPf8W>4 zonn$&%eR3`uS^y13)kzPp)uTJ9}}-|w*Gxcw9&g`vK0-)N`GI(07R-)^HZZlP8aBq ztTYxtjqr~oJKc!1LJMd^icV(lv*GJF5r$JU`G-OdO)kDq6JL)D)o8H^?->=TE_WwA zfc{qrbHr?3$_+FW+O(`#!28peA1KrwYY#HqYmk_4k)&o?|0ZTedrZ38s5APJEw&G)3J6qHMv?8^#t2G_d$47^kc&LEhfHl_-EP|Y;6-A+es);drjZ*7hci_ARMhHj^~13>2PIpP+p_%{}Ci-(9x`V(yQz z96i?B@0OULEm@Jvg`)ST=Kh*u!ZXyaV?6(8g;{rcgzjn(Ce6=vGfy&)hy!ll)BN_c zZeJfMg=iFl%|PJ$rU2UbAs3d(ZJR8ApNOZmO+(aPOQTu;-%H}vjavV;O!R+>Z#@xu z?`t-2HZ6O4Gaa`Kd8ouU57sqewv3?cz|Urzz9Vl+j^2CW`R5bRS8sF^k|k-+FmX`z zvLkJZ^Bf~#Y+9PkNv;fnN0V;n&2Q z>f*-CuS3ZE2=VXwfcxA*jNVM5;(1K%2cn-sSz5_KRd}}(N(A{&Y+Wpsv9w6%i_p-DMY!%59a5iHs}F*WICjH z6M#sl)S{#Mw@URdFqCxVPZgpb)nl_yT!x_88KnBK;WfnUh2<6qCNj@s7M8JM7SQ5~ z@9jw-8zDT%s&D!BOace6_NF!kZHF0`JIsJ-O+rG0l;J zhavx^Hje^?D2DKc zu+a<3{4saqKc8mK9Kn!!PRQma?}uqlFx=b>Uu>4mbk9vv%cr_UZ|#V7if({l6*+f&ds;@|_<9O=)ih zW(vlMF;6qw3bVEcW$84*CIi2UB5@{k3dv2J)z%6~pc zDn!5vo&4o>Kne%V@$ZK|MGYl#Lx)~~yg4?K?HL^vG0R&9=|3mVQTP?fG#dZF8)kNU zKH(3)WgC%xQb^l_VL3?V&-jc;w?>b{emoL*fHpGw0awTc1lw=U9I(2&|7S)-o<)gS z+U}J~mB!#z#>OH1SGJ<@-Z9YfoMePA#^aEtgZkn`;XvWHp8Wz z>E^%X;lW=0-9DJtZiY=VcKh`oLmemv0+4qG4GDFp?C1 zk5WKZfN_cYal5kZgy?*gZppvEm&0NZ3A0U#KE)08=kI~|UA7f=7XG3g*}FYn^XqIB zNWn$DuU?wl#9n*?r2>kaxjL>A4Les19U*7E)A9kD50qYkd*4Ql+T3#@rP8=eHK)m> z+ucOj(wL}doRLkeky6w<8T=P7wLR_Una|e1_(xJtQ2|lU9*SCA;r7pyG@?dvxvO7$ zM2$GNFfDO*x}}&!s4&f;q%EIn-Um;ub$BbTJ^VuaqZg3KBpa7XJ0vLZbky{z_Qm~A zV$wn`)6SKhNV7VoCW&Z_uf%obHqF7eAFdH6F>PQ z7S^NIX=Aas_-{%4``$ej;&vw;wq5WYbNR;6#c-eWq4Y6U8PpgpY1T$g5ayARlG;6_ z-~2I*ZH;J)4+rgv`Y|>0Tloq%que=Fvm8RuNiI9*3BPqwPV ztdSHHl3iB%5(t`o=DB3i@f*R3WMtJNNK zxW=UTst;mm5=zRX-Uu}CaE3!lwRf)|>vqZ`sD6b1^m zv@ohL0_Plj+;6mvuf=q-8iHF^W@g?Lf+AWZR{|?d!hRMOYW5gogC?9bc!>$G>&Bit z>r3*LW!`pas<>@$lrF~S)ie}`{jew%PJzX2L3`PI69$*!E$4#E*SlaDZ$I$dFB);v z;exSGe#|V{{XPChYz33wV*|=xdg6E!p+Gr`A=#(rxlvg9OjDwbD8z8)ZJA%?c{tWc}*kcsptGC?}LWud`T>i`7FizY0}0FY_Dw` z4_=jd@5Ark4(rW25P0e5m0bx??T($8^o%=B=pdn#iG4POIarBgu-8Rl(zV&ctEN#pY|kpLJAA*2{uVLqvjjUQ!Zq?*j^R;;wYT=kd|p`O{V$CBGoTF@wgzCsM31XDkyZ&D-?f>fR)xQPv?>qG5+bY4ss9Om~ z(GraHiF={r^*6UD>9L%|RffQbg4=lbM1#CJX+XFS=L*jyyz1RNMWWR&g95~>>!{yU zSRy`9qrj}Ou2RE^_w(`}qIO!7Kn3i^x$ILBqiCEQd{RPMellsN@<0R24+=n4FQ4*1 z2d6wSEz53j{oLcTN;)CAWG>RP|4pc5Xs5$_ylp#*s`%RRjGqWTZTvSuv$eUK<7+*o zr75nXO2A9>0bMMc6viL8X`(MA!mG}$v7wgg^AWrnx zfsEYfuIn*U-LTrCUt(~+zFQ{|0Krdw#>QPYMsy;{YeHFhT?G1iOFiKPDvSLc^TQQTq83bC(KPK&ExWdG;4QK@-LIjM)WlMo2>uyiQ+n*` zI0wCp)J1$=)6f>gUS6nQ1C80-{1ze+kr-Azg1H8}Kk)O`I5FarCG4C#3pbutJ zz>Le+t6sU+GwVa=eF6k>R6Vm)q;WF%du;g*dzz=#W+k&jwr-AQ1+NPiIyxJX*6Gi| z*o>h5l!6Q+I$<@RvxjpCD%dmA(9n>HZ~9S5Lb}>2WFR?*o6F@TuzjqEo3ftj}wf0dZB ztorcYzzhM)$>49loN}a~x&}V9xk2`wNFCTAi{xre$8pDnP{E6>IrOfuDMI!mU55P@ z_4p4aF)GX=`58%3<1C*Hb2n{2ajekY`#P`Vl*Z56cIG$nU5VDY2+~B3QczxE-Ch5k}j6uEGd@*wUt9s|c z;<7S%QP<^jt41fhf!>cwA0D#J4XVo-Dl}1_D zF*C)6&)&Yrh18zO&ILG52Mj?U5aEj=*@869U0utZex2_ZU2VQW zHxupCAUiG+{oe6Y;@0rZlBrI3c$~6ZL8l7XeVy%zfEgqx1EiRf4u}4?W5-{s-+%IH zOdfupemBf(x76nDN~W~sEXC{Jjl?~|q~ugmZ%kBBI+2=ZMS#DZ6@kxrRzbJ>2%oN! zu14aiT(&5`!L@dsado$UR>SevZS4Q=(+65u)ACBmwVJNKE}SMetfb+mR?5b^?N;{Z z>SmjMb+(|U6DyBvrw6-N*N$#qBFDM49k+_OAyc*d`v(FMjtA{4iA^moM^?{gcRy|1 zii@AtUFMqqhZPc3fzO)WD`+Wiq|nIF<4 z*rT2I1!g^+=V^0SVjdogN+|nOheaWkOL+f5F8Tla?f-Fo$_QXV9I;z%`B2t^{l($y zbb)sUJLyJdWPdYe{pY*;A3d}G)u->+q^r)IbXUHzw56H{SPmKEIu-bqh(-1(nZ++u z=(GNZ#rb#H|Nr}sMl$f6Z<_O$&h$1)O6vUYmR+ws7z>zYK}yT3CTv2B z=^smEE(`h)mr)$?TwD_NTBfwYMQithqBA>SdXdp%bB-%pr-eJ1|nlTSi~Ad9JRx0rMAFUGmS3=Y#< z>Djq&=9=1nU9)0TpM;ibr^3QAO=N9N&59JX!i^?@2SEc2v*A zX!`K-%t zCn<;@l)UQXshhI-T}N0aXlQAtICn+H;k>%=CSKo~7qA{N3JB;es2HBnnJhd;8FG3_ zxPFq-k+duC{XxMbifV9OBx;erS5lQDy`Lo?nUjOnUT{8JseYX;Z{lksBkmW9zhBzm z;D=cT`j1QUFK&5P=?QLt^5HL3|XxHR(pGUbc>%QJgy|&y)F+9vWKcIetopN z5+2U7F9#S}q>0?3r`NYTJd=NPL4yHa-I{11badq7#d@WaYw@Drs!7~mcS*B`VX<{` zb10`bS3tooyCD7`e|vInt7K+pAM7$x0_Hgf{&t;Zelh%fA=H-3#QXF z0Sn4Mu$KSV9_0cL)>&6nDn#zur<*=6SAG%$hsYP#)k*m4QPQz2{;H!hvRYDuPPJ9) z@Guj0`5KqKsW<9%LU%U(`4cl*$H^)8?h1#0uu2zw)xZSZj%HnGS!G8e^iG84^T=E8 zH#p^#>c0}oKc-}~>WC$(H*9IN5qRmp3e*nl#jXOkM zwG15nIRvCmYiYmqH47<)dfoKyQ^+Koqfa)Zue3f_sO?!ipTF2s2wx?G!2N$d4*&ZR z;7|_KS7Nc%O)KMDo_O#15ZvXTcCU0_QSsL!0`NL+XW7A4(_U*i3%98&ENPf%zT3Ba zJs_f>ka<5<3fXFT*kW!3;QQUhn$-oxg`5wc`%3Fx+r$bBM?&Ms8wri zx76V1{8l`|HpBCGQi_0=&*0!fk*{3M<44ZK*w_P9zDxO9`>jv4z=S9Y!s8@}-%W z!O76%5}1rS0ZE0*b_akj<+~Al0`HHyb*IFqsSl{4y{IMqE5R`wUF9|sTFZ5IMja1R zSY{nBhA+vESfJ{b1BTk9+OaD)jWj)H&f$(EqT}J%8UMPZaYux4iuR#zL$I#rr=`^N zPubP*Twlb6w6__R^CVX1-IBHB>UK5fxrPT?f=;l)gATUman>K+T%T4|PpL`mkX}1I zZPfKF_$}3bfya0FVm>GFLFRZ+v`fRlMX2D({@YW< zM&^BrMy8nv*aN=2gz+&EL@nZ;oDODB~~uoe51uvW{)b=uyrq1MVRDdr2XH{})=Y~&n*h@8IN1N!Lv z1PbPs8w_k4Lm~7aQro^LvSW_c+wechWs6y2C_2xO$ED)h<*ZpH#8v26)SZ-+l-fb4 zdTi4{ZL1^N<5j7q93I}$rKe>FkM1;Sa<;S;Jg+J0!I(ywJ^XNONPjtW7BjQH@EqJ@2m}psdL8Gy8-jj{_W-}7HtokU{IyZT}JA15GI zYnZ1~P{u|%yk#|)H3~LUZ23u#O`m#rqM+(a`Ad1G+1(j<5(-ttcZQNS*uTum%gzpb zTUA^t$x7o6r08eAs*+)F34y3?yiN#kCGH7k(fF+Sa*q*5Fg8ZilA!%4}7cUF8_ zC20IN`sfk44H~Rw1uMQpJQRvWnX1?$$Nh-G=B@-6_#WBDPQm)>S1mETFBg7hLu|Xn zDCcM9vLHcmTr%%KR`Zdqw7#{M7ag#kwIU1^F@bIQMyy7TWr9)*C|2(`8M$ax>=?16 z^7(C+h3V+M>v0#Vh3ymTP>HzB-I*A>3#@`$-g@Ov@b>XotgdMJ$SBd*G>LOKq%b?T9lIFTY34M=^=G1%hn~SUgx?s zPNBPui3p5~(e_q@bgbJFoo^_aIPo6*UK75Gs3Di|AEhUo(^AcKI;n&+$ve(#kid0(;oX&?-d4v1+uw^~5NwnUSOknC-9g4oN>dk@ zlOJgmgJ37@LS+fY;eS%5bS35a)+e+G=J1EbBZN^d}%BY&44G8^Ml`wb2te zIiRBx%>f)tVaUEHS>cRbe9<*0RBmL?!$+^u0gYPu{mn+?QeH-hQVdJFcpt08;A1;N zMQjTSm(&7He2eVL(7=GQ0=1QxWU{)Jim=Ko+?`877#HU{TuKsonRdh1{7VbDSHC{G z)-tZdcK(PVCU2?1aNdOj_jVy@yzbvc>cvuHu)`W`j_I{0a-38H+)rhow0<-k8!3Nz znb;kWpqTUQ7osiHuKM0K%+uA^K1~jJBo6s0ITSYIWZ>FNd5~Uv&?z_{UuDpWc2i=I*C`lv^Fe{n~1?FS0UM9iIF+@+V#0&)|_pCmhKXFmHhWYZ50#Ns;|D zZdlzXw09-)0^pl4g{Z1Yai1LElo1%AGgV-GuH6PkodUCHL(WoD2fl0}6k)Vr^(#B$3y2kw$i%g6@N_k?l<< zr?B`MXN$`u?h+!2$M+}K(MG_XxtFDSb1$1#5zm37{i+eBy}b=_7%)&h;QrL(#B{1? zzvZTvKch+=qR#MGN9EonU9y8ZcZs>c2d^Sf*E$}kZXM-GyXpk|$QF-OJq`$%1F->d zY2=|+h>bvESfLNhzz7VpA1I2ou5xhF8wSoeF%w%cw;F#22JtKATX?^COjxviiv2zk zLNr&Olfu%48b&>5#Qo*w6x&r+Y>^$_NQu-XsXR=3dPTB+6Ip%G89 zwt>pI`a;8FMXA1Eu2KN2DTMNw$QZFW8X&W~S_6VZ47rePf)<8-x9elZt7*wwBjzub znh~C}WoyN}c1dS^{Ptj3ss@v(TNOFtn zmg@2?jb(PmEzUJ@$<+p$PQ2uT7wQlttbq0dZ0wCVLT?8BP-CjoC~asokgn-+#pAf2 zvY#Q%x<|nN<>xjw8PP&`tQ^4p5p2+J2a-6vazxFy2)qJbypl@2tstMCsm2{sGcp3aF6)N)vEirCOjn`x42741fl3QXT$VdFYEypD0J^c_;lgyY}U21gv zb(SZw-ZlT$>iL)Bfp&BlvwIu1TCkVRieM@$MEIqM;4c!gRI&xKGmFScI7piS4-b&p z1kmb!oZxvan3(Pd!GJsog$HBS6|r@!2cH*B`tM)0qqH_UVeh&~5kyu>9^Y<4(>eXlpbS~0O{!|Nr=OM8cV3wLcm;d>V(&+$*)t$#|W@X)sF zRCgnh}o+iocZ+n!q9>_Q)z=-m{pbDEk=<#W=oe zI4E(@dsxSfAM~AR18huyzRJPtc2I9Im5YS76}HsR_C4Pcb6MKuRA~dr)2ZTXz*FN= zYa*3y{}wO>CWRcVenrRY=xz_NMg54m>I_Jtv<9XY-B&!1QFL0rH=%347Z!oHKU_Ws zk~X-Uypumz#QX_yRaQoMvXz94SK;cmBW-+)Ak5qWb`p7KA43lE_05Oo6Hg$QK(yZ0 zIWB`WBB1`X|Bv_31CCR1fLHB8T&o_4vijipu#PB8yI<0<|M~jzmmF=a7#^*Ir}oas z+;OsHNwgd1K=beU1AEWvm*S_vj_Uqhdba~f$!J|&IbsB^0NqT*-@OB=S4}d)8OnXq za&KK6xe>vmI_SEa8Pu@y{B(W%bbsRfC)H${7P8U776uErwDV)OHSQj>KW)m`!exAX z>?E2PU0wTZU&XWUUjukX-^@tfZRH*CtF$v+jgLJ={KO2Km4xbKw!Ioj=-#Q~aY{I# zbScGd!HJmB9{l*?iD((81;=_$`xp6YcWOKij}*G|fX{5~foFGmN?E1Fg3ph?He|+N z(e-^_S-@&I3=Y@+Y?}ymcB%)`N{}t8#Hc61qSajMzC%dUA7yH7^X4K z=y+bSeYPsCd8n?r2B;}mhB-rj5O?xfKyqAqDJ;wtszok2XFkXLi*;&L5N{veKBf=# z6&8FwSobCX`avzY4WJnus5^QB_R_tAbwFgNeHP=^=3~K0r<))Ux$Hpnppve^n8E46 zd$?R@hRwrtDbN)cgo3mzE9%-mVM7*(4ifoh=;<9ld1)pZ@O&ZgoV`A5-m>k%B6n|< z5Y^cAt44<){Qk5&DD)@GT(Nq~V*Dqb6q-k313f^1j=$nWmR@VUw4N*LDk6Erq|?CN z_lrq~yAjAeqo?hkRg{1uN`m%5odhtYUE8uwMwd}e>i+ce) zI`k{By%XSGYX)2CQ@B%^@FTEp2dj?#8Kw34<_?{IS{#?H-fPJV6hlrJYw|9HJP1H1 z7=WD}ri&5*x%j_P?c@ApbINt;7M7jpXV&{Fo66hEy}$e3 zXwv=&FpH?Xn2);r?WEp=J}<7*Bed_szmmKNMSoj$RI2x!?*X@%^H{+azcP^g1_slK zs;4{s@0ESXi&*Kt*fbugMU%uw!I}+zz`qRKo~6=<9Q7znoGX7QM}VsQgQY_hi}ZF< z-7)}@JdP3x9H=38F!`|`>1Y_y1}4Ms7w6G%4HocMEBc)Z_|!|xyWKXo67`M&Tx+pm zCg9Ck;XCVU^_OoDQ3dPmL7pyBzS@V8h6eMI%l9#ZD3T6RLP@>bECIvd@gL(^jK>!P z*p^AIE)-+Q%eFh>O*D97rYOxdeArhL{jD}{EV7Xf&AdpFOY65aDapy+%5fU_Xw}({ zTf^(p)KHH|KgXbJpUIa<%WPdCr?<3`Woj9&mo zZ|Em{o4Ja)*Vu(k>KMxjt;5alTnjL=pn_x}L1+TXch9P1Kj)77Vxu;#W|(S_gGf!T zxQvr=zjEt1AZt*GYgDALUBIEkGdbrC;0Q~yKzJW&TR%hcgRqcrOVK>%!k%6ca>|zx zZPp-VhV`+?F&G$Ly*S7V>jb(ZS(>weggET?h3m!kpvyZQ0sL3^AI8!sNWke{YY4Ua zPab3rO7VTUBW3D$m#m|8BH|H>Lc5v54MyeHxBamyr>>I<;=71Z*z~FcE)^0;oVFjw z1`|}iM0ejTF*|$n+^qU7vCQdO0+&wFjPL83V1&A<$%4B=c!SU*Vx2+ID8Jn zbSpCL!GVDy^>_VQ+Acy)&w~CvJgx3MX8X8IAvfqbCWG3oX;2gmB|m9O#SK zB^EG={pH>-aW3&LLv@i&yoA^2e$i?*FU_>9IbTkQzd*=nOKnvv)ou6%+QYz!z(bA6 zW*2wq@)i;lzwMVYo10FmDAun3bP>@PafyhMI3ZKBH4@id80WP+X3)UKxwj5w-rpZY zi-y=v!nw5EAG_0KZQRDumRjlpR^?|Jn~o9zvsAm>X#x*|x{eIzqj{D0MrU-eV?ZgR zXr~2~n8)^*6SH+^U)FX)zDBzWwaeBgEZI&-)GE7TZPgo>pA>1Z#xuW_nn{h^X)}BJGFWdArPYH(#zG=?dVB(`&LiaIH_P-sC)w1MpT0q)6B&NbpnaWjVQg` zHo4-i;R;CFsL}v-7vbb8D;v&CIuZmk$+>>Cr}ZPooXR}2btx&Muv3)!_tW6>CI>Sg zUSAAPo^pDtt++X`9P7rN>xSlTsRGc*#^~!2`^-owE$C4y2 z{U|)fpUi#jImdjM_XweCJX*~-+QoyTp}tmMF^T4QOm_+@OJtu05cmv>%WENJW3;Ju zA3x^mr!ZF;#2ipqPz?&7vhU$_OyxEZFS$3!&6FxFyEmy*Ssqkj>%^=d~jgLrF_^L~ahZpJV9;SKp^)G}Q zc&Y9mQ$7%l`spX#^ut*t+2CF_1Baj8T7h}EX;zU(^q0i(@0&#VtI$bsRPqI!>DK>Oc2ANL-M3*1E`e*!eORG2-=O9PvLuh;(V$1vscu`IFBuNa($UA9Y~6Q?|Y zp7-Pp@CFw6bQ4umUjUK^%skhv0pAG=3V&$8KmgCuo+v*EDXA{VkL$x`2({RQDxJ2H zTxh^90 zhITJK9cM@KPpF)poxg(!$~IGHiSfVL4E2t_Sq9u~fAS&@-fZ<^$UVJt@;13DJlG>i+g2lOQfwJMzxtk#^ZnSVle z{LuL257N7WCElQ$kEWk1i1U+TBf|{cpdx|#TZI{H?E!bqv)Kvn>V46`Z?70VrwR5Y z%!cb+gsLJ%!2n7ew0Lk{wqBu%SeG(%4GasA){c&EcQR(!*CBWQm{f(1eEz>0B5ejdM_Z3F`}eoMeHzzN9s#}tF6t5Tmg{Q9 z8fOBtUM6{tOSGO&8ZIZxP4(g7@8eX55d~dTGRzYi#Keu(+ugSO~)hEsM<=|msiyvH>5ESt2O|0g66f*>gCl9mcHQ&y7dRe zt-NXSdHp{1oq5^sorc#L2Mu!19XlnlukV0-3`fvIV{lzXRh|4q;^(I)4t{1VvtqNQ zEkcO+hV!c)WI|Tr`WWL9>*1wb^0O^NT8^Ukm?r$OsJi^wGJz#&p*T$TCrD^RF1u5e zi7BK#FTrQzhdHC>1Y7b!bCo;0jljhmi;stvX*}tsew~oC28OxEXT8Lhk~(IN7B67B zGKR7DpDgFJe`vJ)wIB)hMv-}Z*x4%QVHdjhX#pWN(#}ct zKSs0% z*mIbbq|_Q+tBT+K4xc>XMJ8g>kVnv%SyLJRSb|AKbA}xvj2JJhDjw;R?Um=WhFQH$ z2Bbk#%ilv0CO3-9M}7ic<#|kY@nk5YRj~gDknfZK{X%QyE@3;U(FRI7AQIIlYv03m zb!t|hU~jk3UBBHNiOX2Xrt8OJyb7eV#(@JayTm57Y=-51-ft92C6=ro^X3{8d%}(! zp6WKLLUPa#=R>Dnozi0(Mx^~Z*b*mw$2>;j*mS_;Wc_OtYTO?Sp_K8^ClvXJK^?VT zcaO|diPsr7%DZZVeC2%@wA+b2(@&kjVBHs?CRL{X^&??wa!i5eu)22{1@nA=-CA-> z;APd{r3C*z823;Bdy_Qp7Zk?XxJt2`t^4e8oi(*@kC24mQuzD&#ID^xuKM*B&SJK2 zI6Oa=YM%Qy3P)W92`p|x&SNuv>YsLD$|?JpfK~WT+aBrmJ+7u^2(8=E13GSXZQBFx z9wS{Y09AicO`t1KP}c(^NvS3d&s>v-Lo)$21#016Kz6R$0o3~pcqc2v;PJv5Qo`qg zxNVxRRI$T=2DzN8;eLs5>!6;(# zc-nRwuA35PQ~}=DYYQW%E8)s{<1>>STwMKD>a9ZT6Ob&zLA921?5&Aa9-syI^K z8KK$(rYH)ooc@u}vSj==SO!{LreMnxej;WLo^zhFTg=u>xDm7mTHs~1td@>xKy5*T zhLWZGz|qmnlv2F`r{0G5-gJ!^?gVdS{HBro+<1tEz3&9*=Q)-(|1JnQ0`qqo90dz5 zIJ1K}+z!7qq=h3MpV|x+10EgA3Ov?j^g=7<9i^Bl!sL&-Z5c}f3pTF{xJ-zM5qy(J7cE0iq5%m%< zvJMAQUSfiSjTs>s*A>Dbjl(Y*8*QKest+0K00T3EGid{Z{OMN;U=ml} zpxORDiC;Ps9$znDmep7Nn4vQgaAcjb^8CDMQqyR{=Ryx3@tQJ7NrHgZZt=dg+15aO z!v@;QHcjI?&P&yw zw4-056FB(6VW5#QUIaqci9~6PLD#9BZ2oGO8l=Jd1>z2TM*PS&R2x~!y;xhMV{hSw zF(yKOziUNDbplV|sd1~@tZHP2(Q9v=MpVC`kJJ}hp#O0M|Be(*LJdj+pQ%2}K>yot zd~vb(&PdFlqAoqU3GAr&G6!StP48xVghN+0ypxC8K=O8P1=M(}SugR@vG5_Nnwz6m zFt~N>_~F5jY>@2k0vi#^JKt>ai>f>D35Eay(zoiqa$}(=AarAP>B+HC?3ye~+&4RbqItD#{P7e&GUICL*fHpSuDqR`9Hc+mf=5m{=YVXXJP zLDWyot@HG!EbWQPJ@2IzUZXU_2aSIr6>I^40MAa8W~#?lyqf6ht;5!f*~#HrmgPu5 z&!P&0)`aXa1cYt9P2fEN>-IZH)rP3Zax!#<{Q&`lc%2@f0f9PNI=&n2NT`UG9;XPP z@bmMU!jwZ1R4!#PeQ12yVZEDUi#;N6vM4AEefSBtVIuIp+L1Vohb#3;i zRH<%roRa!^g zx~}JyO7~;Ug0&J1Bl(m@rK!bAz@384Xm8ts3ydjeXXF`bOU7vflx_{j^&`O<&L!Z< z+v6MqHQt~Z1vjnQfWxkiW=1_-I}%miK;>WAtz6CMm8OnZ)jm#<8HT^S`_}MuWaIUV zb8l~%(Gkk(aZ_enFJ&fb-xAUPnf3};t46olj%3CT4cp+Cr*kUH)jv*^Y|TLQYgg*j zfLe*UNh|-{fm)Vdl8a|vgEZZBRkzY)FtYSR% z$!w#Z1UKEt)I*;Af=zO9C}{P}x}_d}z+xb&{A05^&wanP_kAwf>J56I^?Y3R0s6s< zH%5%HS6}xhE%twam>dH^c59vOg_bkczTNm~jrwIC-E{3PxtHP%ZtdJaTd10(JaDL? zXFf;*SN07t4h)~=Ya^IZS9Q^CJWqb7Lv^-X;T50v#PO({-)l8Ti{ow=WqFxQ24Q;d z_2#g=1BNHRcFq4d{zEs>B>zEzRJ0W42Z(F5O3`nAJr^}s`EmVlP`GPSo(FNHQD0S; zU84(D(Vk1A+uXHW6mehkCdgpCc76ZWUWMB}AG@IFaoVj0a8MsEN`7ZZ{)>9B4HpxJ z*g4aIB4&)a5)Auif3%Q;!ve0ks1P8HEJ40en65-FEQ|Q!o)Oi-apSVPP zkAe8P1PbPp+0e%gol*RtRwO&#fOANJQw#!wDsEg}FWs}m1Td`731EF4tHH={6UxH; zw&D*z*HUlsYe(@}v3$C5yqN;$C20&Oice@Ysg+SK7;c?xo1U3b6&A+8)P^ie(Vth7 z>{!n>r8`-a>rh=b$_Z;g^M|E(5uC}7tqLt36$yR+4YBjLfwdncT|sZ?=@A-{(HRGY zG{W|f>zNo9k0%0bjq|Q+nzWBZ$}*X?>{rDxAq)l)l`Rv9@cR+iQt9RCEF*4xvX&6r zvrWS+%};IB6E#-#zWE^D1=GFR965F7%P6w0cN1pz(aGBgy_?ars=Tys!)PVcBpS*B zZC|5HxF-0IQ*wXm^U+5pqO+c@R zxTWi}{=~U*k+=LLiZ0OdF$AE*(Y{9;kC@CKbie2_TBYn zE?inZk7tPiv70Af0SM9S&&4={zEz13B!VP7>dDZmFl&Po}mp0>7TK>P{f z{!ab-I%+Q+wY205JR@!%9w`RqkX~YRZ0orSl{(1Un&AV#(*AVFfpw7+OC;AzG<-UO z)yFyk(+P@V{Apeury2rxFUUL#lm~W(D?FyHqTs-zK-?j&D_5se6 z6gtfJI)#b%sFA%7KJ!s00t?6B-)*i{SFo3*QywlERbs^6k7oSo9aq zVU7G;`OL>ibq2xOzCc9R#uIR0$Ci^qaa<(*Ca&Ml9aPKB+}0)kDN|EnyS7?X12e>= zc~wIC6S~1RclRqHo|G*m#R=`>1S`5@Q5vb+cotNn3MT5o8yTFIZ(QAkz$7Dcn+PKJ zt6Vdh^dlx+9M9;z$Dbc~eu9;>~o;z#2xzj-}X# zWa@)AsgNI+d^1CSlgeuWKf;Xj1s-4Ng?_7*pHEAr(1q2oFTDTtY;EvROtK)H$FoPi zrv^avO9Y$J(9%<=A+SB#{(3=$GwvD;7#I&W%6H%S(eom8@AYt!!3FoMygzre<6Dt< z4%&N(3I1k#A#Fp%C2{gd9Zu&PbUay>(LR2Vhh_)G{p5T&?TkCzFe+9r+G4}GvE6)| zwiJ7@WmM&mH$wNN)1FMU50JW$lN26Z!9}2{f<#0$Jx-Z*8kD@*p>G?^0M5>VCQiE@A-N_F)~<|^x~1W3t?d~skL#F^<{Yi-@t7wz`gdM*NQb!}nj z_EHMs(HBEBn3{Cb1;eu~0FQN34mo{gUnJ7_#qoWWpak8-)yaz9MQPNX;HP-Ca1&3O z=dy)wcEcs+ASqF3{KCT2WI;ftxZ9xWAPw zy!`rj7)%K0=G4K7G%Lp*y%)u=TYYy?W}3{>9CI6w8xG<`y4Lkhv(Pj29{98`fCgX| z;hX7s+xAq7+Y3)Q&$82?zF3xgI9`^Oqs3U97H>0nPTwA3@Go>Ul&|XK0hn2gDI7Z> z=Qx$_VzM_Esn|^zsR28p*ZeEN-k7`qe^!63IcBPWvW<11Bp>H zVqJ75ocdWOdSWmfiEA)hu+woCIsM?iy*v4qaoQJZ4uD)8ZF7li5IG0C9`24ys<>{ssHHS9&v`{KNV(Y3uEK52S6OPOVLps{L<)GMY_$J-By6YLm>W~3M3Sh3D9$e zZKESt*MLc!k^wcv01)siHd`-|p=2#ZDqF?kew&e7MbNQbP*`GL*W5mg3{Q;sC`S^s zGy%FHo#ebo=l2#gZc?8`_qn_CE`Lf{dHA>}yOehv)D~H{Iy~D=$9QoB@IF)u(=LU2 zBhr*X10$yZWKt0!dg&O>&P)P8NK-~|2IsZBvJp#QAq@wIQK1qS;SkN@WzhQaNq9|X3lal?lZ67B zQOv?h=j*$_YD?+k+5HICl_dJjSBdQz#X&OLa3$Yym~|PBzwj4~@Zh)p&;fQ2asSSv zNo0F>yHLNz56-@E3VY9`cTF*^%b0;LnC5inDZ>=T`tZh~=A*-b848WnS zxl6&#R1q&P!C{AUK*Pl%DSHtN1w)XCyBzAjJc$2{&laLgFx0;me zJ1R%GrJ8=aWa@gftPvBVpM2P~+X&}q0DdH-jDP@XhT339b|k3pPXgau*);Ba@GD}t z<hu13-q)WQqL}U0m?C+OIhTfjTQ{4{Wt*_FNk`fwg+laB=nWIz7mzILzcp62()Ai z`x09q7sDJ?UVBEUWkHonr3{K*`+n-!B~19jUhmScmGucb=AO2gYwP~N?s~blSlCy~ z-w=e!h&mB*SE&ug<>xQ&GhD555gy~%$sF}AkJzM}rA|w&YUl)2EotmFd^$YU^6| zwS6{hBs9cfG7u&1RqymEF(r}-c@j}T9+L+;5OVB#T=iWkH>aPDY{x5MS38AKgFkAr zS!t`DOu^!!^yi3aL75xN4PVWJRB89X zZcdT5FWEKr&uk=}3BHPmP}MI~ojp|E{147>S(K+ zde|V(OjlXHKmYdB*J+3_*1@niBpS(T) z6gX?bF6Ym?pChAy5ntV!1cCo-Qx{C$ewxabDYU>Q=5yF~vT<`xI2Y-CXY{+3Te;3` zCXh-Z(z||Th;0tSLADZj8+?m`Y-Ql_bu+bq`TC70)Oy7V7 z=;&tGyU5Be1JW z(bANaYrGZY!QK*y&!Rc?1%P_xw_>Ax2AcT+`caJgqI;SpwIg`8%}a67(FKMwH-}@K z4io9f_`{`i(&LNHFc_UBrZ$OD+NE}G&rB@SGd?G(VSYw7vaYQABztz+XZTzQq_#+3 z0iUBtXNT?f-9slw5riQar4%iP2%l^zow*ki!I&f1>1*1+h3)RVIa=~?og7an_ zp&tyJzAnv|-C8E(8;-nl>v8M(u|s*F`w+fFvd~h>wfn=21YPHr_48x4O|8tuPE zN&Q52qaqtH?UX=Lo5Hp%nIbpqA*eRIjb z)3%{KG8;+ZZk!fq?uFPhfq&_A{@e3B913ZDxdG@n#!tbj?{j6`RoL%Ia&UQ|R_%=B z?Y^fIhhEDc?2dn3I%c@A)@|n`%>fA=xk;hRg?zVr@6PW4#Bp%pF!u54*>-7Rr|g{B z&!-IPW%3M;shL9WU8p()k5EADUsfk?Cbb?ZNRm_SOG9g4l(f3P54asRZuCz}Zvqta zsYgI8Q7)NH(eqT#3ys8QB%wS@D3BzIC}MuE_wTqaF{e@E&LnWR<^l!i1v z)qKGQ6?al9NpbxIJP14Z!sD($8Miy_M{O({b(tmc^@G2gd(#HzHT2>BQ0$Y@yZcW3 zhPxAb7)_0!w`m45yvF*T>oOcJLy$E0j->Yot?$*xJD?IIpo`+OJNZy!vagAQ9D&cL z{nUqwsvQkYO;jf|OlrO$*0RImgPQYPxgJi&B@d(X+?9W2Df9%oMR^p`+401e=*aq- z;%2sT#9b(n!!8r`@#bQea?;FQs_9-kn|J`F3kNq4ll#s#1@G=5K%M|C)tKU?N~z#m zTn(0cYY5AWCnOG=UIi_rUzk^Hx)h~Q2e@~F%A5cmfi)oJp=jqHVbp6D zDsG{eUVC2!4B=*K0EYeOxt~js)c|If4v?)qv5MC+L|$afXv$z@S0fbj2?gcheF{J) zs33oIn2$M3i`~9bA$lqmkPy@TQbPZ}OCQOY{OXx|Q=Hw;9M>C_ILYl>RA};Mzl(a7 zHz_`$R2&1eRQ;N6tE06;lR! z=f5>T1c(qlmIQm&dLo1dj}cZ@08K!_gSvk*{Fyj~IA>1-kO{5HZ+LBs*71zga1My} z3&Rqg13-`!q56UWTm0mC$hZgqFH;dGcI5#?(dQ>dc9Wq+`WoT%W+8ZU+mgl;Nhqr>YXFFDvB z#UVVPu_yYji~+@&TN`Es$0$Fkb2&D2{)yh=*mAedMt2}AfQoqmwC?Kv1S`yk|GcIU zx}QI^9==GnZU2CiMM2W8GzN4Jiws`{e6t+}|AfSSVFHJk(HK(fAe8=kJqGysLsa@H zm8B)>fwDr7(|E=QA4L#{FzndY9;ndgotsaI*MX|jyBHWQrs#IB!)p^aiH-Lu(#Y6B^gPH4qP}Odq3iuREzO=2e(S^J!pbhFOp56HYA$DSFU-)+ zzw?5*p{lFA=6loSbW3aRpFEE{O05b%kMQa7INM@z`+Vf=TlBf8H+wyHbdVy2x)CNW z@i3s*CG$leqze9k{lQC~51)b|yL9W_q*w`orM9Ut)$Jz5H!7=&A_cn1ILk6>lG9`^ zrWXp{p=ZnRFO;7?$CDR3xC|!C5eMPDnG{I4R-rf{8(1gk(jA4p`P`ii%18E_zZ4l5 z)a+g?Wq?XDe`^_zmC~a5%0BUNp!6DDL9pEWf((((vQPEe{afmYM)z|+8&9S0r}1ws z=kwk)I*GKqEA~~@f7sNJA*fpIUc5d-@w`Dl;w5=p_`6%)x5?)TNF3maOyID*LM3Ho zq`ivFPJC%M)J;Na1;IQf?ebu#Ncx7!J(ndQ4?}`sZC}F~UI_U|%Ac%J##ReAZ{7AV zEt$EUtQkc|D)n$7zQSDVb)3@4b=AK=s-Ar)Agx@Q9ewk;IyZl+SVy22*~JpW9sAJ- z=k&P{WHi}F^6i@R(D-DYe8I+XZ&_jw~`g~ za!;-WttqF^&`R}z{aXH#!~Eb_M=4&XVP`D26l>wm)8s(((W`s$P!lDt?{Bp&pmXqL zWPiX z`TWGmRug_jgG`cewiNo5i>GdF!}?335rsAVgj=AC$JE8%Z>8D5yqJ1; zFQbIH`d(S<>{F4BLOiq(b16oN^SQSPOl_}!|K9(kEg$>_w8MR*!Uc97vM>8c%hD6sGuk0` zn}y7wpNEv=rL?{mfnKk5BqbC3U&L>^Y#?ysT!aoYDS55_uC{8>-2Ohug*>XHY$l;Y z-;spLk%jhpJj@9z@7<*8^*p>0ZS7_9Y#0khBkvb}qfpDy*if37cP@Ss7LxV-xM4YU zTGd;;hzcNY36)({2!i4E7q>6($>q9UT1x9Ks5T+L>%zPrQ$*Zf(`S;m>B8D2wle)# z?&S8xB){vs=Tawr#v;VWkk|=`nX8XG;d^Zq;zO2rjXjCCxB=_*d60~IyROFZS&SH~ zqlKM9ep{Rosj=N7ou>LG3h zpSN+elv+21WJ6jT6V;OUc2yW+{dHEeANl3h>a{npNwNxrapXvET5en^@hW*iB?-67 z1o&#=oNINCmL;M{r*TAY4EsEC1`P(LRP@-KG^fIP-r41>8{&8|GDpVNMfYJ?Urmo? zlg`$SHsV+xBs*&xqV6hXkvd&9ho;$zPpc zdsHCJq_VG=#64u-r*ah6m`+Qmq!7pp58D$3&G@qDNLId^>tQgd3^&?)pd1PDxDs3e zy?t6y=6uK}`9|R2m|U2+rzM}%nOiF!VBLpnIl!sAG_|xY*dLeB5_du*`1>Da~ z0-nvJQsY*Gr`EU`cmVuX3f=-?33LW0BYI1xKoeICiHq|2x8a1Kh;eiUh;f_J=>s5J za|S#*^*Mp@C1FEC`mo9b%U?pt6E#Q;jM-hUx<@i>Hbq;!{4UC!Pozdonbn+aWd{(SiiX)>mp_x`|} z`bda$r<*$!8y_3|KoeFD!Fe0x1d05lFPM;_!(+oBPr8FFDroz1beO5{iPVAu-+4Ml zmVp-wrWv8SFM*Xo(P@Oh!vdmtMUHXu2wy<7;GVSBJ-`(Q94qEW9?w$O_RG)OXNN^+ z2s`=48_M6^XmIcfdb0@!0?aP!N`6uSt0uUi`nr~CIG8_}Og@obEp>AVN#$*+og`1vWI)pa%qIt2c$!H?l zZP^q#zwY5NMVFH4)U3dBz)JJFumb|HsG{}oH^Gwq#w6v{vADflRNGraWRu2w>;3go z-Z|MJ?yd=F;We7)Zwzu*W*ORL+p4ue->H~p(Fv{@w~wls@)g;|l;Pss3SBuL_wtBe zUj2G|bUM*4t9Vncz#SQM@FC@$fvND5-`sy`Gy86cKJoibrL`As!%r&b+c9$tB!Zr3 zlB(N%X%9AVX{7H!GVevk3WQLRxsv?)LFLtGneBX>W;W}@66Tp$RCU?C(7~_Y>0ziX zwu$5LCj4<@Z;tBcMS%;QA+9O)e) z_)rV&_0?GwN~sUhegvLtV529I9`X*bg8<2|6R0C~wlkt>2y?kPPAP zSSGSX8xrE$k-f_q@7`2v;3Z$Y89ZJOcF9;^yG%99Oc`-LpC~P<4r=5G{&alYerh%s zRI)mD2&sWS3^XV%kgJ^gw=ViA>8#Q&d{^}F#KN**=rgSPB2T)}SQuE0s&nt5e-{k- zjGek)_^!p6g_+O-+cB)v!SkLdQqLH~e-hH1JMitBad;f@2D%-}L$irYNY18brFSi+ zX9rsbPuru(=Ap#{`o3>kBr|2lXvIpG-nbCWaT(Xk6V&ZQ`-tik%YeOQg7q5qu#`&P za!H?vH}Q{hAwi)o=q3~W^$acror47>V$&L$3H#3?IVNKJ>--iq*2G_gJEEoXu=16D!q<_eDrWOIG_aU89%+TAPAzd0k7wX2VOBDw#gV%G@VmwUpoO z-5*dwZn8ML6+ElLNu|y^XYq!3nb_KUn>2!lsYl+fZvI+m9SlpcoZOTr?FwZWt7>1! zlPgBt&w1t>@D_?_gQt*th7%0>ZC#Gm_0FPVys(xp!d+{#7}(GPI{&tz{hMHSONhv} z_GzAR_KSQ0cPg({ESR;PaQdc2<)TpKKQA6|#9cxQc|wsLK=;1=Nh>co9cbm{vZ5^- zktgYjWhV0yze4g#QVVm3%dz9M-htLUhh+@EWtQp6Sodz8v*7rIc*q4;r~uEyv3034 z;UkBaXYfg8?C-!`x0AwAoIXTS{&c5|=Ta3&i0ZrJ^2VO;$W;#vOQt=!F4@Z46W8br z4fjec5U)8s!)T=d%qO`c3tu>Os$^p7X=|M;In z7Hzw1GIiI*$8zr2BouCE)YoAj{zmm=jqq`fl~-uuu0MY9i0?hT2VL%F8wSr`?xXFSqQxYW@p`{b zXV#I)O?#?Jcz!n253*fPo;zKpu{l4WPrT6|kx#yIZctj3*RAAVJ+;~Mavq(Gbsn2l za`))mBme{=o*s9$q${0|UeMI;ZnR4o-tNt*@w3mJi-Ko3(6EWv>WrILulnvv^LQV3 z`@XaBTJBs~fk|hGADd@R4B2R^cweYY8bN<>xy^}qJlK^w(~utPrDRwTv9h&XHNKQ0 z<@a70oAsmw14?{HReb`LB8NUe$E!;5PV1Rk9h|q{$oTVzicP(wGKV1}3(mh*VE?{h z|F??-d~Y}t@@82sYzL$850)7CUjk?XPZ+6Hxto5t?|sT#XHY^*!Kv>Rs`h17z;Db= z1Y{Pxfm!Q+)%*VswwC|tJ+$%(k*RkT6@BdZu*Fx9hGPk?lm^+hG5HOmN;|67b_8H~ zdhA$s@@xHE_BXH{vBcZAGhcK5pnAq7vQ70@uFsL!c?yg26bG?Y|4~m z{tW(P1HyJXK#wVY{@1J=_&HjJzNO0pDA&@u>{@#|uzN2fAQ=tSmj99b2y{7@Q02JFsfJ zaB^*UBH=HQ*zoWx#oPb0C6w9nv|Q$UH@$YF@1TC&4-wYlr^=ai-D(b-i-=?&6;uS& zL(t9x3f@gQ26lnIS!64D@w82F9ZY-Pp{nT;eBI;l;Cv8SQ;X}#7PZLn2H3sQt(w*U zhnwO5#pgKu7Mcfj4wV^{WG=%^FqJXBjE4WnX-%XDSgHC3YX84ppi&a#w=RADHGP=&%2OyTAYbC;9lGa9a`m^@G_{0@2aY>6n`*NJ&e7qNSz1 ztz=TI1s;bzde9YX)zFw{U~?>Rld6K~=;?`(A0ML<6L+Gc4c%hmv#buGnO15%2ckc%Jw`zKOq4}uuKz{UO6IjFi2sp=`5ZVn!=9uCQxB@MC1 zILu5dBoAVyV#%B>5QoPRjf$oLbgt7Y7bhEFVJJrN?dbRh@RRM$&CN?{Yo}vlW4Rc7 zsb9gSA}7Zw3Jd>vboAH1cM19?XI9kjFF)GKC-P(}f4166iA7Y@q>HaO496OHJ$Fom zj)Vy@-cE{{a1vM;o}=m}6zU$dmwA}E-R{l}s6z#IMaY0HMOGH~a<{i6D+~6Zm#NL@ zRAJun*BAKrr72^E%KLOIXOd{A zz+35fA(qeT*EcrR%PmcLyynl@HhZ4Hv!{N2u>jOaiKGDWgq^=j^{+1_fCSbzpr@h| z3B=E*%`b7-9KCY?rHGMx%BiGvdHRz9K7NuUus@2hcS)l;Wc;&0?+QObOI}`jM5m*> zI?h!DrLe>&BxFC5DyXZgA4aNQJYpA@4i$I(_YeNR?)OS%5Gv})ggc1vIS@o~(AVEz z5SW~u?Gl~$ONXuIsK9ErS`m4<4aS-f9bJ@KzBF}h!bC?`RHBvF-Q2~7Te!S=rHlOT z4Geeyy79O$6Oevso{GF zs2;PP5ptdLCv{xoBYJ37T*OZEckWo9Cir5uwKzA&$bDudyg#jUXh!ImUfR}_kMR8D zR+$eEj6M?48>q;Uz`IK-Eew#(t8`|Nw$1%?ER1RNjl-Bupl3BIfdw1 zOuI-Ht)bNYlTts*mtv&(QA(ghtXNhQpbtiU>?a~S+E9Rbi5fEG3y!(c?u57|<|##$ z>4Pg}L1f>dPB%aF#JL=IwgBf%Zomc5L$^1n*80!I<6rwyA|^uZUQrP{-Hi}WNNwn$ zN{2SQmX1EG@+eP$30{%-T{WfwaEIaG#KpS$eqe~p$`oQ3GBGyJuPx#1TbSVazIdp6 zMD3BLkB_+c5MUeO-F*nwPx-~2IOBT`Gow{~?b}2>rP6$EtDMi**R$EbWWFkosKJYW zeuJky9$$W*h;$6HdkO1wDQS~OHOgRONJ{iJTAy_XuG{n_nAHkr=JLGi<=>WlQ?LNX zQ8|X7f@)m)ny98`{qApU#dL9g^~)cxwH%)Ns)n^5K!juIYKzRdGNn7>mIsm~H83Go z^>hX~QZ!#Vbkjpz-f1w{sD^6)P!|_0a@~2iZ2h%7fXo#K%|QJ%>TqZW7LIfD`#3J6 zb=qiJbHA;xqlqMl<qG{c}7P z4qH(DaX44E_iXp#S9ftGO}aU~SZYjIh+vNd(ddX5ERcu#Fcg&;RFPP6%062eW;@9H{Rg`Sa;A)D+PbS@1`-rf$cvcI2y=27#pSFK3c zM&^LJ zD9u}A`OvS~s3IYF3~doUX85|#!6M=(HLXW$49(K(@wnY7lW!pfP`4?J-kpg{kz77|2@E^G2fLwri)inDt9Yc*=!A=PR+A26g~lTTXjEOLQIe*!++l( zUcJGDgqVEDDzv@J`yMfR%es05MYWRlW zzF~yOSSwYJ2qZmy-MMXPng8GGB1SCVBZIDByt}8QhI>K*L}cT8;%62`WrgfnmR~+s zND?64(jp$iW(V27UeAa$;u4QG2Xk9r;m4DSf;Kj-Z69^tj9E#=X~VWOlywgzVfhJU zChSmelbG1Lh;^3B3E@av;!xv8k(!$NbmMs>cH=qk~VEq?74gn?MA7loS;UC}?5cpcMlR2wLRPnC(c1uyoK8 z>WH#!198>!kR`C)X1XAfin#h~9^CCR3po5mm?u7St0Nl)`^mCKneudv4XHB#gQ-{3 zb?q$H_#wJTxv|Q-eQdVgnHS>rSwE&;5xLn_N-}h!fZWkvY?D9~3qouE%lWNi2wuv_ zMm?f2^lqb9u^1VbG5`HHdFC01Q3>k&ts{Ugr)WTruTTmMr&4QtV1^MLH2 zKuBb!kK@Gf?V)eDX{F`amcmKN9KgE6J^=1MJ3MXM=7^sFykRKCdBHXD5SXWtJD$eT zm@{Y2yy^b@_4CL6t2?0MX@~uq==C>XHPQ2|iW8X!@$F;Z+;8$fCNuzuib}n*Jc-4R3yqz` zfUsvG0ojgNXt?39S&Ahit@R|`AH&{x&Mx>Cu(KYRnL?t1jv;UB_A2@-A7#1sS%ZgJ z*9aC44-#0KfN@l)H^JpVl006Q#N`3+`qnyErQX40iAJuKczEZh=TwrUcrP|~X9To` zgoLDrif9K~N_6TQ?hx%bnT6(8D7I%m@L$qWiohyRDx4s60cfQVG|-t{GyMI#x9=RA zsi>*zlaqhdzb-c+gJjE<--UA2Ds?j{#(z+Y(xWk^4pA8yyzu}gFp7(8nV1U-424gt zTfM&_pD~+m&>8tw$M(CSZb-bf?tA+FXgQgD_mc+aY2d>VM|4o-041#F3~iThNF8Y# zk72Yz_cVNwJlYtYOdeyXry=bq4#kp&B5?U+rGL`=8Ka^mJdWLZubhN3mTSh({H zEcs2dhBHvBeqsu6$uiLW5ma#?e<Duz-pu6OV7pM zTZ_|L;4LxLtg@4nAm0jz!Tcna2pbGhp)&Hb~^7R2=dLD7z@89d2}co=p8m?9Pg9;#_OKfTSws@w2^M)MQFxj&p?qK)Ij-ga$=~+{04*vDhCsllS%vrFPBMj z+AaxP{v>^91w>-)o`6ITgIwcHd)W_TH(y1FgKIM>kJsbvV%RsUuc!=w#b)UlCP`+T ze0Mm(>L2(@Z6F$+na0_dQilQ0!=gglv3Kce z0gKt9g*Vv>BLjo-9@GTddI3bX1saB4VN3t0s2E4Jw6-n*HuKHOUuWnpI&RxkbhW~* zAx|ZDV2kc7AATL;^K`FJtO)jHdP7oV6HfdlaSUGhv33pq$ud`E`L6DVN1=EkDqi>T zw>|OH2nWCv37L%NftWvQ(_)nso`Uz~IZFq80x-jB$^)V6YGu#pyI@L)R@Mx|Oea)K zMjkfLU@7_{*8>@3-*Pa{JUwVcKG4iLNq5m23L_f%)Q>r@{p9d}?4mPgpzUpXxY@Pt z-}uF()D?wVPoDQ9i9#-_w1|3b@xYMX(I)uXLFQgOOd#syYj)AX zTWbtJ)OQI;n(F_UzgFBcE(g#2Rn15rkW2>HHbl3u8&7@6cZCv`1i8)L?Qgo)xm*E^ zu`l{v)9ZY%t(#gy{aq#9yyDZn{d>|ZCr=f(ox@?nxo0*eqCs7zIsyV=oq8Q-a0}Xa zJ0Xn$;j-Ko;WQ=hNzA^l#fX5RPG+X--NF~-`+-EE2LmI7`vive#cwVIl<1dme~Huj zaPm=kYe?(C&ytGFOBO@`0nkmX-}!epDzKxKwNO0SM(9OgDYw6VyBSpJfJ3z+ic(S5 zQ+GUnTOU~Q)kUTpqLKh{1#|G47q5MVjB1$YGihnpQio3ekiUXvG-}sjXNrQM;?Vm% zoCjv%l}}Kqbn0-f9!Dv0yWbQS3=B;6fkNY+6=o6G1@o@Esj0A8J(e1$|G_o@yrm-% zktYgCc++qO1;!!+wqIdZ5Mc^=m_Ps-3me;OzYJ-dhgLmuL*XX@QJ5Lj?IbJDyb6J& zEV{DosnWFi@vd`rTr3n@Wpc8Pwj0XK^gpg7M}ZSzhTj>&?l|P+qM51SIEXO?naF@} zy7bN%u=!SPgiOOP!GREv0`4~Vr!5*gY!&IC^f1ev7o?DP{0LC`w&)<)6lq)@!d^5mjx@lwiovf0P>%XNj-yS$p>jXaShOl z)2tgQRBDSP0CMu=T_#m>{zni0dMGKsS7Q?2Jsac2{pF%s{PG;x)e5m8ZAZfHWU*TO zMkQgmzkc`y&&`$*muhVe=9ch`Y(nk27x3Fzy%$nEFMhw(eLJrBI*zj~$jg+6?81^p z-}f}ZGdG2GqxnUX;?>E!HWaY#LHP3t;nPjdzkyLk|*MFs+tKelQU2Do3(iflKy5 zT26L~vt;OljG>Oe(&p1J2|8GZJ(cfCIlBf8u8`yWm(4(t1ve@q?d$WaXI1I$lL7%v zfLy1FvGN@=v)*ym16@um2bj$q?aGIIy6oAgR~OIpaO8k#z;Lpw*vm;>*aP@PWAUVV zT@4r=8^RXgya|_Q1diW{ZW8XkUB>*>78a1v>5Y6qaNn>uG0`Fxj*%hr4oEIa;GyI{ zS+M~|?Pd@k`y8wBgkxB`Rb?1kPe%%BFWvo^fG(W#pt)tz5`1_g}J5 z!t`Fk=~4B|{;ye!{`r48VgJ_zL0^x|=j!RmB9QDueF;PSk9}p z+^E=Dd1kxo6lE+gB$}$H?EzN*pPsBMaseE*;ax(8Wj7(U&+sN{vqYbSf;Ry!jiLf3 zB3Tjfv*VG=X6G;5_h(}&L@}@Y-gNLVHy-)j{<878WFG(^MvfD>Bv5ZYz$ZwD zXhC>sq$yv zD_nVhpHL?s-b|@Muvz(1w<8#Q1F>{%!;RxHrmhc&dd7m+Xd)S^u3aRp>Wg!J>c^@r z;2!2*iJ(B{`ff54f!=fcX)?Z?x?>0NZ8(9=j`}HLCCt_7TSq=4DwQ|LXxz7+Qu#CH zf?I|SrO=O@XQO01KXJ|hA1uYGVMW7AXn!ZyZe%52<@=X+P0pAp=@fd*SLnxnNAb7y z0WA-8c*xk!Hpn+Gn-jf+j%Ih}rOu9*TDjbwB1=^V{RAYYssR!b$f4E?O z$g9i$J zf2AF645SuY&jvpy*^BtX;jl3PML68mSWkgoSdS-}<+4zlT40>t zPk`L{qUB-1Pm_3nQ;No;jg5A;$`Z!wqI7h&hyQx zsKRk{pvr^L<+qlor-xe-U$uddtvMhhX>Li-U)!(thiUU@_t^w+#B$^{<;~Gsbh8ZF zNJyEN-CXMk32s>a8EmOjRv%&;-^lq*51Gg|{dQ)mImeQ-U4GJ42(a%ner*vv8v{bL z&~fVCioTXex#E6jHN#qC@bj4!+OD9E1D(G4<~<%l%gg($qEI_N-$?bV)pM@LGQAfR7bVZ&LL;zKZh5fQKGc=H_#yR? zTsUw@s!03=OYWWvj^gVoZ4B3Mh`sc2T%5UmU!-*;Lq)b|LAekvVyx)-shiKXO`!q! z3^WeL74B{_#$Vh`_w8$Bnmw=sL3DUuQ)KeJJ?5G)YH`f|bCvq{^kDcE2=dYOII3nc z#8DO`tez6!E!u;$=?};DUC0O~Dez+mNP53`M~$<*Y(e;i(zg~)1GO|H$MW6y{Qf~U zkOvMBRXI>39zJOY{Ho!Le!YiL@`G1AS4+Zlh{DtUSBC)2 zOc7zY(ba)il`hTehIT4fPOo?KJq1xx`bzV`d_%sweE{rFr=x>=v584Yih+^h;kze5 z%R(SG48!D!BvFsN1=zWz?bHkssSbm`EkdwZCV&N~ycW~?yHHL)Q-kzOH042SeElD! z=s`FCLphiX%6E{;f$0H#GlF+Ue5qcg)#O$M*I691gejtA0@Olo)08~Tm6M#%4=o*d<((Y(;BQZY3C?~N)^5UTen(dQtyr#Kl zJkSt7Pmgq>fR?p#!%oTl?*L9$a}|q}TpefvsqAqAmgPjAP+AJ+gM93%N_w~9%{5|J z^hoo1eYpTBR?le;|6CU0>h}mP$!`2Z{P?w>Z1*cHc~~ZNBoACSb9$5yb9Ns=d+l}Q zH~ZU{;PX5@!vQFzXkKh5z#kLe7!`Bl{kS!}!>;JmEvqv(&9XZFb`QwA5pm)C`75oZ zhnR+GSdL@arMxnMJhMNLqBV&r?p+v+Lw#BI+uP12cF%gvF(PiKWVldp@7!+&p`lzL z-&9aNT!}>`?4ynuTbVQpA`vo4cL&zHn0Dj=uZr~TN=!VAp$=B8`u3r|H@UUX zd{b6uzSa(T*J0)gaCh|1luiBtcyvY%kasaTB={JwulK9veIqGM^nZp9z&I~eYB){9 z+z)dc%|bQBz*lA#0t6{$z1GWMWp`!}ngPtGa0qLGGu&YC5Xi;|Q4@4;H=C;ge(9 zfp;YBBTeqiFSBkUAX>SgvCJLtkXHZi($V7VYE`*^I$8Rvh6sc}uq-=yZ^GFM zwM!rTb%xHA<7xHgwpSiLBts~6!)oeXvuBBqc@#R;s-vRkP@F?!2fuaTiOEgu%i&GY zl+<=)hxKO)-#)i%!U}wWMW2=}6lX0XX*#UaBELwvsCT~s$wr%Cf9BRtZ?Hm7s8ljfqAm+ zoo+B%;5a28JQ~xUL z@<;ZY#OofB+5(v8LV8d#KK$DF7@&;)w8QOBMe7dWszn;lVnnH0e36g~j5$H_ry@K- z4bJUAGHfWqB)UJhrDu8A&g6@++};zl+Kp;t4RRl}oX<@^YGg(vA&gXoME7qmi_vKN!wtV8LS2z ztRD-`M*vgZ8j1IvU7KA7YB==3ZxiTeZNHXHR@Xsw{QhXx4^;TMh-*uUyf7dWE2jEK zxfjMUAvYyg^YsS*j*I8{gqjLZxJv||ptfX6yRV2y$#?R`(@e$X57`Ic(N>?`H|(6> zjpmfjBPKI4Ec=W+fJg)N8(xK{?po|Nldp;p^f(VVrUW~DGjwXjyAxM4MNa3#YZgW~ z3Ex}C)TPqIy>_oXupda_o+^%Y%#vpCiDnwWnMCOr4qxST=-|p#&ji}eg%{TlXq2I# z{lpFqx=PIrv7f?DDg%Z6Nj4FK^TuXatdw16DzhpD+FGL5%KSoCRek1XZTa^bxP~T0 z78Op0wADg06&{_a&}F<@uZj(yYZE9N(2Vae4vAgD%ehnAE`E#)M|fgB$QZ9Eig5yJN;05)c`e5ncF#IvUYrM zs-a>ViACj9p%5CdS1^d%l~pEZUIKSsx@8k(3*E%_yq*hRQ^v!-WcWEY)9~FL;}daT zz^7swdn)r@>*Gn8gYU^~)?aJ&nXx&|qW8?0O6Nu-1*KZMcK#|z`0H0?HV}cBDwksl zMxxz-A)eEsKNeAPzswA}s6Q?eO-Gnd2#!RDc`cn7C`jDlY-_|q#`^xo@n1lAqqQD| zgK?YWotbL$Lfkb7!ZH(queO1KFEIQl2}Vk2PH=TrFnWF!PFP=~DaP!3X)xmx_U#QEV7T;W* zrZ0IWJx;tz$fgb@TXc-4kF`|6cKRLobkW$By z1lIu`o(h6iW0`~Vu9#aF3?FYG7^s9Li)(f5I&lu#(U|4!2v(mPXu`V*!a_%G&2+&d zE@}=JQ*DZ-9EXzkz0PXg#OG}{mcW5`9ysOVjJ+}^1hmC$LW6CQYE$0_=|@+UHNlPSRAjwJNRwbh68gm8({H!hP>JZ~tb#}y zOkZQyx$hu1mU%Uz z+Dw-HxX^DDldpJOsyVtTa{Wk6z)h-8fwTw5Fx?4^ts!?SAGUO~P(}<%9>9Bf^ z%ad}-q(Y_0ke&G?e4QZvW-49Oj~^#PAc;#lbMRX^ zuI*PiW{OOc2vA|iy=lSI_CVJ4U&+@Qp#c!jXy!~M*mrQ)okIG$lC`j})4c6ZbVGzg z7sjt{$WtfkNC075kT?I-2`c=Q=rnLl_(L6co0d~iZw4@E>XRH{H~JiX@pLzN35baE zQlT_z!)k;YD^fFD>UbPe{W%LyT(()5$_zT{jo?NUmNsjO=)&{1-gT67awe%XilmX5 zP^D_K(+;cE`XP(KbN~uxvL?I>ybkDsmP!lvwRA8 zppt7%yflu%I7jEc=X2)*B;?9{_&IVmb?ZYb4{phtK|t+$vF}QkY}DxY-jL(Qubzb+ zMIV-z*V@E;C@E4Igy#C&UN4XoKZx~4x6EYkKoU;+o;-K4?`SADm_<;tYDOp%zcui5!a~*8RW46R2MdgQPKk7_AQmpyBFO)c9 zCk(W-=av%YAsql!GIO)JFmuZ8#3-ZdZ9%9x6?3XTxt}6NM>f&8zx-Hfv$yc$xI%}n zXF%Q$pmUES^!9z3b*OwS`$xQEj`O+K_g^x1WfFH^A`sb>S00h!}KilqS^(Rw0hd%dJa+bG@ncaOdgjUy&A3%SlVooSok zPv(TUAzxuxlI|}Fhuo`9i^@EMT1$$fZ;R?x%l=^!86;2$dm@!2v_O>=#`dcM@p5i1 zaxUAydF`!a-#o(pOoODW(?x*MJa(GLl4=ZY9gJL(j=o=Ha66h* z#Q&@Blx_!tV35Px=+f|b-M)}fkivAp7k(mApm3mkR2ZRHVH-V;Fa-zKb}MSv!Lw&- z4$~=EU1(2)e8zxsa6Nyi2(ow&IH$*5E*Bqta||!Ti84+b;ijvX@kr7qDx(!S>J!#b5-aXSKlTtoA1c_rM?5b|`k- znMH@y`P67wd!st^m@bodM?syYodNn})RcTr+Kb$pgA(-YU4SvT4Z_6-v{Po{Y`jhh zN4xybh=*c1Y+0s}?3 za{P{}ff&LWJ>9KsMgseJ9riPS;>-_eHO}6$dcFt_!Iq$p>Qo;Fec$by&MEP&`uJO7 zoRE{4c0Kpq1f>Q-_%~KrGPFSr;K#C=kk%5=m(+2T5#8#eaX`%&zo{z;)XHvCrFwe6 zkd>ZmLGu41>??rc-kz)zAPIyJh9S5Qmf-Hr;O_2j!QI{6gC)3oa0vv5;O+!>hv45Y zyZg5GpZ8vURg(%s70htw-rL=$PoE?H?Xx`8Jw!0POJKwJ5JxlEU(VdTiIRpQkv*OY zro(~NZUeK(G`qpzNwIq-VWwGzfYojCy_rR0T_}^yiWoiZs9`4Kc9k^NJi#zSI$VuF z$A|`&&`HR%#Fnsdi*+#FnkI(w*tPrqr$>ISW`G95s=NB^5O#hL+lLVSfPrz`0hi&r zerv1o?I9-xKF3O4#gt$EkaZ9CzOX5dNe{|;xMPxShackR6dopu>I3`w=Tq3P)?Ihe@j+k`6*(6r%S5h^{Zh&ZQ+jjTO&pEl1d>so@U) z;06F43Z1oyk0RVWmXG}3F!rK^}O1PL=%Pkc=0e?%gTd%OPiY)2|oz>C{NG> ztKXCpotf*X7eV}yc(_!p<}0n&Wr>A@CSgoYRLInC_CUAoZI@L4<%Urb^dmeOHb zuqvjq$C>Mb0tH{4YMnz|#YUn_Ot4 zQkh(8aH=76-P{g|&)$APdevD1NS#dsYI7142OLlL=Uou(Hg~}Dw$`-t?!QPkE00&Z zN5F!H13T)qR}ZHozROL^b@nOQhk~oJm%Z z4-(357~0?xP|%?9%a-T5E(1uz%@NQ&cWA&CIdK~JP*7NS{`7eKq$nFSx(fi4;Eo+k zXJBhL0vdFxfzBcXp0%$>-xqw)n<`dvr+>D`Wuv= zO4J?UN&vgi!uQ}I&{GkcB%E4E(X!W_)ozY;Gd<+M1AqabCqb7oR7J{arf7>Di~)oY zA+Eqp<@q6In6l9@( zg1t0Ot=`$tHIKD*nVU#6W!cYzBZaGj3kMYym51V{?&-%Z>hy36epSJx-!{4mG_4M8 zLs`5l4QxChURwe}@jWEg#rGk~p?9wY)_<_J4;oGZCY5_}N7wlB8IATM$=AT2;{>=! zycWxktAo1)C{eV4v{yBK)PBo(#&Jwf51G~;htU|59Jxmj)8XC%>WUzZY9*{>hZEp# zSm(iFxE6?rJ_}y7ujMX2-7{ohbE5*x*FKMt)(=FaGAdELDLQE#&cp%;kaYa^>pedL zRd$@b4A!+ZXzqavISz><6ZBwzFgwo`xPH*d`{|VBr|c3HKa+<18M9=`yVaQe%zo3oI2$glmi*grhlt zPHD%Djz|8*9UV(EyEo9R9a^|fHL_l0*VS?D6GG! zyST0`(%!Vuj{I=vx3f_G*u6sW`bl?GO;`orxlX*s4KE>l+l6nzw=cs&*?k1)U-Rk! zyeotCTdpMGSJ&A(thM(i}H>?IfkEa@Op52())-k2lMJ_6Fd9atR=6XkF7O@);Ar0CDj)D{Q`KQM!9O`T>;NF@79BQ#dT3$mHAQ4Lw8Uonq^F%5-b(Tf_+*!Z6dX==# zbL;Mo?wox^5%l1*aW({?avr^$%QQexOb%55)S;^3{Qx=sMj^KV8)v}PYUk_mRNi<+ zV*70gt6HrfmGz^u_q8(_9RI9;DIEQ8-=qYfEh(Pd@>tuiud0uiO=egQ++or@*Nr1- zq9O0&K;i`M2lU~eW+x}#1MC}a?6NaXve5@X2ay23&3q z)eNoESWT@FLHK=zTyk)*p~G?O3ey)f2zrv3_e9#`z}fZnr^kEH)gy3MEgK4pW}5Pr zUjsHG8krtv2pV>HatK6l0-P-zGRwzZE7vP!EEEed9-GP!#3AfrEt`n=Gt!5aDj*Ry0zHG-8XZzj2 z=a>5jqZoQM<|ZXvB0fhmM)ioxsVoU4J=VdY)6@^1#NTKwaHE& z++OZ@H3mwi)-ay=1OVTBUEgQTXF?id3`L@`3@(FgLP_U-H`5v+E{&nx1{av+uB&`C zH0=*9LJ3d@8K{a7$w+M*r~?J8tDbBn;-I`ptB@}#hvF0^^g57ATSdjffC=}lXo)Z+ z@Bp#syp(YyAwfJhWCx+j4JcB}_m-CJGuFMXkCv+Kd*5Q^jWcFzL2fpO_0y1hAK)9Y zO3`UFbv?+XKN-f#kIhJ7kG&hwhCjeW+*h*fdT_bfJeP8cD3Mev9^VK;+CT7sUP3!- z?o7LkpJr?Q+OugLu&QktYZ0l2|mfBaVV9y>`~xN5Z&oNhtLSF9?J-1@!U)* z*v;J!QgJY~MfhAX#`5X@-1yM#L|dcs_jB_S=Q$ef`K`dkkSxu6J z@e%bb03BWjG(t#tf-+ujD&3w%h%obeNYe{fWBK{0eLxsZOk`9gQj&19j=ixe#3oA zfMq-nWfye{`35idM&k8);MJPC=<2gngtN@}U7N+wpjjTY{;6(nD;13Tp$5*EV&i$8 zUXFL}ZX)dEL*FyD+sO?1`-}q}9gHp=sGoSe)gB*Ot(y07&2Cx~CsrOXO90w!;_Ko& z$$|5%<9Q!vl113wPovV_I#){CYnL|o!>@=VT>Jb%BC&)iWIwfQ<#C<4Y=^8=lvGmQ zN8G&`c~wEffmr5gCFYO#?utFzO1)M)@v)MsnV0|BWx)W2R=(D;T1fQ!_DXzsZJ&3O z)ow>75mQG-w}Z5GRv|}^lgpVqw>$IOCL07i-R=7ag1y*h>&LLV+i}ezOWT>t zOD^njE!-K$E8Fuh{Izth2Bq#R>@Ndd-R}-kF1+qn?Xiv4Zw||S?d>_PWRamU!o_7} z`(=gMa|Dz8z8ve?J>CVs6s*0U`kkK`-?v4O zj`^pojw2&vP=zE5Z6<0h7&*9Rq@$yJ7&DqIk!Mfkwrqd{AA+Z?$@j6Ys5cee<@Ets zkSqp?o)_6*^XP>Q!SZTF^fEQlv<3CN9LePDvCvq;Exvn3ZvRN~1;Kybha@)e&!Ox7 zr7)+j;~)@iffzeK;_Oa-A1G8{qvLEv6zG3XlP1?Yq6!jvvF~s|p~}r&y}V z$(db#V~^EB#v#|2e?bh>Q#t z=qX2DY<^nIS#mmrral~^s_>T8EzyQTr=ix9FXX?5db^DX^f=6%4!VH4Vr|}7iQp}I z{ydyXwd7vO*gq4P98!Jszeb9>K{e!EycRw3(99_aSTEOJin7oR^i3d~xK$vuk!`v- zKDKCP73R)RNSU!c`cSd3eb(Sy|K!r{zKKz!=F);Qcy=q~qi@n~L(hm1^Xxw#-^ReB z-N8&@`J%b@UN9>Wmcx05Mjq{wQq29BiJXHDc5I*e2P5RxNi#;_;dWbgm_8ZCeL&b& zVE9rjZ7h{SwVCPz1#=LgBlI_IJa=_E#}-QnmfGW*zdhyp&(!6AGZ|lBsb|@wP|6lo zX67`HP4xiNco3#7?t>tN1ug;t_Q2(VxB8)$ny-3MicsaIKxJq`qeEBj;5uM=6@szP+$YMxr> zium8zI#j>4`q=Jtb)jk%tarS;rUwT|lX$${8Q)p{)dN>I5br|gFc8&^ zXt@S<+v(CVS#@`b_z1gEQ@9#?<5`i$QuCR+zB510Ou}I{%x0q|}4kWuV46<)B<$8t;LhMFcmlTdSoiA;#QExAc3Pdv= zD11_bNuGyg2v#r5nf|%TY|L<=DpUz|zP&CxIlR<>1KR$6zl{COi=s_=6zbRjFNONH zHf3Rz83{9VRJBh!T7FP4cg=48)V6#QYx>=->q@K^YbW4>Pe=w`or9f)-XKlm(`9mAo;&~w@D5zY)h{;R1zfjC z8{VNN`I|ugda*x>gq^f!hB%@!G4+6u+obcBg2yE7OEl#dz3CCEE<=aM6{3^L4pS@D zvIPRE{ZoTe7~=)uv%6RP2M#y)GY*dXMN2dUXRB;*l=X)L-OZFUhx?J%dOXQ1TD_iI zoCxoTpF3AHobK^lE2}tE5EOR$J&HMqzQ!e8vz*nfKf#ykX>-0FxT^6Dz%#fE9vL3?oD)?#ruhH z&kY#ABDP{IpPJYgUFh{7ksX3td^kR8T;2)Gc{E&f*SUia}yhaM1UeP9|aC#{Koav9|Sz#H`*6v!$63uV}gSlmmIW>6q z%-6XN?`Z}8`R{~{_;v~+e5D#6UD&i?2Te%{{hvxun&bIn_kJ$%_KQE?o~|jFF1Ds- z7sR<#z03Y^WlNLGNkM63FOo(z-z3J7O{8VYUHIe=E^co!h6RTwi1OejqW@?nr>b_j zcA6s?8hD&m20Yd$U~VXnMsd|Fng26T{dL*=-vIW82IjVaj_hw6;yIY@IULNR%mavh(8R{=?Gsb;L5`Y2Pzq&}8EJJ%V@E-Uqa;{SPBWv%NNC z1%4bAVt;;!f)UTM?Ts&3Wm`_dYo1Qw_xjH*Ta#j3n~4iY!Z*T<+u*kpL8Z^cN!@@gvN&GnYCHX6;7qRMe=>A8xp zznXr=K2>1)NiI)wTvj%AlizF`^VgyHGoAj=gZuI&5UXKxvQ#Dhd|#NAaG#ZexMr#~ za2VoZ<75>D)>69S%syDl3>?hAWOtrbWp6F#-?JzBFlfj`XOg;c8W%G};QT3_-L2(d zY9}+gT$@5;+;%QrOuV5*QC;Cfe@cqA(e?U#>AI$gp zJbcu@K*$mS;f*#-uUq>TvUC8lwx}f*f&&=d>G3XU2A-hbP#(s&18db^pFEiBZ(HLV z0_iB)7ljJHz6{kQyfF@gj>?3>Qnh#l2}c^L^Zb$6UD8AbX7vw=q3H>`)}He1(ZWbio|M%Gc z^Vi=%WIl;2FAcJ1*)iP{t^N#;z7WW&P7t2Fi8!ozkb~=mCKqYmZcF+SopN~!w?uyN zq}n`wawSbOeqSzWe80G;pr^4zqobCMRyBJfm!RH*w;}}-g^8E9CJp>_|4^u7wLUbS ztHtW8Wq*&>73tN&4kkIKL_4vT)(dd|xM>wQs^lKn%v zs>ZZA2#xrU{q5T!_Ut)l&RlwgXz*qny@H|FcSEdXIkg&Y$_`6eV(T6f1#m)soiWlu zYJ91A21sE27SR>Tr1PEx4ZDglztgyNAd~sFG1o2NV7OM|;|SSYMwo~i+|^7yfkNC4WO zZ{m;T`>&^L$}lu`+f_*lmfH#kRCV~k`1^mJQc>L)u+Jja6zEedACxRPp}(a{A&(_C z)`sCjs*UP=How|bt<y;vYDxIAk9Y|kw6TVqL%982jEt>bCLkVOiK ziWIk2PY^{e34U@Fg{v{ep3y_$=~*&f8cANK2~F-`!~W|d>~;khH_v|xU4LKq_f9bH zIKx|mReAsXj4%t~&de2^$V3x6ER_coD@&0BH#@}&`U}Tj_dAl1;6(M6d&p~>S;dmG zR3!Dx$Kb|*cSqqf)U?95b7Oh@n;hI_SBQ&EolGx=J)$<#%#k4g!dU(B=@6QBug03Q5Pu+>xZ_aqnE{-4=3%&9JPDPZF^w0La){3d=^Tz;EeV0itjV)RqLU%5bjaKpmX-} z`OVK1g`QR~5~?VYkx>0^J76KCae>R7Jc?R^>~Fj71f_3Res4@uG=C;CZs01RYurpL zjhhf>;nPOyWr?BpdtxgJTk+7I&B@RjRT7HLFNILTz&-F$s*UJ)$7eV}QgCRJn0oZ_ z%;i$nT$OZE{qY3p!eAcse5%0DZmnxqzIeNFbH-kX0cHDpht!{2WOH1i!bXC>W&8<4=Jzmn%b=5rudc24Ae71)4@NBEk z->G*U4*+Mr!5Mv~BAL;7JUjRXdVJ2a8i2v(OIp`4ehMoQL4E?vxnB6=Tzh%UZVz;L zRSI|Bux<5_4qW%xUO#p-+eXb?V{R`+Yv_@mh!BFNZPAiqhQ+oWGaFBoT+C{p`y%@B zFFKo9HJ5YbQA(^OikoTF-aM+T-2~sgnO;^M#%j(jS4Df{SEb^__70^5f(_#LC^5k+ zUwrP4Yjv>Ctc$ay#Fand5JBETSC=CC3{HUgtD`gOi$6Ci5NOgxVV;lmPkM-&pXsH} z(5aIJNs#1A)R;&RpN%hPR5uvaAI!YZI1Q18S_pyc33KCvTxN>sm)`E(a1;??H!57~ zsS6hTxX1&3M7{~?&Nuuqg^*N?TVuO#Vl1X*x<%qD*RdKCH7>&l=|J`6yy?H(2y8Fl zI@c-@?1AE_V0DlDI4-8}Ry8#irxM8GcvZ{JeT9i&ZfbGqae5MM;>qTq=iS zaRes4z<%q>yu4}$Fw@poD3>Ee^CnP$!Jy|&QAtTMFytg5_#GY#nCb8;j|co5#FUi2 zdf{8lz*52of01>547@xy#zU;&u;C$?&urU&+fn`H3qP6Er&3QFzDCwL%s?N6P%OK- z5ELYakBcs7Xz?6d;DOO~ZDr+r&zT2TA9__Kr4Pg+Q36O2`oA}l~q^IcRb5o z8yKKyJn0PIsGX3G?~f-R9LD2xIB?Z3p)5G@sBf=#PLDRBy#?gWfaaq|DBru4cJKDc z?G}8I@QL|oqQRL5x7I{Xo9pWbkE5_NIzAlCX!6qb45;U?Q!h)TLz?J49d(CIMorXf zb}-zLzI33+Nqu%lN=rr5o1Ua9ssG3m{wsYG669-NrMfAU7BGTg&?Hy#=di_y6ecZ- zccDZ+NX)niAaRrj^-EPi=JQ|POwz9H$saU+hBAbF!%B!SuK9qQ@hz%HoForbb-@wF zQ>R#PKs-Bc+Vpd*O%c=Nq=bz|4&1;6&cr7Xe|Lu1e=4X2Ab`=BClQ7cKo#2!#NJb4QcX2h zw+z@LF<38?R=Wf348U!*R25ncaNDkn>DaZB0Q*cp6o)%$5bxT4VPPS+v~)3>*K3P0 zD~YnaK^_3zSW_B;ns@;#Vn429mtIc8?l3em)H}*k>!+&TaG=wi2-JaPAQ-*a5IQIu<%7zm2|VBk2G160-5_l9D@Y9RWS;r-~!px0@LW5O-=g*(H$!4qUjBw*m7qB1jEV*<=v zS8sfsAt{8>E)yRDeIbgi`&v&>&W2BG2NO>&BcED5)I-ol_YDd|$X6A={`as9APDfq zMObeGa>dEXJAYVFm~I*AXoMe_TgT?o+{Je@9DGXm0T71%jMIdXs)IUW+=E~)9S8%j&hdo{a$b~EBVyde$Gk###+z~rZwC_KARz_7lSvwP{J zrGgB-zes9|O4$g6{{sAMLb8swE=)@ER^xUiIWRpC5o)`XQ{5QX)XwQzdbhm(gixK= zjJ_9UC0Y!EK_LPcH8rUpwLd-oZJ3pCd{iz@=tiV{m;r;+)qV`HhwGrs*`C4>lz4UL zqeW6=o?jM}$b+rK1mN7+@1bs57&s7|klEerK5h3y$FrZ|w68aQL`A`3-_$CrIh$UH z%g_m~5dHjciy$F2gVTkgv5uEjc1CG#F_yGcY4JhHn?V)QT^ z`V!L;82pHQ%4stuAirXscH=;Liqf_G>DpkWF`gOCy}91@MQC;O35=zFXkzjAtWFxn zH)gmXVUNVB>~;DVCNjy3g&yp*8sf|Z<&2ntU}o$BX?5K%jxFnGlcAU`0@!7!+u>oK z!JYC_95?w_CbHx`wW8FNRJ(@4e(Ed(9fp#jud}9nLneg=Nps>Y%p%W13%^MI{i^%# z@AxPC#M7f-p~hi>Nw7Swpq=Ucaw%z@ZF=8>=Ej#}U?jxFrQZ9y1lbYF3Wy5|Y_y2Q zlYMGHi*`2c>b%?RC(o)RO(Qy1R7^-Kt^2s74rm`&A#L)V-2!qv*6;Knnqr~lJUMr# zVSAd>0SKs6ZbapQBQ$Gng{)hB`I4#n%|tQ$F5kT-5f8CgO0@wE#{w_G z9x|H9k92AqL=FWb3?>mbo`FMMW=!CnMRolxn3*DKS^P=oU0YE1A~x4ECPOXwNCFmr zZ~c|M)qY*qAFt%-J|9xoH+HwWUk}K5ouRsWUN^7og4F;rOs@XU!T z1!ow{=pBs+kr4l<3mIos5>pG!Z_cl3BkgUuNi>NoPZH?~X-x5#pg{ ztuB$T8=j+mjHmD*bBw~B5zH8^)0aH*a_Xe(5il~!yJXGe1^E+IW71%Cu-o zuPa3E3d@mS`vPar_pVYPP^)&u{ZV0e-{Q^o#m!Ie%S2~F0!|ig55oF%$A19)&EWhv zexURlT_iG!F_tnIE0d4WrJ{W3V6AKwThF9$pp!4Sw$ex&9=&0eRL#2p{9ioL)UE|! zl<40LjuP$_xW90SBPHm8D%(mMUrrhy{fPnmRbA}x`mQ`2IinMuBUv}hL!LPp6-$i6RRFK;@O`7r>=S`E;rCM9RA2 zQG+1#d*WVl+5=$yZTx1}0Gmp2CMrF@U2oK(@^WWj_?wHx#_hDqTR@9X%+oVNa*DL5>fT;MBkg`i z$D4%r=2S*>p}4RgP7!?QN7)g4$aIEhapXZ?U%VMm7fg zCtYtglLt5Y6>`re`2v@G#uIE}GeFnOL#C1I6lfB`EDO&Djn?GTg(Y#7a+t85- zyvIboRB|{?lPEy6phnbj?H)!dnq;%@k!0U5wckKnsyCmaFnB(PJOWGgJo;{72@zPw z%*0cX$hs!aJEwR%B0k|9?8DC?apBY9O?n77h_o%T<`(-0Sb=p!^E8=iJLHwVZ#cc~ zT?T{eAbu24R?F2w+FrY)W>!`zL=1)zw5=QRYHjz-hZFrhSlI`_;H}|#zLZ^0s>!F( zOgUeC&%0TJ=zhSy>EIY1^A%&hO!5mvjDflBOoI`FNz@U=zTt_>l<=YXLW2#!rfg=v zuJ|)nwaJGK53T|W^9!{(yKj4~4s#4@%}!;pS&a7iJkHwysB%e>KRq?G-*B4!s=Y3mKoR7#_l^EPU_id{g3qc+FT`nIo5)fy zfd!1j)Mgm=xu;+xs<$0eov5ZVXYv#UIBenh-y!re+@?`$zh}*EHrNY+begDN8(pG} z(e@|p@Mxy}8;GEL0{-=I{G^iC<(3FzEz3`-hm=8Y(A3Wl3RJGpHu4(*X8jQ&li1~c zOIr;Bq7(+>NC7N;DIw?xuCMLLA#QDVOUFsciV#0VgfY+UdV*k_`e_dHc5?c@?rxfA1g*p=CL%$n)TCRT!P9n4->0+_ZGdXJMN*?>#58eSU^ z&otgaMPmV$j;LvlNHo3Pc^GB6;;C8VqUZGz`jXvb;n*3P73X}22dL!a?HEFD8$kCg ze&ZHB_4Gi27m3F?J?{bWCImy0>Vtg{-|A{BXc)lYWT*J$Jvl=58Qu-_*zLt|pm3jO zy0;a}FIm_D)Y`cR|H3leC?4Ogt=3@AyUO-E#G6+8w_DfS2>Y)ke;u5mF*s#syVG)c zm1dz3p&JRFWzri2y>`#5wi$z{<;oL~bOJ?WnnN)C%TSQOg_4SvnVh|C*5l^Qwh=%J z`&}b0M0;2$;cHgu2U4$PDwu&>wO!U;XbgA)={tkPG!^ReESEE}L6z(ou7?YDGATiL zkqhYvM=na)`WS`*Q$+=?UK`KF_!uc$>I1<}7P#-s6v#il<|=J-?r%n9RPhLN1k$_g zOJ~77So0xQnSgcsRXU(@<}>99&>^oPnlHw0v<`#d5zN33wTiu4fD++*KuI?7w`cp7 zj#FwRDfGkJ{S-gTH#g|xasXUMlLOI7v-2z3}b9#vw^G+@eK*;%rW z<9QWx$*?E5z`LDL`ng03Xp<kVFt+!>^WkO4YFY6zd{157 z&_BCLKte{IV&K&dee-th!@2dTB@1IL;qt_ zUWFAnIvOI}!WR1_mdmLU45ssN5I#wVVG>vo$VJQ-*F?*Mbn zYtYnC@|dx%)r+c>=3tTGBrX$|3srajB^rx*Zx%Hh2DV%wh22F*u=7@|;SeNpa*Fx}k#J3h}=G zZa_xDQ!r-2YB~G)5OMy-%BqZlJqep&k}}Uj;<7PT_5j;aL3D7 zb`7PluGT7vufcy%dguwzldI+?M+#f z9s^c!k3`2~B z6GimoufH8b00Z~8UK@GvvyEXW4`s7P8VN@DEQ$CQU$A5uJ`tLgSt#NCmL3=?P3|Nx zE6H3hZp1}9VUBIMmvZXl)J8?oFDk07)hsTbvELBvz!3hgQOE`rkRtL$kVYkoP&qY8 z=+F2~qJ)x%Xl!m8**#p&q-nl9J^Kv@wp_Q?7mePqXxyToAweqnr}_QhuO_mVt>cgl zrA0YFZ%|y{#^DV3gkVNHJ0v35A_4SfBRvEi=&*lj&^e%xl@rUICWS6=6SDwf2K+*; zzq+laUtO`>967fWgJ`Q1>2oLQTQ;f5*uK1>x(W9vM9iLA!y9`%5xC$L{S+f97aSHQ zjw)tb2JoH7HiNGXCIY4a3ub$=JT2EvG%`H?&jRi!iSGu5h?|I@#C-*( zajYNo5TNezCtDDB)(jN#l00yl^<=B%bclbNPKtJkRxGW-6{rfdM1M=c^6wkns<-6EjvG=Ik=^+8Pf}|Ejk-PW`tePZOQn5sbNJ^{KgMgF!p2b`TI9+;kUfQ_ zB2LErEAkW;_>ANe5LXZ(PWq_}zwi54V0K^}VyfS0D9QyQCiL|+e2-j~6n1EtW zovqOTnjbCg3sw|nJ=yfAp@cL<=HyT|XuAJ>5FFOqSk~)f>q!H%czWIwU*x`pl}D!~ z8dmmq5OO$qQQ-%vm>fb>B7HnV26(~M0JvDYxUl#b{*1}Vm9uCQuaFXHOPFwgYQF%< zTej^DE~On*d?P48!bxt7H?og>Sq%z3S$RCvIecuq-DB;eu3ywQcmctM>h*ohTvXGm zCf<;aAdMKApXb2)erH9s#%Rb6T@LWrZhdu#_Yj0}b(xS3w+9de?`jI}ALh2<`ajp@ z01`Mc3OG2|C46jidl7dIi@$7@XUr4|)D!wOrSl}pnx*+Q@VO)i<<)a#mO|~TZ(p0^ zM;KA{dv?6APm~)!Y8|fzHycwV?wsBRD+1G5?-scI+PYOc84Ik&p*K-c z4Y`-80Va64{XkbhL!P_Pl1M_Bt6gFxdfndIWe-+zfH zLZJs#6GoMY3Q|^IcZi|ADD&^e-D}m3r%=u|;zvX^+)IQap-X;5wAdSuo{?l1MB)Z% z%O-#tmJ<)uOthk4BsDL&Z?1Z`M5UcZEhCQyP}nlO52yn7gej-gPh)IVL{riEO2@pS zir_by;;gS4xx%O`Y~V5QSbOYYg!lBh!y4=pOc3fEKXBn;VP#F_izrNTyu7?x>^a9N z(p;gW9AtJY5TKMCAgrJa@@>4{%lr~kzy8s4lzSh=vvXEt(h#Z=gqbB_l3Q!9+0Drj zRT$AJNp60Cp&gv{>h1GKC5zPyGz;-RcNuJw54lQEo?vo_TC!zghPfI3s5M*gW&Jos zhHRRg0%d{9+vMA;QbkgG`Qr0Flnj4_O+OCu%~s9z({RgBnqY;wPcf-R%x5pPUXm}4 zQy4Y1$cU2%Dc2t)=DF923)jbTXvr>YA^%%@wnO5X-5j9S;xKpGZ8xQ)GPuoi&5p`m zl|Y+~B5>e#+KqwqEI@{eyVZ0|z;!n-*)nvuzV+}W7VF1!JZBWPikrjV^?F%zd%?0iRZTqh@XFfq|uO;$;a{XCvc7L{~F=^WaW&9 zfi^z%YJBpy9)RoZZh=t}jeW$e;Ia@eA84PNKg!PNDk=C5ne>_K+iOslRD=jry5*!3 z5ojd#_t2#ntN?#3^%*ss>;+bUsi-?>Y56RvK4rBLJZQ4tz_E-F%ca#>_q2I+eHG=F zOy3PkIl?sDTC09h?>MD zvbUSUYi-@@z7V|)+I!26fBixA_&N z^&Ie*P*OXFaXogojtBJbX2IL5K`eZqy1vT2Ecb<5L%ky^!n5!*4Kw``Q}-5^O?RgA zGUgld!s=^d-C+0_(_>)T$>4WuPca42Nr*6zDNu!KO9%(}A7fa=6V~@Ad#`HRlP)uw zM`%T`7*^v%aHVSXqFZ8x3M<^P6a=eP|dEJ`MWcOn~J5%ubo@`GBBn)Wwh;>xV4b8ShOnDx1*49D=1^CnqKKQC3hTh10Z&F5i?p_W>ZEu7Ug3 z5LTSrhZ?QTj+kNooQyK7SB499)MU25^`y?m2Wk8IVskdaC@W$b#KQp0V&XH5nivVE zgQf^+_BQ{9@P#z=qvgks2^@*MCPSG(}zO4NDld}gi}KBH4a zI=x9$sYd-UT(1}^xi}km+|7^~{66XOY6DvN%|5@B%KV!B)&?*d!On0gIGC?m>KgYS zGj|U$-__0VyS}~UaPRq<+T?bLZA7p3yUV**W9=)M&L#%H%VcO2i-NVm&ziixtEYO* zLxDaXjwIhojeFM6R7el8(!nBt$XG74300>i4AhH_=^b##pIT0vP-nvG`d`;ZnHlma zN<|dJT*>hXEh-<9S0eA!;LCBwew*PIS!8^9cgp1erhpI;kG$PPTD$MTv99f_Qw{UX zcn{V|^Ft@08j%%8)i^ z&Z{0z5*1IA9)2^?U#vG}WT(DFmkKUPa79AR)!wcdzi|qEOr!K+$MllhxEOGH}2mX&fg|PI)s2c)g zZ~3Vl7)S!}6JE$2gpxm6ZY}~{e+q*(mB*2%8%|U&LKgl2e}`JbesBl);Mi@Z*%HgH z56ZSYIa$a6+908Y5W-ag8fTpY9rBxO$VL!XeR=gk#94+Tf~Q}-R%(a!ZI{#(am$vD zYG2J0Js}5Y}c(&2Gafi53NpZ663c+&>?C_Y=JLstEmOe*K$PXU|F@ z7)rWe8(o&mzq9}jLOH0l@58QUwj*Ed1#k$w{eDwcW~Gcj0EHnY+0ffd8qPNCW80mbYov?x5ie0-dpX zFQ|hmNdkbTE!vMLnEgOKCXA@7txc&7-7FoeZx{hdq5IiKmY)T9T3H>kJleMNolG{5 zp6R9ED#%!!5cIYNxTB1~Y2u9U0lEst25+bcIb>4kI`$&zL(Wu6RrOqfQC5-ysZ_&j zi;`)8G@;E@g?t0j!?<>3I}qAo5|c4%`;o?y`VHxebJ5~~_4U6%-zK%S_ZW-qleiordmuWsSk);zZ;OsXKv!6aL4)nd9Y|3@0>=Mnn|M?k}% zp>4uI(MRapaSF+s1AJb__J&HC!sd!$ zB!XZtb16gv6$+#$@_boUyZFc@`4{;~_!FKJ71Y(`OY8)s1Qh!9!TvwGt~#uWZeL5Y z$qidlx}`(uZb?C;I|QV=yQM=yx};OO8>CUXyF)rQamRb^`OZCl=lnO%JhNxdvu4d& zzj))#L_DfiWUL;&eHNLK$eq7*uuDSNz-NvR!!-^wr5aXo;QhdJay}8dAVxsG+!Znh zu=Xu;aIb(pBt_fQFbPARlVnO$kj1J?}tu z`gLB7>_Y#F9CNeak&0GhohU8*AUECB?*)~>ufP@!9UUV#vhp0OUD8RU%u@_+ZcI^} z(Ow??usf0GVtVWRL}FSf2-=e{JJ9%c@7a}=tJ@*^;G?dqi}$oOI211$vTb4)Z=8t0 z?;-5W*mrQlo#37IXo_xK&x@!JeY ztexkNyfAvvlX}nDXgfq)>4ES&ebPR<`H-`i;*Z5vPsd&!@|)qi_~@${`}}xLT{n^o zF=V}}@81{E6>{v&TT_V(I;{f`fwQH{%2K}3l`a-LSNg)1R-d6K=;B<}8cxg7hkzg;iIyvrx2xC4M92wtMBTvJ4lf;d1C2GY?mKvtN zY3C~+o{U407hI*PTjqV#6-XZNC+!y;(Nt9uG#+dhA6{&>KUP^oPw*_8S%|Wtv^I}ZPHn4u)I3qb4(9m-}TZX&_Co;FEK;4 zQmKm|IyYCZ+m3XI8R7{i!eXuxCO`I!(CfhEtJ0PcI;LC(JL-OP@~8O<=^zKFHATv% z>|c_uibEL}n{`Ostzs=ldh;nuA>F(L$b7E~lH?DFD3;k?2h4O%KK$%_So{xdzW?ov z|AHV})NmuyDct-bW%z0(?G+P5)~nvb_nFM7s_?rK&3+F*!62j=9Lr)7D^S(Kkw>qH za=FQlY?WN${|ep>i2^MTZ$OHhRIZwk31c0nuGNC{IbJN@8RnVT2hnsg>U>89R7R{u z%$eS^4kaA_mI3P+f~rN{yxuJ4`nH9fGZCV$#+Z6C91&Jg5^d5G@G_b39`)tccUiiM z;^OLWZS?%+ZZSJ#VZ7vMPLe&6tg^esJTdv>xZ>RrFBv?YVZmov@(*tw?`Qk=bbHzw z*n~A2NXi55vZKi?vgP%IEsT8LyfLSRuzaG65|N>wp^oOObgbKkv8ZSXO)n^p^SXNa zHG>326}onedb&4U5v&pLn!@-0LaWUyg3$=b(58b#=9`gf7#OoLtH#m;+BDldQzX9k zavHx~#H5*F1&cv=XNdV zJX6zkDYa%g2?J$yw$)22vYh!UO5P_JwYDsF)@LvdZ^_m7cIE;4A`r+}jG}dbZ@sLoWsU9msO8!Si9z*SUvEoX2lY9;c~0F6Y6pY;B$B-}V~t$gP7f z2{wHssWruE`?&{>z0pu499 zYzLenu=^r{sgh@w`67iDWkK*k3$_o1!f-uEI++eLmM<18!jY?Nh6|fpFJ&?wLxN-> z&so>Pud4W9xs@&FCDI@+!1|~ph5WTpC@NdP?#L$sJ?+I*O9P2uE-^uwth7+BAU7yh zlkIDa%*6`HA|EyNO~mQmn?9rk^SLM}<|I@fma8I~H8>{C%##(fUI76{@{k{A((P~X zYX+Zu-%i)Q9(?Mx7PSj0(Np0fX( zFW`pL+7$gT5{vKQRfGJWrH_B?ivrlb_b}f-l8GN4G8YqBDrA$vVWAc^_aLtHjpz~c z&$Pc!Uhz3}wS-ojlyBL@TOh&n(7w8@2;UeuIcqeco6*x%?2nz<>f{`?+gjtmj)ETS z9v!WWb+JE~LMx&l1ZokW&0ZlxCucYZ9tIwF#ilmH_dCze zxV3MCZaof!T+r2Y6?e!L*SLEHxvr|b8a4-|1fO0n3QWDbEtg9J#Hd`U;E8|H7W_0I zIBtt8G1YUs?^h|PjXr(^KK)=T)}xb$lL{9DADpNPPx9T-`1cPr2Tc|wPv$S5|DrN{ zdVRkT)!wY2ICH(ja_=E+;2oMFT~6}o(0X)?75iXxHQw^DvN0dPQ8f~p{$T1#Ke`*i z;ibzbMlpIP}qs&*P zbW|-WOi|e5(s3X#M>o#bXlH5?$}=>5MK?5Uleh(S9;kb(dG&FQ-~qRKWXTaFm4K<; zB2JF$E`#O;y+Eh)-~am`b#^pI*jA9Kx808V!tNW1B?+~5I+vQQ>w>5t!-Qsva5*6%VWAr3F#QWn^4b4j62Pe)pLyHhfbmrig)F7$T;nAbZB@4gq z&D_>GYE5FnIVOVCe1GfbgTa#%4WC;3|y;Hh!nyHv9O849v;gIr6ph@K0SeGV-xT8Tp6_mJVLZrXI0 z^pC4Fv7XOA5{}o_AWXESph=Na&=hlxFb(CLb5%_;0$44$IBuIoKF7}m_rN%`M zMZ5u2bJDRwvrhw=YDrXHJ~#RJOi`z}*9bo4=T*_G`C3ko(+wl^zau~Y@o0B%R;4N7 zuj=4!Y@kq$$c;E+S(98ruiBytqeq#Wg{hxBj~lJ&J1atO>!Lq2p8EZ$%h;dO61qyL zPrhpOw!b_vk06ov(s6rqfWC9~IlHS+YKVOQHAZ{fZ`9nv#*|b@jB{g2Dj3GOu;7uq zTzT0p)`bajtK%|Mo|}XRR^3F|Nh^9_#e)66j5~K&nn`$=_dUt z+!ajdCmQzc;9GrQQ+?rGtQctb$Dz6(@rm?JU|Ck6rJM7@+z}G4)qhnLAoKGRAp`H~ zm6m&Eoa@2mnraMXOOqv&ekxBuI zoaq`~{(a>Be&&v1yuHHZ;yrfse_$hYyrhb`hIP?ICv#m7@;Y`xDe04q|1YEkA_N$& z{tX4D`@^gA^nVQspvNS6NMtE6c=hKn0yNTRVezO6=xZ(ePnoUg>nDDF~|> z>{%6Q`{=r0{69{dJ}V?^mM7UG$?8uGr{6o7EZf-7j09P|j23Go_raeIl>UCc`j4b1 zxMdG+W@kAOtd=<~hqNrcROj zw0m0lDFe$3fjxbK*TK#2`F_uMC!>=jg#jo;EKZ>SVL^J%Qqq5r;j_$3xcn`T#(RCd z@Lv7_iF*#hNarc$^igTLyoZVnn1%A_hZCI?J}$CGYHSend31jy`pxq;vZy<~av~u< zOUz67W9G|Aq*WbNRqKb1v4hdh<^z@sO5GH+S&tL$l_ybePYlG%<(VWQ95EkbcDFJ$ z@r4qrP73AZ=BxI5oMVF*N0LzGq8b$y6{0WQda8;G2&T`MS#Bac5NCi~^8}&boD!f9 zk&$(TrUzs}=HUMv3w&32UfSNMy!GVGeQE=Wm3D14mbr%1e@(G}TOn4TLn@IY3BA7M zwGh?i)Nql;oT-N;gng2^6B>wc``k5o{b~*JVozAL+6|`{TmzZly?mVvp<+T#12_D_ zc!RM3#sk;`0IBuy>I%aIdmOMz>Tk7rIyIaRj@V9u6U)x3sjV#@Ae<=2(9~j}ACyPA zfY(oUT7nqM)7F1ZQrqR(J0{>2^2?Q7eTViVt3;8lwYe&Y*WiWc11OFy&)@>{uILx{ zS<^s?YshS9ONQsJm-AMmps?WPsqt0@bS&MWdZqhr`1{^B5aT*AvGdqv0fzo&;Gydx zBnIlxCSLIFh-?jzl1Sr@FsqC~A;-H)B%{c|B)82`B;PS)Y!2Lz-o<>f zqxEd^EI3;NbvDXL7MGN?(sex)f=B!Duc&5?!jTt#KCJs7>N7Uq;i^tl^*tJ{YpIX< zJrblLv9BDDi7jR>Jz;Q+Lrp6uGYxn2_ukY6{5iuAK`^Ol0HL$#S-kP8^L$<=^H^^D z)iSDu-5yt4ZL7%04$b*XcZ@igjt~E~n*4M3L6d-EY5FDNKQ!$e) z{dB zo8o-Sk5~0WhjZVyGCYo}%+i*tx0ZTeY^HMC`EM;%8sy&Z_&h%KPUn^1W$A(ao}U4@ z!A_-I$)V{ot@mV>@x{gT1RNhq!|d=;Lxn#Daso10!mphV)fehb$4C~0?AEEEiwn`) z+cfbI@`YQ8#^p22+6OR82qvlZ$a1rbjoSHyTFmrh+2=1`G~e(Q?$^#MCrd}x3*~Tu<4Ks zLQ~=OyOCqtnx5@%IoPp3^u@7>?e+$?^YcnYVUuU4tfNJJJjObDGsrg>8Gz zE0CDmrJUj|#+4j46uF~IpCq45-MBQOob+9mDmEr<6q+Z7#j|taVEk|cItw=?jsN^I za$dCT*U8V8ZK~Sqprj+z`s2RJl$6PpiFU8 z$=u)3w^ljs5S3_b06@MQ08l7fS!ACp#}IoUPHVddNR_`^7>w;Vy)5(Uz4$I0H$YD< zCfe(8!ya(U8T{>m*G&(avVN9a?Up@fWm(Ju0Q?mX}a~LgO^9qFMoa=>iPc8I9V`!+G>^&U=u0p>Ka%A z^wi%#bLH%`B@TocanaQ1SJ}k09N9zDL3+^IUxoUs>fIAAqY}!C~cKV#>>*{(SdvG3a!flbFm&|WQV6~BiMB{f^ z?yrw2Z-izg`6hHH5ze%$Xr&#c%PUY0P$y9R4;4?E6_=sQ3v!hX_TX8u8v7iuv1VxS zsxLpK6sLNo;geCczy~jQrBVP46UYiQ9TlEcvu$eFw%%@Q{pLIkieWy~SsXS$?t4$i z`nUtMKqf`O+rY!ws&D6ldj}YTXZF!Fw0-D3HW6@(^`YB@Dk((Q_UhEl8OQSB7xQi; z23=3)9m94S|E2}%3z$=5Gv!0tvcxa`-37f9$ zYYIkV*9-c^k2d* zI*|B4{(~ian zoh&m#<3^@Qu6y;L?v)J0$h(9+1E~T{TH}lIBrPped1$S>z)@oG{;r^x$Z;PiVyg_v zuE}6&j420njrt;Dj~40=oW~Q-gVSI^pg3A%(oH{p6d1ZueP&qHsLCh3IYkss?j?65#xA zkv^`GZoXK#!81Y`&6o|7_RtOFXOwyfV)5+kc`2=2kSQqTef15=c%x7LEd9iD20w?f zGSD+5@bLq$^s|ZAY~Ez-VusBC;eQY?h;S@AA*NX{7{21-NkQL}pp}Pv4D`6;s5oe140fSb(_r@@?)wS$ zbN&DX6-uMbFuAk5z|y%&HMC|=3fbwieI;B3%P4%GNcC5jmPw2vSSAUe^3E6x(cRt} zS?j=TpQ#3V@>7kEOA`KkFI7cGv^Eo}!wxBcz`DN=2YP%djuv z<|@tw^N#7Mh4RHg7ca)7HEfQvxnFc?{)bA;|AxKzelfgcxiTfj#(AQWJt~PxFA?<) zt=<>q!@+)Nmc*RI(Vo}DkS0^6->M27&UhuETA|5E96C=hL1!3Zhew{LZQDs**YZjn z+cS95?KjqyGMb-4O~<$jyX1P~mjd4BX3 z=435|M3tZ@r@|0vm@QNy)DRhwYsoQQV)Hk}%qv)Yt4BRl0lcH#Ox`A1Y5(IzAf4i) zj8^8Vwif*@JhCzzqBSN?FZMLJk<5unr%61iK}goRaSQkMHwX;s!MzpgoJ|@_Ci0ug zTe*1$xN-UnG&a;-`?ok7(z=lYo+o0j`u6vg0kM@YgB_;H>dC4wR`pSQjO`c`nCu12 zU}iTQZmDQe29EcyNVvQsmXg4TYUP^bEbT2F8BD)9A@j&@ARC8Ke2)MSGcjw-oXY=v zXB3BDjV#Vz_MK6#e#+IuUB=M1$$m|d{cm>bnaR*r?UpPf;9h)rK9*T>4V7~P%uo@o zpY?r{b*)?Sh90SsWZ>*%c$8l*o%mdb4(={HAa1nc$HyZn)mxM|O7=y*F!l2Fz>j6Z zV|3M+uF$i&X6lhALK130Qu!rUINtbiN+w*nxHz93nc&GSY51oP!*ub*a+Z>hMd{v9 zBGb>7l1-E?t%@QtkT{mxz0z7f!!0VQNK(^vlK^Z;vSmWa|E4~JycF7@8z;}LF7octR zz%u-hS=6z~c>e<-(3rIYzn3pD-*jIHC`mn-_Hq1uKTvoEa~&>3VMBA-z5LX_?D4G6 zZhG%&rEFg3jcV0m>Y`!6tin2#f)fgeDFI$|M;h67tpRoGW`bwH&PN8L0Sue$-&g8$&1arY$+pbLg068q0M!nHDgHOv%YI^_CXG8_PiewNcU$!?9#^>#)j|8}% zvxW-`V`ZbYC1&)Z?b1re>p%v(X=&0tgi@eW9tXM+{K8tr-~iLIT?a78#ZAQ5PJ2P(ZKJOfT1kf7&Hl^Z zgLGT029+&gM|vj+*1MMYM3UEHlC*^kKT!YbUFKZ^TZjd%XxNJ5Pa7wVPNH{fbf9Zd zqHD0X2xH_X4_dH$lv-&B{4_GdW59{e$`v^g9~SdHAZ{_~z+_e)3YI554*Ychc3CG9 z0=%VaUE535+ZK!MhFjd&-F~RxXsv(QB0v$RVAE*Oj~&hscsE_Kl4Uro<9}|u)+OQI zHnYd$9a1HV_|0@IvC8OR%H&!QQq}2a2ju6~W)l<+7M|ik0ULxgv$d!JM@(n^LUV$DWG^2j?4T?gl^DNQX(OqRzB`cJZ*{Dl?u+V zpz+K@T9b2E*kxY4!VjkmPLZd@MhAJvPZp?yL42&`YaAcsxL}R|E9GGW$LwvNIux0; zUyaU3nxOsHNc|$8o4nWgOtwDZY!8N=Bln~CWczq*VrfNf9Hlvo###$teyOubf&wA_ zD7Qmc6|e^ZWssWW8^{b>p4!G;&_*A%Hp}Up4kdY9@3s6bZ$n!mt>wFnJMZQA=6c*K z4s2~xT7|UP4Z#DZCFsdpBLC}AlZ%n;N{5T1cXgqE=0}pxV2;STSsrp`*s@Q8_mO5M zD#BInW2Z)Ug-21}1Ynf-qVS0APsU6}^>H4-7lBkYaknCa`XD)@$_ZB)5?>zfkC zX#>RpL8P?%ZlU{t#xAS*8l^8^>HyDb?c$uF#! zKyK`b_O~q&WkH&KaTz8XVW2tqtmFGRB=g4jy8*lD7JyntvLXdU6&6%(a$`+jc^z3i z(f<~K+WalA1lqCOhItgW4cP=8u+w1Q0mYD?g!As7fcyHy09#StAQU*F1GIIR=(#_> zI{gV#O?(wj{>&fwU@e3+G4ttu=WNuaP4+h%zQpwsW#K7f*Ls%As7Lh|l2C&}dHbWg zz@v~wc^tS#Li!nsAQ|2K63md##7j0_BXxH-Z=0nBQrI zZb7#LQi6t1wsM0a^7SsaO>Hr9W+uGP#3-S*?*s8K9i2V|{yHA>xeK?nv98M@yK7tZ z56>$uR?d}hdzb_(h}t5@t^u(?LDzZ<=xLPy+z~>okSW+rgcI9Ys=*<@+5~K&R!HK# z-bJbk19%weG@OaA?H>_#hKBo6*ma2M7T(|UCMQT!9kzr(D749U#xiZnJ8dg;>MT=q z*{0^y+q*Ge_jgVskjo>~sPcpfq(o zS1hd;ag7v6um-K(Tt(`S6c$|DVvJ!MOj#|!@=XJu%B|Z81t9A+>vr<}&QANAw~6&F zz2b?sZ)?4BT3Ca>(Q5Op(TCmRGVv<)wj6Ak<3#)Osb>QCf0~Y2g?AE z_(~uPDRis$ZEuT{lN0VIVkj*6ie0JD&1!%%hQTsC4)62KoiWmh>;K-?!hh~3&?SF8{mra_2~QMNA)WeMUc{_i zU3W!AVVkPd=4e_x=SO0=Y(dj2<6IHYLFzTnku>TZIEL8GY)3FK=U)xukU-xVtP_E> zE-`w~Wxf4oA{Hywzk=lmG+1N@0Aq|K+i`iC)n33qRZ>Y)2wR@^sl?DP%Ne~0{6;O* zY(-(RLc!^@CeKNiRg*l$R`<&Waoo6IRt|57$@@b)0Xl zvokvCQP_8Tnl`^=q;=Vbp>A@>y0n}a9S8>$vexefMk(!u#N z1%8k0<@Xy;O|0avs3 zTT9Jzhi`?gbHJ>M^xwcl0`*6j9rbL|&U3ZwyymNKW;-ff2xPPAzdjp2)}hS?s4iT~({RUisEM`Nzvf+85!0arb# zbUNl{#P1BeSMyTo9hsSPLo|JlEXt<;BF#qq=`Br~?1Y(kZxEZq>fw)bQtK4yWb5}* zqhIDfI%!;pz8(AWTI}ONpZf0Q9$_4@zjy<;Xb&Mu&`7?^P~u3PK$HeDN+pAt-< ze=>=d9t)e3ot!BLcFCtAjw;^#kL}!m1Vd!c>ZO&1P<;yNF8&adn<^*5SC{LY{`p0@ zl86IYkQqkKZk9Wp>rM>EyUJqpR3Y#*g@}Hbv#>2lK_6b^5y)GLVW+le>ZJI<%OrA{ zfJYS0qUy`@(4gv&)GappVJShdujnozGNL?L*h9d5N3N_yCYVwzIeb^QSySsWMO1{I z!Ek-%B*D=|vR&7&l#3&(vx7YAa7mfc3*oaZDe6#cfgzBXkRg7#%9AJUIdcX{x5Fm1Iuk0Pag=t5+q?^r0F zt{-T>i0?!nUGrn6mv{&%)jz*3mq_kfesxYyG(GtWJe#_hVUqSA@RojJ;?L4mq#vFD z3tQ82vJ=mdgZyGj%Fpwl<>J#O676Pf)w+{7UtSm7>dNg4dp5s90mNOQ_8*!=e|-~Z zvCnwd&k3*W4`+j6w#Mrz+wNgHec4xK{@SdhB089HUT(gA&eZmlBCTHu@2=a@yB2`w z?u2aqJTdg@eDbS9^=8kl^2Sd*=lCV;vXUQmn)ezw411?v{c5QpDAJNns!OrHj261I zeC(h%2$!ybvl3zrTGwOV^iF_Bm)6Y&ruQ!tR3`M(SsJIkK>V`NJU z+knTH$Wdg&elgns+P)IJ0-jY-l^m``r{E0K3+5vd&jJ?-v%=2^h4zw-x{X*czlufE zUQ*yc6^HnCPN8pQlOQkgC%{)>!Yd$$qxxa@ z(EU4Hc z!VSmA)~~_i4m|nmLTR$n$$dPnJN1^j>BO{V_?Ll1E{mQfwh=+&qs5`Dsqzb)wii8D zV2J4R&^k&vfrfQnwz_N)g`brxtKiAY3z-iyD3)k0YXT-3&K?ghO~Zm#5o5Um(`HG~ z_;}~bJhcN*s73a53DDyS8a}My14gTD>>zWqOQtIVLm4VovDA*CTH+aC;j6MzXon+9 zuvAT&BKTR5IzAl+$0n)n#FFQwxg>n)Au;2`T%e&7g$G)+3ppcu6!$lK4h4^9b7w^6 zlbnNH4WHIMVAqunS&#!_-%3%1UfYe-8|k#?td8#Wd?6n}U3h-c;LH6Sb~No%QWa4@ zA@*P|r>#q`9f+BGrE)17+ex!CWDWBwjIVFWn-{G&s)>T`kjSYy0sYU3@3$t}5yo|` zMp|*cSY}Y3eh0&xhC|q7EGbbd7gZP#z{1GqFQM`IRF*ZDIBY*K=5#N0WS(F5yja5e-oUQ6?VBB?g4vhlO%7IoQs5i6=q<2Bo!%9$-FG~k<9RICj4|6V&|EndmhFMWRzOz%rjV@Xa$PjhYi~I3$w!3lY!DUsfzmhRUu!+R%#xO*#q!qz7osDco zqMEGUzb&@SZoC@r&oKYjj?6*YQNjMW9#!zbnzil*eFJgq);15qQ*+58gh(#f?KUx& z@);mCou2_--P+v+KFWZC6b7G~t)&s5hdVS9I}IYRBU+ygm>qox7B90K_AqQI1sriz z#j2nB&K?SU?r8b0$ODIp1E{Avo7}YdG3>e;QSkKAuHV1^yg$m**W+P^x4%I|P2O?7 zCo;9XoHH7Jxy=aTn#gHFGFmcw^`Si)OZ3IL0G?C>Hllk^(&eR-{k(a2ZCbMBlm)7I z#OZO~C&HaK8;2S{mZyq})nmmqiODbZYUpzqZFT$^3Q(TCm)>=4dVp6jgG&^X3pWpy zjU|&F-fP1jZSR~Qslj|eiKmgDWW9#GhQE^)@F3o4b13a;LT(lOASb=B`Sa?1VSMqY zGpF_*L$(frB7rsZeQVZz`=FgNap;91AIRQwsW1p^rxQs+I{?d&8Yj&sg`qD26+4G8i_Q@NnW zhKkYW#u2={DhJ`?SVzrD8w&C_JO=`-z7TjsDu}~bNIO!1&;P+2^<&`28>5g=@Nr8;&gSG!h3OP`(M2hxK%RMgb=#2)-Wdy=F$b!LU|WZM@wDrUJx zk$KF1)7Iu_D&L`rX$<`(h2LZ-iKIS>m>=vX9_`OJk}pvo+`lw01`Ui>Va?(He7kFr znUtF0p~BlIK2`S9=0UKnCHUjChYH@hm)<4cLFu=x4bt{`aZRqJ3$4cWPnchX(XGwH z@mQ{UUegQu4G~6p?F5E-=yB_Hr5^ztD-I>pu0sm1{dbw{Q6bvOf2q=oZsu)qsDLl)R5@*b_; zI6Bn+DPXzUoN0foCHANQGO;5riYSpoOiwk-rKYK#UZCb!_sYAG)`oVz3oVqI{8PXX z)miiH_DYHa?I=e=zzM$M@DAwCot;M^b&$cuYyOhUybaFNf*HXZnNE-gNOl*f13A$HN+y}mq{IpFnn zfI&}y_xemY|H4g}2!))Rh{>+Cc!qUpD~C79^cMff4;c(AX1Os)TE4EpipUTci-e@j zFk$_xzY0NZCY;4P_XtVb)b6O~^wqbjiSkacP}iybkGwbAm4s^BV5D_!dx}nb!HTO_ zSCON8vvZjKuKJY{x zj3!-t0!X_S&qS`tT@8?bdD{;(M|F*o=WYc575V&i5J2%3rQO7!p^{ust7}&NAmP)i zk)WStdYVI8dVC)*I)!gnt(r|e>UsaUsQ`8!l)f15{KlPPWDOjv*$5 ze@S|=-XX7&JX?oph!M#{?3AeYz80gKP)qi80)i|(_;EeBg3%ZZe6`}x^FZO&7M}^_ z6q@(S2NiGeUVFtBveOe6r&!vAem~NAvDIurl9+j-mYNMF4P|rjhBadK_dpUY&N>?SC0gJr`4gWOllBFmU1y%YLiStdZ>!9vwdXj5{BWOz$E7wgQPu72dx7zE z>74%=c?bXF4P;Ym~E7?Es!=GLmiqo>6&j62rUr%=hHSIjJ88$ z%dt}hhry051m?2;W92y+S`X@n_J<>R0fTrQ66OeQ?`E{%qJ<2jBS1k21GYJ^DSzE# z6|em!hNkmr%CrTY{)MEzd%FmIC3R9L%oU&05_!bsEO_(Ac===*gop} z-kjS~rODb7OAy-~3lE3E{49T(>zn6Vs_{y-w3w&wA5LX3&GZVc^*LTN+ARGxI{9ls z7E^s`d;93>Y!ig4z&g|SPEqLnSGm+YgSq!aQ9id3-Yd?IZ^RJsCWZx z{lh=&CR4%SqgkM+CeQMoq@a-1rz;R--)W(1WYx>|2`0xqGz!W7zJsVs;>lhTYl|_> zPkih=>@0{EeVK-0irtP#2F*cH5hAz9H%3ZEIL~+>Opnd)TdnpNXw;&t_;T)@M?vM)1>}}-w}qb;Dia~ zd@Y{j6lb6`a#TkYfxM9C5MBdU%Ua~wO#8AG%gZ%{{8XDZjdW5QMxF&X^0p*qf&LzC(=@wa zeOEwib;}_Wng*h+XgQOCC{nbr5#2ok*?`z|xsDM9i5hMn`1zUy-6Dh7FGQ>zKtYCD zqk8idj(57n4xYB{6HwJw^FE6wy$&@QJO>a~E-s6KGqyn<07rN;b>;r6=S8lXhQOK} z3Q`MTtv)NByXBwqu*E}^B=TIHS>OI=1|4gbXba9+q>ZPJ;AxoRRq^8^5xU#Re$Yo@ z(nasW;^I0Zs1Yet>UOHan;IbhtFCFL^F03o&GQLqwzfL#D9lwE z6@cEYA>UiH_HCWNT*8~bEZ} zO#k81x}4bxrPvHNB6*g;<_06`Z4@@*Y&Xp>~~ zZA0G%_ZLC0Cb<-LjpN20U57CzE63Z2gwwXGUg@GI+oFOByXmynit_G!=hFXxS_q|n zduX?L*bY+Y*qiyKE$s@KhB)KqDf8LW^q!v;&FIlbTDcWnAmsBL#;2+Yl4Ck^zLDX( z`KIBOs>OG6?(L$zjJ7@aYFw}JYP+m$X>Yls_slRBR>@ZX|MDTf2P|7mv|rCq ztr=b4K98n#=j`mxK6A`MlJJ^gSxNl)*Y4FFB7Ez@3y%oa>j*+Qes^=&XeiS1ZD(uP zYbpct>{{Z(=4iiQkO#ve%i8LU%@09>g9D}5B*c=>AN7PsQ~2Krju$dpfE=fdsY*f= zE!dd&7(UrQ!1*Lbx}j5Q=VP3HlrrhU9m&mNwsIxF@7HuQGx!{Fg}rs5g_Isa-2pWqsm=Xm?@PF#gqTP_TM1+i^X)xW8~AKR|&F zv7G>CXIq1#))5#>!>ueV4phvz-VB+=00Lww=j1&mw)H*El++?-2+OO!S0b|rcAD%d zuR>JrF*@y@k>gKG_~T=)v)KCGpht9|f%?ZU_BiA`k=KaRXk&fcsy9k4C2wmnzeU%r zu&jPE!U6TuU5UAMv1w;?;1mf(&8l&SR4Uqf8bzF!^BeFDhk&s+i20loSOgF6?F3be z@i9S4^owrC^i$V2$*(QG5_{Yzi0?WPr5fHID{C^QR09h~ld2bl(bS7HqPrit3}RZ_&QxtT^WLs3un@?0F4Fml`94L5#b#XtcLbE3Zefp>92B3iB`!w zN1cdRihca>K*fd%yDhxSMwmE3`N}E=Oj6r)r)yqy(zNT(ao-cd1nd|$__Ac$`6^Fr zt-A0p85HZrUXQhbtb~h6-pyIWLYl9>xFriVYz#&sDO>7QmGbGH`uA+UiJyY0|33QS zx>b$Qm2vgQUNUB0TCNo_uQQ32N7~V!i0c0ju=az&?hrFh!nhP8QN#FGfEAL|;TK3! z&bizwY!jQH)yD?%eMUw2T~5=mv+|~!JS>PlkLGzSeeH={kuPI5+dP+3?GWXGUMz8E zj&X6nv}QNfM(^UYK>i!OuWq11by_|5s>1s%orEAf4=4@M5I95_4d7oF!xGz2heF93 zdhiWjl)`nQ6P-4_Pu_!11e^18eh0w4@;&?TLIW>gMK_POvpqv~V^|U!Z^0ozEz*;m zDrgrQ_A3ZNGYGUUeNuPP{S_0Y)NbIa@QD^4k53*I5}CAA2NxW^iF=UY&o?@R9M0Dc z4T=-ck!F`;#Sw@K&^jItnKpPK@`bAF_`lHohO$B=6`H?TqlE;kO;s}&X0*f}QD3-0 zfsNmR5NEyuZ!2d+%6&>5Mf{5y&;AmJ_n42%1{CE&g>2K@#2=ec-vfd?(5sB@yUp%@ zut<^G_CPr5xjoc1cFdV>>rX48+Xh;GbAszF-IuUMCwIp#9B2J(kt>r-?u&Jwd%|WB zXE+$Iuh&}5e||`Bm--cHfm0qJO$QmO)LCIC7SsDa`|N=1QfKS~NvF`(r3f)}r+vqD zAPN4<;}85DuAbNi=U^4aUHDk*i2L+H$cS8#G*OXy-*Q{gU>Tnk`bl(2Cd45p>e!>_ zNUfe1P*wy6Jet=;c`xH(qx`7Q#;wb_kg~6wzn*AE-fds&!)_1}|J{15P@=NVq*-If)Vy#H7hr8r=?#Tx>VFr^P|UBtQn&oRm`H^jFY zliOW$I1wYrH;lyyhhF_u7J~v0=hX+5(C61%R3vnRUmQcUpKf%19FDyaUlMx#wH!B> z0`CZQu!I}&LA2=$&5~}fuG=undw5ZW0k290pB#l!M7B(bx+phj4JS|xArd#hLp_v~ zyv@%S)sQ(9uJ!0s9kY0_dZKjCh&(HPDeD^fHVz7YO*wcg0c0P;0w0KPBsd);jFCeU zT20m??vJ_^MLdElBT$;7hAdyjJjf{2&Ki028_{tomSPqU5&n4jx>ISinMLXa+0EdN zK>b9lV?~s6Bm4*HWF*AZcgwi_$X#lcLA#I*OU}7(B-3_S9%<4OTRVemu9z^PeI20D zuhO;^juf1ph>D7G4N|__J=I%K!~=@8#WVOm9?08nax9E*%;fEF>GVZSkxNgtASNV5 zn^8QI5KuqSkG391ZaoeH*7HRK0Ru~$ex0GLi+(m(yapTK23H$R0TA_g3P9>}CLLR0 zd@udUgyHkF^G?7*!%hR2TWcy`OFz(6YOu(ojdRp);lxYe!7hL9e59H<%ba!3>KtK} z|8T$8tcc_E(rv3z@kVez_0IYrapR`5%GWFKA^fgre{vu9?ZjS&R|~Bo^4qEmi{_!B z$RUX$Ymz=VE7My}B)+44?&NByM`?i9;>NH!bkw1-_HM3d^=K%d?8Iz2qib}c#bu83 z&sqn*AAD(UTS2=RF=ovHjg5`91#Qk~Jq+3Tof#1LBM^*ksFHbm>8bMiq7_h_UlUAU6>zz* zF)oUmLIxPF%LMXW{N)$gX%PI?fNI)oev4)4Nf;xlzyjX{ZJ;H1e98TwED^8ks);>K z9b-Xk907|~Jls|`qPOL37r4k>lw!;Ti`iF!EU+nyWESI~v5CBWEo1Ni%^+!obi&zf zotE~4#EV}Z@K%9Y5ThDWfBs+gpd&;|Mi>9l*q*N14ckZo1H*|lMJ1YsMkA0>bb(r` zJr?Ek0gC~tNM4A;GZ4ktS>Syo8WefQL_#9Esob-+n=|rmoxi&=3?A#FThFI991#zC z`j!p!ewwJN2kL%MznS=uUlvEvj4yxBqWgoN7A<0>L>G6u!oCxoFJ(8p~dmIU0~k zjaYw`!Io(9P1ol$r2KNKbnRw&g-y2&ZA(mjPOr;-i$Xl1wZe&wG>0aTkVUbaDS5|g z!AE0j0qxp6l&2G2tg+BS?{XQBqrMHY(D)GSIdmPXH5S=uCAy}U*wHUL7>$$Jz}-@06waWdAsWZF^j&CUIyh&Wh|sUHx?p4Pxo z9MvymqN{%hNx?B z(+96=Xt(i+d34E<|1()f;Hk^o?mlZOd4A=pI+1?%x!FEq=T6T58JoiE!~zri#o5}0PC?$S&u`PINCR1K*J-E@Jc^j@Jj7dK=gbMsYM2c-RARocgkBVaO=irS4C=O;A^%M|fz5 z_FehQ9c4D_6bG)co{a4OcGU!)nIMk@5Zqb=W8tb#J5$jS(ktA`hvwnl(+qe{h8N6c zaBTH^whk-G6F#J*H=mtXx43)&OQ8JWG)nUU+ z^3TuK5y#{*vAPSCPeR6*v0=FX`t^1mxEO~XWIOEA-_>MD%Kbgsq#Z8ONK>#-Al=?t zy$-xX_QR{=l!FGAO>RS#?mx@ct_7{JEyla_j!8G2Q@Qz%b`cVvK}w zUN;eBAdEuaE2MmJ@)v1ows|9S)Y2nA2W0;v=YIt1kpdo_Bazj0D$4)<9A*wQ^IoGU z;}Ry+XiCt#bPFx|YXP}V_jI2px`CT_mFKgdoCa_mNAfalYHRWLJE|jvcQW`k6fXO7 zzThj!G0_DhQ3{-rZNrw#w7B7gf2f&&!L@^Z!5ee-W^YM13}_tmBEbdrCX*Z>8c#D(tk zESpP)6hn%GcceIttg6br|C;}_w#Nz0iIjXWN^=5h%tT1#QPwKfO!8W@Ud3~J>>xRXCCgD4No?hB_Tl2e_lsv0}cV;>wm$FXn z<+8sF;QzdMJpd~+%Q|3Bk<9-yQu;Z7P8{n2(z#Ur5z~`gza6`I>S|nNuvhdMBS@@8 zVW8V0a?pq_=JOg>!SE)@&R}7`u@El1?bf`i0xx+A&k_W=%>Sh%e^*j~I(Y=J4xAAe zfAGIS0U*&{L$QWdE@RR4;itJNXi3zHH&aoeXTlc@-Wa$li!HNkt0d+^jW9G6JG*U> z;P(}X=LNAmXOoBdn8q;cMDg!M{@pqNJxDL?!$R)6)&4!<*gh`I!(T{@z%HjG+;sNp zeF;Jz{+HqinA(zPgVzKPe7rr+?k6H7`Zt56x@(VS00vc;8BGX}qyoomeFqiRLaH;y_xg z=-%}8 z&vE&R+2FJZviW%SYz`esgfTX9PeUg6CDmrs=k30!`Dbopz`2N@+0|2pRZ-n-)J0pG zq@N=D>H8kPSBDwJgXamM;@P#=Wm9>TA@hNJtta#V98b)yA4KjT29nMEMX%n0AFolz zG;l*g6p-7qujG2A=n>eL*!(N0z4_+?7XIZ@9^baF5qbDOg?yppJiUN%E-JNhDUt7O zEKWyUXSP7YXkVDZZS4m=&-hi`IOpxl*!SyXgN>oM6R5{=^Ec1>Nvm#Fb$4pE7P9$` zdujiagAhHW-#AvwZ5-|2Y*ZM+jS1k{ZEOT6g=>`>n~0-Cx=B-|lCk4Kj-83m36+uQ z#*_C}zgwH4VIp`gZzpTtYK*%DHS7dk6h-Hz%|uO(sKPS2)e7{sE<@3huiB9&zkcDg zbJLPVv1{LgaJxFC8t43xO1)haSS(#>h%0!yHB~W!)%XfTM8;g_km}mndO;lIC|IAr|&uaoC$e^QYr*h_RKTwK`G$%8{S#fB!5{gg@6M60Ct8Rj~Hdot+dv8 z&a;-Bn}+JF(DP9|>%91MYJS@pUs6_M?eV<95dFsomuz=CZeqY`@x~IQ#R?SzE7p)i zi_X=Si1HDNz3{Ij7B#1ssz>~9WPwT^F}zj7M36Ot!aDcDG8+2}7uj~2W75VXrIXG6 z^U4NHj6grqgXiLe@fhh`Iuwiov#2YU#lLfs5$$~>5aU7|X%TyS9|{TzA~ontOH)}7 z9s0Lz$qsN5Y4uA)S1CwkY=HjdYK4NF72EZ0ZCJ(=uNLyJ3aEAP45{pS*!rqG%JzKH zL!InqH#Mu{8#T0QXtr1zrBXkZR5-I5ZLSKyL61d+w~>yj_(&0 zjJ3xT=oKSMjB9pBf}yJBugG@`m~mnG=2icH?bAHSo(7D%Zj2~qz_?VuPwLXr(v0vE z&+QIBJ%=!D&ZjoO;O=S!5Z5w7@WxS5KY1$c2xo0X1nnR-Iy|Xurl7O`98XzQDUqB?cfnaS?U(JQ(cfp8dLJ4!Fy}j(zr#=J)sIQhe zl+`W*v=`Y^zyx_oyYG>yl72;Hro z!Fp&mgu#dgTjU5zjabX@)2A1qOB@gD^zgkOn~NJ*p*n^;lUM6O{m&QusRiv1a2fQ^ z_(Er9LKGAnk5a9+yn@N2_S>x2@3(8OKfSiz01*2{`T<&}gOQ7Tfm zij&S^#?es)!D5UDAZ-GjZF{1$8A%RZV;2PmjyV4-v;F5VGL)Ka9U~jJmpsi{~4Q~yNFYK-3O&m}YJKLO# z`*n`ES6Kab+1stiR>2ZGMTr)>R{EHx)3zysF6l5O_rxF+=v0a9AFrC4t&}*u{JvR#5Ary z7^se0V z`Ksza=)kW};p#0QuR6(>A%p|)`?xf>y-f`pzD;gjP#+yEbgY5x8aaN}ZvPqN0SU`D z*!B)kKOE~4rdLU3wpZgV0}!9#=t1R7g2ECbMFjXdBBq4(8JSe5L28u%ntoKSf>e|w zD0guEFxjxFG=0Jew(Ni&n%2NM2g_V(+m%r;l4E)Y@;M{h1E_-B-4k zlgJ2c8>ogqflhT3Oclhi>Fb$?%(P5dH$RhW%QfQR-7a4Q(2{;0XOhWq|;uqTL92!x+-EpmuSM$;W*`7>&{eMdo?d8NW z@OekJe8UsQ@kfe8oK~n!8v9y1p2Pl-KxAgQYV{7)@p*r>BkwY!t!J_3b%p@-bRe=tk|V2DSI#ZCs<@R1Kj5jtY;0t`pKZ7j zOm=?eLhx=iG{3IsHq+PV*Ev)&3Jk_tbjcqJX<(0UN;8GWl1du}HNs+iJ!$9$3JHOfDvD7(OH&~1xtGd&InB;Qnk#nbC^+_*9 zauHOwea>XKsil1T4xryWf$MFj<+Mx&k&1f zBem{YFzmE86J@o$u zY<^PhaBL?}X76Epn$3jkLISr9t*1#?xfF=kNeD8{L-VJ`TNn3Wn%Tec_1YmfmQr#y{$*{_mvnF*t`MMwtlftZ2wcd81p~ zyx(oRfruq%qH9Bq#Z!n2J_!P(Cv~2x7Xk?^`fj@3Xz;~T#G){+S(97} zrmi=YRtE}!`31&O$_Hbx-$sw;iKO4P5EYn+MBQY$3BJ~mN`F%NTKTaE>iNlo=Np9y zaq@2vg_u!h2NmUAUJRnKk!uDS3dT)IMW2xk#lBzSO~kZ_NPJG#Pdmy@7w+&zG|vz5 z)HFPMrHmnfIn!3|mhc~trG6mKmZKjx3R0S0|C_EwqJ?aN`*$k@bqdlRr>Np z#N{oy=^dPt>y?tzeSIQYP+m42O2kt{(1y=Cbm5?b zv0|5+e$d@aXG#mE$sT%_j9zb+x#o@^SDT`6yKsE;u*zo@00oqz^UxXB6`9MlFO1X;P1($C-07{f>-%v)~Zh00@}A&NE?+ zAx+PFX^*5j6-z`Xuv%_Sz7qWmiV`CMkn}`|5*50n$}np3?+YGWWqS+SauT?O+X*`r98fT<_}AF`kP=J1`5&# zW&+YO$*6krTgNc{z}bmrR9T=X!HXCwH*7aG1`5mM7MYh%_s=EIBNW-m1rMjrpRi$z6Q}%}7%iCrqaaOwJ1I-6EvMv*bTWHg>6V1nCA&H1Av26S9 zZ)PPv@BR`QGa#bSmFG{AZIP^ts|-z5jkUv%D8h@&eoqCPs;NqyCy_v?|3tR{7KT*$ zRh%-LeP5OO%wVZTr%(1ykzgHlla_X9OCJXyY9VY$cy{3hJVTei%l*%5BoQ9%m+`rJ zd=KA-_)pE0tC;<5qoPBYO?ECQuRWS`t z11tfF3IPgpB=Jm_F~TQG-u7L&>+0m*6GAep44Fg!dPk#w^1u-XLb!*kem7E7&1D|C zkyrmR_)=6n-hCv;7VU%dz{#8S&5)isxtz?|;HQW3g7wCS+_Z)Kd1s5=gBP*@0UE>e zY{EREQ3W+-q9!vsyFpFUc+uc3z&lcvAjeDhh+~QN!tDc`U{>E@p+D^Jm9e^ht|0k$ zAsO(sEPT+etrN*BTyC}+?36W33`LgVmSVMm+y~J@h))#~2MgP~=_7SyjAlaPYqt(3 z;&!6=MC!&%f*pNRj>GXYar^ZC+zF5{Ak*EA{krz*dPJoE8LPg^Ax|xfHW=AGQB%AMZ3JUlL0FwWLK`Z0$i2xKP_SFc1 z{_8(*yb8M{q~4m%67+on#z)KVM9A72-O1mO5bmKP`MU@dmr6Z(zy2`8x)~$C0njRW zoGdlie#r;*ut{<1gFdivr$2DGO~oxivGBL+`E2~maF6Bw0GO!`YP|wNA+WXOkeK$nx+VY zef=D5s$7upkmbTO#7>);WC{0>vB=0P1Ti#HkC7Za{pRa)48w()&|1y)@BNINYSe^o z@99xb2a{6OvkPhzUrMD>8iyrP$iqXz<$tew6BB*gR5u91UC3UFk3X_ggW5X}lsT9= zF8p}1P_BTBy>5~Ah@F@Z-F(XmG)h;ue7RR!NiTB?;)Sky$V#}FE8bQvPi@zNL1uHZ z5<))GE@*a(UC4759`0S0os@g~>#XQkwPiJ*+@trz9%g~1q z5kky2{v(CW(jTaZPDh@KXP4hlI<=a{+jVEXj9PlTjsH`dJl)|WlHW=`P7)__IN5~f zGol5~^7{aYdHs1@7nF}kYLW-A6#=$8=ZiGcq)kI>l`Bv;LpT7jSvQrw4KP4G@bz+d%&ZA4^u^5^Gq599V=WKCJ{n$j{o5ud7$&Zx`t=RXW9PbJwHmQB z=e_r!4Lk|=MSCk~D_7kgVc74aY5^FG_iil1{|q*XBR!_{G(FH`vp6mcUr z)oc4Y8!6>D?fpWY3z8(z_7(SGsPO6(Bsz?!=D?X&rm{3Isw7A$h(>Hjs=# z7wMO3JzPX_qQg7WyReygQDmS_NUAs;%Sa|inYy$r{^W&KSU0gB7$~2z;6U%pIDh%R!4U4V=)0RKRK3Pjc83p%s@K3w1gWNGYMeAh zHZtjSL)9Xp-D@ZOyGE=4nZdHLctJiwaMt)O{B{&%&(ZRR&H!L)pMi-V@r}y`%Xk1o ztANSmQl}Cda-kF3;A6jwukk3BH%G>$8B0b%L}U3#0t5de*JObVv`)aI{MF6?8%r5P9z(K^y< z(wH&)dh?3@`!#8-SdjEbdZ&UPw|5VVP~zBDk2VhhWwn2f!+t_!{$o3F(CCNwk{S-a z1(e+Z$6~iC-cJ|*D_v|aC(6)_jhaCE95zsX2kuhq2ODfO@7m_frbZ@N36Po6Z+#|D zCpA}}5pgjNHmDNrxiD4X)i?ZW*U`a;mMe&Xr*5J#+XvtQB|)ZqQ!1*eq}ty*F*d#i zuTWUJu48X(C4bCYDS!j9@r}Wu=8_Zfes6ILUL%0;9qY~!AflX}o(9M(rTanB9J+jB z8&4R>`SiEX-rFkJLCMuEWnz7@fJEd~p(6u_rOq7`Q8x;_l0}3J^I>FTpZ3*YjUy)~ zIb@8QI8w4^W3<~D~tC0Ld2sq4; z7*MbD&ppT{C{KimD>b>7ehi2e;BsqsW~vnw!-`h(X|iwA#pE}-7@gONloQc>))2~7 zo)OU>W+^z364wF>g8WZaqs`(m*d0X4(9k~eXyaLBW+FHC4E^Dlgx+~Bw{U!FDlxkxU;Jv5--T>#b)?;m-t1iTof*=TGKmFl6@99zcBiItj%iyGPOJKxcOYRzg zeHh>dz#aytm9=T(wI3h{_W{%|Cf;43@pXe*`x?U*-uDUR-Z!A#U9k23@K|Ljj)qke z;DX0E{e*un;(jxkuF6S>=KE;}n7Y{j_|S_2CD$6SfeBtU6eIWD3ERtHpiS(<9GBBZ zr0}rl`NJ*#n9T0+l(X`{^>(`Db((e0tJ9jY`(%JLN>lTLT&2En)!p}A?nr=Rx{OL~ zSY73KzqCmT3#+H!yl#mK|9kr;*^5wtESv3Ahd$t@=(k4TB29@<>)4DKUx8H-2OqgG zRm)eQsf%iAhH*G-8=74K?7rCNboD%34<|(>78cwWE!?aTV<4g>00K~I^#vA!GhKFm z7x0E|czC!LIlAAcGKmhD`-&@&&l8t=TB3`dW-*Qu_R;0LE&!JQ4rUVg|A49XEf)F) z7bSUGy$I2sBixMXm(s{sEVYNloNY0;B^A&q-;3J_i`&zAFxnIwjjBx$jat1-xMveI zN3S$y8M6O#0E`u0_4ahoW@K)=FS|b)0D+IDynOGX-n9Isz_c*PGMsx2+PsTWi44=u z&aQ7#nv>LYrnJVqJeu2iT5)22#>i_J4&e9`d75J7ui0W0$^l?K#Ek+BA^LB7?&PI7 z6{XZGyTd9F_rHj1y0wr*FWqu#)kpjzPxk{swp}`OPL*ZQHx}K=X{$XKt$VN-^trDj zt5DY(sTm|`5f1N}L>v5WpjNGRccYait<6ULq3;4qvn|)%OJSo%k=1RSZX+6L_;^i{ zUfh(13j&Qra&5U$uycTS}r9tYSl7;DR2(}Lr{4{ zy|`39uJNur{P>k)d%)aBP|&?Amc^YyL0Q>kvkjR}^UdDJN~@ErMcXnvhu)HAKfh<7 z&9x4liv$L$)jJ2)*SaFD-zef3Ld+ z;9J+tIRf<7jP7@iZhbr8%+X|r5MadB`S{sY;*$=N?nD$$BAR=b>Q4y{ zSnE7;nb7{wcgs3nim>Qy=Q;HKtlKH(oxBFGLWOclOO*gr;=v7o(wO07w?`6t6Tte2 z`FI^qZ~Cz8EmMvD1XK6!`+9h?{!Y`%J>I&Hv&TXdX{{YOtzay%R`a zFvmX1E2N?>!9y85T5OQla$I`~IvYuPBfk9Y=8O7$xC`_t`fLclYnXgK$ilFj-A*ty6@!x<8u3wW{E3h94JsW*w_l+glk+=|_INp0OY z0ogw_v+QPuZ=hZ2m*tCq1dEFo%5mCZ}UwqQFrAa z8Rp|9NX*lI;H z+Xc~$l&i|eC-Y@wZh=(USAFPg1Tikl+7YE9JV)9s8d|drnvH9Y;Va5H4=QCO4}X?R zX7Pbs?Mm2x@V}{=5WVNAl)$0m(AI?9)ELh$kCs+gT|d5-Dyg(c9fzhw-=V3psJw7I z8}IuaX>`;LW(^dyj|$<-UEY5ke_~=m20Q~%neZokW1uSad17R4o|@uzscN$X{*t`D zCGCDH4eZKA{N6C?wv5BM0-*K+r_6M*u+&HlxB?&7d!-}R!?`;IvaIqn z%5^fC-Ic>cM=vr5Zxv%@fH-okBvVdV6IjyV4 zFa5iD>7`y{7Pe(6%DqLSJA9xQorkvNy93nRCYuic za!p-hSIGyz-023a#eq_BT#sePN|S6CJ^NY^y9hs;2kLe0>=c`mMflcjSTyz*TL zWZrrbiXkp385)R9Xw?moCldlNFIqqe!?Jcjb~$aQ8sF+%?7gWpUw8|WaQ-UQX3muG zwxa+9z)0OLByY?ar^ou^Ig0?3J9yMES&~!x3Hn<}m^KTwWDVC2ZJ+=qhUILiKK-rX z=;lnN%P)7H^e7DMTCq`>tbfu?)jj%hl4SUcsWH$pi&O!5sCj8~}8rA5DJwYS|&3 z!|KQVWAvk@N(koA%*c{tN$)g#(J2XQX4!K17L-S)UOP1J#U`x)BMtjrTghLV#fu1s zeUVdJCU3m7ltWgY$x*=| z2s&qz|C&+i5s9jOT*PBEBdn)o`I6#kj%X;a6eUWvP_ zZjf}o{^r%N;u)}|#{!wsM7OQ&)(`_Pfd(dFe)H)7^>oSE5?M^w6D}V);rvr|%a&W$@`f2srS~yNi|8zeF71%Af!5pdfL`aT1$osVjq7%m2aVu;!yCuvSVk- z2Oy));0~_64l)FhOI4bu0~r|@eQA6>Bhczwes8X1GID(|>LpH=Kmb&7QY~D!2MSEB z>Gu;VaH;@{1B3oj=iT^5qRz}vvg9=UxMs!I#FjC>7X&K9`yQ45 z(!Xq!*Ve`b!IOd1vJOMYw;bCeaeQK0CgxGbb!G7yni7@uo71g|h^rR-G9S6~-?Wl= zx$h#tY|i1T8^n*m?+?1We^e1np5OheUFo$BRPzTUO!Pm>zJK@GK#CO$J=HL|jQGX> z_y)i;<`H%rZGOQgI2XG}IsG}qhZ-D6PyPzs6#88Eqt+K6itLO|MEZ`CfpK0P2kF_b zTUHW(^+O3ihlE`qIP#7-0cPc6;rFu0&b{|Hfy{Hd<_zW~TT3OQ(bulR!VgXWz!GJ= z$#*l*Q9-nxl%O@rdW%+<^$#Fsh{U$2mo07F`*a%S(9GWz^+Q&QZI=XGUmOKYboOa* zqNd>zu}Rl&yS<}VtrQUSM7^Hv0*yVSj^u?j=R?`N+ zSWWzf#y8Pm8y+by#rhdK1D3PZ{t(MH6sOPKM+Ft^se+o-SKo@_RoNSgo%eMd?(L7g zB5n&+-ga0*3ba{XiU5XrZ)YMiH)UXGMoMX}r56hkCLBD%vMzBAfNhvTiLfXGCrq@2 zAwGSl0I<9dfIYZ?LrVzdD{}th;rJzpg-?ZT%*WY)5lfC?3yv=BP>Ep3o>-utqPP|hR=Nrq#b_7K-xsm&wKvr$NK7EXB>h^C%bgmIwG z<3dTmGOW=A->k9l0ySE$D@l~xtfPGT)1wJ+c^T?g+-m{@j)5w-{D0A=>!^Sz1es5r znK)6&a|yQuI&n*o-SV7~@uqHXBbL9^Rf7lC*|j3!ZW!lYO@l~N##Z#}Ex&+mox9RI zTkOCJcq%`UUu0O!vvJip7BC#S71-2ce*@d z3^;7q`$oW{yZvqUcT6|!sAMue#Ig2tg}rgm)wZakU-yX_5+jhsWbhyIyt&>-r!X7J ze^q`*an96P0m_0(t@OVUu7{&Z`zt07V}WE5=gWt+-a>Y_N@b-ON&i?J$c~NGGtlW9 zJmiZ;B;Ye11|UY%H;D18@DIWD3c?Z*zSL-Ou3=T=t9ArZq5pQhjAtT3qVx z0OX-}y!uX`2rIqYtu_bH8BJ$st_PG`KV&YgjRcf$s2~yU0C)}(-{CMu4i}P(wM@UX znw2I17&AW-^Iwc)Sbn@UBqMs{x0tERY0h`gyT2))5OAZq;pbByBZK82eBr}W(du68 z3V@*1R5srjO%GS8rIKAp@e5X<_z~gP>vjshNO_G+Gys4FCqme-=Z2DP_+Zw$LKFdD z0?%xrd`&4em^vW!6gS*n7c^mqCGgt9T+I8)?4fVv2fp>TRyNka9b?)m4y?_zup0E4 zwXST`#e=@jA1ush_5SbZql~1H%gD?1CMJRZ>-Zh!A3^VvvU%NfD)Y9s>tyg> zmAFKYK)M=8soB8V9T$}-e-OD{A}hMV2mDbPJt1GcphI+ZD;51sqvod&4|}=~#`;q1FHyND z@}98Kf4Zr?rqs{vL$8YKn|@9gafR=Yo5E^XDsVP0T|k6LVkgvCrzQOA#asWsl*ms2 zVk88mo|grNfmpy2fP0FA!E@y4Dv%zN**{juG#K)6gRMZ!6M)^tb2*T8x;yE8s=ILF z)Zz7XD-G5f*T>Ug*~vd}n=4Z)hCIc}>k)pWg7HQP4N3%-MHa8y{%m_R9tPi4=BRO> zt^oiX9tNKQIfk;eVQL@^YVGZ33~lCj!{YQU-8hT@2Z_-Fk6EDAE(&4mw@#|TGD|0z zn}a}R)Fe*J(m0d=FF1iH6Q=o#x;9R|uY|^el_~<4TT4lJL3jJQuXuVa*+AoBE5( zNS^O`U(%|X+zvy>HJaU=@16p|s;U&{1+#jq)8Na&+=`0v6#5E8fk;@VaA*v9OW9?qpH#s7pJ+#`Q@|==hLxxv-8}cZEEa&yKCn@WT{jXQ=$+yfizg;HtR{U zg?B7Qgi^lhdD<{j?Aln1cB3kF!dfO6DQuBe#f<-G3T_u6fjG&q$6cDsT@ z4S*&n15i_Hec!YnPK7`W?rYDrBL?Z)_yB4KA`I<2vWAl$Y=w45UteT@5mcmb6m1JR zNW9JpeoUuH$u?QtyzSF~Q950$uG39wiN5auxrlJYkD|cNp zNUx4ZoGBZC-e&NmH=SVR{>XvW;4aZPEeGtUZ`?7Dkhun+oT@r4EG*NVZ4Ji*u;OIs zHFU3$U?-6(NKfs(w@-H)bossqoj+W)X=^!cqJy89zsVc)oWb5#?K{)D2v^s#B5VN= zdL%-EA}#@!n|3t$iY&%Q2W^x002cDl%lCQcg&v}58_&}QD{;*h=g@|5y%jw-1e51} zX`_vtovjOu0n{gRC3#;JVO7krQ;|<{;ONB978wKHn`0NtW1)n(0pK-zjam`nE0=GJ zu%Q!S2ajq#RS35Sm+#YgTCeypJ|BP~S_GIIID3pPHGR|n(b(`fQ^O~vP^+=pkav2c z*SviD@*<7BxNVdQ-hFp|i3|v8#f<4lMGxgAMYPbaLk>R7Q3hVxi`LYMLLUJxKtM?M*K0ulb2~J4{5*pI86@K1dU91e`Ul zfHgp;1|)%&`3a0vD*)OVGlH{3n)}VG>mA`TxpzYtkJ!>74HE7ExaG@wHTR1mZ3bPk zMWQvm1~-?gl6aBsO#uA(t+F(W3Liy)0TDa;JZmKJB4*o3XjwAPSz*zG7J&C2u69&c z!j<3az4tY+d@~<^k%KT_fHj=!CV!Zp^W#adwhD_Kiz86nn1n8>r?+}C@VQG;`E8HM zyFG|^aslc~YzZ)gUx6e$ol2}lluR-SAmIJjvS{6VX!CHrt-kX;{r(`Y7OA%5vV^L~ z705<6l1xh@x$k$Sw_@Nt_mx{u>6Pf9<5ZBr0RmZ6agu6ovf-iF?dhl?p+|sc`QfIpjl7!O4>Eh28*YqKW*m`Q8OJX&#aVbia^0s!lznqK(20IVRta!24I2Tu^^bi-uJq+1@+zW}Y6T3ai46J<<-8!qci6FKdBgFnpgb`?ZMOZX6|6(+d$+Ag zjIS5157~RxmDwLsLIz)Ct9`Lj0)0rfp zSMiFTLbK#o$7=LHY77(2N@N^ziSTwzO(x`O_e7Q8HJ=?E194|~-lP+HP;DaSXsoX_ zFTNg63=|SYiVaH-eWiIb@!l3f6y@OnzHLQMoYh`&QT8snZzt6+m z!Du$ms>A2ocp$?%m5OiQII9J4QW+_u#m~rB4<}2qcl5=-)k<41z-|h?AS3e&1CIh6 zjC6P?JoN=;e#mEusX#E{_wIFL2^T(X>5V|Q@KKZnzKr(^tC_Ze+}&9ywl_6M6fpZb z+F3X_4w&mIJ=Q@H`}yRjUOX>)QTD=&M<|y@_$p0X$>gS+2~23Y>BjK>Ik1LV3O&~Q zYAksnbd=G>5r@X!Xn$I z-4UUQU8&{hJe%VZHbwBBgOuVI&MW1WipfH3v#;MlW@{0VZ;dyJ)DtXg$n5H$X^S_0 ze7E-c;B?^Ghv%{l0zA-2FCha{VS<}4siBAn{`q>X1N+^Im_qWqfa7Q?V_7q{y7IKy`NW>D< zQ7WPXqsTWqCSC+Z;IO3<8HkHl(HoIS;=LPGOQLXjmSxuQDJqv?h)|GUEO_xs9-*xSwxYzXpC;n#P7VMxq`GG&peCd9ymUZIIZ3+^v-!cU)YC z;Ld@RaNRgd&w4OBzIR>qJu@-NkcGw>Pxh^9ozvayP_4lGn6eoDA{P8(N)JXca*(ec ze11x=KCG{_g@0h>>l`TyZySnzUp?vta&CtQyd$TJ^uJc%&vigBfV#`&DVQXcURKsm z$YRL?19@;&;sxnh6sMS;C27|xVP^X}VwObTBHpOLFyhBbLO-g`Gf2eG?yvJr z)BmkG1W@-<9$viKfj1COCCR#VDoL`W71sjK-$^A}SQg`2*6gMjQt4gRNm9E}T!P^Q zdZz z1pR0JTp4EC7Gc=Uk@u6iPIy8W2=bQKF3XkxBjDU-d>b79oMlBDkS)`>`|ab$e9Xgz9}$cPZC^9x}ukS!h?-3G^hvd)7Y4) zlul7aJm5DQ;Mky;J#Gn)${a}X11HE$l3Cw@<5by&VO*D84gkb!GA00jU86W37COTU zx|ew`%@+1Rj`GlodX%_Qa1D{oO|ii0EK)B~=IzgO)%y`fx6m0hFkscCiv#lMtw^XVY7k%=fCh5XGQI|iYxE5Nk4sZmLH;e3apl zBYgbzjC44Wg9GE$`P83}@yEhFs(m-GJL3fA59z62&Yoc_sj;C~2gFBd$%pC2ntHXFuTZ&dl@zsf*FpRTQTj&nmfDVJ*XuJ-rv3Ppy`Roy zkv2<7{&2%%f;#WkGwe1ev46MLX0Se8aWZ}ZF)AtJM9)5~>^kDT<*>{6Wr+9u1bE@E z@){eR18vix?tqd0<$-5oWj|bmAQs7eo5xf3r`DZ7BSRZ#~w4-y8)1Jcuj>N zCG~ONO~mfun^^mm38zcD$!F@RmQ{!iAvNS^an$ro-sP&r#pOL=)#ii7X6l`0>QwJd zK~J09M)1wS4CW03*@g=fZ>tlk*9(PbW2R&ft}Nmxc+>}kr?%%y7|(eh^#}?IjeQ#J ze>(L`x!U2NPX!1pp5Z2HqLKSyGfL_5k&{0&MCM+rF;MN-X!+a1w!#V!b+ib4BY?vv zTYGU)@afYNFEV#TTG5tGdes9Ix$E*cL`I05rA0o}!i)rG@4=b{URlP(~vA?K-T6;)7?9*szy&rdE zZIsZD>wiJJlvEQWkP|C7Ks$q4p`pG!&*-GSJY{m#%DnP6CK>$%Ma^0`IkW;k8GMdV zn;M4FX7KIbj(0`c-dFr- zguev#w~J@bA-Pu5`~v{I|2oPG;$p~7BQT>yg+k}sp3}>#&EVo!=}ef;ocN(%860+m zB6yy^6mFLsT9-L+bwoVVyRH}hF+_l6%$8W5gG+n)El5zQy;g5WTvC_&Q&j9*5+x%m zp^9~mt)ggfc{O@0;3+eHzydbOJu@HuUz;Q#;c;S;z*&x=3>q1nP@r;&8~Nh$8-;#! z@_)QA5ujZ+AP~B^%x6uoz1+tXzyq~vJ!u+kopIo5zP*jEV_E7O5g|w4zJBYF${p%q zJ1N#?IkZsg0Pw~j`JkCgv&r+fWmP?nGd7O+gImBXk0G)DTNT3i8WYGf1Y%5R%`$Ju z*a3=18@uPrxTTl9uM|HN_>DZDy@a&qi4$5sm<#ONbaM3`(d8}JVJ#2i%R&8lv%l{8 ze;1x^#4?InkZYBlSZIcE1Hxv5Z%tASW!1}dYih_o(OF$izf%jyf_d|`rC9U67*${` zq-Q;@XMgKbNxjwZ(`FRxp6ZY)Lv&4}LJgwlY9h}InV?j$KXqXVuDj{u6!~wZhei?0 zP6BydKF3OwFfJEk$fW_{M{@PBVPXk7e6mb-#gTuxFK>+=`-E@p-lg~ zsegviPof}hdFDn{=P|I>A$BtXhKjVt{#16!AuG-iT_v%k6lET}5d=TA#wyP*^bvqUJJrz8ZHO zCz_?p83nM1b7aICm{54V7jLxxFcc4H=VwHy=)cuOl#IoG@`*0M)NS5Am6pnJ>TLeo zHvC`9@$BI9xKH&J7<$WWUc=n;U@mMjtjA%5_y%lmP&iUJAqbni6z=C`wEH3lR*f;I zu&6jgoXgy#xu?n30mLSU*n!iea4~Meg7Vlj2@m`TEfh`94 z_~y&_pCR7gg%pFb8owduS!EEp{P%7D?;m-*ZYLCNCpP&Cce$l8^U_>RUox_Ia~*|_ z!S9ArKfE?l35l|5gYvr;MY;Byl=}LXlHtMuc_n3$*>hBV+VRLb5+a9}&jlC8=k+8L zY$Ef~zn!}-+qWEQ+2^S~>Woz%C}P&BPq_j~<~L60H(TT1JiRk{dt~55KvKh-FBZ=U z>@9>HN5U{qjo8fO3OmB^owH-d9}b9Rce*K#xO`P@5<^G{ZKb4U=664lsXDnVqrH3= zGG!6EkZk6n9xQw?)TKd1p=TT*S@w8aV}d+-#u)G||36;`ET(5FG*JLv7a^nz(sRtv zo)Azxeux6iOPO39Hq6_PZ*GS+Ps@zJB~AX&mo?^gIAHQYzz0+?UrNjs?;|t@2yz*6(Ndk@15a=y|1Cl2P~(phf=B(OifK&GI|D9b-Fu`ONxs# zSSMaj3nH%cFg=MNnL0@F)}%1>GPtf}t=V?e1?s{1yGp?JpZqks`hN)n&2Q2C64{|Lk(?s;`%y)4~wXC*24!QR2P?l=z>1`el2&`R>fT5>kc38oGRb_Zsqi3dW!WNuXvbdHc3bYi0m{lxV=5(v*6I z{(&Y$2mkasH9PQ($f|ET^5B8jdR0YLjTEV+I2W$`Lb9J1hh4;y<>f#y-FVi*X&T^h zC=@U72E`Lk<@^C(z#ebJoF3E5U0dRX5Vy%E*z?3m|6D_Vu20_I3&B_YT{j}&@_|tC zXIjK&h=Ppd40e6?D2?tBi#bX(>*`gzh9jMlocqeeSnVub+lcYz_M{lcQ~W3L zhZN=LmqwM(`NGCFa;)i)e($omY|+b6DY{g;-_d99;jX0z0wa8+szSO zx+xY9=dc968~5-~7Ll=j^&u?i?7;l1}%Tuso+bQ_0dDfxo8EWuu_x%H>a9jzQi z&}tM7R&WSGtHBTPVobNFO=uyHLYi8zgA&Kx@^0(*amPpI02X`(*XPrBA<6hU_mzr z{0erjjt%6a@vj&y$N`W$*yqxf0HH6^ku*g`9blEg+f`gkrMs@o;lb_r~QnvAvN7 z2KgtRc~|Z$amHj5AGk|~TN1!7@F%EokJ(&QkE|^|ow^XPq}l;AiXv z@46yUpu@t~gD<%uJheH}aPqd&D4?q-(?YEz_)V^mITHv~Ejlzk1xv91qg08_OYje# zBJHv`?6OY0CxI)P5usN!@Sipc)g$zD#bxxF5Jqx|w=t{MrUe~0^?O9H)ZNNt3oI1@ zerGS`Cql~e&5FNHT^UiMqUnJD-zV&kdL-uGPDO*K>e#r~j=mi)&j!}EZRi5v0bA`@ zrdjM9Z>j0Bn&X6+IQ3k9G}-__Z8m`&#jUHokcuFM3ENh{2N!prKGdCP=hmQ!vv`@K zN1+bz#bq9!nK1(Jg~uSjqG`MwFd0a(aC0FA+y}bLpHR3CFh+9}uW?W47^moYex3!u4X%I-uLu5X zw)`#GeEp->Lpqy5^-C@#8=Ep|)xsmdDK}#E)&>A=G-U$N zQ#N~5jAp>9Ojq;{g&X5SxQ(}%A@>MM01oO)C?bT14~v~@JQb>NFW;Y8u1fiMa>66H z6iU-H2vA47SY5O1+aJ3A986==Q-5JLOHjpyewx*RqbO#4d6)D5gj_xlti)IrKi zW|p6<)`^&f7{$@iD?((&pO#VUR!Wpxa1%N<7n>D)`y@Y=tS~)|rYS+!BaYeiiH^!D zSsedm+oZx`ZuyCK_efu;O-bZ*KB4b*A8U!VQ)!2_j3mxBF9*8^(Wc>hWY`36znD<$k^XCq;AxeMt0zC-sUBu06a=mG<&xTxxAbU~aJ z#!-7=iUw@R9Vr%CVve*i6}zppnPq(7-B9YwtPjtcf1#sz&i1YLa>D_bfu zP6HE$5zp6TEr)h?j;Z}z0ZHuvopLdX(9V-5SeVddnZkE6d5J0sVeePj0rTc+#NkIA z8Q#yyGqU+09vH&U1@(lUGJ!jwL>Z7{7Z*0W5S!$Ve6>nnz$N2~u!E=h{<<;u(5Y1D z028V=DL4~@uT%gJ($&eB!Ge-fWm984BZ5aK*5dZjebvSM=#$Dxa0D9w;Y^+q#}*o^ z6IyHgd0&8o_!-ne%6rx08=O)N(dC7$wOW%|9BWL{Vek71$#HRkDA1b_7XIw>1H$$n zaNJ$~=RWMut#A-V3zsi)Y#fBvXm;%l~wLidAi00sp12f!R_#Ur4>W*%)>g(~g5I>`b5hmzom#K9!#WQ-{*H?KnuIY_t zfkHL5Np&A7ZRz`Q%M#ESD3ID)_C#)U4jvLTF`X;k-&FfmtC-)_D(lk|RsXJ4{!^5E zrKA^ah~UHtBD%4cd6*zB;Y7G$olI@k*#%kb2=Qv+CM^E2q{)b@a+CY18#?nuk`~Pd z--YohM>}mHMEOx3A3i-=UZMcgeU;SZFDxj?%Kg#!@@^@Nf7UiDu+r5zkF2p?K+AVD;<6Yse3;bR5#-ddV@x&i0m!S0n}g$TafB2lUK6g zs*pL)5?0NFyotrEJq(CfeM|NA9T2g`1wKACQYf#BKSvgk^KE;uOJIs3Y`y13F?XzQ z+wl?xv2){(iIZhISDDPGm6?hjW+x)zO57Ji7=;eAV-InJ&x7Wf?j3+WmO@a6pZ68k zm3=c+1gpqpGRXwYU_)fvxFUG^d$U*wDlp3?)o}+HeI0f6(w|aJI9|?>4|KsLOP${C z4vM$MI#L}fcdrW9Lrok{Ct|O^xhp}Wsp_9h(34|BUyh?lD(Us~25x_90xeF6rwG_v zH<9l(t#QZqNQVW&59>AURwVR5zIsIfxxzHXi9h?W-HHp&UP{su&oF^q_+6{_i#3T! zU*{EGcg(2^U-t1Mv=2Jnr-Rxd$6$kO7Md=VofH>YL+(U(%~RPien^!=$Ac1?LXgOW zd7>it;W$I#D^Ap#?#`=Sj2P{|)&!8(KHx+UZc>Dd=WpKgSe`E>EdDa zXj3oXnX)vdpB}r2OKzWUcH~R#L)<~8415A!MnGSYoK%D}Mrdn4HB6t@vbJ3o@Un&x zYYz`wr#XU5COjhWR#SIzcsp_@Q8-C{4|SddTpway8zkvn{-?+KCqM@TD)=jAlr2>VtrHjmC+gCMYcki)aV-vYJm9~ z#^Y;l3dIjg>p&XCZgOVsGr0jc08I&BPLb#=7}hG3-)<`TP1Etqff7>~$v9Oe8ckHisj_(}OZdRG=ig?Zbuw%NGCbv@7-R{&u@WQ!;9_q}B>L z<=Vo-5Fg_OX-lycVsv@q7cu%X9ltc#{!+(-)pQ4Zng$3FrhB$QZV%A59dxjJC(t^`*`$|1+ocS zpNq1=UA<7$f<^y=%-7sGdWg6}wxdPRN?>Z%fG;nb+;gxlaytbUlUjF)oKVyw06eT6 z^Zf^$JTFh^wX2K@g)X-a$qf@8?WA%TZyk*)xs{iyg=ds57qtZrD?kMf6-w+Z_5@as z_n!Hk%cr<|j8B=v-tRAOSM`t|hNj_zn5=})AR(0V5EvlkaCOmku&3n%ID(zKx|dO{ z%Suz&^gvS=Z9-kdbB_Q9hkakdb}oX77;qP=R`2lpUAd1_jjxi1C8n_6?Bc(uXjmhz z(8lT;vT|d~t^@e~P?|>?>YQI{I)@N`guW*H70GRpz7!~8g+^=JUeTR|erVDdeDQTA z8a31A%nMRzTK3J$BjM#I%SyEvLOVR;$2|0!wyTl*L^0D?y;+-RAjX7QvqSreTK8*D z7&+@3dD7wL{RJtoe+Z?$U$%t*cRtsoKosImkzI9CpI^P-4O;(!f`4>c{}HdVaO}gJ zlsKQp{GAVrw&LU%^cngCe)k)kt1}IUpo3+=cf^}-cV2Yxtv`nIZnK|bUpzGw(sIn2 zQpt$Hxn$W37Dn7eb!Rnxzlv07^TK(AR2e z=m@1V@Q@~^F(xB(Uhih#vx|wA9q~{gJg&N)uiE`g4r$^q5YX=ki^Dq48YbuywqBl9 zCl#f5qb@aGxYq;b@)~D(cK9^Zg;by!3vq7BJabirH!UTOfd4sfp{QI!BC>|)O#z|% z;Miw2Q#Fvudo`@q769O@pJGI3D%Kwn`N(5LmSM3e#zR}r|9TJPa}C$GGiG1mK~|Ky zZ)zfK%d8Md+1DF2C_mJ6(n&=Uj4N?|F(UtLYKcxB^pjzAlwiLBcZ6|*3?pph=h0@* zIX4^trk=p*O^=x=9b!oN+dTlU%PC0$U5tlrwfi4>t*qtcnF}VCGeq(WIQ!}J`(loJ zE;4xC*vipgx&rok%UbTy&y2|`LP$AnXZQsDPOQ!QKb2ZH5{1%pMT^X-FMMdgz(bw^ ziU90`YofVsrk`poMWUWO63XK!$lvp$1^OjlhPR=wLESzlc(BzkAWG1d9iM!?Fc6CN z|0+m+nI&kKHSu`B2N1lN+)&Bap*1DRo9sWS1b{->XS~4^N7g)CgvGB+@qfka05-&} z`>SJf-Mv$xk>5gQ_P)w92dmE~hQkiap1~-dh}il0E&_F2w;QqWJ+IzD}iq<+z#Z6PXxmt#FT&Y!V=XLs0od%dfhmpgX6Hx*i*43*{gt&9}6j{qijzQ56YbN;C@{zrw+^*N|zqa3#$HVQz-1ejiLL5|jC` zYI-qNB)mF&Lzs31oEpOK3u?SY@b{?+mtsvRdM&k=c`DD7uL15mn7P~?B~`?rM7_*$ zI4Yis0nHQSJ5Dq&oxi&9eTVw-x$?A8UZ{Mo(q}tF{CI$+=_mbsN)U9xB55A(jBo5E zpBSFjn>1{JPAHYIo$k^$k&|hN>L3weNOzjG`+bFqw5 zO2DSGfs0pCY_$~*X(cm_5-$%#LUXX|48`R^#(k1bOtQ_}dR<14ViT@H#pD&NBFszu zZrwE2kj5eqTlfl6?!=7jkbuZT!>2kvYJe;#}j|XM46L8xSj6@i~&&CPx;5X}l3*`XhDnt7H zFdlA@GZI)DH?^m&6|>2d_% z!aZJ|9*fDd9Tk=(!{-ung9~-aPpVkSEVW}UleSmQzLl}6NA+e#rPXq4b-U8?k$T~a z*Y5>pzvOne4yDwHS+k)c(}eo_1fOtcPX z1})}GuB~TX&(2PUgidv`*E<+!o|3LAO6lh-oV25(gTBy0poYOkFVn+A?WOA%YMzZ~ zv!$Fa<}slFxxR>XUwoGy5BVsA@czSRJ)()tO$I(!ynZ(z3E6AAl2V1K;|afRIx$X@ zqjn#|u^!v!BuI??<$BHicZG68s>iGg#qnVv?jtYx();vazj0)`dIkCjirqj24kqvF z@^+22gMD(--k#?BUSvw~VB2RS~^7g)0=cj~p1^USAIbkvo57um^Y z*p5VS38v)gv%ugN`b-5i!fI>)7=XC}DrP>HEBX*vhs92?pD!R(|e{LGZ`oYTxH z99j$^Iu-8}`dcY7pf;5+O{p5}`R9A8np;K;8qH2!NIyLLYo2Pqfj7zIveZ(2XuoOL zy$>0sPVIOo&uC=kz?|B>tw!vJ$OUMtJva^aXflb-RC|(OhX+4b-knr0n%FdAfV5o| zUJ4yC!BOv^2?o2UO$X^e=gKN({zsU#e}iMdU~H!pd&;w0c`q;U@1Tz$>OZ{1IIY}U zz(tfJ(@|53eo1^HT1x9;r-%A?}mhd|YOCOjUWh@`f>3b-G}0kf(>|iGtyZY>Vm^#@cQlHq zXn(}T`2f{-rfD0=PU#`@fkpl`nKK61yJKabrq5vPiU6>dQwVXGLUQgw3LZi<#zK-jyy|rq|2-@nAwUd`Ll}kxs$J;Nc(9n zKPWURwEsg0X+NC7RM*$f>AK+1OXtG@Q~Bbs``D7HEJ<)R2QlLxq9B2aVG@M{6RDEu$o%?*ycx4_5j80zi_sL0$h9s8jv|eS8wQKn9GCuS06xyiz zIbmddsIl<6#>YnTZgluS5P)(9Ha~dn`>$XV;7fxe{8}-pU62H&MQPa1x|Zhm|KUqT zVuZ23Wmu&SPr>(^rqlz|yqjkbIe+LqM?@B{B6RKnkPg_|RLJvWI%RB_)k}{$a*zZJ z+uaEw_zG;rJCspDZD6J$2a4CPk52+AX3PLN7!*q9EX%vNw$>j3CxQzUbH4@j5k2@2|kB}>^= zpN4!NS`W1FX@r53TjND3&7`(gQ}lx+F0n3`DR!%XS}+u%#<|uBez|7dqw-!6ZR(H< z#zMy}=R$h$VT2fOV)1f;`%Sh@ZL1nWHF=PLoEr->T^oLZLe^;u#=48Rcyok5KWbM7 z)XBWPGmK4-%a4Y}#fao}?1}sAWH1z;o5|xu!K96v6UY7{?i)IJquTj!1k^+g#8(pam`U<94=(H`x2_MeQ-%q*=7 z!;6oI2SFwF`Cw}HE>6yousk=JLXcfSQ zuhhOckzA^{ixd)OHW zYt$F0@uu!-^edYfv8%<{pDHO6d?s8WYeLJBTt4LJQk(EQaTa+Iw|O6kbow&5oy z=+Tg8${wIw_*cgGY`vQD?Gm%(b2j*{1ieDy$5cc^_FzY2cPj}IQ=h$5Mn#TzrWglm z2|;=(k(KMmG#4s7&M%-e3tc*Sd7oq&SW_#`gs{q1T9y6LL+H&L&5k5E3ts`tZGI6~ z4Uq6C5%OfA!QqTs2ilxEPg*X1mNdTvJW(4~WIeVOB(lmR3)%q&iKp*4CPa2B`alnu z0)t6vHO8Mo#T6B<20lIkh)KXEFvS>2YlE?c2A`Z zH;#ESc3ZoSm-#UmT0Fa+eke~3pYxp>x=+6?JSI5MW^<5Hv6Cp>VfdxvQ_dA>o1@~OU2@BRCX&2=UBx}J^>M?+O$CTtmXXi+*FyejQT(bM|5?en8Q32b!kC}LON>KNLQ zD1DxFY3i)8Q-O&qJvGkX`o$^Lb({f)sqX=5D&N28wW2=l;7nEovHh81^dg<{#xPxZ zk$AHu3G7eQIia2`@X4hhJDs^bk8B~ct$+#Wv^t}ykKX<|PcxCugrxrNv;mvuKYwyi z5NhpUK7_+xp5a_w*Mo8#ijHGOROt-BrDgT1TshTwKb`a`PQNM)N2&ic2o?NvPv{)2n zT@Vwb5tBeXUI_q=uLwqVOtOB|Eadt5ZOHsi1x3pmv38R?M{u*=u9y;Khe{~i%Sb|{ zUt~}%3e`;~qC14SyO?%!|&81OcW%hScjLn}96A ztu$>SY=JqV{dfm@=4t6agk+;HsaM!u(YPf6X1-&HLQ;sR! zRmqoH^7d@bbnI6UTztR0eRXI~0$T^n&p~$d30+omW<#K^Ap!W7?WmQWlUA7f2ds$Z z9-!}@VVX;M{-{6=E6wN5wVp%mqx&n#taa%~BIC%&KJQ4ty3Ylk%*sZY<#IBmj{Lc@ zyk&0A`FxeHN6CdF5jjUk#vv&~=cKct7cAe>)I#bu<1plUb>`5*THbNeFR=-u0d&AY zzTFshx5hnDHAFoWyYYNM()5nlMSEQO#&2T8Xlab9F#_pqrfY{|VvZH005X!KPj;Bq z1fku1{1tsbTuCGw%D0S>4%kvhk@An2EhP2Gk4HRV{rO1CV{6->OQ5)-q~kdM2Rs$j z8#Q5B-qD*HSuIDz8yPRV84p)$TJgYjT=8ro4|4emf9&C;M>4M8=$Z-f2|vWFFL&~) zfr`x2)G4NcrbcjFh`uGka{bfAVIMQvPuf2fTn$=e=?po=n66asFZX!C@~m}LRCWeX zwN)-@++3C)H@YDmi=O-G%LB0UT1M4ryF0er!JVwB}PkIyEdkO>FxKxEWe!COSkdaOz zytt&kT;pv;7-l3qNbe}S-H;Zk=C&HIFOUk09e!|r-c4dxtK{=j4aZjtH_9pfdcx1A zP4aoas6ts8YivWcFewKze>e!ApUD|umTumS{J$jjnI`(yXX?_Si6oL(y?v`AwtT|q zayQnMqDnGtJzJ8$%31*u)&oX&(46Q4%)IOEx0fiMM95G3eeqv1jaFMnevsCSG?Ffl z+>zM~0|6lD>n(GUz(}|FZ>bL6Derq7RW}MKdpyzd`5n^};q@&e%nvKKzhIzrlTr&> zEVl_gop(A95k8{21QvI=*YrNl;&dh*JWOmBXqtN1?IunGZ5o%**vSP%z(d#ua{V>S z`#_d}c8ZPZ=RuMf13dcDv{^aF?cltO%$3ud<&V6OIW2DqKKtt-- zkqT_SnJ46_lpD>-Flv;Ty|kbrO}4tkV+wsD!F+s390y7x%uU4DxgO2la)~`={HgNP zI)J@*BNfW3voS2_0fnCQImK-!PhgWX!*(x@;ok0Uayjc6PSJKL>x^^?u$$Yo^HCq+sZqDzWFUnvh-j;ok1!+hC5L)RGKnQup~) z>;W|eJl&&Q1&PgS`RX=Ka&(FjLLtw{C_;{z5LjVGgZDXFN(tfP1VlO-Y}Mktd!4BM zk&gAI1M0m(CEl<^N5*CqT3|mMh0Z0W5(*_aF0(>rmX;pnzXenp{eq6vhnal0zg!9t zjtGPtL>(B;^4iWUnC5)#%#8s0&I@sZL@xF_GahVJ`)5yB-Ym2;b^QoTBdm(;@jDt$ z$Q+G$#F@nUkBRG7dAj zFo>3uKFW-H)R!@gtLxiwPSPJ{BK#np$fHI`t;uw$L0mIx{obmKQ~|A@oVzv^arqnE zj7yzto9IUez>q?Ryb!eyJn=v!5w@_m%Ys5DwDu4(+g#gbKP{ikaw33TFuQXK6*^4u zU90>2#y>Vh11-zDuy(?KBfUd9vU2<7OSbVkv1*gCZnGxU&V2k{7mq7^7N%L1j|E86 zp)S1Y2 zd337|Fa_9p{U@Fu7?T)y8PTeN$-+-Rze+k>tm1kG4`u1i+72C|&o8O=Jxe>Fg-4Ch zugXdFm{6->nL<5G22iu}DG%9nTS}Q#83ypia6>fx`XC*>buKyt)*j@QJ5#Pi0S)El zbE@@2YGW%mn);x-njn8rgJ`$ z{uzPf;z;K<)=H=6x5*6=&ZHpp#1!+_RYT!EZut)Sn?Re;zsxeskM43ym3Qa{rZKBA{hLVMQ{5>t7nSQgE17XA%@ZpnMX z&)q;XSnFJ943bLyLilUZ!WR~o-MlT9q{;38%4}$t9^>>T+D&J1N&8vX&kx7I*v&&i z(l!EySvXdX5xDho()XlpGIB`v{4>L?&urGX7hOPe84dV)#Az)_dxk&cSUTWTls38X zxd+J_2`XD_&|83(YhRgAdQFA4vcH;TDn$N=|X#715W?}u9-E^p1;l4$^p{uw2llRAPk=XGfj`$nijCEY*f4j zHLmlh(}odHQUtU-lp)+mf9c0IMKT2u87TDm!&f*G2{1A=M?DnsP%gif|0HyGk6#z) zDXX09C$i;!1^s_cMC@Z9Zg?C8>L5%v{~iN2p&>?2o&!2P4Y5QK+g}yeNCzQ?KfxL&Z^5b^DF)r;gY5OFTVIOa+LJ~6LSOw?H}P7`pVJ)aww+0X&5~Bm6~UEEA26yRLd*4rqGlMbd~*k_iPwa{ zp88-yx_l0Osk5Ojm=EA!mj0rw?yB<5HS zyj1KE&DTNtb2X#@Z|hsav+JBw;2u$8MJ49luqbD*A)B+h+^6$dwSSj-|7@ibZXjKp zImC(lym)`WEVeFMA(8aw*e4B89X|ZJEvfydYw`P)0d4X*{#avq0xBqW$i*wbyWI~4 zAZZ9{kDrGAJ*xeKN&WhQWns6|$L=q%Qd1zwQ65!a#)_^K46st|`-bD+;&; z_}8zqWOU_5{MYgg5YH0DH!{mpt~41cB~?T8iS~BPuw2K9cp*(2Ldi5hQ2I0lGVMGR z-`CW&$DbCXY1(}Ub~oLKj5Mf!jg_ety5_CD*h|;unlGGaMQ=8)W0ri}^Yr}Fm#hkm zPjJ6~z2Tob4R|4$L&zwla^xU|nOPbS%>6z&ZE~^9M12^xV_)mNb{OVONVsDJzL96)e+gKT;U1d0GAdM89{CJEL-RI z-r2|-m|+E*Lv{vVps98J`Qj&81MGWGjH)h`QWm{!{dXHckJ^0R{oOMCvw$%y5WSs+ zH?Kd%84aD;drN8#9!y~kEc(n)tLv!;`@TMkdJ>*2Lkqz5sr(Ssik4&_j>S~HIw$>( zQq~^!HHYr&JgEI)5$%w2VH*HzT{kG@PSX5Gu==(83@T77^BrWUEos#afAh!CgS|RkLKS&`5znp?q3Y-as4BS&^|EoaYLQ88w+cQ z1{j{Q#4DT~@LfnmY$(~-+JX;Ef+9?HeeyU59%v+$)ZXo^Okk}C>LEYgi2C6$ z8erteuo#+dSd_{pY71nZpk_vv%MvAY)JT8lCpsMVlgNZc0uiGDV~5e-=i-Vy=hPoYnnh%3_SuJ&6A8#`LQ{xS@Y;;J>%z3z;1M za-}2h>O(y22CmmwpQ|Na2d(ZYdp*D&va_2DP>Eo7d?dW?Xvu7JFQ4>67Vn(0Rf@~e z`d5~Jk_vn#A*sU1|B7zFUjviwWhlUg=WJgR5?jb43lLBlgYgf9O+3kCBBd!Uy4lGe z7Aj&PC4Rk?m4LB`hnQ4{hGwR=8cUa~#!FgN$Y|w~wlf4fotlqQ**VH2?DaXx<&mMH zPOChr>!uapph}P;!hH2V`$&I3tp`j9!YxDl8RvxFPmIfXB^|-^qh{Ni>ddunZ=U$% zXwwie=P5mZtmHyQcWL&U+i;TQ@2ffOWu_(m?-fUhx8ZHnR2z!yOfF??3N`>#&uZ(Y z@}@vpwAj=RszU{-X}!iWuBC}R3G1>T$*jp?AdBMbR{TU{7-u~k4~W^g!^|$>5$LQi zWz#eaYF90CD}YS(q?Gjf!;CsgzVj07Bs$vFi+>`zXk>sgWXaGKHE(frYj7$_E|~r2 zha%oT-*O0204n*}6#1KqMlhJo;UX_fze%mEtm{>%6tUlp%X#BZ$xFGMuf(zgkq zx3j9DBSdZY4*>VFkyI^ac2dDFVt}I@ZmeVC3yvV{?$+sQ3m@Pp)==_aH@94}W0boe z13cvb4Th(2|BlkW^rD4SWHHkt-DO~w)9O_xe$WfOBP>a0*^4=&4Q~?^y2E7gEmGak zDcaDqO~zn@o+h&M(lXiIN^@{&UD@`-h%VgZgob?+fvzD=0zq70yQX;bX7Ym?u{7|- z>+_c%8DkkrxH?;$Y_RSN!A1VRgDV0q;R4cCfG0*@^aR$Vl%`C&WfQm>4?paHK12`d zh0Q!?z<;SFNZ>_LvZ5$m_}5I@AO>L4&d@0I|7kA%Ng>!RP>&uV)cEI4&~U#d^d;*k z7q5>ra6gjCHSmxa?iXvv5G0tYl9A=gYO@#H%v+`OGTWE&5ZoGkoA5Ni+&FtdZ3f8%}NfTK5)jSe)mL3Jk|31_g63e9pL}O9V~Oijr)Z; zLne3c71w)GOJ@0bw03li+8^V6Ul>YC>v_PjU z;bw$|$k0fM7gkUA{r1iKmA>532y#O%cgKv(NL&dxi|EB5z97qeSv;DDnk?B6vND_T z3|VcIEPlwF5hE4f!tU?lVMshRHBMabwmCT&x>R;cJ9&I8!|aI-&lLYxlJFuL>(vuLJ50SK`EGqBu!>J|{ zGAh-jD}`JYTuBVcU@t{?6c$vD5%rw5_MAWCXQt1-S4KYln;Sv5P zChgs)K}*Nw2NqLp43t%e3ljlye-_xE3w!^El};SNhCld0o;fag`BjHuj;`*VR6fZD^(6J@4 z$>tK=aQt6H<3I29*TwzpdzXqGH{Ww=1urGe(*{yQoUVy3DHCpfX%tLK1E}az+zj=9 z^8|pj?;S%MldaU=iaTPS>89GJ#qTdbXuI!BdT5TmfdnX+Ts|%nMw3-!#HSu)ha{TCaLkhBpQU~6L3XD9Zyx`pzwcDnd(>tYBaR%|sB zdiUf!`X9LTugnicKNgq}p{1tD%#FnII0Y#>;O$0qvCyLtwBfUwutqb*LA46%W*_l4 zN#F1x4KacNLqJ1uO1nfFFoTh!7F&Fsv-Nsn+a+jC8wu9!>UbWxn;maX>GmMrg3_<0 zy7$9haI?F^23W>>Ap?LTGZ`5fn-$v?s8fa+-+uQ84c()M_F8FOc zw0oFzpGfZWSxl&yi>`ql*k;3>gvOEQ*B#HDGj|prTT&PM>Dw^1oOG)U*N5#x96Yy4}p!n*ljE>;wN`Qm(?$Z4k z?^MV(Uz$RT(eVqB{GR=k@ub%ISp@Q}Txx5zq`jt>>M1^sO^uKL)a+o)BIROgdWNCjVYB&5!y?BG zkvP2BjqSs~^{4DnasB7QqPyR{&NJo+qCj2V4*eb$E&Y+Q_~VO>_c39bkw4Q0*R5rQ z&0HD~X%$POqI>(lIFf`@KtsT5WrbB!KSRbucRB@9KUun))0^2(y0|(6T+TPSAj2r4 zs~o)tpW7H2Df9mn3}18TMLnY87eaAqC}V!W06Vd3E>p;eL{(HZWg-8Ky=)(sxBdq^ zjopEP0h@~>BCzSe6YU1apaJK`{`vWVr_5?6K<9Nf7>n$!oqGp~4%U`ta7jhW^xQ!* zFKpIr-Uc8?FiZR>aH2G;wofFoJ#)y00 z8krgDgjA8v!xb?N9m9?>Y%(Qmw{Ifg4FS*3Nb^j5{EQ z?*R@$)#$NzKzQrXk1usO%>*)C(@rkn6_5la;l6TU?6_ywBm9WXS6yAbp{ci8#rdiY z+qTAQ_d1~t0%_oznx0v^|gE) zAAf?HCwsZ>cS9*LUb78gznKaBW@8dafv$AZpn0YX*k=*_7TIjR3czx@#i|bg!2IiS zoB5X6^5&Ciw%mkxRu7jBHfMbV8>V!Bso|I~W?H9$ojNs#X15*=&4{_ez%`!yvvT7opw0_qZ_xV8aqEYy= zwC20|^foZ0;g^_~Bk(RM3CYogc);e1Fs%v^UgX3=wKbovu9HFYv3#-ru1W&LWA9xG zO<}(c?Idb*%kieS3B9$g3q!LSaz;8m467G$PZB3TN<0WdVZc>e-=LbLc9sDm6G}Xg zlHQlqfc+^>|0Ek5eu$A{n(;W#y7~>Z#~J#q-*ylR7UvBW!y?9G6+Fs$kmU0s(+r+d zA92uA>UQqk_YzJ4=f5Q`eL$9gEJH-LSxTla*#EO6Sc}V(J)+!6b@M1|uv}kv;?5VDv0d^)E0+=(2x;tl%GDNBWwdh6Wt#_&h7-yBgl=uA+;mP+Z6^z zQf$^KY_QQ&Q0r9my9tf*q`<45u&{PJfGnEnwbNix1K$Qf&F-scA4VAhVqNr!Jjd;z z-d?_RI}K*L*-T~Gz@$6$5ojEF<8?{$X_ku9?@ZkQ=g~sP9=-rNqt_Yl^DrXQvqU-d zHz0~S*BK4xc zQ1OvS`I>7jb+vj!CXaIl<}*rFeCoHHh5O%9#S6KN%n@6w=o$4EoW8_@-v;V@4~UjI zdcoPg9`{+xO0>x2<5vo68uG=_#^+24j-S2`CAQg3+B^=uZYZyI63RP8 z=CwUSv$k)#H7>O@G^~_B`|ouD;z6kOxm;BOHC3Tfe_$dZ(`DQbfbKiS&EkP{ssgC> znx1q}-1O3Qy(&hGgThLys``*6q>h??7MD;GsMj0t8+Y%MCmr4)&*dxdrTP{Vvaj4Q zqI{oAj1p`&@A_oh%zi19moj-Z1o)SIWoz8xy!>Y83qN3_(;Y{lQ!J;5G9olZ4T!9j zUQ;NAA(^oDCzPVMRA1deLDmiDxS*i>DuN;IokK>rBjmJ-Xfb^zh_E3s;cM&|^1fq6 zqZYXC?mPc;gv%7aa}AkzXk+OBSoP`cj%9N!F7l+kZt^}?_IYH@8^B@UFhVNO5Dw#K zp{LG1NcG4_{H~>i^BO0fVSpG+)}MKNjM+E3AL5 zd?*BgLRVz;n(49_bmrc9e!dr>ySi=TBUh0@xIIb(>2{l&KTXa)bY&n&F4vGaueK1k zCQ$IEQ^WFreyR@93hy=|jQ1`YYiW&n#%Fh7i+ySA=cUzZZKVydsR6VGL|Wa;lz%q? z0>qQumVJbp+?gt>L0KC@u zHCAIXhbx&-ii<$1=_-GqfUl`mmYATUh4P7gl{l{#c;t7`Ww)mL8FT8KW{?p#LRP?7NSZ$nWIjM8KAG|<5%{~@XcT6%4!z6rk5hqRVkQU{LMVDh$ z-q1aFwKm`rY8mbWxM=2|06P6s`I4&6>HLTIjoV-f1HMi8HULf*48EVe6LiP)$0leo z=`$igvTIl!VB6(5py?8q69VYx!SVr#Yrru{a{{QZPtbAn`y~?F)i2htv8a|_0xp9l zw-*(+KQ9GtuclfkX!@=zZP_>6@H%!2lq;|0&Jln#$;nB3VtyRLUpcF0 zkrl#+f_lCg&UoA)t*d-@><#L9`7jZ#QcXudZyVUtX1JbKVeZjDRxbW91vZ=Ahb;Kq zu0M`+Bx5x81C{H(B*B!jgmfW$gV{HM7+V;-Ghct@v>Vj>;aCR~m$_%+Yq0oCr&kML zFZ51jE;@^IN>Sw6d8U-0c?;ieirm-v(#DrfQP`6cX^yK5L5vxOPxGUi9AZ87^H^I= z4W;4yCD?J5*lQyXXxT5 zcpf)ZJREq6BzAxSW|^-I|5E7i4X=sJYwiO`eXTc;>IM1@!+g=^sXTlvEiF%-+(!yz z)q~)8`RzC7P`?w@X8boI@2x!14oCUA2j-9HV+Jou^soEDG!*%@^pCs<+Q94Q-2TOS zl7CAT;d~V$x~b^cgG+0SPgSYgs({|qus*KY945QNyKmNs=rmuo{2N70UO|Y4V16oTY3-%BDgsNiG;53=!b_A_u#B z8iO4IFLfRW)sl(4BRF5?^R=IuRrbG@k!<`EHG}U-)}?VN)xj%nOSwgR^G(jTYM^4Y z#kF_tu59P*BXl%GzFWo=PL}a;4{nk6Lyd+3cs}yxZVlVGgS#b~heBj^@2B@}vo0yv zHZL`IfF}u#@FL-{uARTVabv^a_(Cg5tH^?G$|4orwDToK>|z@69PY*zl?51%;B2>S ziNA8X#1Cc+0!$Z@*rKnYw^#p@ttYp?xZ?{V;9KEiN6&wa&t{?3RH(-?Yko4YQBO|QWr z4p^!_VEuLHuwkGR{${k+C>OhpLKG>c&wlyU`#R!kqkIeK9?lI$75O%d2^ts-UgOfx zss@+fb6h5kVKBNYCvG$XrrNqRtU#*_K{pt)jDlPF4~wP{2mFVO-;|A0d5;;E6xrom z2dF<)>TV6W{R|YQCw}aTKdQlo-^to?irZJK-jvf1tz=1^<|Z_Wj;1kD2-d+bbjQO> zIww7>?-;xU05Q{}-f+%Xdgz%vPNi8er6DElyMZ5a^HR^(IR{8D7m)f6A_7#ANn)WGtV4GCcf>j3dU4ujO=H zwzUN{US7zwFzvSS1o`q9(16VbKWA=9V>jGCTIoa{X=Jq2B&7H14kRA(WU&zQSRbur z**Bs}>KdQQJ_-%@All`_;`5ub)>UVOrF)I=9XV2uuo?q$J(jt9 z>41z8c5;&y!deSx@-Km2n4qb=-{Jl0MuUc0{9Pk4Q#@1ELRz9xF@F+D!uJ^KUh~7L zLY!9Cy@aW#_q?^)bP9f=%{}>zvmZSMQ{js$6{km7167<5l_Sx?Oy_-mvb$+17j@P(q%)*1dhNfHUPumQl*NE^`h%kQ7=2%OdR^OV z_f1zLaGb3xAb=_verj$Za2?JM02?JRe6J%^Yt z>h{_Z+Ri*J4IcZ8(0ZqaFYy9!2PfuHw{W|unF(xx6KuYG1)(0muO2Xr4F;&ul@>a4=HAnCP7Lf47`a$`%;Ri99ueYa)x9ejw4Eqa! zl7UPW7Rou|XU*4}{YDusxRVpJ5A^tjgAy!*K=Npqd5|3(>3PvP)u<%BvxO#7Kdg(! z7n;SeK_{7vq0QPi-;BO)1(+=r_Ol99AZ2+**R z_WrhJRxd4AQApasc|^2O$@LyLmsdI{;mRm$NWgN^ygF)w_ol?#x_H9t9sY>eyVyMy z{#KkQt2<24EJ51^t({No$}~jgVOA%75wbVx#$u!~(hmrWL4EWY?gOJz1F6)K zp}UsEvCrHD@h|hp97CldjZvi}73Eab8?e16bKcb&{+7{da()GB`3)ZT@UL;ofwl+U zZbDyWK+9pl4pv=Cr$C7#V*O-9r}n<&l;F+9noWn_G5q?(k@8?gmt2`0@0=)p%*>u_ z*3fRp|KSsBW}2Qx#7DafpkSn4Fn3vbQv2g0n-}5h9j*Q+DM>6g#lDUoydqGXZ-T z*c$iPSbr3*T)lX=`TFC63>yYwN!#t_M?wJw{mc}&C$nN4aUHw$pVqVq zy%0^R zEVHK~2XuRd#iZkAlSks-Y~o#5mIX}B|LKUI-a|QyzMd@D?N(`#R>mHz$)vZ3m zZenPTx*riHJ`;19%6ERn+`#^I9Y_<0;^6Xq;N9B|7dWu5h!Ib|g(b8db*>=fNIrTF z#P+i`m>%h4@>M9fUf+Q+2DOUGB`w!sHrPiOd?~}O#&WPsC8Ab`TNX|eE|~=UCJn_@ zhHtNBm`&up^RTBm<^6KhA{sNhxB&|(8yfWwU6+M1cstfj$b$P`$$}b@uqW#5w4xw+ zwu`d$Mk}M1_vN78r~6@IOhm8af-M)gCwtK(B~7Tx?1@9=F4}Id+MIu@s?WTc@+8dK zdX^TgKXMX%=__ZjKnnI!0&l{B_c$dVKKBM+Ehj)Fuy9}LkYL@QRXQXgOZmz=rOECi zJS#cEM7j7$07$Ln-t42cMj4TnX&cIr`22eo_AvoS_2fS6({FhQ9}i)>bW;!G9$M*c zXd#?^Uv49e9biYyprZGq%-uu)@RmtN#cZ8NQd)&*#joG|iLmK-N)EZ&ih z03r1C$HdX+p$==XjX|Wg8JSG9;4MIsB9o;XKni8&l>+rqk3ONh%#3V8>$V)DkuuoW zTX!q@B{A~lPll4v)tU4W4b&{!ld$d3co|HC6s>xDN?2XfygVgmh;uu7n>9hRvo#>Z z9laH!T$!?vVZD| z?%P9~!?@*USI);Gitze`?*7+ulyC_3;-~u-bW30OX`Ig8BL^t^0SjSa;|Gm@U#$zc z=nrLln3`!=9(zm45>%SLQH6xgkY3=Ff(4H~Cvz1B(uUIfr;|keMl7$l(+i6^wv&L1 zS8S{@F)mJBiy1PwjJC3j_HihJh9zLB*9cpHZvZ>n2^Mt5Ana02m7E`!vT?~tp}Z5b zYryB?A^P7!{1<`mOx37MgZbSwQS5y&M$Y$otX^5*{=~{I`{d1_@u}YEaRz=g!xH;f zs%}w9_2Q1D%kGc_SKY_r+8JMIy9HVEe|4gVzFm|dsB|T0w^7;7yZ~v&b|RHu8yot` zOMbm`rU*5fxC+Lm)RUdOU$?Zg6Xz>L`ScW*qOSL~QjQGGs`t}V7{iC->5eswx~Ziy zWAXlA*m_;tnGGoD`sh^13~|JBB05)Spnn1%`aGZJHwMc$(<5Y zm5g&wCSq1^xxmyYj;vO(^bz<6vt(nSOo6#)`bNn)64tv1== zw~jbOF9ONy)Y}_8HF~B95+Ll1_I^aZ{dEG_c<-ZVLuzxXYB%cIu`a*U9q8=m6*G@ zMnzGeJMf-M#e~a?0R6xx(Pw;H>BPtm)uG~jvLBzC2a|Jb!?ARobz8IAJc$l7`ch7W zR=4)~s*r~W>kMNN+A;d&jwfzdD-oIXj_GVTpf%U!i9|A#?^8r85$f<3{;c;M$wp5% zXhvleCjH^U$WzX&u!L7yFP3nqtgLpSnh_myyRSVUir1+FbB|wuD|K`(x7iw!3&F-1 z4|e6+zEJL2!_M6Db&}M#phFzV$QQoR-r8%PM71s5-PW!7!o9~R{lZ!SW6wR?c0E3& ztADQTCi8JyY~J`yf&p8IFlrn0t5ck=(oE zklh2BQ2w=S{<|kux?h`F7ao1d1bmc?0(I#q`NiaJ2Lyh^E zp~qCy;`1TahIQqub$SttyQo2+-oJgZH@?{y0uC}uznqWU?t9W2`vfPYGFfSwgGv*sS+(Kbseub zOR|FpR+r-l_x}W6_(q9SG;ue2xLs(v<1OzTwGw>GB)HyWFr@3O#FMXrP&-M+%HNKB z-XuV(F6@b?!bhcML%*az);j3euv&MrOlxi9wlZMyZtP*6M9FEREQ8!CnusMSZk@Ql zH1AAb?}?Xkeug`0SBf2gVyQ?ShdAKCOSE?pVBiGyo%c~k_?2_|+%zXfc=~_lvRm{d z=lApkZHE$dUPplaje3l6xT8`dd87QnxR-acG28l;Jvj34_NQ$d5*|5Bh|60Gr5axZ z%k}9>TS-fRG>fbKA_I;BT_r!XcpSFyOmjXJs9XYQQzgqGED}PjjoTgAxx!~Z6lVu@ z;b>$FCpB;&6KQ-A0jcXb>NQKPpr8?4=h?+%1};V&RA$tX=gjeeu6>Q*P`NgMY^058 zb?$vcLJmPH8o8^LE)v=zn@>huj!zF5ur6^)ad2>EfN)O9fv#>jH50y86|Al|0UlD= z+Lh}ZS1}@&F%0KLx@Uo`1+5){TDOv*C=hC{Am~15(@+3xGx=@j(0!^YJN+&~o=PMy zX57P*sK=+zCwC7<y1gEYn|cs#pR-k#UezCHRphx!HZHE;FZ7AIz@O7*5bT+ zhwj>!CMRB;%I9c0dH+RUoRwM`rermJuP=Q(>zQzMN4oniBb(8p$>i|+9(@0(*3<#H z8&0#~(B_>%o+Zx^*};geiU*o8=K0q2x;IG%i&3&GKjGL-Zf3$mL7Nx^!udweH%vXy zJE$ouMkji??G|yn?}iD)z4vy(zj(Lm*R;!pIgK^4^r#@O?UJ#YM%??Nk0`&=i$Py( zDH<-`(A09w`%MqJpB4c%soSlFHI|@#8!(xp3pabZmyS`$!gC7!0Dnd0NCky?*HOyIvQ+BgGa|I{qF_$QCzmxfhiuh)Zf)E71(f(Bm0@B6?)JX1zazY$Fo$BHP zJoYHIcjzgU`Y_tOil>8SdmI_k84qaVDG_GzF3w}GE03N2D`3VXyAP_+bNwJ@T*~IT zvIGStnixBWKn!|4Flz8IRmqckX0Q!J(PczVEnf88KF6g*fynA1(BM-($VKdhR#;q_ zU$ejQn^XdancGVda`d;@D?7FkkLv;QGB8+4CxDSVP*ws<=C<3Z(uU1WXCQYrQ2K-Y zTU)#FLe-+I`6{!~Aci=Ps*z0XN0iSvf?a3|fM`!PnxBKLO_SYa^3H>=>H>aAiI0OME&vRUQcNiQ>sVjIgxdiuGZqDqsL!@WP#`JNfu`iat{Q@TJ=QHv= z3;UgQqwMPnd54Nj5$j;CAZuwau)h0R*iu-*5Am>%hwP)} zvcVtDhHz61K<)9yc)#Ux=7#V0nl*rU`>9>V)t=_dSHGt*qLHC#ic=IJMSgp&Y>FTx z(FF|f9(ql@kY_{?6T#h}pJ-^pQ}x!MacVRDJq1E|J+3Zbi0$Zz8(| z*I%xTK7Q2`hs{FU*jczaK6RSB&a>9+O~|QLKK4 zM=$A->b(2oJ^iftahAl`3xZUi*5NcB9+37X^_SQ9SNsv7vP&eEdf%aeGVARjNPRn8 zoAdRUL2>@J)nI0^^n5mL`*wevD1xXIekHx|XWwXRLna4drvy2Rv5`@KG3J-0ses5x zCsp03Ya!6cTc&>SyH8NnDH*iPoIg?=$_0Fp9;mkG*Ia*~SpMhU5JhDQzUN>n^R9V4 zZKrv6p=jBI&bBdj=X~KJJ+Gn>?fmmp46y?%3h1dqfc5$Ihff^QPm+XN*hFf(Pr1HZ zX|JBTdF0!b*Zx6{fx(EmSlWE z~7x9~F`LWA3RNw06$+84)@oCgZcQ$9(7S0b7!|)Guja#A7&RE%0m{K3oG#qR0)q^MbUyA_^?EuDC89kY`GkMPx`hw<<7B ztW4Fh`T$FiuyR^T7#1}Rxudv@QWIy9-iO-f(-^l0^Ha%m?4gNV81#ioCxJ-P_?M)k~(E~W36RB&*CcOZ? z>xSJOEnSTMV<>-^f#*HqBfw4sq!#Fu);HHNRIh3FsE)_N*ZXUwc@{57f!;e4Sbp;1 zaKMjy6F@DA>a3QpZ3<$8z^s(+K9W@a^mANRnQT-f zdQQJn_IHcQD(jjzUQy~qlSlCrwWc9aFssS;DDv;{sK;5_a^Ife?f|K-Gm%9GoqI*X zs6t*@TsRxYv}_GjH2NA;KcBH(F3sPd37Xtxz1y;R^^;G3NT4rkh7D}HSSPefa7pL9 zg&o4ZuH&`r&RU%s(tx{%)np`0UilzjO$ZwGGC|VQYwwjSvT@b;iwzf-tFgM>QXF&o zQz^I(swyvaT;&p;Ja>!~8w@_Yz7C!Hn5}IcS^0a?^~3GU2<({{Xx)O4 z&LU4;{ql9S?6y?z4f2arXimhKNK`j7qlwq6q9;!eTCaG>(oP!2B5-u0ns&B8zjZ1M zHTTttd2A{Jbq=)cdx+p)3A8t_M_e>(7iK*(8nzajbTAk2Np{RiTNAAhn0H%>kxRwpOng}Gpxo|{c%`BaibTZqAum0^bA!oG&)={5fY#xeeo#SEXT zWiRft?SALUoPJinHtz8Eu_n-2CpZ9Q7aow*;S2wirI9A?ut+v1*ZXYo9Z4OwssV?~ zfwoVY{_UCG?Q;|sll_AcDw*Dnzg^-?aiY<0&Xrp0Z+1=`ZmtqeGDN+Ns;mlb^h0lh zI?YP!VCl-*^k@D_Y8!eE+SVqYse#tT_kqm!&u!F3&TsOLgRcl_uQo)9O>fl-1yNM1 zA_U&btGGe4aR0Ur{_RX6p+M1=8&Y;|XV+QQcaP>sia);^nU5|ydlD0NnI*r?I$gBM zR-O=^V)Ukjw6-O;$5!t)2e~!SyFWwcqcCoQ1sTk8b>P5j=d@vN((gE*-51Vye%)g{ z3m?h-lfw_ZhnPa{Q9Z+bN<|Po0L-SCi@uoTzV#L>G`KLQdO$TvhBL&#fKEWy=v7H;(9XL0IHV zr30>fjFrd2fG$w7TnrazQsxZ#QLr}>`JH5>gMmIg!XShk$ZxpGoQ=YzS4=k!@iO1G zO#oweMh1Z?5*;aRfF?{FMQlHn_mkLDn@~^y;pf3uJb?`0$ix6g)=r1M)^R->61`|?D}~tKv0o_i@6e=h+qi?ajrmi-%|X}F#KVakoq@_CZ$S0Hx=J%dDk)XO z&RaT3+VSaLsHk-EI_?WxQe1K>60aAZf(hQk75Fw{fvznz_FF+Rv-U6QWG1A)jj}?3 z(QUt?H!keO<+ville6#SLokE-!}>J^({9*lNg%l{z8F2!UsRGjhpftU7(T@!J_!n? z;b%r}Wd@RkI!j?@r>?i?w|@nL-;w8Hbp+ny+nQ=R!WmM6UuhNGJ#bdEr?%py#<>YQ-9h^mWdU)De_8JhFHul74wl0f7_9 zUbyq2aF&bmk{tU&!y_b7W~_INME86fG2+=XdCFqks93Me-?^)51bj2SjCfE?f`Dr> z5reN&+1vxNLEze^nX68Bg5#Gu(+B(8r`#EMNZXl8dQXk>)aMA0CgRl?uZ5$rZqCoy z*<@_5sWLqRr`(ZK4~=Nb>mfo#l%)?0lAW0@QSZ%+O2<`C)OW=kLJ($4&`Ej~%b;|;L(W2w!uk2SC1Jn*?s zYduoJ5hATL2>KL49^0?-M`s$|!?QINs#$s?r^ry@YJ<*?BD&T5ZHyyj6>N_WM{Z_c zJ9}1huCgG%AfMdOz~A!-=%7PG`KznBJc#JKgu_xtJdNLntL)bSgU+PfthewCD(lV$t&w=eB9oA`w7VaZ z2ig*Dg=1NZM*ma+#L0fYcGcBYUS}`Ohg=+5%DRjx4Ao2zDhN*~42DHm70$hMgp0`f zn29XbPu6l@h`(yN`R*^9n&!tTMZrO|Uw1yMLy%y_Ve< zlrG7${!0Wly(P;zZ(G&W|O@O9#|h0laA^Wnx9+ePZ)j|;U;a;+s<9#zgPgz z3<3pb9!>N|5L~L%0y##)6PodY7jo&vQo4Zx??=W#m$(F30}6lNHex3+i|y| zF~rBKLKTC(B}wso@~BBBMq!tWeJP{Gdb9Z&-uw0OKRa(82;d^$RLs?8FVwA!bvCzA zjBI+%#m3=7cOuTl2zCyw35XJGeoa-uOnOOR)L41B&YMkkOuHbU?X{Q`kRU868H6WQ zFLAV`8sM8^-R8Dd1kRv&RRSK-a1CN$>yGUkO!M>bcRH@JnY;PI+UMEC(yZYk+heq~ z(dvi4*Gk&SW2N@5$10a*6w`GqiBq)qi(zeyI{W+mHy^-(tDJ5uR|2J;9)Ohxq&Fd< ze}Q^&73cW=#(7h)-qVM9^u3`OU(~>b_eI(Dhe!Xvv;UWk@~*Vj_rnpz7cZ4H#1X^f zVR4PZ9*$0w?Bb<*WI7(Z6#SVPZRJrE8efD94Y{p5O=hqKSWV7|D2LrPoTAxy^}XWI zXigmq%oz8+W}x3siB-DCd&=BY?UeT@r*c8*Pl+=6#b+F11No^iDSuZes7(ztS7YJn z0<%S>ARpZ9N`5n&2WT`>)08vEq>Rx9!v^SVyUFXI*(bWiou3I!sZ1d8?-IWX?EMN@ z_w|%C^qNI!mDXrhQHVF01I}IS^UZ3nctx9A0ciVmv7%}>f2>dqy<4TOqob_cpvI}+ zg^(|-&Nt$7rZZ)D#5uqoi&Q*vJH5A+In zUDal6NPH5EBOecoA(*45RHWXi6x?9+0&uacwZjg56<5g&>N1{^B-R$Tn3oaI824sD zz68D~3^y~r-I?)mTsGmU(|*^7TVv}RnFlkiYN7m;4da10XfaCiEe0LTdoeT5#seN9 zOd$C?+0{IAVKx^xA-|+gWng9ksy7O{<=Lb=F{c<1S`@|!W+9xkm{!n?!F?k__Aqz4 zA9$J1lVV!YVkDQaQkv8E>5HY741DBq>8|jQ0m2x}iTD;GquDQ<)3L5zL!(I_R2oU_ zuGtSm0P1y7kckCWmjYZ}H#W|McavhzZm#zC`RJ$j1oabinv0-rC>WNzbBeJ!QCrP? zCJr%i3ztXQEV_7(x>5wHZGLJRze*bT(=esvhAMV+YPf;SFERT-X@Cl4Lg{0b=IpaaR~}4YE89jK zzKeak&nVBL&i|@Joj+`2;mpN=24^X8?sYoZn~86msd)I z38fz8A_)*?nTZb$j$-Vs64sJ)`Wy4w~dJam59m1aqe*s3$h=A7P`4D3Gq(lmCsZoy!r!MKQu<< z*yISu4~P@zT5LdT@^?I#u;%o2XVpHk+EB}z%`qN+z+9YwtK7=$C9rZ%Z;fB0X&vYf zXE#$8HhPw2PGh|=+4#fF6DLK1^nUiC62BtG#m9Q!rI6Uxd=G~6@lXT28Kd`Oj1;rp z+;7u14Vb{yaJZRu2paj}*%F>|+pqr1w{kO=b?TnbD@7auS&Qu|^nLRCH@@ohsPNy~dyy5e+7EOUWYSJ& z4#?l+Dw};wuYGAgH$+~LCbLlJT@^uXpD>={>@pt8?u)n6?>2?px8 zljJ0>*25;b(L!7YbBReA|GW45Uq1j5Hd={0 zvEGTjuB`cgzT5A(=oFu`%=28-d2BrF>Vz7-T9B>zb1)${VwFVmy~bLNiqa7PH{u?r z=X%ylew`sTv*mj!q-H$o2(J$|z3Y2^GEe}zZhWrF!heURM&d|E@in0LcXxf}h;BfN z*EaR_JIoZBKfFynnMzl_b@%uvI`Kch&_C~lKduG5?F4=u*!rx+BDJF}8(hQ1sXh3a zD%|>tdv6C?vAOus3Kml4w2)Ljqp4C&Mj$k7d7aGCVFvH=;wbGz)J*U0uQHEL<%7Rd zlf(u80dYa|yL0w@eV_Dq*Y@{^4@~z_M_^sF5|R(7KH*eybx*8$Kd(@N5|DUhrl(>Z z?v&}aZEK`Q@=u(s;|dP$Y&ZSq4-zoJj!gs z0jt@Ue-^e>_PpphMcI8x+RukQaujZCS=Acc*Qef{T#{K8+Egcxu%@iP7hn_g_O)58 zT=Z_T@OR?knS+#CGS{DK5>FYOK!`i?Bc=}w8DcCwie4q~Wdvrs&;IeCeINl2-WDW z)ez%|SDa08u($Jtx9X(7oU)No+HdF2bL)%zSJ_ppwQe;=!+E2X2Z6OSS;M0rjXG)e z3ScWUArc91J#=8F3AfCM>itYNhl3_UV!qu!%>0B4sGmV33(&IJ|Lb-ASwN{omK1ZS z3B>i@SNtZ0s*sT`v1bgXh(GRAzCm>tUtIN{*W{{{s!B-c$Kq0~s_a#;*zrs+k!7XSw*1aWXOItC!b?UqHLaoft^tCOh%)4DE<-x#Vc6(zvXwHQQeogB z4Mjz15vI|wkXZ_XXx_DQBWsQy%RC!ffv<_g6XlB7>6+O!VR6bx zGP>{6NHW$mmw(0u(XdiobnoH*IQOxNtPL{#Yu-A3R4qIt%)7l}fXz5QpJ|ji!2EE| zoIfw;9JX-=EH}SbqUW@sDgPL6)zWFXx=D{8`|I`e_Y3aN522DMX=!PY>2du%kEZ?F zjgXSUl1|pt*MlEnrF1q{HQ9wv;NzG1ALn4rGY~Tyt<2uCHunOBwxQKy0V(R&zyE;c zJi4>5zbrOSspPO7yHrRK~p-L2(}YHZkQXY&HG&L%%x+KUNomYNB^U0myYbcSG7Kc%1K zoT?(HRxG?4qY0VZ>BSFc{!P|!2gcSn#%4fx3u(w)IYvDQ2CmzmKT#jK9vLJ&EP52d zkmRiuR9f=aX6(Puj#3h;>qQ#cs@3(ZMW#lz>RjEdyrQu6S%Yqq@%+;ijUla=hlTc;>MK*+AKHpXciM^vpKX-?(cOQ4jX|OP z8-n;r-tf|=?Cd-h2*UVaYM{ylbX^8`(u!XBnPX9`Dol+Zq9qntKEA>VBG8#oN1DUS3=Dd^yoD~pmIc|{eMB1}^9$1Ywgl~0Bm*?so7 zw}*Gtt`vpPX_QPn>PQ%IhJ4H^E8wmt^u_%Vv-Ead&YSqMrE6kc=*kNoNRy}(A3dqb zt*Q6#tCuPC-qz=5^1`d{rKD2#!fY%m^C5PX8El%yHC0b)?IA&GbxwhATpV?$t=LkU zep>&=WwzC|+4E>D>7;h)VKnY{Gxk?~-~9(IL|g%YD^W_7KKmz{-~+Dj*AT5|&z_M< zl+9*4!u=*^)(OZX1&HFkfLRV?VFB-i>Bl@%2=ISw#aTu%!W9@aiK2=9keNu4b|ElG z;g0yWar~24G0kP8FlcY*Uo+_ z?O_81nblfMn6B9c(s+e8Cl_{6*#j5^hm)|SMY0I+sGZSuEke=kn^Y@i#f07B^Xs=5 zK3!CshdVBadvOkvCY=>lT=`KqqQla5ZO9Fg@ja2`bD`gV3kvj&aT$DmI`P&lYnT1f zIYm!9yP?n<18TbS-JrGoA0uQ}H=A*AYw?;EcZ6Wk+_=G7A@XK0-nr@XfOgTrL5)_r z+mQQ9s}hZrDlumwQ{EIv<=s)W@4^Lw#JjjlnCSj-vy}6oM)KqE;_zvG{3s}9mTj}x z++SqXxeQ?~5{;v~5A3R>$YveN(6?T6MO^;Kc<>Cz!r;AQor* ziFs@AEFbPiMH4}D)Ix+e))kct)#vEwUrDH=SsN^eJeQ3Q4^OTWkXdS@g%-x;&>Mq~}76+EJkKXknUpuX|)zk72}{br>Y= zu)?|JP z^kl0)&AO2JQ-E&i)d^zOb1fe-O;f$Uk#0kx-cX8KuBaYk9zSMc9s7 z&)B|%v9KU?Oo856d2)^#^{IM^Y!m$+G#ndvT9x=)`SyD_IPFMhrMQ=DMQj;1JwoEd&MahqP5grb|z!ZT1sBNp_ zlncnzR3IUEzcyd}_R%RNIv0-_7HtQSX^_dR-bMQC!_8_5nQPs+ThlR9mY6O@1W|@& z0-QNbS6zMXHce3T++Mc#R6=*3IF|1!MHp!#^2;MDszpTv61dk|+-7ClE4!E- zL7-E4W@J>>me9KTh4%|Zn^k!B%ABZ;8o!MXQS9cMUt5{5C9gDiE#_K{`c{m%N!eeW z1bZ~bQJq|W(LkU{LE(TVM?%#bAyW9+(ru4$-G%cNJb)G+BCj}unZW<#jnlzr*j3@( zAe;f6T}EbSPsv(kj!@V)&Fr{SPu=Q&9*dt~`pB+Oc=$m*h8hC{*DtW$2Oxj<&vFU# zzAw$#XJ_YG0NiqY2u_uKDHJGi%8&Z{Hyucy5Y_oc2wIvHW?@_5Su~hplLkp-o1Jc? zvtlq!$Q5|fvN@aR_he*MiwS{zgwRG~5=+!(aNaf5i_ah}0 ziWee@4?zkEyddGv6gW)9-Y0bW!ZitJEW$EBG_*9Eq*UYoa{D|)SUbz^0Y*4_5Acqm zOv9aV9ZGzW@K{S6p9P;EP;r0Kg#)M2vEh+k868byZLJ!?vE|xHdY9;KQf{%&7@3Tz zjSZAz71isj_eU0Ifvw|qTwyu!#9_aVtU8sRh@IvE6&022vXlt;_mW7GD2JF|sWqA| zaz=AH_7BhJiA zFe4@=HY9%s9bbrx@Zyc5k9*T{?s8TAWsx~qv`k8+^h{WKwF*<^`GPi6>L0JEp9U04 zr{q#T>D|;$$xaA3PqkfjfD>tL$+DThx3FmRPkh4v1YhC(`cy&g|39xcppu-QUfmq6 zwV6ZMN{356F04WiWkm_j;%l7Ms(J4F?d=x^E%cY**L}(|z-53v&G`8dR>bVP^+3!7 zxV2Q1eAOcX?|poMt!X@)#cEBpy%3ShA(=U4Jrfs^nl7@1+IGuu%L+*0*9{%s!EOyG zS;H}V3I{j@^s0F~>xnpa(^k62sz4>l7S0eoEe>-lN!RW42q1oe0zT8$65W5||r!4%pY@AuU$B-f>%u8*f!E z3<@+anY${a2rpP_ALX#>T(3a{rU>>YIsS+~$v-rU?rSyFTYA9Ys`g`=GOL zVGZ=`tW!`^=hmD7#UTYsb{H@T8H21Ami^X{2Br zNS_OD`4K559j@6>; z@+5YgkkWFGDV8cjuQDfhNnxc5wl$QRL!;c_3Ex=b=$y3KvTK0}oNhX~M03C?mtn7I zorT=VxJd#M+I1*(KRrE)D%JTq=s+mbBld{C@$iO*ib2=D{Ssag;Wgh~{v4jiqx0Nw zDZLg6WEITZ5pe*?hk>;FMsG24BPhqMhsbPNYY73t)&;Ug#VK8tdw}4M*%xfUs^n_E z&7Tmw9YiQyJx0*7E#VA^iDv=p-h)4wJkRW0zX1da6LFZ^8u3!S$VGU)6AtT6pqrq_9Xfdl2+SC|M%cWMW#JcVvSR2Gt3s(i0FXsEaAc>Y z3bt0eBQT42f&FJ?)u=FifT7va1x&q-yZ9{dWBm*@;axgsyX)DmomMGblSD%JV^SzI zN}?T$i4T*NTF}IYK8~zi%GLi7qqnM_2W3SJwt#FzSvduCM}w5}ZzmT?J1Vc49AlO< zA^}+YNQoVZ5I9`-|NI5rzN`7IW+v(uvA*#xJ z>@xn2V97;cjQ+p3_i|6OpTgM#oaF!#@m$B4(%QbjG`ZEDv_txabmtUd(_kI;6W)~Z zMVsLT?+2sV4liDMxgPDZ60Z%W3Yr!V6FL^E*4Wm0xD?k6zfooVoGf)P)WoG}qso!$ z8t-!1D)m8#>Jcs>S1Hh`wpMD?3Yt)=b=n_b8|52Dl|0ZwP;;V$AtsBuj%D4F zv({3jKW{C*Hs(C7sy;q5;;GXnZ)|u4<1X`rIWdB<*9`6yUbB?Hw_G|r z@qSA2+(YPVl~0}s#5HF+waSQC=u*zSv@mPIDjV5HO*-1xMmk$RAI^^QKx_$~l#9|)5T za!OLzJwx0zS$7r9&u!{RWIW78*#~ygE4I`?<6t&I@Z%)ooiM?*SQ9h;BD(gsrr zGMp;qVHjbgtgZF-aV|-w-H>PSu31&?5s4o&oTf8f$?gI+tN0$qd;D{1I$Y|P*Lk{2 zHi5!30oO6sF}40Ieu>}uz+b-c`Yo$6P#ha)5#i#z=Xr-71(xVb070dA#RLboT)I3V zlvpqcT$zp$k()IU$s4&fUv@wMO!lLKgZS%9Mh0T6W)Yu($7Qfrtp1aPW>s-xwrbL-gzM3_7_~^R!mQEz8}k{mWLP z2ZJ%wx7&gH-#lA^azk(_dD`#CVQunUC7{Ku zjh<~FI*zk@V_q|a#>>>f5TXXo`^}1@eDE>>o%xLk^7~YSnS-&syf{h7N1d!!_}ZSI zabD!Tt1K?@_oCBtur?$M+R%?DeFEbiqkWg-)=I4i5xAwPA0OqFgzy+sy|NjCHSBig-LR&7)lX0W?l?NbTh?FZnuGn~~BzdYjx$ zFE1SCo}!`vGZ6y)vb-Jf>>61aII+UzF>+h@~wiD<9=_ShwMbkYdh zEA;e_L4+63lom4oPci?mmiKAOz4z*tSLsny12XY~4#dKFZM)iwe6@9B3K^e6<;_np zx=XRkYPAxOwu6>eGi&G5>xFbz)a1cl&TBL&d~U(2Wy^FKvh22@aD4ZYNB3v7S= zZjZ@%{Nzru$&r1ft%%{{OSYR;w*8era?FY?Kp-AM_SVK5bf5*T9KDM`{R6o&X;B&B zeR@beyKbd>vJ1vc@>2}JpjTeG%PR&1rf=@3Ox7TV=Ka?JPe!wbD3x?Qpi)AGE2#xj zfC&_;2gnM&rgyKz=-lV#Zia4-u=H&7E(g^2@9eA(Mgi*`tS`abR_~&tEs)ob{j@3r z$wKw&=C>YFmArRhDKb2=#dIXq;x1)gJHEMJ7%&w|pvqB&>Uth`_aLO@(bE8M2bSRD z6+i3?>?OG5`kYtM70;dKk!TyG5+)JO~IX=f2GQtEYbV@L6=@HiLhnoCn~3zp496 zgV*jUFV4Hs&k~VYd`dkOfU;h-tUN0__fD#_^S;s|162-~4hcd=&d-R6wX}bUN3zbA z)Gb=7j@mx8aO~*%1kWO9>Ejk@>d#-oy?WW3aCxE_ywHNz*GW3q0QRav$6Vr^V(=%BqgLywVyi+lDuARrulO`G)N* zf8D8fV`}IzM|#b!?#maf(7F2|DgSq!4L4 z?*%=)i1&;dAhor;tf@XX{+~!%hpE$bT~{P1=bS%(o+Wj;<`3Uvb8UYjzBx+OSUanT zbPeGeIQFwCAH{x~SSz{+dMt6Uk=S_-#C4fLn@nV-Z&{WO=JLGTTGue=b|-f1%79#5 zo6wMgYsu74h#lwj^CT_7SxzU3BN9uWqH1n6w?DgG(6T75==>>X2R1K}^MaB0xzy(A z7Q)cmUQ+1;Q8Oe>hHbTe?RzsQ~Z+Rh@K{pJ7S$;!9Tur zZM3CflP|@1BApgS_9~*lB#ev*2tc!NMjX@6B;}`@PSDBKR@8)X=Z#Rey1jVXMi3>c z(lzq7P|Q!Liz??kAjuXdLsq`YDHu-SnY*JeiQF7VKu;$WtDX^aPa~Z6jAj5BP!sEX z>Y=jY*jE90t4_qG91x=}#sE&)NhVN=qfbeD8@ zH%NDVVupGZ>v zN&yN3BYPV`JUj}-Nrvd3XGETU9N>EU#QC^kaMFV^CnDvH19UkaKXJ|FN>HiW&*Zf5 zN|Xb&DPiA%wQx>4;*ha)N(?j{qK?vW)rtjcgX`s}8+bh|{9 z#E*CY2Zg8)9nKaI_nchoa3#U3TtXj=eo)!Ew;AgcJ4rksAKFnuiv)3hF?9NX#u&++Vf)@L)w1 zF&s|RRcu-(vr5TRJBxgw>2PzlL$pL}J=O&xZ2=e>#Kg3AgwB+LHRB~kf)i@H-?{uv z75`F5f<&7Z^9+C9$iLUfpSTDwepu9xV}sb= zE=}@7@xKqih=#$YR0qEMSv|R_lV^86-5VNxkUdUc0ayRRgmPVNa_7CxQCatoG=bRQ z4ELaFo)>F#A3-$Xj&c5?!mD@thL1npuQ~`iuW_x10VbP9_%`cL_p`4A&g+AvGr*MH ze_8722gnT`G5KE!yOJ{E(-UvGfuqyEto#ge3_AY7P87);^r{zupDIY{$g!JKjksZ= z_EPZnX38Q^Gzc^Ya3%KklT1qBGPg?_4-u7vVUuHgOaQSHiIda*tl)eK{~ljYU)(Pf z)q1^aJ`sZkX!l{(L>$Ci?LJ&M&dEgKtw5UU;yYT}-L9y9PTmN}BkCqBQ)4Bg79!iJ z9O=*s5X#Cw&O0r6JU#;i%jD6{BQi@Ozt*K8zscrgi!Ri4+*ISW$orL39B_Jj(diKLOdOoEkgV1UJZmcyd8Kgfhg{5a;Tl_3;v;5m0v% zz<1vR%-l5ZR^y3LpnJdyi}*R{2GrNzw@vL3YDL*F9S@44efi5v=^1g&3;6h=ytzlm2~jz5 z`ASJ_&LI*j^C}=;b6Qg05OkcHwvpmy&+Y{1FoTB|fl<$wG{TSKk9`q{38tc#`Pn~c zBKD`YEZGdZv6$_S6Y-R|Is^5GsfF@|LTZArg-hjc;62%wq|nwWSz)kA6GtgFL!p??o2e9AEI>w4>-bOOq8op`R6pN)#3Jzl$? zzOC)#)NzHaYB};ax?OUxs#wUqIXN8brz=maH1Jaj3X#^?w$-}@E( z7}$aV{S&gAZrpfI4?xCECARjZzR)5m)Ls&^$tu%}hdsgn$8J06?)2N1O+?;ti|PLrN#4hPFDcwd7D6%9y*Py z=Mb$CoxSe`1v;NY@;VLY9yFCD(D{q*<3bf0`~|;ggC%6pZojGv3|a2|VO!FgyL5vl z;|jEw{yGeQ*MM=n#)2Q&u@ZN=vh+()d{h@UM%mwd`LwiAk?_;NJ5yY;+P%~~#U({e z*^JKqcBF<5;pb-20$|0^*fX(aqXS_-Ok)m4lEuj4VMM%nl6nlB^e1Fn9NxjkPk@aF zszJ5t{sSV=(*Dc(2^UVMoBo)-s9nL^7F+2a?mgUymEsBmoQHKbwQm9S_B6*{vUuN& zr|@n<|7%TP(lt<)+Xu4mYCrt@(7hgziE5>R9msLbHLAyZ{T@&lHQAk@vO)&5YduE|ynTh5e z2AA&adaPn7)~j2*cT!v)Rbid5v=2C!>fdFNKWu0|=rar-8eMtDyYW+@&IDQqW2+}c ztOw!-M+EhBx%+&+e7I~~GHj4pNX0WM$-mZ4zM5#y{W(hP`BKA zW}P1|#MXb>nM}<_brW2=?Nvo^MBe8%>WO58!QeX*W)Ec{l*BRJ0=~`!x9?8VmG5l> zf8@|!g*XnP?lS1RR5R0=+%OaGD%1VQwd>!QeDB6~G*ON&Z(}2mtBI=khTEGgQgjCa zv3PNO9Iv|*AbX8G@2{qF=GhDRV&(c3Wnl~IkR_f?DeOGRTEbTw%%6}=FiOv^!7#uc zMbZ7^K~Y2mF?i@Ct|!4XIX~e9Y_}5}{EB;DHojK))^w(Vc{0cJ%*5YdX(hd}d3c;4 zutuyN)uYxKbLxC=QiwoDIjh?IbUP&`v|jW3-R;p0_TvD%US=NlmfuH7yMS!2KihF3m`^qa zSvf$|cH5V>zGWXETXF$2&;dT=7rh4 zqx3gE3Pv0~kfmsJ6;O2>!gt@a+Oy9rnqn%Jiad0VTsF**?qj(qx3ZUiQ%=S!@E(=4~X1ZST=R?wI=yr^mPuM5?8#5giwAW@GAAjRfMmn z`}1!lowVN1ZRr3f&R*AAcX)VU5+b)$Oq~Tl!+rbRFm=NTMkPCoE|V_p_5m1N;@ zllM3WlyY9LZuleZy%lnpGy4iyXz`?Uprc`C!aD_3L|-*IoxUOvaL=`K%}6XZ6J9gKw}x^ee{lS z*?}1#A*vWm=)Y_E ze%ACOuz}49ydD95fzBLxL4Jk0ke33+^&mKMbM!}Wb9c2t!{a}ZA@yzh5Ofi^-FJdP z2U;Pmpd)4&H+nOh)A4)&pj2^$^&<+Qu!c3OHlb83t)Y`(*47*b9u;+5(xO`x7lZBU zkwtDhZPS6r)Fg_B|1;Q(&_0d=+JhKNo+qpu_eiOxvXbOgsH-}5@i|Y#q~Yy8M(Irl zZwS%y4guoK&_%9f>MjbL1Z+@reo;}lWgjC@3U*H~dt1YgA8<3RqT%573-|PaqAd_H zJLQpw)se6IX2?8w@%>`g)O#fxHy=B@i)p4*RkLr8>$Ot`{kwlzjuE8tp}wGKdk#lz zXWicG$Kh{{O)}T=*O+3{OI{F;OOqB#sZLQh!lOzp_fw!{pinf?t*u@LcuY)yMn9f4VW3M2Z1nIeDO(fH)VzW zbA(Mng&;m1Z0)Q%w0Fo>+k2Xi{>^}rTo92{WYd$VP2gq#sX|&Hpm~7kCv^j8HM|iF zCK)7h*mO%q{3(GcGj`c>*^J6bf37{3C&51ZsZ;|4Y75U{-snlWlUrwDBCzHfa8AU- z$_Cj!JV10FLQVB(!7HXRQF~9dst=A0U!Dh@XWh zaiR&I64BRc6UKA!7V?H`iZL+G@#jy)nbgJM?YSv+2X$EUo?&p+6|h6+LdOrn(~A&y9w&+mCEjJ}ex1YnbhG z5;@%1`f`UsHra3oFj`3(rizR#lxgdVIwOT9O7vK!0~F6M`uXBct95om>|33db80ls zeE}w#dm(^M;5M4HbjXhY`K_`0h~Z{8G==_J)q*AVAzAYHAF9C zLd_yjoUHG@7KMf?FA=s=SQ`ZPreU43IuSU|laMo^Xk%D0xqo%loNmw;?>RLM=;S<2 zN@5C163vX+uoMz1nP|!Sg?(sCgMEMV%yDwoD72Z~rbD@wvn{Hyq%|dtBet}J+FLm6*~SV*fOgp$jIKh)~XgkYexs;$GTq08F$O} zZ*M3sG!a4!w)+=fm$sKLQ@;1;Ww(Cl$2eH`)cC z0kUM6+2M3KH;7^uruTHC)UjUj_;VVdpWr!LrY+diy7ATmjvt9X#*By%DUMA#2REfr zFWrVNza%){NmO#JD?B*UyS_v+yB+99koodp6Sc?o$M~3;SZt!<(XWkd&l#aWeqqT_ zPYApE;S(+T2?(aX-FJK3iGW4bM|7LCkcl>~{(0s>t^s_-t-m0f*5Y0R7=U0^-e{I?s`* zgCO%8@0KYacU+*-5jh;n>P|7KPtd&Vefm{;@`gDpi=aD@PpC=>)(h67$@#OU{-o$ul@ z_tP(%Yy_Rv8z#QKy)F0TVK9&o$AyXXMVnD9R?!D!d>zW&K7hcaU+B9_gD@ySk3Lx4 z(l=@j4tdP)Cue{hAWIXCIa+&sF9pV$j%v$H0Q2K||ILed=Q-3V^~Lj+l(6vi#M348 zi)UdoO&H%36y&4TFL!o{zZlv#RS~K8Xg-n;Q}z+ zb|4$*4UvVVK-UjSAb1Eqil`wnP^0Hsdv++k z&nBv%E*%i9F;v_NYVo-4j} zJ76U@WY@6clY_uw-dAahy(nHm&hK0qwu(WhZmU5QT;Q$ujhli~z6#8SL%6rwBBcks z0s6@WT89}cXm=B@*kBRC1 zjmS|Zg^F?{6LYI*AW7MM#V?-SK*3QV*-HTGb`KgL5q*wZnnH9*}t1eSOkT6q^2HI!I(YJhD5LPvG^Be0HB zrbU2C)OMEkE3s&|xCUCy@^-Q*7S6r>%7dcHA$VmlV6js{qX9;Dnd#SfC2K>)dLQrR z`?-lh=MktBC=ngj-GxF@9Rh1z?I(|;vT*Hq5M5X zKk{DG3?D5DoQ;X7u9foMO2@Qv)K5N(x8fcEd3e9PdH_Ul{I8rZX0|{C*hgTF?pb+h zH!0k3N^oDSba#u(jDEcTnN%{a!~6-6OS}2bSk5BKH(lPX=@%j;9Yi31+MRSXuIqtd z?XgI%AiyNgs!7X@jW|APdk&N*^dPjIZ8qM_bAhC>{^LTCRug}0hb&$V{oc>*i~AYS zM18-@&yE_e9FRW@kayR`)G1+Zq1*zNf=Qi*fW7SV?LO;Q?Cu@Pl!xC`3|Od?^Pe|M ziMkEJEH(WEtKg+e=f~tiH3DB~eDAexe36_xiJ9KzrXOIlyK zK;K|vmGlNzjq=m)THf!H8^fNRY{8;X-%yzOH=FX!>D+f06bP?oB|L=Pby~V!tHYbn z*sG4md^Hua__k2FB6fSe7HpPWpRm2EP%1J-<9JqWj%5SJM=M^gh?BOf!e1Czy4cLc zhms+O+Y~VE#~(0(EeQSW2Qcsr0)?kEJ=}WOQpSk{9?tT3Pl*ax{o4F-J1LQ*xymQ} zzOLxn#` z1^N@hxnh-S>b^RIK^4H|K?sDPz9PthVQ1MFQ-J^W%&?qG_PEET46`DhzHQ`(sJN(b z&qt3-2ZHja==|z+RfF{-JoW73;%5tJu%t+iWd0=Zw-Gv z08DAgAAgdMj4gHjc!qLA+`jd$8yBP7=e_9#umhPi0$Pc>O6OZVm-UNN@I)xY#PpgE zdS|L&MA_l`lOcQiDzo65G^?&1w1P8mKYh4~;QrK^vLlJ_DPDaNY@Ek(#pm$LkHnJJ zrl1d`qf%mr>n=C*J7a|ChcN~62T!N#g3FQ{T@F2*c9|Tpo!p|=7)dzSs+*Q8U{I9i zC;$Ry(=~l2U@K87=K?8({Q!Zay4gt8v+xY3W-Hccpg2-KBi!KLavhz_gr5spu&#^U za6{1^RbiOPZq0pg8aG6vMq_Y_lyk?GPLN)7vZxKfdRq}hmpX1}Fpx0nk&=Bxs|eZwWsCvnWZW!2HX`||AtFMfU*H%3QB!x)DP%ymYW*%D*+~uYzbuVom{soA zD$<7Wp#{aYHqtzU1}q_!R-9Z7uOlB`7n+Gn$8%ro8{ZDQSX7&>?d=z&0C^F9>fn~5 z;#BAHk87@u?S{5BDeR7|O|>!peNrSc2Wxkr0jP=PjY9lp%dCgFhd1!O1yC$hw|C`- zP3*?!Wb&u=SdSDrXt_N^BFe9?|1o?Drh~R4Ng0s+r3K(y1c;TXg@34HS;vFM2a)Kd z0W-oMJMMKo(oWzxDis#J#=c;MG+Pv-w+#_0+Px#)D7;NQdzWw?kExaCE3wVyRdDD2 z--2 zo~hl@cTYm1mrl8jb=@a^nL|MXw-fTx2Hxp5S~EZkl($m=8~r}=-nBQXTc91tw3x+u zeD|e^2pa-JNqfLR?M~D*y(Mh@!xD42!2nOQ!GX%&aezP0?rm-By;&K_E@{8qBIi*9 zO$p~at~=_b_<}dY+EJM((5*g^-GECRPPYhgvfMB&hdwzdSC_&K2@(_kjAA!LL7Kp2 zGtqE00b)zPKP`|2fU@f1!fZ?T#2(L9IoY`8me$^u-(2z_ayg;JVkDlHcjE`Ip>*$) z%Glp>O%7(+*BI&)Z}q+>b{#VSN$aPonzyibs`LrFSW8EM%@-QjZ@9XP0gN2gCQ$*& zbfw$u;ddDPKwXuX?*8EA?pD|{7ywb>Vt8O!TB+-7wOAER zRM!!`HyT^7BOD%aZXhlRXxDYu^cK=vjH;y&Izq|Gni z2a`pKx`C3Zq+wBIw&7ry-Xr#HK0cOU8P*pklhWR~8nMBP)TMb-6f-4#GhGw2N|f%! zwRj~omT&6LjPciw(r6sI1Ed7PQx+%sy&J>d<#w1=`$F$xcNwOgb58vmU3VG;-G=;O z4@(ElgGq?ch)w{1l^4x?02J7rZdI%w-C)XxQXlU>MzN zmk^l5y4uvs(*tnpl7C|JD_#kJy2&N6T&?^oWdAd8|Myqy9q2-?*Q&L_K_5dR7i4tz zxT4fE7r!z!U^|Z=9hR$_J55Y}x>OR8A5u|A-6{AM^nFsk+2tLFAo%Qa>O&eF6CG^> z!RqC$KWCy_OcA5FM@+E}ESPJ`D5{pZ)~Jj6B)r5HTRf(aWyCc=N%f%#Owh z-z;D~X|}AYNcsJ6=Q4^AARc64+k$Us|M0?hPaE% zZEpDP-L~dOPmQvzu#GnGxVgoc|3dBlm6MP>d0~^3N`55yUtKfK?fO( zf3=@}A(e1Bpq`1P2AJ>7{*m*A&;rGLkxwoKRsRIv{pV|$chE_yNhIwC-;ai_`SvCk z<#aPm8ZwlR6-x?w3)Qs-E?;qB=8329oG}?0VoDLTFDOzHJH$;;Z)v(pt$$>6>IoMN ziWD@k48+pHHtbVVMX1ii=&wK~-fj_1B?%oK0abOjpl8sZIZw=2NgtZ<1Q<8FQI+1@ zW*Xy}{lh}xB8*Qo)gAEJisBL{&r$vhx@8Fr;V066z0tpac##Ov5rowtex}`yBhM{I zPR(dxA?Fk`KHFthJh`=^WSl{KDT5sQ>m5A{t;@elC*p^oz;w*O>0p0D+v&++%zo(g|6(1nFB2x#2$ zuVd9YW2KTDkA@=8vLJ8 z{vPhH7r6D%&Mq$D^L+(>ymwhRfT}wrVJrS8*YBU#`9EGWxI#s-2MkL*5o`eZ1u&5n zUB1=)mn;4s@9}ge-a(T(eUgyRCj|cWB`71;yH74sXr-IP<>lH!ky7M_LgxSX#sgj3 zWl@rmxo>;rA}Yy+JTB5&RhN&EnvW!VSIpo!-J?tHx4)^vmfNt)Ywwwv>%(pI?hkCY zVU5L!BhV;69el`|YGn*nq(AN3JZh*KHh7-%g#^%P`R{52zi#CJ@2-a+Lp2L2>wo>4 z^HCgVS+4+2B<#2_?)j`f@&I>S1Q`%k5Rp!Jeu1pi! z*u*3x*+dA7{q)-V{A|6rvXTj0R9JZ7)R5hz=~-O?tAOf7eOV3T@=-?iBOrq9)xnq1 z(9maH|N2`&@AVQicie+88=}xC`Jc-xOa@A9KigRd`0&p(-&BAPzZJ|d@c1;@@V~AD zxL!K1n;Yl7!y*5!y@QX?u_U!QADRBz3IG(((jDMR6u}XcdLY9d`RXzSGx3J zm04l7!y5ElvLIohQCjnf*&>q(?aXb>+InwiXZN77f#Rg6WB8@0%k@{`Z(0-Tt|WUY z?tV~w@99)%ixkzOAL;mgbq)#Cx=SR4CZ^ zW-&k-Sm5ab`OH3d3E>TCuwQ!lH=OoG%*@OxA|e62%L5j?9qSjn z4v!-&p*8>90U5r)?Q@9}{6JN(``0NmtqLWYqSj;J7y$?l&OHGRS!;qcJY~9(EV6Jc zza}Fr0}vupHO#GcR;=%_pk*!e43CSm_2$xZ=SN%z2G*Rvg>Z!7yaY0}1|>P4)(DR*EBH+x7UvZeHfxK?vokBUJ-1IimF$7wd~Owfb7633+B zG15CM&Tc%VVBmbblE4(7k{*Ae%UC+X9cR3dqaYcXm{{L`sy%jf39n_29?aEVil+wD z#>_VS>zH_A&Q1Txocl+FJ1zahPDb*IrhGA_;Zm&rM0)~^yt>kyjfLjtg^L82Np-eN zG;cXvwm6rJ04a6OgUw`%@^`u_Tz#^`?s0tIg4@#Is%mOxLvWagzwB=gs$Mi@Z2rA# zwrQX*A0gmt7#kT`jq0ZSyk2Td#Y+XK&}|rK9Z$+1)WLkMqC03zk(Af?WOL(&+_Snu?xhv0_BkcMiKOP zGtSsgn}r5;zz7nj!po)YQ9sq2wLy2gT z-LCqc*^MW|!oyIPMo!`y_0XF$gv4q8kWanLEk+HduUl@%raqWdwFrKwW8E{t`Fpla zV|dlnOkO2>2c98z@YoM1y#XLw#EyinQGo`fz|JPa4o#et+aK!~%?8+v=?zG1X2(2V z(m&<#xr|`a727<+iGL^<`f>1X!O29c6CR6?^WJ={EBCd>B~g<4SP|Vz{%>HO;?K+v zI;w9MTJ+PGK5gweVYcD(2INQ-i3sekbLto-#SQ*Jst*W;Kw)6IftgCKLoPR)o4gvZ zaD9!pZW${%_wO`f^aCKi@Y&4ir|Lg<5l_@*9oEP%_WRS?c6Nx}Lw=UTaS8$Rz0WOq znAFJ9mD7@!Mbp^{W{o%GX-J|dIt-^KCp%riE9C6g5=rl8=yNTC?Kn9&R&_X@ix>k6 zpIKC3z_Xxx+8^l+SCT+CWPxIi0Tiz}Wn0Qh8>;E`5JQHg57RiHAwbd&Eg1Ap54*xl zRke|R92H=`&FWldZHc5cRjdml-AIanlNq#i)_uy7hp}`x0ey(kS5;!O_OIhnd2^3BoLfh=XQcBNFbRk0z^8J7_`+)qqT=AS;xiJMO4Q(O#{vy z4d-Z+o2R;JDtJU%zqabjR%r=Tz3uyb6agE32T_}k1nC2dq(?m1;e|(f40&#BZmNf- zzI=ac{GS@3x8guBt}n(SVzR{%)>$k-$A#*$YTRtj+sH37^S$P&8~w z#a3k>KS}Ud_P|-He=)&QvmiRSQy(q?SbOe0!MXpE+W^#qo^)C!SemK-;P3r)yje29 zWg{#G#?`CQWxXNVZC)p%uSRiQe#T<8>Wg|)r}eOc;xX<1aGLIy65uIvHvHs7Z2#k> zVrOV69;XUW$uqA8_z&Sf25q5R>D_k3pCtL`0Qq`71T4CcyV8~$>c*p%TNHz8WRt}n z=!Ep<;gr+F zqi`Q2UwSxJxo;R!Z2VyyyOf^Ek{rivsO$92XHg1@iX`dMry=;Qs|KW4oJ$uBFQrHb9!Y5nhqM&WwO(7s5BTYpR z1@gQ!=fV)|cXF@Zs*nO#FyV|koxi+Tvncx{RsAthGTd2Ad_h_Ce~npJcNk5l=} z>$&WlddV*VVVJyX?ySuZAros}?2AWZ1<~f25{QH5VX0}aE~YTIP2i6m=FZK|s~eQv z{(1etFuXd1AfIuf#50+78^I?)<$6+S{rSyO6qAw?AlAHxq8Ln&Nac_OG|A2VPGOD4 zgun=zSKh9djZ3j$u(cl)9NwbMaQJ%NnnC~SkE6aQGI2;!e0nT(+eiUlfLe3;Gd6mo z9O%aJym5ME(t^iHjokYVzbF-bGg~*uW|(wBEF)^fKwtkk;UE%+^ydq2grWFu0uQzC zT||O_YbZrpzE2?Fr5HoVr|KPPnCg^^iG|e<04cIdN~FNx)1S=e01NmdcXY2EquK0x z_S2%uY#j4=TaX)IgS?TT8zy^TIFJCxX3LYpkoA=EvHhgTmY7}X@V?eAiZ38#y|bRCb%q7y2;S!Y zLyN`4n6dW1CW96{E)P8Rw9{3J38&mY2P5I-lfichX(Hf(h$EG8IG+AcaYJ0QLC8cR0J=dO{qSx_+N01?m!IE@LlJ;x z`#|s?$zpvFaDBEA8!1EbU8*5Yu5zU#fU54Q6T`!&L*g5)W(%Tuavmi%yZarqp9Y)< zIuzM2!G2e@I?N`_wi@8$Jtm0?pxc#)A44m8{dQ+3_NO{yrXRtgG-Q^%~{aYb$> zgoI=Eb$ZJcl$u1(f|A$QH$-XE6s%y?UYzuGuG}Sl5QRr@^uWmIFo<)7tFyf+cU2-) z%#B5kwW=2)J|B$o`3(89&S6$bk!%AgFgqfhBoXvYm;!?S%Wbkf1Lo;M;zZG^+2pV7 z?2lb-nL*Zbw86E-UiGqLJ>h^s@@c=D#(IvpKaUkl8~$s1`0M&dN+7;VB7YwBi;PgG zeI*|lK7#wbO^YEzeoL*>)%R`vLntdydZKGo5G==F%nn{lwrC+zRI{r0morrUDjYi2 z1dUDKa;1ZJl{LQFPv1%lAiur**A4QmHqUWiV|}KyXkfG^fJTI|hJh8lWOuACDw0sA zDKJ53zd>`?OSpKBu;`uU2m3>VjNLLcNGqZ|GgB;6Y7>&3>Zj#EQHhuQVBn~nk__$K z>we}cC*sJcmo%TgFN~McrBER%SidorWQ!^&D3GltpXlB5%ABZQf*8676#ZW^Y*-6q zOyj)x@TQ!HtUyo2UP0lrdxQUttU37shMJU8dPJsRz%Iw3Pj~MDNo2lv;!tsAO^uYX z)dP-q>Mda%yW_D|GdY}PMG0a+AC+cPm=f~TiF38yKNeNn19cmVhy`hlByA#8Zkv}} zo6Q{Qz)T{P<$R|b^&uLK^%(fWwMwEIqXKz*F;hsm9e&2(X&3(6Y6KHKJ6seJe@MGk z4e#`8!b5o|vGjF4V)RaK$rl^`$7skl%JURPY)&h=6VnJV8=)%ayuO#1G}527^@a9g?$ou!}^-acIx(Z`J1S;&Ah zLes6k=C0c(F9U4dt5LI5zRK`5!e8fM1GScxp(6Kw>VHg-GR5bx#uf67_4Pt|uEU_R z2)ZQO==I>B3^Mgs>ahF3IW89lz~bwHHMbF`YW_*7tguk!iK}t_v(!B&a|TD4D>AVE zcFCh~AdOoDQcl1hd7bm&3S)Vbz4h7Z1RkEShnkWLRF%(*SgPd@b&(km=bQDJHdOp# z4LPq~#^!$`CsN_CdjUCPjYp)`poi|t72|{H%Lo&T6a}h~?C3jXgLShWiQZ~1E6c#c z4W;?qM-h*g;Y7LThOKUGpZ^~VmhVxH5Wyd@{hZS8?kec2>pw*ndyr)$V0VTI~m|(iQ2>>Fz9pb5r4Yqdi=2v{|Y=9o+GP1 ze}VLxbR~|(NUE~5rMcX3x=YG!Bily4LZ)Z>;5h|5NrbZai=;%(7V$;dGhWYJNe7N1nu956Pv zire=&i#4vVB@mo~*r;TvP2Y^;(_FlpZH+bj^ zQ^5tT9A))c9qi^bop5rhXz~Zs9n$KsHZ34zbq`*lUTSc6G2^a$rYToZE zZglguX!3Ue25K~AN`9y-X={3N9i^>jW8%Bp%ChBx3p{X_Xfk@+76M-+kdHZW(>`y! zgYhBa-UMQ|R9(#Ax1`UxX0y|;T@X1wrZ8bd*x*F zhHz93R90r06f+$4uZPoyk4Y)0KzH%;6f#p#yQwU|ct+=sK;|X{>V^FUxFBN>MUba! z4cByGfj^)>A;71W1$C}}^(d1qk0~|uYSpC$$}1y{f{q0D`=x~Ik>D0)-b~Qk@!iRf z)4e__YU;^@ddbUmu-?`sVTiB)XEN+4b&8?W8?80JTkTZh$o$O>dmtPcs^n@>OHEAI zS7!WuPrRO$LU>8Fz|P*^A4&JlR-0gw-kq0vFrOG zjHG=ikVwIxd9U^UeryUBn^JCB#ET4X3x=lCd?)*VQ|Ol~ZMromd6LPwM~UH= z1SJPO6;J2p?{wvlc%-dO(UUJ%+z9kMU!q&z%%*x^sY>9r!1kVjhb`CJXzw3jFOo1! z4_Y`_%uD9&;2|V`PQkqK^2%mft~BzX26C#f6?}*JNJb*hz*lwj@UfVpA2T&K<4WV~ zLha@o$67u>EDMBKB>IOGs0+`FM(IHT!4*{{L{Hm``_$^Dz3 zaHd5X&4s!U^FHRPwtVSM0z_OIDY4rTKWw_Z9K4~i)GS-(Z>mdshuv@FuK_N1R4j(J z@rc!r&OJh2UJ;o402Bi9j)3qs<`GJoPemh)=s^J0!vo;R#!0*F%J0qtMAfkien$Za zBO=1F+1adHgYBt`3jW<~kP;DVEni9N!wdGyd7BLYySXn1n8;T`?i3?@5nGn4Le@EyMm1{ zHI=YTa-~kE8nGDCT(ZL9IK@Np2>+fejt3I9#5xE3_vhM+?w~g zfBMOr&s{GfNDg1x-l)}@r!GcIBytD|hhUdXO|4j);m*>GU;J@C|6|UcNj_H-J?GRS6ug=ni%w4)p@ogoo{55|k>)0k`7QR}yJ6-> zPn0WLv4tfEWh09}rZF4sONO$_cxg_UDE9pR<7C_cl&`16oKA#>N-!qu$9<5KrdLdy zrGt;B@Rn^{=u|NP5kVa04$hbnIOZ^39I%T%OsXQR0~%j(_6lgo8PB!={RbkzRYn1p zr12G3ZMo97nE3eqrH6~`n3$Np5hB6tswxSXEhi~;;NR=oyv@h>fs6-^rCuN3QKj1doZ+8@qU+M3r&#c~(AO znW{CNp#?-lu+E4=;V{TW?d)P3c*kU;4p0SreEG2G-4*Ft?-&PJUs^5>rE)T7-vU`B z=H?pYqWkT^jn1@v4ce9UaauCI0ul1+&@=!5hE57b_MyoDyLPhP+A$9Z&DLmxgpu_H3^pbT4D}!VmnjvfA+j(R4TrV=w2L$nq`f= zqI}e$R5S4A=1)hyL$+SQ1p5ZtFe-f7qkf6FslKT`7LO0JBMxcWqW0dYcLBEyJa?~* zUg2O2#mkFGMvg{8!9gyXB3x$^FHlRDILg0e!tiQ`-ESnTF{aGiUStsNcw+(ZDl)pxEVdO*>Z1 zL{G0d#CfEKC+famE`=q63_ZRR`K;4c+t}0;VBvb0rkk|!&zf3Vrn8z3i&Bt4|w7xgo!5~ z&!}l}`);DSWahla>F**9ns%|;kX0DZoL=|WheeP<%IprTIXTA!G5Uk!jEA*NVuBTG+D2q9^y#+r$mcf&+& zoA+^yn=NKY#g6`C6ZmuA4e*1)UA{PkU(l*0xWu?d@8FgeDiX3@dF)?FSjIP~2mJ3J&H~m5<^o%)GzIw@i$}!i zwhtFgc3aYp4HWZjN|Wb4{27_%{1KTNtu5c7vav1Njt|1#*U4(Q+2PN}7TVI|LTp0N zz_>pGOmrbZL7vXs-qJ9uS) zS`r~fBsD-01;J?5T(>^X@=kp%_`Moey0F3Zv_N=2f9k++OQajozRV#Oj|35s=4<2!*)aG#9`BfZ0W*_qsFCv`{q_K{D1D>ZX%GS z_rlv_HoYL1=;7z}@CJ}+YErBYDkQ!m0|+{ckQriZU3qs#O(S~iYhrlM>%6B;ma2=l zMc$0hQGlyzS4$+@;7w@t&nf5Ws>L6&h&8R zVPNtaDWJS)r~I5qm3ku5HQ1yrj+5rf5Xq5|x7Hmu%IF5R-Wsw=Sa>#8Gw1k>+kRNp za!^+<#z#1{l9^$bvtpRVBMA2*BvbciyPA*IX!v@6#bi7|`8F?0C%`+*7k`0}XYYGi z%*MtBHsO|*Tgk4ljP+WVWFha~r5B1T-_$sf(Mr3Y3cg*A0kk4}{_y1j%&4+t8ch3F zu2&7-jItP;8!q0d9sWp)NN_rG{ZDOj%!`Rz_}32ChRNpoav6eExB>2?wM^5?s?7^N z0gc5bc!QTB|BtS}49jxc-v8m7?(XhxknWI{6p-%j?k)*Ix=U$kkZx2;x*H^Jy1V>e ztk~QA{XNgC^={oB2lJY9jPpFlXUM-I`6zB2%h7%IJDKXo@N9G?NI>v}U*eT@Hj`0oGEoH~T7L1}hDkj4&7s>>grXT=}r@>=Nrw!y8|kNm~B<$)-a_et<-+ zp_bYy#YbC|@~tCjkUBuWFfzc8ivEGJsG?XfGB8^Z@n{+bPM|!*^iAeD-y~b!7sO1R~)`+Hr8~9v+{a#>t)- z_n}|QjC}evBvBHH$h@+XJfD3zVz4&fXab_?`kn8z2^F_;=z)j=cauR5mD99e>`?q#<9aQlXDW(yGIRSXs+Z7?UmP^cV zuDpQz6GT_c0Gf|`#F@aR@(Lpwah-_TY@ zd{kD_Nk*}pws(dBEe!DD+;c&66zUFR;`jBV0_p$;i=n#fxiumlT=)3s$B&dbv2yvc zJo}0moq46*TfKi>gkpm(_m*g%BxrcI$fq-Bcuw?lfxYd2o6O?wZnf?Masjjc>D9sM z&1c_t;KjS2Ctvx6`!zc)1vz|$)Bey={$tD<8Di%XscE#oUR|k`E8a#+UH+t+X#GYW zUn!RhF=DWWr%TF6t=kzDxee)vB#x1QVM<lfhZGFN`(whoKLBn656cbK!11+Z#u2-<3<1wyjkTDlMtAopl+!OE zxSVS;CgjF*;iN1Jw9d(vTEL@#P>i@|Wns}6NV-D+wpHv9ymZXDjxz;kk)n^DppX)I zTiY1O4CaF&rs}upb)B6Ch=@qr0H?7u;-ad$TGHEG=h?Qp12*3|5;9ij-2<7!NpI** zFT({D+1-0|%|axaVA*5Ksp63!=%xW+$b=3cJ^n60%_e?JD=V8e2u#Qrl6tMDwYKBO zCGxIZzP=le9F^odt8GndS~DR3{j}Eg5s9rGz27@}HZ6z|OP^*;@I+E4@^gG{+_?@; zx>@rz&@duV43SOv{oc*1)NL99tRZ?pT!{C(8#erLMxLvv`N@_3LeF~}$0vI_G>Ash zk#kyLt-eY~8CvJ}X{3zV{UyOUfPaH!&2fA8dI~B>>*w&rj4(!pUad*E-F%I>$lai_ zwUuv3WthN=>R=5B14RmHCZcZQBNLoJ_lCHO`8M5crhI1KYUpA>0R43PIWsHE?0C5a zs;vJFJU_+9$d~2hs{38WHiY|Hh9mAlwC_hUY-@8%q%g>SVDNf9lPxFJ1#0$%l z)MJ&}l!BZrn2{Oc{rK=`=urD!*p+O=;W&+EWMfvC393qd2{jF3Xm5mS zJ09J{#U6t0L;tQW<`+bttW>UUiEh5N?hpMaXCTB<%bHB9@asAtT>PtFyMjp;&$tpt zn4{+)MBZ`7o4;gee0abxSQxfUP_Awj*Xs2UrfJp1+@kt6z`g{1^@82Au^e~;ROSE( z`19LM@W2S~+9wr?zE51xw_063U&c9-l;TA1C%P0A6u$WFDHy8J$x4L$zOPy7H5LoY1*!3yf0w+T#wd`AoUSIncM|`*lH zd~ZCoMAvCJ+W>G|*BtRWRnYBvh(2zhZ39!-NqR1W-}$Q8Hra`DvKt zz>~nS728!Xw&U91RensjyW&g4!+8x8*+ByM=wOIvX zCX)2NQs{hu?5#pb4RX%tH+vH5FG#16#@kxGGnccvU9>NR(k-I3+lXavFp1AGupTC2 z^WihIPJ`?i1cml&l(%N3PFbt^CN;f!gh5G!P_A};+{D2S08&i_Ae@8A3`tj+n?8^& zQBo4z9_|CVq)G+a_3=wP|M~{OP-We@i+&DyD|0v3C(e#(;C*{_<>058n~w7nd*QjO zEy$D6*EhCq+bTnkTdect*6($!+HAG$AF0_BM}>&(`ZXWY*(tl`rv3fF z-A@L*^(p_`qQgl+z`0LO513`}0>b1*-2v`=gEIYi%J~77#{OE$x)GD{pxYu+OnT3>aM6D8 z0#u!wF*Wi4`i{4EOX5xvJm_*~EbvXE9fMYo5@djB zKPd%Zo_RyltG_n}B%h|?A0M)?FE=||mS@Jweg>P;^3u4;mB^f=OxJ9Oak#o(nC(wn zp95o+!()NZYltQeiw!T5B}-o0hAaHg^C|uw3;q<-EMy+uHkLH{Mm>r!06&pF;x4q>zYk_3svuqpb$0-NZU8G7G zDTw2B#3dx)HoD%-={Tcf;L9#FUM30B21?j*7UMTsq6SdVB72ECZ{HSz*yb+2-#}{x z0`9^t|F-wW87q)1xaBk% zza2x_GT%(zuaNSF_o8&gM6#K(uWPN<(VWwg_lLGX14+3Xb>-}u@%tqp{U6(p-3f<0 z<|8azB2SEM$YC5s13S|O5DPzc)rYbdKe{2qU z5k1xHNQGk4k4C$+9T^utH!me|K0V-Uv*iui zy|1FWwZUhh~Ev%AeN&iA%TH0dPjaZX4OJtP>$~q0tbG zTnHefTlwo^H~M7god(RIVF)0zhY>&m&4~xssqluAwTWz_uD-1v07A43L>20CzgIGB z8ZS%>19R8fiC(aVz<4eU@dHRLS1vJCw?k?TS*-BJr{q%v5ZH8#t*kt%8D1&{wHb|j7HWTZ#JBW^dD z-%EpHyMXFF$w=}3`3a<1!VV(qlV*8NKI}fdd%PMhLVzh`-|6{QhaZv@l~4EZ)~^h; zPuVg2|G1C4X^5v3q>W??KZZT-6oOrid^y5A*3#QC`59FxX`luD2Up^;h&bH@S9o2| zk!bLh<*7&LH5uf{IjsqnH)13(pEJBXRDkKszXTGcjsm zKS%jb2;%AOOS0}Pit1ELeTp35eb}OCi&&1Hxd8hH242jzjd6n2$ECIBI7oj|VgfCh z{+%6Mm}_{0Dj*PP{JphRARGeWW+G)0X^?c_u zKiIPcFe#C8Xb}i#F_FD zPZ%dpMMS^?jg47ko5kE>$Bp3eTzm-^yw$4vT#gP|L|fPWzU?~WJ;mL^SO8;~QihW7 z)m!%sKVWG6)s|p+Db=QAThDep0^`C>GnX#vQ^Ti*u2z z-ZmNY8|-?q9SU)84Wm4|{p*>fkk1GE1Hp^4LICSQ7XOhGRjnRKz|6SM)YX-%{knTEF)PxnTr)+3dT;uk zgiTAp@^1Bi?PIY(ji4hbTAl~J;kax`dXOY1J3?jUNMe#Mvo~U~*;gocrr1j3K4`+| zs}EO+x^I~$K)|wifhZ|!D_E)uDMc4bmEG$fIhKW${J{}6($SybpHS6aiSc1` z|N7DqedOB^_1D$;WcZ>{k6Jc>{$&B&5o7-PQdT)ZmJ6hghJcX~2nWqCSu_wr#Xwi6 zsLzPNf$0@1{dpiy(<OWTND-q)F?=$1z}^(bLc%r-*)RkmHK$%66QHl zcrPNtWMy4pA+|X!cC1-O=Sptaz`p+8#yo;F=Ov%9ESv?Vl;5wYuECf3uKjK&i!d(R zoQv#cWb>D=fC{E2b;Y24dtC@fSl6BZV5cPo(*}9Z84iMNGAEIZm5Fr}Lv+YIgV{6? zD~G*|Z0i2%0Ecti85lP+UaQ%vs+>B#)D!i;M}{G9vR|SF%!_Fsu9Ifx&24~%o~ZFf z6Y{h@L7N*RmBvc0L@6Sgjg8Ioi$L*8U!6LXRtb;?e*Hq%B>C_aXc3zg2H6e#uPxk>1^xP-Sqo|CUc+>xjZd&7CR`Y%rZ zU0bhr;H>9|wTYWMz$cT~Sdu^b}2c<}?wGz|ZDkkHZBoE_sLF!6br8FyTHf5ML?y)3f$Cp*iG0 zvrULx_Pt`>9!}BUYu=(D8jOPe4b(k3@ahxgJ6l!V8{L*Jyb z=rRI47hGZr$5cSp(4~+JiQ%$POk=8Q*6R^!b#~F_J4^!TyQpDr*(Beekbx$35kR%l zJ>mjhoEVyVjdmF?5$jHXvo`?X$pxDY8tJodb58tpjr#zqE7V6rJ#h(-UUbm1VUu)( ze#s_n!2}Qz)+P1ciZ7+g?S1Xf$mlV^J*UUw*l|@1nHz=+sJikkK)eznK!l>}ZX{Gk zOTd})CqI^CJr*;y)c`|Nfg}yq*IzEAM22DL`u-%hWdvxy$RP6pI9vkov|XJ4AaXox zw1lico_Pk8h>y9JArOljFdh0U^}H_YL9X&N6^p`T@q!;pWPKpD5j^TPW5-#WJ|8e7 z!5#HZ5*yJ?0ThpqLcsDMC&o&3mW%OpYn$>3?-8Sab%ASb;Ch-uVLP=@cYMpS?L$)C zJ?(&cqpdk?^@phOKNl8|$G%>eT6+IPWPK@mAV#kD(QlnA$!iTXS44h)$pOvwm0iSY z2x-{RAde2m=}2+AuLjboMB$LvxY;B1JKkJAyf6DKg4s)o_&@O)*dRz^Ds`yj3XVEz z{P)l`;a|CNCMTO;M=vh#>dZkYeLk8`Rr&=%DaDB*ZML|M!AYA;<=jAEYQ=zImTVygKy%d{iKS!*7L9X_mT|A zhaPUbzE(+4%5GZmAQF@A5@310r4vmcS!!aM=5tu)b1$c!zB}#f(lUzIAa9p>e?cdD zS8KP_sBg>dzK`wxpx0oPAmBRLbFr1AoI2*W!{q|(jDp;$2x;5mBM|bcS^mBGfKlG2 zrq6|-xwE}}42ym|T!7i`cRol5VQWAR0Il)1+b>4d+1mEl2FXaoxb>Nt$fyyXQeTnZ zde>kyG&YFFH8I)LucZ1?0R(#raK?g)l zy=#lEGRZqyh%vb&+QE*S)wv>O$Xvy+sIrH4@9H6-n*ThfL5(@nUd5dCSLtJf*xm%$ ze&-ssR?}|o))eGc{eIIjm@UBk;z!B>%CTGY!avv4AAjF}RH*wH$iuPs-7@6Sqv(N% z{@1%8gpKcauLOks_{A@yZmA>Sjg9BYU@oZYngLX2W%b9|U!{c{>!@RpZw|SPP0*UI z)0}?%?=#mOq#k51%vP}Ro`c&39bPJ${XkAzRhxDAfM}vPY$1in@uEeQC$0(OP*Kj9 zT}HalrO-;HEOvn5W2%(AjyP+jU0D*IO_S`Kun!7z-FA7ugg?|x1_?e5A~p~76=9v2 z3@rV4YO>tqBa0RN`|V~o!u~6EPy}_9nVAXU8KBjdrkue^Krutd(BACMl*{?9Q_rF6 z$>Z_Vi=rN3%m2u>$)@xQm@hF9f1??5*ZF+q2)bNGY-TH@_~r;i6kDF}54gWQ>~eg@ zq4Zx5HXQo>d_snO{Q2`{G!E0WagzHW>O%)xq&&IX^W)t<$ouguSC?Kg9INgnb5*&% z9Vz1030YWi6T{X?|Dqji>}W&qO+0XHKgN;Z5SnD4QXPy>PDTr*)cHT~@X7gf(@K7* zj|IYX{?4M}dI`&TeWQ*5xW%x1`HT0biRHM{oeH!9h2Av9Y|K>ZW(D5qKGmaGtt8!h(tCze3bA0?hJ}1tM?E zt;XrHz}?J;6Rp*D!s$EZ_qP8YrT^!R>ZVW+GF=moZH7C&EJqEvV9;!D=n9R1PIru; z=;OJZk^y<7DiPDoEHRnOI#Bf5|1gdT3wA>;btTV%+C7vszICr=u3p>vNRoXt|KIxs zIDh$CIJ+XGJEnbT3>or0M!C-!`RK5EV(g3?kJ=>1^L)0j?@C3XdGA1c*nDA>$$~)$gF&B-b(6`hZv-st?dt!& zS#)9ifDKmPv`UJE8Q9GR(A_O7zI-`?ygOnDyxDd;qGr}sQF(8jTcO+3=$p!Vg0RUU ziX~a;i8l5IPNr3!QyG71F>{f1$+9m1TBhaq-c$)y*gf}s1N88iQW&db0ejF8x!BMf zmo@(zn{-D36@k(O5bf~xa6Fk6@0d$^B*^;4$LFA(%-UhBwOz}EAWYJit5&i1^Hj+g zI%FeqwUT}dGcPZq%*@Sj2#jM7!B@={sg?@gq1oy1x0a-=WE>{VKhrtXce{18v?71V z+un=_uBv}Ijxu-R=Qh!nA#qPmeGN({r<>z&69#MZ?hGqU$IOL6c>#+J6FTmN!TP1Q zH$SZi{`%zkVzHfggL0ZOS9{1fd}3d%w{_y6F@-sQ_7Y3pJ;u0WVx%<~Wk zaoq<=sjHh-H_5b~aJC6g_^XepR#i zPf~OD0r58byP9v8BqwQ-6ElSjw98hXOb&So7&+}1k5p-|kq_bqi!ll4Gzny-lDHeQ zx~xaXEyg#;Jp)YF`DEy}7!Y2BsHNGZ7`=jfnl^@!?865lK~{)VhliGXiYpJl+ip7D zb{hEqe6|#WJBxyBE1>-k$jARF5Z+k=v2c?>8S<_U>AkIl2DR|XFG%cJZv-}>L z(FPbcC?q64Q_@kySL!p5O*^D5TG37QMt;z9oyjGdk*BM4!7hx41B}ZvpNmLf8bFSO>5gJU?AaHkxF2J& zu;kkj$)y~eB4qT6I*-r*z}&^>cPWf`TjEPgB3zFpuFSfLb_7^D*oQw2@`T6g)ZzPj zw?s~%>AZ!qefq%xnu1Nsc%?}#zC`v z9=XCJZAW_Akv2o7=JReLB|@65Ih?ft&~yaXEBvOF9*!)_?Al2DSlkPM%e6&YxALX z(;@xY9VB9~i$6B*)Pm?+y|Ir54g`{=SW0dxhRWtH!WZD}@S?`XVpH9;G;?$ZGt%CY zFhu=3*7&T}ZHN8To2xRopT#)qg`|qm^cgO$XP4}5Z$4qg2)G0U#>M;8GQ)Y<6g-?p zx(_LluJ37iC5^MLXndY1&2??Q)&p$`=U~A25)|f7NcKogKTK>7pdlIp*-%oH3y(T zN0P{tKZ3%*w?E#5z3zqAS2VS**jLk}RSmU2eM5Y5ey=)3jMl9nS?U_?QHF+wddDRP zBhcoM=3lXTeF-x&xwxSe&wAwi`9-W~mU!atlqEFXZf>ek!F-oR;JcYvJvDUT3+jNkt*W$3~ z|5Olgg3{`eKO1V+nulhyJ$rP*!JhoI8Z@69*Kv{UedX*89|gO(vZ14^yJAvFbl=yC zOx%`o?Bje=Uy}21mfC9ibJX9`bG z`=nbJN;UmVrueRl)>jc5aXm7~OH>G&XSc$SX5dn%WaAcB`uiW zxiD8?D=LVdyx44>?P*l1J9f0fJ?33}SSHvnl-GXU;kta4E5<7z7Px!|=4d{!HuU@+ zIaG=gA30aoR${_`+=eh`1h_e6&wL^qQ3BlztF+1cBs`WpC4 zGoIhEGyQ}cFL0JJi26w^U|>Os?JKuTC;7>EkQ{PB#m;l}mO*WyMq#yVf#ECs6zg5{ znj9VM&yLEH{Qr@e*H1OOKj=17FdyMb1yU4@3SDl0*EKb$Xj}Qg+YW0@ElTO!AdDo5 zaoKM{jd6~YnS#$7l}|zlxl5omub#&fGF>H#HuA=wZ!kVUl3NAht$3PO_1k7IlhII# zC8EwF^1TiJ#=~9UCN?4m+zBv*NX$ZLz(XC=P2acn>=WyUL-G26k%cHR;*}$) zT?ERX15!bD!T^QQ%W%KsIZW+KI>XCfi@#jC@Y~3*`7CWmH36%vu6+$E7c0pqD}`Sg+DK( zRFb2Hn{x->cn1LM;hY*zlE`;^WRFGSA6!q%+h(uLe^+?wX5BnU`3rRj;m_(P9pm2= zwdbBEr~aZqc$9V#MSXwFkjKLHpJAVuR}*N;=i|0jco$u*x^QW@IBWBzM$_G>vjs5r z5O2usCy3=PL@HR~BC#{3;!7z57E%t#NfHrtk+M3OaaQEHQ*OMJ+`rXtl?y5vzHbx(5HJ%Ki-MZ-Uoobpjt^nTeLh z`{(a^+LxE7{IVj|N%WQ9RZuLXUR{RmL(0PjyBLL`n?msL z@&7__nes4kLMRm`eECU%@MsGA2aekA!F1=4@X=&y){87ZK8CYP{Q3|KXEJj_0<&yH zrm&fxO*DR(Gg*oK@4qPjgegBRr}$4oXvNZa+x~0VVJX5i86iTb! znCvwdV#-;^e3b=3G5%&Ip1Mgnj_1Avu~+XL(Iq+L>^JP8B;NVS@#S~hS9zBZ^A?GX z3fnhkd+c+l)w;GZ>vbvx+yp8Vc9Zp7Ve~VxY@mzDKp@N4F!dFC`+7fMPIlzU$~wi) z2|+a5<;Tu|-AB!#H|CEEvG^~1PdZSu0$kF4D`?{4WfP1YLdprakL@ERk1ffm4GgCRL`8uSKr95ly%MbP zCc>85Hea?sBFQaY?V%` zy(G#H!u7cI4|x!7Cv6Ws3z+|&j2FENHV%@Q>mc`WxBud9T=~6~hiZDk)@xUqWmphb zf^cf$SDYVeldqkY>|ALlzCsHtK1*C2fG^QWNToTqI?ZQ=h`y6gG$ z-E=5-CinHZ{3PDhlk3VX0EshD_{CBz0+mHwYZ@>+n=2bVf<8X#IXwYp zmAk+2WqiNxs|LX_YjX61AiDbU0`m)@bHDTU)U-6qYLWE|XdQ$+Ts%AlfE@vdKT0=y z5XmP;#6x4Aa&on&nXIg=;!jPol9HjF*Wmi0u})8=b_S*%^Dw3USOPTrPip%5RDzzz z%b#hXVD8;?4$s7X58^-%AYk2Gx#hd>9`rk2{pZp~jetD#r5E!W);8@Qq7TfK+W+;d zuR|t>jpD#$#_88Gt!XiFHQF4zn=kPZ7cbwjgneD$XVz850$F$md1LQ@Cl>@V3bois zeS%;qolVXPdP?9nV|JXjOIwuULRbAiR0yco5a8Lt&B1P9Mn#kn#r+C1T(#%WS>0R@ z{V8{)M~S=tw0ju;Ug;uX&Tx&nkDV3QPQi$om8HmAHABFz@HXbW5NC(MCZxx|)R*oi z;s^6}zjGTjskRO3LlNrn=@@IEOychPcS4I^!mawhe5Y=Z8cmTx}qoRq~rX?xV%G>N*`xBpf8B4fjNspFqfjx_dp zG&@5ZX{5vr&KApSYjw!|KqI6Ek7ctwTXb!4_k-@G3QJj7WGs3)ZGJh|RTQi3RO>Q) zv0DB)Gh$}3DTp*V1#zE(ETJn4kpj*@M+C^ zq8D)Ov{1`U$<{GLxwJ8xIT&S-(8S?caOx>-TfPR+aDh&@&~_N9ja^yq$cI;dhN1K00i*YBERp5RI6>Y+i&%ONh|I~YYn4`aBT|$ z=)ITK1T8z6w&sJ0-w{3Pe&$xWdlD}^91dUDb@?CY{w`nN2d3!??sL6*quyP=@xEF4 zehz%Na`8#v)K=B_h5Gm;V2F~``?$q&8$d%P0Td&BVD%s^3`EYV8<_f5t|saJ?B1v| z7_#kZmfw92y?PtawgVw-P?N|W*Wu28a*dT99}||OzT`0#vv@Rsl>=kLlSK;Q-~%8) zBv3V2bUxx3fOR}V`f<3mb~%Q%RrZAkaQCp5mk9X&9QmUrEx>lvEdcW~`#2`@Pyrde z(BJ#?CYw+7g&X82o%Iq$wYuIn$OD5j9^CSXM6*9_o)u<${Tft*Y_12m9pYNmfyrym zZUk2ms|Zytz5L4(abMZ`7l+u6Q2D5p*f`JyDReNyEeG&0r~m9_m@0CY>TgdSMuRfr|%G6d9*ngu0sd8!`jlOrb)@Esk>F_@oNlj727ww zOZ?37Dm4$C#?k_rST?MTjFa1XKaSGr2tVv5e-v;x(%(Ngxa5t#%ec+@E@cn@wf^{D z$^S*o>1N1B%i`e~t{}iFWIs-lXc*Z?cP|v#PXgn0Q1vM|twrr<2teQ|KQi|_2YxEx zQ7uAWq_=LsaN&Zeu7=)NKA5V!eHu+j0tkd&5dhOx(PKr^xWjDiGpUQv}ICXNqv z^2hJ}_3S1>63YxX^kpu>g>wY6--pufqzyet_7%QLMbYvYy(lQ~B9)e`@$Ze?RR@V( zOwh@u-Mq7niA8;F{#L0|B2(njl(Xeozl1Dewh(7~dcCYjtFanNDw=a5;!T4mmP;Z^ zUhC06icjE+;`8jYQ?dF_BMtn=Nep`(h0KvL!>etNpTUPW9EG29#7nKFs!U!}=q%9X zN|kP?BC!Df@IBH`o+5P5xbJ5*$tWaDNy8C?pN3e@hlYykhT&8`ue5MMH-~zrxV7c$ zN`rof;Nv4e9)jfIN@3nfKRkcMye>gw48oF;#sq&TtF0C9#SqenPQCI56SLG?qNWyj zvjkbNpMH;FNT)kt)}#IUwbEr7p}y!9FGEwnhD%1*I>aD?G)){Tx`)**|F-+Y(IeKr z**i-K4q(%QxEd*+q-@eSIz&!tYI865GFySD#9KFfw{cW)QitI!0ZI4+^j>2yQW75I za;QKC-3P>4zYsxGn@tx;8MAoephBXi-y1%&F>$`Y;Pyv=q^a0M*WKsSIzG0{E6zch zhK9;wR8U&2by15jIHy}j*SbTl=~!7+JURX3w7V}@0u z7nx&9LdtIY)cHs2JBL?rCb?Hz?tNq4@XCGQUyGFFKkr+=*~UgW6^9=1jU7bwD~`u6 zoeEg2WSuVf12Yy^f;3@tzr6MK-p-j`4JqtfW^cRxj=DafeZE(%2a(!YIXF!EgLfda zVNNr0nhgVFUeGY`o}GZC%SWc$U~rsm4nDEH00^@VLZ|_`cO*Z@$~={X#uI%mdPCyid@O}qBF4!d@{4xHG{uFYh0p#V8Ma43YLTWC=q3zoPm zW+9WT@!S(%2ms>tBa{fm_hcs=*s3OP(IJux8^XR}+j zV!Af<1y9w-ul8T-`qpSai13+hNGC(l_}#e=p)b!Pz$vruZfNbAIyy;eozk>bb#Sdc zTWtp5?W`2G5k2&6S`b!Mf|}LT;5?NQ_PA)}14#2py7dC|WFZVYD;Am+9G>PhDDNoK zPV7>2Mci?%#(7#!v(>jP<2&O-5cPPGlVTtm#B6SM_H z8&?`TmRd||H$o*93ckf&Ln9@`EDR1|9sQibP0EUit-78$RT=*S+i{lplz!#cuV0}K zDS!5H63k`>sd)V2sh~R$hu@VEz4xr7xdm4?(V>~7_l_?tu|LS$cuC|rN~LI~?d?g$7~7 zB#MJ43&q8=sKSH^Z0|?yZMG7#N|tO{N6Ef!deU84_jo!7yh0lmQb~T;5J_Ja8l$P6 z`t=J_SXrnV1to|L6v$cIIWoec!}c7fVrXzPGV+z4HzW;?#g(9ISlg0R0jXPUHh9hP z(f>4V(A9dT6+`0t31oZ|vdZX%UXNqALtRW6Q=G5mupKtxX+VLx!9Cu0;FpR zKFfoezZNoiH{9N$8NRs=zjcx%>xONwz9~7)C(E=HpZ97kAd^}V(*9n-8p?Mp^JPN$ zTz(stfZHb>Ip&Tg*-Db{+JwO19W##oRY#zT=BGbDq2lfWt?t*{l2ntCcloFl1s@0` zem96L_c8jIN>|k_rbRxN!QZz?;^Uot{>_dP&+wB#>C*}Bhw&fT$=~(@dZd}vXb;4l zj_Ky&;pP`eQNpNWPmd6w!zT1iF_vmpHJ2y<&V)coLLBgu;e#jQdjD(v`=|yVi+z%0 z=6^395mqBF-2Fa643lCetLQ#wZaaAbYkQvJv-w-?f?E^kFuFeVX#1cj$U9D#(X#Vj zi=Nvf`b6eP#9ui1o&2HRrXd)wQ=`DsMp>dcyJo^(X3)ApS$+w8^>yu_6TH)Lgg8XB z(?`R9u$i?0)Lu|SECJ*NT-#-JFJK_R1@Gl1&$bneje7<`TS zWeuWaRE>bkCSA&P-6&-A19BCEP9D3T93fj^t7~B_2qi}V;X4p7%1h97xWkl?3p9LL zQpVsUxpLBWV!#g!vTd7^J){Gyu+$6z_vna7R>=V~2}>eg2eJ8Gw%ueW6bKRlx#t~T zw4s3ns;kS1p3}Cqr>gd+YYCWOc+k_>@5lHT%m27})A!u*_qA}i7f=GTdhZrQg7(6` z8nik;kcG&EMZuGP07$5$&rf}7sQrCJj_s<$TLA>WG7Cx(ZpK%V3MyLK1*tQEp|f1N zOR0B5G`(-b3V@-JB8n0KUWwbXSIowE`OQ_bL}R}f4-0r-*ZZe_LYKf>tFomk$fli= zh%>S_HCV!U*<(uS0@$vQTEJ9(RdofU&tpUyFnjw;XpG3+yo8Fxp8vba8@&@Toe*DW zEMb)~B*W3W<0x?K_L-lxjKvM|?=9b1hBm!U(X($@7$yOkkR=?CA}soKg?%`6562>B zQSns7o*Aqb@W;TgRaqMY2_6BD2mp^c5Op8I&fs<}W|r2j9?dG5+dZSpCQqVM-c{Q& zd_GSX;KCGonG(-9%5 zc-H2z@n?>pmQDGWE5U3eQJ16s)0Kp2Td(Wvg~>@&W6Wn#E{oXg>t}WDY=Mm-Zrj-* z;BQf|hGA|Vx|QuZstVs;P@o#eZ;=|3VK*l9c-rRzq@af?w7I_e_t{1`3P;O+ zR@U>;wL&>ei1h{d(j=wEm)XbEu}y)Ubkpf@uZ6mzefq=vU7&&S>;Fx1hk2WmP5uJ0 zo&Aj6^@i+j;Ol<3Jl!lVA2VN*3QqSQ)B>?;hHhU)A^%bb>7t(Z-GaFmYm>2AOVLvG zb~a_NMPZIN7SYcjnm!@SlX^c<&coi6`O)L>$nUOoleq~v<)CJo8VRG`auJ{o?duDg z!wnH;7}9?5DrNtu&MX-%|4qx<$g(;|mTBO>-?(D1NTFDo^Q#7=q+LOK5H2@yKHh6=1;T(GQu`4fnp&VImdj zy^SP$3MbM%^}_rilD>Po=f30-F6UnK#PK4B=aVr3gB7BJ-o#!Dc@156YhMmmSx-8y zZwwCjYdV@P4GwM^k2)&^r+tWbH<$2G{$Wo-sY0NtxV13Yi^@j0t$V%CGeXPH16=Gk za(s@j{myTq-Onxj!-@3;-j0%TlOE^5^M804!Q?YWPAJvmG)`3{a;yAfvU zG^RMgf^rbbA=k(m=Bgs%e8q5n_Qj<@1x1hFlzlJk^Fd9|BqUvvVl#-QKs(L@B}ez} zA$O=Z>z4I_41%x~8k3L;`kqNCc={SKvN>j?O#qt&?Q|PIJg^bK+Pn-T12Be%E#I|=T%nugdL7yxl?a%wr|ZC^?cp>g zl?IdV@-SQQWf+h{N_J!u1##>Q6gk;WaT123fb+H)2Sx2u(rf$zaVCY6OuR_P&&^)) zwPy~A)gK;RRSwJn*QyfbT1tEc#y|?Poqxb>U*vVE2An75f##7JPlsxzp$kf@UB&Ed z5B4pZ=}_vH-sh(J4taYqmqdhFXTT$3sy#p7bj8~~8H5*k>tE=Y!&{>*UlLoA_zjx7 z3Ajbwx7sG+eTiuR+Ra5Ob*6(83R++)yhJ($Mluy9$DGL1O3 zEY}1iwR((#J`RpibxDSJ)d`26N}B_twVR=2$yU_LL&HttCDJI8fxwQ{FT-HMp!YF& zZ0hhpuE<#pVb_VJ(~yzLL!O>Ep?*|EfmSgclsBX1PhH$&)z9_*^3qZcZW9y z3%dp3^>haL5_jy0FGR*+_b11<{wyw%X4tb4JlhsLzr_9%3F zz%Wr6`5z=SQ?#*ZT5DeF(d!-wHrDFRl&FzEKoW1EL2c~rJh}CbK`oz_d@W|PG+RY{ znwm&d_DKnM_2W=@ySjh8lb@T0x!&?w*1J(LkP+5qn-29(Z~Kg@uRsDiaq3Zdrh|icVP45v!^$0g$V5nD(H--j-t_3@C0+NUZJ^OjD9wZiWS<)g$ zj*_=g_`D_)K$*Pz02+Vc3W)x`3$&g8^*RO@V!vH4IP-hVS_*)dOG?j!Y(C{h^ul~a zC3czj+q>HDVQDQ@%fOq!$T%rN+~PaHHEcT9ZFT#!Y{NHzG5U)KRlqIfMnbL4vrQQQ z!|Q|(<9~YEhzzVgU9c|6fyJ97v&z|9mlc$m zDNN`tPcSpHq0rtb+WRap@TL)`ulV$l4gK9aU*>=JT@=QXMzh04;a~f(^=7vP^7^co z+?emKE6rAyw0CHn__OrSe5j!k<#k&qjG-);1#cv3YiX6dp2#`F7Yl>#-K$VQcR!r3 z^;xkGOQI#=!y4q%!;2hj0cX=ei#MIj7X;B5tM&%rq@?W6${MkQR5I3JV%Ge%D0+b$ zd>_U%n$f9xD;gx&E!+HQIR;1do#xeb>P1IY|Eo9YxNM|Q`WnCxHFktvo5zQcps;>~ z)recZKr$saB~n1wu>mi$lsy27P9B>WlW=oHVc7KpqK7kq#p)G}49 zge7sRIGsUQsn>#7m1hg;gI$LuOu?XvfNIyLM8fN=ocpykn6wSlQjt>(#tLDdd%sqQ z@fSa`H-k~OG)^5 z2$C6O{z%iR57HRTItKJ~-orY#6r553?d>xbFqRYh{VJvVet(~F0f6oYZJJ(P{1~Ia zx*5DjzC7_2e)sU7kPtB>jMv&|0H`bhye=dY*^rx|+q!BTced3(>KhE; zt$%qqXFaL4zd64p^=|Fb<3|=9#arWQhjA~!JtNl>9&c6T&~sDforhW{{6u6u1b0gv zszL_h<7dZ(r*MOx&zQ1|OD3Rlp@A!{Uc(EOhL5Rqq6@;aN<7~r?1AM7!&`s{HMc`T zSy=OZE~NVS(aCb22zse<%Jg^GXGvnX8TdhVp@#*hNg~mJ?Do@NF+ovPi7%;E@v$l8 z-}wTzqpwTXu+SyEcYbQOj(CW@UjF~M`pT#%8?9|cgh6Tmm97Cnq`MoWK|w&eOS*dy z7)qq1yFuv~y1N+|y1Tm@zVSTgJ?E_NCqLjG)|$QVy{~-*`2HI06^{K8$-d{ZFKP}E z(oo6o!vf3m#7Uli;cLW^&D|sMW#l7uapj+1^1hh3M@C8= zqsXk%d%6`Z-lY{fk%6efRHjtnacnPs;FMrvFfF_x6{Yg(I-KLBkpBDU$C4 zE=@S76B=&|tLeiM8vlu4``y97_R&@pPUJtPOBs;Y1X%cr^~oaKA8s!yyyv(qtSvr& zvSlQpTqF2Sd)#*qp+?({r9kEp4swFz%+a)nU%PL4`UT!MBD6;g2<;ISi!{Y0B3dBI zy|lT&nN-jNYO^#woioMmykVx5sSvZm@x|miwk;02ymHw-1k`p$qVR(j*vlxvza%D7?0%EDd!m1r-%|K z=PJ#L4ey$@&f!&t&S6;$N&~tWF}?Q(T1g{u!g86PZc#K}L2{v)7I$>sD^EKuxw+_> zj5)Txr$`pkh_Ka}wIbcMcPBQClO=`p4?as<^HJd?@0d?$`q(cgc+G|fQxca36BF5C zwrN3ZG{|#}oQl>?zbuPyU3UG+cSKvaBR>`m4`Y$?$EX!@6ua_6UW_4^ozV(ZtFRj%~t5PpXX8U%>VK#%R`%>+zY{_}UE37!jm!tu*!`;bfy{R7whJj09) zAq1t?5{v4~ONam5xs&+r>0lOmK-N3MtnE~%y0Kd^RHso0 zn;lM2C2^tSI{(3t6yMzAVBv{j)5(4;?=y|17pbe%{I?l1)_iO2q)#G>CzkgU9k2Yf> zeWd+GL2$~G7{2_LLnD#s{M**gN6gO8p26ms=UT!L3|6&Cbc{ zYNiRZsx@K`cjcDO6(T=oW7*y}P_%BG!%W`jJ<}*@N;|)IEw6C63dYGrhjUtju4TMM z;gF&_X^0}UR*WxT8=aScvFztND?kQgREv$^i?Myh^)I)P{4&J2bQgq+qPwxz(24E8 z^@^wo3dDDxryKy`e4eLWJR3Qy^$y9jWfFAS#8nC|;4~>HYRd28OP*ukS50<@9**W8 zy`2>Oz)9W-;ZHYBBC0J)b$&)d%y%cb`&waqx2j~6C!wnUIU~k<{Rl8BG}GvlWBdO; z>2IS@q(a7eN4%P*#L$+_qjY}EC;Wc#{h4%x()=osXK<+cziagu2pEz|TW;w83F|q& z*jtizamco)KN`~8_Slg1s9J+I+fgdA|NSRK0mufZeN@NaTZ7R;Qo1+m7yX)S7VEgw zH^(b+tul()?7OHWgan*kTZ{TdJTJuMj@DCPhDS68M}X?KjjBp3wK_+B%BR00B4=mQ zQhWFGvQE=;i#J}QK^iFF%Ag)M{2TR^yUgiN^(3knbjsjsGJt4ULG7Kyc84U*hN0Gm#;mFq-0T8$2OT_GO59Cml6W9>LJ0kS>|H!;uw^Q z3PsO3%gvb}p9kfMszDODwQn@E#XjCZL+bbR@p*hv>93OJF4pg;844?X9wN35{y6i_ zP0TY6(Z157sR%7=C*cnzv{+>zPz}CU1`?WnEnLWeky9Ru^tOLtb=KC>T3aWPW<%(1 ztFXPdUFXM-8Wt}KU1m(;i8kY5f>+wuj(f#5e18D&(J*fCRYHE&3MPCsJ3>f} zBU}5BI=xwFv*=BUb(j~ct@pcd=-#dbu8P-Yd!*<4f%BcQRIflEX?_yDKF4m$6p_Yk zD|04f73skA>&_mXJxU_#KXPT6V5yF0E$7UXvY1yd)~fc`DD@)Yt>H)I3dvlAotsM! z3rkhP_Z`Aca1CeYA>d}@I7QY_n&3bs78?F9GG~9&353-o?@Tz0*H{#d1pn}fIJ*Hw z`AL(MM`|j3onC4oVzZanK*qoEbP$TZ6w?;rT0I^m49_61J@!-A@CURf%zT_P6cxMW zv(PonjIry_OG(SO&(CjA%4;M)6Ux#{#&%<#p~EIDlO!TViyn1WoXuy4?@HYC=lWg` zvd7P zFZ3or}!{nEnEI$<`5LI&?aW94?Nl&loFM}^7sNd|3P|hmCAq+prEksv4ai%z( zqENd6mStvR{K>Z%84tuC1dvq+o7gWiyb&SMb7LVs|65g$0G6zQV2F>Ujpdx#5XhAY zm{_Up*kN%a%Wv5)Z#g$*fjRTRnr~cNxX$Q$#AvDP$mgiDDr8IW&O zXgfWbP6!(Yn)qV)E078Fo6uNnbXh+2?Z^w- zYqV)~RrRm7>Xp6hq?ec6X+|v%;f}>cuAwHtuMIB(C)GyFXe;fX~-P<{|_oK~oW{s$E z+EKPejU1prkg|NK{Y|-p%@E0%VZFRnm&^Xx(+HcP{X8$>o1k)j+ZoKsU+ z%99IOPTo0t;$&wlE$ZgjQ_`GS{cD)(ZTCCxW>RVMbA-U(dJ?-$A zDT{&LwofD>q=x?1u{Wi`q@M(p%RS11{7lITsxM0Q!2mMuNIC`QVIs1D8qT z>%k67r6k$PiN4(8yB1~oIA#iH@xF6uk!tXB@|sLEt4H~I+Rcu&MNmkw4e!QVb^OIG z-xoB579>Zt81e5}9Z_k^y*T<*wCQmqH>{d9X0NKNoJ$#p1}i>#&re;wwz`;S-`}Wi z;tGgGw>I4Hj8VExIc#}MnV7uj?3iRQ-A)s--u|t)SsBSk|JtR1>wweg%|86yKykgG zt?HX9`1p)%GS+_OgGrL>HBEE}3@^O#3#;+})F+~%Ta87Zy~DSV#2+NWn+Z0}rb`^p z9FQxL`4GwH)V8+p_akzMQsD9{*-6U1-cka{;s0{2{f^%D#ZFX9Ze-T?6LtN68U|vp zz(n%m2*j3weghR9muqNtk9<(09jmH4#6n~Fkq1{Hk580%$Zh84>{{hlP8u4Cd;_32 zNl{_2-e2Z@toxJwn;D+Qsz0IZ{aKY}Rkv3J&4QgGOZ$zI4CNqOJL*vx>=Rr6hrGqE ziAch#pQ^6!IwK;N+=FYNpwB?ySXIJ7|%O0Qmmr)`<-w;M24F?DZmr}fv!^Sg3+TWu3j_?Q~pysoP3Blu5e?^jq zeKXtFJLj;}PnWsO-ZGt~ov%5J8M%bpaIyw-iC#rq+~l(fnPdxRYWv1?6t>cV$f_Pm92p5*09ba8Kg}7dH6DQBlj+!Rn1^Nvu5M8%z|*;9+Ty_ zq;Hm!+H|M6gYZI9lL>Whj&Wk@$!4zzouYe@LG7AD-Ufst{DB`j)9It%UBb{MPIph9 z@xCa#ndKh1YQ?WNTg56)-dSZ5orwq5=b5_DwCMAF0G#;v*Am=%CF|yLu+lPMC`0FB zw{SczTBt-hndbJ6o>b+w95P5Z)B_3@^9mGsMdx+2*wl}zseG5Z?T#FoQb7S_4*ru+ z8=d!m3oIAI?voX@1?$% z_cRdlP4r|D_dn0*#+b!eLuwhR=B@WR0T{&FcRn}^trFZz@xmXu-ov0{U2I*8jyt)R z#~s-GpA*8K0|iD`Wm1i79_*MRy+=P{BqHoQ&JOx$)6dH{q=Peq=Y8wlcoN#G&Lf%~+n=ghnd#{Y41!$h!lz1MdZ+ zUo}hMuHOVU8aPVV=xkY;r6O8$N|mApS@^5ve2CF?Ko>G&Nx?Wg0Jq4K>tiR$*Qerp zhKZ}@Jdrati7b2Z7CIL*opi1h`Q0^!%OlZL90vPG_%kS!uXgBwK3EP^ccm*VJJ?Iq zVB9y#dbxfV>b)3c;U+5Iq;fRYv$5_(nFJu>EGi{G{P`YYcnUY5`N2I zrV*ughjLfs?o-Gq^L=t=(afYmLr+B~*A7XU=j}xu88VP)jG{FI^B8d~uo1p)d#b8w zI7!vp0NHAFI4)`Q+Hil&TT`>`#W#k@j%jtVl>6^buIzelL6G-v`3FWUfp`W!Sa z<0KXF%;;^n5e4jT#BYu8O|dTY$UJ(#z5AZd?ppEy)4Sv39%@p$k(4uKq8*Cx_$Vh=d9YBUmE=vlk1)@vL?0H` zOY$uJbk|>C1=<%r`xzfq5#|IRp>{myciDg4cW;tBIlk_Vw{f&Duxz?pXmZ&^;kewn zP;H$Y97b$4Q(@w=;5@~v7|G8+A*_%bI60i78wd!l&$E3-%ONRds)w-ZZ6QCmPjDp< zyB1)J$iMvdaO(`u(Kah}AF|w6jslg|?|z^i7XR{qaGu+oWwGEMALA_bOtrkyu5c?i zBl0`gWYjtcaApoBnYA9v=XTe_xkX+LAUAdc^V|kf`UJGaS`7P!xL!^1N?l=tjYvjM zJ(gRaHy{#|_kT?k9%P|2zb16dwS4|gK{|09XMIDB)c_p&yD&9z{b&8Io3!a}p@E(P;%D6eSd$=h~&RX>1OW{;XVQKM# z8cfS@XtuZGR)oT66B_<`anfQ-G1Mw0-_%DAzgGbpKA}L6(JM zQN82HET_`ppW0AbTJE*V|Mi-G4;%^d02cM1XI*_?vdbC%jxr%4 z8CEB7laTXui5wv`xJ2*wjI64vu9pg;&m5>F{ik^)5f4Td`o zT6~Uas+MRuN`AL~hgHD<`=da_Y%WJ!ESVE3uj60k;xsV6Rc5M`#``%Wd|ePoOgWv| zg%Wg`4>iSVkKu!aC75&+y%%d*{)kSD*ifl1e9kZhfE7hG!ikeA_^%Ji`*r=`Z z$L26^+Rx4CSSfVCEL4hinF>@Rs1YKobYXby0~Cw(qAyR%nFgUO3F5R^{4Yb8`(rmG+kcPn^Xg!<5I*>GY322AsZVMu)ZO}| zUYTQT4+I0>gUlvBiT@%O6DZ`C3!lW8&7^1EUWE=q7YmliB~~EtAq+Z^(js*?VZxLt$<3We4>PTQLm$@=$k%IQPAgGJ z>X;cu%)Na>Dntfhi-v{lCNLwjF9Fwo)A!5VaNB}E6C4nI=CIRhzApkz7FU}Lgi;-{ zOY!a%u`fW`P19;*8`d(l>yO^eyB+#qtA-oZ;crrGrFo{+v}905+K0OI)O>83y}Wln zo3KHD#QMxUcxG2=I^@#6P^3|r6LRWhu`s`qGmLlxggk5Vd2cyb$Aq|zwrrBF)%CGb zj@!R*;Ic--3>FBzdVjF(e|a#sb%gHTF@KS%ZSfEnxN(!vl*il(y(&o!(KrH@$gNc+ zFT{B$LHU?88(HR0sgC%0kQs=G@-P=@y@H?$fmbmuP5NyDv`3i>m6eqpTPWwKoo1D) zk|wb=KEb)yqs+Mr&oADbv-7O7<16vse%SmoNK9E2U*EA}|6x}6%&~c4gsVR#2@LdV zuhFl^U^gAC(6rd=G(bvqP!?WkupPd4*9Fg_QOnpB6)SLAIu$V8=DZ|gOd97rvz(m@ z&x-pRTz>FlESoRidXy_qF?o|(VHc@#U!zNb|1`}UA*CS=&8cEPAn<{gC{i2V@|4;l z;sDvWRz{$jd1xrGT*i#tL@(tC=!@nZf{3y3GQ2)UP3ZIz)&Ahuy{Q*T*`~?-RzpA8_XXp%tt*o~ts;+FD*Q|;ei>|o>q) zs!Qspn(x;AFO|*29<{%Iwk`dpsc)-mU%mmgFIT>M;|T@V3-X&Ufmib{TMvulY>TRV zwY#f)Ds0#a_y@b;pVuT{|FgFJMVmrGzst9&ZlM-^cI@3#FD~b-(}+75(z5hU^!Dk% zbD3K_m;^}@i3WlULgP7m)y3LSgEr$ka2XCU2WrH6-F^a6ngL}(gp*qu5km7GmR>&H zW?CVg!yV%T<+%Lx?}C5t#s@MbW@rf-Wj0;)TNalW>iNe4o}EhZn<;(l%$t2RH_|-S zTzP2knO8M~Wn5UK0HNg&%UxJOR^2IEJ4p%m3tvN6Cgv}=t(oQ6?*?54FnhHH_yX+x zT0g8eWoEV^;1gS(nY{yBp9VZoo$Ci=2TG+}DTrEvb>}=CQVN0{0qaWu95at7ZaVMj z+O;u@xj~wIF=`P2O#{LTZ@)+Qu^hc_n9s5f`la|&Ds9fxF$oJg5+#&p0fEOThEtG; zRgTU0zRMBW)$jY2Tk;ZhNQSxb*ssGck|oj?5s$&pu>NbJzGnFEAk&cH$N{2hmjeiP zc3^z423GzCRLPxm4>H2?Nyl8|LZWFKY_`eWxXtC_bzBk!5n{7T1PQ^jfrQaE_XW4f zrt1*rRQ`WXN0E$AKIcG;B1NDz)#VEDhOx#MN z1Q4_M^7C>PG|b-*hRuRhn8p{NogrYNZHaVpOPNE}5Xt)*4N!oZiG$kA2(_VETm9{v z$!+yOfyB8LzRTV%VwiANn$25$m{k4agpF%QeQo%I)4m=H8R0*)(v##xj#eI>gWGNZ zYz*emU8fOI87wF*irySWiQTcbEUC&9nE!AY?|oH{dXPE%Fi8_#Z&b%p66XA5 ze8-N;YiO7+ouGkMFs${(X6bhC%3QH#!sG0qpvA&v$adb4bTwnWfjB^YVWd`1GtDn- ze@Tp=*wPn7O1|G1W`WVk`Zyx2jIzib%nCGV=l|$-s{u#=hVsyA&z_W=9vW`Ov%cve zAlziqR#z?8$XXiXLAdYllRurL3t$k_$c}Y533xwy{2SB+y=jui6<-6mgJ1?EM{jZH zZZhP9A0e1GTV9|Bmb}~n5sg3G(sq%F@HOI#7eeE-58rmaO7o55T>Ft<#Du4V6?xLl zA8dQCPK5kk9Q>fV_Gcvsyu@DA@AG;IC*)Bf*H3ln>=3Sl@w3V|QhV<*Lr+GAqm9J; z6n7ccV6>@r5oX9Lvy?(o^O=i5@Y@SOmvGKdgp*rIe!e|Y3qsQZ5RLXEE8%HIK8T=X z_`1?Re&xvr7Lxyp3HHsGooQze8Msg4U>(BJcr)L@F1WIqUUZwqVr%jOXn`!HD<&j1 zJCE)zKP&|n4ys*od(R-Afajjm+-v(@y>>Hk`FXRiHri-KhMt`+cnD^{Ox%y#Oukb& z@Z-UAJ3d6bemT9w^1kk}(Od|(J;-h)F`Lwaxw8vLn8g3%r!@TD42VL0*p1ujrwEw` zTI-0@WpgUZp~#Y@1PUKexuf5gFN3E49Klk7?_V{P1AkrZq%?0xj!U3#HOhzSR30;U z4$N0t1%9!_IzQKFDGF7!?4ZMH<4wjI;5;NB;XYnqF0JX&T{K?M1SE1>h8HKb3=YFl zdIDd(n2ang7Zgmbt|=G+>;@PY4$IG z`@c(V^jqK8H79MhtTx`Vbw^i>%dbq1il<)(czlhahuxy5V^OujQBI>VRau^N>exQtBW zGr#_@AN*ifpKY#+(2~+CMSp{e8uXGEk0e1o#v6bl`u^*?u%G7N(UFSOW0vj1A(5{# z$16+*_OHN4*(I!dqf+GdhP3NE@+?{QTi!>W=^S^B>+PP%i9mWLM40?tC+%Y^KOBMf zCfh8Yu&3WZAt@csiW)d0D{gO*T9CC^@ zquA|%w^`uH67ShPA%HpdE4N<)6huz0w8naNz6m0Pqi_i!DXO5HN|dxI-8&E3uW%b~ z>sb!t+4u_9ZSqimtIizX+pM%+ye)HVKWa#Ib(LkhgRhNP5&;-Le4{Q}kO}hrWQ6&& zSrkL7?$nDG1rZ)N_Dz^^F+bCq9&kY`>y3eT@QXx6XfdBHwp^ZwA;(d^R*orC50~rb z6Ae6D{#W1m?YVD?4wtpBPQCsgh0lVj^hHjUh$ADqcL3R3xlbvdYob~zpJWb^LXio5 zlLBS+6;#%7>$~$E17i+x@P|H5n9G*beN1WQ*}9qqA+8>Ty+h*XGWYE0T0Sy!W=d9e zFQk?$KX`wZvC?ucX365sgc=p)h;Kz>)p|}?jTRlQEAA_Ek%p$4Ib)t_T{riUxIvyV zlqz7k%LCTXk_42&_R~!6u*4b{)-QR2hFjyZovucIpYwsnr}L{EC34K? zjD!Qf$|-=A$7UG%;iAIYvR{lEDFnG#N0`SZW$=2=D1HRGoo^)QJT{a*q;kZny%9!{ z+H8=wZd5)JJmcaxe0c!N>2Z|iPwb)IIwyVerY_UL4$~&OZB$r%+)%sYv(07=542cW zPal`WBp=+$ABiol0}Q+sX>e9fN2BEK4C@i6iX4{|GnNZl7tGX6c(KY7pm?{|(*WG1 z1s*4~ECO zlhHt*WE6WD&K75JjOi>=ngTns7QeA@goAT$b4t5ZrRPi)4^YH@TN+GgLTa)>bCY|% z)x~=wJ-G2(V$%R{B&$C<^03HbSNc6hFh+kAD^)ERkR|B@4fL3avB~G^TAuFY{4`(t zrdbXk?oL2!cO7(EFLjUiAG9pEHHzxf=|ftPI`vw8p1X}MX@zNeb*^b)P5}FoCAN*0 z87I+LX-egw>43x6Y9-=$C`k|Zw}?EgB=@hPjuS-1zC~&Et;6YjuzHT5;t6h7)*1osT9~0N?^W#lx`XU+y5-_h#^oP4r+DS zF4Lyw-I_Hk?Ty8v)RJY)^&m=Ioi%)BSyrn?TtfAkkpd^;?}{xUNf8w&KR&PY-K(KB zw-7cQCDZUm!Lg`-%2t)F??YdFm1@ikck>nbWd1^-?c2<=`$||i#3W4e(Rm5hV$lSUdE|++gfV>D(P;CkL4@-(AD!s5-V9?(@`)>_B*({AxL& zf%@l!EDI{Q0Q|ZeIUXn)#muk%C_O}ZAN#jZS?jY66tD#x&r=C(G+#_=9ke{|wdCmF zobF~UAXqePqwdu@2)3N!>z7oJT$}b!=w^6f)RK=8HRx_xbZ=G({8}x>^8VsV%Mx=U zDH+xZsk7S>XuWhiEGSpdHE+zvPE1n@#2BW>(OZ)csKAe$%Zrl`EY*Z;V9qz#Cy<}A z9zve;0!k{%x17Qy<;fo-u0`6e(Jor1-2(QHM>j;Xh+B334gJ^<)S6Cy5fI3|XoftQ zfTGjr7Gl)mVvQSpWyn?wDPm!a?s)sSUh2L^LeqAbjDM+ zggu3Wp+jmpB`|{^pTaK=w}C*IkURuE^OedjG>XMWgu~yd<3ZNKw$15Qz2#JOi6=60 z?Bk{5dgzu2^*hoS#%idOe(aI)F_D zb=)8pQv7pekk#)6`@J;nJT~$lAPrg1M~a&`o`m^6?eHrAYWHBJI6ubL;Gg5Q1c=*LCK z(~eTqR;Rw17%a7fdl(;QDWDszK1*zpt%TBW?n-*KBW};hiKf97 z%VI*WLUOnJ6#d1kafWWZd0qSxw;GQvRN54kB* zdE;oIt@`A1f(H7Ffo~nswo-+H6;G_{A6c#25+}c^WIyEhY5zQ0^b6elHiU<;2(&(o z`B)r^aeJksv++9Y0_5{;EE{IQvE+3+Q&kN<;<7B6oG;Zqdu}bwaGi&3Qecd=Oc?gR zjE8@4zMk(QNdz7keVxDmHJ9nnQ~hNl)&2l#PxJ{a`Jv$C)xU$p4(2M;zkdMST=)dO zm2lxcau$_Uazp@UO&&J^E=NkXHEEhV7jPumuPKD|g@FCix=m+Av4*qZ^jbTTm683K z%Kdh9W;=sX9oL6Wd~4utvBnuuGQVpH-m{S`DB>jTdEA!%Ho%aO_Ss;%@Y2vbDm$_1 zX3r}!PlVaJb}t0@C$qe5QoE`<&F9fw2|fA(aQb+m_hemU_3eR%(iyaz%;#L7g9vg1 z^;W{#?rLv`p$MP0`l)Cxb8d<&o?-&<)i9vYwO}PEF>X_3j;Wl7xipBk`f`dE4%54)}FV& z;$e|!B|Ofz79-QBG!1*`FTMW}&5EOpixs^zj(H_cnv0ISIF2fTHcM>K>b=+g` zBC2-pwDF4H!t*(T=kssptE~$y4YO=>1kdE#8_(fbO8FHP^P5AdNA1^4Xk!TH+NS3E z2L9Ks$y=x?edvBZ0I~6?*GwMG6v*S-?&f6Oqf(ho7Fz>zO<EsS}xSNV()-YvRn-)u@xgMiWHb zumKLucxl0~b{kQ z;R*|0QS5NcRA$t=D}1`8?i98A!i2#mSuwhtClD%--~a4ysN#N`Kx2sY1i~N*?3%1EcrBowQmZ}MvMR`~qDE%w>RX}^ z1e@{pie+kE?o3y^tqA|?<(7r5r+PL2dmnu>|VT(pAeap+bPcQL(VofR__%B zc(mr2{#``C@s5$j;@DO98ZW^oY#xAZ=CJG;ksY$$ZoP;&qcdr%L3wnaH!t#7i@k-P9AZ)V9tU@%3KZ6A)frIUZn!*g@+#=0~;j z$3#?2|Ey{3u*@@igIj51lJC&sVtm$_*0U*b@_zE~!I4$D&i&JSIZl2!mk9Km$9qDZB*w}7)dtC#i?f|TDN-K;H zsk{9-5nUK}A_d;=t>fu9rVF75eCIHrSYkdZK8JJQo^ndlW2kpb5M3U=bjo!Ak2!$U z;e+LIzE!58J51WobB7JPE0p$s7SNwRo-G{?=KLZwwYT|m@>{)>-NTinoB{f$b~x#40ZOWq#N!BV7 zxZ7}$bQOoAstnH94!E(P#aKXO$cc*rn-S>*PtACa2=63X zu-Bf}(l>6edz56RAuk??Wh9zy{SM9Duxs-k_~OF(a-tMG!Bo5KMT<mDV zsq}OmL1ucRF>s*txE`uF{im?d74&R9RUC&u1dxbkFo6(++N9qMhFv0b=}MOf)nVPU zErcyZWy^JFi<7l&Hi3E@0|kQ(wB9R6itSc)_v@bX3ieR42x z)(%j?qXYrNE3(+cfnCfxj}#bZ(kBQTd;m?$b(gS9SSmutEQMLbiXUnh!xez;*G?g! za8FT!*<$uwZ;@GEM%>10Kx@(J$mi*9K84>;3L3W}_O*ql&*we<(avg@TqEOWu3!qF zb+7t+`U9)*-uXtO$j8n*mR{kS7n)hI5D@U=Tn@lvPC4uo@Yq;OV=5307N7#+8de?flj5< zD17}8j}4t?;HOsIWm*>|HET>2A8*`Dn&PzygTF!#d3yzyW1e}qTH4|fH`ZzLh)qtG zawC=B#`;!%-+XuEYDkS_3rBL@HBIU*dw_4I6c<4^JYlCUUWj;LKE-7ei|P`aAAl>R z+cVRlH0yX>hmeE$ssXe{z@ek6#$1hUdNe<4gyLKVb0&5k7I#x^*W4@XWzr+J{2Fv= z+(vY0W_8>{iDYd}%`)T;5%n~_^iF0ah<@*l2w5jT!YMojR|qK5saTiyoS4sb`Do(5aapaYxE|VOHSF=N zzgTrkc%im*Y|8KOw@czHj2+YS#Rmq%5ea zIZEkHoE$G6^1YSVXb>#YiK1UMfzqjXG<$b^n3Qh+NP2j8Rf;5vjJbzFsK+uwqGC^B zQ&Ap$k<-1)XYCeS6}0MsWJ&aL)1_-GQuqHSi{$enHJ=2bQCX_&T(G3#n;7Nuij`mg ztM@HaAk&bk9Avr=pD&=E&-kI!Sr`A)(2mmcNfw_VfnV10L4(_->3 z+-%>7-0>H1mZ5_k`|9V3Q~Is@etFM)5og|XTe@Yx7-@js$fU}r7b{+NEUcqgLXfry zNBpF)e5CNoMiDMZ?~SX^73ZD5@b!zkrKdZ3mxqg~1};%32}+P@21g&#Pj@9*Qe#a> zsL#Wc52FHP;Nb6#gkw<1>ThWAim_BXs$*P!md#s+ujT{srFM)_N`h6BXmP;nVcsng zpZEdE>1?aW7bhKqAc@^7CBcm(Hud7>ud@oJxH4s9L#9T<_=c1wkE0Rb_l(Iyy2F3% z?ligcXF@?pLXX#LiqE_*3QL{fG_&6Pe6vkqr%Y$zjyXf8i-A|39A1=p2oBp4J6sPD zfQ8pZ?zRl39ill96wG8UPF3*<+wqVtJlE5zZZrq(jp}->1mM?K%l1n&4JLEL(2C3% zyE-586p|Z-)Jhshn3TUl*F{?)^E3JO->c8R1JaYZY=IW%no~b8?BC*UA%fLXKB4!W z{mhlKeyDd={9P2=J>-J3JnAB!jxqX}WU0G%({{9zKjoo|a1MFbzJW_6)T!7V@|On( zKh`kQsa&E<}MhMXk5nxlW-Gu-^(a_3mk^5V`ah{M5@$g~3*v+&mI-PE~vEek?~SH7LGbYK*-jR@eRN3sDP$GL{A z{orw)=A||2DXGW!Q?}@Vg0CaoZT7#5;A*mhSW_>rXw`2bNd6#TAeLsF;Pvto9bs12 z9(>=E$;BQma5(cUYt?^FgFnfUr+NB4Ix;2&ZcHwo4{%$5+ynDWV%Tq(Xg-Z!c?UG> zJ$R}i&}miamRg@P-0qf(*te`V45mXMn3Cml2*Vi736b@)l1Lh*Nw(UfJBfSZq}N%Y z|K-2_gSP(+5Q)kD86bcD4>Oh`(yK{|Asi2>$cFj_wx5?YHs{Ur!uZ5aB8#OWAR6+M zAAq>_CxA4zo?B4eY=Y2281JSapUF~d_VQc4oxm?ab4MG6Ln{pE1ZF1RkeQyz&E-;7O0oFTb*pr;0tget>Z zsjg|3iFb%N=XKb|4I%?9dBN*!NRg&}ol~MTWb-|9?Snrwbh`8eJ3+zR2 z=@dx7??HZ9FOs}QcfB2Y3b*R&Y7d{!KkzQv9VuSnhC7X%%hcnweHM}*7av4+<*?3L zxcGaV7#z8jB{Y*urjdeP*(}~?89n!Phz6u_R#lah$GAw`ux>TG9_f0DLJ-((aA-#- zf6g&h;yw6$6heY^8GE}@A3!Cc5u7%zUMZae$yThkS=ii4z@^2!)tyC2Qg$c1$qpyL zb~#$yxWGyCMZg@-yg8jE1cI~8KL;My9R}cAiFkieTf>G)-QgXCZQ-Jhjl?i2H7yuvm(I5EL(io4m4sc| zMhNOhR2@}M2ByTq%*(3%kV)TwVyL!(Z~YC$Xo%{aOWfNt7Uytg`ShOaqOAboE88s{ z?=*;DXSvW{Uhmq|AnOFmhO+KN3iR*J`*~(Kbxc1!`JdAJN6v}( zaan?rWp#KBPKb# zijB-MS0rNj@`(S7QvcPav5W%s7m3!D(yl-?rdhF6oBzxWDe}l!-NWj^Tv?v3KZS@8 zX2y0^pdF|y)Z#=;qP*E}XcsnHs_PW1GY_3E(Bv;JZGn9t-c6x+f%Bo%PRCnEO;5w* z4(05!w>j12YO`u`bjc=BD9zVmY+a+|WH6oW6x)~xpaXQmMN%+q#sVpbmB?_2J7ABs znyZM@Zyqi*9PlqagnRETwQNw6!rglK7gyZH{mBfZU--Q>CIfs$gs+z4)v-*-&nDOf z4#t=x3nny*r;UX}DZE9$`i-F7yjD3v2r-KBw*R`a(ngEsQF%j$ML|>oEg_o}VxO^s z6V0i0%2%yCVV;X?)GYnD2+|(nu7$NlgU-8ax8aq0McL*@Wn4jQdtU?{e$=}gIr8dl zK1+Y%jiI(qBtP8APbWLwqNXffFhgjuXj6=P8Uj9w&mOEr2-6%?`+WP?CW6>wx)v`= zTyOY$JRJ*2j!2Js(*zr0rPSmoos3MIbdEIqBwJWCnhgUk_L`E}Jxg?a7Ccij`tRn) z$A3FqYAHAu+eJ_6Uc?9`SpKw?J&aly2vG0SWS$LrZ*uS)P(K_#8V^s6EQTP6+V@K4P|BzuD3Qo>X)t zKYw_gq;T^YYd%X7y$Rdxunzy8Xw`^G{XjFEndiwX`5j|Ag4%>K^5qTR2%EdGF8;40Y+yLzGo8{f-kJ^FPAzQseG{%(U-_&w+ zNowEOe+(2%I43lup;L-!d4B1)h&O+nB<|q-=}$Motkf^Vh^F(*7CHsGh4}C{-2A5ZM)$Zj8_8kKr9^U57W zG~6FUWPOUZ6pf!ocP%;YKcY+3p`xlJKm5?S%4|4hMacpMQ>C$knxalVLeSsXL07~Z z5nP@BHkVq;)+^VYD{vK8X(d{nD6yw&NYTy15cAjK7^P!U*{`d|*2$d{w_bIVE6~F) zc^B8A2>Dngs>5XOqII{2_xZOCi}x)HpdTd%GnTOZMYDyvSACqPvrujBm>{Nwqj7fc z)Xy*?iIUbNlmCAY!12uz$<5fIJo}u}^dR1zUU%g6GiKoxZ6<*BA6x4qdb z-`KqF3hx|V^Udx3;tz6&k@-F0oH0ZsvG^O;-YiL)p~a)^or}$d6FvV(=1VLK>B7Qt zAsOA%7jUSCTG@|p77b&UGcE@|7jpL+(tRdfFkC_?v))CEj=o4CK)bQnH^2Z96HQah zk55k4ZVCW65>NxJ{Dq0o?0wF-ebzKr)k@WxhXtn)2ltjO8pL+w{jjGOKRHMf&^3Mt zPJ}LIaulR~LKd~3DoF)JR`ai5p5o^DMoeU8mQ<>AswFdVacVve5U$p; zZJMyD+j#4fghvqyYeK-+KYO1WOZE0cU4uh&vBCoPrb=rnhxz1a7MIp)A|R1kNy8`g zG!ek`z89Us+H#JS&aTe9QFzv=_uDU6dUW5P^FGH}VKr{k0lAKGL#4IW&hu!n?OE*apTl zM$9tDZz10KGd6VEcH`r@b`%267na4W zRYLLWOg2qTw8TplD9ud7=m?1aD<=PQej=j-#q>U)_wb5pDBkld~By+)z{yoA_vK_O=5o_v9Qha*{KgEgJ`syU+|sQQdt*E`kNCi4{Nk(>H;|nMp=M8j=$d@be4e^Gh0Kj7XNO*Fv{SP# zogxxtf>W>eCmR1KFX0c{+cPS5>s4N;cHE9kz~pfj&weD0I+yBGw3I|1>}l#$4n!j1 zhOi5G%Ea5W=gD!k3-^%D3dg9b$fz&ANSuI3f+V({O}Jy*9&TA&i1O)68-IM8nX`-% z#nA$Ny>=Z-LOtVvqZlXtPlJbbrw(fYEjGOM?ELV zhwc=#lh=(>8ZmX>e7&afc#A=Yg=)n&R4do<%=PNNTZt$`4VAPHcJ)M}cN%HIW8uv` zwE7=IGsnUVXvRM7>NyfAO=)c5D5p?=nV@+2Ek?zbTD;lh904hl>nUe z$y2%Yq*7hA{Xuv>%!&UO6PK}v(wqu8c{7bwiwqWDc!}k`4Oz(v$*sT$ps4t;%M|n( zllL#0MIM?QD)w46@CS2vwlEspC-ze>%gJ+Aofk6B)*Sh~ae`93c=lyV$9d-bVJCCM z6Ji>=6>pxqs+Vg)=OxwGC->W3!k3_zCq>@+LX?wgPtUai?s^G|!oDa$^COat=-NrE zX8V1Vm{y!q@Ij^>I*Jh9XmKt)hGi0Uj*XE0CRXP?Ig#2&i=M!n+r{lDNzQ#9@?E}l z|8)PvAw;^iNpC~L5&kx2W@6%~ zMxpVEFKut{VU8g44M5ZOy^mjykpb*GxLzu zM#tJloa?m^aN$V|dw(?3QZk9!b}R*Oeb0==Y;i@f5c*BVJx_*^zWr}6fb@|>np&Ob zKAqpr88-Rj%wA@jjTJ2PE6BDOmOlVu`{USFo!RXI>kf9sTYR7M3DxVs&MJ_lH>(Vr zu*FQz2dzM!Ybx%2w>Hj4(W-n@jXIO+J6**>nc5NB*3tEsGiT0@Xo_O6yFb{oEuXoF zH+LhA#j%7&r@A|Ak!;J7EbhiF+v-a(0aKP;-rDB*O}4$}R*-iSnGCv&Gk4hlO+Tz` zx4qiJa(oitk#;&M zmRbA}O$nZFu?+2f+Vuq_B9BzDInURXeCRs0!;{kSuc`q&2FkMj(yhSn;!pV#@Y?8x zCSC$f`Vm=PDqR1NCjXzF_RWLnCl2~?uA#a{(QK-+nq&U1p{_x1rNF}T&W6VGZau-K zE=lUa0$uVT(lR&5?DjZ_xrS%$99;t=$GFnV^D)5Pl_u}rEqFdV827&<_WkpF#7&Hzh^tq+9#*I8SLFFTaRT%*?=4YohJf?0f51zxd@fwkLWB_ zHGI>RYjqW*5o?J0Y*H_Jv@fE(En{CQU%@y~(k(bMz1e6?xl{$&^u%8-n9@Luv-1+S zbJL%A^n`_3x)vG{bD21bOOwRK=p+!=stSCB#M_u=^{A-PdTZ*)>ah7Rq zoaf2H8)g%o@j4?&;xTW-kAnGY8Q}$`qX{mukaU&Lf%wDQCgE!r&&%P&B9iH)es#G< zDq0r?gq01Tdookv`CAFWYA&wGI{^@mb{DjVxe$TBKPFzP1*`SCMb`5Uxt1c0CES2J zbI~2Do&K`nO~*7rYpc5wA-CWisFS}xHxk5?3;!E@;!_L$cv!1ZzaJm3LOEkk!rww1 zc%POgeiJCSs7y1Cv-P;SqgysI6Y2R%8?qQX-XKp8FIq4-tu)vMy$-w35;|%^)G_Wl!sQxaTM9JIE^!tP{X?l8VbheD_1BY zN?`r<1H@{%Wq#*MEteKJrJ4xsuu~5Trshu!l@bOCrNum)h1xN3mU_oKP4btgf-_Xh zOU@4t(W>QiL6%zw8cqFYGQPQzuot)c@66KXv3qmj ze~#@43N>FoO!Q4P-1EcC<;Ewym#u6|=V|ZO_Hqp}r*AhK!{L;~ks$PbmamUk>${_+ zj3Z~#eI;>)>1=4g92pxv@{GYWznM5yG&|vmVJD24KlOZBdxZN~+$`akjpM(n8I5Um zWXGf$_;4dJ$8R}*X6-(NGyJ(+@TNiZMWGQc7rGyl3`)O6a2=0vKBN`x=(hLPot*ZK ze)lin$;J-AHvh0$ysE^6BQT(zIW-;b^?%y#K;XOMu`)`es@r16%-=?`<2^1zx(>xI2AAK)S+738~eVg}Qf2TQUn`Y2-2 zgK7UwMI@tv7=*VeQ?BCqo(@T6tTvSA$E7!o$%9D^egm5sRJ1w6+sOh9@m^*E!=uZ< zyyNZ3dJq{LB-J2&QE;$0_g7Fi0avA)VS132V~k zH1K+H8e_J zcF3KVvtAFS|D5nF4JYiggG!Z+df~6Zs#m04u#H*NXPrqxq?FrCS0o7Q{||lJ*t}g_zs+n4?3TyDQKPjEVnF zeAVsfkiR(qIiS84i(9^LHF2eVo*SP z0V|la#6+W*>05RmcEAMCPGG(5yyGdI?YY9aePji1vx_MSSG-AL&@7s#ep}Nqb>fb4 z4Rg*mhdHKDUk?v`Yvc9wZQq~gxrx^D_&&=7R?Yo%xiB5Lw#YVDFl(G4_wYyFi;yBA z>PPvB+4%&k`OG$8gyX>`8!lMOE$iny%Vt11eb%@h)g~qJX(WR!6fe_$&Z&J#Yde?EN!aVRdquypST66pN-+VU1y}Pi06A-pnDx0HY5=_FF6{y6izRa;&A<0F{3VnE~zj-$MW_2$(~5 zJ&XVqWe1sR@1%^fm?+TwoW~IiGq9-N--(JtPA~15CDN(}RlMEW{7}0Rv-} z?i_uaHMmc~uu3DWctQC~Kj9V^quJuHEr~|Eh1z4F@MYT-%_oJ?nB$=sEE&eVm)oX8 z;nEf5Ylg{mGnGiox7}wvZ(GN#LsD1i9Y3Q~Yjs|6bD!rpSx27uTKV;(=QP6CXck({ zW*Ay0WT-2c9XY%`DUU9a6QNJ`16|)S?1ATB)B-03Go4Qs50SBW;dqh!;j?R&#mxXy zK&OuTElfJB)*^wggF%2qAdW6N{ub)qGNftnZy;)RAAk!uBk$&e9ySz2abL=CbYqGt~A^47g&*T=etV0P_rWxN*i?Dqt4#p;M<=Hmd5 zkIe9KzvQ*ezGs_XSa?G7rP|@Zy90`%v3T4^voy_yz`=xsxrNg5f4k462VvSH2Y!R? z=jSBf5n29t@5kxb%g&ZGkF{xH9UUQ#h*dEqCaEDRNV@4l040WZj(9E|yq)=o;RNG< zJgvWoFMs5nw-BG;oc4UNo?9Ms7g#ezZi8eMJygY!%15-LEookx1bg+P)B7{yInFML zv{qbUSgcg+#@KmFAn0 zsXGaT*Xefkp6h6u?(S(v42SOdSPNNcQ(vKr<2bNePB&3azeHgaU-n|W$I>-uE{ zV^x7KWY5(N4;P~to(^4pp$FY4%$$*GDbl>|>qJy5?mzb?l1*2fIxNQ4@Kxkh_3R0se=?Kh z%wzc-{)>K?epJ4j=E{l5%HTPsH7#(XKju{sWABSMCC?X7Eedaj6L%(_rzcnseJN=)fj-3eh|JyI_fk0Ud{a@3_k7s%X3DRwpE6Vq*G|O4hwJ z7(IR3y*EoOWLnE=P1b@P;XlYCncx=#r^hQ=!aY4_a&K!R*BUCNYEb2csD|s*)Q*wW zXhJWL=0#$6qYc`BP;=XLBw`V|K8AX ze7;FMRa9uxF;brjnG-JcWL4=ZMA|^;p_%gU zfvog=Tc#_T_m)A(fxUg;#y_|LK6pM==XYf}Bmw&)(+TEeGo1G-bqj=lw%g~j_8C-2 zwYsW{d&ANr+nYvPwUOzVHejkk#3#7}`0IVf^B(ry6YvlFrhXKQn&m%=Qw1D%p>#L( zlD&1D%z-DXd;3ngP-nXi`P_v`ge%(po$&nqIn=r6G8&e5w++fvLvHTE3Ok8JCU$Tx zd$R1DkfqhSwWs=bVJfn{nITjInRIh6r3ctNgk>{tlo(3o%JXxq*Of0r>vjp zQQ(c%hm^;x0ej%)$qtZ%#uQP1#gCZ!Xr7|#(Wdfrags}c5@Thiwe#WCT`!$7&u`pK zbRDNV;ezTsDbtjm_V6bKS|1sxeWSN=`@qm5!J)Y6p<}yfyo&xPB_HPT( zPd?em3y|=aoaYR5JMpoeCFguBhX%4cm$8iWjb+hqRg!!0J$7YN`^kpFuVXfCE|_R+ zo@jg>$XM?N(5(6m?7jvD_H zHyZ-)s3{YXtDcugdDUe1(A?nB&lQ6^>eX-xtW|L%q@HelQabkNFdlX_j|3eO|Qq#za}LCj##9hVVBE>KoKmK_jY5U+{f#KAyy$(`61M$%dwSv_mKbNBeP-j}bvB0#f~^u-%2d&0kn3S@{76cXS3=+tNLG54QV zSd+;{ZfLE4t$2&Y6?SaeFCVP`aEvnF&oVtv_9_@VniR1P&QyQL*AHe%axaI6_K#O` z**0=7Z0MF7x_aJ?w1f|G?bcj%Pq31PQK(NscDqTaY@$m`=>zeg&-LG7wExwFe%_0G zr-y;YqHtR5^v|c^6Iv?}L}+p8$y5(HDeis3<{2kLCQ`qI=XaouIw?5RY=D zNHR3DzbXUGr|tx&Qo;4q;2lB=^p4C26~mjg7TX>XRgrl*FCn>Z)~ONp(a$Ldr0jhU z#@RVKaSM@GzH2YfinqTQWtaF=7UmcX(}b@v$;9gbIfN4VqW089;lg#FXt=yYueUCz z2|hnh${5ILfj zPCF(RH?MQS=(8@n!q=n|51GyzlYdUY+i4D%8`HjhY~&F{{brg^D_A>9B>eYM8Ym| zo{7mC)9q>=IKnl*v`;eTPz-l&j(dWWNcuzFb9>?7Yln`CcmX9zTEGqNBnPuDS_-jP zP+Q9JL9OZ4&|xN~2g&!OewG)87TBp;X(R3y`7NLtA3Ed9jtjxRNi%WK?^)3Ka(>3D z{p$hvD;VutCOblN+`X=hhQut_R-OLOKb)RAp?9oS+Kkyzw*Ka2XBf)tB2uJdC5$h}eMu%NM!y_2dh9a}IkJQ&$|^1{kW1-tEYtO**tP~v?2wovJZ zQ8B7rIC~fFncF5a*ZcQa`(>zl2@zr<5wq=+M>%7jx>X{6kU0b#!O`q+Ob4ul4>qlsH$F09T9MY zJWuu24z4sXV4cUjtgIpQtZl3^ORpZ?!lebk3bHt=Y)YLzN~!M8eD8j}`f+-m{Z|^h zc&U_%dfoNRjKzrZBC3wZI6^`Q%Y^?b`#b_nbHsld*k_1l&GA~47(E6waxyc|UJp?y zvJVijLs+7FJSje8c11DHTgrd=6MVvdZ(uem{%cDbY|xK_$M#E|Q`GKSB#INwBX{uS zlR4!HryRsgnu?{l^_`M={t@%WjQNt(ymZ#LSCYzr*r5aT8YAp9hqdesn$xDJ z5GQR4rc`K*GTWLg5z5Se{bhy%eqPQ3IM$=Fi!M9 z?^9EO}k(2_^bpF;Yr>V9Kzp?27pz-487fzmJ|e|iYR>8L|I zKgfKNBeY}agdAjDOyKB{^`(rAt^^pBG59~_4=5_L=0C7~T$nY!f2Hbs_zFK+G`)aG z6!XE*yqTHZUYYI~T3o&nPYxDfc_wzN!8rDOAv=x=N8VmH%#G(4w#D6S@Qd$o%rt-&F$+Y)Oe*k_Y=7rnj;=^Nq@Zut|w zQYT;ZYhLDn2d!^Lg36<@hSOd_OvsUSk-hj)&xBx$ZTn<} z)d72La)I?oa7%tdG(~HS?LPTmG5Sv$Oj~o`hc4FYxm0D+1sGVL)H}SZKh|%h$Eu z3f^i`CUUX}PkiEAR}I61(=WatoD6GMd6h|yU?`J&4tCzD=J3NTF{lH@&s06E02^$CW2AZA?>jeUW=^k7;NqX}Kb4nBv4jS&I|4=QqAu8; zmzUK&*C*KTYL*aW{f=!i2?+0bK(e#Oj*b!gamE0cxAk@H&L9=9io@J)R%sJh*Axq+ z8(AJUau2xuR+0oG7OG9VOV00KGBUI}F2mSNRkgKsPap5e2tk(JK{^~KG3gj|Y)+=J zXBV>b9~`8UO+&Wd!xH zvPI75#*bl}))MR9(CyLkN9jVy4;eT|vja3EE||Z0&hP0-|DDZz^uKsHf3>q<`CZ|1^yP3uxoRk9&l& zXVB8^VqAMWDXqlNOhpNofLpjqGNODkwG4MRH%mFfVJD$fw2eW8UcK6Ghot09e-!f# zU}I_b+a+UJMj;ffRWLNBZfO~@4F#&0<*!R)HgC{hq#b*Ure^(gvG||vxxEZazYgXT#6d&B33INtYCKMwf2B$;e0DLL;DPV0z@ z7Vbk5k>`nY$IY)c+rRJ_igOOnOiun1cwZ&fk*n>Rg{WPpHW-eGN&VZnv5u)U+@tS? zvn$3UwsNV~*mddd-1?SUUIeakZA~i^CR3BR>c?nAM1;2Js;DG18!HP7T#vuph`l8K zri*s_sLzfgp@&QXr2COemoK!;SI>vtq;{_OH=7L;i|OKuarhnv4KQ(BUjUnvQ}}?6 zV_LkmC!d{xI#oFz%}qUS8v(7czFv4jYOv}XVQ`ku_q0gD333>S-+r^iy$AoK7O?Ta zg(v%%RxDIXt3fW=jmVTYdPwK*!istY0o{K(xM%U4Jn4QzF=34RV6L*DvdqVy$PSZC zb&Q)emfA<1n2=!Z9m2wDDE!HB#4zNYwhp|C-2J*QOWmq+3vgVT;H?j;hm9TP^T)&^M4fxzF|hW7=V3^eqnXiU5osvHdENCEY=1e={8ig| z%~1x$|K0&iZ(jn(L!+&_8LoqzIH@SRr={rRuFs8Iw=fwNv`_F1)tBZ*63 z19%H?D*bnI#G%-$`MEjQ6|Lsj$NThhoz8JgI&Hl_IS%-_e@Mo|hLPSmn{~@7mD;;E zZs632Ww2>9Yx<`LaGcA8_S5nLhZpz*7t&gy)Q4h=K0(d*@7zk3KRm(`9yn5e`Lv@55X}($CeuUH2@vjP@sDU#R?pte_HB)tO zH#;wvoVzufyIr1daH?HczPX)W5pI8MOq(|=bu=y4EB}fm7b7fZ5Crg#ez&yn_T))U zp7Jau1_2_u$n+p%>;yllT*n!V$6fbaSy_~ZYc*KKDr#tYmZ7~KDB{Si_3eH?m&;SV zYkstyP9F8L6LRwwS4Gv;{FGu5)UiZiSS)_E)lgrpuYs$yJ(zeRj1ndeDgU8=Wp+=%>6{0oi^;{ROu_pe@ z^=SFucTI)?f~le%`=NyBB-|Rw1FBIFS#?JRp&F8BPw8F1zxNrZIE3!xuAUejjor`6 zqEjr80-thuDuwtPif~9N&ubVO<{>R%93D{Fj%K~Jc|44;j{GSL;wOF!0ZV`{wbkBe zid`?7=pfks371$_;CcJ8c|Vglj!ZiCa+`cG7_G|V>`(TQ}e4aXmUcV*Ay3vAC!Pht==Aq-|R3jmtbzzoFwNhJu6A35YnxsYN<EOkx<9iQFKKO?A3v?=-!c*ajbiVO{{&%CB6-NitfKl=;-BBWE$dVvW=Ow*JP zO~)0j;o+e*#J#-1S%6lNNWA>sIhw@C3+t;LL1YZLlDFr5-ZWc;h1Qm!PZH_W98m<^ z63Ws+L(;5kBw!XpnuOSz(Lx?6P#h|w)Zy{<_4UV*C6PqZ34cE`5-29IifCkc z4SX(_U{XXoeKuGXOZI7goc?fZ{rkFIW1URDcnR$xSQHPFo_PA+O%CRsW=>YUUK4D# zFB4)d-p|`TA_pY0{*W=r+v99Uyj~bt#px^crK1(uk2pswU_G8!nBOgw?b1+22EQxe zeHWhlv*bLj2-@&9I4zll;R!77<--!RIsflJJv#W^`L^uPc${ARs7(sFZ!}EJIHKh%$-yJacxC_TB+5S_V?GLFI zWAnDTD2O<5iZ?CVrPlFgq)sZ73AHR*1M^3$5=mZd*@u#1dR)z3C;$I@^Itb?EB`xN zQfK$??=WzDCc)?5>9gWCQeS%;0m9FC10j*{QTGN?TjxS=_%BA;W#oq=;FnZiw{j zyuJ0WXVq}uyj^w0*QxuNEi?hcJXavZ*ib;PfDTDINN8!voiqtaLD{V!0yOky2vr%D8GeDk&YK0|_4FdC1A^xPVn)cEgl~gAe;z*0{S@N2QhO zYkcgnPx5_&FW2FW<6j^Sz}oVPlF}@|2Lbsp53n_efiJq)pZLgY**3sUk?Is?e%Mvi zR@7F(8)77vysDfJ*LL_!1fIAyNMbz0JtyDi*%ozEFy0`F=m2cDrn>@-r3w6_977|J z$1|kosE$Iubaaw^L9rE(AVb9~!aZjG|{C)_}v5myH`4~wJ%Z}qk^p}meEKNkReC~L#R zsl`>Gm6eocrWr`Jo!_IeckABsZ(UM z=xkUZAs(A*Juy$840hlc2xNZrprx!-VwS<*rwXf8&w6TOCqo{OD_5XOi!;xcYm_c# zR*09UBV`u{dnc>r9g51Ca@kzhQymUON!1~f(G&e7*dtt!&rxQ)mLR2g+(K2bZ0>m=4T1Pzp`s!b8icg2{ zJ67MXbdMi&BM2h7v0*kXz4{3F;Q-QW_8U*@cVn{*dClgP?J`5YOA0OeL7KP4BjGk+zROdm2+%kD0nA1n z1RKa>#XDf2T?6sf9A>yaD1Vv)VYvv4zI3mvLvS1n}gQ zf=;wEIadM|8gexw%PaVYbH^yM7^8KaC*;Zm zxh&0O0vpHE?#iguf497l;YV)(H47-JBbcf`p~SFTkoX?Q6F&VSzk-ElB65RyI{~Sm zTeBLEC2N@aWpk8_SoqmOw?7sqsTh#>r;o_h;Cf> zT6z3$DdzvXoE{)!>OQkZ1c)h=J1D-xT?d~^&G+dS>0AMSev=legk`D4r8{cpm zifAw|PF%$-xrzG5c`wBnr}$5DXLZ%K%N!-=?`8AK`rrIQc?2`CFNd<;4EgeK!R<>v z^oQK%ZP!Y=&hh9LR7j=u<_kk$w+VA`a#RX6ndC2B7h!NWHwsF1!mp1DoodZH6hjQ0 zqT(~lSl=N}ZwF0h!ox%K&ULcf6kw=)-cIbt>9-72R07+;jHv=QbI;)mUAwk<$V{{} zRxCA5KrGnZdSRJtSAg5+w_4e5gW23?wKjv09m=H?7Fk{v&qpNoSATYe3WUl8iE+(F ztBeHFmv{a;(|(T^v3+5?lS6Uk7DK?BgAnp8rkaD^5R8OiuNrh-T!YzzDLZfjFymnz z0cSUxo<^~3kE7W@;k_6A3BI(TzVGNMvUF<;yg?iXv30G_vN%!?27i_oPpZG5O{-u& zI5&GK$fH)CV;AN{pS6)tuC7(!g(#V{XLc)>xf|Mqj5zoxDmeX)y7z1(C}`)ukCOjR z1Ha(#%HV{ku3*j2T0t9|BR*De!+!ty1b9B$k$kbSKTwy@G56;&l(xvxur*h-CFy@NoCwbrbHAV z^3T`VgL#e!m$;3wXASM0P?~6yTM)?y(|IV{@dvWk10u4VW!*g=pyXa zjwsI+8qI(de?7V#xuILfx<;h|g_ysO%^=T|JZX`kp0pVukF|D3 z$(%bPKyV^>2xhX|1T)a3Hg67cqv#ElgEIkaL)T)Y_+Z}qyhYRp`wd|0Orgum z>-_`G?r?muhquw7)2|Asjb8AsYq7d)Bkr_ut8V?Cx5pa;i^8z|L<}IdZ!Cw z3zoUu*nIA)5pB=azBKv%oNqJ_a;))>%ad@7Xeq*&c%GB1-w37jZGY$bWBAtNezHi<;AG(gHq;jpDOK0v?_%TZ6iT=R%1$-% z{m9h>ItX<4@=BCPm%LsC@iLVf%rE5T+-Wn5Ni})j)@CvLe%#R-HkmDoDYyz+a%xy! z#vxAPhmcmD8R~79p6G1d)gt!G;lh4w25SYC;SER&E)d?wU&uYCvDxZzrHu^$p5;CW zC7_XZ4G_4mDscv(66%u3cjs4B1tkZm*?d42N9?Vo^E{Na8wBac|7cjhTEnwpB^XV+ z3kO$_H@yHO*%C-3j&3lo3mOTS6+3TYE(f8W_d0amYrd)Z+-6iSihmebC)u8>rC>dX z6&h@4*jn~FDmT4;Igs^Zzg7yGMY1wV4xMlXN7*;;jQ^AWj%)WNIk++lKIz)LKJP0h z*p?tE3T!DTd*;*e@qfBLg}lB#<#|j(Aaz8+=TI7Fztbd+7u+gS%>fCGyKxtI{kVYJ z10(7JFi24S?{F3}RfQ+7<2`~+ZQ@B5$~CNSKIqv2gJ9m;Eu#?jlj-$$Gn`cr%vy>x z6ei>;Gq@h)l)1F5KC9Mg44?F2>CC?Bmg_=MI^Uk?=Y3mk+G}`ci!P;N%HIBai|UAO zEI1|lVMF^NF#-N46HE@8^zsa>x3meI6mQKf$AAsZ0{ooded|%dL}a$4QcA&wIJF(X z2S-F*O5$fz8;>Se95rhgtk+H?>+J(c%`-jc)o!J}RvIWM@f^oDrR4M~2DiVtyt+!- z^OC-3KMu*Nd&BbMZyh#R_B~$y%%At361{B888Q`4DT8J?Wk{=07Q;NYO@Wv;sE z5i&O2rEq)f#{1ilw6V`qQI&V45}$M)TTf;$anBzUB(BOvXXrDE(0O&4UK$18{xRGB zvmvoTtVQxYWhpqhD-nFtfcpZfX)P~ze@_2r6+R)pS6r6!m1&7(!!PghWlMeCs)B3)e4#?l?kR+O2Yn3%;Y zmN5M}f`rlLTjn#^FNZOKTWV8p8pm#8IKevYh`<0RSS@`-zK=Pczp?0WgU|>(7UX;zKQ#sh~`cK8?2zYPOAN zk$HjTw8@u(i}SG0h&Z-*n&Hp$6M{=YiKTIbvA@=c|A{D{{`lS1df4XIPoKnDaK^M* zbDpVoO}@!BW+`N{DO#-?(MyHX)(cSIo}Kzz0!qW)uBVgr5oA zCTfjqu3lf@6$uH1jo?@uvM$!eGyPhMl(h%}J=0Z^%Ec2Y>)uXw! zNqdh@#K~%Q(`Pb`(1ujP!CdRoV)yavy`fAu1nuaXg-RXcec<^PtFo54CV zViFQD3ZDIym8J0s5gan66bsvSl&j5xIKPQAMDRzB3)S~fJ0C?B>qu=IT#sMzT!a6& zvi^Scv&-*0l@kG%;VHZ0-{U5D>imHVkh{u6H~&21B;l5u>Y-9!b!w*0BKYyyY(~*g zRloel(P70CfNu=2^@*fh5H-Uh%=%A&x2DHspGc^W3q1R08k#jYljvdKDBt(3^+-Ig ziwPL`1Ah#e_*$h9WILcg0n66+CP+|_4d_D**=@9=&52))q^K={)Pnr4-WPBQD%;Q5 zj~U#6TbZ%4Lb_pIId}~l9c=j}xuoSV)tTxYPlw9w5Q}C;i3`_GagqHvKu;nl76izZ z8}Qd;wtQqt`Qqi<_IxFIl~Cz17aRug14;20b(1h4csEP5`MCu6$svGZuH(sj2Lc0I z_UvBP@2rwo*S}hLfr8{;0llwJo!)vkq(qDb>MwXK7Rht+(|_Q8>=bI&#;gEdFeIsn zvesmq+aII1383&-9aW4Ioh6lrY=5~uSK|?9G(D0@$_bkUXp9U??1Js?!&hDRGr%U$ zjT8i}NJ+g-a-cj5;IeSun1gid=Z}<2RjeFvMHJ1x_(C?rNTckq{m<)Qx4Z;iLqEUd z2v@5shkoqB#$n7IWw8K%L=-&1^<3?R!^G5BgWa&^3kcGeJxX{?-e@NIYb5_s6`!Lh zzGW#c?;kG(Z%~4xNi$Z9a-#tzl4}L{f+hKcfzK%iCWXK}xZY@VH)}o}>=Y!97XB&SnCI>uFE|q?ROGR{7 zG!uJb&9&MCA-kqSHH^g5u%^GXd{9x9YZ>j*qt;4XVl|M}Sd`}X^T{y{;dFJea@ zRD0%eOrvWtQBFT=bcR~aq+BVdsXpiZ^SihM-x;kaIChbUmLh!(iKoi0 zRVvB*EDg`wvN)6TIHfPnSw!>*KB+MpHm4vE2=y_6JT#jtQI=R$5auRDt>%OEDI&&# z)1ltV9(L(LW=&2xZCqCeMe#fq#YBwrzIm`eU-ZyObtCVLS4B;~n_{#rTaiD3eRWhq z=`!BzhBorO@5R{1LBoPr1E&i~*Q3UMc#Y)sii~Z$lG;SIAB=}LL>!N2HtHety3aOx z22tkJ-GSW`v`1RTgH^ye+o;Nr8M?L#1kty^aLWztGNI0?k`{J_F@a8fC||}C0NjX4Y?+qJB7m)F2?B}xO!ZyP_t*2VF8#J%NseNY`@%j z|1hEP@evI4x<9O)pRqzutyn!(pdm(a-+m=7ZMa&L<}Er0WDgzZ2v?41Ij@oaNzshq z64%e^;oWHi+lnf&*Uv6vSxV*gk4ln1o*#GWcw7dksDU3f%w@jAdg|(-deJ$bqom!- z{gQWi?3S5^l=XBX&_Bp$=W9!+vrUQlT)x97SLVYG&dMDp9E^OPA_J{YceJb;GtdE8 zAWIHe2i6#j`3Tq1VSBBYp?8j@1JaaE9cxppg4#x0XTSbgFLq_TT8^4vrJi%YR}k&L z;{R&_#`8H7{vO4M9Y9YjxHgkH;ig%s5fN&xdN_a=BbcoyTQb8seh^<`FGBll^?1nn z*V6p&-T9xFMRTZb+y`ygo%d~6J|bFGrr+eXSmzjOgmFic3aZ3PFbMGqk8EqKx&k1I z7a$uTwJu9)5!o_suxwU0o*FO@P<{&!zxc3+Dp-6=3wHh4+J3AhZS7nt?8y8&evj&U z8op8Sc!>CLZkD;)3BGSnupz?rYm~++f!5!p2+NNwBp$_8=YA^VE{t?HCJqhLlptZj zFu7v}Y$SYt_t~e&F{j|}cEuXoCu&>g!h0!vSOq+z>8`tBD&F!Z zew9G#aDjDye@@F~2Vxh2b&t2F4LX3?1Q+A7eq!^FZ|Rot!r&!0!lwu~{=HHCQZCGJ z6I>0sztFIEU+Bjgr&A8%B~QMggnQz3J7!2^-477!)A^FSDaLzh%kp(dD1Cg-0uY9> zi~eEVKn=Ae+VZRvvkK2-K9K;p$Md&WO6j{4yK#2o5%5AT&)A5|Av)P3d@=W_`H z^aL*A>t9;%+0GC7FLE1!rKvPfmXRQ#C|uQV2=!HZixpb=5@seq>}}QwcwDD z6wxmXM#o`mS7B~`AueKT$?7^C9?j@ESW6wzkNKeuv)EViIYKvU%?(G4j&yCu&cDl+ zwHCd`{(iFBKsiOdBQ${-xI7a{aj|3`mYV?ZsFlL)Z*Kk8Mk;WkYgHf(IWv2EM78#h*C+qTu%wza~hNn_joX7=9a z?0vrTo?rQuvDTPl&F8uAi$gQUAA{ht&SLioB`$>6tzqAAI*tIUWBG!@d_D`CJ?hK=y zVP7GVV(mntu`=U*!h91kuLe-T5mWRjChFyF<63%$ZYtxT;Ppw$x-QUC9vMmR_>zm@ zwIpsQhR>tbc|VXY?PQmcCKx0>+zie%e7(gTzZAUpX$x9;DX%6lN-7a!*cJyI52t|h zD<|QVw$psE$?fqn8rc*oPQPLnErtK4>o=w(e5B#n|H=Z`aN7Xb9{v92fRobVthl^9 z+8|03KyL6nz|>sB@t<~-+v*N0l0SES0L_BgF_e4y|C{3N@GTP zSw@1e6UE9(E0U6uhBG)Eji2xBRbL|@S<`C?gY0BaObZQf(f1bLq)XQ12#h}N+8)><&vEAd)^_3(_t(? zw0;j~i}_Tl1Y#P5M5M_EW`5F+$Yek#L4`f^^YFAV}Nk?iP!e`goo#YW%!QDsW%RdEc=FQxll^Gm~RpS zQMu){MxGNB3-O^XV?(sxUx`&>Q8+a?rOK&LkeyZ++rY))mmzFrT69Q@`(ff@tXyoO z8x6Be>lYdm7>2l8S+1Yckq3^fQPfndUD`@rW3wzY??Ls;-vJ!D&qYe_q-qhX_ zk2e%1fqe+p@vRb1`4uILx$8gmCGR66Z^F#-2YivuGLb7Sn7)7EG^_D`!LpF&i$~xB zWx>`j3;2Jwz?+Q2oGX^<#M?qAvW*;+==iml6f{tmC&^|NoW^@v7&&t%uNTF>3DuGO zqp8G4WAi2Z-;>l2Y_J)3fB2gp>Jw<%wVl;Eo8dB=zco-3d20Stg}JX_NL%_&e|ykyU~m3rXW|-w717i~E-u_aO)bFg_V_F* zO{rf;45!DoqApTEZkn5yu=WaV-q`ubosJ;f(2|l8Nn6p@vkn+i!VYd5xxoAU4bWR5 zhpn#XLkrOGgg6uS>pAU}Y8PFB@*mI*fw;Jox<2XxMwT3OqG|4L7BRGEHgRl8orLj& zlL@UA+LS6x$7f`VV=K4=iuut3JKn8FqTsHbGjwx&Z$MLEJl9#f67NN*+^}`iA2Pj% z(FxIMD#~RWNw<Dx=nKU}q@3n#$Lot2YYZ`l*T2gq1=uIaZb0b0@Ahr94|lb3 zmE+FE5PqH6hYM9@&!F7sc-T#!V84PZ@?3L2vL-%}&E%YiQn2mnm>moPeHmpV`mi{9 zRNZB>JqkS_B-g*9si*apArPCJEo+?(ecyjVf#W z0a58nHD;tXN|(o&iL%=kgTBw0Or{Z@Ksa;V=cWwj7Thbq99*GZ`hs8|fx)|an$2q6I*UYswqy{W z*zcZaecf?gNUhpFzZ%^MWN3)q;_$fFM_{px)(S7@WVM>l94$a@@7~rmiuy?5f+c?) zh`5dR2O*?3wYDlaTxVkPT|d>ET~(U|;;)#Ntn17C*~W3gR*?q@_!ED#3$pVXpApkq zhp@}XyZ&M8Rd>=A=FcC$gm>+&b|UJ)|bFvSFvI1P|c`|leTkCdPn-0OeN zFg(#8NTx!LF(>AX+~5Sw?8?@w@QC>A^URx1J^rsr9#}o&UyTk9h^4O)en-PTvL_-8SDKauAuT#QFbn9pOMLP}eri z4IU6j3$t78;=^_Fi-b_01-Flau$dIGh^mSeMf*jtHlXuEuOM!K$ZhkcSuaYXWB|d# z&gkMq-$@?_#}!F=jG} zxjp;VveKP|`C$vA=opkJZb|2Zy0e+&tawx>u0r0f>;x5+^3CAe(xUSV-2!)P@9Pc! z&tF)74OTQ7SCO#rrZM0!GRJqIPujtpcu5J*W;??qCTGMWf`f8z z2BZRN66r0MKsK^Qn*7=po9TMf_hrM^k~U8gLC(+c<4vxFp#q=NIUI{99Sy;}|FkxU zZW3z`Lf3(exyX*z-S%*Qmvnh-VN6X|$#EW#;MNt6%*nk?4B8>mKFHhyy0!J#1vOm_ z{eG^;&p1wR+wpQqfY3<2Rf0}fYgX(L(@G&|+XtX6DrkBT4T*N79vI+>J0Gs}=%r03 z(yXmHLE$lcvqCBLZS<;PO{tR+kmvZ%3R&%QanAI#l#~sf@B<=)zkst+6StS|pddqj zfMn`-6FT-m@+C>;HYp3Kj3~LNU&=mfnV;=P zT(xa(sypv=^4v(J8{^2N7r^ZgmBQ*b3NYlI&iL4@>l)rfJ76$VtmozHpix`I?IGif zFtF}*q&7lfrt;hbUT*T#%hwcS5S(15^WxX?da;hS0qVY!$1qe|jeF49MxU6v7YS{> z?F#gTbO!rK777S|R!l=Wjag!Lj!`BR!qc_W8uJB|i#Q734C?TI1!y!hQGOOV|%cFy91B@f3kv z6f2|VLHEo%<(|;j$5-#!>5I!!zf?wjvq(@e>DW=??`_Dj?Bt0SC}!bTr_Zyeuy1*F z3`{2*f^(g^L*%FbLMq_7!GpeFFVuVMTAm#k;1O-t7q52-wRgJwH$3a>kM1kb+BqW! zft*yWUUjviqs6s9QNmGE=RdoQZAcz}-@wTbR}{|lDPGaU)hX_IZy7&PfXlL=>sy-f zVV=59eejd8X_?t)-#jGgGTQVk!f*RDCJkl9Ru$n7CaS=b|b?R8e z>2&v}64i=;EGH#CnXMa5T%-OKP#k`HM=6fE7w?MmBbL=m{PcUk;KQ$JRxTAkQG)eS z!J5#7L7<~018v08qy{weA|r}g-F9(q)xL!N5NISCG$ygv z?*g{G58=JfpYhT9HO~9>HgAOE_&3AJVee_aO{TL|yTvj^krrU0ab|lzV#0RipKsnd ztp1^E6sQRiQ9C5w)gqMriHh-~{+GB%-Z!ChgAF{0a$wF-oS>^x;wGLuzTgIL9~NVW ze+YYnzeD5&CmCnWn?)I)3Oc&*GEBL!+GuXOfZe!V@X|`TU8r{^)A6c&Hs_N)jtI%5 zftgoP9V_wvMAB9vOBR7gtkq~6?{c%OmQg^~H~+)Nh+u`irjBVMSBNj>X>*%CizgzQ z9kM3a4Al$#1jY~^CeRmg_zDp{L|9;%lR>ffuUi=G6znk1Mn3AM-?Z30x01r6|L|ud zxJyl_WJkh`e)iro;E)q)Z8Jh>j6f%x5-5XJS2Fc%?^g#~?ZKw8M_i=X`^iHh7)2-m zfj$qxdn#VbfOv<@I`zg+pBKT7PT5kF%IB?=T%r{5@f`MJ1haf`o>#q{6z(S5B4)af zuzx+~DY?y{PDB?}GS7CUIgX#9QR1JWEJx6%=fFqg>M@X5m3@@m^6elJeoCzFCG^7I zA&yNLa7nuy?ei(O+XD1s3dkzokKnR6VJY{7(ko&iq8p_jUH1s8H6%xkqls}sawDlW zlvQG3j zMJ+$A&O*i_#vgOJB(1y@1RoW2P=AXuQ9J#O-St;m(?TdBn9xG;7KDGueiPu_pXDxw z+o!;q0C9s>OJIWWXgs*9FWtO4#DHxgz%eIVx|IM)qS%|qE##FC*ZqxKs-%k$=Q*x( z8eW3WLd303luvqxca-&BtObQ{S@N)Qv9@YH@+iiWQcSwdF{)mlD$5yd7Hfs=2J5?> z$L}@Tn3wCR(99=j*XV_R!aVv-P(RX^mSd>Mzfi~cV6!QGK716>>X#kP4V|(icRoe) z?%IDxdb&S`|3u+JSjxMJ_-}cG7n<*<#3jti{_ADKgGlITaRi0YA2WjJbDznIN1KC~ zACisa5@vRY+-_R!s_>}d=ATVugTB*JCL3VBkgC1t{8$}vSX_T2`m#)^m{|bJ*=lYW zPkd6LRwLh=Hwhqc?|L{Ur(`{VHfvPx^@9s%r|AxWph0ur47WBA2ocfK_Ed-tL`4fz zFEHr+Ohg!-L-Tb5DtrKMbAuPHQ2l&^6PD>%gB`}+QBDgsmLl#K6oy(h94wHqDY6ZY zR!W2j#a04MCQE`OCdYX>nFngN-`ctT-9>G+SQQU|4U&DZSIIylFTUt%`)R9{jLPRO z8j$@ukRV0%K7DU{thecS1Ni0GvRO7U+nQ@Wt*ak3{4r(qPtr1tWIgYeAPt+8J7ZlB zEp7dNKNID%!};T_u9Q;g!&wpZmvG8)`So5u_A6H^2UNeoCxG^w$9kipw)8I&=g z(?r)~iev`+tpD{;8AL`Le<-1eput{@JCjU8S~#3QTr~25G(909L0n-&R3{)3B-xVf zjOSvpV*8Wrj@+uv*gkvRvqw+m%QA@~Lg5!kpL(5H{>;I86q^XD1cO#bKpbCmu9P1> z9eGV^V9I`3bU~6~&e_%FOvs~4=DRspglAPez6MMt6n4#AYqz zqWeIBz#XE%;g1bAv96EC1p*P<$;p z@K;|&*to*>>52W;m^AQq9ubmdA0YQ2azahC%Pilx(giq3aHJN0kEu~;x8nlbNjoyD0<0{gFu}w($ zE2~VOae36)MAvk?w_uk5m zbeGE9Y;Hu$GfeA{0`J;Z^0$<=;^u2N`^%0#th>?4v#dln_h2VGC)PRg$sqV#2=7zW zJ-JsalOnl&9Q>iXB^7wbJ(JQ9&uwSF2hyFeHF$-f7O^f)fkba1ZtPIe_Z61cKz5;L zq@;_xG1KZy-W*RXqZbB?O>IySaf1sOaU?5zjlGcaLPl|QkBKpf$c<{B$&Fe}90!aSd@zLRgpd!u@9{mrKr83*9o5T|vI;^^S zG{1D8qnU$U%nl(=fM}IIGWX)>Ls%z2_n&?ECW4)Pjz1kiOn`pCC}x2A1aC#X#PR-< z&?w6)cH~|DFAGRQxaZG&269-(98V?c@Ye9q}2F z$aU_AnCFWFv7Jg(DH5@2nNeJd_(y~U7*dr&(|VeP#$+-yCv{^Srd>pp<+g5VePp_D z8k%sV4SGV3 zXkG<&L%)Kd6gwOz?fMj)1oJ)TW_Vsoh}yuxau!5GQ1zPl!Z0p%`?@t!e6@kU2wv~7 zKyYTCwK&DZsE>z)`OI`5a6h=6=4<3c)EcL$a8}`JL>LEtvxS*KJm;*zEfMX*Z!xlzXRdpaFVCKzhjPN0?}y^O#z4H1%otpn)VQR-saRFTZb@p-;*{^B>4M5{Gkf5}SvJ$Hpc zpFe9ngF|UV4OJAapLrXwZ2@p&Ha$cuaa0PG)j~yVk3Zzta4d1ehgLuu&BWmiQV>hE zFd60>82CLQ%??hiys-&eWKHr%cEfBqhOmrXlYm;S)7qjB2ZyAAQVBjjS11_k;sS`2 zV(~*_6OcWTUOE|Aj^86}%&iR_xq0$3;$$qTCaFT>K?k4K)bZ<`57mG-89ela(|Cp#Z;zt!jpLl{4xhj!X0s>`Vf zRrn2s>=Y0gM|uKU+lI>mZHiCY>KTEnvkI=xLToR@RiiL0J89W;51$}e(>W{T=Thp2 zW@io8!(IA7OB^?+t)vG@sTdgb%I!@;Z1Pwhp9Vz!PsZ^_I>G5M1<0`9)k_;k#X2;`vkPnB&QA#9X zw**lreaxS@GlhHwkshL{3-}dx5#f`P{#NPvH7uSPgG4VUkN>6fZT*-U4)XOd9B zVkd{zQ@E!Jy=X_gJGbzdAFumfRc5VJ4bgM+mhK^;7X$`m?}rz7F9?H#B+-8RgxEfg zL+~A67^W#W<;~$wL-s>%hkQpD0TOtdReYwd4X?*bx!?+q4rN5vA}tO^ z_H@|D+NK~-d5QKNq3^)Cz&w2UF|^J^5WUO)eNO-bFTWb%bTkuo{I$^v(|9$cY5nrE+KM0dUT!Kw!qnjw%DQY4IEHn zZH|cfvV1RaEV(Zl53|Xg1;Xv*G9OQ0&V0IdtoEl3Bqja1Rp_caZY}3X6u%nEp&U3T zN8eWY5(mr+fk4+lyt)Xfxs4*zVR-sH>)5C><_Nq`OeKMEESXTt?V}3=3mX~m zF6B?xgW3XG5T3@rKGONP6*ssk8xiUZ{wY(jG9K9+2x9Q+15EQK9`-dzv11G~Wo3P! zmv~vu5%G1~_8JQBw)rg-Irf@T+p@$Oqe01@B`}TJAEmbjQ}vg>v3>Z1#89umCq5k} z{LL)f7QgJYP|DqXKvg>2#-u-(7TVcguG2EfuPxHl)i|%cK}w1 zzQvRr4EzAkfSk8qZz0y$`gXIZmkf9SmRf{ZJgd%DP;U?l@ zKF$H_2-N?}U8;#AR&=DoB7ry_a@2mA*u<`o>TsS}+)1T{ve`fvbFMLF^j9~=$)`{N zLrP)qe7+pB-a4kPZa3Vn1kCPh+<#oR_GBm>ZVp-A{Vu~Si`ta|`7)O^(O%LM?mkOj ze-r5Eu_k9`T7zf(Lt_gRF^)D`YejBB(U+OY(52)@50iX+{No zmA?L56w5(q;SfnrNFox?729k21LqP{OP+flToICb#2|UvdQkMn95~JQyaD))TpQo* zW1@@=(l<3ebY0J3+&~|J14Yn!YJE1(lntF<}# zeD!wThcNc%ZnfC4m6FkV5Dt@P7m;$MT?G1%PXh4E!&F)PLj{oK5pd!i0iKyjX;n@v zeTNoFx8ykFM`|w=?wT(u5Jo%(TEresfO|h@+{d6(G@eE((cEgo4K+@=ZsAZqmQL@r~3LjyXwk zivS#;woLXO)f%G9T!Wqg7>@>8d#$|pTQ|P4NQ?5AbHsQC!`S2>uSK3(^BH8Bvk!pe zGtL_$XLJlH9?YVK`{kP34M6x+O6vrlRzn?@wkaiN$7?G^`=;hO8$@1S zE@JttICzSuLQm47DADB7cF&>_`0|WraV6<#lZ*FwsQI1-GA|cKT?%S7M+Tv9nz%;0 z`<76^f9w~V%#=8hevkNO`Qw8UspQW^)bzMaQujm?+(AwSE@MJ5i0*V9OaHWl1{tf& zEQBrmrxKAftM38Q>#qwqG59}VeCgr8+pd@LyH6{59Kh{)&{K9Wmi-i3A}3?aKzNF( zg7i7|H}XVow5#gy!f2}RvV{((=W;k1z?L&pi{c8aE??vd<6>x!$^IqRo`s>idDFih z`ikO1{wVjHxeq-1z7E2Z;L(q+VOEwUeJBFa8Ri(%gJ2ActWZ1MEf8!W^O?zCn+yxjR-VC zGjqd0mO?U(X`}K8QsT%L#jI4Sqoy)VBhey8O6Htzinj5IG^ind{-7U^fV3tdr*2G{ z4gH(8K6p8{ZMy>C1`(4HLAaWYsgi#Z$~@mqw`E0T3-L#UA#~bID)Yk|&1?pU`?-V- z`Wla?llA!7I7PR=zL48Mgt(&LltGa;BxRJxCy7a$?_2mN9QKgD7a_z^^n!n0?)V6R z#x1qTe&FrmW7(Mms-z2+x#&`%o7nV@Xdx3I!t&p)`1oS|{AwIFL&-5(uBzHjYq@We ze&A6Y@LR;SLTcDeW^8T$>VuD$`qm;0aMQd@Y?&!?<5EMoMa2rb!V}1KGa$K9yOR~C zGRr62@-qrwo27FNjV2qf=YDgp@V+okQ=;#f}t+^zAJM)nu z8b;xo$O2L)8~rjKa`N9GUWMJj^UQsD4RHS^mhU0qf!J)=57;7-;-NzI(LF3A%>DY_ z+zjni&tz-#3ag1v?z40xR?2}4CP3N1mC4>D<8skq)jN!)-BY1Err#VF!Nkb8J&>#$ zCsL-FRvxgCeC>Mv*OQnazg>D=rc0|BWgjqhRZPx6+AjSPc!~lemA6p>JBBS99PI#H zbC#2q`(lm>(%~?BfQ7g6%}Z>|8gLjWR@{A4yOB9$geeDFQxcg^vX$y>3J!RdH8gJF zTz3zOD>E^2wX@aU8N*ecSnes{nCU-v?lXF+N$FpWQ#hQ7{Rt zc1!q|b6{en{MfN3lv}l&+Q~6U?VmQOM*hQ?I6>V@Wz%n3*)t<`aiuwH77) z%c=`0jq*OKR2H4n#=*aefKR{>H$`G`jE)xw&9>~OSxKuz{U(GJ(B^vAN;8KDQ=l5w zqF?o}lYMVNaGax%=*%9pXmv|60KNnzZ!XoNiJI1Qj#Pi*(A91lf9AsI_GH>ECTwSGN1z(iTfOjYIUV1GotZ_J2ERX8AFH~LO zI<&8Vtnk|)MoFHDRi?BO<6Tbu_vOOv$-`B+(gj147jl&$=FqLI`?E$yoIz1*oh!%x zwQ5bXA^z1tG_&;ah}}k<)CJ#Y;sjU3Y|=7O`fNpJC%+5!$7P1D=2EwEVx}>> zAoKAEr^<7>lNM1sxPvBViCBBnLIzr1; zQx);If>@DUFb<5y*M@mc+D|yflYc{qOBRAU@hb>-6mJ_O_epd|*;_0YGVSJmVg&OY_$gkJ{h&eMqdhIJ~RJVnm%TX;+EEspoQU5kI6|EHUe%m02y+7Rsw_jHpW`-5^ypi7zP zScDW^RHUjp-!j;)z&X4_%1l+u<4iOHfwxgIP}1$xZ+(_etE^C$$_iv;+S=Y?63_iK zO0>KrZ&V=L8PE`lnt2~GjDiH6AJ~gRilYc$ASuo!9mn4<$bb^Oyb~7YpwZ!8?70D} zM-K+?P4LD~w3+gy7yX;`upJL6>HM?MxUfi7XVuziAKirjfs`bX4a-eMK@7#0g8a2! zfeD0OIW=6AffO&k!xD|SWVUJLb1)4krQM!D#|;Zx@NCv|5#?o!SF)~^;Qn9I0Trd$6kIl-aH*ppR z$Pb6A?p>#Jf+vcGRB$;T#{|;RF(aF|tZ|u+V{q*5-yOVMBbA~d*t4=ag*0$}%qY`4 z*`ssz@qfWPHK#I!qCQsn@Gaq*8ILQfjwL`1DYeHQOb02nX(#z>e+Y z5c$;eO^I!E=&)=-2P!Q^h0UQDFTXj={{x%_%Fs3ryBgaKHLBz^Da~-lJDw1$2pw%l z;D_wZM|wRMjD*)!N+-P}hH^LJ{%z&{%L5aLd_`nfO8B*&g!#=e&z4C>U$dkq4QA;7hTXjztycxdlHL{MiCR*NCarszA`G4pL8qk~G{7hsqik3ovd^ zl}!`dtfozbuL5g92}4A(rlv^+2c5!+L<~&4fEWG1%5Edv6RIjvaxDNZEnk>lnTV;5 zQHBF!KnX37z&1^=U~|}B{tLV?KUBy)vF@n8&xR%DQ9mC@_P{C_9@kQMalU+!l8{HP zNGAJRFs^e7jk{M3jYh3HE4p=3sgsh-&9%MtQw(R1OYLJW!g^I$cJ8D=)^@W=xVYMS{1`cHdldVoe;a zgh(Nya<&$eXk;=`( zjV@8kITe}8AHg8i(n}4|BIUhZaZ=0gB{>!Vjl@s}N;hSh?mm~!An^SK5gIgt(wXHi zeFezUwX(b)E!+SccL#`Hj0GxdgD(MVrRuw3V!6FV98hPP6QjPKx^!7H-T6wR-dej` za$-IQyqrEe?_xawyJiPB5L_v`{hooOZ2zMH$NPRmGy}%qhngp0d&e?lp1xUcH(h@* zFxzxBWONpqpm)Hzkn!n+7Bg9J#JqrWYp}a+MT!*FJ~UK&%|nF|uHPHX5S_}41w^2o zM(b_iSXZ{T$^vUTAGXG0f|4u)o%KWXdRujro`+X1@_DWC>FSor(k}zF34pGe2X8K8 zGcCfTM7hL+We7*_B8(@Ki+$&n7N|9%B~tCT2A9Dn(#MjiKGsiO>gZJ;#=2|k>6LfI z%WT;HS!rNAn3h;^!O8a;HYK)-!r;|@DXA^+2CYxan}tPlxg=uMpwyiNrn6yf*aQ3) z8f0j>O1nZty-c(tJztfHa&A$l1-g;)0GguZ#;zb~5jqv&F9$t=McR!dN;kl8&|kaH z0@(8~xt!Z$4HcLwl~v|kn$RpdsphxcV>cUTo-^$qF@xR;B;xD4CS!o$C~^A>*36H# zGVZH7nJa%-7#C)4V%$azwCrnub{z3ZKzWzyu^AfnVw#?S&tsVoYe!h6DB5%F(cDz& zRq!{Xz@$kc2mzn4E}B>Js9XO%%P1|HPGSD=cEX_nH7onK7C44Xzm5{FQSN8mV&s}& z$<}d9Mgh|=yuxJ0Ut)qz3ggCp3MINZ&nt^t=p=&5TG@@F5j8j2N$~vf{~h!7uTV<< zb>W|P;^LVHGH7OvHh(M~$vj;#JB)(Z{CFnxj$GDwz6_kbUqGiqIRd{sIQ}pNmoa58 ztYQC{jBzVdULe2rgo%gx@$uN`n?`8v%{YS{w4k|?9Rr{8*ykQ*1YN$-H0*g+BqgO7N z@C?MTe)CnMwNQk(3X7 zunXv{c6fc*8=E%pH<`}iCbp~6Y>&6xW{e1S3}8^l9)V)M?h~ql4_Q1C0X2; z=qdFI3(NM8%&%~>>#fkLO2<&|l}B9K)`rem)lAVy)IgQd{ZzNBZSaY{WmGT6__+H_VEfnkc*)?(4oM-L1I#OR$qJHs{Cz38CIgR4onF%)Q?h7`<5o2u26QPNIk?XpjdZU9JHXT7VBzMF8>_-&woq#wA&J$SY@7F zU={fy)BJHqmfYpGX!f%HKkZsT)E5mD32H<(#=<^A61NLwcFK~8AW8#6$TtaSy`s;C zLTPcFPn2gS+Fp&Gul{dT{^3*wU2!boj#%4)H?|{bk2;J#f3#{z3n#}bAss{trb0{O zDKtC}!T>>T-LuV;6?+JFN;Ld#jQ`v1EwNY>{ngwyBoipc9T~TumCP1pf=1-Q=L}Bf ze5_M+&9GV-mELY3m~sFAT^Io zQIrjpK4Pj%)n;bM(O+-oaVhQ2B?CL^R5|HUB9;=(=VO-(nMLBZT^dmcbOr4-o#;1^&5YY zpIYpAk3TWcK9hObFY0=PJuO!c88~nyna!dc%6IT8*;(JTBxq4>`wY;`oK#6)q=zu= z#ih+otGa3rnUroi+V#)mfUAg?9shO+-C4}2D%w+#dgx$7P;jjrtE*&ppX0bh&yr9{ zR9R?rS9;W(MULg{+k_#T!@l{1tn5iW>OA^$oaUe!KN-+-#m>QyjTyWIjs09jR&$Q6&dZf%*d{>5m(dIfrHo!xAn{X7I!JV;|xpGZ$cKOEykMePa zn-x&J$(mag<1&5VF_u}w0 za)~-NuXyHbBm+X_YAd~^=TWG>!Z&GPsm-qug^tIpmEqIUDelVFz76_bLYEvDAM08BKDAa&s`WwU)@&(4U>_ zZOg~GP|$X_?gkrB&(;F=?oN5YE;xfOowDLs>Z}fp9lClPE=#~tW0v)1sVzZEtx*OJ zb=#GfhHmB~W0y9KX@+ugahjw~?k%TY9IjCRerW$p(6kjJ;Nh9rT_^Z4xOd|2(aPiX zeiQ0I{Zh{j$Clh=4lAC};2^APo4&Eb@$C%zaOKy-?V)LzrhJ(F{}?JYz%|ufc(Bht zqG%Bq3ucw5_MSBkT56~_OG?&V-ALWxxLLe#DJE!F?k>fXlClYvsXRn@EE#5GVc=Dg zOK*mm_e5BZUwI_(2)S>1_cBAN+9o;iFH`h^{Yo*W|L^5#&egi+ zcs`V6rhkDKxVYpbrTpZ2t(}Gtks?h?49EEOiR8tQla5-*q3mcI02JNcnoAwbO{=z# z%VI%kqLgyw$@3DZ4sWwQWe+!4%Y{>??zqI)S*<_x6TjBrl!&)jy6jx-pDG zRmvpN6mjUD3Zm1S#N|>UBQr^RaO$Kll`c;d^aAld-dfeFLT3%!l*MJ16)j?AnE!?h zUyENAL)4f4{X2BdGX|A+)e=^#k#PxIs^8M*&|FxZ=|?*?w=1g$CmJ? zp_z(GA<)%wxN0yaw&F#No~8M3Kww`Myw}4@MkaE5d)wJ;8ZQaB3;*YR_X8P#3!ITl zCSA*e31VjnoDPT%9#R#Pl*xB2)7nMd;$vv;{a8faO3@{(A3vxrI-O{WZIC-{?Nxi4 zsOhci7szgYkxaumv-y~OgxgY4@trtoQx1Yni=#IREfh6^3_T}_rn^}{%3y{X3&3S0f0Lfpa1^SxzdrbnR^*?K|y)1 z8H}8^2&4Ngn1!O^Q8YgmHpAc3Nu>Qus2t|NIPk->2nIsRV>vPRUPGwS2b`t|Ah0Ox z5u&Ob27@r8ad3ukvcDZt(9~n=mBK4;^nvAZQl32GY%40d)-Mg+gZFDV7pN18i{g~L zi1@<$c|a%c?Y^PY4(AuN1w?kg!zSCA(J{&e?A=K?&qZK;KP`LzI^=r!uRn3fZA}M# zA9>+PA`nfX@;ls71)*Pi&-%T>I{Aiv3qALB33t7=eF5jha(RGcv;MhT47@%cz*DmO zEa6}1y=?V-@H|T2S%o#?X~rrmo{@D2UQH?SjI(IH^(WZ!X+^9k)wEH>1 zr|)z2))>N(WWqxyy<$F+GFnroymGFF z3><@%*!hqbktJ8=7-6UzV=-BGFi(Pz+~qX-anm07*6;hywFo#7)A50%jTOxbmB~T5 zNq0_79**qGd4T|{R0sF{Xq{q8ED4v>$0p68&lY8%RM2!uf~?Ax6>GVFlN;m=ujf5zd-)JKXq#kP59}AQ=UW>{rh3`zGBmcAUq=JHx~WME_qdi3`F6lg zX?m4(Go3~#V>t3J1K1~mh_!h?KsgoHZ8Ypei{K3pu}A&xt*d1&dt%KVDl%1Tfj-)xKJr@MAHyaZOxxknP_DXj~^PirIhsE z(9uMn+_P5Si%UTxZ58m<-PuC|d zn`CZT`{+rQUteDhY2j*fSi{by7NeTEHtnlz=4kMx6&1=!E2p|EPy-rF-X%|eZwhG; zF-AwC?!H8$>FXRXrSfM)TfDs1x~!a!U*s?esy{BIVwvwN;dfDE`WB^}IyUVsJ3PuL zMMJY{)|>+j;x7Ljd z5PF;VCZ!~v=W)zr9hZM_5HxEelEEN6UHB&}#{LyND4Wzwn9GftjUQatu;r6R(<_eo zH0F|`BCgHJ(hLp;tNFU|N4>fKG@t=QR*`mPq%REUfBEc0)k^k^ia%Rn|l71r7$%OXz!2PPuz0VUa zDc#@uHNOqu#qatV4%57^?3}<;{{2fL`Jk{dh_B(K%aA8AJ!)n9uLl=9%;|0|0eqCe z6tv#J4nFgG=u5AJ>7IEntygKT|FA#=9%Ad+?8*AW>2Z0X zekt-ja*LNWfx|t!+QPKUjhQOIt@b4ND9EYfERuIN*()FhC+r?x`8~YusM6W^swDZpmxt6?`L#Dst}68s+;xN=iyN(u}J*BW;ap zS1~nAL3ML;x|jFpSEwwy2L>vfWH*(ot7J$6wd8eUs1)fte_#f8%XI}^ZHT!u?w|Gc z_w&Kp@JQ~HKAiGe=M?PiOXfH0h)4!RY0PVd`RK))(_#U>vvyt|wa=dgbcFqBH-G;8 znF!b|ase{9ND)Q75{ui<$+=8`;|D#rrh)gDg-Y3`i}BKj1NIFq*LQLh(r1n-Jw*H( zgcT;8L>ydmT^!D+=LSq-aCiyOn|c7^CBbx4V_T@x z*AAveKv%sUCAt?Q8%{wvVb9fkoXczR&}7ZhpuYV`mL@@a>bAGpOIqT{Ksxt*CKWCQIRO85Iy>6h z!ojRY6*YF#W*KpSm9VZ4zywvey}4e`3g;O?<#z$80XiBby3_Xrd+4YLOxUH zsC^NBoP)^~u|rK#TN~1pr;?$~AN7q}p2j{<46sP5@H%(!{-W}f>8V*wwrTzNa8;F4 zue?~vg4@d!@S`;by;0o1qXpYl{HNHsYn0u!Sy>geysW%2*|jhU+&nQ3nG4a2-I*C& z%7lzkdJA@ZKpr+;@qY1ju!V+7AfC^cx8xe>W*1_aO-H)j1KqL5RS_FEBNzJIo}7-{ zu%9xYPg|>GM^toJy*O2^>rdY8aTL5b8{hu&uDVS__$t3GJ`_S`cYOk6NJ<FdWPU|8Ub99G(xt>HZjw!*Bob^R^5x;7;c)jA99Tm%`OF*NDrT3TqWLo275)O`^u zL>w#e6rezmsJ}YWtoaUEAuTsU>;R^&02`lhY7r4_(w?jH~-lv`V`f81~o#c{rf}Fbia16f`2m_wA)Pu9qaSyg`^W(k7s0;AJCOEe2Ec zw};dXH`DwrD0OqTjD{hcAn>k$)s*3C$MadobQH~g$Z=^@l*)-Ps4Cel*&`kBDj}uk z8ApZH)bwujrgo zL><~Q0O)rmL1ISZxOtJ}s1>+SrJ&3_uGS7djm(FLx7k0Z>& zak2aXr1;2(==WPL7tvcR*H2$w2pp_Vv$gyAvV0Qta#AM~dp}UV$!jlec%RMhD{0Zp ztY~AT0{?29Y2@2fj1)yOGd;wy~N(MI5mh$ig1x z%m5o%7L|To^Z1MdYrSC9yfUykf!OB$K=d|{)Ey;F14<1;kv~=fj;AFL!u78xCKvc% z+}Rnd8e(g87=EbwKa~V{I$t4RBcu_QhvxLo%bnW78heR<)tG-jMRCR$P+Hsem%XgU zI)u+;`E>OfbupEF7Jrp}xX$HOMn~^VXAbB5GF?Gx3`b5x8lu>$SInQMqn}m(wBbAd+Sl2{Fewt>#sTOJYV|Dkd;Zxe3P3B|#bixkDrqTSkT+mA z-x@0vDysd&$d3glon*v5w)7_Wn8TYwuA{(fZgsUR>X^Ah*LLysd2N*J#J7>D{zZlh z`QJxtU5zH4@2>+dhJOQbok9Ff`4TBTr2p%J{HIKqU}G+vyP<>F{K=NDA(?Ecg!?~c z+cO)G;=WsxB+fpYN(L_5=?#Anf_HK{hfbej+jqglZmZObYbjazDrt|KvX}N-+FGgD zbsz2*x|s?Ck(buzM`lg2P!<>}d2j~Zgw|X9dv)hn3IyJ;G&$5eCb|{1{<-J%R`|C) zR~5$ok|EabPte4>S#NIjS)qpLgLb8|uz%%mE(Iv1x@PLB2%E*)z6^FPrntrUUFkLb zwEp^ZHckGM%saQEZk~=tD*1Gma5-YENmg)B&w^5_U{*V z_T--twPg|W>TOZCcShUVH|>4q)JMw0Qx0ek9;_Xn{e0^(Tl`zZ+z}uPif9J7KH%y> znA{8!H}4;k?uQ_Mfd5mFTVkaRLmOeQSwp?B|MR{7X;wtAu1Wn2gDTZ48*dvgT~c1n zGGHn%)X5rKB^g)hu&B6}&V`1awMer${?N2AlbiX%f!BIVJ{R!K!S4tL2^ZW6@|31gZn;c(aWI_iDyL*k!fgMPo(JL zG7CrB7LW#M3QT4&k%D__pMN|^TH^H>4%htvDo11Qeh0KpHzmM99Aks6w=KQZl=6S; z>7^Tz!M(BZ3k-PE@An9{sA(Lb*13PBj5u zuR`v4)4{*mTpPF3_8hMIZGFO(zYeV=J}^Lio2+Ts94E!RX{Eo)Bxqn*1Uzkdi6*Sg z6K`>O={k5Jp9B}Z!oweApc|0Wzb0?`+FvS@>Mm1V11x~}?L+E0Zb5717XKDSwzRd~ zAUDgym3EbP8xGzdI|ZO?!y2LZB$l-wl>B+4!0bTI(oMf?PR!(_E{Z=4;qYCVhb3?e2!N8h1X8-T&h64p{i|d{t1E{VGh#ErJK*F4E;2W!clChJidFm^hg8jo z?Ev65S&v@uY$Spl9ji$kb9ZUA>5kzMU>e-cOzxVII;kW(#Ob)@+R`gX>MH6R27DsR z`ewcwY3r3ec^<~5ac;X+rOm>(CUE_5nAzmfqPFCB+S+J`Bi#eP`?%O8=F;L^YwssG zH=Ds3jN!f5{$f4SpT0^=VKSvubHjjfbd%?pmA9;Ezv;4(xI!V8i#x|b_ZR^cSst(r zOySfJd(TOyy-dI<7QNabs8dX#oA)x^sG{q37{XhT54Kb1!h8AQUz^vJ(wiljy{1dLLvJLNzKL7(RgY%V&J}b&762u5kYQ68-Fc=$L4dFkyIOX?ecwm0 zK_jEtylKz56h$~>k!&$khtmG9;WL(Vx`7lYEP2&om9aiF0}9&qEq@j^{es8^iZuy9?{ zsrNxEUSk8m1!_R;bnkl)&Yn3P4&=W`=*1n?v1ytXk7@CXC-&MT)wW}OW$RW?WKVr( za5QkotrQ9Uhr;(xGe+h>2UE{4Zd8kFS4`n&ivz~lbF?WF&=(@yMQzJv7lLxX$qf7UgH`o zFUhi7E}0$pFVF)mQxGvWhK3g+>93YTP5}qiOCBEP0U&W|m%Ow_7cta##Ju)kui|zy zqiKm{W}{yx^-Vnxb-DxO2Gc_sVv&H;y9ApcqZ&!8kr`<#dkKQ%!LmQqFlit?rqP^Z zhG&yBFmn1`TSGF;k+Vg;aDdBZOoFfW9v+!+Iht`3 z(GR4U;YcQsNim52fSr~{*M9ioMKT3A+-2~CUP7!P;W2jdA`Ch8haJ?Z_uB|X)?b>Q z)-PV$urZT(G704<|DdK2BGChqAbmBks;Oy1dReow^&#ny@*K?5K$e&_QG`reK#HJk z+;_fhQJ&K{L(BQP6CMOJA@~hEIwr+XIYXKzLRM-f?HN1v;wT;;Mb@*URUa-U2s@PG zAqQ;jV6GPBl?2;u6(1D6byvw5c?9{H5R0Lx;@dycGgk(^=dfEO_Jf{j7@H8>-i24h z&eps+ny@Xpcpin;Irtt`MM#h3op2UPe4cK{%S-H>d6g5^Qr6TYWmcj=%a6%EDTh0< zoNV(!QZlKwnT`@E=`)JU zI?LNI<<^wGr>P1V`J-hoNRYj-LfIYSleD72VSO?FZ1JIJduCP9SArLyP5>kvg;qRV z{Xo_MgAZ{Pu~ zQNiB+8UAUzj(b)@Rg^v5c5(U{8&k`vNz{#1iL`C)^ zf*Y2H8-PM{;_J+&BQC|9is+Xn=ekaF#-LN{7=~{+{4?nSog-`$qCz24l$`8ZZMg$t z0qcz8^$okdrJd;iu514kyKFMdGrR@C|iVlZ=x@pUW(o_FZn|dcYnX z*x)y}d7=S#2i^+Y3!6nNW#NrMgYW3&%~Jpbpg)a`zWU-;Z%~)3!sU`)FPch6qmf$^bC=vGNUTm*GvG{`j$lQc;KzWiy{}e%cUKrz=D42TU)})j z%k`|wHPJYRK=g?s#q@;I{fm1#tmtR9 zp0l%7*B8zzKE@|N*Y1^fJ$QSiAev9_z(;QkFLE=^B{aT2azB=JB^{Xc>z`E0Oh}Yt zxpuQAO#wO4j0n5jaJXiP*BpMWYr`t7KCz3bObIFEnX{|wG*BAV*f2=G#_a*cQ9oC& z49K+Qy%_jdK(Dn-oW4v(Z$sk4!LwkkLG0}}gMcAW?Kn0l*pM)6nkkdQz6)yn zpu8YH{{=P^G?Q}E*xlZ=ewkR=d}F#&dC?48b3o!J@btYgpFBQV2> zb12q2?CM$*_YL$3B~e^ey;&3I!O*FEA89>TGdw!8oQEwWHEmP3`QFz>|GcNyjPOW# zFF2f~7S}J_^U;$Pt(z2&M|>>dB-%795QlOgJw-sWXq%TCNm`Fp`59JU>L4AHs;Y$M_f z%R0AMh~yaV$2LiOdlwc7lLEhi=7l@hy@+9`b5oQCpQgMhC2cT@*;gHU0ohcSJ5Nvp+ z1`$9%`mOWqo79k7#(p9ts96$s*%30ZN*3CL|4u*Op4~e*HTT2DtSQK}RXdDav7S z(EFR_6BWilA6){zyKwR1aiORw6gjVNZU0x{QJc}l!u<4)uACgeKl|HvftJpK9uaC0 zGF5zouLJ+T#ms~lbK%mBjn(UFmHsynaNpUa4cQJuA$jeH{9M;>&ogd+4f>q&i(<4~ zGR;veJaHTBVD1AvHTJLY_J^+SS))ru~wGxCXL6 z)J*`ic^H{s3f^zY>rtF3ax22w8hq3*V()sO6H2qpwM^V<3iu`ODPl{6p`B{<#AeGd zQGy(e@(TA+R}t|F|7&YTN{7%ge-b}s7z0%6%-G!Ryiy?#uxkrr$ICY z%h^)|@(+rQ3T7e}BcXVHt~51{5x6aaYD7iO4rwSmmaspoJ{MB|JO#rlW&jZ%UXWI6 z`tJvGiisJR{N=(f!MdT3DL*tW%SEo2BLB536YbbzAf9i_f{DfW_jRxS z>C@ju(=)(;+vcd(6{=&~_OeD)+O8+ct4IRarTOl+(Zg2&^t%Q}7W4zzl{NrehvceB z7v6w*CVC!~fM4N~2=@<_C7~=I&2V54xdMh-uGX<|TC%Os_7_h?;xO-%^m6Of^>xby zx)f@N?;*58SAYb=?(R1|3VNkAD=*ko?Kz`mmD`dbQQ)?ghp9c-SW0a+F%@kzUh;t1sFjTGf}qpa73DpDnOB(t`=Ag0#zMzaKVqbSX~cBfBjV}77?p3PQFl!?z+%F>CLTJ zu?zmC(1v#&Jyl&-*Yo-M9e6YLOUObWH~H7As~OA2+cir|8iS*c^VQ?MuZkUMNk0Se zPBEcmery{0{F!V>el_Hf?SNFB`g?frv3Q&BvEYTlN8%%@Vn6$6^N^cg+F2jd87~&^ zW+3`MxGYvUI&)1N>`)&759*^YJ$aPv%YCN?MixTqf z`zlB8x@pVxQ|z$q#mRo<+)N%CpWAQg_8I$J!9yK|rmO+>iS5w2pUkA@FQtW478w}C%$D<&*AWi5HZ$cvrD)5$hU?P! z;92J5W&v@Uv07F2Dcyk>&e?c0Bp9(NQyMOJqJQ%3sYXYk?EgB zfjk)&B24iT2tk>rgTo|Ry>H&>g^rXfTE?oSo&?S{`?NI#sIM9xbym~t8cR!cloaEu@YB2CF0 z>_gn?&s`6UpcIP?TMUG)0YD~d^!dOw%heGmdI<*UPdKMuJPX#T)Gag2)N||~)O`~2 z9FvRjHSbJdP3U_PRin3u07@0VDkENN3j`(wAO_$f%oB|O;*#`pL+*wx8GWSM%n6iEC#-Pu~=Cdn6>MDKAI(8Z!=)5TkDA}jmX z53Xv1Pqesd8W$r7t`)~(&GlGvMV+VZJDAX77KapDB~`3D zL$S-Lj7hZvXA9_Q)?6!q)qRUwhj>nkL=|*Rj7j>)@M>jxLp#&AT!H@^c9vq9`TcBq zR=+1^`i&mH22N^);)HantL_C@4TseY-;#Jf6@at^3S>3Tuq3|ps|Kl3RJGs$LSqTA zQl)v4kB-Imq{Jqc?@UNjOC@o-R;i>|_>*`qt)k2f$X}(LXmZt}EW_a(9TUysz}5s3 zf-Kdp7kJV}6lM>V?)}u%w^(~FF&eEUHeF&Lc?F2}Eo>&Th|Su!EE{$3#!+7$|LoTIG8Rw~;0 z?)%LcnZy~5`>YWen;51Shz2Cj@*tvetP5UqZtVvng9h)+zoVF$9q%)v8n z+ZZkHH@SW%tH`3Xz%0`-*ou5{Rd9)Z-lD$50oH$hNKwV>ZqH4-9QpC%lJs)>(SSR{ zQN%xk2#qp0u*{LTxSihp5ymtY89~OSL@oQ^isbw^V{uOD|7^-2U>blhNl;TrM55qD z|4S-MIio9CtRSlzL?M9d&+G1#Dx@vX$vP{xSj{ zfxwoFN`ngu^DX~P31WfsGZg}uz-;dz&qY$h8Y|-OmneL+Iz2q&mQ9LV`nQ(^bCsuu z$ei^X#MY#PYsA6x*sn_wKkk!oOo*4e)R}f;{{g)R%a^B0(qmOVcm!?7OhN6%>pkCkx7}6x+dzT< zWMA@X8yA4ph=28KBGyPiPc}Cxmo)nrmwJpB?f}zWz=9@(^0m*(uqHc=0$C_)v)obfj2w9yS8go_je4m_E{5TMxiJWj`6 zD{9HVCH~Vo0KGH}p(GQoYIN;Owd*H3<2UU4sqEHP($ODs391wDq-m{$q$|wNh6R!_ zVl5K_h$poe7@s(85|mO zp4P#!&-_@vee!XO6`3=r_*tqi{iL0h?oiEbhOapbLZM3!=oQGu5`0 zhZWyrC*8`dJyXUxRHRIlb7#JaJdw*sdP&wKgv4HTF4Hyl_L46C@4e5z3(F}mw5+?K z<b~H@nNlO!X?+c86wV-t9Yzg4QjcVq0nI4XmJ*^bZ(S_FRWd4v0tSRX z?h0a5hx+}&sKv|1#Zk11wb$HADxuedR1OO2s3Qt zD!>dGm|gZ;(YjZ#XEn3Cw^a>nc9j==p7Kf=M*TRwTdUy3uQ^1oJk|e>PDtAzPKx1X9Y!L_b z?(Ho){>xlr7eeODBXf>`wd%B3A~X$$Fl^ZVsYP}_QQ9mv?mm~8s&7p@0y5$Ank(FA@((7chLa6>3R_%S?DJo~4uxEhXg1XpV604k7L13D#*DCe3peYA}IaFXS zQ^u|l06pvr?YDnbrX45o`nD;)4VBUjV5aj=XaqbG^b~6Bma(8%Qa_}+fDY%6VkIH9 zK!S^VcmXwug6sHCHZQag&u7Nn)GM-KC6Ab>m|u|JhW0twAg1+CWjBDg)TY^8TV)-; z{^Dk{Y{K>3)>vk1}fdP$zFe_;S!?!)j7{o~& zfi<2nug{^Gex6|Crt&EQs=sC({o!cwW_PiH1{k+1)0|{q%27YJ#PhY>reK>W$2|Zl zR4Eyv#wwqd@fER)q11OVFQBt_u*3mg?x-88&`458LcCp*;0$ml1$=L?PPFky##G$} z;eo$D3>WCTTyRRmR~&pFN%z4s4PRog%@AbL`?+xm3<>tYbeXNOm|DCEb5gdzvHkl1 zNPK8oHuplfCJG}Zh#Wdq5Y6-y{;cVJKb6i=3--IUn*KY2u}-y90a~vo^a+3x&7ZPp zPqjZ~9b}~tuxUD{xMMmr=*OImiIz$z`b1E!$z)`vYh{}*2Rl4XEE~dTn#RNQEP>}# zf?2k|@6OU%ZpFX@nR}mo^BL_pP8N3DaPuy}9=u=?zXedjZ_z1B>gsx{2+Nru9PERZ z7e8-#w1+|TouSzjlv*^){GrgPO|Q@Kdc73zmO%IWXAUpXrf%j_=9}i|{02x&#V2V| z!$@pD5&8~P{eErdCBY#6glKtRZT_oFCxvhkO^f@6%Ms0HT8Hqz-6#JnR{k3m!0M#K zI&iX+a>MthK3mGTt>t>(^hdl&*XNvbhtuG^!n02Mk*d@I31~r(#6I0=MDY~rdk7r> z`W!-A+>D^vQ@|M&A-Lmny={O-@7?vdJP(4h6&pzR(;6)Qure&wqXz1C4m&kx3JtD5 zUaqmhHfjFSe`G%OTtL~_hqGOJUX@Q^HG~Jyp2!R7aBxAUD_U;>Seqir>$AW&0igvu z&AX82)!S60SZ5;&Vhb#E2h5A~>Icp-RMi_GV*LB(90#l`DxI~~&ad-HjUYK<1|c67`~P@u*g9cK9vRwm4QFryA|jw25wH-0{6 z<$D-zkO1Bfsw+jv!gK@Re-MuXXJ9w0unY5xV@j0~#y5dy2r7mgE>qgQ_$gr+aLlwv zXAPqj6u{b{S`d=QD>*=3;sB0VU#Wd})OZtsBy(4+xFv_D@YL_T2H@gF9@6p!z|NK4 zZ6U@=%rVAuT8-i_i>WTq&=X*hDCxPce^GfHCs?v5uk(E;^oAiCaC{YHx>ql&+uWi!>(8jKy65SB+EkM29-o3YB3mpLeY=Lrq%eWY0qunnoZJLRng(`(6D-QN6$IT;Ags^|TmryS5I^pAs5G)@ zvGwM9E#8urcn$#Fo@8=C21Ch6#+YKRr#dAz!U?OGy(5vtuBf(`QjxF|>n7M!QT+zhmCuk{X85`WyQS=EcfEjMW&4KS!@FYTk6-!`oX# z_L7Sdh9q7amCrzMoVy#KVEwat4-(=d_+F3l||KtZc%66_rp%R z&AIH2izxkHw3z>Ck7)2g5X~bx;^vd-!JEc5kMWh`5(oVwvWzooD6tQ4GgqRUZ@qb{ zO&lMmzIK?tVe>s=I}$kV^w|Z1z?@ac7C_N_cKT$$Hi2~F#+jzmU!}sGK{4^Jx?(u? z@S!eI0YCIk^Yv^q`9A80?TZ@(w8?P)x)R3kRs%~~N?0wYSh|2buV^JJv8)AE*>xU3 z+>8+3B3BeskR=M+#uEyp>mcmb3+WE*jyER5G!3HJ^8Dh0R2t%{wo9z~{r2tf(pK;x zX8xXOXZl4phl^z8tyCq*<(Q-Q0L9 z!Mn|5Z#(FFgCk%+0!LFg7uR&ZSg+SRcMJ?*Xgnfb{|+y)DfP+?ub9%iUl6Qg3Fe)%H}OVk z4|*idA?G%|Daxs`q!sw#AG&`HY#ZEqKy6lBM0X{dF84fjQ$xtRlv4y0L!BzRhBHLM zaNXr70X8D9C@AJf=yQ56yRgufN?p5J6`QZgu*zP#6$;A;Y5^-JM)sAbTprR1OkCGv z`4YKD%X@N6{9(-!sAN@9i|{82i(rFlqYCal$N2X*u0p)rM&K5>u1r8zMuM!JWK_} z;Y`L)p5*I2&El^t3)%jOc`n|xTdi|){!8Zy{w(}Uz!;kyW;Ev+XGzV7>@R%i!8HJB zI$LIVEow9HmK-j7-UIJ%!zhHfz(uM5IOoZG0_jnzRmT2}!t^Hg68 zU|ADd+_nab*;fBs0VU%#hAb-A%o<&Nag-<%8Yu>)-@n0eePx8IU z_uUF7TDk$;P+AA`+rgkpuoykyopK_mYcwgetUSXd)UeKN>%5&1(=Mh&Qyv_HfNTG} z0tj3-7n|}UOO%pxz5Hb`KY=WwIn~Py-y6rq#ni_}+|nlS>4KC#@t}N2Ns^()W&WKGuM&06 zZ5=?33m2j#jkj57=(d+{2{Ys;lQH+V>EMEQEp>XH7v%Fe^#0j@%5tnmZa&NJw zoCqR;2|gRUbo66Yy`YtL-tt6o3(n?N42c3)5)>A|Skkw7tCYlz@_dMl4|k3d3n3?e zYh#AJ4K-|a-&+-Rgu-BMW5NU5*?A{RhcD3X-)16~(e}|2T0>gEU39B#B!lTck4nGP z9ZYE|KRWERF6455U43-Z%GCdQ$lr{ocW7PQs$%S4iV>Te#!i6jBZz zn(_asNg%B3hkg$FL?U6X)4)9za^n~9iTQ3th=SS~HQ-f}e2px(^S`|syfwW&AiiBn znO$acLkCtai^mb}g_2Fj)B~gb0C$e^-!^wZ`?Iz`YWJ#P)gjVEf|&S}+OwUL$90b| znhQ)d{k8k@@f@qya5-tuVt*_B&2im!NhL7x%efj6tK#n2Jp~Ez)QAabaOIJ@nal6s zXSBKsX=2el6{D}oy*yXBv}0iy${`f$^qw0;rq}P&t#OBG^4c=2g`K<=`mAyoT*WL8 zYSluUn*8w8P`{jW1rP*fP?_aAB(PZ3}WvkT&m#=h0aL2c6hq>;Rkh~GR4T*Gp{+S zm;*x1-3arxhYcbQ_xni8{TkDUcEp-n`2@64$K_wz)URI46|e-Xe>eTC{+X9hr(jN` z@Mzz;{Pj^TGlHThTZ-ttjgNeyNgH9vIa?01<7+TS(Q}`diP(U5en!oK!$7Jq4;A7m z6BbWYo6HA6=dCxMtpq&B+o4&I2Lk|WM^VkC#de`#TGkvaS^jNuPHbRMD$kgYAHQOY z749)1JQ#P<86<(04Glbi@agExYVcAI;%2Fg_<`^2saAb~+f6Fiw0?A zM9w8rrt0!sxDfvL|M3EVOKUAMkvuf!EV4a{I?4d{sS+xOHqw`aU-?D>I4|i8eR~#d zOH5rkAaO}Eh*!>osT6rk&1LOi>(T5!-K$@MPP+%it!(8UXEy3`?(qSb-t5;tqUbpk z%a1e`<1-JoHL`)6kd~O6(6<^FP;X3{zs-Y$O_Y{^nr8> z!}Fe5C?`q32QGeNl*N1egsTsQcZ!m5DDUY_|6<~iWGWE(Fl>j9yKyBEBYB}Uo5s=` zIz~t$F!;nz1a{Cux=+8k55k%_`n0a!K};doa+JfNZtbNM-VEh^+iWkD(RJ9+!9L^m zEier%BG|ox70$q>BGh{M?EGn>Q6xEMQ_P+is!9+51-_bNEuZa7S68Pq^krtzo-DyNZl53TBi2V0d^}N&^m#-TH>NNxR(lqX(B!1xv=jcv^IkwVJasU)f%Wn>CqX*%?9PUBtZ=0W?j z4nGy`5<{;1)MMASnS?*>`R{gGnAmpvuzLEmD}%ovTk+_}QYAH>joIjCJaezG9$rjz z{z>m$DmO^&>&i~%OYLEHLO$$TIpf=kz?m5PQSLb}5^1jLmcf*9WLI@aAJJGv?5t`c z?e2Yge#x@|3)uf5+L!U-+Tx(;brgsGrkCvPf&0MCK*njUg#Di%a-W1XQvzp>jc#1> zn+dY(hSX~Q@4PCM1DF8$yBcrYbNdhm0keRXB((U=iSS)x-Ljn;QwJZqM+z|`Q;vTh zz4Gy;@ICYFYg)({37%D$(-d(nqHh&guIHayGF#enA%Crt^UQ_9*0e6HnT;m}R=!kQ zU-svknQ1jMutmq#!{G3!i=Ozlt%Id5|Kp}WY}UT$>YzyP z)<-M2SRr(NBm{a*E$yHtC!bfZ5(YNCY}$G|Fifx})oETd7CO~ZFy6Icav%umSy+|n z5njR2%*@tGe74#c{*6o<*aXTL={a4>vhy;qeQ7)v@rmog4_{QgKS8EIOwsO%5K+?8 z7wa@!^3&dRZ1|$1S08+l+Sz(jVF&k($lFHAHFX)ogXx`&sIXLBO4WVZq(WKA@Iz#! z0%IY%VMS{`7f+1E6kZ0t0qvQqD0#s(j-ep&RHTm&^N!!KbWHr75?cBzpWq|CkL@^uKndN(wF@9SCBGQ)iyqd8`38Kq*xPabkYGPswsBzeR z6{r1y4|5`OWugMd@Xn&f1GskY*PJp=0`(v`30}%Ugpbh>)yp;15IA}`Z@BA3i0O5;sl}OBo9YQ zH%&tQIWh=FoQSo`6y zVfIcJPA|pYtxxdtdi@UHalx5GwI}6D-B-yhOKh6$`uc}mA-+%*2s4P!h<4#+iK3ML0D)>-4kWsbBkLZi~qSESV48d8S-n-_R zKGdrPF~OWx)Zi7iQduf>DY967kYLlk@wFM(7kjjUYq>1bM+svyGFY|S$6zAsWdrxThkfz$~P!}T3 zXg7Am!adR6xVhcQDwT>^1$(~#*<%@wG1?W~6Rmuks)mRD%K-_e0!7Js14(8`g2!Cn z%EHrdcD(Twqsn;E37zx5=X&-d_WfE8!zI5B5uagco~sL8h4p-aOLyz1C8jHdzu%;5 z*G%;>`J2H0-Y%0%PgQ<|HvRN4+-FP-A|yicA>lh&p%IuEBF;)OlnxFZeyszF4t#b~ zi(zPY2&>od8Q5mk8#cUt5vahi;X@xs-cQ@Z|CMQVV<9TZB7(Nzyyo1WfoSqce}Df1 zlyRJdi|JWF*VeA=@tgI%V8}j8IXQ+=EOGcf@L1VOn35A01!;&o7ZyXClrXDF4)1#h1SZHZzr|n2LT%1y^bB;=l!kzi2 zj3j(on@h4rK_XN`Se3Sb_gqaydaE!e-~f_IWnW+}BlCX#!S6L0_~PHcFvGBe$U6S& zq2MaovrlBZFVk8WEjvvQB`FRc;8}fWHWeo^qNrgNYYD!z5Is;rDD1I9k`5y-yQ3Wp zF`tvgZCp$AfTBV@E5$;@$Y1%)kjGN3tLAWe$2qCf-N@elAHu#eD6XyB7MB3Qf(Cbo z1b26Lm*DR1uEE_UxVw9BcWW%T6C4_QopU~|d*6Gte{>a4#jc)f&NXd}VSLWMT`(mR zJpB5q#|G6_D9AYu>EVQwb+RW$-Q?ks<@1z-y1cD@`@misQV5e78amY1EzC`{QdEtf{$X~rl;!V{AT;mb@Pco6{j>WHglH-k|16JFvPoJ-O zc`psd(xhME8cjl{V|F-!OCxc~)Q3Lk`GlCb@LfE^Xx66F+^^i9DO+Kt)>B=F9c89@ zmJ`hr-SJWy)HG5atu{v`#%Ea1f;#TZ?s$vJTDI0Jva7vezN2o0{%&4&(Be z(J^jh=HWu99)PdOsIBj(%dzYUWWB%9LWf+7Ne0_ct zBeo>`=fVeG_Fog=^At>~h#{eoVp;hoA#8-W);Oa+3wm0{V6!kLVO0kSs8Z21}@1j#tA5WYsl@^FY@+poq;>=5PXAzmP zUiBgej0)>l=n6w`k?lg^+@ZySZZ822{sQbmQh>hN4~I0*-?|B?jQqPCk{&)TGKQga zbw;Q9ElMRc#GybCp2X^pMEu^{liYi>Ju|v8@duIhpOol)Bm_dGDLSd7C`J79HK>oo z1AUWU9*jc1=#uh7vBSZ^PlR!bdnO6eANJ#8VGy6q!uGAD&}WkCjDZNJ(-I86pr4qK z2uzs?sSL=hXGTms#)QKK5Fe8$kT^Tvw%5iu9skVAI*o{vaoNK&nXGg*#Hg2dfyh-N zy!jM+#=lUfAfcvE(PdK#YxMC^DQr`3AoK3+B0kx*wKWmwgdC_AY};tm#(`Fc9XKeX zz_AX*_wXmR>36#(C(9?^vS7a!m`RI)_qrgp&*6hyx+T9L?urj^bYvtEi)mD)z^l4t zQQ|InHm3zrz9Knj)YGL`U!KPEfCi?Tx#DS~oMW*Viq|CaQvvEUj87y5qJ@$;9t6FR zv}FUo5<|YBOY%cg6i(lW5O}MrCc$bL3yD|HF89TFng)*3iN0+n^#p+irI(OCP~Y(P zOL7*X-URbr=O247D{a&5EGhMrTB`ijp}Caep8aSEhp6=t+_A@j@6+d z1*+|spwdOnqH{a(uB8%*xLD~`d42aPZ8G=PEp^PwcR|1JCCo#CEq8Y#k;A8-b22^D z6XB*XzqgaBCb*R!`hxh)|G}bXQM|K@mOf3Y3{;}u_o7^>D*j$2vyVeH@Rp2vm4G}cI>rVlHlkaekdwtH z_xeV}uzajOU9shiU@|V59VWvnPh9|qgCB$3iRwbyi!H@R7*>5vHy}+-#i%_8SZ4%t zPU7-@zK%{w>@_)FLTZ*ZoF4lSG2u+`jn`!Oj%HY|jMIvoC4C{c1wMIkX_*>zZp9R! za@5>}Z}U}L({3aDyNWGe+2*s7-bqMYQISdDpT%wHE;wb-i-MNj;EYj4%8*Om`S zi#&)PidjBBIM|JMwp@KQdqP%EKjPm1rv7Sf_pE^%Ha@@iTzz47#<%pd`XuM1tK*dW z7LrZojG=H6ts`7{laG7+L7_$5G?7;n=`K2^e8BAo*n*V<;TO6 z7JMESOOu9b2^);Lkwedck~T{!U>#u7`IF?@xPgS1)F$WK+d$|L{8|`~iA=+tvx|mF z_Yjw-C#X{;{J^@PWffZ~CY>jr`FlC&<)JY??G5|aiYSpz9bt#fXV!mByzjBV5B#jb zj2bAMpn3X5;GobT!qzaJs~;nh{P1G!pza44zl$82AAS~FqWm+E`g5|*@B-`yyPb4) ztp8f``GE;ex5C0YqLf-Wn8oK8uM2`6XD^UG#G=7uZ+u-;bF-lRdz zxX5c_(L_xUa59|7_VOGz&P@AxqO_T!>ax0`(=?DpS89S_@KxIAT7cHUtj{r<7ma{* zt;k8fu6VNEKxNAsi_SY#wWX$Rl9r&h8GNGzni+HQAIFIU#lX8f*`a33>%hs{GFiuM zyg;qO+GVrWvCJlAksisVKEvgxlC5apkIprEba`#Z1Hnems6q8%e6mHPI9Z;dp-6j4 zGqWPaKQ{q5yRzJ;@CmwuU^y-L=__2xv}TH7wQ$@M`)T`=WgPmAr(dche^ zz$=DJ!gauU$6*3~2DX>>L07b!xs->ovPnKv0O2nMh77#1##p*Quc=po6JM(5gMcKf z>82R$=V zcC$Gm0hDg{f|JZ}xPDh1A2bPDXWJ2Kcz|kSOaeov40g((T(LM$ta904)7(01VQAqa z(WKmwOQ$J|Yi*$Fi+jPRL8>$u4Jr8~^+ugsQ3}m$E9{@NoUz7{F6HrSUasMQ!KbFQ z>COgFS;A)axutn6WmE1n`LkH13tDYxAb2OQrs$~QaL?c8iW}l0PB zz-1MuVPMp4fXo_GC$5!SPXNzAyLas_ARdSu@|?3+%ZqkT0rUw1&9 za}wN5$rUd~bFE?J;_1Lr0N<(QLZ|#^&q%ajwNXp2{8EYk9Z>qug6QwmOpG3aJYu$# zUjGx_Uj}{!2~T--xVSoN1y#CM0~%-5_?qMx{5q5o3sys~@FJ++#Hg4B6>y(Brx#1dCH@$fi#0 zVtf*R;HxwFL9g94cWs2Lv#?qc(kiHa_N?2``gbX%OX|-=1V1~gx-->a=@q+Zo60Tk zbA8^$RxMXOgJEGHU^~G|krKt^mVLdcFSrs>o8<3xr}O2IWD+NO*T(lJl-0_n*`(6& zvbtn#Uh7^gcHiZ^9mJsyS-CSzvs;^h%ZorVtE7{BHjqqg(jsdJU*%uZ^*=Ev#uX}! z`wJEcQ}ne*+@>n!o~5;|PgJzcC3~06+R6!6#Vm{%#7$`@$qn(Xy76U2A#-ijJZ=-b zsg7R}0&fd%(<;!Us6pwb#8>nD-yP}y;WhudR+-vSK?ER2wz*Wgpns1C2Eoe8Y8zkJ zGGk`rxatMCCSTIiw-}U)VA=O`mlDnHIyoEUS^}&DyyUgQ5r0B3w)lo5Xcm&Pl+YV4 z`W0r{5-PXrRjq`zPEyV4aGGyb7oS~qSu1wOZuD-=$BH01s?+vV71!3ING13B5>{cb zmGv*fXOr~0i^k>5K_^0f9n{p<58HC7Ae=YG-_S*KAvwbX0sTJ?iXi35kKR!}T-X`B z$Pl*R6$Ou!Xe|kOvDq~Rioi6fV%Q3{$=eFiRy15;ohr3P*IZW3JkqikNKtO+ljnCP z>kPS#j;REE!4T}`3wfI;xPD7vzxc=P!Ql>9c;#mo3(I)8OICF2=BYl++gn@Wy881R z*854~(61MRBN*Nv>4rV#Shr5!DGL}$W5qI=-2Ply)+~3i8nv{sQN|f}ppd~$d{miu z7_N0ru;=?~=bmElF|DGkQEu?`nqF zvmrH_Z0}Yn@n9%z6W!B>HTiv;+*Zl$~TSxvN%vuN1 ztfIbA(?~ys{mF6lTUv-h7bWppTRMk zLF(7GE)T99W`fSDO=oKzWO=>)2Ll9l04W1Q&c=*+AEdS1XFGG?RqS9jZSZ%Phs@hKx814 zf-tJC?IQvMRt2El=FR|GIY7dU}0{%|7*?&TVgwY9KdoHW-^RSIDW9 zdmyIkaiCBS8X{Tjeq_cu(3q&Hof`G%9zSZEZlJR9^qV~8JJ7?Jc%B=|=_5sr=wcT{ zuMfgTNh|g&ej*uFzWCQH{XZ@D-$5KAr~(Ks`d9um%mC57T?AcclfY4RVbP+!#A}&} z+gPfqZqrsx@EM@m=wvqScA9;sg*uLzum{7D+JM(jhELnHrdoCh5>3+bPOz3V{GlVB z8m+#Qn&ldrtxyRX#(f-TU((d}Y1-(%chEewZaHrYM3NX_@z0amk!z8lEH$b-Svj{; zY!EPDA!0I)fVYyB9MHh+Xw=|y_BrA{oLfo4TzzO^@a=(u4FCFMzPdRGyIRmSq@FEk zFs323%`OyFFr+yE&!?7xc}I3`)Su#f@Q zPcl-mPh(Sj$6Vq)^5UkFqMDm$^Trdb8n{!=NU(n=_{L6 zwH0ivZdmer-wFcMv@M>zlbiOg@4sIqo}Zx?udSSKuywb)+6Pc;A0;rM2bh_JjP{n? zSuR%m=-4PH```nNNIVybE|i57t*EF-W=*#2u$rgn@VYTQt*DsiO-2im8Ym2*)pwr1 z#!=gM^p=X!9LC#J%m=+MM*&=|yFPu86e~~#DTcXd-#7TUUNB1-ugof(g!3aqeQL6I z+7Xyr&VFt}oB@>_1(B$T6c3#c@jxNsV)z<4JJIxsP>A-%z}goRW0I47g>|x-LO4}4 z>uW_ef>LzCIq}B`4se8=!d!Kp*Ty%gQC^qHkPk^lE0mvuls%+Jfvppq7l+t?JO4kv zKOa#8^S3W7xxYDM&v9S z*Hy9XGp{l3|GmHTPka6SO57wU)hliTWPhBr_e(I?sTSRLB%L<-@ghdYk(W8-UMjS&K#^AAEu*dH=u;#ay9K{&eJ^p4FK8 zn&kE6TR{o$&!JHlFFUg^m%VapX`7&p+mW9jc@ZO@kWE3dx))CWitRq;EAqbrq;Qx3 z1<_3FU_p;qO{2d)d0p@C-n#_&(s~3*_qc2!1I^|WeN4Nf(-}Qtx0_=usWAxpJ)`3^ z=+}ucih`hm;0(=-J<(oI$`YDA;iQGfPtNibOd|u};atz;ctvuBVf%8(z-sI_!k%Xn z3r^|28b>idxO(STuVWTJLO6!*aBwb2(l?}k2df~Eu0bZtmLz;?vEXq@k00=5@{n&e ziz+kLfW&mjCKEGETuW~pL;s&ps1 zl@4=MQzU0ULvvk{#AeO^_WgCUGSR00K5%hyX-&W=(M2N3`DX6fTDfkcS%OEaEebUS zy7BMmiYEo7!NiD#Vvr0U_45cH=QHzZCiLn>5|cpGvqeDm6?I3fT?ayk_Q-Ho$y|~i z3p`pRF5$*n@%0Xe3ZE3IL%@`BH%%Ej3WIU~1WTkDgM^oH;0IcjQF03ksTr^w+9arK z4Iwd-JONQ@{RZ@`@so>-E$PK^sM>ZBK~yCU%rOx^bhzX8_i(@e4D2iT5aA5cga=<= zxzi==BRytj$Pe&VvtZ*XGBxZwrg%#9)!5*zEk}d1R__9XGt<3X4;0A1lx?=9Ci%(bu{$E_=A||1og*BN5+N`*;5#eA@|g4g zFAQD(X{S(>m5?)YDk1N`(zb04;k<%^u@4>%UQ4{T%#?EVYbRnAi#uxXDOIiq3#<3$ zeqp@r-?|npew9n@5MVi5veM<&)Z$k4N6$Z{FCyK`wAtqBlr~@3oG+>C+r{45G;rr= ze6zW$$5k)6Z8T?XG;piT$G(FHo!Qw)Fe7AyLn!_2<#+F z4yWiVnl|Cf)R14-apULaiw!SaOH5%xlEHaoIs*~d`BbRh`9%2v)si+${yPSF8Z_d4 z!{Y@*zdCpJlhi~lTnGcGOeX1^PWTuptHqx8L%R%o!m(Nz5c0yWXd}s4OH$cs#nl+b z)Ze(#QOF#i*(&VirGD1|c2kzAJ23xF&;Igp&=M{))Cx!cEqRTHq)9GchW70-l+%}~ z%SkWddD7g(FTzG|h0d1A1hxz5!-ykRP)jRy{(2iVZK}DNP1CvcPxzU}a1(d9E{rCl z)C@Oe;PA4vuzNj17V)Mb6J81WG^x{s4S?}Cd_FAP72>(yrzY$dzmq-hj(^UMmwi>N zV0o9>-yXuRUnOqh_=1aKUqg1H@AU!0F?+72%`;eFTY*#{x3Fe^We@AW;`V>q7?jCD z1)#VRkRstM{>kgIiSh;u@P#D3RYufD$-Vk)HSY6x&$9;Aj_5Sx%~Dy}7FP{5ch0mL zX0N+8)TV{fljHy`woRRtj%scXYY|eeSL@2whN?}f59Wg9#Zx&)wk_}4_n)=Zxrt_} z3dk_aToc|uLPw(i6}R!cq2kyL?;=DUF^603T+>+(=}SUh0&F!2HaBgQBR#Cnk89WJ zkkH&{s&~l0nN?4$?}Pb*reFdb=|Zt{rFNw)QuGV1Zf?@XOwRN^q+8%gh(HyqPV1xN zrnODI@qH5$Ws`BFTg@nv$?D3MXelFs@n?;_q!?maM1(is_jsm!$tY)hZGg3maN?r6 zsz%k&>G6{mV5V-P{5NAwofdRbt+EjGhwY_wWeXQN^c+(|aE!c9DA>-lv60ob8~RD% zJ##Q02I;atML>xEX98_N3D;Vh=<)pk`EJelYcao_YM1EgH`m?Eko49>ZMQ5%^Bv`k z5~eU}bCQK@@o?(+(z$dsRioq$Ua35?8M@mw_sO1OwFRxPPYKYI9<}arxEer_k#zN9 zSs;u0K~v_U%5@CN!n)5Bff)wH+t~I;qbPf=N*DoR9I0s zO#hH+ewj~Fj0c_Q61ljX>;8T?KRFXw=*NjmzQj_g0 zx>BVS;j&?hCZ}ZJlrx#6PSDcQ0{7@rzC!|Z!}W~5qsbKK&`+QkeQA~7SaA&gu3E_l zjnm2zz%ivO>}! zC4Z1iy{WyJ;`A(@N_i(#DuVhesBR4gH(~5}K_cQ8sxkeE?}Fhvy*qAm-pqH3C0Bs> zs`X#&tswk$@5_(6>Y?HV`6jc49P?=2jKl?%)C1;1|03A~QBoz^%v^W6Nk7lkFhuX{A}Twh+cHTPfM35CrBT-sq=P9pjCY@ z_>7(CcbrF!hDbNG&zHn~%`$;pmFn;52PLR6dQckHH5C;t$MYptSGosA7?xJ2I?f=P zhe56;)CzeB!`0-b>S{UNiaUm@2OO|5V|5Wgy0%&ehtc{YGYZn*3{g_i3-=fNgHGJFzG504hS>+ou ziqF-SX=%|hT-3C;%ulreHgE9CXM2(j#wK!6&W>H(MFq zf=ZGsNhu9t)xSiY{>ts_OHm9Euk!+6$HirLhc!zuZ-*s`6v{%TaoRew6&9`WJv7bA zE1l~)5V!|Z9cV9vpJcJ);F!5T(ueO`U3Y8aT5)Pe@h<5w5AC}1K*1yss+j-k(P|+% zt6X^K{*t^j;F&oz;!CbqRp%}!+%Or>TE?fDF_scUP87%0Errn=?Uh@}r7Gp1Kij-$ zNv0RKL1i`b@%*^Ggq&XwGa)(lL}`NkF;JIPEw|Lk1j3+JV~m{?x(^0C2!Y7?YzAm= zWith0BX90pAB;_QIdIivQ5_w(jrr$peut3%6C*@q7navK4SDdZhSz7HSHo$V133z| zE*#OySxRacdWL*`Lk5MWa@}${d8IKyD1zewD;&3jU$+r9-yso0|CH9`ERZbel(9ab zC=ZE&vtnMvOssCHc=X!zl5G`gk$IkUJi~{pUNgi|AY#+_Y%KzwBGHu}+roUO? z*Q~0#dY@y%rgo!PVO2{n8u6Ay{U`$3<)D%R^Pb`~1Aue~P(QO*uZCp7op8j?+<;cs zTR^}7`PERQ&z1T4vxEJxO3EVHx05g)NUe`M(r0thjCVb}aNMYALt8PBf)7XCshkoY z!UfY}zvFW+i5^#JYZ=+b_eL1~GoCV?phz%^3ttLb$b~5e_;%$MDiEK(S##Ymjo=`H zF#3aEP_S*_pr)JL=o4B+4{j{*Ryw$2t2AcyW2)}IuR%e;qW{SYWLQY6K+%VTVhQ^4bz7=4;cyF!Ctf1z^8be-7G zrku*Og~hdu9M|W?u`nAO(cC)&jJ!ss{lHR*sbd;T&U0VSvQEXj6_gH*qBai52R=T(#a+kMzp4NT-8ztTJhFTBwGt?#QII zpkD6yfIdtksV$DLleD4EOvWYJ<>+z{v(2xDb`spBtWl6c+x>29qEp9zZ15LxgnHCi zCeXmYQR_2BZgF%H#*KW#9V?{k&$(wC+B@g?qupklG&cp1>o$Wu+&83a1?h+);4g|XGWQ1F>p?zFEh}tQS*SqC$FR3n&3`O*X z9+VPy%qE)H zCd(U=fl->i-MvN(Ok3bK1CG4u|_ENLCP2rZp{F4~=GN6voWgR&l57L%E zlR`wP()nLSLDRjJ#dUPr)EhfquBo!=rtD7TeqH`hKe4K#YleQ3QQ6WU9Q7>$h59Wb zdY7J(7&S^6zn-H-@PYo+vSrbce0iQonz{%-SR;e<)EAR0iSW{6o!N1NHbQ_}_3xYO zBPIkK%v?X8h3go}zAhlQaX%Z9&3DbY!V;J9G*uT3>Go+QMJK`Qja*ldMw-pm@CK^tzb)_yjT1EH55=;0W>wLy@|Q-1@r^Lm@z2?6MzPSz5k$I|`27 z$qWdHFFL88JZp@R@UAO5%6~wa+tXH5JTHLTi9_~aVP(}4hb19q>l$(7T>2%I5^Mj1 z>svpRTmINxXRrX2NC90QWgV4Jl!$qveD|In7FK0ax}#u@GDQp=ufw<$?w&ruNRYQf z+1k=l^Uu5MRvT?;s!{sDuqvOhwQSljer8XY?#xY9T2G%uA zAG>7l@0?c}PwFy|zds~#zLk79rr@wWyFo|KKe`Z8DvuvpD1 zs>Siv%TXtyQYFdA3(c`Yqu)xv=SHQc}vB*F7WHxW4-j&AjnxYMRZ1`E{s-CJExj zet=Tq-)^-4^-e()$x=4y4HomotIu2Sd~WH!ApL~4ap#>Y_U^8(jo9dDB)<3UOSl{4 zH@%0us|T!>HQa|qH}1h$)tuc3F=RZ4jP*0fyYj6%AVo8^*Ql#G;v zMEbMW9zjI*yL~$TPWUIx-_?@>qWx}vR8Pr$-kKwkM*wu4XW$NNgiYPu->;+c#eEfg|?_yM860b0*&U^3!SUORDI-lNj4Uo-HvAH?OF_!1O zOKP$?Z=%=!a35rK(QIYAWvuG5D?)tQRnedw19tLICNy!3=GWZtgwKQQ#LvcrI*0ew zq@PzFG#_PWL^U(BC~OVek$B>J8kM)~UNZnuT5bVAs59j8(9@*0A3t<4?}qNW?xJg5Sh4~?~ig%~D*?R0R} znuluBTrN-n|CSJUo!U6J^(C7bbsf@0bxAL=L7%~6gl(iqCqF&Jqbodx;s`G6F-g`a zMttPQ6sTOche9zplQcq&x@~=5r?E=k8071CEu*wn1t_PSZWfy`sBMG^Sv)#^5#Y*% zpJ5jC;tKnnr(Hk`he&t3u(YHNI1vwHpq1CjHmYl=50`e;O>l2e418qH(0(bZS7WR` z2flVpo?7p=t1h)Qjfec!;1gRJ{fb9QRlRb`a=~|5$f>4YgujXw?s760B+qMsT=VUw;CsYr?WIBOO>EPbXF&yttyFQuO(t1RsUCJ04XXAiYu6ctw zCmrC-T);-^fF=oD7BmxQ<(<*E&D-oz>34KP7nf+3EaFAiDV!l#%gSO*0*kpH0r?b4 zg|NghDjL%ertyx3V~Q-MC*Y5*NniMS{igO&@d@0ItYR)D!Kuc>iTifs>C z4T!VQK>g9Jix#R3YhOgS2Uyp!(%$F7!9&eJ8S$bT*~$66-@UZNM(Kn8O&VVUs}5dB zPBQf@}@_JCbU7^Dx%J!3i16f3CdxzU6e!}iKy!EU! zW}D@k-z!UM9nHJG6_-iB(M%GATGH4L@HOg<2@*oC*+pfuSnNoUDz%q@KCeqT^M*x3 zgJ$v>CJng5qgozC+O&S=<6_#)zFni{?IP(J+`qha#UVzSk*$)sY%!y`N>n`l}5tzL`DOcYw4tQ(}}@3?uvn&&UES7!J=l2W8^zJu%+sfCcbA#dKi*dA7YO}wejwhV za?9=13It+_0ZVUswhs&qiak7ktR4T$QKDcIJyt$llGK$akC!gt5d z>jz$vOQ*Do6L>6SgUBu}qV!)1yg*8CXMl0HS4#e;2qc{=-u>sN$KBYDj>~QUFa!h; z+XP81gj|4h=N#qvUuAYOb&uPfkI&v-Fa0`}^)k0X%(kcNAy|6be?;ORK!olxPdtY0 zqG2EL*K2(5Xx&DL!&ZEvSZ7{SdtL^4fk#I7UA%``PV46_TfZ(qYy}S!%+qPX#6EIq zOtX_YyyMv*&h+9;fulVx&#^DVct((iGXB53wvvR1~xoH z-bgFIt0?e5EdSNw4;O6qKk7`6X(~2?Bi_F_lHEn*cw7x)NnPqxsiM-zVj1_EEsiB8 zyjoRz#S&cn{)x<9K+d-9_x`NUZnue-xiH&er_b&^0LShFRk4`cV}|Blpkjf;CP(X zRcp7{ihX)pTkbZ!s%L>?^_s$?m2QH;kmo*US(Y~;{=L4e=M=47dH;Al&bZR{NGV11 zuP4t!!XKVOwLi3?BKS=0Q-^ZQ>8Y>BE|#v|qR=Ys;h)k5b{&G zbcb8z=Z7^O*^gEw5qMQPCegXr8*!8nAd!X-g|e~Jzo>cvCf4Gye49*VASJ@Z1ery* zSw$jMU$jEG55auS{qVz|#Xw-smxZyk7uYNW{LhFXqa2_Mtw18uN_JZ4($*4a?YR0d z#0O+f!*lEefo!AKJ&y8)k%sY{?y=qWlhq?{*{6N>Y4z(|{dpko-6p>L+yHS{AN;}L zyB%h`wMQ|ukDQ^-eZZ#lq;I7F2fziMgUJ8RI0hPmAa9W`k@+`sL4Ts*Iy_j9zv;59 z<5X2U8XXEMj$ybjK&oDu&mest>)_LchcBEA&v7}(e2)f;=e!^)+h>~-6SqZG^|omc zSNsJ?x1soXx#z9O_4nwS+lrpSZ-a4sZr3D4Ok2f+^XxoXBs`88d@kqGUnS%u9rG9F zEjkr*8r#)S*3`g+=Kj!?ZdQwgMM5&UAw;zgiCQhT+2fdM6`?(}nuA{a;P6Zl3B4^4 zpS`P25+oDjcz!m?=V^Qy$Cn^N<8~v;bLRxv&|oXkf2fcR0a2~*4&GQACS4<5?nc(y zqSG9(zt;!iHXTHrK@{>oPi+Yq3XuEro;sF_WC^9b>^yt5 z^QBdb+L_B1^J1!hb&No6n@MSGH1d?QhcbG{{9;ly26(qx!+pY~f|LdPTxsVQ)H&AY z_8)K=x_}nP^99Dpf@2!!G^yz;o!~L-k*ZN+$T5gA68G_bVGQZT zl5u9)Q#o7_x@5PsuK`Q}RAy(s8%ad?_I`+p5YfrKP0M6!Z^hPEj$-$%@4N@Lk zy6@;=!LOIJ?Y=0$_7=+L@?C&@hCPso3=S^54;_7*h-eZNP;B#T96jA9waRfO{q;Ms z5X*(tSdih`VGSWgLck$`02k8|=1d%rwg)jV{ynwFyE^$9)cazdmO{ZICP`r2s~l(O z&3^ zVSKxS7|Fpa`SR?q1-3G>9Z6fg!0f_QKiX(9|NT3B0OU4C0aqSLZ~!cUy8v12s_pM> zLC=_*355PXltS&!M5ao%;Rskd_T8BrS1y?tvTb1Sv0Nuq4>Q8ZZ7o~A0D;}TYaz#w zylW64!ls;Zix)E(hjNcNzDJVHJIE=p(~I*>!0dU>YJcin>UCL*-PfCpulEeaf&!ck znS5| z7>jIAM*eJXC6T{Lrkw(BP%ycRN_qPj1QM^ z#CODLZet^5r4ze!uH)rFXkBfx%6_ubU-{wTWo>XScQ0N!$2_oFg}N!`{`yI zj_2Ap%W8mOED>03<9p^Ja$6%X5nLO=prJ({>uH$2)GY6`!R4|%fZHj4N2R_r zT_5p{KMrh5yqo!m_8ic{{*`hI<}!d>I>=T1Gq}Uf0Q`Ys;@ey2O}DlC7>JomncZrM z?sGU0M8>h7<7Hck#MfdTzuWzKZU@+=*)qFDf+3uteH{9c_zBZ>9&EGg9w|&@1ngI- z;*a$|{5r2lTfedN+yx7#2;1l7`6plRYW!GVkL$;~jnFZO$iH%u9!Vjp2x^Jw|MJK% z9GPZh(!{`YbrB9lY_{74DR5MkZnV3&kcJ|+xTRiF>8ZxNPMBHep@SASij+-FjXMZ< zy^eJ8k0~tTraB9yu?%Z7+s9|_+DK$v6RN|^CT52T?Hn1kT4y>N@VtK$u^aA5v>1<) zsF&aVUWx96LBuwPtXTl(vhDGGoy3A2S-h_mXK(+@qPSBn9c{uiI`1_5lezZ z0b?{DC|Ri20`;&>XfJrHY0qApw&3qOQKM#*iNZ6Rnf_ScGM=tgUF?XM6JmSGds~4d zDgLn;;TdO+a#okI^Eb)7vIQjZNAyy2X7_@_9FPRlJXK&k_CL7*j8yv{d(HWuSEn-w z5UH{0;_d_7G|n(C0IjHVRd!yoq6A(YczsJkzJ1IWC44TetKrM~enG3aqZ<0faHcC1 zD2`>^n;qxSd*AUrH$4t5u2*>;#%LMsFtfeODt=$sxn7}j_?t&NLFUB!k_YecQD*_x zFukjyI!8zvmMLWHrBmrz%(D(P=b4+iMp~K*5g!or*oC3yOjwoYAQN>d6F3U_twqls zk@szq?_==I3$H67JA7c<&S|yPCJkI-eCvy1`GDq`5(pGvitK3InYQ%6+52McZjJiC zjij3b2C0UaXCbPuor5iJlTHE?p|xGk5}sT&%Qzy;2@!e7khU91Q?Coa%+|eW)FFLm zl2EO}M#NTG7%4~+YH%M^YPk*CXV4Eq{JdQ0#>o{{x0m|1XwcJHj6y`SI_I^99ORy5 zHWRhW^f=gtT>$mxaZQEd>FX^S;v-<1FHEYbp~1>mYBEqDse<9XaR{xXu7_=sy@>UZa; zPc>s&FV|g1u)vvdE{~PT(ZP85CRLDF5@hy9OFE2q4TQlc^U&{6DX{J1ET^H?eO&XQ zhEIAli9bP#k(ScQLbXA+;$SF!KNrhzTTS1qJA7?jKBR?|h=bvFV%4iiTY7dPEWDes z_`idAaEJXFJ5?b*{gFHVh%8<>TKH*7kZW*!-eEWzGtD(R{wwnU4KCXm+#e-lRN5S7 zM`{DID`K=-x>@RytV%EL_O16fw~Tz+gcbn>2oo{}V^toByH6Hi2^PN*1$cZBUvj;# zM_~+Cqa*lHm^|*K8M_wzTlcKE8)E5xPk{YK`h{kvsN3$`bX`}8b-j}f{$fhOo70^Z zFzqp7hQbPNLg;xU@9BCu8F>h~fX`v?e{#ffQ_AIf=0wt+vTA*dF3%&_&@-%!TV^75 zKY~)D87FbiR+o59gf5^curHU*r3H|oKWvTxmn?Hj;m#(y)J3G5!2}Opi!AN?exnP& zfG+(aaBBeX+Dq2ydd(mpll};Vf<*R!IiYIo&>dyo?06s(AS^gZ7H?9nvMaD7I(v4Z z)(vD}k{(b++N@lH%2>LF(7RY9@)CQ?J4OlgiNxG-`RE5-v#*D>%R}T>RzXGYMrieP zWI4$YY^+_>UCu!{UL})AgbqwRmeb0~aGrJeicurPc7aR3tC#;!tR`)rysXv{-R{=L zvtvy&qcl#kZBq0Mfm^4%Pnl~&O~6Rf9LX3FJ}q zjNQ3=gWE(vXf6Z~xwPLIAmuT;ReyXvjWqACptgZ_b9Nu^91%e~%+@tXVo=(|=vusc z7r<+~?*4fpuckkd3aIAWeTLLU!;LG^7_&5}(Le8=Vm zx-VDMw#18RzE#=v_#TkEA55g%j_r-IIT!`E6>**8X*6tJ}^FV03;>DB&E+DXCwCPedBtjbbp5R54Tjxn36}epJ)`ryO(E z?;InwI^mW^r=5+cL*DeXN;v+p!gACFN(z$0fP&5ay&$)Fq z*9Z@6G&uoV_4|dO&!lO{NCs>DrJ5Nv_aV6*pqJ;{RstG=U4U51fS3bvwbIuEIDIj5 zYkGVgr?@szi`BRbvDSmfaPHI=Gq7|Ed)yQkvu?z&d)if!O?_(e3{GjC_~BW2+Jy0V zlFuvQm1`p02V88JD~$KrwKb)wGN2|rU8s*VL}RAXBH>5AF_oI7W%ydz`D6j_ z`3&2Qfdo-_5%@D0_+UY1iR`L<(rRTrr_>I`Asi!QPCCu7E9j~csRnRXY_|l937Hq^kL}rAD3G)n2(G`%si0&&JFRg1mU}sd@4AtzmUoYmId`iOY5LlBKYXx+94X8>b!^D!_*$f`R$1i9ioP0n zJur?j2;ezdMc+pN*z0OWx)TY=Su9)ntDi#B=+hHt;PKZHUaU&NxTLy1eB4G3#Uw(7 zocTt$9qwbA@f8fg{@Y!ilgIUxls5zzoB>%cdN0B7`fxpEVOSsG1#~BrF}TV$-UGP1 zL8VjlE&QG=*ck*J5lZUmz%Id*)5kfi;n9E>mCa088}=PWay!kv8mUh*U#Pj4<+#tCGi@e#<4Dt=I4$P1m+qBL z-$CVGQ~eBqMG1<~Rq-9DHIWO4W#rmcrr>)G)f+YH~;-vGscSi<)jK zn+niwBIQJ&2+-YwJHn6Tn3a5#Bs7Qv;~4Q0@LkUZcJ?U?x!au=^WKKN1-%Hp#vx6M zu9}NC3XY|&=N!#Leu4Cdg@8Fv6nJe;US>%7m41KGQEfg;Li){-9}GorRf74+w|bTx z?32)paWlI#@6AUd+D`ivX*~}T%iuWLYpP{<|8OXYoC%SVoDoQzL|5g9N4P88Cq-l) zWpn;bZowTu(V%-sgHm1G?*9Tvut-(_Nj?BjK$R zm4~?FR#;J$;;#yqg|bAxaC@jR@jfXh;Vf;0ZBEhjcM@I(xrZbl9~_aF(*~z`_kMoa zC*S5xeH;mSjl;THG3$^IfodgijzXlyP%R=6H)UrA;Xv!*;RQ<+WC35$9=u+Pa<6=l z5}_vL2Ikuh7bJQ{$ET9RG7cC@gtm;2<#FbeE%%_Axhc175@;2is}Sp`)9oSK>ObI% zeXUj@gdUwkXCVH5y=hS(E0#l1U&_CXc8A1ZcCF-`n;RMXwp0JzJVTuvB$#M&;!&Q4SNN6k-8t{`r-Zcve$;n16L>P@ z(7Thx@e$X~VQ+S9C_}UnqgYGdLnr^6L@5dqy5%;rsb&!wiqd zR4)HkG~qiVDejJkXNU%byI4BWCB@!!F!sf85Y^K}Ci`;tuD9^dUJvDRWS~Y$^C72t zm6in%=MtkGUT^#T?V%@APoDP+Tq?P@<*$BG+(uMB@~)2^_E!buTJ1F}O%@x?7qi&g zAQ_10yI)7(-ui0PT?89m?QWaC>OMYIDZHZZsET<7YfaYVJan^I3E}^TtheBbDs0$= z2Zodek?t0d?ivB<5~RC3rD1649=eehknRp)=$3Af?vg&^`#k6U&RXBvYt1j%v+w)r zyVgSnuZ6ph-uRq)jdtmZRu{XvyRELb>#iwYjIs>Z0mC6uO!#GJSj#w)Ad!G?kSdt2!<*ZL*X&ir4cblnhq5h^fn z|BUgin=LHf%)iE6k5;AS$iXUPvrX_a&zqGp_A7@Tc$`&X&C^d;Y{ZQ`7NY{ZvIHv; zvNN8S2y7ocOgU$Qu|%yNVbt-}GDO|R0J)dr1b9D1PB}y+Mjr;_!Xr*obRBR+y|NE} z?T_!T^-EXnBGbo;^gVmZn4=Bg1P$VVmk~1M>2Sh4k*D2Z>v6w-*Wie2RT~Ai7v9$4 zmwTpGn^s$wqOBqCjK@7sru22#^${Y@ONewlo^sdmRkfW8dfcsgEc+;~22upIB{Wtw zJ-EdG&Y|C!?lM{?^?%xLb)mu2(CT&{2$kYJfKT%@3_}+fCB^1e^CFsAtTryNn~yjx zn7fumZrPU3HM)%-HTF25OHIdk{DCrLo1~E|3RXZ0T|Y>#vD_QYK3VIXsj#Cn^BVd^ z&^EUvApAJWHn!n^eppYtvWZoB?!brfPIYE`q*&R22~nV;$-u+#uWn zSPIol$YydvJ-5hllt#=!nYFe3Nla?d%~+k?UvZFyGTc9{vTE1%!^-=PLM1?t@`$fm6zkN4c|#!Fy2OG5<^&mxVxBBh0NShC24($0o{{V=@Lr}D|P zT%#2xe7t|YTlbhz?|egs7uNmQbA>togJOpV)<9?_nrW7?mMe2?=k10o|Mnj}N_+dJs+X$M1Ekxy3E9~Ry6*dG@^ss1+rWi|0N2Y z&>P(!f*kIN6M<-P; za*X_;HPn1~DETnaUb&EvC^J)=Y0bM;MTe*Tef5ou@X1wO?SaxSoHG!ZZb$BBJf7Dr z+XvjbA`v#iHdSV0N|hu)%AjN#5wdrytL%=Fy7)V>EC?CC{cR%yLsUD#3uTzAMRk-F zay*CkwKHbo2CUWGgxn?+lgwm*Z(|C}-!qI=9>p0LT&GzjPBUa20`Cd}^dC{m)0lJv z;s15Ea>{(QZ?Qv~g5xKQ?|?D?V~;r9v_{BMtT}V%wQo_f(F+Z{56n-sxW1qvF#dFc zZT0v^7a}_+akB5Py+!W36Q7$i59APW-jW0&aV)_(Qo&u4z;Gqf>T>{aT>bGwO{2IFQr`Y*TNBQ^bEH-w3C8U?O+y;c9}MKr2>0iH7wEza zd4dyrch4O2fI#?3>8x3bU0NlX;1h<$mjkhQE&$${Q0NVd1 zi@q6xX?N{Vw@xTK;EQFhn+DnE(1#xR-^2LKD+mpa-PG-YQ-8D?5h)`?;j4522KAXa z@UN}zC-21vxPd8@#Hz4XVkGSsM9O$?8O(V2!K|;b32Na&zJED>zgSgaFEd%HVFuLK z6Rkb>_U34OStEEDA>t~QKlMA%S>xLAS}+dNB@xGjo?)BMy zfLEa@sCs7d$Y)V-b3$_bo~aM*Gq>iYDG>ap-1`_l6uJrUYp zk`BkDnpgWvabLXRt+7s&1237hE`5v9pvy52G2O?9Q486^T{pH*py#Q9y=0ZVSw2sF z`8`%_8LI}CDR=mSLlLred|Cz*)ruzXf@688{c3o$zI zo&m4xEL`j4+%*{JTom zaxZ~kJ#`l3KO%{BNGT>Zk;BEKBoUYJ*)-VePw1C?!Q-ipHjN~x8%%qPrjvN4{(79~ zy2yUA)W~IGX?hiY@t?2Hf06J{glcupul4W-OZ4+qKGLZgw>2XQsTj0E1EUd3Z|*9~ zCvYveX2`%=J_qlA5r1L!I9Vp&nXW5LwN8wDa&WkVn?g*7M)?gFnxxQm!S=~Qm@2r$ z(QW9ZC6!(CsK?@<3t5t^nG?tvs-n}6ar?44aoDUqm?H#ZC(qg#j zSC75?Yja?Q;VO=a7|--BX~MOnAvJ};2iP31Vc!iDCVl7pE-WlKPLq{_@#ledM{dP& z`Kdhg0rTX}{R!{;6pO>eF8cAjb9Rf5I0b}52V?>FTmo-`$h7{Lr|LUE#;4?Ks3<+> zUMJOSY&!;(s>zlJ<`4hcRNXxJQ%?H5u}P#@Tuq8}7D znp40DV+G$1Tj=ddf_Ko)Qvt>EJs;S+p01+&O#MjZV)T(b z{>%IuEUDZ_3^#GECgU@EcKVCLKC~DibE@-`l|DIhrKJ4hyV` z%agX!`#^Q&3+sRHDKQfqiPp3T=qwtm=E?gs)MZ|%q~Yj&l{4bvSc8JWH)t9){yAhY zP{HfNknD&Dk;`6082?2c_u4N?{9ybHbvl)nT2*<8VI!Nlie%f$I0_nbZQ|1D9gybx zG34O-bgfLfNZm}xCjF6ji?EJ>S2HJDevEG{p~(NJ?Rho0lf#+BTbi#$hAk;;g@)hj zg6uYijynx^?7)+XZw|*R*3H&)jpK}x>!nW+3};Z-a)5Pq#b-RyX`Y#3eaEg1doM>B?0qljQhNGPXz%4 z^ZFi@M9*R5g0nUCbfJO)0C^1)%B`6F%aN*Tb5wyiXOw*8KFCL}=y56uB(!VNomP)C zs@^erk}u{U!fk>$5FiDe{-0GDKky8m<{S>!^>B7E26kfyy-lg5ceLms-v_*N2{?Aj zigp8S&l~1ib$=M)`#AlJW={>~bPA!Dai8tMkw&lc4$kr#W-3_%2SBmO;cJ|9D{+F! zsPPNgyMc!rGr6KtMj#)q>2&=!X>bAP*l>SGRrzyYp9I`vA0>=(FV*O8t)pPm=};-? z@Fl{a%7<{GRUQx)VUT4|zQn6>h#9~_hOiLNkNod#H)8;K*OHDG+1oUDe(B8h)j(HA z*i;Q1xT)>&tZQAE9#HI@V~JRe7`>GXrY=}f`I z2Do@Ufz60vZPe3H6K%2p3{Y*bp3yLv8do8)G6i9uxk`830aPcfZf{+@#=hsu&OHAh zOgQ<3uKrv)pvQ$Hj;WT3$jAcmLnp-4e#ibsTOosc2td1JI?*c*gttZXMr4cAN1&X- zg8T6qc^PdM4}nxT>HfiHX~WpSpmQiwFs~h2>~_R^+ukmuR;VQL`a)JM#>fjUSirI^K5>N}ooPMD^tgcK6>h=5U>|ltguwwe1LKh{ANc9J$7VbXJ zWQ|?C>il8wnKD1`s>HmCI_F;+vVQuueNopE&I7soiuCb9$r-hz*sU)IUy=`@5V>7* z^(IxMnS-}+oOvXnr*AvrO`JvcB}kX=TU}j0zfLuw^Z?t)?6$G)bcvUcf^1>qzy>8= z$+zgJ$a%{$R5@z|bln?tXQ!=hwme#XQDDnS&C~WPB^)TSPFJ59d?(M*Z|hyW18gj@ zr||GS`PnM<`?JUg{LaU(e?}WbLwl@{I;3NW&CTRx4$yx;-*q`^2@6xq+~o~UH(iVk zd_{a_zMn2ZAfwwsL(Puh+^4_(wBH&}Bx{<5gy(a6yg4p>#WG_%B|^B9_qv_ghk(&} zF#JOnQQ0Q>Exljxo{zlc@&@OdogQW8cNO|A2IY9+!l|FFGXm3D zm$3o2?0?||X?WQn3b}p{Of%Z+{{AVf^XO}cEp?@(&|?Q-Z_&r&x_8LnHwp*}_OR3W za>FbCx?JuKmhO?KsN{gBYkfcB0zrPDd!S!f|DjH?KugNr1=A6h>D3K=FFx^JAhBH> zNp=dHwX?Osbc(1`m`ft+pnlmix^-s5q2e7OJ5Qr!j#sguOdnitvfHQK8#l3iLYl+O+z1Ey#n+V9CLS<#ApI(ZkJ= zBme5o5X9`P(-?9H+Y>FoZybkUFe^x(@#?boy*xjrV}#5r4ETFCQo)c$T>6Hmr@vm) z={7=5-9Wpuh54U_?G5cZt4(n)zpPCSv@_(r$Nd7V6~Y?{1&gdI(MZ|rA>&8)yg1bH zF#XVM-=qgycE2n*CpO3<6)x{C=vm@&umuglp&Io(2sY5z{JEDL34_=!t^a(Jrb0QJ z#Y7Y`d5_7WRo(sI;{+5Q9nTSwKS_v4#1Ca_|GO1MuePQCV{Wor8|Ft_C!v4y+a?w> zWGE<;TFlP1ce+U4el+|+zr`kb4##ESEBnH^9Jq-PVj3j2&OYE1i(??)a<2p~edwlP z{QDBYkh34F(y@_7XPCx$z`pn*;I%=kyo56$PTKxc{Je-2n}C$yta5{LmSMe)FrygZ z)}d;S+ZOfAO zw{=>M)h92`xKgxuMV?grTN1>T=}u>C!CvdCCM9GtuW@uxhXkaKaBf~im#HLGiqvBM z_V+Muq98ez=lZIWNbheg?QlMNXA1X+Y2gVy2@F%AzzxiG)C`0zQlZX=lw)kE_ zjXb%o^IFDFB~}~M4U$n>_tCrEBe_g{A*Oj_@u_x&*ySuI7Pud9feJziK=Fj)l65`p zvc1PIya{5&(tyb*1R+FF3xjwqew(uBZZg| zDWAZ}b09kX_kc`dGnJn2#V;xJf=Yl^^|y^lUN~%tyzWfg4Lp0ib3Ay89Cj+@(JX

    d2rCW8uR8E+u!0;SBhmgeU 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ÐAg2w?8tJ__uIGVJ;=2t;)YsJ}&F7cPND#kEfM?B*Z&bBC>Pqi&1HrC*`{%7lw6D1s`^iqK`t1AcpweAF%Mi?-o z{rH-^%+wS8*QHO{=y)c@E z%lLl2#_QRWeVHu+I|+I@^hO)Q_AC&4O&zk?jSzDWfnx{bf~mlB*7*-I^sMR}wN^^6 z;{{#fo-$rnF^ zIPLKmF};vhtIL&iz?#;_^D08xhgrvxR2d>J8k{;q9}=os0c5;N>1O2cR7_EjTz)MQ zhXd9jw&PNL>7)Je{CKh;&{c>}F5TQ9@|hg^(XY7Pd2L`q>~e=@P(00y{`G5|Q-Nql zlcUp8{nr)C+Nv~XG;^foL)b!4aj3Zj@2_4YI)sWSeYnhzS$MScbRLxEjACoWdfkJ< zlC}vr6WHkdf?@kaA+m4e?p~_%n#*>1X_@Z}{?~X85%I<&-*@T=yYXY?DOD2r?N&iw z&Cz+CyrREHf^O0C&Rh1WRvG+T0J7^Y33&ONs6Lz%T1)XU%L&))9DR5)*I-Gg>E~FQ z{ZggAOXtfiYZk|Yd{lpbv7k#Ra$XD`6U9OSiTzbM< zB|XL}->`Y5u~yX7=TQ=w!E^$9`695O*`j6_&aj2BgMT`xheZ6fB6qtYI#y;^Hyf9% z_SbLjLR;umQf%dAuOa#@_rw%y}Ehgx9??J zY;rHDRF|uAg7nwP_u` zHILC$vMrs|m#XP=oI1#Mi8@*iBlDYIlJooSeETa((@$`zYxR^&H)KPl8hI1%K{F;y zQ#Qr#qC#Qa86jA);`El5yMLHF0Bfais{^`bx?0F#l5?X&QBR3oi~iX~=9lGpw8i(m zJ@1RfR64gbGZGto@4Tha3F`aCV>-RSEhb4d{K+5w1@V;hiXU8_ONS8Vy|&b_G1qe1 z^;YJ7hXWxa+IuHvLEsS6Pi4WltO7O|Yu&_g;FW{0EsL)+lK&ogA0Q&MQh+DcYbF|X zzT^!lNl~3gde#ZJx-YGeaqMKseKh8!YQ7UDJPQ(eD7?aG+#4 zkCS^R1V{9My%q9KxA1%Oo=A*!A34wKH1Q9?fMBEtak1W2lf(hNoZA-Q^747xsP8|D zi(i$l7D=4gxlCo`H6W-W7r`YDm%Q`ekxFo`K&SW1&4R_{0&`m*W_w1k$ZL@BeBT|> z@rs=#4Yg&)-7r28W0EmM_DTSi2_S2(RUMx5e@FawsMuIpy*!%SQV-6vlr=o^-KuZb zKWh(>cCV+H3J|<%dl3J_~%TP8@a

    0dYIR#_-0($1m<7S)D>T17w&qlc|T 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 X#t2wiR|fy~6Yx8yV+hUHvhx2QScQS# literal 0 HcmV?d00001 diff --git "a/0\354\243\274\354\260\250\353\257\270\354\205\230/hello.vuerd.json" "b/0\354\243\274\354\260\250\353\257\270\354\205\230/hello.vuerd.json" new file mode 100644 index 0000000..4737311 --- /dev/null +++ "b/0\354\243\274\354\260\250\353\257\270\354\205\230/hello.vuerd.json" @@ -0,0 +1,2976 @@ +{ + "$schema": "https://raw.githubusercontent.com/dineug/erd-editor/main/json-schema/schema.json", + "version": "3.0.0", + "settings": { + "width": 2000, + "height": 2000, + "scrollTop": -750.1514, + "scrollLeft": -373.2146, + "zoomLevel": 0.71, + "show": 431, + "database": 4, + "databaseName": "", + "canvasType": "ERD", + "language": 1, + "tableNameCase": 4, + "columnNameCase": 2, + "bracketType": 1, + "relationshipDataTypeSync": true, + "relationshipOptimization": false, + "columnOrder": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64 + ], + "maxWidthComment": -1, + "ignoreSaveSettings": 0 + }, + "doc": { + "tableIds": [ + "SW3qSYcmcjF6fxRxL9C6W", + "EnyjPta3Re1to-0Ow_c0k", + "3sN0z9wOs5gRHtxPeLnNL", + "cRAlxAB1DS5CVIqN0YxH_", + "FbuZsipRsYu9OgkLtQvRH", + "U-iS9P7j9_XRpt7sokj1u", + "WzdtVxFyk4teMt3xZ8E-8", + "1m_s3Ee0XEsle86A1W9bt", + "QF-n1pnH466PZnRVifDEq", + "66s2GuXAH4IsvhVcW9jiZ", + "uc2j1aS_eaeKNmWqHIhjm", + "DCLfTq9CxYAqBLL9O5uV-" + ], + "relationshipIds": [ + "x5KesGnxWH7BV5U7SRUKf", + "eQ0Udv6TLmj-vhXKBJS9z", + "QHb8FIR-OWcNh55-2nQS3", + "MD92WiyC8by1qAm4I_XSo", + "hlb49ERgeQ1Wz6x78DVes", + "GOioAAFNsn_A5uVd9veiB", + "1bzWUSllbdQW-XkNzsFDL", + "hMvmzUWSPDWpRGtzvjQ_H", + "MNEmKtrdfaxLY7ulw1tGy", + "dxZac9LiwDnVGUoVgGBK_", + "t4n5Tkjog7EkRQY3WzvHA", + "jkWOiJoVYIrCuKnZXEIEX" + ], + "indexIds": [], + "memoIds": [] + }, + "collections": { + "tableEntities": { + "SW3qSYcmcjF6fxRxL9C6W": { + "id": "SW3qSYcmcjF6fxRxL9C6W", + "name": "User", + "comment": "", + "columnIds": [ + "FdInoxrEYMeqkCxyYQlEd", + "PbYSFy11QfczYemBl6sN8", + "IyuLsAKxYBgglcCueMciJ", + "j6FYMzLSV8ObnYo640OZW", + "aRwenG0xV5S3tVe_HxfGr", + "c8eBgjgL943BPvdbqGlNx", + "2F4WIGFoal0Pfq5aKWJGR", + "EMxDdIiEeIocCGxgzqdY2" + ], + "seqColumnIds": [ + "FdInoxrEYMeqkCxyYQlEd", + "PbYSFy11QfczYemBl6sN8", + "IyuLsAKxYBgglcCueMciJ", + "j6FYMzLSV8ObnYo640OZW", + "aRwenG0xV5S3tVe_HxfGr", + "c8eBgjgL943BPvdbqGlNx", + "2F4WIGFoal0Pfq5aKWJGR", + "EMxDdIiEeIocCGxgzqdY2", + "qwK66PRnyh6wZ7ebcTFIa", + "unGW2Vhu7oVMAbbyb_uU8", + "IPxLAdyOC8VYOSQBns0-W", + "o3xi1phrDUYwXoYMLJvNP", + "QbmabyqvWYXUzYuw76G_K", + "aVEC_JkxE3fKxtkaAGdo_", + "Yymdw8aFEqAAoh_FDoQnk" + ], + "ui": { + "x": 692.698, + "y": 898.2007, + "zIndex": 2, + "widthName": 60, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758454295079, + "createAt": 1758265403229 + } + }, + "cRAlxAB1DS5CVIqN0YxH_": { + "id": "cRAlxAB1DS5CVIqN0YxH_", + "name": "Mission", + "comment": "", + "columnIds": [ + "NG68JYiPiJ-OOvG6HiKys", + "x6gCvhNKdcN5NiRG-o2V1", + "wF8OtNJBqHscI54r3JBWY", + "JGl101X01OJCUEt54mALi", + "VwpFfMO3n1vJKpvDTSr3C", + "iOfII2VWsbj9mzzIOT53n", + "Ot0SIC-v-b6RBocUOwIHc", + "NvKLpAdjRzQgpUoTUmIou" + ], + "seqColumnIds": [ + "NG68JYiPiJ-OOvG6HiKys", + "x6gCvhNKdcN5NiRG-o2V1", + "wF8OtNJBqHscI54r3JBWY", + "JGl101X01OJCUEt54mALi", + "VwpFfMO3n1vJKpvDTSr3C", + "iOfII2VWsbj9mzzIOT53n", + "P9cavuKJGE8NxA5pnr2w_", + "87sEqz5-srk0VbG4yiWb2", + "Ot0SIC-v-b6RBocUOwIHc", + "NvKLpAdjRzQgpUoTUmIou" + ], + "ui": { + "x": 1651.263, + "y": 575.2659, + "zIndex": 129, + "widthName": 60, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758456876153, + "createAt": 1758267265581 + } + }, + "e6c3szi_ECXJt-WIBHtd_": { + "id": "e6c3szi_ECXJt-WIBHtd_", + "name": "User_mission", + "comment": "", + "columnIds": [ + "QJfGm1SMwEAxzNijipiM4", + "wyBJqunyME-zl1-De524y", + "Dt2MU1hvPB0ihSmrydMny" + ], + "seqColumnIds": [ + "o8VGEZ3v_LBPKvH8ZdawX", + "QJfGm1SMwEAxzNijipiM4", + "7CiWEnTk56G5_bVXZb7B1", + "O4m50Mtp1WSycEW6FyxTF", + "egLozO6_0r3FSIp9c5Wpn", + "k-eAvJsD6k9GBQMdmy37y", + "wyBJqunyME-zl1-De524y", + "Dt2MU1hvPB0ihSmrydMny", + "fyCBGRc-o-aQC-EQBLTv3" + ], + "ui": { + "x": 807.5343, + "y": 393.1509, + "zIndex": 220, + "widthName": 78, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758290558424, + "createAt": 1758267910532 + } + }, + "EnyjPta3Re1to-0Ow_c0k": { + "id": "EnyjPta3Re1to-0Ow_c0k", + "name": "User_mission", + "comment": "", + "columnIds": [ + "0vodZWX_87XT9VbutIozY", + "Inuqs8_WWLi2BSn2yGcR8", + "LYVABXr59kbCKrzUnqLHM", + "1S2A9Kj1q0Zg1NjLnMd4x" + ], + "seqColumnIds": [ + "BTWnyvg3l8OqAD1jo6ns0", + "StKAxk-_jDp-US4C117il", + "dQFMxc6o44lnTzRBkWRX1", + "0vodZWX_87XT9VbutIozY", + "Inuqs8_WWLi2BSn2yGcR8", + "LYVABXr59kbCKrzUnqLHM", + "0W8hNlGVp449tH6a85DH8", + "1S2A9Kj1q0Zg1NjLnMd4x" + ], + "ui": { + "x": 669.9466, + "y": 597.6242, + "zIndex": 332, + "widthName": 78, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758455572842, + "createAt": 1758292158564 + } + }, + "3sN0z9wOs5gRHtxPeLnNL": { + "id": "3sN0z9wOs5gRHtxPeLnNL", + "name": "Store", + "comment": "", + "columnIds": [ + "AfeYLVYuvV8Wl821feyp7", + "bbfng-98l1GftLFmZFiJz", + "hIRya3_Znn8A6lvR0oQKD", + "7loiKwFcsBh-V-HXDU4qt" + ], + "seqColumnIds": [ + "AfeYLVYuvV8Wl821feyp7", + "bbfng-98l1GftLFmZFiJz", + "hIRya3_Znn8A6lvR0oQKD", + "mMOcNIkrGjGfNRqn9YDzj", + "nRMf6gQpPmzyCevOtE4-8", + "7loiKwFcsBh-V-HXDU4qt" + ], + "ui": { + "x": 1652.6988, + "y": 969.3323, + "zIndex": 402, + "widthName": 60, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758371770324, + "createAt": 1758292692269 + } + }, + "FbuZsipRsYu9OgkLtQvRH": { + "id": "FbuZsipRsYu9OgkLtQvRH", + "name": "location", + "comment": "", + "columnIds": [ + "H4d48_Pb2KZNa64mBsDPG", + "HdJ2IUlX-_VuFBeKr-A5F" + ], + "seqColumnIds": [ + "H4d48_Pb2KZNa64mBsDPG", + "iN3tJldWUJdh77mvXWKi9", + "HdJ2IUlX-_VuFBeKr-A5F" + ], + "ui": { + "x": 1686.6967, + "y": 1343.0536, + "zIndex": 474, + "widthName": 60, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758371772349, + "createAt": 1758292911987 + } + }, + "U-iS9P7j9_XRpt7sokj1u": { + "id": "U-iS9P7j9_XRpt7sokj1u", + "name": "User_term", + "comment": "유저 약관", + "columnIds": [ + "xsiBCEQ2379F08SJM44Q2", + "oO6A3-YfUIYuwwbbHAwak" + ], + "seqColumnIds": [ + "xsiBCEQ2379F08SJM44Q2", + "DyOGo0HbdYNLl3F6fFJoV", + "uN4FKxyEb5gnf7VCsybG5", + "mxT0CemzkBll17N1CaQca", + "ouZqKosGANQxQuTaKY53B", + "oO6A3-YfUIYuwwbbHAwak" + ], + "ui": { + "x": 243.8593, + "y": 907.7111, + "zIndex": 534, + "widthName": 61, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758371793459, + "createAt": 1758293071658 + } + }, + "WzdtVxFyk4teMt3xZ8E-8": { + "id": "WzdtVxFyk4teMt3xZ8E-8", + "name": "Term", + "comment": "약관", + "columnIds": [ + "aDfTa3M4EJInboYW1AwJY", + "CAHkq77oQC59cHUkF9lfd" + ], + "seqColumnIds": [ + "JOnYVd6w4ZQXXijAEVaCG", + "aDfTa3M4EJInboYW1AwJY", + "CAHkq77oQC59cHUkF9lfd", + "s02QSeo8dSiozImiCBNFi", + "qN1PeVGlmvL6ncOuxtWr5" + ], + "ui": { + "x": 264.2814, + "y": 1253.7228, + "zIndex": 573, + "widthName": 60, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758371797226, + "createAt": 1758293158363 + } + }, + "1m_s3Ee0XEsle86A1W9bt": { + "id": "1m_s3Ee0XEsle86A1W9bt", + "name": "Review", + "comment": "", + "columnIds": [ + "EInU_RFu6bLHrzU6Q0B7n", + "55SgG8fQHW7ou5JDkXvKA", + "0zdmPP4N-6oeuWmSY2VKl", + "k7258dBY3kP6fzWqjW50q", + "dIZqWQhwiiNrzz92BX0G8", + "miNr6v2QE9PGLzoUleK6j" + ], + "seqColumnIds": [ + "ubc2_bhpYhqglGT5scNC3", + "EInU_RFu6bLHrzU6Q0B7n", + "55SgG8fQHW7ou5JDkXvKA", + "0zdmPP4N-6oeuWmSY2VKl", + "k7258dBY3kP6fzWqjW50q", + "dIZqWQhwiiNrzz92BX0G8", + "miNr6v2QE9PGLzoUleK6j", + "ui_LT2XpbGmhIg5fAS2Pi", + "D8BdbHLmKJm3uyowygI7N" + ], + "ui": { + "x": 1190.2824, + "y": 991.2705, + "zIndex": 665, + "widthName": 60, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758453111994, + "createAt": 1758293542228 + } + }, + "QF-n1pnH466PZnRVifDEq": { + "id": "QF-n1pnH466PZnRVifDEq", + "name": "User_food", + "comment": "", + "columnIds": [ + "ypBgbxrNHcFXsICZQcZ2H", + "e1w70_JR6SjRa9NgGo_A5", + "-EseBZUybBvjTNt06vdVn" + ], + "seqColumnIds": [ + "ypBgbxrNHcFXsICZQcZ2H", + "e1w70_JR6SjRa9NgGo_A5", + "dXSf5AH3ZE3-iEAjP4chh", + "-EseBZUybBvjTNt06vdVn" + ], + "ui": { + "x": 715.3327, + "y": 1248.6227, + "zIndex": 735, + "widthName": 61, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758371798997, + "createAt": 1758370772406 + } + }, + "-XsTDrkVEFThAtw5o3ffB": { + "id": "-XsTDrkVEFThAtw5o3ffB", + "name": "Food", + "comment": "", + "columnIds": [ + "_7FVj3JXN-FWncfuCO9fc", + "6lcMP4yv3KRQvHJT-VnXw" + ], + "seqColumnIds": [ + "_7FVj3JXN-FWncfuCO9fc", + "6lcMP4yv3KRQvHJT-VnXw", + "6qUzoeD5b_nQwCop5-hwf" + ], + "ui": { + "x": 682.8064, + "y": 1524.454, + "zIndex": 765, + "widthName": 60, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758370916296, + "createAt": 1758370851007 + } + }, + "66s2GuXAH4IsvhVcW9jiZ": { + "id": "66s2GuXAH4IsvhVcW9jiZ", + "name": "Food", + "comment": "", + "columnIds": [ + "pDRsYIOgYuYMV6I6tKbxF", + "fsqZCVY3nKxoVoEII8SK-" + ], + "seqColumnIds": [ + "pDRsYIOgYuYMV6I6tKbxF", + "tkg6jpNA4gsXXB_wFOmZI", + "fsqZCVY3nKxoVoEII8SK-" + ], + "ui": { + "x": 652.1287, + "y": 1461.6571, + "zIndex": 777, + "widthName": 60, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758371805367, + "createAt": 1758370922625 + } + }, + "uc2j1aS_eaeKNmWqHIhjm": { + "id": "uc2j1aS_eaeKNmWqHIhjm", + "name": "Review_photo", + "comment": "", + "columnIds": [ + "1ULvVjxodU2ux6IItl1wu", + "yWEtyzLaYRh-GxP2rBAbN", + "UAN06zaHoneXEx6Zdkeim" + ], + "seqColumnIds": [ + "1ULvVjxodU2ux6IItl1wu", + "yWEtyzLaYRh-GxP2rBAbN", + "UAN06zaHoneXEx6Zdkeim" + ], + "ui": { + "x": 1167.0787, + "y": 1326.5081, + "zIndex": 821, + "widthName": 81, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758371521008, + "createAt": 1758371002822 + } + }, + "DCLfTq9CxYAqBLL9O5uV-": { + "id": "DCLfTq9CxYAqBLL9O5uV-", + "name": "Review_reply", + "comment": "", + "columnIds": [ + "rqOwtDSa3ID9yipZKxdHy", + "sgfvuuZDNafwtoRn92ETX", + "EvmR_T3qUbZVAAWd_4fc-" + ], + "seqColumnIds": [ + "rqOwtDSa3ID9yipZKxdHy", + "sgfvuuZDNafwtoRn92ETX", + "EvmR_T3qUbZVAAWd_4fc-" + ], + "ui": { + "x": 1195.2408, + "y": 801.8977, + "zIndex": 869, + "widthName": 76, + "widthComment": 60, + "color": "" + }, + "meta": { + "updateAt": 1758452986555, + "createAt": 1758371143408 + } + } + }, + "tableColumnEntities": { + "FdInoxrEYMeqkCxyYQlEd": { + "id": "FdInoxrEYMeqkCxyYQlEd", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "user_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 2, + "ui": { + "keys": 1, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267191583, + "createAt": 1758265422086 + } + }, + "PbYSFy11QfczYemBl6sN8": { + "id": "PbYSFy11QfczYemBl6sN8", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "email", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267190704, + "createAt": 1758265422908 + } + }, + "j6FYMzLSV8ObnYo640OZW": { + "id": "j6FYMzLSV8ObnYo640OZW", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "name", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267166778, + "createAt": 1758265423283 + } + }, + "IyuLsAKxYBgglcCueMciJ": { + "id": "IyuLsAKxYBgglcCueMciJ", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "password", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267156685, + "createAt": 1758265423480 + } + }, + "aRwenG0xV5S3tVe_HxfGr": { + "id": "aRwenG0xV5S3tVe_HxfGr", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "point", + "comment": "", + "dataType": "INT", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267178236, + "createAt": 1758267092940 + } + }, + "2F4WIGFoal0Pfq5aKWJGR": { + "id": "2F4WIGFoal0Pfq5aKWJGR", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "creater_at", + "comment": "", + "dataType": "DATETIME", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 61, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267184778, + "createAt": 1758267093429 + } + }, + "EMxDdIiEeIocCGxgzqdY2": { + "id": "EMxDdIiEeIocCGxgzqdY2", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "updated_at", + "comment": "", + "dataType": "DATETIME", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 67, + "widthComment": 60, + "widthDataType": 61, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267186531, + "createAt": 1758267116062 + } + }, + "qwK66PRnyh6wZ7ebcTFIa": { + "id": "qwK66PRnyh6wZ7ebcTFIa", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267199296, + "createAt": 1758267199296 + } + }, + "NG68JYiPiJ-OOvG6HiKys": { + "id": "NG68JYiPiJ-OOvG6HiKys", + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "name": "mission_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 62, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292339893, + "createAt": 1758267269917 + } + }, + "x6gCvhNKdcN5NiRG-o2V1": { + "id": "x6gCvhNKdcN5NiRG-o2V1", + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "name": "title", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267717899, + "createAt": 1758267270691 + } + }, + "wF8OtNJBqHscI54r3JBWY": { + "id": "wF8OtNJBqHscI54r3JBWY", + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "name": "description", + "comment": "", + "dataType": "TEXT", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 65, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267709501, + "createAt": 1758267270911 + } + }, + "JGl101X01OJCUEt54mALi": { + "id": "JGl101X01OJCUEt54mALi", + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "name": "point", + "comment": "", + "dataType": "INT", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267705329, + "createAt": 1758267271091 + } + }, + "VwpFfMO3n1vJKpvDTSr3C": { + "id": "VwpFfMO3n1vJKpvDTSr3C", + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "name": "created_at", + "comment": "", + "dataType": "DATETIME", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 63, + "widthComment": 60, + "widthDataType": 61, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267697531, + "createAt": 1758267666779 + } + }, + "iOfII2VWsbj9mzzIOT53n": { + "id": "iOfII2VWsbj9mzzIOT53n", + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "name": "updated_at", + "comment": "", + "dataType": "DATETIME", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 67, + "widthComment": 60, + "widthDataType": 61, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758290512081, + "createAt": 1758267667303 + } + }, + "unGW2Vhu7oVMAbbyb_uU8": { + "id": "unGW2Vhu7oVMAbbyb_uU8", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "mission_id", + "comment": "", + "dataType": "", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 62, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267838696, + "createAt": 1758267838695 + } + }, + "P9cavuKJGE8NxA5pnr2w_": { + "id": "P9cavuKJGE8NxA5pnr2w_", + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "name": "user_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267887525, + "createAt": 1758267887525 + } + }, + "IPxLAdyOC8VYOSQBns0-W": { + "id": "IPxLAdyOC8VYOSQBns0-W", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "mission_id", + "comment": "", + "dataType": "", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 62, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758267899656, + "createAt": 1758267899656 + } + }, + "QJfGm1SMwEAxzNijipiM4": { + "id": "QJfGm1SMwEAxzNijipiM4", + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "name": "is_complete", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 70, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758290045198, + "createAt": 1758289793648 + } + }, + "7CiWEnTk56G5_bVXZb7B1": { + "id": "7CiWEnTk56G5_bVXZb7B1", + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "name": "description", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 65, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758289885652, + "createAt": 1758289793848 + } + }, + "O4m50Mtp1WSycEW6FyxTF": { + "id": "O4m50Mtp1WSycEW6FyxTF", + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758289794072, + "createAt": 1758289794072 + } + }, + "egLozO6_0r3FSIp9c5Wpn": { + "id": "egLozO6_0r3FSIp9c5Wpn", + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758289794285, + "createAt": 1758289794285 + } + }, + "k-eAvJsD6k9GBQMdmy37y": { + "id": "k-eAvJsD6k9GBQMdmy37y", + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758289794472, + "createAt": 1758289794472 + } + }, + "wyBJqunyME-zl1-De524y": { + "id": "wyBJqunyME-zl1-De524y", + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "name": "user_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758290518710, + "createAt": 1758290122020 + } + }, + "o3xi1phrDUYwXoYMLJvNP": { + "id": "o3xi1phrDUYwXoYMLJvNP", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758290123213, + "createAt": 1758290123213 + } + }, + "87sEqz5-srk0VbG4yiWb2": { + "id": "87sEqz5-srk0VbG4yiWb2", + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758290495131, + "createAt": 1758290132755 + } + }, + "o8VGEZ3v_LBPKvH8ZdawX": { + "id": "o8VGEZ3v_LBPKvH8ZdawX", + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "name": "mission_id", + "comment": "", + "dataType": "", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 62, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758290506316, + "createAt": 1758290506316 + } + }, + "Dt2MU1hvPB0ihSmrydMny": { + "id": "Dt2MU1hvPB0ihSmrydMny", + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "name": "mission_id", + "comment": "", + "dataType": "", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 62, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758290515492, + "createAt": 1758290515492 + } + }, + "fyCBGRc-o-aQC-EQBLTv3": { + "id": "fyCBGRc-o-aQC-EQBLTv3", + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758290535920, + "createAt": 1758290535919 + } + }, + "QbmabyqvWYXUzYuw76G_K": { + "id": "QbmabyqvWYXUzYuw76G_K", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758290536668, + "createAt": 1758290536668 + } + }, + "aVEC_JkxE3fKxtkaAGdo_": { + "id": "aVEC_JkxE3fKxtkaAGdo_", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758290552767, + "createAt": 1758290552767 + } + }, + "LYVABXr59kbCKrzUnqLHM": { + "id": "LYVABXr59kbCKrzUnqLHM", + "tableId": "EnyjPta3Re1to-0Ow_c0k", + "name": "is_complete", + "comment": "", + "dataType": "BOOLEAN", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 70, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292378420, + "createAt": 1758292176706 + } + }, + "BTWnyvg3l8OqAD1jo6ns0": { + "id": "BTWnyvg3l8OqAD1jo6ns0", + "tableId": "EnyjPta3Re1to-0Ow_c0k", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292177058, + "createAt": 1758292177058 + } + }, + "StKAxk-_jDp-US4C117il": { + "id": "StKAxk-_jDp-US4C117il", + "tableId": "EnyjPta3Re1to-0Ow_c0k", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292177231, + "createAt": 1758292177231 + } + }, + "dQFMxc6o44lnTzRBkWRX1": { + "id": "dQFMxc6o44lnTzRBkWRX1", + "tableId": "EnyjPta3Re1to-0Ow_c0k", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292191903, + "createAt": 1758292191903 + } + }, + "Yymdw8aFEqAAoh_FDoQnk": { + "id": "Yymdw8aFEqAAoh_FDoQnk", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292193405, + "createAt": 1758292193405 + } + }, + "0vodZWX_87XT9VbutIozY": { + "id": "0vodZWX_87XT9VbutIozY", + "tableId": "EnyjPta3Re1to-0Ow_c0k", + "name": "user_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 2, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292288369, + "createAt": 1758292288369 + } + }, + "Inuqs8_WWLi2BSn2yGcR8": { + "id": "Inuqs8_WWLi2BSn2yGcR8", + "tableId": "EnyjPta3Re1to-0Ow_c0k", + "name": "mission_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 2, + "widthName": 62, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292339893, + "createAt": 1758292325129 + } + }, + "0W8hNlGVp449tH6a85DH8": { + "id": "0W8hNlGVp449tH6a85DH8", + "tableId": "EnyjPta3Re1to-0Ow_c0k", + "name": "user_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292468361, + "createAt": 1758292468361 + } + }, + "bbfng-98l1GftLFmZFiJz": { + "id": "bbfng-98l1GftLFmZFiJz", + "tableId": "3sN0z9wOs5gRHtxPeLnNL", + "name": "store_name", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 69, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293038283, + "createAt": 1758292755585 + } + }, + "hIRya3_Znn8A6lvR0oQKD": { + "id": "hIRya3_Znn8A6lvR0oQKD", + "tableId": "3sN0z9wOs5gRHtxPeLnNL", + "name": "detail_address", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 85, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293045826, + "createAt": 1758292755934 + } + }, + "mMOcNIkrGjGfNRqn9YDzj": { + "id": "mMOcNIkrGjGfNRqn9YDzj", + "tableId": "3sN0z9wOs5gRHtxPeLnNL", + "name": "location_id", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 64, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292907905, + "createAt": 1758292756113 + } + }, + "nRMf6gQpPmzyCevOtE4-8": { + "id": "nRMf6gQpPmzyCevOtE4-8", + "tableId": "3sN0z9wOs5gRHtxPeLnNL", + "name": "mission_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 62, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292783115, + "createAt": 1758292783115 + } + }, + "AfeYLVYuvV8Wl821feyp7": { + "id": "AfeYLVYuvV8Wl821feyp7", + "tableId": "3sN0z9wOs5gRHtxPeLnNL", + "name": "store_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292870691, + "createAt": 1758292810918 + } + }, + "NvKLpAdjRzQgpUoTUmIou": { + "id": "NvKLpAdjRzQgpUoTUmIou", + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "name": "store_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 2, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292870691, + "createAt": 1758292812173 + } + }, + "iN3tJldWUJdh77mvXWKi9": { + "id": "iN3tJldWUJdh77mvXWKi9", + "tableId": "FbuZsipRsYu9OgkLtQvRH", + "name": "location_id", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 64, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758292942337, + "createAt": 1758292934368 + } + }, + "HdJ2IUlX-_VuFBeKr-A5F": { + "id": "HdJ2IUlX-_VuFBeKr-A5F", + "tableId": "FbuZsipRsYu9OgkLtQvRH", + "name": "location_name", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 85, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293052779, + "createAt": 1758292943766 + } + }, + "H4d48_Pb2KZNa64mBsDPG": { + "id": "H4d48_Pb2KZNa64mBsDPG", + "tableId": "FbuZsipRsYu9OgkLtQvRH", + "name": "location_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 2, + "ui": { + "keys": 1, + "widthName": 64, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293049076, + "createAt": 1758292964168 + } + }, + "7loiKwFcsBh-V-HXDU4qt": { + "id": "7loiKwFcsBh-V-HXDU4qt", + "tableId": "3sN0z9wOs5gRHtxPeLnNL", + "name": "location_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 0, + "ui": { + "keys": 2, + "widthName": 64, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293049076, + "createAt": 1758292964927 + } + }, + "DyOGo0HbdYNLl3F6fFJoV": { + "id": "DyOGo0HbdYNLl3F6fFJoV", + "tableId": "U-iS9P7j9_XRpt7sokj1u", + "name": "term_id", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293141187, + "createAt": 1758293101287 + } + }, + "xsiBCEQ2379F08SJM44Q2": { + "id": "xsiBCEQ2379F08SJM44Q2", + "tableId": "U-iS9P7j9_XRpt7sokj1u", + "name": "user_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 2, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293121419, + "createAt": 1758293121418 + } + }, + "JOnYVd6w4ZQXXijAEVaCG": { + "id": "JOnYVd6w4ZQXXijAEVaCG", + "tableId": "WzdtVxFyk4teMt3xZ8E-8", + "name": "Term_id", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293206382, + "createAt": 1758293202932 + } + }, + "CAHkq77oQC59cHUkF9lfd": { + "id": "CAHkq77oQC59cHUkF9lfd", + "tableId": "WzdtVxFyk4teMt3xZ8E-8", + "name": "term_name", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 66, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371540668, + "createAt": 1758293212321 + } + }, + "uN4FKxyEb5gnf7VCsybG5": { + "id": "uN4FKxyEb5gnf7VCsybG5", + "tableId": "U-iS9P7j9_XRpt7sokj1u", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293239893, + "createAt": 1758293239893 + } + }, + "s02QSeo8dSiozImiCBNFi": { + "id": "s02QSeo8dSiozImiCBNFi", + "tableId": "WzdtVxFyk4teMt3xZ8E-8", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293243929, + "createAt": 1758293243928 + } + }, + "mxT0CemzkBll17N1CaQca": { + "id": "mxT0CemzkBll17N1CaQca", + "tableId": "U-iS9P7j9_XRpt7sokj1u", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293302757, + "createAt": 1758293302757 + } + }, + "qN1PeVGlmvL6ncOuxtWr5": { + "id": "qN1PeVGlmvL6ncOuxtWr5", + "tableId": "WzdtVxFyk4teMt3xZ8E-8", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293304598, + "createAt": 1758293304598 + } + }, + "ouZqKosGANQxQuTaKY53B": { + "id": "ouZqKosGANQxQuTaKY53B", + "tableId": "U-iS9P7j9_XRpt7sokj1u", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293314990, + "createAt": 1758293314990 + } + }, + "aDfTa3M4EJInboYW1AwJY": { + "id": "aDfTa3M4EJInboYW1AwJY", + "tableId": "WzdtVxFyk4teMt3xZ8E-8", + "name": "term_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371537945, + "createAt": 1758293324974 + } + }, + "oO6A3-YfUIYuwwbbHAwak": { + "id": "oO6A3-YfUIYuwwbbHAwak", + "tableId": "U-iS9P7j9_XRpt7sokj1u", + "name": "term_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 2, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371537945, + "createAt": 1758293326187 + } + }, + "ubc2_bhpYhqglGT5scNC3": { + "id": "ubc2_bhpYhqglGT5scNC3", + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758293551653, + "createAt": 1758293551653 + } + }, + "k7258dBY3kP6fzWqjW50q": { + "id": "k7258dBY3kP6fzWqjW50q", + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "name": "content", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370733353, + "createAt": 1758293552010 + } + }, + "0zdmPP4N-6oeuWmSY2VKl": { + "id": "0zdmPP4N-6oeuWmSY2VKl", + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "name": "star", + "comment": "", + "dataType": "FLOAT", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370726631, + "createAt": 1758293552173 + } + }, + "EInU_RFu6bLHrzU6Q0B7n": { + "id": "EInU_RFu6bLHrzU6Q0B7n", + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "name": "user_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 2, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370383612, + "createAt": 1758370383611 + } + }, + "55SgG8fQHW7ou5JDkXvKA": { + "id": "55SgG8fQHW7ou5JDkXvKA", + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "name": "store_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 2, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370393338, + "createAt": 1758370393337 + } + }, + "dIZqWQhwiiNrzz92BX0G8": { + "id": "dIZqWQhwiiNrzz92BX0G8", + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "name": "created_at", + "comment": "", + "dataType": "DATETIME", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 63, + "widthComment": 60, + "widthDataType": 61, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370747887, + "createAt": 1758370449226 + } + }, + "Ot0SIC-v-b6RBocUOwIHc": { + "id": "Ot0SIC-v-b6RBocUOwIHc", + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "name": "verification", + "comment": "", + "dataType": "INT", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 65, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370692412, + "createAt": 1758370517201 + } + }, + "ypBgbxrNHcFXsICZQcZ2H": { + "id": "ypBgbxrNHcFXsICZQcZ2H", + "tableId": "QF-n1pnH466PZnRVifDEq", + "name": "user_food_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 76, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370848692, + "createAt": 1758370787809 + } + }, + "e1w70_JR6SjRa9NgGo_A5": { + "id": "e1w70_JR6SjRa9NgGo_A5", + "tableId": "QF-n1pnH466PZnRVifDEq", + "name": "user_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 2, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370801687, + "createAt": 1758370801686 + } + }, + "_7FVj3JXN-FWncfuCO9fc": { + "id": "_7FVj3JXN-FWncfuCO9fc", + "tableId": "-XsTDrkVEFThAtw5o3ffB", + "name": "food_id", + "comment": "", + "dataType": "", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370904863, + "createAt": 1758370862584 + } + }, + "6lcMP4yv3KRQvHJT-VnXw": { + "id": "6lcMP4yv3KRQvHJT-VnXw", + "tableId": "-XsTDrkVEFThAtw5o3ffB", + "name": "user_food_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 76, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370879876, + "createAt": 1758370879876 + } + }, + "6qUzoeD5b_nQwCop5-hwf": { + "id": "6qUzoeD5b_nQwCop5-hwf", + "tableId": "-XsTDrkVEFThAtw5o3ffB", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370901742, + "createAt": 1758370901742 + } + }, + "dXSf5AH3ZE3-iEAjP4chh": { + "id": "dXSf5AH3ZE3-iEAjP4chh", + "tableId": "QF-n1pnH466PZnRVifDEq", + "name": "food_id", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370930728, + "createAt": 1758370927670 + } + }, + "tkg6jpNA4gsXXB_wFOmZI": { + "id": "tkg6jpNA4gsXXB_wFOmZI", + "tableId": "66s2GuXAH4IsvhVcW9jiZ", + "name": "food_idc", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758370963412, + "createAt": 1758370937770 + } + }, + "pDRsYIOgYuYMV6I6tKbxF": { + "id": "pDRsYIOgYuYMV6I6tKbxF", + "tableId": "66s2GuXAH4IsvhVcW9jiZ", + "name": "food_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371526780, + "createAt": 1758370949384 + } + }, + "-EseBZUybBvjTNt06vdVn": { + "id": "-EseBZUybBvjTNt06vdVn", + "tableId": "QF-n1pnH466PZnRVifDEq", + "name": "food_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 0, + "ui": { + "keys": 2, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371526780, + "createAt": 1758370950298 + } + }, + "fsqZCVY3nKxoVoEII8SK-": { + "id": "fsqZCVY3nKxoVoEII8SK-", + "tableId": "66s2GuXAH4IsvhVcW9jiZ", + "name": "food_name", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 66, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371529490, + "createAt": 1758370971595 + } + }, + "1ULvVjxodU2ux6IItl1wu": { + "id": "1ULvVjxodU2ux6IItl1wu", + "tableId": "uc2j1aS_eaeKNmWqHIhjm", + "name": "review_photo_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 95, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371076136, + "createAt": 1758371013060 + } + }, + "yWEtyzLaYRh-GxP2rBAbN": { + "id": "yWEtyzLaYRh-GxP2rBAbN", + "tableId": "uc2j1aS_eaeKNmWqHIhjm", + "name": "review_photo_url", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 99, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371107362, + "createAt": 1758371013632 + } + }, + "miNr6v2QE9PGLzoUleK6j": { + "id": "miNr6v2QE9PGLzoUleK6j", + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "name": "review_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 10, + "ui": { + "keys": 1, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371048220, + "createAt": 1758371033308 + } + }, + "ui_LT2XpbGmhIg5fAS2Pi": { + "id": "ui_LT2XpbGmhIg5fAS2Pi", + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "name": "", + "comment": "", + "dataType": "", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371044596, + "createAt": 1758371044596 + } + }, + "UAN06zaHoneXEx6Zdkeim": { + "id": "UAN06zaHoneXEx6Zdkeim", + "tableId": "uc2j1aS_eaeKNmWqHIhjm", + "name": "review_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 2, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371059577, + "createAt": 1758371059577 + } + }, + "rqOwtDSa3ID9yipZKxdHy": { + "id": "rqOwtDSa3ID9yipZKxdHy", + "tableId": "DCLfTq9CxYAqBLL9O5uV-", + "name": "reply_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371211815, + "createAt": 1758371156738 + } + }, + "sgfvuuZDNafwtoRn92ETX": { + "id": "sgfvuuZDNafwtoRn92ETX", + "tableId": "DCLfTq9CxYAqBLL9O5uV-", + "name": "content", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371206948, + "createAt": 1758371157094 + } + }, + "D8BdbHLmKJm3uyowygI7N": { + "id": "D8BdbHLmKJm3uyowygI7N", + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "name": "review_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371167244, + "createAt": 1758371167244 + } + }, + "EvmR_T3qUbZVAAWd_4fc-": { + "id": "EvmR_T3qUbZVAAWd_4fc-", + "tableId": "DCLfTq9CxYAqBLL9O5uV-", + "name": "review_id", + "comment": "", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 2, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758371174249, + "createAt": 1758371174248 + } + }, + "c8eBgjgL943BPvdbqGlNx": { + "id": "c8eBgjgL943BPvdbqGlNx", + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "name": "phone_num", + "comment": "", + "dataType": "VARCHAR", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 69, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758454322947, + "createAt": 1758454292626 + } + }, + "1S2A9Kj1q0Zg1NjLnMd4x": { + "id": "1S2A9Kj1q0Zg1NjLnMd4x", + "tableId": "EnyjPta3Re1to-0Ow_c0k", + "name": "d_day", + "comment": "", + "dataType": "INT", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1758455579192, + "createAt": 1758455572842 + } + } + }, + "relationshipEntities": { + "EkbFWggaU1It65_7uNSjS": { + "id": "EkbFWggaU1It65_7uNSjS", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "columnIds": [ + "NG68JYiPiJ-OOvG6HiKys" + ], + "x": 1117.1233, + "y": 543.8356, + "direction": 1 + }, + "end": { + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "columnIds": [ + "unGW2Vhu7oVMAbbyb_uU8" + ], + "x": 642.4006999999999, + "y": 547.4966, + "direction": 2 + }, + "meta": { + "updateAt": 1758267838696, + "createAt": 1758267838696 + } + }, + "5iUsaVpjTW4MU4K6NMQMr": { + "id": "5iUsaVpjTW4MU4K6NMQMr", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "columnIds": [ + "FdInoxrEYMeqkCxyYQlEd" + ], + "x": 642.4006999999999, + "y": 535.4966, + "direction": 2 + }, + "end": { + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "columnIds": [ + "P9cavuKJGE8NxA5pnr2w_" + ], + "x": 1117.1233, + "y": 555.8356, + "direction": 1 + }, + "meta": { + "updateAt": 1758267887526, + "createAt": 1758267887526 + } + }, + "rGsXeC_iDXqZ4y1hQ9xhm": { + "id": "rGsXeC_iDXqZ4y1hQ9xhm", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "columnIds": [ + "NG68JYiPiJ-OOvG6HiKys" + ], + "x": 1117.1233, + "y": 611.8356, + "direction": 1 + }, + "end": { + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "columnIds": [ + "IPxLAdyOC8VYOSQBns0-W" + ], + "x": 642.4006999999999, + "y": 609.4966, + "direction": 2 + }, + "meta": { + "updateAt": 1758267899657, + "createAt": 1758267899657 + } + }, + "_AWjE6cS9dAz6qVah7-UZ": { + "id": "_AWjE6cS9dAz6qVah7-UZ", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "columnIds": [ + "wyBJqunyME-zl1-De524y" + ], + "x": 807.5343, + "y": 457.1509, + "direction": 1 + }, + "end": { + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "columnIds": [ + "o3xi1phrDUYwXoYMLJvNP" + ], + "x": 588.9761, + "y": 444.7569, + "direction": 2 + }, + "meta": { + "updateAt": 1758290123214, + "createAt": 1758290123214 + } + }, + "Jq2X7Q5CzYRNyKOzHIcs6": { + "id": "Jq2X7Q5CzYRNyKOzHIcs6", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "columnIds": [ + "wyBJqunyME-zl1-De524y" + ], + "x": 1182.5343, + "y": 446.5208, + "direction": 2 + }, + "end": { + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "columnIds": [ + "87sEqz5-srk0VbG4yiWb2" + ], + "x": 1391.0959, + "y": 447.6165, + "direction": 1 + }, + "meta": { + "updateAt": 1758290132756, + "createAt": 1758290132756 + } + }, + "vc8VPwZFTZBBnV499eEyE": { + "id": "vc8VPwZFTZBBnV499eEyE", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "columnIds": [ + "fyCBGRc-o-aQC-EQBLTv3" + ], + "x": 807.5343, + "y": 469.1509, + "direction": 1 + }, + "end": { + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "columnIds": [ + "QbmabyqvWYXUzYuw76G_K" + ], + "x": 588.9761, + "y": 444.7569, + "direction": 2 + }, + "meta": { + "updateAt": 1758290536668, + "createAt": 1758290536668 + } + }, + "oPSgwDtJYxercMoHAYg1p": { + "id": "oPSgwDtJYxercMoHAYg1p", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "e6c3szi_ECXJt-WIBHtd_", + "columnIds": [ + "fyCBGRc-o-aQC-EQBLTv3" + ], + "x": 807.5343, + "y": 469.1509, + "direction": 1 + }, + "end": { + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "columnIds": [ + "aVEC_JkxE3fKxtkaAGdo_" + ], + "x": 588.9761, + "y": 444.7569, + "direction": 2 + }, + "meta": { + "updateAt": 1758290552767, + "createAt": 1758290552767 + } + }, + "Vd8Xywn-nyqjLc37CrASA": { + "id": "Vd8Xywn-nyqjLc37CrASA", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "EnyjPta3Re1to-0Ow_c0k", + "columnIds": [ + "dQFMxc6o44lnTzRBkWRX1" + ], + "x": 732.6244, + "y": 406.6435, + "direction": 1 + }, + "end": { + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "columnIds": [ + "Yymdw8aFEqAAoh_FDoQnk" + ], + "x": 588.9761, + "y": 444.7569, + "direction": 2 + }, + "meta": { + "updateAt": 1758292193405, + "createAt": 1758292193405 + } + }, + "x5KesGnxWH7BV5U7SRUKf": { + "id": "x5KesGnxWH7BV5U7SRUKf", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "columnIds": [ + "FdInoxrEYMeqkCxyYQlEd" + ], + "x": 880.198, + "y": 898.2007, + "direction": 4 + }, + "end": { + "tableId": "EnyjPta3Re1to-0Ow_c0k", + "columnIds": [ + "0vodZWX_87XT9VbutIozY" + ], + "x": 857.4466, + "y": 749.6242, + "direction": 8 + }, + "meta": { + "updateAt": 1758292288369, + "createAt": 1758292288369 + } + }, + "eQ0Udv6TLmj-vhXKBJS9z": { + "id": "eQ0Udv6TLmj-vhXKBJS9z", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "columnIds": [ + "NG68JYiPiJ-OOvG6HiKys" + ], + "x": 1651.263, + "y": 699.2659, + "direction": 1 + }, + "end": { + "tableId": "EnyjPta3Re1to-0Ow_c0k", + "columnIds": [ + "Inuqs8_WWLi2BSn2yGcR8" + ], + "x": 1044.9466, + "y": 673.6242, + "direction": 2 + }, + "meta": { + "updateAt": 1758292325130, + "createAt": 1758292325130 + } + }, + "c7zF524469Jx_P8stTYTY": { + "id": "c7zF524469Jx_P8stTYTY", + "identification": false, + "relationshipType": 8, + "startRelationshipType": 2, + "start": { + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "columnIds": [ + "FdInoxrEYMeqkCxyYQlEd" + ], + "x": 588.9761, + "y": 488.7569, + "direction": 2 + }, + "end": { + "tableId": "EnyjPta3Re1to-0Ow_c0k", + "columnIds": [ + "0W8hNlGVp449tH6a85DH8" + ], + "x": 777.8297, + "y": 480.2598, + "direction": 1 + }, + "meta": { + "updateAt": 1758292468361, + "createAt": 1758292468361 + } + }, + "ppOMDQJnZUglApRYtpBNt": { + "id": "ppOMDQJnZUglApRYtpBNt", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "columnIds": [ + "NG68JYiPiJ-OOvG6HiKys" + ], + "x": 1577.5959, + "y": 535.6165, + "direction": 8 + }, + "end": { + "tableId": "3sN0z9wOs5gRHtxPeLnNL", + "columnIds": [ + "nRMf6gQpPmzyCevOtE4-8" + ], + "x": 1575.0283, + "y": 632.0134, + "direction": 4 + }, + "meta": { + "updateAt": 1758292783115, + "createAt": 1758292783115 + } + }, + "QHb8FIR-OWcNh55-2nQS3": { + "id": "QHb8FIR-OWcNh55-2nQS3", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "3sN0z9wOs5gRHtxPeLnNL", + "columnIds": [ + "AfeYLVYuvV8Wl821feyp7" + ], + "x": 1847.6988, + "y": 969.3323, + "direction": 4 + }, + "end": { + "tableId": "cRAlxAB1DS5CVIqN0YxH_", + "columnIds": [ + "NvKLpAdjRzQgpUoTUmIou" + ], + "x": 1837.763, + "y": 823.2659, + "direction": 8 + }, + "meta": { + "updateAt": 1758292812174, + "createAt": 1758292812174 + } + }, + "MD92WiyC8by1qAm4I_XSo": { + "id": "MD92WiyC8by1qAm4I_XSo", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 1, + "start": { + "tableId": "FbuZsipRsYu9OgkLtQvRH", + "columnIds": [ + "H4d48_Pb2KZNa64mBsDPG" + ], + "x": 1881.6967, + "y": 1343.0536, + "direction": 4 + }, + "end": { + "tableId": "3sN0z9wOs5gRHtxPeLnNL", + "columnIds": [ + "7loiKwFcsBh-V-HXDU4qt" + ], + "x": 1847.6988, + "y": 1121.3323, + "direction": 8 + }, + "meta": { + "updateAt": 1758292964928, + "createAt": 1758292964928 + } + }, + "hlb49ERgeQ1Wz6x78DVes": { + "id": "hlb49ERgeQ1Wz6x78DVes", + "identification": false, + "relationshipType": 16, + "startRelationshipType": 2, + "start": { + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "columnIds": [ + "FdInoxrEYMeqkCxyYQlEd" + ], + "x": 692.698, + "y": 1022.2007, + "direction": 1 + }, + "end": { + "tableId": "U-iS9P7j9_XRpt7sokj1u", + "columnIds": [ + "xsiBCEQ2379F08SJM44Q2" + ], + "x": 608.8593, + "y": 959.7111, + "direction": 2 + }, + "meta": { + "updateAt": 1758293121419, + "createAt": 1758293121419 + } + }, + "WMXN_t4yhZ_plMFEz3Lii": { + "id": "WMXN_t4yhZ_plMFEz3Lii", + "identification": false, + "relationshipType": 16, + "startRelationshipType": 2, + "start": { + "tableId": "U-iS9P7j9_XRpt7sokj1u", + "columnIds": [ + "uN4FKxyEb5gnf7VCsybG5" + ], + "x": 403.048, + "y": 805.2189, + "direction": 8 + }, + "end": { + "tableId": "WzdtVxFyk4teMt3xZ8E-8", + "columnIds": [ + "s02QSeo8dSiozImiCBNFi" + ], + "x": 404.3084, + "y": 953.9311, + "direction": 4 + }, + "meta": { + "updateAt": 1758293243929, + "createAt": 1758293243929 + } + }, + "s5NbCdJYvnyHaAWaSh2oy": { + "id": "s5NbCdJYvnyHaAWaSh2oy", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "U-iS9P7j9_XRpt7sokj1u", + "columnIds": [ + "mxT0CemzkBll17N1CaQca" + ], + "x": 403.048, + "y": 805.2189, + "direction": 8 + }, + "end": { + "tableId": "WzdtVxFyk4teMt3xZ8E-8", + "columnIds": [ + "qN1PeVGlmvL6ncOuxtWr5" + ], + "x": 404.3084, + "y": 953.9311, + "direction": 4 + }, + "meta": { + "updateAt": 1758293304598, + "createAt": 1758293304598 + } + }, + "GOioAAFNsn_A5uVd9veiB": { + "id": "GOioAAFNsn_A5uVd9veiB", + "identification": false, + "relationshipType": 16, + "startRelationshipType": 2, + "start": { + "tableId": "WzdtVxFyk4teMt3xZ8E-8", + "columnIds": [ + "aDfTa3M4EJInboYW1AwJY" + ], + "x": 449.7814, + "y": 1253.7228, + "direction": 4 + }, + "end": { + "tableId": "U-iS9P7j9_XRpt7sokj1u", + "columnIds": [ + "oO6A3-YfUIYuwwbbHAwak" + ], + "x": 426.35929999999996, + "y": 1011.7111, + "direction": 8 + }, + "meta": { + "updateAt": 1758293326188, + "createAt": 1758293326188 + } + }, + "1bzWUSllbdQW-XkNzsFDL": { + "id": "1bzWUSllbdQW-XkNzsFDL", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "columnIds": [ + "FdInoxrEYMeqkCxyYQlEd" + ], + "x": 1067.6979999999999, + "y": 1022.2007, + "direction": 2 + }, + "end": { + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "columnIds": [ + "EInU_RFu6bLHrzU6Q0B7n" + ], + "x": 1190.2824, + "y": 1091.2705, + "direction": 1 + }, + "meta": { + "updateAt": 1758370383612, + "createAt": 1758370383612 + } + }, + "hMvmzUWSPDWpRGtzvjQ_H": { + "id": "hMvmzUWSPDWpRGtzvjQ_H", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "3sN0z9wOs5gRHtxPeLnNL", + "columnIds": [ + "AfeYLVYuvV8Wl821feyp7" + ], + "x": 1652.6988, + "y": 1045.3323, + "direction": 1 + }, + "end": { + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "columnIds": [ + "55SgG8fQHW7ou5JDkXvKA" + ], + "x": 1559.2824, + "y": 1091.2705, + "direction": 2 + }, + "meta": { + "updateAt": 1758370393338, + "createAt": 1758370393338 + } + }, + "MNEmKtrdfaxLY7ulw1tGy": { + "id": "MNEmKtrdfaxLY7ulw1tGy", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "SW3qSYcmcjF6fxRxL9C6W", + "columnIds": [ + "FdInoxrEYMeqkCxyYQlEd" + ], + "x": 880.198, + "y": 1146.2006999999999, + "direction": 8 + }, + "end": { + "tableId": "QF-n1pnH466PZnRVifDEq", + "columnIds": [ + "e1w70_JR6SjRa9NgGo_A5" + ], + "x": 905.8327, + "y": 1248.6227, + "direction": 4 + }, + "meta": { + "updateAt": 1758370801687, + "createAt": 1758370801687 + } + }, + "x5Z5XwztzLa-nZAhAScph": { + "id": "x5Z5XwztzLa-nZAhAScph", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "QF-n1pnH466PZnRVifDEq", + "columnIds": [ + "ypBgbxrNHcFXsICZQcZ2H" + ], + "x": 873.4383, + "y": 1407.5521, + "direction": 8 + }, + "end": { + "tableId": "-XsTDrkVEFThAtw5o3ffB", + "columnIds": [ + "6lcMP4yv3KRQvHJT-VnXw" + ], + "x": 873.3064, + "y": 1524.454, + "direction": 4 + }, + "meta": { + "updateAt": 1758370879876, + "createAt": 1758370879876 + } + }, + "dxZac9LiwDnVGUoVgGBK_": { + "id": "dxZac9LiwDnVGUoVgGBK_", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 1, + "start": { + "tableId": "66s2GuXAH4IsvhVcW9jiZ", + "columnIds": [ + "pDRsYIOgYuYMV6I6tKbxF" + ], + "x": 837.6287, + "y": 1461.6571, + "direction": 4 + }, + "end": { + "tableId": "QF-n1pnH466PZnRVifDEq", + "columnIds": [ + "-EseBZUybBvjTNt06vdVn" + ], + "x": 905.8327, + "y": 1376.6227, + "direction": 8 + }, + "meta": { + "updateAt": 1758370950298, + "createAt": 1758370950298 + } + }, + "t4n5Tkjog7EkRQY3WzvHA": { + "id": "t4n5Tkjog7EkRQY3WzvHA", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "columnIds": [ + "miNr6v2QE9PGLzoUleK6j" + ], + "x": 1374.7824, + "y": 1191.2705, + "direction": 8 + }, + "end": { + "tableId": "uc2j1aS_eaeKNmWqHIhjm", + "columnIds": [ + "UAN06zaHoneXEx6Zdkeim" + ], + "x": 1369.0787, + "y": 1326.5081, + "direction": 4 + }, + "meta": { + "updateAt": 1758371059577, + "createAt": 1758371059577 + } + }, + "mymht63SidIE5C-WzUI5A": { + "id": "mymht63SidIE5C-WzUI5A", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "columnIds": [ + "miNr6v2QE9PGLzoUleK6j" + ], + "x": 1539.2824, + "y": 991.2705, + "direction": 4 + }, + "end": { + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "columnIds": [ + "D8BdbHLmKJm3uyowygI7N" + ], + "x": 1559.2824, + "y": 1047.2705, + "direction": 2 + }, + "meta": { + "updateAt": 1758371167244, + "createAt": 1758371167244 + } + }, + "jkWOiJoVYIrCuKnZXEIEX": { + "id": "jkWOiJoVYIrCuKnZXEIEX", + "identification": false, + "relationshipType": 4, + "startRelationshipType": 2, + "start": { + "tableId": "1m_s3Ee0XEsle86A1W9bt", + "columnIds": [ + "miNr6v2QE9PGLzoUleK6j" + ], + "x": 1374.7824, + "y": 991.2705, + "direction": 4 + }, + "end": { + "tableId": "DCLfTq9CxYAqBLL9O5uV-", + "columnIds": [ + "EvmR_T3qUbZVAAWd_4fc-" + ], + "x": 1377.7408, + "y": 929.8977, + "direction": 8 + }, + "meta": { + "updateAt": 1758371174249, + "createAt": 1758371174249 + } + } + }, + "indexEntities": {}, + "indexColumnEntities": {}, + "memoEntities": {} + } +} \ No newline at end of file From b22bf2140afc197ad017b3dfd74ea5a69029a605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EA=B2=BD=EC=88=98?= Date: Thu, 16 Oct 2025 15:46:54 +0900 Subject: [PATCH 3/9] =?UTF-8?q?[week4/mission]=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.DS_Store" | Bin 0 -> 8196 bytes .../java/.DS_Store" | Bin 0 -> 6148 bytes .../java/com/.DS_Store" | Bin 0 -> 6148 bytes .../java/com/example/.DS_Store" | Bin 0 -> 6148 bytes .../java/com/example/umc9th/.DS_Store" | Bin 0 -> 6148 bytes .../example/umc9th/Umc9thApplication.java" | 15 +++++ .../domain/mission/entity/Mission.java" | 46 +++++++++++++++ .../umc9th/domain/review/entity/Review.java" | 54 ++++++++++++++++++ .../domain/review/entity/ReviewPhoto.java" | 27 +++++++++ .../domain/review/entity/ReviewReply.java" | 26 +++++++++ .../umc9th/domain/store/entity/Location.java" | 30 ++++++++++ .../umc9th/domain/store/entity/Store.java" | 46 +++++++++++++++ .../umc9th/domain/user/entity/Food.java" | 25 ++++++++ .../umc9th/domain/user/entity/Term.java" | 23 ++++++++ .../umc9th/domain/user/entity/User.java" | 47 +++++++++++++++ .../domain/user/entity/mapping/UserFood.java" | 27 +++++++++ .../user/entity/mapping/UserMission.java" | 38 ++++++++++++ .../domain/user/entity/mapping/UserTerm.java" | 30 ++++++++++ .../umc9th/domain/user/enums/Gender.java" | 5 ++ .../umc9th/domain/user/enums/TermName.java" | 5 ++ .../umc9th/global/entity/BaseEntity.java" | 26 +++++++++ 21 files changed, 470 insertions(+) create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/.DS_Store" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/.DS_Store" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/.DS_Store" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/.DS_Store" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/Umc9thApplication.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/mission/entity/Mission.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/review/entity/Review.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/review/entity/ReviewReply.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/store/entity/Location.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/store/entity/Store.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/Food.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/Term.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/User.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/enums/Gender.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/enums/TermName.java" create mode 100644 "4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/global/entity/BaseEntity.java" diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..3b1da23ba7f26da3139d90d04e633031bdf351d5 GIT binary patch literal 8196 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 userMissionList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/review/entity/Review.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/review/entity/Review.java" new file mode 100644 index 0000000..2dce1bf --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/review/entity/Review.java" @@ -0,0 +1,54 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review") +public class Review extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_id") + private Long id; + + @Column(nullable = false) + private Float star; + + @Column(columnDefinition = "TEXT") + private String content; + + // User와의 연관 관계 (N:1) - 연관 관계의 주인 + // Review 입장에서 User는 N:1 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // Store와의 연관 관계 (N:1) - 연관 관계의 주인 + // Review 입장에서 Store는 N:1 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; + + // ReviewPhoto와의 연관 관계 (1:N) + // Review 입장에서 ReviewPhoto는 1:N + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL) + @Builder.Default + private List reviewPhotoList = new ArrayList<>(); + + // ReviewReply와의 연관 관계 (1:N) + // Review 입장에서 ReviewReply는 1:N // 헷갈림 + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL) + @Builder.Default + private List reviewReplyList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" new file mode 100644 index 0000000..56310ba --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review_photo") +public class ReviewPhoto extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_photo_id") + private Long id; + + @Column(name = "review_photo_url", nullable = false) + private String reviewPhotoUrl; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + +} \ No newline at end of file diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/review/entity/ReviewReply.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/review/entity/ReviewReply.java" new file mode 100644 index 0000000..ccaa29e --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/review/entity/ReviewReply.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review_reply") +public class ReviewReply extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "reply_id") + private Long id; + + @Column(columnDefinition = "TEXT") + private String content; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; +} \ No newline at end of file diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/store/entity/Location.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/store/entity/Location.java" new file mode 100644 index 0000000..73384e1 --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/store/entity/Location.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.store.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "location") +public class Location extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "location_id") + private Long id; + + @Column(name = "location_name", nullable = false, length = 50) + private String name; + + // Store와의 연관 관계 (1:N) + @OneToMany(mappedBy = "location", cascade = CascadeType.ALL) + @Builder.Default + private List storeList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/store/entity/Store.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/store/entity/Store.java" new file mode 100644 index 0000000..99ad0b6 --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/store/entity/Store.java" @@ -0,0 +1,46 @@ +package com.example.umc9th.domain.store.entity; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "store") +public class Store extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "store_id") + private Long id; + + @Column(name = "store_name", nullable = false, length = 50) + private String name; + + @Column(name = "detailAddress", length = 100) + private String detailAddress; + + // Location과의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "location_id") + private Location location; + + // Review와의 연관 관계 (1:N) + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + @Builder.Default + private List reviewList = new ArrayList<>(); + + // Mission과의 연관 관계 (1:N) + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + @Builder.Default + private List missionList = new ArrayList<>(); + +} \ No newline at end of file diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/Food.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/Food.java" new file mode 100644 index 0000000..7dc8fc2 --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/Food.java" @@ -0,0 +1,25 @@ +package com.example.umc9th.domain.user.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Builder +@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED) +@AllArgsConstructor(access = lombok.AccessLevel.PRIVATE) +@Getter +@Table(name = "food") + +public class Food { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "food_id") + private Long id; + + @Column(nullable = false, length = 50) + private String foodName; +} \ No newline at end of file diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/Term.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/Term.java" new file mode 100644 index 0000000..03bf421 --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/Term.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.user.entity; + +import com.example.umc9th.domain.user.enums.TermName; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Table(name = "term") +public class Term { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "term_id") // DB 컬럼명 명시 + private Long id; + + @Column(name = "term_name", nullable = false) // ENUM 컬럼만 남김 + @Enumerated(EnumType.STRING) + private TermName name; +} diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/User.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/User.java" new file mode 100644 index 0000000..9fbbf0a --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/User.java" @@ -0,0 +1,47 @@ +package com.example.umc9th.domain.user.entity; + +import com.example.umc9th.domain.user.enums.Gender; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user") +public class User extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_id") + private Long id; + + @Column(nullable = false, length = 50) + private String name; + + @Enumerated(EnumType.STRING) + @Builder.Default + @Column(nullable = false) + private Gender gender = Gender.NONE; + + @Column(nullable = false, length = 50, unique = true) + private String email; + + @Column(nullable = false) + private String password; + + @Column(length = 20) + private String phoneNum; + + @Builder.Default + @Column(nullable = false) + private Integer point = 0; + + @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) + private List userFoodList = new ArrayList<>(); +} diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" new file mode 100644 index 0000000..fdb0822 --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.user.entity.Food; +import com.example.umc9th.domain.user.entity.User; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_food") +public class UserFood { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_food_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "food_id") + private Food food; +} diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" new file mode 100644 index 0000000..ba7da35 --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" @@ -0,0 +1,38 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_mission") +public class UserMission extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_mission_id") + private Long id; + + @Column(nullable = false) + private Boolean isComplete; + + @Column + private Integer dDay; + + // User와의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // Mission과의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "mission_id") + private Mission mission; + +} \ No newline at end of file diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" new file mode 100644 index 0000000..0e46a62 --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.user.entity.Term; +import com.example.umc9th.domain.user.entity.User; +import jakarta.persistence.*; + +import lombok.*; +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_term") +public class UserTerm { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_term_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "term_id") + private Term term; +} + + diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/enums/Gender.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/enums/Gender.java" new file mode 100644 index 0000000..e07fca7 --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/enums/Gender.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.user.enums; + +public enum Gender { + MALE, FEMALE, NONE +} diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/enums/TermName.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/enums/TermName.java" new file mode 100644 index 0000000..1473bd4 --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/domain/user/enums/TermName.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.user.enums; + +public enum TermName { + AGE, SERVICE, PRIVACY, LOCATION, MARKETING +} diff --git "a/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/global/entity/BaseEntity.java" "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/global/entity/BaseEntity.java" new file mode 100644 index 0000000..70f7459 --- /dev/null +++ "b/4\354\243\274\354\260\250\353\257\270\354\205\230/java/com/example/umc9th/global/entity/BaseEntity.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +@Getter +public abstract class BaseEntity { + + @CreatedDate + @Column(name = "created_at", nullable = false, updatable = false) + private LocalDateTime createdAt; + + @LastModifiedDate + @Column(name = "updated_at", nullable = false) + private LocalDateTime updatedAt; +} + From 357e9a38536cc52013c4e14e6924d2f028ab0eed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EA=B2=BD=EC=88=98?= Date: Mon, 3 Nov 2025 02:06:25 +0900 Subject: [PATCH 4/9] =?UTF-8?q?[week5/mission]=20JPQL=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission.md" | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 "5\354\243\274\354\260\250\353\257\270\354\205\230/mission.md" diff --git "a/5\354\243\274\354\260\250\353\257\270\354\205\230/mission.md" "b/5\354\243\274\354\260\250\353\257\270\354\205\230/mission.md" new file mode 100644 index 0000000..750fd92 --- /dev/null +++ "b/5\354\243\274\354\260\250\353\257\270\354\205\230/mission.md" @@ -0,0 +1,51 @@ +// 1번 +// JPA +public interface ReviewRepository extends JpaRepository { + List findReviewsByStoreId(Long storeId); +} + +// JPQL +public interface ReviewRepository extends JpaRepository { + @Query("SELECT r FROM Review r JOIN FETCH r.user WHERE r.store.id = :storeId") + List findReviewsByStoreId(@Param("storeId") Long storeId); +} + + +// 2번 +// JPA +public interface UserRepository extends JpaRepository { + Optional findById(Long userId); // Optinal은 NULL 방지 + + +// JPQL +@Query("SELECT u FROM User u WHERE u.id = :userId") +Optional findUserById(@Param("userId") Long userId); + + +// 3번 +public interface UserMissionRepository extends JpaRepository { + + @Query(""" + SELECT um FROM UserMission um + JOIN FETCH um.mission m + WHERE um.user.id = :userId + AND um.status IN ('in_progress', 'completed') + ORDER BY um.updatedAt DESC + """) + List findUserMissions(@Param("userId") Long userId, Pageable pageable); +} + +// 4번 +public interface UserMissionRepository extends JpaRepository { + + @Query(""" + SELECT um + FROM UserMission um + JOIN FETCH um.mission m + JOIN FETCH m.store s + JOIN FETCH s.location l + WHERE um.user.id = :userId + ORDER BY um.dDay ASC + """) + List findUserHome(@Param("userId") Long userId); +} From 3b02dd067681c35c4b5e5a4a09872fe5c6d3e1e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EA=B2=BD=EC=88=98?= Date: Tue, 11 Nov 2025 23:32:22 +0900 Subject: [PATCH 5/9] =?UTF-8?q?[week6/mission]=20=EB=A6=AC=EB=B7=B0=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.DS_Store" | Bin 0 -> 6148 bytes .../src/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/.DS_Store" | Bin 0 -> 8196 bytes .../src/main/java/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/java/com/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/java/com/example/.DS_Store" | Bin 0 -> 6148 bytes .../main/java/com/example/umc9th/.DS_Store" | Bin 0 -> 6148 bytes .../example/umc9th/Umc9thApplication.java" | 15 +++++ .../domain/mission/entity/Mission.java" | 46 +++++++++++++++ .../review/controller/ReviewController.java" | 26 +++++++++ .../domain/review/dto/ReviewResponse.java" | 18 ++++++ .../umc9th/domain/review/entity/Review.java" | 54 ++++++++++++++++++ .../domain/review/entity/ReviewPhoto.java" | 27 +++++++++ .../domain/review/entity/ReviewReply.java" | 26 +++++++++ .../review/repository/ReviewRepository.java" | 7 +++ .../repository/ReviewRepositoryCustom.java" | 9 +++ .../repository/ReviewRepositoryImpl.java" | 38 ++++++++++++ .../domain/review/service/ReviewService.java" | 20 +++++++ .../umc9th/domain/store/entity/Location.java" | 30 ++++++++++ .../umc9th/domain/store/entity/Store.java" | 46 +++++++++++++++ .../umc9th/domain/user/entity/Food.java" | 29 ++++++++++ .../umc9th/domain/user/entity/Term.java" | 23 ++++++++ .../umc9th/domain/user/entity/User.java" | 48 ++++++++++++++++ .../domain/user/entity/mapping/UserFood.java" | 27 +++++++++ .../user/entity/mapping/UserMission.java" | 38 ++++++++++++ .../domain/user/entity/mapping/UserTerm.java" | 30 ++++++++++ .../umc9th/domain/user/enums/Gender.java" | 5 ++ .../umc9th/domain/user/enums/TermName.java" | 5 ++ .../umc9th/global/config/QuerydslConfig.java" | 15 +++++ .../umc9th/global/entity/BaseEntity.java" | 26 +++++++++ .../src/main/resources/application.yml" | 18 ++++++ .../umc9th/Umc9thApplicationTests.java" | 13 +++++ 32 files changed, 639 insertions(+) create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/.DS_Store" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/.DS_Store" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/.DS_Store" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/Umc9thApplication.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/entity/Mission.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/ReviewService.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" create mode 100644 "6\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..741587f9ec0b6c6906d15dc9f11670a7eed6d4de GIT binary patch literal 6148 zcmeHK%}T>S5Z<-brW7Fug&r5Y7EDE<#Y>3w1&ruHr6#6mFlI}VnnNk%tS{t~_&m<+ zZop#BB6bFLzxmzGevtiPjB#%f4H>f;V-_?-j!J`|yD_w7k`XzMkR3JN&VQ1nUj)S>_k!#OtxGABu-1d{DxQ^7 zd+$u9MG&X6Oclh@3{q~d<1~_`Cl_gyt6E9*E>8}$9Tc;gS3gS=nLdK2&aSfvi2-7O7$62Vn*nn! zSiQ}rfmTlp5CaVi;Qk<>A-V=DjcV(F4zJG`ZzH0Bj&BJ>VbC>LX@m#}*QJ2El$$38 z*X7_BCeJlkY1HM6tC?XOGjsiT;c9m93zg2etC4zQfEZY3pruV4&;N7yWf~v(>m_6n z1H`~TV}Q3O{=|btnX~oB^6;z`(C(q3U|xj^28qfQ3)CUcHCSoHQP8i- Q0qG*32%(M`_yq>O0Lo@bi~s-t literal 0 HcmV?d00001 diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..c9f03572beaf67d19e522877477257f3f979c386 GIT binary patch literal 6148 zcmeHK%}T>S5Z<-XrW7Fug&r5Y7EDE<#Y>3w1&ruHr6#0kFwK@GHHT8jSzpK}@p+ut z-H63{6|pn0`_1oe_JiyXV~qRrxW|~o7_*@va#Yp`y4QxbOfn+JF`_b`MyZUzelxMZ z4*2aBo3M~2Ec^QX(KJo+!gb&IR>RufY1&P@ZQlitvJ8r_nCE^tyFu$x$~3C=FuF>{ z<;dAPlUWfa*?6W3l6VX$x7SG)%hH$gEY4MJpaXWxZjGGIVsSD!>WW^kzwC-d-yL+t zao=4oTlW6J;pxTbDV=2UMH9+_Zza11Yj_3ab3M<&EK6nf0KPiE&LboShyh}N7}#6} z%$Z=fH&FXMvx8r#bjCf6)Dr{5z$ya`Z8~`VpTjS+_L09@ zLKZPV4E!?&xHSxhJ}k

    2c1XRUyC4-EzLDpWu~U%3Q;f%`~D1$A7Y4tbuzN+XVf SepL=g7Xd{Gb;Q6gFz^9^U`kH_ literal 0 HcmV?d00001 diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/.DS_Store" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..c73db4ff33939285d8c7ab6307332229af3d1851 GIT binary patch literal 8196 zcmeHMU2GLa6rS(4l-=d011+#zEZ$fVs0CVzP$i=y1%-j}m+8+#!3z#ZuU@qS2A6*L{uaY@5h2Q^^| zK(vzBVWB=39ipj-rXxBoDa}xUR3$1^5v3TA>cme)a_NYUODfeFqT~b7%7`))gsao@ zQ=vFRTGF_UJrH|frUyjsUdfI!gB6)EIe*WNIkq1(HGPXjMdhrj*~)BXj&h*?h*#gqbL+{*)QQ%n&5fxItxYFSs>-7Jb#1#d$DC2uJ1tE>^crCErkV8I zWP2RH*eSn9B>pVhbD?aHs?E`N_iKY0zOYD}?i&ki&-M3Md7o&8SNmjKZ_aafcm1k0>o>KfyLxs^%$r}$HLa$0sA&6k*0J^)e$H}D+dVv3vd!Sg z2zky8>_fJdSJee*9B_?MYl2tLpSO64t`8To_G1M*c%0WOO86{YuUoDt{Nw#5ZDgls z3QaSVPu1!AKEdtGThyAQARcq?3SArUX|LQ+)R42fLDL3~(GhZAm7KNfG=0!9vX;Y5 zRjRdY(Db3A^da9KFh`04YU4K+8yTkBMIe1B5pTv!($=7Q0g}Az$;Jo*6G?_@wj%=BpcMo=)PTK^fz=Awp+9bwsf)*y-Iz$ zK^{WrIki6B6rG8}ma?^U-Sx2j%wl8g6nmb%&d#v+*(dA^cAkCBF0$|059~+wGrPq8 zVwc$!b`=R!pb}N6!ChE|)o4HqTCoLf*otmEj2+mCM=*o~$lxFh97P@h3Mk@9JcDO( z8n56jyp4D8E)Fqb79Vg16uxBc& z5-VwZEwm{VqEB-P=X#-#?B1sJ+!mp5ajpRWf`v7;is&xwjoxh zpgY8Bc)HVYHbEh>G`UQxD+iYhsYxM5Ah(Vy6jmyqEu~Z1Jqm%G&yvFx+De7s&8y_F zA=yZ=rSL>J)Yc`NRSFwkF|kx%vbZJLkmMi`i)FP|ZHr0)#4E$Ot=ck;GYY40OYO-{ zg@S-9{~euY**W$lp>u-J`3w7%{lWf$0*=K<;XbS+Jl>Br*oaNoOsEu?+=d?XVmk&f zNVpuv2y!rS2!~-$!sa-h!YMqB7w{rp!pnFSui*^dz?+2D_wW(UPQzgDR1D(WWDFMj z^RDB$hlwXJtFk;rn9n>`pk7Y&Z~X<-@_$@F*RgDx?Ni-!i$)c4U0vk=-8cUJe~We( zFB^Lx_Q1{X04lrsyEDH0Vr f>4=U?N*pRT{X>8$FWdP3kMIA|%mnm~x&QwKEEa(0 literal 0 HcmV?d00001 diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..e75394bb032a7f3e1bc0dc623302290d5e4a9810 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8O({YS3Oz1(EtrZziU#y1Cs4q^2 z&U)Rk4i1mbE+;R^ER}DXP7Z7<*)v$dJ1Ax~ul^!UWcmc2D!a-eBnF59Vt^RfZU)S` zV0E{f23kEaKn&C{fct}hhUgkBHL9%xI=nt(yoHDYI=&?kg+bR~sSzR|T$cjsQf{6Y zT$h7im^{~DsZp0Ru4aaD%*@r}g{#@YFH}0?u14yK0b*d2fu=TXJpV7?m#KZ^ZAfRtt0>Hq1q^E*9E>MR&*I=m;M?t?T Q2c(ODB7{0(;1?M90yH~GdH?_b literal 0 HcmV?d00001 diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..0f3439b01922fe392d293f71afc805ed603d8992 GIT binary patch literal 6148 zcmeHK%}T>S5T0$TO({YT3Oz1(Em&=Z7B8XJ7cim+m70*C!8BX?V}(-4SzpK}@p+ut z-GJ2|Jc-yD*!^bbXE*af_6Gn&Zx$W`)BwQ2Mkq*GBV=CdD%fB`q30Mu0#PuZjDlp% zM1Rpl-(H3Yp23G9eENPBpyw?ZCGlk1Y`%*^v9z^acFIoGx%D2@+?)E-*`()>uW59l zR1)O6A6&-Kd{EmxRq51^(`c*{;xNLHo2xht)x4)>X*kijo^d!8r!uJ37mK5At07y* z?PWtQI?ZlFwmZ$`vf}LRADo;I9+P3JUJR82S=X{-F^5-FzEt((jnhP>_vp#9@@Ph8 zfEi#0n1Rh=z@7t6b+gLmYMB9M;0FxQ{vfdtx)w8odh5WBuFvEz5t5)zZwW$a(Y2Tv zL=TEEsfZ?3*e8ZC>1dZW&b62sH0dDp$~cc*Ie)wey*k>Z4hP{H!&&(?3{(OE08-C-l4xQrAO)K@M6IG}x`uARm& bNyj+XVrGzLA-hgTS5Z-NTn^J@v6nb3nS}@uQEnY&cFJMFuDz!1i2GeY5QhO+cob`o#5}(JJ z-OV8w@FrqsVE3DypWVy{*&oIjAFhHE#%#uz1r3p-QX*(BbyZ9-B3E;yZ04_%g&#@3 zWTL-l!f&s$6`QjsHeki?|L_-4n52&L$t%^`UcF&8td{lQ&E(okC+R8~PL_8#x|TBX zbA969gwyrdKDdx^Itk>JGC9h5>%uii3_Wc&>FJSUGOBnF59 zVt^RfJqFBKV6}FybgGybAO?P50QUz04be52X;fPWba;J6e+>}@bbL!73WKh}Oe1(e zxK0JssoXpZ6) zFH`!+FQ(9l7$64z83VjF@S5Z-NTn^J@v6nb3nS}@uQEnY&cFJMFuDm5WRgK4%jsXdfJ&iX<=iO=KA z?&c5-coVTRu=~x<&u->}>V;Vf`-UZsSq?*x@smEk*hf(mIUi`5yUd6 znCLH>@Y|a#WRlI9&&uEb5iH^;%^c^G*XoVEX3J_>9qYk+mTNEbvsF6wmv=b2mNE_s z-4AY}*?MXpT*xHzqhz*J2~jwMko(&x3FUe$S4o(vTu(c!w$+~6-Oc87)bEM@*Zrj%3(ee4!^d+7r@=X)TfpaDM1`BuxrBu_aw@hN0Jb}H)DPjqU0b+m{ zAO?1i0dp2uo!u*)DkcVqfgc#a{XsxObPeVj)z$$WUZ2t5Ktur@-x7$zpldMK2p$lw zQvr1K+e)#_juDx7gwBlW}pF;Hfpu7@_B|CjK~ zR6g>{DKsJmh=G5`0B=mZ$ry? userMissionList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" new file mode 100644 index 0000000..f8eba91 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.domain.review.controller; + +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.service.ReviewService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/reviews") +public class ReviewController { + + private final ReviewService reviewService; + + @GetMapping("/user/{userId}") + public List getReviewsByUser( // 별점 필터링 + @PathVariable Long userId, + @RequestParam(required = false) Long storeId, + @RequestParam(required = false) Integer minStar, + @RequestParam(required = false) Integer maxStar + ) { + return reviewService.getReviewsByUserWithFilters(userId, storeId, minStar, maxStar); + } +} diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" new file mode 100644 index 0000000..87cb90c --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" @@ -0,0 +1,18 @@ +package com.example.umc9th.domain.review.dto; + +import com.querydsl.core.annotations.QueryProjection; +import lombok.Getter; + +@Getter +public class ReviewResponse { + private Long reviewId; + private String content; + private Float star; + + @QueryProjection + public ReviewResponse(Long reviewId, String content, Float star) { + this.reviewId = reviewId; + this.content = content; + this.star = star; + } +} diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" new file mode 100644 index 0000000..d8df6ee --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" @@ -0,0 +1,54 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review") +public class Review extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_id") + private Long id; + + @Column(nullable = false) + private Float star; + + @Column(columnDefinition = "TEXT") + private String content; + + // User와의 연관 관계 (N:1) - 연관 관계의 주인 + // Review 입장에서 User는 N:1 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // Store와의 연관 관계 (N:1) - 연관 관계의 주인 + // Review 입장에서 Store는 N:1 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; + + // ReviewPhoto와의 연관 관계 (1:N) + // Review 입장에서 ReviewPhoto는 1:N + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @Builder.Default + private List reviewPhotoList = new ArrayList<>(); + + // ReviewReply와의 연관 관계 (1:N) + // Review 입장에서 ReviewReply는 1:N // 헷갈림 + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @Builder.Default + private List reviewReplyList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" new file mode 100644 index 0000000..56310ba --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review_photo") +public class ReviewPhoto extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_photo_id") + private Long id; + + @Column(name = "review_photo_url", nullable = false) + private String reviewPhotoUrl; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + +} \ No newline at end of file diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" new file mode 100644 index 0000000..ccaa29e --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review_reply") +public class ReviewReply extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "reply_id") + private Long id; + + @Column(columnDefinition = "TEXT") + private String content; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; +} \ No newline at end of file diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" new file mode 100644 index 0000000..2781dcc --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" @@ -0,0 +1,7 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.entity.Review; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { +} diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" new file mode 100644 index 0000000..227197c --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" @@ -0,0 +1,9 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.dto.ReviewResponse; + +import java.util.List; + +public interface ReviewRepositoryCustom { + List findReviewsByUserWithFilters(Long userId, Long storeId, Integer minStar, Integer maxStar); +} diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" new file mode 100644 index 0000000..e38d9fc --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" @@ -0,0 +1,38 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.dto.QReviewResponse; +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.entity.QReview; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class ReviewRepositoryImpl implements ReviewRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + @Override + public List findReviewsByUserWithFilters(Long userId, Long storeId, Integer minStar, Integer maxStar) { + QReview review = QReview.review; + + var query = queryFactory + .select(new QReviewResponse( + review.id, + review.content, + review.star + )) + .from(review) + .where(review.user.id.eq(userId)); + + if (storeId != null) query.where(review.store.id.eq(storeId)); + if (minStar != null && maxStar != null) query.where(review.star.between(minStar, maxStar)); + else if (minStar != null) query.where(review.star.goe(minStar)); + else if (maxStar != null) query.where(review.star.loe(maxStar)); + + return query.orderBy(review.id.desc()).fetch(); + } +} diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/ReviewService.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/ReviewService.java" new file mode 100644 index 0000000..f24cd1c --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/ReviewService.java" @@ -0,0 +1,20 @@ +package com.example.umc9th.domain.review.service; + +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.repository.ReviewRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class ReviewService { + + private final ReviewRepository reviewRepository; + + public List getReviewsByUserWithFilters(Long userId, Long storeId, Integer minStar, Integer maxStar) { + // Repository에서 바로 DTO Projection + return reviewRepository.findReviewsByUserWithFilters(userId, storeId, minStar, maxStar); + } +} diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" new file mode 100644 index 0000000..73384e1 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.store.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "location") +public class Location extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "location_id") + private Long id; + + @Column(name = "location_name", nullable = false, length = 50) + private String name; + + // Store와의 연관 관계 (1:N) + @OneToMany(mappedBy = "location", cascade = CascadeType.ALL) + @Builder.Default + private List storeList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" new file mode 100644 index 0000000..99ad0b6 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" @@ -0,0 +1,46 @@ +package com.example.umc9th.domain.store.entity; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "store") +public class Store extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "store_id") + private Long id; + + @Column(name = "store_name", nullable = false, length = 50) + private String name; + + @Column(name = "detailAddress", length = 100) + private String detailAddress; + + // Location과의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "location_id") + private Location location; + + // Review와의 연관 관계 (1:N) + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + @Builder.Default + private List reviewList = new ArrayList<>(); + + // Mission과의 연관 관계 (1:N) + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + @Builder.Default + private List missionList = new ArrayList<>(); + +} \ No newline at end of file diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" new file mode 100644 index 0000000..b5270f8 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" @@ -0,0 +1,29 @@ +package com.example.umc9th.domain.user.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Builder +@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED) +@AllArgsConstructor(access = lombok.AccessLevel.PRIVATE) +@Getter +@Table(name = "food") + +public class Food { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "food_id") + private Long id; + + @Column(nullable = false, length = 50) + private String foodName; + + @ManyToOne + @JoinColumn(name = "user_id") + private User user; +} \ No newline at end of file diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" new file mode 100644 index 0000000..03bf421 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.user.entity; + +import com.example.umc9th.domain.user.enums.TermName; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Table(name = "term") +public class Term { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "term_id") // DB 컬럼명 명시 + private Long id; + + @Column(name = "term_name", nullable = false) // ENUM 컬럼만 남김 + @Enumerated(EnumType.STRING) + private TermName name; +} diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" new file mode 100644 index 0000000..1564108 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" @@ -0,0 +1,48 @@ +package com.example.umc9th.domain.user.entity; + +import com.example.umc9th.domain.user.enums.Gender; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user") +public class User extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_id") + private Long id; + + @Column(nullable = false, length = 50) + private String name; + + @Enumerated(EnumType.STRING) + @Builder.Default + @Column(nullable = false) + private Gender gender = Gender.NONE; + + @Column(nullable = false, length = 50, unique = true) + private String email; + + @Column(nullable = false) + private String password; + + @Column(length = 20) + private String phoneNum; + + @Builder.Default + @Column(nullable = false) + private Integer point = 0; + + @Builder.Default + @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) + private List userFoodList = new ArrayList<>(); +} diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" new file mode 100644 index 0000000..fdb0822 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.user.entity.Food; +import com.example.umc9th.domain.user.entity.User; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_food") +public class UserFood { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_food_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "food_id") + private Food food; +} diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" new file mode 100644 index 0000000..ba7da35 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" @@ -0,0 +1,38 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_mission") +public class UserMission extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_mission_id") + private Long id; + + @Column(nullable = false) + private Boolean isComplete; + + @Column + private Integer dDay; + + // User와의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // Mission과의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "mission_id") + private Mission mission; + +} \ No newline at end of file diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" new file mode 100644 index 0000000..0e46a62 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.user.entity.Term; +import com.example.umc9th.domain.user.entity.User; +import jakarta.persistence.*; + +import lombok.*; +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_term") +public class UserTerm { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_term_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "term_id") + private Term term; +} + + diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" new file mode 100644 index 0000000..e07fca7 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.user.enums; + +public enum Gender { + MALE, FEMALE, NONE +} diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" new file mode 100644 index 0000000..1473bd4 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.user.enums; + +public enum TermName { + AGE, SERVICE, PRIVACY, LOCATION, MARKETING +} diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" new file mode 100644 index 0000000..0ba8875 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" @@ -0,0 +1,15 @@ +package com.example.umc9th.global.config; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class QuerydslConfig { + + @Bean + public JPAQueryFactory jpaQueryFactory(EntityManager em) { + return new JPAQueryFactory(em); + } +} diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" new file mode 100644 index 0000000..70f7459 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +@Getter +public abstract class BaseEntity { + + @CreatedDate + @Column(name = "created_at", nullable = false, updatable = false) + private LocalDateTime createdAt; + + @LastModifiedDate + @Column(name = "updated_at", nullable = false) + private LocalDateTime updatedAt; +} + diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" new file mode 100644 index 0000000..ec8fa85 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" @@ -0,0 +1,18 @@ +spring: + application: + name: umc9th + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${DB_URL} + username: ${DB_USER} + password: ${DB_PW} + + jpa: + database: mysql + show-sql: true + hibernate: + ddl-auto: update + properties: + hibernate: + format_sql: true diff --git "a/6\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" new file mode 100644 index 0000000..a96d2a7 --- /dev/null +++ "b/6\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" @@ -0,0 +1,13 @@ +package com.example.umc9th; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class Umc9thApplicationTests { + + @Test + void contextLoads() { + } + +} From 485b12d701f0e81138d7360de909a27ea2d28c3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EA=B2=BD=EC=88=98?= Date: Tue, 18 Nov 2025 02:57:04 +0900 Subject: [PATCH 6/9] =?UTF-8?q?[week7/mission]=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1=20?= =?UTF-8?q?=EB=B0=8F=20=EC=9D=91=EB=8B=B5=20API=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.DS_Store" | Bin 0 -> 6148 bytes .../src/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/.DS_Store" | Bin 0 -> 8196 bytes .../src/main/java/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/java/com/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/java/com/example/.DS_Store" | Bin 0 -> 6148 bytes .../main/java/com/example/umc9th/.DS_Store" | Bin 0 -> 6148 bytes .../example/umc9th/Umc9thApplication.java" | 15 +++ .../domain/mission/entity/Mission.java" | 46 +++++++++ .../review/controller/ReviewController.java" | 51 ++++++++++ .../review/converter/ReviewConverter.java" | 35 +++++++ .../domain/review/dto/ReviewResponse.java" | 19 ++++ .../domain/review/dto/req/ReviewReqDTO.java" | 4 + .../domain/review/dto/res/ReviewResDTO.java" | 37 ++++++++ .../umc9th/domain/review/entity/Review.java" | 54 +++++++++++ .../domain/review/entity/ReviewPhoto.java" | 27 ++++++ .../domain/review/entity/ReviewReply.java" | 26 ++++++ .../review/exception/ReviewException.java" | 11 +++ .../exception/code/ReviewErrorCode.java" | 23 +++++ .../review/repository/ReviewRepository.java" | 7 ++ .../repository/ReviewRepositoryCustom.java" | 10 ++ .../repository/ReviewRepositoryImpl.java" | 41 +++++++++ .../command/ReviewCommandService.java" | 9 ++ .../command/ReviewCommandServiceImpl.java" | 16 ++++ .../service/query/ReviewQueryService.java" | 18 ++++ .../query/ReviewQueryServiceImpl.java" | 87 ++++++++++++++++++ .../umc9th/domain/store/entity/Location.java" | 30 ++++++ .../umc9th/domain/store/entity/Store.java" | 46 +++++++++ .../test/controller/TestController.java" | 44 +++++++++ .../domain/test/converter/TestConverter.java" | 24 +++++ .../domain/test/dto/req/TestReqDTO.java" | 4 + .../domain/test/dto/res/TestResDTO.java" | 19 ++++ .../domain/test/exception/TestException.java" | 11 +++ .../test/exception/code/TestErrorCode.java" | 19 ++++ .../test/service/query/TestQueryService.java" | 5 + .../service/query/TestQueryServiceImpl.java" | 18 ++++ .../umc9th/domain/user/entity/Food.java" | 29 ++++++ .../umc9th/domain/user/entity/Term.java" | 23 +++++ .../umc9th/domain/user/entity/User.java" | 48 ++++++++++ .../domain/user/entity/mapping/UserFood.java" | 27 ++++++ .../user/entity/mapping/UserMission.java" | 38 ++++++++ .../domain/user/entity/mapping/UserTerm.java" | 30 ++++++ .../umc9th/domain/user/enums/Gender.java" | 5 + .../umc9th/domain/user/enums/TermName.java" | 5 + .../global/apiPayload/ApiResponse.java" | 37 ++++++++ .../apiPayload/code/BaseErrorCode.java" | 10 ++ .../apiPayload/code/BaseSuccessCode.java" | 9 ++ .../apiPayload/code/GeneralErrorCode.java" | 31 +++++++ .../apiPayload/code/GeneralSuccessCode.java" | 24 +++++ .../exception/GeneralException.java" | 14 +++ .../handler/GeneralExceptionAdvice.java" | 42 +++++++++ .../umc9th/global/config/QuerydslConfig.java" | 15 +++ .../umc9th/global/entity/BaseEntity.java" | 26 ++++++ .../src/main/resources/application.yml" | 18 ++++ .../umc9th/Umc9thApplicationTests.java" | 13 +++ 55 files changed, 1200 insertions(+) create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/.DS_Store" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/.DS_Store" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/.DS_Store" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/Umc9thApplication.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/entity/Mission.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" create mode 100644 "7\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..f8b7a9690b83718919d0e27f6f685de67d424a01 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8O({YS3Oz1(EtrCp7B3;z7cim+m718M!I&*cY7eE5v%Zi|;`2DO zy8(+ii`W_1{pNQ!`$6`HF~+?`G+@kTj9JhSIVv@R?%GhpBqMShBcF$f48i&c=O*^o z0l&S;a+a}&aQXfFlQ=IN=aV;@t)1Pr)wa6Uo&O}4ei0Ol+zYZBv@WGg!b%Uqt9Z7Y z+WTiRErK|mWvU>KW{`4w9jB38dUBCQxvKSb!0K3?soh(xhT~yh3 z!Rl@|4YYbbTmFH`%--z*`E z7$64z83VjE@h2WE%ABn~mWOApfOZcJ1@lT&KtSKP1b~72NKXZIT%ZnluEA0xj)Hzw Q4oDXPMF@4oz%MZH1>oFCjQ{`u literal 0 HcmV?d00001 diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..bf1533fda83f2590e59798c3022d849a002ae2d6 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O0O({YS3Oz1(EtrCp7B3;z7cim+m70*E!8BW%)E-J9XMG``#OHBl zcOw?-Rm9G~?l-@?*$=Wmj4|%d<1S+kW6Xwz$WhrK=-wErnPfzcV?>L58l^G<`_07u zI^efkY{Ej8u;|n%DbuLZ!{{m* zFGkM(naqkX$;LBPki=t1xxG%ZST1}y&*EIw20CCj?dHg7FPFVRuOqtMlT}A7`|hA4 zj{ELv)wB-|k4`T}Pw6C+FPcyed@I>ASivhOpX+%JW?3q;2k=$-RURQRKnxHA#K874 zV9o@)wY?P3%83DD;0Fe9e-O|RJ%go2wRJ#;*Jq4dh$x`rTLMuS^bD37Ap*j6DWERp z=83^|IrxRi^9+_6bvff|W*EoJTs>a6njQQ?r8Dknq@EZc2G$vi=y1%-j}m+8+#!3z#ZuU@qS2A6*L{uaY@5h2Q^^| zK(vzBVWB=39ipj-rXxBoDa}xUR3$1^5v3TA>cme)a_NYUODfeFqT~b7%7`))gsao@ zQ=vFRTGF_UJrH|frUyjsUdfI!gB6)EIe*WNIkq1(HGPXjMdhrj*~)BXj&h*?h*#gqbL+{*)QQ%n&5fxItxYFSs>-7Jb#1#d$DC2uJ1tE>^crCErkV8I zWP2RH*eSn9B>pVhbD?aHs?E`N_iKY0zOYD}?i&ki&-M3Md7o&8SNmjKZ_aafcm1k0>o>KfyLxs^%$r}$HLa$0sA&6k*0J^)e$H}D+dVv3vd!Sg z2zky8>_fJdSJee*9B_?MYl2tLpSO64t`8To_G1M*c%0WOO86{YuUoDt{Nw#5ZDgls z3QaSVPu1!AKEdtGThyAQARcq?3SArUX|LQ+)R42fLDL3~(GhZAm7KNfG=0!9vX;Y5 zRjRdY(Db3A^da9KFh`04YU4K+8yTkBMIe1B5pTv!($=7Q0g}Az$;Jo*6G?_@wj%=BpcMo=)PTK^fz=Awp+9bwsf)*y-Iz$ zK^{WrIki6B6rG8}ma?^U-Sx2j%wl8g6nmb%&d#v+*(dA^cAkCBF0$|059~+wGrPq8 zVwc$!b`=R!pb}N6!ChE|)o4HqTCoLf*otmEj2+mCM=*o~$lxFh97P@h3Mk@9JcDO( z8n56jyp4D8E)Fqb79Vg16uxBc& z5-VwZEwm{VqEB-P=X#-#?B1sJ+!mp5ajpRWf`v7;is&xwjoxh zpgY8Bc)HVYHbEh>G`UQxD+iYhsYxM5Ah(Vy6jmyqEu~Z1Jqm%G&yvFx+De7s&8y_F zA=yZ=rSL>J)Yc`NRSFwkF|kx%vbZJLkmMi`i)FP|ZHr0)#4E$Ot=ck;GYY40OYO-{ zg@S-9{~euY**W$lp>u-J`3w7%{lWf$0*=K<;XbS+Jl>Br*oaNoOsEu?+=d?XVmk&f zNVpuv2y!rS2!~-$!sa-h!YMqB7w{rp!pnFSui*^dz?+2D_wW(UPQzgDR1D(WWDFMj z^RDB$hlwXJtFk;rn9n>`pk7Y&Z~X<-@_$@F*RgDx?Ni-!i$)c4U0vk=-8cUJe~We( zFB^Lx_Q1{X04lrsyEDH0Vr f>4=U?N*pRT{X>8$FWdP3kMIA|%mnm~x&QwKEEa(0 literal 0 HcmV?d00001 diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..e75394bb032a7f3e1bc0dc623302290d5e4a9810 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8O({YS3Oz1(EtrZziU#y1Cs4q^2 z&U)Rk4i1mbE+;R^ER}DXP7Z7<*)v$dJ1Ax~ul^!UWcmc2D!a-eBnF59Vt^RfZU)S` zV0E{f23kEaKn&C{fct}hhUgkBHL9%xI=nt(yoHDYI=&?kg+bR~sSzR|T$cjsQf{6Y zT$h7im^{~DsZp0Ru4aaD%*@r}g{#@YFH}0?u14yK0b*d2fu=TXJpV7?m#KZ^ZAfRtt0>Hq1q^E*9E>MR&*I=m;M?t?T Q2c(ODB7{0(;1?M90yH~GdH?_b literal 0 HcmV?d00001 diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..0f3439b01922fe392d293f71afc805ed603d8992 GIT binary patch literal 6148 zcmeHK%}T>S5T0$TO({YT3Oz1(Em&=Z7B8XJ7cim+m70*C!8BX?V}(-4SzpK}@p+ut z-GJ2|Jc-yD*!^bbXE*af_6Gn&Zx$W`)BwQ2Mkq*GBV=CdD%fB`q30Mu0#PuZjDlp% zM1Rpl-(H3Yp23G9eENPBpyw?ZCGlk1Y`%*^v9z^acFIoGx%D2@+?)E-*`()>uW59l zR1)O6A6&-Kd{EmxRq51^(`c*{;xNLHo2xht)x4)>X*kijo^d!8r!uJ37mK5At07y* z?PWtQI?ZlFwmZ$`vf}LRADo;I9+P3JUJR82S=X{-F^5-FzEt((jnhP>_vp#9@@Ph8 zfEi#0n1Rh=z@7t6b+gLmYMB9M;0FxQ{vfdtx)w8odh5WBuFvEz5t5)zZwW$a(Y2Tv zL=TEEsfZ?3*e8ZC>1dZW&b62sH0dDp$~cc*Ie)wey*k>Z4hP{H!&&(?3{(OE08-C-l4xQrAO)K@M6IG}x`uARm& bNyj+XVrGzLA-hgTS5Z-NTn^J@v6nb3nS}@uQEnY&cFJMFuDz!1i2GeY5QhO+cob`o#5}(JJ z-OV8w@FrqsVE3DypWVy{*&oIjAFhHE#%#uz1r3p-QX*(BbyZ9-B3E;yZ04_%g&#@3 zWTL-l!f&s$6`QjsHeki?|L_-4n52&L$t%^`UcF&8td{lQ&E(okC+R8~PL_8#x|TBX zbA969gwyrdKDdx^Itk>JGC9h5>%uii3_Wc&>FJSUGOBnF59 zVt^RfJqFBKV6}FybgGybAO?P50QUz04be52X;fPWba;J6e+>}@bbL!73WKh}Oe1(e zxK0JssoXpZ6) zFH`!+FQ(9l7$64z83VjF@S5Z-NTn^J@v6nb3nS}@uQEnY&cFJMFuDm5WRgK4%jsXdfJ&iX<=iO=KA z?&c5-coVTRu=~x<&u->}>V;Vf`-UZsSq?*x@smEk*hf(mIUi`5yUd6 znCLH>@Y|a#WRlI9&&uEb5iH^;%^c^G*XoVEX3J_>9qYk+mTNEbvsF6wmv=b2mNE_s z-4AY}*?MXpT*xHzqhz*J2~jwMko(&x3FUe$S4o(vTu(c!w$+~6-Oc87)bEM@*Zrj%3(ee4!^d+7r@=X)TfpaDM1`BuxrBu_aw@hN0Jb}H)DPjqU0b+m{ zAO?1i0dp2uo!u*)DkcVqfgc#a{XsxObPeVj)z$$WUZ2t5Ktur@-x7$zpldMK2p$lw zQvr1K+e)#_juDx7gwBlW}pF;Hfpu7@_B|CjK~ zR6g>{DKsJmh=G5`0B=mZ$ry? userMissionList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" new file mode 100644 index 0000000..d7ac886 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" @@ -0,0 +1,51 @@ +package com.example.umc9th.domain.review.controller; + +import com.example.umc9th.domain.review.converter.ReviewConverter; +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.service.query.ReviewQueryService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/reviews") +public class ReviewController { + + private final ReviewQueryService reviewQueryService; + + /** + * 내가 작성한 리뷰 조회 API (필터링 포함) + *

    + * 사용 예시: + * - 전체 조회: GET /reviews/user/1 + * - 가게별: GET /reviews/user/1?storeId=5 + * - 별점 범위: GET /reviews/user/1?minStar=3&maxStar=5 + * - 조합: GET /reviews/user/1?storeId=5&minStar=4&maxStar=5 + */ + @GetMapping("/user/{userId}") + public ApiResponse getMyReviews( + @PathVariable Long userId, + @RequestParam(required = false) Long storeId, + @RequestParam(required = false) Integer minStar, + @RequestParam(required = false) Integer maxStar + ) { + // Service 호출 + List reviews = reviewQueryService.getReviewsByUserWithFilters( + userId, storeId, minStar, maxStar + ); + + // 응답 코드 정의 + GeneralSuccessCode code = GeneralSuccessCode.OK; + + // Converter를 통해 DTO 변환 후 응답 + return ApiResponse.onSuccess( + code, + ReviewConverter.toReviewListDTO(reviews) + ); + } +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" new file mode 100644 index 0000000..8d45bb8 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.domain.review.converter; + +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.dto.ReviewResponse; + +import java.util.List; +import java.util.stream.Collectors; + +public class ReviewConverter { + + /** + * QueryDSL 조회 결과 → 응답 DTO 변환 + */ + public static ReviewResDTO.ReviewListDTO toReviewListDTO(List reviews) { + List reviewDTOs = reviews.stream() + .map(ReviewConverter::toReviewDTO) + .collect(Collectors.toList()); + + return ReviewResDTO.ReviewListDTO.builder() + .reviews(reviewDTOs) + .totalCount(reviewDTOs.size()) + .build(); + } + + /** + * 개별 리뷰 변환 + */ + private static ReviewResDTO.ReviewDTO toReviewDTO(ReviewResponse review) { + return ReviewResDTO.ReviewDTO.builder() + .reviewId(review.getReviewId()) + .content(review.getContent()) + .star(review.getStar()) + .build(); + } +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" new file mode 100644 index 0000000..f25bf7d --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.review.dto; + +import com.querydsl.core.annotations.QueryProjection; +import lombok.Getter; + +@Getter +public class ReviewResponse { + private Long reviewId; + private String content; + private Integer star; + + @QueryProjection + public ReviewResponse(Long reviewId, String content, Integer star) { + this.reviewId = reviewId; + this.content = content; + this.star = star; + } +} + diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" new file mode 100644 index 0000000..5914f94 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" @@ -0,0 +1,4 @@ +package com.example.umc9th.domain.review.dto.req; + +public class ReviewReqDTO { +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" new file mode 100644 index 0000000..7d5765d --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" @@ -0,0 +1,37 @@ +package com.example.umc9th.domain.review.dto.res; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +public class ReviewResDTO { + + /** + * 리뷰 목록 응답 DTO + * result 안에 들어갈 데이터 + */ + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewListDTO { + private List reviews; + private Integer totalCount; + } + + /** + * 개별 리뷰 DTO + */ + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewDTO { + private Long reviewId; + private String content; + private Integer star; + } +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" new file mode 100644 index 0000000..9bc62ff --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" @@ -0,0 +1,54 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review") +public class Review extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_id") + private Long id; + + @Column(nullable = false) + private Integer star; + + @Column(columnDefinition = "TEXT") + private String content; + + // User와의 연관 관계 (N:1) - 연관 관계의 주인 + // Review 입장에서 User는 N:1 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // Store와의 연관 관계 (N:1) - 연관 관계의 주인 + // Review 입장에서 Store는 N:1 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; + + // ReviewPhoto와의 연관 관계 (1:N) + // Review 입장에서 ReviewPhoto는 1:N + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @Builder.Default + private List reviewPhotoList = new ArrayList<>(); + + // ReviewReply와의 연관 관계 (1:N) + // Review 입장에서 ReviewReply는 1:N // 헷갈림 + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @Builder.Default + private List reviewReplyList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" new file mode 100644 index 0000000..56310ba --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review_photo") +public class ReviewPhoto extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_photo_id") + private Long id; + + @Column(name = "review_photo_url", nullable = false) + private String reviewPhotoUrl; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" new file mode 100644 index 0000000..ccaa29e --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review_reply") +public class ReviewReply extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "reply_id") + private Long id; + + @Column(columnDefinition = "TEXT") + private String content; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" new file mode 100644 index 0000000..2ae42f6 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.review.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class ReviewException extends GeneralException { + + public ReviewException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" new file mode 100644 index 0000000..921f95a --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.review.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum ReviewErrorCode implements BaseErrorCode { + + // Review 관련 에러 + INVALID_USER_ID(HttpStatus.BAD_REQUEST, "REVIEW400_1", "유효하지 않은 사용자 ID입니다."), + INVALID_STAR_RANGE(HttpStatus.BAD_REQUEST, "REVIEW400_2", "별점은 1~5 사이여야 하며, 최소값이 최대값보다 클 수 없습니다."), + + REVIEW_NOT_FOUND(HttpStatus.NOT_FOUND, "REVIEW404_1", "리뷰를 찾을 수 없습니다."), + REVIEW_ACCESS_DENIED(HttpStatus.FORBIDDEN, "REVIEW403_1", "해당 리뷰에 접근할 권한이 없습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" new file mode 100644 index 0000000..2781dcc --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" @@ -0,0 +1,7 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.entity.Review; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" new file mode 100644 index 0000000..9989c1c --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.querydsl.core.types.Predicate; + +import java.util.List; + +public interface ReviewRepositoryCustom { + List searchReview(Predicate predicate); // predicate를 사용한 동적 쿼리 메서드 +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" new file mode 100644 index 0000000..ad1eef3 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" @@ -0,0 +1,41 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.dto.QReviewResponse; +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.entity.QReview; +import com.example.umc9th.domain.store.entity.QStore; +import com.querydsl.core.types.Predicate; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +@Transactional(readOnly = true) // 조회 작업이므로 readOnly +public class ReviewRepositoryImpl implements ReviewRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + @Override + public List searchReview(Predicate predicate) { // predicate를 사용한 동적 쿼리 메서드 + // Q 클래스 선언 + QReview review = QReview.review; + QStore store = QStore.store; + + return queryFactory + .select(new QReviewResponse( + review.id, + review.content, + review.star + )) + .from(review) + .leftJoin(review.store, store) // Store 정보가 필요하면 join + .where(predicate) // 동적으로 전달받은 조건 적용 + .orderBy(review.id.desc()) // 최신 리뷰가 먼저 오도록 정렬 + .fetch(); + } + +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" new file mode 100644 index 0000000..c2b8277 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" @@ -0,0 +1,9 @@ +package com.example.umc9th.domain.review.service.command; + +public interface ReviewCommandService { + + // 나중에 리뷰 작성, 수정, 삭제 메서드 추가 + // ex) Long createReview(ReviewReqDTO dto); + // void updateReview(Long reviewId, ReviewReqDTO dto); + // void deleteReview(Long reviewId); +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" new file mode 100644 index 0000000..b05640f --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" @@ -0,0 +1,16 @@ +package com.example.umc9th.domain.review.service.command; + +import com.example.umc9th.domain.review.repository.ReviewRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional // 쓰기 작업이므로 readOnly 없음 +public class ReviewCommandServiceImpl implements ReviewCommandService { + + private final ReviewRepository reviewRepository; + + // 나중에 구현 +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" new file mode 100644 index 0000000..9a477a9 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" @@ -0,0 +1,18 @@ +package com.example.umc9th.domain.review.service.query; + +import com.example.umc9th.domain.review.dto.ReviewResponse; + +import java.util.List; + +public interface ReviewQueryService { + + /** + * 사용자의 리뷰 조회 (필터링 포함) + */ + List getReviewsByUserWithFilters( + Long userId, + Long storeId, + Integer minStar, + Integer maxStar + ); +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" new file mode 100644 index 0000000..eefcec8 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" @@ -0,0 +1,87 @@ +package com.example.umc9th.domain.review.service.query; + +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.entity.QReview; +import com.example.umc9th.domain.review.exception.ReviewException; +import com.example.umc9th.domain.review.exception.code.ReviewErrorCode; +import com.example.umc9th.domain.review.repository.ReviewRepository; +import com.querydsl.core.BooleanBuilder; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) // 조회 작업이므로 readOnly +public class ReviewQueryServiceImpl implements ReviewQueryService { + + private final ReviewRepository reviewRepository; + + @Override + public List getReviewsByUserWithFilters( + Long userId, + Long storeId, + Integer minStar, + Integer maxStar + ) { + // 검증: 필수 파라미터 체크 + validateUserId(userId); + + // 검증: 별점 범위 체크 + validateStarRange(minStar, maxStar); + + // Q 클래스 선언 + QReview review = QReview.review; + + // BooleanBuilder로 동적 조건 생성 + BooleanBuilder builder = new BooleanBuilder(); + + // 필수 조건: 특정 사용자의 리뷰만 + builder.and(review.user.id.eq(userId)); + + // 선택 조건: 가게 필터링 + if (storeId != null) { + builder.and(review.store.id.eq(storeId)); + } + + // 선택 조건: 별점 필터링 + if (minStar != null && maxStar != null) { + builder.and(review.star.between(minStar.floatValue(), maxStar.floatValue())); + } else if (minStar != null) { + builder.and(review.star.goe(minStar.floatValue())); + } else if (maxStar != null) { + builder.and(review.star.loe(maxStar.floatValue())); + } + + // Repository 호출 & 결과 반환 + return reviewRepository.searchReview(builder); + } + + /** + * 사용자 ID 검증 + */ + private void validateUserId(Long userId) { + if (userId == null || userId <= 0) { + throw new ReviewException(ReviewErrorCode.INVALID_USER_ID); + } + } + + /** + * 별점 범위 검증 + */ + private void validateStarRange(Integer minStar, Integer maxStar) { + if (minStar != null && (minStar < 1 || minStar > 5)) { + throw new ReviewException(ReviewErrorCode.INVALID_STAR_RANGE); + } + + if (maxStar != null && (maxStar < 1 || maxStar > 5)) { + throw new ReviewException(ReviewErrorCode.INVALID_STAR_RANGE); + } + + if (minStar != null && maxStar != null && minStar > maxStar) { + throw new ReviewException(ReviewErrorCode.INVALID_STAR_RANGE); + } + } +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" new file mode 100644 index 0000000..73384e1 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.store.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "location") +public class Location extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "location_id") + private Long id; + + @Column(name = "location_name", nullable = false, length = 50) + private String name; + + // Store와의 연관 관계 (1:N) + @OneToMany(mappedBy = "location", cascade = CascadeType.ALL) + @Builder.Default + private List storeList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" new file mode 100644 index 0000000..99ad0b6 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" @@ -0,0 +1,46 @@ +package com.example.umc9th.domain.store.entity; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "store") +public class Store extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "store_id") + private Long id; + + @Column(name = "store_name", nullable = false, length = 50) + private String name; + + @Column(name = "detailAddress", length = 100) + private String detailAddress; + + // Location과의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "location_id") + private Location location; + + // Review와의 연관 관계 (1:N) + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + @Builder.Default + private List reviewList = new ArrayList<>(); + + // Mission과의 연관 관계 (1:N) + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + @Builder.Default + private List missionList = new ArrayList<>(); + +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" new file mode 100644 index 0000000..851510f --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" @@ -0,0 +1,44 @@ +package com.example.umc9th.domain.test.controller; + +import com.example.umc9th.domain.test.converter.TestConverter; +import com.example.umc9th.domain.test.dto.res.TestResDTO; +import com.example.umc9th.domain.test.service.query.TestQueryService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/temp") +public class TestController { + + private final TestQueryService testQueryService; + + @GetMapping("/test") + public ApiResponse test() { + // 응답 코드 정의 + GeneralSuccessCode code = GeneralSuccessCode.OK; + + return ApiResponse.onSuccess( + code, + TestConverter.toTestingDTO("This is Test!") + ); + } + + // 예외 상황 + @GetMapping("/exception") + public ApiResponse exception( + @RequestParam Long flag + ) { + + testQueryService.checkFlag(flag); + + // 응답 코드 정의 + GeneralSuccessCode code = GeneralSuccessCode.OK; + return ApiResponse.onSuccess(code, TestConverter.toExceptionDTO("This is Test!")); + } +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" new file mode 100644 index 0000000..af81183 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" @@ -0,0 +1,24 @@ +package com.example.umc9th.domain.test.converter; + +import com.example.umc9th.domain.test.dto.res.TestResDTO; + +public class TestConverter { + + // 객체 -> DTO + public static TestResDTO.Testing toTestingDTO( + String testing + ) { + return TestResDTO.Testing.builder() + .testString(testing) + .build(); + } + + // 객체 -> DTO + public static TestResDTO.Exception toExceptionDTO( + String testing + ){ + return TestResDTO.Exception.builder() + .testString(testing) + .build(); + } +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" new file mode 100644 index 0000000..405e3b9 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" @@ -0,0 +1,4 @@ +package com.example.umc9th.domain.test.dto.req; + +public class TestReqDTO { +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" new file mode 100644 index 0000000..9f13f52 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.test.dto.res; + +import lombok.Builder; +import lombok.Getter; + +public class TestResDTO { + + @Builder + @Getter + public static class Testing { + private String testString; + } + + @Builder + @Getter + public static class Exception { + private String testString; + } +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" new file mode 100644 index 0000000..c26ed05 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.test.exception; + +import com.example.umc9th.global.apiPayload.exception.GeneralException; +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; + +public class TestException extends GeneralException { + + public TestException(BaseErrorCode code) { + super(code); + } +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" new file mode 100644 index 0000000..7264f21 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.test.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum TestErrorCode implements BaseErrorCode { + + // For test + TEST_EXCEPTION(HttpStatus.BAD_REQUEST, "TEST400_1", "이거는 테스트"), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" new file mode 100644 index 0000000..a6419ab --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.test.service.query; + +public interface TestQueryService { + void checkFlag(Long flag); +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" new file mode 100644 index 0000000..1af8423 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" @@ -0,0 +1,18 @@ +package com.example.umc9th.domain.test.service.query; + +import com.example.umc9th.domain.test.exception.TestException; +import com.example.umc9th.domain.test.exception.code.TestErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class TestQueryServiceImpl implements TestQueryService { + + @Override + public void checkFlag(Long flag) { + if (flag == 1) { + throw new TestException(TestErrorCode.TEST_EXCEPTION); + } + } +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" new file mode 100644 index 0000000..b5270f8 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" @@ -0,0 +1,29 @@ +package com.example.umc9th.domain.user.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Builder +@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED) +@AllArgsConstructor(access = lombok.AccessLevel.PRIVATE) +@Getter +@Table(name = "food") + +public class Food { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "food_id") + private Long id; + + @Column(nullable = false, length = 50) + private String foodName; + + @ManyToOne + @JoinColumn(name = "user_id") + private User user; +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" new file mode 100644 index 0000000..03bf421 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.user.entity; + +import com.example.umc9th.domain.user.enums.TermName; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Table(name = "term") +public class Term { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "term_id") // DB 컬럼명 명시 + private Long id; + + @Column(name = "term_name", nullable = false) // ENUM 컬럼만 남김 + @Enumerated(EnumType.STRING) + private TermName name; +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" new file mode 100644 index 0000000..1564108 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" @@ -0,0 +1,48 @@ +package com.example.umc9th.domain.user.entity; + +import com.example.umc9th.domain.user.enums.Gender; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user") +public class User extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_id") + private Long id; + + @Column(nullable = false, length = 50) + private String name; + + @Enumerated(EnumType.STRING) + @Builder.Default + @Column(nullable = false) + private Gender gender = Gender.NONE; + + @Column(nullable = false, length = 50, unique = true) + private String email; + + @Column(nullable = false) + private String password; + + @Column(length = 20) + private String phoneNum; + + @Builder.Default + @Column(nullable = false) + private Integer point = 0; + + @Builder.Default + @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) + private List userFoodList = new ArrayList<>(); +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" new file mode 100644 index 0000000..fdb0822 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.user.entity.Food; +import com.example.umc9th.domain.user.entity.User; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_food") +public class UserFood { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_food_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "food_id") + private Food food; +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" new file mode 100644 index 0000000..ba7da35 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" @@ -0,0 +1,38 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_mission") +public class UserMission extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_mission_id") + private Long id; + + @Column(nullable = false) + private Boolean isComplete; + + @Column + private Integer dDay; + + // User와의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // Mission과의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "mission_id") + private Mission mission; + +} \ No newline at end of file diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" new file mode 100644 index 0000000..0e46a62 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.user.entity.Term; +import com.example.umc9th.domain.user.entity.User; +import jakarta.persistence.*; + +import lombok.*; +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_term") +public class UserTerm { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_term_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "term_id") + private Term term; +} + + diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" new file mode 100644 index 0000000..e07fca7 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.user.enums; + +public enum Gender { + MALE, FEMALE, NONE +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" new file mode 100644 index 0000000..1473bd4 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.user.enums; + +public enum TermName { + AGE, SERVICE, PRIVACY, LOCATION, MARKETING +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" new file mode 100644 index 0000000..e15b755 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" @@ -0,0 +1,37 @@ +package com.example.umc9th.global.apiPayload; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.code.BaseSuccessCode; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +@JsonPropertyOrder({"isSuccess", "code", "message", "result"}) +public class ApiResponse { + + @JsonProperty("isSuccess") + private final Boolean isSuccess; + + @JsonProperty("code") + private final String code; + + @JsonProperty("message") + private final String message; + + @JsonProperty("result") + private T result; + + + // ✅ 성공한 경우 (성공 코드 인터페이스 사용) + public static ApiResponse onSuccess(BaseSuccessCode code, T result) { + return new ApiResponse<>(true, code.getCode(), code.getMessage(), result); + } + + // 실패한 경우 (result 포함) + public static ApiResponse onFailure(BaseErrorCode code, T result) { + return new ApiResponse<>(false, code.getCode(), code.getMessage(), result); + } +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" new file mode 100644 index 0000000..d0d553f --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.global.apiPayload.code; + +import org.springframework.http.HttpStatus; + +public interface BaseErrorCode { + + HttpStatus getStatus(); + String getCode(); + String getMessage(); +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" new file mode 100644 index 0000000..19d1b22 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" @@ -0,0 +1,9 @@ +package com.example.umc9th.global.apiPayload.code; + +import org.springframework.http.HttpStatus; + +public interface BaseSuccessCode { + HttpStatus getStatus(); + String getCode(); + String getMessage(); +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" new file mode 100644 index 0000000..d41e910 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" @@ -0,0 +1,31 @@ +package com.example.umc9th.global.apiPayload.code; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum GeneralErrorCode implements BaseErrorCode{ + + BAD_REQUEST(HttpStatus.BAD_REQUEST, + "COMMON400_1", + "잘못된 요청입니다."), + UNAUTHORIZED(HttpStatus.UNAUTHORIZED, + "AUTH401_1", + "인증이 필요합니다."), + FORBIDDEN(HttpStatus.FORBIDDEN, + "AUTH403_1", + "요청이 거부되었습니다."), + NOT_FOUND(HttpStatus.NOT_FOUND, + "COMMON404_1", + "요청한 리소스를 찾을 수 없습니다."), + INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, + "COMMON500_1", + "예기치 않은 서버 에러가 발생했습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" new file mode 100644 index 0000000..ef060c8 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" @@ -0,0 +1,24 @@ +package com.example.umc9th.global.apiPayload.code; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum GeneralSuccessCode implements BaseSuccessCode { + + OK(HttpStatus.OK, + "COMMON200", + "요청이 성공적으로 처리되었습니다."), + CREATED(HttpStatus.CREATED, + "COMMON201", + "리소스가 성공적으로 생성되었습니다."), + NO_CONTENT(HttpStatus.NO_CONTENT, + "COMMON204", + "요청이 성공적으로 처리되었으며, 반환할 내용이 없습니다."), + ; + private final HttpStatus status; + private final String code; + private final String message; +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" new file mode 100644 index 0000000..902d4b5 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" @@ -0,0 +1,14 @@ +package com.example.umc9th.global.apiPayload.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.Getter; + +@Getter +public class GeneralException extends RuntimeException { + private final BaseErrorCode code; + + public GeneralException(BaseErrorCode code) { + super(code.getMessage()); + this.code = code; + } +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" new file mode 100644 index 0000000..195e36c --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" @@ -0,0 +1,42 @@ +package com.example.umc9th.global.apiPayload.handler; + +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.code.GeneralErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class GeneralExceptionAdvice { + + // 애플리케이션에서 발생하는 커스텀 예외를 처리 + @ExceptionHandler(GeneralException.class) + public ResponseEntity> handleException( + GeneralException ex + ) { + + return ResponseEntity.status(ex.getCode().getStatus()) + .body(ApiResponse.onFailure( + ex.getCode(), + null + ) + ); + } + + // 그 외의 정의되지 않은 모든 예외 처리 + @ExceptionHandler(Exception.class) + public ResponseEntity> handleException( + Exception ex + ) { + + BaseErrorCode code = GeneralErrorCode.INTERNAL_SERVER_ERROR; + return ResponseEntity.status(code.getStatus()) + .body(ApiResponse.onFailure( + code, + ex.getMessage() + ) + ); + } +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" new file mode 100644 index 0000000..0ba8875 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" @@ -0,0 +1,15 @@ +package com.example.umc9th.global.config; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class QuerydslConfig { + + @Bean + public JPAQueryFactory jpaQueryFactory(EntityManager em) { + return new JPAQueryFactory(em); + } +} diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" new file mode 100644 index 0000000..70f7459 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +@Getter +public abstract class BaseEntity { + + @CreatedDate + @Column(name = "created_at", nullable = false, updatable = false) + private LocalDateTime createdAt; + + @LastModifiedDate + @Column(name = "updated_at", nullable = false) + private LocalDateTime updatedAt; +} + diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" new file mode 100644 index 0000000..ec8fa85 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" @@ -0,0 +1,18 @@ +spring: + application: + name: umc9th + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${DB_URL} + username: ${DB_USER} + password: ${DB_PW} + + jpa: + database: mysql + show-sql: true + hibernate: + ddl-auto: update + properties: + hibernate: + format_sql: true diff --git "a/7\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" new file mode 100644 index 0000000..a96d2a7 --- /dev/null +++ "b/7\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" @@ -0,0 +1,13 @@ +package com.example.umc9th; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class Umc9thApplicationTests { + + @Test + void contextLoads() { + } + +} From b9f30dbf147a62d5f52a811409d86c1047570aa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EA=B2=BD=EC=88=98?= Date: Tue, 25 Nov 2025 10:39:26 +0900 Subject: [PATCH 7/9] =?UTF-8?q?[week8/mission]=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.DS_Store" | Bin 0 -> 6148 bytes .../src/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/.DS_Store" | Bin 0 -> 8196 bytes .../src/main/java/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/java/com/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/java/com/example/.DS_Store" | Bin 0 -> 6148 bytes .../main/java/com/example/umc9th/.DS_Store" | Bin 0 -> 6148 bytes .../example/umc9th/Umc9thApplication.java" | 15 +++ .../java/com/example/umc9th/domain/.DS_Store" | Bin 0 -> 6148 bytes .../domain/mission/entity/Mission.java" | 46 +++++++++ .../mission/exception/MissionException.java" | 11 +++ .../repository/MissionRepository.java" | 7 ++ .../review/controller/ReviewController.java" | 55 +++++++++++ .../review/converter/ReviewConverter.java" | 51 ++++++++++ .../domain/review/dto/ReviewResponse.java" | 19 ++++ .../domain/review/dto/req/ReviewReqDTO.java" | 23 +++++ .../domain/review/dto/res/ReviewResDTO.java" | 40 ++++++++ .../umc9th/domain/review/entity/Review.java" | 54 +++++++++++ .../domain/review/entity/ReviewPhoto.java" | 27 ++++++ .../domain/review/entity/ReviewReply.java" | 26 ++++++ .../review/exception/ReviewException.java" | 11 +++ .../exception/code/ReviewErrorCode.java" | 23 +++++ .../review/repository/ReviewRepository.java" | 7 ++ .../repository/ReviewRepositoryCustom.java" | 10 ++ .../repository/ReviewRepositoryImpl.java" | 41 +++++++++ .../command/ReviewCommandService.java" | 8 ++ .../command/ReviewCommandServiceImpl.java" | 46 +++++++++ .../service/query/ReviewQueryService.java" | 18 ++++ .../query/ReviewQueryServiceImpl.java" | 87 ++++++++++++++++++ .../example/umc9th/domain/store/.DS_Store" | Bin 0 -> 6148 bytes .../store/controller/StoreController.java" | 46 +++++++++ .../store/converter/StoreConverter.java" | 35 +++++++ .../domain/store/dto/req/StoreReqDTO.java" | 19 ++++ .../domain/store/dto/res/StoreResDTO.java" | 32 +++++++ .../umc9th/domain/store/entity/Location.java" | 30 ++++++ .../umc9th/domain/store/entity/Store.java" | 46 +++++++++ .../store/exception/StoreException.java" | 11 +++ .../store/exception/code/StoreErrorCode.java" | 21 +++++ .../store/repository/LocationRepository.java" | 7 ++ .../store/repository/StoreRepository.java" | 7 ++ .../service/command/StoreCommandService.java" | 10 ++ .../command/StoreCommandServiceImpl.java" | 86 +++++++++++++++++ .../test/controller/TestController.java" | 44 +++++++++ .../domain/test/converter/TestConverter.java" | 24 +++++ .../domain/test/dto/req/TestReqDTO.java" | 4 + .../domain/test/dto/res/TestResDTO.java" | 19 ++++ .../domain/test/exception/TestException.java" | 11 +++ .../test/exception/code/TestErrorCode.java" | 19 ++++ .../test/service/query/TestQueryService.java" | 5 + .../service/query/TestQueryServiceImpl.java" | 18 ++++ .../user/controller/UserController.java" | 27 ++++++ .../domain/user/converter/UserConverter.java" | 35 +++++++ .../user/dto/UserReqDTO/UserReqDTO.java" | 22 +++++ .../user/dto/UserResDTO/UserResDTO.java" | 13 +++ .../umc9th/domain/user/entity/Food.java" | 26 ++++++ .../umc9th/domain/user/entity/Term.java" | 23 +++++ .../umc9th/domain/user/entity/User.java" | 55 +++++++++++ .../domain/user/entity/mapping/UserFood.java" | 27 ++++++ .../user/entity/mapping/UserMission.java" | 40 ++++++++ .../domain/user/entity/mapping/UserTerm.java" | 30 ++++++ .../umc9th/domain/user/enums/Gender.java" | 5 + .../umc9th/domain/user/enums/TermName.java" | 5 + .../domain/user/enums/UserMissionStatus.java" | 6 ++ .../domain/user/exception/FoodException.java" | 11 +++ .../domain/user/exception/UserException.java" | 10 ++ .../user/exception/code/FoodErrorCode.java" | 19 ++++ .../user/exception/code/FoodSuccessCode.java" | 20 ++++ .../user/exception/code/UserErrorCode.java" | 24 +++++ .../user/exception/code/UserSuccessCode.java" | 20 ++++ .../user/repository/FoodRepository.java" | 9 ++ .../user/repository/UserFoodRepository.java" | 10 ++ .../repository/UserMissionRepository.java" | 11 +++ .../user/repository/UserRepository.java" | 7 ++ .../service/command/UserCommandService.java" | 8 ++ .../command/UserCommandServiceImpl.java" | 65 +++++++++++++ .../user/service/query/UserQueryService.java" | 4 + .../service/query/UserQueryServiceImpl.java" | 4 + .../umc9th/global/annotation/ExistFoods.java" | 21 +++++ .../global/apiPayload/ApiResponse.java" | 37 ++++++++ .../apiPayload/code/BaseErrorCode.java" | 10 ++ .../apiPayload/code/BaseSuccessCode.java" | 9 ++ .../apiPayload/code/GeneralErrorCode.java" | 35 +++++++ .../apiPayload/code/GeneralSuccessCode.java" | 24 +++++ .../exception/GeneralException.java" | 14 +++ .../handler/GeneralExceptionAdvice.java" | 50 ++++++++++ .../umc9th/global/config/QuerydslConfig.java" | 15 +++ .../umc9th/global/config/SwaggerConfig.java" | 47 ++++++++++ .../umc9th/global/entity/BaseEntity.java" | 26 ++++++ .../global/validator/FoodExistValidator.java" | 35 +++++++ .../src/main/resources/application.yml" | 18 ++++ .../umc9th/Umc9thApplicationTests.java" | 13 +++ 91 files changed, 2009 insertions(+) create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/.DS_Store" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/.DS_Store" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/.DS_Store" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/Umc9thApplication.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/.DS_Store" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/entity/Mission.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/exception/MissionException.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/repository/MissionRepository.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/.DS_Store" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/controller/StoreController.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/converter/StoreConverter.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/req/StoreReqDTO.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/res/StoreResDTO.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/StoreException.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/code/StoreErrorCode.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/LocationRepository.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/StoreRepository.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandService.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandServiceImpl.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/controller/UserController.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/converter/UserConverter.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserReqDTO/UserReqDTO.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserResDTO/UserResDTO.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/UserMissionStatus.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/FoodException.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/UserException.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodErrorCode.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodSuccessCode.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserErrorCode.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserSuccessCode.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/FoodRepository.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserFoodRepository.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserMissionRepository.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserRepository.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandService.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandServiceImpl.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryService.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryServiceImpl.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/annotation/ExistFoods.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SwaggerConfig.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/FoodExistValidator.java" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" create mode 100644 "8\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..f8b7a9690b83718919d0e27f6f685de67d424a01 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8O({YS3Oz1(EtrCp7B3;z7cim+m718M!I&*cY7eE5v%Zi|;`2DO zy8(+ii`W_1{pNQ!`$6`HF~+?`G+@kTj9JhSIVv@R?%GhpBqMShBcF$f48i&c=O*^o z0l&S;a+a}&aQXfFlQ=IN=aV;@t)1Pr)wa6Uo&O}4ei0Ol+zYZBv@WGg!b%Uqt9Z7Y z+WTiRErK|mWvU>KW{`4w9jB38dUBCQxvKSb!0K3?soh(xhT~yh3 z!Rl@|4YYbbTmFH`%--z*`E z7$64z83VjE@h2WE%ABn~mWOApfOZcJ1@lT&KtSKP1b~72NKXZIT%ZnluEA0xj)Hzw Q4oDXPMF@4oz%MZH1>oFCjQ{`u literal 0 HcmV?d00001 diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..bf1533fda83f2590e59798c3022d849a002ae2d6 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O0O({YS3Oz1(EtrCp7B3;z7cim+m70*E!8BW%)E-J9XMG``#OHBl zcOw?-Rm9G~?l-@?*$=Wmj4|%d<1S+kW6Xwz$WhrK=-wErnPfzcV?>L58l^G<`_07u zI^efkY{Ej8u;|n%DbuLZ!{{m* zFGkM(naqkX$;LBPki=t1xxG%ZST1}y&*EIw20CCj?dHg7FPFVRuOqtMlT}A7`|hA4 zj{ELv)wB-|k4`T}Pw6C+FPcyed@I>ASivhOpX+%JW?3q;2k=$-RURQRKnxHA#K874 zV9o@)wY?P3%83DD;0Fe9e-O|RJ%go2wRJ#;*Jq4dh$x`rTLMuS^bD37Ap*j6DWERp z=83^|IrxRi^9+_6bvff|W*EoJTs>a6njQQ?r8Dknq@EZc2G$vWlG*2aQ2vd@h{nViAU^1soxP+#@L)`Ugq>vO z%$zxAXU>`L?A)`LF@}zU+02;E7*nVU%I8pXog(H%olz1Ir-~>@pJhw_Sl02fH2!pk zbj*l75PKl@K{OPDc~=?y;>>hSzp_ZeZB1l@Aqc(;|`mL$+&rr4Fy)ntrI;FDDdL zQ8QdWabm;f4UMVh=8Y#CQzu%RHaDi$w>F(TsVa-=*R}1=9CJop@3b@l(QAOsn`Y8; zlkIW*VyFBbk@&N0&xNu*sy0X8-LDO1_`)J>x^FD7J=fo3<$az1AwL4C~{e&yJ&Thv_EXq z~xrys9ohBBj1bdiVN%*&T)-^o?1rW%BdU+U+zq;vX^c zR$qxA6mh$W8y*Ysg;KX^2VQxyw@%mgipRB^CfT4yM)&O^qrah}u-&3fu%(lg=vC^| z4e}5|&#Cq4rszx*wv?@<>#m3GXBHb{r`YrCb#{im&pu&au=DI|c9DJ0eqcYcpV=k$ z7rV@^u&YR*0+pyj4er7!tVRP`(26Z+!&Y?TVeG(8Jc1z{Kn4e4;3)D4P(Tq+;u$=P z(|84M;cdKwckv<4;WK=Wukal%;39s)CH#ipaT!-|6@Mq@C#n;AqAsyq?l@5ng*{VI zl~_sRYoSe{5Ph0UIM)k>WcN0$=e7uii*p6|7c8u)U9?<8#KyLVu7O9Qtqicqunn;~ z1>GT5!_%FHvk3~3rO9PlT{*a9NKFbc0=acup|Dc<{)26mTp?3in|p;qiW~!A5MtWs2-#$ijW(ZG*qD`Ovj0a={V7Ae;86f iMWR9{9no<~i9_Y4e+V$;WgFlB@%>+#nSkCg_y4~;ih$?< literal 0 HcmV?d00001 diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..991310f322afdce587ba344317a2ca2989ddd671 GIT binary patch literal 6148 zcmeHK%}T>S5Z<-brW7Fug&r5Y7EHlPiuArO(Es(CQc(+cygIWnX2`5z-n9ViQQeT2BSew^!umlo>&c?QBRx< zo%OnH9UdK@T~1z-St{Q&ogCO!vTv}0cTmh~Uj0Ry$n*(3Rd$s{NDL4I!~ij{-3*v> z!Rl-`4YYbZ6&FH`%--z*`E z7$64z83VjI_QxJ9%ABn~mWOApfc5|l1@lT&KtSKP1b~72NLK}QT%ZnluEA0xj)Hzw Q4oDXPMF@4oz%MZH1xm3=djJ3c literal 0 HcmV?d00001 diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..e961383b6d0aaf6f7af194a4039707335401bf99 GIT binary patch literal 6148 zcmeHK%}T>S5T3QwrW7Fug&r5Y7Hq*vi#2n8u?gv@JQTQ-jpT1v(=y?lAX)>8Mo9|+)RNmgHI2EVn-1-k{?oWg1Y|;zH*EG6N zDh&%g2rrX(K5+L=RW=QhEFSBGB#JTQ<|@e|HSeie7EN@nZyZk5sSe!wV$trl8?x0p zUN+>S)9g0nQKz|FR-OHW!;|yDV>-;#i=k2=>sod#7VwJ7m#Uupah9s=9z8`?5zWX9 zFayj0Gq70<*mJ1KLOG+G+ff abd2*X<_2jNvg>q2z6fYSxMK!>fq@Tr!AzV0 literal 0 HcmV?d00001 diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/.DS_Store" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..8e2520441f52fdcce7b6a07ceb93e1cb84cb6d30 GIT binary patch literal 6148 zcmeHK%}T>S5Z<-5O({YS3Oz1(EtrCp7B8XJ7cim+m717hgK4(3i9M7;&iX<=iO=KA z?&c5-coVTRu=~x<&u->}>{rxNz!@8 zVl!}tU2!^aw%e9MfI4CeL6ma*9|&Vt^PR z28e;(W5ApRR(tnKr;3RIV&De`aDNcc5M6`0MzwW7hu3HH*AY=b$F~HcFz6c0HG&6( z>r_CU%FPpl>vXUS6XzPtHR^Q6)ygoBS-E(;aJ4$vg$iff)kr-tKn#=_sOh1N=l>=A zGL?_~ate)z0b<~vF~I9%Z#;sc%-Q;_JUnX!v`1(t7?-000($8Z00Z1dI?Ad20(FRU X4dxng7PPB$K)MJhLZ~AKeu0568+%LQ literal 0 HcmV?d00001 diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/.DS_Store" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..b00ab839e19ba3dbf0bb26481a6a72f08c0a0b9c GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8O({YS3Oz1(EtrCp7B3;z7cim+m70*E!8BW%)Er77XMG``#OHBl zcXJ39youNu*!^bbXE*af_J=XXy;U?|%w~*P&=5H)TLjHpT@4eA$kiM%OT!{tgozBd zO!OB``0e{FVv@~S!0O-s5iXKA%N^&FH=3=z{kGM%y4HjLEDJvm@>S*q%R3xhOPPd~ z9)vgXteDz|7c$L*IGrt3LLAK?ceTd#-XVP6aeXPdrQ zkDPH|oQ|B$rehr)pPXM!Uy^w$-!zdNI9GCDu!46`YBjz3%QTVc6WFVqDwdEKAO?s5 zVqo_eFlT|)-M!MOVq$<8_<;f39|SZ+*I=npZ5`0z^%?ywL=@2RErBQux&}*)-~r(} z6;P*g^Tgmf9qhuyxduy(I-PN~GR$LEt{yL3tqyjf!WnlpQcnyJ19b+PdT8VMe+j?L z)<=Flg+{~xG4RhA;H`;2@t`Pkwtg!Q&sqWP5gH1{m8gJ#Ub_Uq0QZrea%#Uo9pYSr WrAC|u?J6CRE&_@W>WG0~VBibua7-Bh literal 0 HcmV?d00001 diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/Umc9thApplication.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/Umc9thApplication.java" new file mode 100644 index 0000000..0e3eec9 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/Umc9thApplication.java" @@ -0,0 +1,15 @@ +package com.example.umc9th; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + + +@SpringBootApplication +@EnableJpaAuditing +public class Umc9thApplication { + public static void main(String[] args) { + SpringApplication.run(Umc9thApplication.class, args); + + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/.DS_Store" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..01ca4101004f0459217c172c82431c31a0bd1514 GIT binary patch literal 6148 zcmeHK%}T>S5Z>*N-BN@c6nb3nS}+AGEnY&cFJMFuDm9@+gE3p0)E-J9XMG``#OHBl zcLOa3k0N#kcE8#A+0A^A{b7vp;bPKd%wdcPXowt@5>Qk{BnzTsI@bx&WC|g7H&HTC%b{8%lT_#W#vz)bIdbBqRoi0b+m{ z*i8oPc_3Q5Sw2-w3=ji9Fo64mgofx@%nj userMissionList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/exception/MissionException.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/exception/MissionException.java" new file mode 100644 index 0000000..b0faea9 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/exception/MissionException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.mission.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class MissionException extends GeneralException { + + public MissionException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/repository/MissionRepository.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/repository/MissionRepository.java" new file mode 100644 index 0000000..23de689 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/repository/MissionRepository.java" @@ -0,0 +1,7 @@ +package com.example.umc9th.domain.mission.repository; + +import com.example.umc9th.domain.mission.entity.Mission; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MissionRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" new file mode 100644 index 0000000..55d8dc4 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" @@ -0,0 +1,55 @@ +package com.example.umc9th.domain.review.controller; + +import com.example.umc9th.domain.review.converter.ReviewConverter; +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.dto.req.ReviewReqDTO; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.service.command.ReviewCommandService; +import com.example.umc9th.domain.review.service.query.ReviewQueryService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/reviews") +public class ReviewController { + + private final ReviewQueryService reviewQueryService; + private final ReviewCommandService reviewCommandService; + + /** + * 내가 작성한 리뷰 조회 API + */ + @GetMapping("/user/{userId}") + public ApiResponse getMyReviews( + @PathVariable Long userId, + @RequestParam(required = false) Long storeId, + @RequestParam(required = false) Integer minStar, + @RequestParam(required = false) Integer maxStar + ) { + List reviews = reviewQueryService.getReviewsByUserWithFilters( + userId, storeId, minStar, maxStar + ); + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + ReviewConverter.toReviewListDTO(reviews) + ); + } + + /** + * 2. 가게에 리뷰 추가하기 API + * POST /reviews + */ + @PostMapping + public ApiResponse createReview( + @RequestBody @Valid ReviewReqDTO.CreateReviewDTO request + ) { + ReviewResDTO.CreateReviewResultDTO result = reviewCommandService.createReview(request); + return ApiResponse.onSuccess(GeneralSuccessCode.CREATED, result); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" new file mode 100644 index 0000000..0e3abac --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" @@ -0,0 +1,51 @@ +package com.example.umc9th.domain.review.converter; + +import com.example.umc9th.domain.review.dto.req.ReviewReqDTO; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.user.entity.User; + +import java.util.List; +import java.util.stream.Collectors; + +public class ReviewConverter { + + public static ReviewResDTO.ReviewListDTO toReviewListDTO(List reviews) { + List reviewDTOs = reviews.stream() + .map(ReviewConverter::toReviewDTO) + .collect(Collectors.toList()); + + return ReviewResDTO.ReviewListDTO.builder() + .reviews(reviewDTOs) + .totalCount(reviewDTOs.size()) + .build(); + } + + private static ReviewResDTO.ReviewDTO toReviewDTO(ReviewResponse review) { + return ReviewResDTO.ReviewDTO.builder() + .reviewId(review.getReviewId()) + .content(review.getContent()) + .star(review.getStar()) + .build(); + } + + // Review 엔티티 생성 + public static Review toReview(ReviewReqDTO.CreateReviewDTO dto, User user, Store store) { + return Review.builder() + .star(dto.getStar()) + .content(dto.getContent()) + .user(user) + .store(store) + .build(); + } + + // 생성 결과 DTO + public static ReviewResDTO.CreateReviewResultDTO toCreateReviewResultDTO(Review review) { + return ReviewResDTO.CreateReviewResultDTO.builder() + .reviewId(review.getId()) + .createdAt(review.getCreatedAt()) + .build(); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" new file mode 100644 index 0000000..f25bf7d --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.review.dto; + +import com.querydsl.core.annotations.QueryProjection; +import lombok.Getter; + +@Getter +public class ReviewResponse { + private Long reviewId; + private String content; + private Integer star; + + @QueryProjection + public ReviewResponse(Long reviewId, String content, Integer star) { + this.reviewId = reviewId; + this.content = content; + this.star = star; + } +} + diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" new file mode 100644 index 0000000..32d9429 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.review.dto.req; + +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; + +public class ReviewReqDTO { + + @Getter + public static class CreateReviewDTO { + @NotNull(message = "별점은 필수입니다.") + @Min(value = 1, message = "별점은 1 이상이어야 합니다.") + @Max(value = 5, message = "별점은 5 이하여야 합니다.") + private Integer star; + + private String content; + + @NotNull(message = "가게 ID는 필수입니다.") + private Long storeId; + } + +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" new file mode 100644 index 0000000..9673953 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" @@ -0,0 +1,40 @@ +package com.example.umc9th.domain.review.dto.res; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.util.List; + +public class ReviewResDTO { + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewListDTO { + private List reviews; + private Integer totalCount; + } + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewDTO { + private Long reviewId; + private String content; + private Integer star; + } + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class CreateReviewResultDTO { + private Long reviewId; + private LocalDateTime createdAt; + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" new file mode 100644 index 0000000..9bc62ff --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" @@ -0,0 +1,54 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review") +public class Review extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_id") + private Long id; + + @Column(nullable = false) + private Integer star; + + @Column(columnDefinition = "TEXT") + private String content; + + // User와의 연관 관계 (N:1) - 연관 관계의 주인 + // Review 입장에서 User는 N:1 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // Store와의 연관 관계 (N:1) - 연관 관계의 주인 + // Review 입장에서 Store는 N:1 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; + + // ReviewPhoto와의 연관 관계 (1:N) + // Review 입장에서 ReviewPhoto는 1:N + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @Builder.Default + private List reviewPhotoList = new ArrayList<>(); + + // ReviewReply와의 연관 관계 (1:N) + // Review 입장에서 ReviewReply는 1:N // 헷갈림 + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @Builder.Default + private List reviewReplyList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" new file mode 100644 index 0000000..56310ba --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review_photo") +public class ReviewPhoto extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_photo_id") + private Long id; + + @Column(name = "review_photo_url", nullable = false) + private String reviewPhotoUrl; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" new file mode 100644 index 0000000..ccaa29e --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review_reply") +public class ReviewReply extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "reply_id") + private Long id; + + @Column(columnDefinition = "TEXT") + private String content; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" new file mode 100644 index 0000000..2ae42f6 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.review.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class ReviewException extends GeneralException { + + public ReviewException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" new file mode 100644 index 0000000..921f95a --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.review.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum ReviewErrorCode implements BaseErrorCode { + + // Review 관련 에러 + INVALID_USER_ID(HttpStatus.BAD_REQUEST, "REVIEW400_1", "유효하지 않은 사용자 ID입니다."), + INVALID_STAR_RANGE(HttpStatus.BAD_REQUEST, "REVIEW400_2", "별점은 1~5 사이여야 하며, 최소값이 최대값보다 클 수 없습니다."), + + REVIEW_NOT_FOUND(HttpStatus.NOT_FOUND, "REVIEW404_1", "리뷰를 찾을 수 없습니다."), + REVIEW_ACCESS_DENIED(HttpStatus.FORBIDDEN, "REVIEW403_1", "해당 리뷰에 접근할 권한이 없습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" new file mode 100644 index 0000000..2781dcc --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" @@ -0,0 +1,7 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.entity.Review; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" new file mode 100644 index 0000000..9989c1c --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.querydsl.core.types.Predicate; + +import java.util.List; + +public interface ReviewRepositoryCustom { + List searchReview(Predicate predicate); // predicate를 사용한 동적 쿼리 메서드 +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" new file mode 100644 index 0000000..ad1eef3 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" @@ -0,0 +1,41 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.dto.QReviewResponse; +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.entity.QReview; +import com.example.umc9th.domain.store.entity.QStore; +import com.querydsl.core.types.Predicate; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +@Transactional(readOnly = true) // 조회 작업이므로 readOnly +public class ReviewRepositoryImpl implements ReviewRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + @Override + public List searchReview(Predicate predicate) { // predicate를 사용한 동적 쿼리 메서드 + // Q 클래스 선언 + QReview review = QReview.review; + QStore store = QStore.store; + + return queryFactory + .select(new QReviewResponse( + review.id, + review.content, + review.star + )) + .from(review) + .leftJoin(review.store, store) // Store 정보가 필요하면 join + .where(predicate) // 동적으로 전달받은 조건 적용 + .orderBy(review.id.desc()) // 최신 리뷰가 먼저 오도록 정렬 + .fetch(); + } + +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" new file mode 100644 index 0000000..261022c --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" @@ -0,0 +1,8 @@ +package com.example.umc9th.domain.review.service.command; + +import com.example.umc9th.domain.review.dto.req.ReviewReqDTO; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; + +public interface ReviewCommandService { + ReviewResDTO.CreateReviewResultDTO createReview(ReviewReqDTO.CreateReviewDTO dto); +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" new file mode 100644 index 0000000..35f0a73 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" @@ -0,0 +1,46 @@ +package com.example.umc9th.domain.review.service.command; + +import com.example.umc9th.domain.review.converter.ReviewConverter; +import com.example.umc9th.domain.review.dto.req.ReviewReqDTO; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.domain.review.repository.ReviewRepository; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.store.exception.StoreException; +import com.example.umc9th.domain.store.exception.code.StoreErrorCode; +import com.example.umc9th.domain.store.repository.StoreRepository; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional +public class ReviewCommandServiceImpl implements ReviewCommandService { + + private final ReviewRepository reviewRepository; + private final StoreRepository storeRepository; + private final UserRepository userRepository; + + @Override + public ReviewResDTO.CreateReviewResultDTO createReview(ReviewReqDTO.CreateReviewDTO dto) { + // 하드코딩된 유저 (DB에 있는 유저 ID 1번) + User user = userRepository.findById(1L) + .orElseThrow(() -> new RuntimeException("유저를 찾을 수 없습니다.")); + + // 가게 조회 + Store store = storeRepository.findById(dto.getStoreId()) + .orElseThrow(() -> new StoreException(StoreErrorCode.STORE_NOT_FOUND)); + + // Review 엔티티 생성 + Review review = ReviewConverter.toReview(dto, user, store); + + // DB 저장 + Review savedReview = reviewRepository.save(review); + + // 응답 DTO 반환 + return ReviewConverter.toCreateReviewResultDTO(savedReview); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" new file mode 100644 index 0000000..9a477a9 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" @@ -0,0 +1,18 @@ +package com.example.umc9th.domain.review.service.query; + +import com.example.umc9th.domain.review.dto.ReviewResponse; + +import java.util.List; + +public interface ReviewQueryService { + + /** + * 사용자의 리뷰 조회 (필터링 포함) + */ + List getReviewsByUserWithFilters( + Long userId, + Long storeId, + Integer minStar, + Integer maxStar + ); +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" new file mode 100644 index 0000000..eefcec8 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" @@ -0,0 +1,87 @@ +package com.example.umc9th.domain.review.service.query; + +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.entity.QReview; +import com.example.umc9th.domain.review.exception.ReviewException; +import com.example.umc9th.domain.review.exception.code.ReviewErrorCode; +import com.example.umc9th.domain.review.repository.ReviewRepository; +import com.querydsl.core.BooleanBuilder; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) // 조회 작업이므로 readOnly +public class ReviewQueryServiceImpl implements ReviewQueryService { + + private final ReviewRepository reviewRepository; + + @Override + public List getReviewsByUserWithFilters( + Long userId, + Long storeId, + Integer minStar, + Integer maxStar + ) { + // 검증: 필수 파라미터 체크 + validateUserId(userId); + + // 검증: 별점 범위 체크 + validateStarRange(minStar, maxStar); + + // Q 클래스 선언 + QReview review = QReview.review; + + // BooleanBuilder로 동적 조건 생성 + BooleanBuilder builder = new BooleanBuilder(); + + // 필수 조건: 특정 사용자의 리뷰만 + builder.and(review.user.id.eq(userId)); + + // 선택 조건: 가게 필터링 + if (storeId != null) { + builder.and(review.store.id.eq(storeId)); + } + + // 선택 조건: 별점 필터링 + if (minStar != null && maxStar != null) { + builder.and(review.star.between(minStar.floatValue(), maxStar.floatValue())); + } else if (minStar != null) { + builder.and(review.star.goe(minStar.floatValue())); + } else if (maxStar != null) { + builder.and(review.star.loe(maxStar.floatValue())); + } + + // Repository 호출 & 결과 반환 + return reviewRepository.searchReview(builder); + } + + /** + * 사용자 ID 검증 + */ + private void validateUserId(Long userId) { + if (userId == null || userId <= 0) { + throw new ReviewException(ReviewErrorCode.INVALID_USER_ID); + } + } + + /** + * 별점 범위 검증 + */ + private void validateStarRange(Integer minStar, Integer maxStar) { + if (minStar != null && (minStar < 1 || minStar > 5)) { + throw new ReviewException(ReviewErrorCode.INVALID_STAR_RANGE); + } + + if (maxStar != null && (maxStar < 1 || maxStar > 5)) { + throw new ReviewException(ReviewErrorCode.INVALID_STAR_RANGE); + } + + if (minStar != null && maxStar != null && minStar > maxStar) { + throw new ReviewException(ReviewErrorCode.INVALID_STAR_RANGE); + } + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/.DS_Store" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..e90f688ac1a56d266833c490ad23c98d56671ebb GIT binary patch literal 6148 zcmeHK%Sr=55Ukc5B3^RLael!+7()Dl{D7bm0bk|Hz z*DPCy?QHM**yhcrsme+LDIf);fE17dzfiz?FKvFEs3--bfE4&vz`qZT?$`^*#Q1bD#0Wr~ zF&)Nr%o4=r31TlC6Pck|Qi(~m8Zj*C%(trRg=1pUVKsbMJ=tnPv3NS~Z&42GiHcG{ z3LGnNncIc;|6BT*`Tv-tofMD)|4IRytvBlxU#WWQU literal 0 HcmV?d00001 diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/controller/StoreController.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/controller/StoreController.java" new file mode 100644 index 0000000..4a7fec9 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/controller/StoreController.java" @@ -0,0 +1,46 @@ +package com.example.umc9th.domain.store.controller; + +import com.example.umc9th.domain.store.dto.req.StoreReqDTO; +import com.example.umc9th.domain.store.dto.res.StoreResDTO; +import com.example.umc9th.domain.store.service.command.StoreCommandService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/stores") +public class StoreController { + + private final StoreCommandService storeCommandService; + + /** + * 1. 특정 지역에 가게 추가하기 API + * POST /stores + */ + @PostMapping + public ApiResponse createStore( + @RequestBody @Valid StoreReqDTO.CreateStoreDTO request + ) { + StoreResDTO.CreateStoreResultDTO result = storeCommandService.createStore(request); + return ApiResponse.onSuccess(GeneralSuccessCode.CREATED, result); + } + + /** + * 2. 가게의 미션을 도전 중인 미션에 추가(미션 도전하기) API + * POST /stores/{storeId}/missions/{missionId}/challenge + */ + @PostMapping("/{storeId}/missions/{missionId}/challenge") + public ApiResponse challengeMission( + @PathVariable Long storeId, + @PathVariable Long missionId, + @RequestParam Long userId + ) { + StoreResDTO.ChallengeMissionResultDTO result = + storeCommandService.challengeMission(storeId, missionId, userId); + + return ApiResponse.onSuccess(GeneralSuccessCode.CREATED, result); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/converter/StoreConverter.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/converter/StoreConverter.java" new file mode 100644 index 0000000..c0861ce --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/converter/StoreConverter.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.domain.store.converter; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.store.dto.req.StoreReqDTO; +import com.example.umc9th.domain.store.dto.res.StoreResDTO; +import com.example.umc9th.domain.store.entity.Location; +import com.example.umc9th.domain.store.entity.Store; + +public class StoreConverter { + + public static Store toStore(StoreReqDTO.CreateStoreDTO dto, Location location) { + return Store.builder() + .name(dto.getName()) + .detailAddress(dto.getDetailAddress()) + .location(location) + .build(); + } + + public static StoreResDTO.CreateStoreResultDTO toCreateStoreResultDTO(Store store) { + return StoreResDTO.CreateStoreResultDTO.builder() + .storeId(store.getId()) + .name(store.getName()) + .createdAt(store.getCreatedAt()) + .build(); + } + + public static StoreResDTO.ChallengeMissionResultDTO toChallengeMissionResultDTO(Store store, Mission mission) { + return StoreResDTO.ChallengeMissionResultDTO.builder() + .storeId(store.getId()) + .storeName(store.getName()) + .missionId(mission.getId()) + .missionName(mission.getTitle()) + .build(); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/req/StoreReqDTO.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/req/StoreReqDTO.java" new file mode 100644 index 0000000..ee796bf --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/req/StoreReqDTO.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.store.dto.req; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; + +public class StoreReqDTO { + + @Getter + public static class CreateStoreDTO { + @NotBlank(message = "가게 이름은 필수입니다.") + private String name; + + private String detailAddress; + + @NotNull(message = "지역 ID는 필수입니다.") + private Long locationId; + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/res/StoreResDTO.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/res/StoreResDTO.java" new file mode 100644 index 0000000..76a10f6 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/res/StoreResDTO.java" @@ -0,0 +1,32 @@ +package com.example.umc9th.domain.store.dto.res; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +public class StoreResDTO { + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class CreateStoreResultDTO { + private Long storeId; + private String name; + private LocalDateTime createdAt; + } + + @Getter + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class ChallengeMissionResultDTO { + private Long storeId; + private String storeName; + private Long missionId; + private String missionName; + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" new file mode 100644 index 0000000..73384e1 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.store.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "location") +public class Location extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "location_id") + private Long id; + + @Column(name = "location_name", nullable = false, length = 50) + private String name; + + // Store와의 연관 관계 (1:N) + @OneToMany(mappedBy = "location", cascade = CascadeType.ALL) + @Builder.Default + private List storeList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" new file mode 100644 index 0000000..99ad0b6 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" @@ -0,0 +1,46 @@ +package com.example.umc9th.domain.store.entity; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "store") +public class Store extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "store_id") + private Long id; + + @Column(name = "store_name", nullable = false, length = 50) + private String name; + + @Column(name = "detailAddress", length = 100) + private String detailAddress; + + // Location과의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "location_id") + private Location location; + + // Review와의 연관 관계 (1:N) + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + @Builder.Default + private List reviewList = new ArrayList<>(); + + // Mission과의 연관 관계 (1:N) + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + @Builder.Default + private List missionList = new ArrayList<>(); + +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/StoreException.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/StoreException.java" new file mode 100644 index 0000000..296a979 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/StoreException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.store.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class StoreException extends GeneralException { + + public StoreException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/code/StoreErrorCode.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/code/StoreErrorCode.java" new file mode 100644 index 0000000..a1709e1 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/code/StoreErrorCode.java" @@ -0,0 +1,21 @@ +package com.example.umc9th.domain.store.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum StoreErrorCode implements BaseErrorCode { + + STORE_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE404_1", "가게를 찾을 수 없습니다."), + LOCATION_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE404_2", "지역을 찾을 수 없습니다."), + INVALID_STORE_ID(HttpStatus.BAD_REQUEST, "STORE400_1", "유효하지 않은 가게 ID입니다."), + MISSION_NOT_FOUND_IN_STORE(HttpStatus.NOT_FOUND, "STORE404_3", "가게에 해당 미션이 없습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/LocationRepository.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/LocationRepository.java" new file mode 100644 index 0000000..2feba23 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/LocationRepository.java" @@ -0,0 +1,7 @@ +package com.example.umc9th.domain.store.repository; + +import com.example.umc9th.domain.store.entity.Location; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface LocationRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/StoreRepository.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/StoreRepository.java" new file mode 100644 index 0000000..e49ad93 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/StoreRepository.java" @@ -0,0 +1,7 @@ +package com.example.umc9th.domain.store.repository; + +import com.example.umc9th.domain.store.entity.Store; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface StoreRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandService.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandService.java" new file mode 100644 index 0000000..7e2b19d --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandService.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.store.service.command; + +import com.example.umc9th.domain.store.dto.req.StoreReqDTO; +import com.example.umc9th.domain.store.dto.res.StoreResDTO; + +public interface StoreCommandService { + StoreResDTO.CreateStoreResultDTO createStore(StoreReqDTO.CreateStoreDTO dto); + StoreResDTO.ChallengeMissionResultDTO challengeMission(Long storeId, Long missionId, Long userId); +} + diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandServiceImpl.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandServiceImpl.java" new file mode 100644 index 0000000..33fa37c --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandServiceImpl.java" @@ -0,0 +1,86 @@ +package com.example.umc9th.domain.store.service.command; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.store.converter.StoreConverter; +import com.example.umc9th.domain.store.dto.req.StoreReqDTO; +import com.example.umc9th.domain.store.dto.res.StoreResDTO; +import com.example.umc9th.domain.store.entity.Location; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.store.exception.StoreException; +import com.example.umc9th.domain.store.exception.code.StoreErrorCode; +import com.example.umc9th.domain.store.repository.LocationRepository; +import com.example.umc9th.domain.store.repository.StoreRepository; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.entity.mapping.UserMission; +import com.example.umc9th.domain.user.enums.UserMissionStatus; +import com.example.umc9th.domain.user.exception.UserException; +import com.example.umc9th.domain.user.repository.UserMissionRepository; +import com.example.umc9th.domain.user.repository.UserRepository; +import com.example.umc9th.domain.user.exception.code.UserErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +@Service +@RequiredArgsConstructor +@Transactional +public class StoreCommandServiceImpl implements StoreCommandService { + + private final StoreRepository storeRepository; + private final LocationRepository locationRepository; + private final UserMissionRepository userMissionRepository; + private final UserRepository userRepository; + + @Override + public StoreResDTO.CreateStoreResultDTO createStore(StoreReqDTO.CreateStoreDTO dto) { + // 지역 조회 + Location location = locationRepository.findById(dto.getLocationId()) + .orElseThrow(() -> new StoreException(StoreErrorCode.LOCATION_NOT_FOUND)); + + // Store 엔티티 생성 + Store store = StoreConverter.toStore(dto, location); + + // DB 저장 + Store savedStore = storeRepository.save(store); + + // 응답 DTO 반환 + return StoreConverter.toCreateStoreResultDTO(savedStore); + } + + @Override + public StoreResDTO.ChallengeMissionResultDTO challengeMission(Long storeId, Long missionId, Long userId) { + // 가게 조회 + Store store = storeRepository.findById(storeId) + .orElseThrow(() -> new StoreException(StoreErrorCode.STORE_NOT_FOUND)); + + // 미션 조회 + Mission mission = store.getMissionList().stream() + .filter(m -> m.getId().equals(missionId)) + .findFirst() + .orElseThrow(() -> new StoreException(StoreErrorCode.MISSION_NOT_FOUND_IN_STORE)); + + // 유저 조회 + User user = userRepository.findById(userId) + .orElseThrow(() -> new UserException(UserErrorCode.NOT_FOUND)); + + Optional existing = userMissionRepository.findByUserIdAndMissionId(userId, missionId); + if(existing.isPresent()) { + throw new UserException(UserErrorCode.ALREADY_CHALLENGING); + } + + // UserMission 엔티티 생성 + UserMission userMission = UserMission.builder() + .mission(mission) + .user(user) + .status(UserMissionStatus.CHALLENGING) // 도전 중 상태로 설정 + .build(); + + // DB 저장 + userMissionRepository.save(userMission); + + // 응답 DTO 반환 + return StoreConverter.toChallengeMissionResultDTO(store, mission); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" new file mode 100644 index 0000000..851510f --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" @@ -0,0 +1,44 @@ +package com.example.umc9th.domain.test.controller; + +import com.example.umc9th.domain.test.converter.TestConverter; +import com.example.umc9th.domain.test.dto.res.TestResDTO; +import com.example.umc9th.domain.test.service.query.TestQueryService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/temp") +public class TestController { + + private final TestQueryService testQueryService; + + @GetMapping("/test") + public ApiResponse test() { + // 응답 코드 정의 + GeneralSuccessCode code = GeneralSuccessCode.OK; + + return ApiResponse.onSuccess( + code, + TestConverter.toTestingDTO("This is Test!") + ); + } + + // 예외 상황 + @GetMapping("/exception") + public ApiResponse exception( + @RequestParam Long flag + ) { + + testQueryService.checkFlag(flag); + + // 응답 코드 정의 + GeneralSuccessCode code = GeneralSuccessCode.OK; + return ApiResponse.onSuccess(code, TestConverter.toExceptionDTO("This is Test!")); + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" new file mode 100644 index 0000000..af81183 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" @@ -0,0 +1,24 @@ +package com.example.umc9th.domain.test.converter; + +import com.example.umc9th.domain.test.dto.res.TestResDTO; + +public class TestConverter { + + // 객체 -> DTO + public static TestResDTO.Testing toTestingDTO( + String testing + ) { + return TestResDTO.Testing.builder() + .testString(testing) + .build(); + } + + // 객체 -> DTO + public static TestResDTO.Exception toExceptionDTO( + String testing + ){ + return TestResDTO.Exception.builder() + .testString(testing) + .build(); + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" new file mode 100644 index 0000000..405e3b9 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" @@ -0,0 +1,4 @@ +package com.example.umc9th.domain.test.dto.req; + +public class TestReqDTO { +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" new file mode 100644 index 0000000..9f13f52 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.test.dto.res; + +import lombok.Builder; +import lombok.Getter; + +public class TestResDTO { + + @Builder + @Getter + public static class Testing { + private String testString; + } + + @Builder + @Getter + public static class Exception { + private String testString; + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" new file mode 100644 index 0000000..c26ed05 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.test.exception; + +import com.example.umc9th.global.apiPayload.exception.GeneralException; +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; + +public class TestException extends GeneralException { + + public TestException(BaseErrorCode code) { + super(code); + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" new file mode 100644 index 0000000..7264f21 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.test.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum TestErrorCode implements BaseErrorCode { + + // For test + TEST_EXCEPTION(HttpStatus.BAD_REQUEST, "TEST400_1", "이거는 테스트"), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" new file mode 100644 index 0000000..a6419ab --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.test.service.query; + +public interface TestQueryService { + void checkFlag(Long flag); +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" new file mode 100644 index 0000000..1af8423 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" @@ -0,0 +1,18 @@ +package com.example.umc9th.domain.test.service.query; + +import com.example.umc9th.domain.test.exception.TestException; +import com.example.umc9th.domain.test.exception.code.TestErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class TestQueryServiceImpl implements TestQueryService { + + @Override + public void checkFlag(Long flag) { + if (flag == 1) { + throw new TestException(TestErrorCode.TEST_EXCEPTION); + } + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/controller/UserController.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/controller/UserController.java" new file mode 100644 index 0000000..84c50ba --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/controller/UserController.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.user.controller; + +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; +import com.example.umc9th.domain.user.exception.code.UserSuccessCode; +import com.example.umc9th.domain.user.service.command.UserCommandService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class UserController { + + private final UserCommandService userCommandService; + + @PostMapping("/sign-up") + public ApiResponse signUp( + @RequestBody @Valid UserReqDTO.JoinDTO dto + ){ + UserResDTO.JoinDTO response = userCommandService.signup(dto); + return ApiResponse.onSuccess(UserSuccessCode.FOUND, response); + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/converter/UserConverter.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/converter/UserConverter.java" new file mode 100644 index 0000000..2b68fe1 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/converter/UserConverter.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.domain.user.converter; + +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; +import com.example.umc9th.domain.user.entity.User; + +public class UserConverter { + + // Entity -> DTO + public static UserResDTO.JoinDTO toJoinDTO(User user) { + return UserResDTO.JoinDTO.builder() + .userId(user.getId()) + .createAt(user.getCreatedAt()) + .build(); + } + + // DTO -> Entity + public static User toUser(UserReqDTO.JoinDTO dto) { + // address와 specAddress를 합쳐서 저장 + String fullAddress = dto.address(); + if (dto.specAddress() != null && !dto.specAddress().isEmpty()) { + fullAddress = dto.address() + " " + dto.specAddress(); + } + + return User.builder() + .name(dto.name()) + .birth(dto.birth()) + .address(fullAddress) + .gender(dto.gender()) + .email(dto.email()) + .password(dto.password()) + .phoneNum(dto.phoneNum()) + .build(); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserReqDTO/UserReqDTO.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserReqDTO/UserReqDTO.java" new file mode 100644 index 0000000..ba26efc --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserReqDTO/UserReqDTO.java" @@ -0,0 +1,22 @@ +package com.example.umc9th.domain.user.dto.UserReqDTO; + +import com.example.umc9th.domain.user.enums.Gender; +import com.example.umc9th.global.annotation.ExistFoods; + +import java.time.LocalDate; +import java.util.List; + +public class UserReqDTO { + public record JoinDTO( + String name, + Gender gender, + LocalDate birth, + String address, // Address -> String으로 변경 + String specAddress, + String email, + String password, + String phoneNum, + @ExistFoods + List preferCategory + ) {} +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserResDTO/UserResDTO.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserResDTO/UserResDTO.java" new file mode 100644 index 0000000..e26317c --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserResDTO/UserResDTO.java" @@ -0,0 +1,13 @@ +package com.example.umc9th.domain.user.dto.UserResDTO; + +import lombok.Builder; + +import java.time.LocalDateTime; + +public class UserResDTO { + @Builder + public record JoinDTO( + Long userId, // memberId -> userId로 변경 + LocalDateTime createAt + ){} +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" new file mode 100644 index 0000000..ca884aa --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.domain.user.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Builder +@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED) +@AllArgsConstructor(access = lombok.AccessLevel.PRIVATE) +@Getter +@Table(name = "food") + +public class Food { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "food_id") + private Long id; + + @Column(nullable = false, length = 50) + private String foodName; + +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" new file mode 100644 index 0000000..03bf421 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.user.entity; + +import com.example.umc9th.domain.user.enums.TermName; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Table(name = "term") +public class Term { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "term_id") // DB 컬럼명 명시 + private Long id; + + @Column(name = "term_name", nullable = false) // ENUM 컬럼만 남김 + @Enumerated(EnumType.STRING) + private TermName name; +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" new file mode 100644 index 0000000..b75ff30 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" @@ -0,0 +1,55 @@ +package com.example.umc9th.domain.user.entity; + +import com.example.umc9th.domain.user.entity.mapping.UserFood; +import com.example.umc9th.domain.user.enums.Gender; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user") +public class User extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_id") + private Long id; + + @Column(nullable = false, length = 50) + private String name; + + @Enumerated(EnumType.STRING) + @Builder.Default + @Column(nullable = false) + private Gender gender = Gender.NONE; + + @Column(nullable = false, length = 50, unique = true) + private String email; + + @Column + private LocalDate birth; + + @Column + private String address; + + @Column(nullable = false) + private String password; + + @Column(length = 20) + private String phoneNum; + + @Builder.Default + @Column(nullable = false) + private Integer point = 0; + + @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) + private List userFoodList = new ArrayList<>(); +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" new file mode 100644 index 0000000..fdb0822 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.user.entity.Food; +import com.example.umc9th.domain.user.entity.User; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_food") +public class UserFood { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_food_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "food_id") + private Food food; +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" new file mode 100644 index 0000000..4dd978f --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" @@ -0,0 +1,40 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.enums.UserMissionStatus; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_mission") +public class UserMission extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_mission_id") + private Long id; + + @Column(nullable = false) + @Enumerated(EnumType.STRING) + private UserMissionStatus status; + + @Column + private Integer dDay; + + // User와의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // Mission과의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "mission_id") + private Mission mission; + +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" new file mode 100644 index 0000000..0e46a62 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.user.entity.Term; +import com.example.umc9th.domain.user.entity.User; +import jakarta.persistence.*; + +import lombok.*; +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_term") +public class UserTerm { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_term_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "term_id") + private Term term; +} + + diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" new file mode 100644 index 0000000..e07fca7 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.user.enums; + +public enum Gender { + MALE, FEMALE, NONE +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" new file mode 100644 index 0000000..1473bd4 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.user.enums; + +public enum TermName { + AGE, SERVICE, PRIVACY, LOCATION, MARKETING +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/UserMissionStatus.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/UserMissionStatus.java" new file mode 100644 index 0000000..89c2c71 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/UserMissionStatus.java" @@ -0,0 +1,6 @@ +package com.example.umc9th.domain.user.enums; + +public enum UserMissionStatus { + CHALLENGING, + COMPLETE +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/FoodException.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/FoodException.java" new file mode 100644 index 0000000..32fdfb4 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/FoodException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.user.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class FoodException extends GeneralException { + + public FoodException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/UserException.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/UserException.java" new file mode 100644 index 0000000..44031b5 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/UserException.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.user.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class UserException extends GeneralException{ + public UserException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodErrorCode.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodErrorCode.java" new file mode 100644 index 0000000..f0f91fe --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodErrorCode.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.user.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum FoodErrorCode implements BaseErrorCode { + + FOOD_NOT_FOUND(HttpStatus.NOT_FOUND, "FOOD404_1", "음식을 찾을 수 없습니다."), + INVALID_FOOD_ID(HttpStatus.BAD_REQUEST, "FOOD400_1", "유효하지 않은 음식 ID입니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodSuccessCode.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodSuccessCode.java" new file mode 100644 index 0000000..6048d56 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodSuccessCode.java" @@ -0,0 +1,20 @@ +package com.example.umc9th.domain.user.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseSuccessCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum FoodSuccessCode implements BaseSuccessCode { + + FOUND(HttpStatus.OK, + "MEMBER200_1", + "성공적으로 조회했습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserErrorCode.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserErrorCode.java" new file mode 100644 index 0000000..29ddac6 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserErrorCode.java" @@ -0,0 +1,24 @@ +package com.example.umc9th.domain.user.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum UserErrorCode implements BaseErrorCode { + + NOT_FOUND(HttpStatus.NOT_FOUND, + "MEMBER404_1", + "해당 사용자를 찾지 못했습니다."), + + ALREADY_CHALLENGING(HttpStatus.BAD_REQUEST, + "MEMBER400_1", + "이미 진행중인 미션입니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserSuccessCode.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserSuccessCode.java" new file mode 100644 index 0000000..7fa877e --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserSuccessCode.java" @@ -0,0 +1,20 @@ +package com.example.umc9th.domain.user.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseSuccessCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum UserSuccessCode implements BaseSuccessCode { + + FOUND(HttpStatus.OK, + "MEMBER200_1", + "성공적으로 사용자를 조회했습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/FoodRepository.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/FoodRepository.java" new file mode 100644 index 0000000..d739c62 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/FoodRepository.java" @@ -0,0 +1,9 @@ +package com.example.umc9th.domain.user.repository; + +import com.example.umc9th.domain.user.entity.Food; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface FoodRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserFoodRepository.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserFoodRepository.java" new file mode 100644 index 0000000..0afa938 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserFoodRepository.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.user.repository; + +import com.example.umc9th.domain.user.entity.mapping.UserFood; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +// UserFoodRepository - UserFood 엔티티 관리 +@Repository +public interface UserFoodRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserMissionRepository.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserMissionRepository.java" new file mode 100644 index 0000000..15da22d --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserMissionRepository.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.user.repository; + +import com.example.umc9th.domain.user.entity.mapping.UserMission; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface UserMissionRepository extends JpaRepository { + // 이미 도전 중인 미션인지 확인 + Optional findByUserIdAndMissionId(Long userId, Long missionId); +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserRepository.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserRepository.java" new file mode 100644 index 0000000..8b1333d --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserRepository.java" @@ -0,0 +1,7 @@ +package com.example.umc9th.domain.user.repository; + +import com.example.umc9th.domain.user.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandService.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandService.java" new file mode 100644 index 0000000..31af9a4 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandService.java" @@ -0,0 +1,8 @@ +package com.example.umc9th.domain.user.service.command; + +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; + +public interface UserCommandService { + UserResDTO.JoinDTO signup(UserReqDTO.JoinDTO dto); // ReqDTO로 받아서 ResDTO로 반환 +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandServiceImpl.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandServiceImpl.java" new file mode 100644 index 0000000..49e86e7 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandServiceImpl.java" @@ -0,0 +1,65 @@ +package com.example.umc9th.domain.user.service.command; + +import com.example.umc9th.domain.user.converter.UserConverter; +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; +import com.example.umc9th.domain.user.entity.Food; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.entity.mapping.UserFood; +import com.example.umc9th.domain.user.exception.FoodException; +import com.example.umc9th.domain.user.exception.code.FoodErrorCode; +import com.example.umc9th.domain.user.repository.FoodRepository; +import com.example.umc9th.domain.user.repository.UserFoodRepository; +import com.example.umc9th.domain.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class UserCommandServiceImpl implements UserCommandService { + + private final UserRepository userRepository; + private final UserFoodRepository userFoodRepository; + private final FoodRepository foodRepository; + + @Override + @Transactional + public UserResDTO.JoinDTO signup(UserReqDTO.JoinDTO dto) { + // 사용자 생성 + User user = UserConverter.toUser(dto); + + // DB 저장 + userRepository.save(user); + + // 선호 음식 존재 여부 확인 + if (dto.preferCategory() != null && dto.preferCategory().size() > 0) { + + List userFoodList = new ArrayList<>(); + + // 선호 음식 ID 별 조회 + for (Long id : dto.preferCategory()) { + // 음식 존재 여부 검증 + Food food = foodRepository.findById(id) + .orElseThrow(() -> new FoodException(FoodErrorCode.FOOD_NOT_FOUND)); + + // UserFood 엔티티 생성 + UserFood userFood = UserFood.builder() + .user(user) + .food(food) + .build(); + + userFoodList.add(userFood); + } + + // DB 저장 + userFoodRepository.saveAll(userFoodList); + } + + // 응답 DTO로 변환 + return UserConverter.toJoinDTO(user); + } +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryService.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryService.java" new file mode 100644 index 0000000..d45073c --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryService.java" @@ -0,0 +1,4 @@ +package com.example.umc9th.domain.user.service.query; + +public class UserQueryService { +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryServiceImpl.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryServiceImpl.java" new file mode 100644 index 0000000..fd39b44 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryServiceImpl.java" @@ -0,0 +1,4 @@ +package com.example.umc9th.domain.user.service.query; + +public class UserQueryServiceImpl { +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/annotation/ExistFoods.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/annotation/ExistFoods.java" new file mode 100644 index 0000000..71049f1 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/annotation/ExistFoods.java" @@ -0,0 +1,21 @@ +package com.example.umc9th.global.annotation; + +import com.example.umc9th.global.validator.FoodExistValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import java.lang.annotation.Target; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Documented +@Constraint(validatedBy = FoodExistValidator.class) +@Target( { ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER }) +@Retention(RetentionPolicy.RUNTIME) +public @interface ExistFoods { + //여기서 디폴트 메시지를 설정합니다. + String message() default "해당 음식이 존재하지 않습니다."; + Class[] groups() default {}; + Class[] payload() default {}; +} \ No newline at end of file diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" new file mode 100644 index 0000000..e15b755 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" @@ -0,0 +1,37 @@ +package com.example.umc9th.global.apiPayload; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.code.BaseSuccessCode; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +@JsonPropertyOrder({"isSuccess", "code", "message", "result"}) +public class ApiResponse { + + @JsonProperty("isSuccess") + private final Boolean isSuccess; + + @JsonProperty("code") + private final String code; + + @JsonProperty("message") + private final String message; + + @JsonProperty("result") + private T result; + + + // ✅ 성공한 경우 (성공 코드 인터페이스 사용) + public static ApiResponse onSuccess(BaseSuccessCode code, T result) { + return new ApiResponse<>(true, code.getCode(), code.getMessage(), result); + } + + // 실패한 경우 (result 포함) + public static ApiResponse onFailure(BaseErrorCode code, T result) { + return new ApiResponse<>(false, code.getCode(), code.getMessage(), result); + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" new file mode 100644 index 0000000..d0d553f --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.global.apiPayload.code; + +import org.springframework.http.HttpStatus; + +public interface BaseErrorCode { + + HttpStatus getStatus(); + String getCode(); + String getMessage(); +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" new file mode 100644 index 0000000..19d1b22 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" @@ -0,0 +1,9 @@ +package com.example.umc9th.global.apiPayload.code; + +import org.springframework.http.HttpStatus; + +public interface BaseSuccessCode { + HttpStatus getStatus(); + String getCode(); + String getMessage(); +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" new file mode 100644 index 0000000..c1ed6f2 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.global.apiPayload.code; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum GeneralErrorCode implements BaseErrorCode{ + + BAD_REQUEST(HttpStatus.BAD_REQUEST, + "COMMON400_1", + "잘못된 요청입니다."), + UNAUTHORIZED(HttpStatus.UNAUTHORIZED, + "AUTH401_1", + "인증이 필요합니다."), + FORBIDDEN(HttpStatus.FORBIDDEN, + "AUTH403_1", + "요청이 거부되었습니다."), + NOT_FOUND(HttpStatus.NOT_FOUND, + "COMMON404_1", + "요청한 리소스를 찾을 수 없습니다."), + VALID_FAIL(HttpStatus.BAD_REQUEST, + "COMMON400_2", + "요청값이 올바르지 않습니다."), + INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, + "COMMON500_1", + "예기치 않은 서버 에러가 발생했습니다."), + ; + + + private final HttpStatus status; + private final String code; + private final String message; +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" new file mode 100644 index 0000000..ef060c8 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" @@ -0,0 +1,24 @@ +package com.example.umc9th.global.apiPayload.code; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum GeneralSuccessCode implements BaseSuccessCode { + + OK(HttpStatus.OK, + "COMMON200", + "요청이 성공적으로 처리되었습니다."), + CREATED(HttpStatus.CREATED, + "COMMON201", + "리소스가 성공적으로 생성되었습니다."), + NO_CONTENT(HttpStatus.NO_CONTENT, + "COMMON204", + "요청이 성공적으로 처리되었으며, 반환할 내용이 없습니다."), + ; + private final HttpStatus status; + private final String code; + private final String message; +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" new file mode 100644 index 0000000..902d4b5 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" @@ -0,0 +1,14 @@ +package com.example.umc9th.global.apiPayload.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.Getter; + +@Getter +public class GeneralException extends RuntimeException { + private final BaseErrorCode code; + + public GeneralException(BaseErrorCode code) { + super(code.getMessage()); + this.code = code; + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" new file mode 100644 index 0000000..ee21fd2 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" @@ -0,0 +1,50 @@ +package com.example.umc9th.global.apiPayload.handler; + +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.code.GeneralErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.util.HashMap; +import java.util.Map; + +@RestControllerAdvice +public class GeneralExceptionAdvice { + + // 1. 커스텀 예외 처리 + @ExceptionHandler(GeneralException.class) + public ResponseEntity> handleException(GeneralException ex) { + return ResponseEntity.status(ex.getCode().getStatus()) + .body(ApiResponse.onFailure(ex.getCode(), null)); + } + + // 2. @Valid 검증 실패 처리 + @ExceptionHandler(MethodArgumentNotValidException.class) + protected ResponseEntity>> handleMethodArgumentNotValidException( + MethodArgumentNotValidException ex + ) { + Map errors = new HashMap<>(); + + ex.getBindingResult().getFieldErrors().forEach(error -> + errors.put(error.getField(), error.getDefaultMessage()) + ); + + GeneralErrorCode code = GeneralErrorCode.VALID_FAIL; + ApiResponse> errorResponse = ApiResponse.onFailure(code, errors); + + return ResponseEntity.status(code.getStatus()).body(errorResponse); + } + + // 3. 그 외 모든 예외 + @ExceptionHandler(Exception.class) + public ResponseEntity> handleException(Exception ex) { + + BaseErrorCode code = GeneralErrorCode.INTERNAL_SERVER_ERROR; + return ResponseEntity.status(code.getStatus()) + .body(ApiResponse.onFailure(code, ex.getMessage())); + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" new file mode 100644 index 0000000..0ba8875 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" @@ -0,0 +1,15 @@ +package com.example.umc9th.global.config; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class QuerydslConfig { + + @Bean + public JPAQueryFactory jpaQueryFactory(EntityManager em) { + return new JPAQueryFactory(em); + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SwaggerConfig.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SwaggerConfig.java" new file mode 100644 index 0000000..70757f8 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SwaggerConfig.java" @@ -0,0 +1,47 @@ +package com.example.umc9th.global.config; + +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; +import io.swagger.v3.oas.models.servers.Server; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SwaggerConfig { + + @Bean + public OpenAPI openAPI() { + + // 기본 정보 + Info info = new Info() + .title("Project API") + .description("Project Swagger Documentation") + .version("0.0.1"); + + // JWT 인증 스키마 이름 + String schemeName = "JWT"; + + // JWT 인증 요구 + SecurityRequirement securityRequirement = new SecurityRequirement() + .addList(schemeName); + + // JWT 스키마 설정 + Components components = new Components() + .addSecuritySchemes(schemeName, + new SecurityScheme() + .name(schemeName) + .type(SecurityScheme.Type.HTTP) + .scheme("bearer") + .bearerFormat("JWT") + ); + + return new OpenAPI() + .info(info) + .addServersItem(new Server().url("/")) + .addSecurityItem(securityRequirement) + .components(components); + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" new file mode 100644 index 0000000..70f7459 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +@Getter +public abstract class BaseEntity { + + @CreatedDate + @Column(name = "created_at", nullable = false, updatable = false) + private LocalDateTime createdAt; + + @LastModifiedDate + @Column(name = "updated_at", nullable = false) + private LocalDateTime updatedAt; +} + diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/FoodExistValidator.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/FoodExistValidator.java" new file mode 100644 index 0000000..32ea16d --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/FoodExistValidator.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.global.validator; + +import com.example.umc9th.domain.user.repository.FoodRepository; +import com.example.umc9th.domain.user.exception.code.FoodErrorCode; +import com.example.umc9th.global.annotation.ExistFoods; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class FoodExistValidator implements ConstraintValidator> { + + private final FoodRepository foodRepository; + + @Override + public boolean isValid(List values, ConstraintValidatorContext context) { + + if (values == null || values.isEmpty()) return true; // 값 없으면 통과 + + boolean isValid = values.stream() + .allMatch(foodRepository::existsById); + + if (!isValid) { + context.disableDefaultConstraintViolation(); + context.buildConstraintViolationWithTemplate(FoodErrorCode.FOOD_NOT_FOUND.getMessage()) + .addConstraintViolation(); + } + + return isValid; + } +} diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" new file mode 100644 index 0000000..ec8fa85 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" @@ -0,0 +1,18 @@ +spring: + application: + name: umc9th + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${DB_URL} + username: ${DB_USER} + password: ${DB_PW} + + jpa: + database: mysql + show-sql: true + hibernate: + ddl-auto: update + properties: + hibernate: + format_sql: true diff --git "a/8\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" new file mode 100644 index 0000000..a96d2a7 --- /dev/null +++ "b/8\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" @@ -0,0 +1,13 @@ +package com.example.umc9th; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class Umc9thApplicationTests { + + @Test + void contextLoads() { + } + +} From cd9043cac0f8d5721fe17f516825bd607404ea62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EA=B2=BD=EC=88=98?= Date: Tue, 2 Dec 2025 17:32:52 +0900 Subject: [PATCH 8/9] =?UTF-8?q?[week9/mission]=20API=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/.DS_Store" | Bin 0 -> 8196 bytes .../src/main/java/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/java/com/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/java/com/example/.DS_Store" | Bin 0 -> 6148 bytes .../main/java/com/example/umc9th/.DS_Store" | Bin 0 -> 6148 bytes .../example/umc9th/Umc9thApplication.java" | 15 +++ .../controller/MissionController.java" | 34 ++++++ .../mission/converter/MissionConverter.java" | 29 +++++ .../mission/dto/res/MissionResDTO.java" | 35 +++++++ .../domain/mission/entity/Mission.java" | 47 +++++++++ .../mission/exception/MissionException.java" | 11 ++ .../repository/MissionRepository.java" | 11 ++ .../mission/service/MissionQueryService.java" | 44 ++++++++ .../review/controller/ReviewController.java" | 80 ++++++++++++++ .../review/converter/ReviewConverter.java" | 99 ++++++++++++++++++ .../domain/review/dto/ReviewResponse.java" | 24 +++++ .../domain/review/dto/req/ReviewReqDTO.java" | 23 ++++ .../domain/review/dto/res/ReviewResDTO.java" | 74 +++++++++++++ .../umc9th/domain/review/entity/Review.java" | 54 ++++++++++ .../domain/review/entity/ReviewPhoto.java" | 27 +++++ .../domain/review/entity/ReviewReply.java" | 26 +++++ .../review/exception/ReviewException.java" | 11 ++ .../exception/code/ReviewErrorCode.java" | 23 ++++ .../exception/code/ReviewSuccessCode.java" | 21 ++++ .../review/repository/ReviewRepository.java" | 11 ++ .../repository/ReviewRepositoryCustom.java" | 12 +++ .../repository/ReviewRepositoryImpl.java" | 47 +++++++++ .../command/ReviewCommandService.java" | 8 ++ .../command/ReviewCommandServiceImpl.java" | 46 ++++++++ .../service/query/ReviewQueryService.java" | 23 ++++ .../query/ReviewQueryServiceImpl.java" | 67 ++++++++++++ .../store/controller/StoreController.java" | 46 ++++++++ .../store/converter/StoreConverter.java" | 35 +++++++ .../domain/store/dto/req/StoreReqDTO.java" | 19 ++++ .../domain/store/dto/res/StoreResDTO.java" | 32 ++++++ .../umc9th/domain/store/entity/Location.java" | 30 ++++++ .../umc9th/domain/store/entity/Store.java" | 46 ++++++++ .../store/exception/StoreException.java" | 11 ++ .../store/exception/code/StoreErrorCode.java" | 21 ++++ .../store/repository/LocationRepository.java" | 7 ++ .../store/repository/StoreRepository.java" | 10 ++ .../service/command/StoreCommandService.java" | 10 ++ .../command/StoreCommandServiceImpl.java" | 88 ++++++++++++++++ .../test/controller/TestController.java" | 44 ++++++++ .../domain/test/converter/TestConverter.java" | 24 +++++ .../domain/test/dto/req/TestReqDTO.java" | 4 + .../domain/test/dto/res/TestResDTO.java" | 19 ++++ .../domain/test/exception/TestException.java" | 11 ++ .../test/exception/code/TestErrorCode.java" | 19 ++++ .../test/service/query/TestQueryService.java" | 5 + .../service/query/TestQueryServiceImpl.java" | 18 ++++ .../user/controller/UserController.java" | 27 +++++ .../domain/user/converter/UserConverter.java" | 35 +++++++ .../user/dto/UserReqDTO/UserReqDTO.java" | 22 ++++ .../user/dto/UserResDTO/UserResDTO.java" | 13 +++ .../umc9th/domain/user/entity/Food.java" | 26 +++++ .../umc9th/domain/user/entity/Term.java" | 23 ++++ .../umc9th/domain/user/entity/User.java" | 55 ++++++++++ .../domain/user/entity/mapping/UserFood.java" | 27 +++++ .../user/entity/mapping/UserMission.java" | 40 +++++++ .../domain/user/entity/mapping/UserTerm.java" | 30 ++++++ .../umc9th/domain/user/enums/Gender.java" | 5 + .../umc9th/domain/user/enums/TermName.java" | 5 + .../domain/user/enums/UserMissionStatus.java" | 6 ++ .../domain/user/exception/FoodException.java" | 11 ++ .../domain/user/exception/UserException.java" | 10 ++ .../user/exception/code/FoodErrorCode.java" | 19 ++++ .../user/exception/code/FoodSuccessCode.java" | 20 ++++ .../user/exception/code/UserErrorCode.java" | 24 +++++ .../user/exception/code/UserSuccessCode.java" | 20 ++++ .../user/repository/FoodRepository.java" | 9 ++ .../user/repository/UserFoodRepository.java" | 10 ++ .../repository/UserMissionRepository.java" | 15 +++ .../user/repository/UserRepository.java" | 7 ++ .../service/command/UserCommandService.java" | 8 ++ .../command/UserCommandServiceImpl.java" | 65 ++++++++++++ .../user/service/query/UserQueryService.java" | 4 + .../service/query/UserQueryServiceImpl.java" | 4 + .../umc9th/global/annotation/ExistFoods.java" | 21 ++++ .../global/apiPayload/ApiResponse.java" | 37 +++++++ .../apiPayload/code/BaseErrorCode.java" | 10 ++ .../apiPayload/code/BaseSuccessCode.java" | 9 ++ .../apiPayload/code/GeneralErrorCode.java" | 35 +++++++ .../apiPayload/code/GeneralSuccessCode.java" | 24 +++++ .../exception/GeneralException.java" | 14 +++ .../handler/GeneralExceptionAdvice.java" | 50 +++++++++ .../umc9th/global/config/QuerydslConfig.java" | 15 +++ .../umc9th/global/config/SwaggerConfig.java" | 47 +++++++++ .../umc9th/global/entity/BaseEntity.java" | 26 +++++ .../global/validator/FoodExistValidator.java" | 35 +++++++ .../umc9th/global/validator/ValidPage.java" | 17 +++ .../global/validator/ValidPageValidator.java" | 11 ++ .../src/main/resources/application.yml" | 18 ++++ .../umc9th/Umc9thApplicationTests.java" | 13 +++ 95 files changed, 2323 insertions(+) create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/.DS_Store" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/.DS_Store" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/.DS_Store" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/Umc9thApplication.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/controller/MissionController.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/converter/MissionConverter.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/dto/res/MissionResDTO.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/entity/Mission.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/exception/MissionException.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/repository/MissionRepository.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/service/MissionQueryService.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewSuccessCode.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/controller/StoreController.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/converter/StoreConverter.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/req/StoreReqDTO.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/res/StoreResDTO.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/StoreException.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/code/StoreErrorCode.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/LocationRepository.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/StoreRepository.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandService.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandServiceImpl.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/controller/UserController.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/converter/UserConverter.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserReqDTO/UserReqDTO.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserResDTO/UserResDTO.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/UserMissionStatus.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/FoodException.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/UserException.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodErrorCode.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodSuccessCode.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserErrorCode.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserSuccessCode.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/FoodRepository.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserFoodRepository.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserMissionRepository.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserRepository.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandService.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandServiceImpl.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryService.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryServiceImpl.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/annotation/ExistFoods.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SwaggerConfig.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/FoodExistValidator.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPage.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPageValidator.java" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" create mode 100644 "9\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..bf1533fda83f2590e59798c3022d849a002ae2d6 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O0O({YS3Oz1(EtrCp7B3;z7cim+m70*E!8BW%)E-J9XMG``#OHBl zcOw?-Rm9G~?l-@?*$=Wmj4|%d<1S+kW6Xwz$WhrK=-wErnPfzcV?>L58l^G<`_07u zI^efkY{Ej8u;|n%DbuLZ!{{m* zFGkM(naqkX$;LBPki=t1xxG%ZST1}y&*EIw20CCj?dHg7FPFVRuOqtMlT}A7`|hA4 zj{ELv)wB-|k4`T}Pw6C+FPcyed@I>ASivhOpX+%JW?3q;2k=$-RURQRKnxHA#K874 zV9o@)wY?P3%83DD;0Fe9e-O|RJ%go2wRJ#;*Jq4dh$x`rTLMuS^bD37Ap*j6DWERp z=83^|IrxRi^9+_6bvff|W*EoJTs>a6njQQ?r8Dknq@EZc2G$vi=y1%-j}m+8+#!3z#ZuU@qS2A6*L{uaY@5h2Q^^| zK(vzBVWB=39ipj-rXxBoDa}xUR3$1^5v3TA>cme)a_NYUODfeFqT~b7%7`))gsao@ zQ=vFRTGF_UJrH|frUyjsUdfI!gB6)EIe*WNIkq1(HGPXjMdhrj*~)BXj&h*?h*#gqbL+{*)QQ%n&5fxItxYFSs>-7Jb#1#d$DC2uJ1tE>^crCErkV8I zWP2RH*eSn9B>pVhbD?aHs?E`N_iKY0zOYD}?i&ki&-M3Md7o&8SNmjKZ_aafcm1k0>o>KfyLxs^%$r}$HLa$0sA&6k*0J^)e$H}D+dVv3vd!Sg z2zky8>_fJdSJee*9B_?MYl2tLpSO64t`8To_G1M*c%0WOO86{YuUoDt{Nw#5ZDgls z3QaSVPu1!AKEdtGThyAQARcq?3SArUX|LQ+)R42fLDL3~(GhZAm7KNfG=0!9vX;Y5 zRjRdY(Db3A^da9KFh`04YU4K+8yTkBMIe1B5pTv!($=7Q0g}Az$;Jo*6G?_@wj%=BpcMo=)PTK^fz=Awp+9bwsf)*y-Iz$ zK^{WrIki6B6rG8}ma?^U-Sx2j%wl8g6nmb%&d#v+*(dA^cAkCBF0$|059~+wGrPq8 zVwc$!b`=R!pb}N6!ChE|)o4HqTCoLf*otmEj2+mCM=*o~$lxFh97P@h3Mk@9JcDO( z8n56jyp4D8E)Fqb79Vg16uxBc& z5-VwZEwm{VqEB-P=X#-#?B1sJ+!mp5ajpRWf`v7;is&xwjoxh zpgY8Bc)HVYHbEh>G`UQxD+iYhsYxM5Ah(Vy6jmyqEu~Z1Jqm%G&yvFx+De7s&8y_F zA=yZ=rSL>J)Yc`NRSFwkF|kx%vbZJLkmMi`i)FP|ZHr0)#4E$Ot=ck;GYY40OYO-{ zg@S-9{~euY**W$lp>u-J`3w7%{lWf$0*=K<;XbS+Jl>Br*oaNoOsEu?+=d?XVmk&f zNVpuv2y!rS2!~-$!sa-h!YMqB7w{rp!pnFSui*^dz?+2D_wW(UPQzgDR1D(WWDFMj z^RDB$hlwXJtFk;rn9n>`pk7Y&Z~X<-@_$@F*RgDx?Ni-!i$)c4U0vk=-8cUJe~We( zFB^Lx_Q1{X04lrsyEDH0Vr f>4=U?N*pRT{X>8$FWdP3kMIA|%mnm~x&QwKEEa(0 literal 0 HcmV?d00001 diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..e75394bb032a7f3e1bc0dc623302290d5e4a9810 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8O({YS3Oz1(EtrZziU#y1Cs4q^2 z&U)Rk4i1mbE+;R^ER}DXP7Z7<*)v$dJ1Ax~ul^!UWcmc2D!a-eBnF59Vt^RfZU)S` zV0E{f23kEaKn&C{fct}hhUgkBHL9%xI=nt(yoHDYI=&?kg+bR~sSzR|T$cjsQf{6Y zT$h7im^{~DsZp0Ru4aaD%*@r}g{#@YFH}0?u14yK0b*d2fu=TXJpV7?m#KZ^ZAfRtt0>Hq1q^E*9E>MR&*I=m;M?t?T Q2c(ODB7{0(;1?M90yH~GdH?_b literal 0 HcmV?d00001 diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..0f3439b01922fe392d293f71afc805ed603d8992 GIT binary patch literal 6148 zcmeHK%}T>S5T0$TO({YT3Oz1(Em&=Z7B8XJ7cim+m70*C!8BX?V}(-4SzpK}@p+ut z-GJ2|Jc-yD*!^bbXE*af_6Gn&Zx$W`)BwQ2Mkq*GBV=CdD%fB`q30Mu0#PuZjDlp% zM1Rpl-(H3Yp23G9eENPBpyw?ZCGlk1Y`%*^v9z^acFIoGx%D2@+?)E-*`()>uW59l zR1)O6A6&-Kd{EmxRq51^(`c*{;xNLHo2xht)x4)>X*kijo^d!8r!uJ37mK5At07y* z?PWtQI?ZlFwmZ$`vf}LRADo;I9+P3JUJR82S=X{-F^5-FzEt((jnhP>_vp#9@@Ph8 zfEi#0n1Rh=z@7t6b+gLmYMB9M;0FxQ{vfdtx)w8odh5WBuFvEz5t5)zZwW$a(Y2Tv zL=TEEsfZ?3*e8ZC>1dZW&b62sH0dDp$~cc*Ie)wey*k>Z4hP{H!&&(?3{(OE08-C-l4xQrAO)K@M6IG}x`uARm& bNyj+XVrGzLA-hgTS5Z-NTn^J@v6nb3nS}@uQEnY&cFJMFuDz!1i2GeY5QhO+cob`o#5}(JJ z-OV8w@FrqsVE3DypWVy{*&oIjAFhHE#%#uz1r3p-QX*(BbyZ9-B3E;yZ04_%g&#@3 zWTL-l!f&s$6`QjsHeki?|L_-4n52&L$t%^`UcF&8td{lQ&E(okC+R8~PL_8#x|TBX zbA969gwyrdKDdx^Itk>JGC9h5>%uii3_Wc&>FJSUGOBnF59 zVt^RfJqFBKV6}FybgGybAO?P50QUz04be52X;fPWba;J6e+>}@bbL!73WKh}Oe1(e zxK0JssoXpZ6) zFH`!+FQ(9l7$64z83VjF@S5Z-NTn^J@v6nb3nS}@uQEnY&cFJMFuDm5WRgK4%jsXdfJ&iX<=iO=KA z?&c5-coVTRu=~x<&u->}>V;Vf`-UZsSq?*x@smEk*hf(mIUi`5yUd6 znCLH>@Y|a#WRlI9&&uEb5iH^;%^c^G*XoVEX3J_>9qYk+mTNEbvsF6wmv=b2mNE_s z-4AY}*?MXpT*xHzqhz*J2~jwMko(&x3FUe$S4o(vTu(c!w$+~6-Oc87)bEM@*Zrj%3(ee4!^d+7r@=X)TfpaDM1`BuxrBu_aw@hN0Jb}H)DPjqU0b+m{ zAO?1i0dp2uo!u*)DkcVqfgc#a{XsxObPeVj)z$$WUZ2t5Ktur@-x7$zpldMK2p$lw zQvr1K+e)#_juDx7gwBlW}pF;Hfpu7@_B|CjK~ zR6g>{DKsJmh=G5`0B=mZ$ry? missionPage) { + + return MissionResDTO.MissionPreviewListDTO.builder() + .missionList( + missionPage.getContent().stream() + .map(m -> MissionResDTO.MissionPreviewDTO.builder() + .missionId(m.getId()) + .title(m.getTitle()) + .description(m.getDescription()) + .rewardPoint(m.getPoint()) + .build() + ).toList() + ) + .currentPage(missionPage.getNumber() + 1) + .totalPage(missionPage.getTotalPages()) + .totalElements(missionPage.getTotalElements()) + .isFirst(missionPage.isFirst()) + .isLast(missionPage.isLast()) + .build(); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/dto/res/MissionResDTO.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/dto/res/MissionResDTO.java" new file mode 100644 index 0000000..d43811c --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/dto/res/MissionResDTO.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.domain.mission.dto.res; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +public class MissionResDTO { + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class MissionPreviewDTO { + private Long missionId; + private String title; + private String description; + private Integer rewardPoint; + } + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class MissionPreviewListDTO { + private List missionList; + private Integer currentPage; + private Integer totalPage; + private Long totalElements; + private Boolean isFirst; + private Boolean isLast; + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/entity/Mission.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/entity/Mission.java" new file mode 100644 index 0000000..1f1b6ed --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/entity/Mission.java" @@ -0,0 +1,47 @@ +package com.example.umc9th.domain.mission.entity; + +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.user.entity.mapping.UserMission; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "mission") +public class Mission extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "mission_id") + private Long id; + + @Column(nullable = false, length = 100) + private String title; + + @Column(columnDefinition = "TEXT") + private String description; + + @Column(nullable = false) + private Integer point; + + @Column(length = 50) + private String verification; + + // Store와의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; + + // UserMission과의 연관 관계 (1:N) + @OneToMany(mappedBy = "mission", cascade = CascadeType.ALL) + @Builder.Default + private List userMissionList = new ArrayList<>(); + +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/exception/MissionException.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/exception/MissionException.java" new file mode 100644 index 0000000..b0faea9 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/exception/MissionException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.mission.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class MissionException extends GeneralException { + + public MissionException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/repository/MissionRepository.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/repository/MissionRepository.java" new file mode 100644 index 0000000..a3b0c28 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/repository/MissionRepository.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.mission.repository; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.store.entity.Store; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MissionRepository extends JpaRepository { + Page findByStore(Store store, Pageable pageable); +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/service/MissionQueryService.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/service/MissionQueryService.java" new file mode 100644 index 0000000..57cdbac --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/service/MissionQueryService.java" @@ -0,0 +1,44 @@ +package com.example.umc9th.domain.mission.service; + +import com.example.umc9th.domain.mission.converter.MissionConverter; +import com.example.umc9th.domain.mission.dto.res.MissionResDTO; +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.mission.repository.MissionRepository; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.store.repository.StoreRepository; +import com.example.umc9th.domain.user.entity.mapping.UserMission; +import com.example.umc9th.domain.user.repository.UserMissionRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class MissionQueryService { + + private final MissionRepository missionRepository; + private final StoreRepository storeRepository; + private final UserMissionRepository userMissionRepository; + + public MissionResDTO.MissionPreviewListDTO getMissionsByStore(Long storeId, Integer page) { + + Store store = storeRepository.findById(storeId) + .orElseThrow(() -> new RuntimeException("Store not found")); + + PageRequest pageable = PageRequest.of(page - 1, 10); + + Page missionPage = missionRepository.findByStore(store, pageable); + + return MissionConverter.toMissionPreviewListDTO(missionPage); + } + + public MissionResDTO.MissionPreviewListDTO getMissionsByUser(Long userId, Integer page) { + PageRequest pageable = PageRequest.of(page - 1, 10); // 프론트엔드 1-based + Page missionPage = userMissionRepository.findByUserIdAndStatus(userId, "IN_PROGRESS", pageable); + + return MissionConverter.toMissionPreviewListDTO(missionPage); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" new file mode 100644 index 0000000..7ae5dbd --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" @@ -0,0 +1,80 @@ +package com.example.umc9th.domain.review.controller; + +import com.example.umc9th.domain.review.converter.ReviewConverter; +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.dto.req.ReviewReqDTO; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.domain.review.exception.code.ReviewSuccessCode; +import com.example.umc9th.domain.review.service.command.ReviewCommandService; +import com.example.umc9th.domain.review.service.query.ReviewQueryService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode; +import com.example.umc9th.global.validator.ValidPage; +import io.swagger.v3.oas.annotations.Operation; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; + +import org.springframework.data.domain.Page; + +import org.springframework.web.bind.annotation.*; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/reviews") +public class ReviewController { + + private final ReviewQueryService reviewQueryService; + private final ReviewCommandService reviewCommandService; + + /** + * 내가 작성한 리뷰 조회 API + */ + @Operation(summary = "내가 작성한 리뷰 조회", description = "사용자가 작성한 리뷰를 필터링하여 페이징 조회합니다.") + @GetMapping("/user/{userId}") + public ApiResponse getMyReviews( + @PathVariable Long userId, + @RequestParam(required = false) Long storeId, + @RequestParam(required = false) Integer minStar, + @RequestParam(required = false) Integer maxStar, + @ValidPage @RequestParam(defaultValue = "1") Integer page + ) { + + Page reviews = reviewQueryService.getReviewsByUserWithFilters( + userId, storeId, minStar, maxStar, page + ); + + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + ReviewConverter.toReviewListDTO(reviews) + ); + } + + /** + * 2. 가게에 리뷰 추가하기 API + * POST /reviews + */ + @PostMapping + public ApiResponse createReview( + @RequestBody @Valid ReviewReqDTO.CreateReviewDTO request + ) { + ReviewResDTO.CreateReviewResultDTO result = reviewCommandService.createReview(request); + return ApiResponse.onSuccess(GeneralSuccessCode.CREATED, result); + } + + // 가게의 리뷰 목록 조회 + @Operation(summary = "가게의 리뷰 목록 조회", description = "가게 이름으로 리뷰 리스트를 페이징하여 조회합니다.") + @GetMapping + public ApiResponse getReviews( + @RequestParam String storeName, + @RequestParam(defaultValue = "1") Integer page + ) { + ReviewResDTO.ReviewPreviewListDTO result = + reviewQueryService.findReview(storeName, page); + + return ApiResponse.onSuccess( + ReviewSuccessCode.REVIEW_FOUND, + result + ); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" new file mode 100644 index 0000000..1652e58 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" @@ -0,0 +1,99 @@ +package com.example.umc9th.domain.review.converter; + +import com.example.umc9th.domain.review.dto.req.ReviewReqDTO; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.user.entity.User; +import org.springframework.data.domain.Page; + +import java.util.List; +import java.util.stream.Collectors; + +public class ReviewConverter { + + /** + * 사용자의 리뷰 리스트 변환 + * Page → ReviewListDTO + */ + public static ReviewResDTO.ReviewListDTO toReviewListDTO(Page page) { + + List reviewDTOs = page.getContent().stream() + .map(r -> ReviewResDTO.ReviewDTO.builder() + .reviewId(r.getReviewId()) + .content(r.getContent()) + .star(r.getStar()) + .createdAt(r.getCreatedAt()) + .build() + ) + .collect(Collectors.toList()); + + return ReviewResDTO.ReviewListDTO.builder() + .reviews(reviewDTOs) + .currentPage(page.getNumber() + 1) // 1-based 페이지 + .totalElements(page.getTotalElements()) + .totalPages(page.getTotalPages()) + .isFirst(page.isFirst()) + .isLast(page.isLast()) + .build(); + } + + /** + * 단일 리뷰 변환 (ReviewResponse → ReviewDTO) + */ + private static ReviewResDTO.ReviewDTO toReviewDTO(ReviewResponse review) { + return ReviewResDTO.ReviewDTO.builder() + .reviewId(review.getReviewId()) + .content(review.getContent()) + .star(review.getStar()) + .build(); + } + + /** + * Review 생성 변환 (CreateReviewDTO → Review Entity) + */ + public static Review toReview(ReviewReqDTO.CreateReviewDTO dto, User user, Store store) { + return Review.builder() + .star(dto.getStar()) + .content(dto.getContent()) + .user(user) + .store(store) + .build(); + } + + /** + * 리뷰 생성 결과 변환 (Review → CreateReviewResultDTO) + */ + public static ReviewResDTO.CreateReviewResultDTO toCreateReviewResultDTO(Review review) { + return ReviewResDTO.CreateReviewResultDTO.builder() + .reviewId(review.getId()) + .createdAt(review.getCreatedAt()) + .build(); + } + + /** + * 가게 리뷰 목록 조회 변환 + * Page → ReviewPreviewListDTO + */ + public static ReviewResDTO.ReviewPreviewListDTO toReviewPreviewListDTO(Page reviewPage) { + return ReviewResDTO.ReviewPreviewListDTO.builder() + .reviewList( + reviewPage.getContent().stream() + .map(r -> ReviewResDTO.ReviewPreviewDTO.builder() + .ownerNickname(r.getUser().getName()) + .score(r.getStar()) + .body(r.getContent()) + .createdAt(r.getCreatedAt().toLocalDate()) + .build() + ).toList() + ) + .listSize(reviewPage.getSize()) + .totalPage(reviewPage.getTotalPages()) + .totalElements(reviewPage.getTotalElements()) + .isFirst(reviewPage.isFirst()) + .isLast(reviewPage.isLast()) + .build(); + } + +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" new file mode 100644 index 0000000..95f3e6f --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" @@ -0,0 +1,24 @@ +package com.example.umc9th.domain.review.dto; + +import com.querydsl.core.annotations.QueryProjection; +import lombok.Getter; + +import java.time.LocalDateTime; + +@Getter +public class ReviewResponse { + private Long reviewId; + private String content; + private Integer star; + private LocalDateTime createdAt; // ← 추가 + + @QueryProjection + public ReviewResponse(Long reviewId, String content, Integer star, LocalDateTime createdAt) { + this.reviewId = reviewId; + this.content = content; + this.star = star; + this.createdAt = createdAt; // ← 추가 + } +} + + diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" new file mode 100644 index 0000000..32d9429 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.review.dto.req; + +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; + +public class ReviewReqDTO { + + @Getter + public static class CreateReviewDTO { + @NotNull(message = "별점은 필수입니다.") + @Min(value = 1, message = "별점은 1 이상이어야 합니다.") + @Max(value = 5, message = "별점은 5 이하여야 합니다.") + private Integer star; + + private String content; + + @NotNull(message = "가게 ID는 필수입니다.") + private Long storeId; + } + +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" new file mode 100644 index 0000000..13d929e --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" @@ -0,0 +1,74 @@ +package com.example.umc9th.domain.review.dto.res; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +public class ReviewResDTO { + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewListDTO { + private List reviews; + private int currentPage; + private long totalElements; + private int totalPages; + private boolean isFirst; + private boolean isLast; + } + + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewDTO { + private Long reviewId; + private String content; + private Integer star; + private LocalDateTime createdAt; + } + + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class CreateReviewResultDTO { + private Long reviewId; + private LocalDateTime createdAt; + } + + // -------- 새로 추가된 DTO들 (가게 리뷰 조회) -------- + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewPreviewListDTO { + private List reviewList; + private Integer listSize; + private Integer totalPage; + private Long totalElements; + private Boolean isFirst; + private Boolean isLast; + } + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewPreviewDTO { + private String ownerNickname; + private Integer score; + private String body; + private LocalDate createdAt; + } +} + diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" new file mode 100644 index 0000000..9bc62ff --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" @@ -0,0 +1,54 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review") +public class Review extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_id") + private Long id; + + @Column(nullable = false) + private Integer star; + + @Column(columnDefinition = "TEXT") + private String content; + + // User와의 연관 관계 (N:1) - 연관 관계의 주인 + // Review 입장에서 User는 N:1 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // Store와의 연관 관계 (N:1) - 연관 관계의 주인 + // Review 입장에서 Store는 N:1 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; + + // ReviewPhoto와의 연관 관계 (1:N) + // Review 입장에서 ReviewPhoto는 1:N + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @Builder.Default + private List reviewPhotoList = new ArrayList<>(); + + // ReviewReply와의 연관 관계 (1:N) + // Review 입장에서 ReviewReply는 1:N // 헷갈림 + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @Builder.Default + private List reviewReplyList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" new file mode 100644 index 0000000..56310ba --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review_photo") +public class ReviewPhoto extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_photo_id") + private Long id; + + @Column(name = "review_photo_url", nullable = false) + private String reviewPhotoUrl; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" new file mode 100644 index 0000000..ccaa29e --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review_reply") +public class ReviewReply extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "reply_id") + private Long id; + + @Column(columnDefinition = "TEXT") + private String content; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" new file mode 100644 index 0000000..2ae42f6 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.review.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class ReviewException extends GeneralException { + + public ReviewException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" new file mode 100644 index 0000000..921f95a --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.review.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum ReviewErrorCode implements BaseErrorCode { + + // Review 관련 에러 + INVALID_USER_ID(HttpStatus.BAD_REQUEST, "REVIEW400_1", "유효하지 않은 사용자 ID입니다."), + INVALID_STAR_RANGE(HttpStatus.BAD_REQUEST, "REVIEW400_2", "별점은 1~5 사이여야 하며, 최소값이 최대값보다 클 수 없습니다."), + + REVIEW_NOT_FOUND(HttpStatus.NOT_FOUND, "REVIEW404_1", "리뷰를 찾을 수 없습니다."), + REVIEW_ACCESS_DENIED(HttpStatus.FORBIDDEN, "REVIEW403_1", "해당 리뷰에 접근할 권한이 없습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewSuccessCode.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewSuccessCode.java" new file mode 100644 index 0000000..2c57d1a --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewSuccessCode.java" @@ -0,0 +1,21 @@ +package com.example.umc9th.domain.review.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseSuccessCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum ReviewSuccessCode implements BaseSuccessCode { + + REVIEW_CREATED(HttpStatus.CREATED, "REVIEW201_1", "리뷰가 성공적으로 작성되었습니다."), + REVIEW_DELETED(HttpStatus.OK, "REVIEW200_1", "리뷰가 성공적으로 삭제되었습니다."), + REVIEW_UPDATED(HttpStatus.OK, "REVIEW200_2", "리뷰가 성공적으로 수정되었습니다."), + REVIEW_FOUND(HttpStatus.OK, "REVIEW200_3", "리뷰가 성공적으로 조회되었습니다.") + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" new file mode 100644 index 0000000..728d4b0 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.domain.store.entity.Store; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { + Page findByStore(Store store, Pageable pageable); +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" new file mode 100644 index 0000000..8e16350 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" @@ -0,0 +1,12 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.querydsl.core.BooleanBuilder; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +public interface ReviewRepositoryCustom { + + Page searchReview(BooleanBuilder builder, Pageable pageable); + +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" new file mode 100644 index 0000000..fde60e3 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" @@ -0,0 +1,47 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.dto.QReviewResponse; +import com.querydsl.core.BooleanBuilder; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Repository; + +import java.util.List; + +import static com.example.umc9th.domain.review.entity.QReview.review; + +@Repository +@RequiredArgsConstructor +public class ReviewRepositoryImpl implements ReviewRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + @Override + public Page searchReview(BooleanBuilder builder, Pageable pageable) { + + List content = queryFactory + .select(new QReviewResponse( + review.id, + review.content, + review.star, + review.createdAt + )) + .from(review) + .where(builder) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + + long total = queryFactory + .select(review.count()) + .from(review) + .where(builder) + .fetchOne(); + + return new PageImpl<>(content, pageable, total); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" new file mode 100644 index 0000000..261022c --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" @@ -0,0 +1,8 @@ +package com.example.umc9th.domain.review.service.command; + +import com.example.umc9th.domain.review.dto.req.ReviewReqDTO; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; + +public interface ReviewCommandService { + ReviewResDTO.CreateReviewResultDTO createReview(ReviewReqDTO.CreateReviewDTO dto); +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" new file mode 100644 index 0000000..35f0a73 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" @@ -0,0 +1,46 @@ +package com.example.umc9th.domain.review.service.command; + +import com.example.umc9th.domain.review.converter.ReviewConverter; +import com.example.umc9th.domain.review.dto.req.ReviewReqDTO; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.domain.review.repository.ReviewRepository; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.store.exception.StoreException; +import com.example.umc9th.domain.store.exception.code.StoreErrorCode; +import com.example.umc9th.domain.store.repository.StoreRepository; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional +public class ReviewCommandServiceImpl implements ReviewCommandService { + + private final ReviewRepository reviewRepository; + private final StoreRepository storeRepository; + private final UserRepository userRepository; + + @Override + public ReviewResDTO.CreateReviewResultDTO createReview(ReviewReqDTO.CreateReviewDTO dto) { + // 하드코딩된 유저 (DB에 있는 유저 ID 1번) + User user = userRepository.findById(1L) + .orElseThrow(() -> new RuntimeException("유저를 찾을 수 없습니다.")); + + // 가게 조회 + Store store = storeRepository.findById(dto.getStoreId()) + .orElseThrow(() -> new StoreException(StoreErrorCode.STORE_NOT_FOUND)); + + // Review 엔티티 생성 + Review review = ReviewConverter.toReview(dto, user, store); + + // DB 저장 + Review savedReview = reviewRepository.save(review); + + // 응답 DTO 반환 + return ReviewConverter.toCreateReviewResultDTO(savedReview); + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" new file mode 100644 index 0000000..f58bab7 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.review.service.query; + +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import org.springframework.data.domain.Page; + + +public interface ReviewQueryService { + + /** + * 사용자의 리뷰 조회 (필터링 포함) - 페이징 포함 + */ + Page getReviewsByUserWithFilters( + Long userId, + Long storeId, + Integer minStar, + Integer maxStar, + Integer page + ); + + ReviewResDTO.ReviewPreviewListDTO findReview(String storeName, Integer page); + +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" new file mode 100644 index 0000000..b5e9232 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" @@ -0,0 +1,67 @@ +package com.example.umc9th.domain.review.service.query; + +import com.example.umc9th.domain.review.converter.ReviewConverter; +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.entity.QReview; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.domain.review.repository.ReviewRepository; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.store.repository.StoreRepository; +import com.querydsl.core.BooleanBuilder; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class ReviewQueryServiceImpl implements ReviewQueryService { + + private final ReviewRepository reviewRepository; + private final StoreRepository storeRepository; + + @Override + public Page getReviewsByUserWithFilters( + Long userId, + Long storeId, + Integer minStar, + Integer maxStar, + Integer page + ) { + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(QReview.review.user.id.eq(userId)); + + if (storeId != null) builder.and(QReview.review.store.id.eq(storeId)); + if (minStar != null) builder.and(QReview.review.star.goe(minStar)); + if (maxStar != null) builder.and(QReview.review.star.loe(maxStar)); + + PageRequest pageable = PageRequest.of(page - 1, 10); + + return reviewRepository.searchReview(builder, pageable); + } + + /** + * 가게 리뷰 조회 + */ + + @Override + public ReviewResDTO.ReviewPreviewListDTO findReview(String storeName, Integer page) { + + Pageable pageable = PageRequest.of(page, 10); + + // 1) Store 조회 + Store store = storeRepository.findByName(storeName) + .orElseThrow(() -> new RuntimeException("Store not found")); + + // 2) Store의 리뷰 조회 + Page reviewPage = reviewRepository.findByStore(store, pageable); + + // 3) Converter 사용해 DTO로 변환 + return ReviewConverter.toReviewPreviewListDTO(reviewPage); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/controller/StoreController.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/controller/StoreController.java" new file mode 100644 index 0000000..4a7fec9 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/controller/StoreController.java" @@ -0,0 +1,46 @@ +package com.example.umc9th.domain.store.controller; + +import com.example.umc9th.domain.store.dto.req.StoreReqDTO; +import com.example.umc9th.domain.store.dto.res.StoreResDTO; +import com.example.umc9th.domain.store.service.command.StoreCommandService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/stores") +public class StoreController { + + private final StoreCommandService storeCommandService; + + /** + * 1. 특정 지역에 가게 추가하기 API + * POST /stores + */ + @PostMapping + public ApiResponse createStore( + @RequestBody @Valid StoreReqDTO.CreateStoreDTO request + ) { + StoreResDTO.CreateStoreResultDTO result = storeCommandService.createStore(request); + return ApiResponse.onSuccess(GeneralSuccessCode.CREATED, result); + } + + /** + * 2. 가게의 미션을 도전 중인 미션에 추가(미션 도전하기) API + * POST /stores/{storeId}/missions/{missionId}/challenge + */ + @PostMapping("/{storeId}/missions/{missionId}/challenge") + public ApiResponse challengeMission( + @PathVariable Long storeId, + @PathVariable Long missionId, + @RequestParam Long userId + ) { + StoreResDTO.ChallengeMissionResultDTO result = + storeCommandService.challengeMission(storeId, missionId, userId); + + return ApiResponse.onSuccess(GeneralSuccessCode.CREATED, result); + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/converter/StoreConverter.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/converter/StoreConverter.java" new file mode 100644 index 0000000..c0861ce --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/converter/StoreConverter.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.domain.store.converter; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.store.dto.req.StoreReqDTO; +import com.example.umc9th.domain.store.dto.res.StoreResDTO; +import com.example.umc9th.domain.store.entity.Location; +import com.example.umc9th.domain.store.entity.Store; + +public class StoreConverter { + + public static Store toStore(StoreReqDTO.CreateStoreDTO dto, Location location) { + return Store.builder() + .name(dto.getName()) + .detailAddress(dto.getDetailAddress()) + .location(location) + .build(); + } + + public static StoreResDTO.CreateStoreResultDTO toCreateStoreResultDTO(Store store) { + return StoreResDTO.CreateStoreResultDTO.builder() + .storeId(store.getId()) + .name(store.getName()) + .createdAt(store.getCreatedAt()) + .build(); + } + + public static StoreResDTO.ChallengeMissionResultDTO toChallengeMissionResultDTO(Store store, Mission mission) { + return StoreResDTO.ChallengeMissionResultDTO.builder() + .storeId(store.getId()) + .storeName(store.getName()) + .missionId(mission.getId()) + .missionName(mission.getTitle()) + .build(); + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/req/StoreReqDTO.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/req/StoreReqDTO.java" new file mode 100644 index 0000000..ee796bf --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/req/StoreReqDTO.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.store.dto.req; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; + +public class StoreReqDTO { + + @Getter + public static class CreateStoreDTO { + @NotBlank(message = "가게 이름은 필수입니다.") + private String name; + + private String detailAddress; + + @NotNull(message = "지역 ID는 필수입니다.") + private Long locationId; + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/res/StoreResDTO.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/res/StoreResDTO.java" new file mode 100644 index 0000000..76a10f6 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/res/StoreResDTO.java" @@ -0,0 +1,32 @@ +package com.example.umc9th.domain.store.dto.res; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +public class StoreResDTO { + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class CreateStoreResultDTO { + private Long storeId; + private String name; + private LocalDateTime createdAt; + } + + @Getter + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class ChallengeMissionResultDTO { + private Long storeId; + private String storeName; + private Long missionId; + private String missionName; + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" new file mode 100644 index 0000000..73384e1 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.store.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "location") +public class Location extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "location_id") + private Long id; + + @Column(name = "location_name", nullable = false, length = 50) + private String name; + + // Store와의 연관 관계 (1:N) + @OneToMany(mappedBy = "location", cascade = CascadeType.ALL) + @Builder.Default + private List storeList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" new file mode 100644 index 0000000..99ad0b6 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" @@ -0,0 +1,46 @@ +package com.example.umc9th.domain.store.entity; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "store") +public class Store extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "store_id") + private Long id; + + @Column(name = "store_name", nullable = false, length = 50) + private String name; + + @Column(name = "detailAddress", length = 100) + private String detailAddress; + + // Location과의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "location_id") + private Location location; + + // Review와의 연관 관계 (1:N) + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + @Builder.Default + private List reviewList = new ArrayList<>(); + + // Mission과의 연관 관계 (1:N) + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + @Builder.Default + private List missionList = new ArrayList<>(); + +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/StoreException.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/StoreException.java" new file mode 100644 index 0000000..296a979 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/StoreException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.store.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class StoreException extends GeneralException { + + public StoreException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/code/StoreErrorCode.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/code/StoreErrorCode.java" new file mode 100644 index 0000000..a1709e1 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/code/StoreErrorCode.java" @@ -0,0 +1,21 @@ +package com.example.umc9th.domain.store.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum StoreErrorCode implements BaseErrorCode { + + STORE_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE404_1", "가게를 찾을 수 없습니다."), + LOCATION_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE404_2", "지역을 찾을 수 없습니다."), + INVALID_STORE_ID(HttpStatus.BAD_REQUEST, "STORE400_1", "유효하지 않은 가게 ID입니다."), + MISSION_NOT_FOUND_IN_STORE(HttpStatus.NOT_FOUND, "STORE404_3", "가게에 해당 미션이 없습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/LocationRepository.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/LocationRepository.java" new file mode 100644 index 0000000..2feba23 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/LocationRepository.java" @@ -0,0 +1,7 @@ +package com.example.umc9th.domain.store.repository; + +import com.example.umc9th.domain.store.entity.Location; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface LocationRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/StoreRepository.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/StoreRepository.java" new file mode 100644 index 0000000..5f3dd67 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/StoreRepository.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.store.repository; + +import com.example.umc9th.domain.store.entity.Store; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface StoreRepository extends JpaRepository { + Optional findByName(String name); +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandService.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandService.java" new file mode 100644 index 0000000..7e2b19d --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandService.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.store.service.command; + +import com.example.umc9th.domain.store.dto.req.StoreReqDTO; +import com.example.umc9th.domain.store.dto.res.StoreResDTO; + +public interface StoreCommandService { + StoreResDTO.CreateStoreResultDTO createStore(StoreReqDTO.CreateStoreDTO dto); + StoreResDTO.ChallengeMissionResultDTO challengeMission(Long storeId, Long missionId, Long userId); +} + diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandServiceImpl.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandServiceImpl.java" new file mode 100644 index 0000000..82e93af --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandServiceImpl.java" @@ -0,0 +1,88 @@ +package com.example.umc9th.domain.store.service.command; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.store.converter.StoreConverter; +import com.example.umc9th.domain.store.dto.req.StoreReqDTO; +import com.example.umc9th.domain.store.dto.res.StoreResDTO; +import com.example.umc9th.domain.store.entity.Location; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.store.exception.StoreException; +import com.example.umc9th.domain.store.exception.code.StoreErrorCode; +import com.example.umc9th.domain.store.repository.LocationRepository; +import com.example.umc9th.domain.store.repository.StoreRepository; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.entity.mapping.UserMission; +import com.example.umc9th.domain.user.enums.UserMissionStatus; +import com.example.umc9th.domain.user.exception.UserException; +import com.example.umc9th.domain.user.repository.UserMissionRepository; +import com.example.umc9th.domain.user.repository.UserRepository; +import com.example.umc9th.domain.user.exception.code.UserErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +@Service +@RequiredArgsConstructor +@Transactional +public class StoreCommandServiceImpl implements StoreCommandService { + + private final StoreRepository storeRepository; + private final LocationRepository locationRepository; + private final UserMissionRepository userMissionRepository; + private final UserRepository userRepository; + + // 특정 지역에 가게 추가하기 + @Override + public StoreResDTO.CreateStoreResultDTO createStore(StoreReqDTO.CreateStoreDTO dto) { + // 지역 조회 + Location location = locationRepository.findById(dto.getLocationId()) + .orElseThrow(() -> new StoreException(StoreErrorCode.LOCATION_NOT_FOUND)); + + // Store 엔티티 생성 + Store store = StoreConverter.toStore(dto, location); + + // DB 저장 + Store savedStore = storeRepository.save(store); + + // 응답 DTO 반환 + return StoreConverter.toCreateStoreResultDTO(savedStore); + } + + // 미션 도전하기 + @Override + public StoreResDTO.ChallengeMissionResultDTO challengeMission(Long storeId, Long missionId, Long userId) { + // 가게 조회 + Store store = storeRepository.findById(storeId) + .orElseThrow(() -> new StoreException(StoreErrorCode.STORE_NOT_FOUND)); + + // 미션 조회 + Mission mission = store.getMissionList().stream() + .filter(m -> m.getId().equals(missionId)) + .findFirst() + .orElseThrow(() -> new StoreException(StoreErrorCode.MISSION_NOT_FOUND_IN_STORE)); + + // 유저 조회 + User user = userRepository.findById(userId) + .orElseThrow(() -> new UserException(UserErrorCode.NOT_FOUND)); + + Optional existing = userMissionRepository.findByUserIdAndMissionId(userId, missionId); + if(existing.isPresent()) { + throw new UserException(UserErrorCode.ALREADY_CHALLENGING); + } + + // UserMission 엔티티 생성 + UserMission userMission = UserMission.builder() + .mission(mission) + .user(user) + .status(UserMissionStatus.CHALLENGING) // 도전 중 상태로 설정 + .build(); + + // DB 저장 + userMissionRepository.save(userMission); + + // 응답 DTO 반환 + return StoreConverter.toChallengeMissionResultDTO(store, mission); + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" new file mode 100644 index 0000000..851510f --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" @@ -0,0 +1,44 @@ +package com.example.umc9th.domain.test.controller; + +import com.example.umc9th.domain.test.converter.TestConverter; +import com.example.umc9th.domain.test.dto.res.TestResDTO; +import com.example.umc9th.domain.test.service.query.TestQueryService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/temp") +public class TestController { + + private final TestQueryService testQueryService; + + @GetMapping("/test") + public ApiResponse test() { + // 응답 코드 정의 + GeneralSuccessCode code = GeneralSuccessCode.OK; + + return ApiResponse.onSuccess( + code, + TestConverter.toTestingDTO("This is Test!") + ); + } + + // 예외 상황 + @GetMapping("/exception") + public ApiResponse exception( + @RequestParam Long flag + ) { + + testQueryService.checkFlag(flag); + + // 응답 코드 정의 + GeneralSuccessCode code = GeneralSuccessCode.OK; + return ApiResponse.onSuccess(code, TestConverter.toExceptionDTO("This is Test!")); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" new file mode 100644 index 0000000..af81183 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" @@ -0,0 +1,24 @@ +package com.example.umc9th.domain.test.converter; + +import com.example.umc9th.domain.test.dto.res.TestResDTO; + +public class TestConverter { + + // 객체 -> DTO + public static TestResDTO.Testing toTestingDTO( + String testing + ) { + return TestResDTO.Testing.builder() + .testString(testing) + .build(); + } + + // 객체 -> DTO + public static TestResDTO.Exception toExceptionDTO( + String testing + ){ + return TestResDTO.Exception.builder() + .testString(testing) + .build(); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" new file mode 100644 index 0000000..405e3b9 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" @@ -0,0 +1,4 @@ +package com.example.umc9th.domain.test.dto.req; + +public class TestReqDTO { +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" new file mode 100644 index 0000000..9f13f52 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.test.dto.res; + +import lombok.Builder; +import lombok.Getter; + +public class TestResDTO { + + @Builder + @Getter + public static class Testing { + private String testString; + } + + @Builder + @Getter + public static class Exception { + private String testString; + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" new file mode 100644 index 0000000..c26ed05 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.test.exception; + +import com.example.umc9th.global.apiPayload.exception.GeneralException; +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; + +public class TestException extends GeneralException { + + public TestException(BaseErrorCode code) { + super(code); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" new file mode 100644 index 0000000..7264f21 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.test.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum TestErrorCode implements BaseErrorCode { + + // For test + TEST_EXCEPTION(HttpStatus.BAD_REQUEST, "TEST400_1", "이거는 테스트"), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" new file mode 100644 index 0000000..a6419ab --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.test.service.query; + +public interface TestQueryService { + void checkFlag(Long flag); +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" new file mode 100644 index 0000000..1af8423 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" @@ -0,0 +1,18 @@ +package com.example.umc9th.domain.test.service.query; + +import com.example.umc9th.domain.test.exception.TestException; +import com.example.umc9th.domain.test.exception.code.TestErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class TestQueryServiceImpl implements TestQueryService { + + @Override + public void checkFlag(Long flag) { + if (flag == 1) { + throw new TestException(TestErrorCode.TEST_EXCEPTION); + } + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/controller/UserController.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/controller/UserController.java" new file mode 100644 index 0000000..84c50ba --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/controller/UserController.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.user.controller; + +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; +import com.example.umc9th.domain.user.exception.code.UserSuccessCode; +import com.example.umc9th.domain.user.service.command.UserCommandService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class UserController { + + private final UserCommandService userCommandService; + + @PostMapping("/sign-up") + public ApiResponse signUp( + @RequestBody @Valid UserReqDTO.JoinDTO dto + ){ + UserResDTO.JoinDTO response = userCommandService.signup(dto); + return ApiResponse.onSuccess(UserSuccessCode.FOUND, response); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/converter/UserConverter.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/converter/UserConverter.java" new file mode 100644 index 0000000..2b68fe1 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/converter/UserConverter.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.domain.user.converter; + +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; +import com.example.umc9th.domain.user.entity.User; + +public class UserConverter { + + // Entity -> DTO + public static UserResDTO.JoinDTO toJoinDTO(User user) { + return UserResDTO.JoinDTO.builder() + .userId(user.getId()) + .createAt(user.getCreatedAt()) + .build(); + } + + // DTO -> Entity + public static User toUser(UserReqDTO.JoinDTO dto) { + // address와 specAddress를 합쳐서 저장 + String fullAddress = dto.address(); + if (dto.specAddress() != null && !dto.specAddress().isEmpty()) { + fullAddress = dto.address() + " " + dto.specAddress(); + } + + return User.builder() + .name(dto.name()) + .birth(dto.birth()) + .address(fullAddress) + .gender(dto.gender()) + .email(dto.email()) + .password(dto.password()) + .phoneNum(dto.phoneNum()) + .build(); + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserReqDTO/UserReqDTO.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserReqDTO/UserReqDTO.java" new file mode 100644 index 0000000..ba26efc --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserReqDTO/UserReqDTO.java" @@ -0,0 +1,22 @@ +package com.example.umc9th.domain.user.dto.UserReqDTO; + +import com.example.umc9th.domain.user.enums.Gender; +import com.example.umc9th.global.annotation.ExistFoods; + +import java.time.LocalDate; +import java.util.List; + +public class UserReqDTO { + public record JoinDTO( + String name, + Gender gender, + LocalDate birth, + String address, // Address -> String으로 변경 + String specAddress, + String email, + String password, + String phoneNum, + @ExistFoods + List preferCategory + ) {} +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserResDTO/UserResDTO.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserResDTO/UserResDTO.java" new file mode 100644 index 0000000..e26317c --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserResDTO/UserResDTO.java" @@ -0,0 +1,13 @@ +package com.example.umc9th.domain.user.dto.UserResDTO; + +import lombok.Builder; + +import java.time.LocalDateTime; + +public class UserResDTO { + @Builder + public record JoinDTO( + Long userId, // memberId -> userId로 변경 + LocalDateTime createAt + ){} +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" new file mode 100644 index 0000000..ca884aa --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.domain.user.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Builder +@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED) +@AllArgsConstructor(access = lombok.AccessLevel.PRIVATE) +@Getter +@Table(name = "food") + +public class Food { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "food_id") + private Long id; + + @Column(nullable = false, length = 50) + private String foodName; + +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" new file mode 100644 index 0000000..03bf421 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.user.entity; + +import com.example.umc9th.domain.user.enums.TermName; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Table(name = "term") +public class Term { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "term_id") // DB 컬럼명 명시 + private Long id; + + @Column(name = "term_name", nullable = false) // ENUM 컬럼만 남김 + @Enumerated(EnumType.STRING) + private TermName name; +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" new file mode 100644 index 0000000..b75ff30 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" @@ -0,0 +1,55 @@ +package com.example.umc9th.domain.user.entity; + +import com.example.umc9th.domain.user.entity.mapping.UserFood; +import com.example.umc9th.domain.user.enums.Gender; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user") +public class User extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_id") + private Long id; + + @Column(nullable = false, length = 50) + private String name; + + @Enumerated(EnumType.STRING) + @Builder.Default + @Column(nullable = false) + private Gender gender = Gender.NONE; + + @Column(nullable = false, length = 50, unique = true) + private String email; + + @Column + private LocalDate birth; + + @Column + private String address; + + @Column(nullable = false) + private String password; + + @Column(length = 20) + private String phoneNum; + + @Builder.Default + @Column(nullable = false) + private Integer point = 0; + + @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) + private List userFoodList = new ArrayList<>(); +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" new file mode 100644 index 0000000..fdb0822 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.user.entity.Food; +import com.example.umc9th.domain.user.entity.User; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_food") +public class UserFood { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_food_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "food_id") + private Food food; +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" new file mode 100644 index 0000000..4dd978f --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" @@ -0,0 +1,40 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.enums.UserMissionStatus; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_mission") +public class UserMission extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_mission_id") + private Long id; + + @Column(nullable = false) + @Enumerated(EnumType.STRING) + private UserMissionStatus status; + + @Column + private Integer dDay; + + // User와의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // Mission과의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "mission_id") + private Mission mission; + +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" new file mode 100644 index 0000000..0e46a62 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.user.entity.Term; +import com.example.umc9th.domain.user.entity.User; +import jakarta.persistence.*; + +import lombok.*; +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_term") +public class UserTerm { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_term_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "term_id") + private Term term; +} + + diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" new file mode 100644 index 0000000..e07fca7 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.user.enums; + +public enum Gender { + MALE, FEMALE, NONE +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" new file mode 100644 index 0000000..1473bd4 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.user.enums; + +public enum TermName { + AGE, SERVICE, PRIVACY, LOCATION, MARKETING +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/UserMissionStatus.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/UserMissionStatus.java" new file mode 100644 index 0000000..89c2c71 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/UserMissionStatus.java" @@ -0,0 +1,6 @@ +package com.example.umc9th.domain.user.enums; + +public enum UserMissionStatus { + CHALLENGING, + COMPLETE +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/FoodException.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/FoodException.java" new file mode 100644 index 0000000..32fdfb4 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/FoodException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.user.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class FoodException extends GeneralException { + + public FoodException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/UserException.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/UserException.java" new file mode 100644 index 0000000..44031b5 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/UserException.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.user.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class UserException extends GeneralException{ + public UserException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodErrorCode.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodErrorCode.java" new file mode 100644 index 0000000..f0f91fe --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodErrorCode.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.user.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum FoodErrorCode implements BaseErrorCode { + + FOOD_NOT_FOUND(HttpStatus.NOT_FOUND, "FOOD404_1", "음식을 찾을 수 없습니다."), + INVALID_FOOD_ID(HttpStatus.BAD_REQUEST, "FOOD400_1", "유효하지 않은 음식 ID입니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodSuccessCode.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodSuccessCode.java" new file mode 100644 index 0000000..6048d56 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodSuccessCode.java" @@ -0,0 +1,20 @@ +package com.example.umc9th.domain.user.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseSuccessCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum FoodSuccessCode implements BaseSuccessCode { + + FOUND(HttpStatus.OK, + "MEMBER200_1", + "성공적으로 조회했습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserErrorCode.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserErrorCode.java" new file mode 100644 index 0000000..29ddac6 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserErrorCode.java" @@ -0,0 +1,24 @@ +package com.example.umc9th.domain.user.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum UserErrorCode implements BaseErrorCode { + + NOT_FOUND(HttpStatus.NOT_FOUND, + "MEMBER404_1", + "해당 사용자를 찾지 못했습니다."), + + ALREADY_CHALLENGING(HttpStatus.BAD_REQUEST, + "MEMBER400_1", + "이미 진행중인 미션입니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserSuccessCode.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserSuccessCode.java" new file mode 100644 index 0000000..7fa877e --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserSuccessCode.java" @@ -0,0 +1,20 @@ +package com.example.umc9th.domain.user.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseSuccessCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum UserSuccessCode implements BaseSuccessCode { + + FOUND(HttpStatus.OK, + "MEMBER200_1", + "성공적으로 사용자를 조회했습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/FoodRepository.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/FoodRepository.java" new file mode 100644 index 0000000..d739c62 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/FoodRepository.java" @@ -0,0 +1,9 @@ +package com.example.umc9th.domain.user.repository; + +import com.example.umc9th.domain.user.entity.Food; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface FoodRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserFoodRepository.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserFoodRepository.java" new file mode 100644 index 0000000..0afa938 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserFoodRepository.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.user.repository; + +import com.example.umc9th.domain.user.entity.mapping.UserFood; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +// UserFoodRepository - UserFood 엔티티 관리 +@Repository +public interface UserFoodRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserMissionRepository.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserMissionRepository.java" new file mode 100644 index 0000000..268905d --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserMissionRepository.java" @@ -0,0 +1,15 @@ +package com.example.umc9th.domain.user.repository; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.user.entity.mapping.UserMission; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface UserMissionRepository extends JpaRepository { + // 이미 도전 중인 미션인지 확인 + Optional findByUserIdAndMissionId(Long userId, Long missionId); + Page findByUserIdAndStatus(Long userId, String status, Pageable pageable); +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserRepository.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserRepository.java" new file mode 100644 index 0000000..8b1333d --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserRepository.java" @@ -0,0 +1,7 @@ +package com.example.umc9th.domain.user.repository; + +import com.example.umc9th.domain.user.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandService.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandService.java" new file mode 100644 index 0000000..31af9a4 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandService.java" @@ -0,0 +1,8 @@ +package com.example.umc9th.domain.user.service.command; + +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; + +public interface UserCommandService { + UserResDTO.JoinDTO signup(UserReqDTO.JoinDTO dto); // ReqDTO로 받아서 ResDTO로 반환 +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandServiceImpl.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandServiceImpl.java" new file mode 100644 index 0000000..49e86e7 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandServiceImpl.java" @@ -0,0 +1,65 @@ +package com.example.umc9th.domain.user.service.command; + +import com.example.umc9th.domain.user.converter.UserConverter; +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; +import com.example.umc9th.domain.user.entity.Food; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.entity.mapping.UserFood; +import com.example.umc9th.domain.user.exception.FoodException; +import com.example.umc9th.domain.user.exception.code.FoodErrorCode; +import com.example.umc9th.domain.user.repository.FoodRepository; +import com.example.umc9th.domain.user.repository.UserFoodRepository; +import com.example.umc9th.domain.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class UserCommandServiceImpl implements UserCommandService { + + private final UserRepository userRepository; + private final UserFoodRepository userFoodRepository; + private final FoodRepository foodRepository; + + @Override + @Transactional + public UserResDTO.JoinDTO signup(UserReqDTO.JoinDTO dto) { + // 사용자 생성 + User user = UserConverter.toUser(dto); + + // DB 저장 + userRepository.save(user); + + // 선호 음식 존재 여부 확인 + if (dto.preferCategory() != null && dto.preferCategory().size() > 0) { + + List userFoodList = new ArrayList<>(); + + // 선호 음식 ID 별 조회 + for (Long id : dto.preferCategory()) { + // 음식 존재 여부 검증 + Food food = foodRepository.findById(id) + .orElseThrow(() -> new FoodException(FoodErrorCode.FOOD_NOT_FOUND)); + + // UserFood 엔티티 생성 + UserFood userFood = UserFood.builder() + .user(user) + .food(food) + .build(); + + userFoodList.add(userFood); + } + + // DB 저장 + userFoodRepository.saveAll(userFoodList); + } + + // 응답 DTO로 변환 + return UserConverter.toJoinDTO(user); + } +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryService.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryService.java" new file mode 100644 index 0000000..d45073c --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryService.java" @@ -0,0 +1,4 @@ +package com.example.umc9th.domain.user.service.query; + +public class UserQueryService { +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryServiceImpl.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryServiceImpl.java" new file mode 100644 index 0000000..fd39b44 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryServiceImpl.java" @@ -0,0 +1,4 @@ +package com.example.umc9th.domain.user.service.query; + +public class UserQueryServiceImpl { +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/annotation/ExistFoods.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/annotation/ExistFoods.java" new file mode 100644 index 0000000..71049f1 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/annotation/ExistFoods.java" @@ -0,0 +1,21 @@ +package com.example.umc9th.global.annotation; + +import com.example.umc9th.global.validator.FoodExistValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import java.lang.annotation.Target; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Documented +@Constraint(validatedBy = FoodExistValidator.class) +@Target( { ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER }) +@Retention(RetentionPolicy.RUNTIME) +public @interface ExistFoods { + //여기서 디폴트 메시지를 설정합니다. + String message() default "해당 음식이 존재하지 않습니다."; + Class[] groups() default {}; + Class[] payload() default {}; +} \ No newline at end of file diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" new file mode 100644 index 0000000..e15b755 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" @@ -0,0 +1,37 @@ +package com.example.umc9th.global.apiPayload; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.code.BaseSuccessCode; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +@JsonPropertyOrder({"isSuccess", "code", "message", "result"}) +public class ApiResponse { + + @JsonProperty("isSuccess") + private final Boolean isSuccess; + + @JsonProperty("code") + private final String code; + + @JsonProperty("message") + private final String message; + + @JsonProperty("result") + private T result; + + + // ✅ 성공한 경우 (성공 코드 인터페이스 사용) + public static ApiResponse onSuccess(BaseSuccessCode code, T result) { + return new ApiResponse<>(true, code.getCode(), code.getMessage(), result); + } + + // 실패한 경우 (result 포함) + public static ApiResponse onFailure(BaseErrorCode code, T result) { + return new ApiResponse<>(false, code.getCode(), code.getMessage(), result); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" new file mode 100644 index 0000000..d0d553f --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.global.apiPayload.code; + +import org.springframework.http.HttpStatus; + +public interface BaseErrorCode { + + HttpStatus getStatus(); + String getCode(); + String getMessage(); +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" new file mode 100644 index 0000000..19d1b22 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" @@ -0,0 +1,9 @@ +package com.example.umc9th.global.apiPayload.code; + +import org.springframework.http.HttpStatus; + +public interface BaseSuccessCode { + HttpStatus getStatus(); + String getCode(); + String getMessage(); +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" new file mode 100644 index 0000000..c1ed6f2 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.global.apiPayload.code; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum GeneralErrorCode implements BaseErrorCode{ + + BAD_REQUEST(HttpStatus.BAD_REQUEST, + "COMMON400_1", + "잘못된 요청입니다."), + UNAUTHORIZED(HttpStatus.UNAUTHORIZED, + "AUTH401_1", + "인증이 필요합니다."), + FORBIDDEN(HttpStatus.FORBIDDEN, + "AUTH403_1", + "요청이 거부되었습니다."), + NOT_FOUND(HttpStatus.NOT_FOUND, + "COMMON404_1", + "요청한 리소스를 찾을 수 없습니다."), + VALID_FAIL(HttpStatus.BAD_REQUEST, + "COMMON400_2", + "요청값이 올바르지 않습니다."), + INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, + "COMMON500_1", + "예기치 않은 서버 에러가 발생했습니다."), + ; + + + private final HttpStatus status; + private final String code; + private final String message; +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" new file mode 100644 index 0000000..ef060c8 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" @@ -0,0 +1,24 @@ +package com.example.umc9th.global.apiPayload.code; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum GeneralSuccessCode implements BaseSuccessCode { + + OK(HttpStatus.OK, + "COMMON200", + "요청이 성공적으로 처리되었습니다."), + CREATED(HttpStatus.CREATED, + "COMMON201", + "리소스가 성공적으로 생성되었습니다."), + NO_CONTENT(HttpStatus.NO_CONTENT, + "COMMON204", + "요청이 성공적으로 처리되었으며, 반환할 내용이 없습니다."), + ; + private final HttpStatus status; + private final String code; + private final String message; +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" new file mode 100644 index 0000000..902d4b5 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" @@ -0,0 +1,14 @@ +package com.example.umc9th.global.apiPayload.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.Getter; + +@Getter +public class GeneralException extends RuntimeException { + private final BaseErrorCode code; + + public GeneralException(BaseErrorCode code) { + super(code.getMessage()); + this.code = code; + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" new file mode 100644 index 0000000..ee21fd2 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" @@ -0,0 +1,50 @@ +package com.example.umc9th.global.apiPayload.handler; + +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.code.GeneralErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.util.HashMap; +import java.util.Map; + +@RestControllerAdvice +public class GeneralExceptionAdvice { + + // 1. 커스텀 예외 처리 + @ExceptionHandler(GeneralException.class) + public ResponseEntity> handleException(GeneralException ex) { + return ResponseEntity.status(ex.getCode().getStatus()) + .body(ApiResponse.onFailure(ex.getCode(), null)); + } + + // 2. @Valid 검증 실패 처리 + @ExceptionHandler(MethodArgumentNotValidException.class) + protected ResponseEntity>> handleMethodArgumentNotValidException( + MethodArgumentNotValidException ex + ) { + Map errors = new HashMap<>(); + + ex.getBindingResult().getFieldErrors().forEach(error -> + errors.put(error.getField(), error.getDefaultMessage()) + ); + + GeneralErrorCode code = GeneralErrorCode.VALID_FAIL; + ApiResponse> errorResponse = ApiResponse.onFailure(code, errors); + + return ResponseEntity.status(code.getStatus()).body(errorResponse); + } + + // 3. 그 외 모든 예외 + @ExceptionHandler(Exception.class) + public ResponseEntity> handleException(Exception ex) { + + BaseErrorCode code = GeneralErrorCode.INTERNAL_SERVER_ERROR; + return ResponseEntity.status(code.getStatus()) + .body(ApiResponse.onFailure(code, ex.getMessage())); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" new file mode 100644 index 0000000..0ba8875 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" @@ -0,0 +1,15 @@ +package com.example.umc9th.global.config; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class QuerydslConfig { + + @Bean + public JPAQueryFactory jpaQueryFactory(EntityManager em) { + return new JPAQueryFactory(em); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SwaggerConfig.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SwaggerConfig.java" new file mode 100644 index 0000000..70757f8 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SwaggerConfig.java" @@ -0,0 +1,47 @@ +package com.example.umc9th.global.config; + +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; +import io.swagger.v3.oas.models.servers.Server; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SwaggerConfig { + + @Bean + public OpenAPI openAPI() { + + // 기본 정보 + Info info = new Info() + .title("Project API") + .description("Project Swagger Documentation") + .version("0.0.1"); + + // JWT 인증 스키마 이름 + String schemeName = "JWT"; + + // JWT 인증 요구 + SecurityRequirement securityRequirement = new SecurityRequirement() + .addList(schemeName); + + // JWT 스키마 설정 + Components components = new Components() + .addSecuritySchemes(schemeName, + new SecurityScheme() + .name(schemeName) + .type(SecurityScheme.Type.HTTP) + .scheme("bearer") + .bearerFormat("JWT") + ); + + return new OpenAPI() + .info(info) + .addServersItem(new Server().url("/")) + .addSecurityItem(securityRequirement) + .components(components); + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" new file mode 100644 index 0000000..70f7459 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +@Getter +public abstract class BaseEntity { + + @CreatedDate + @Column(name = "created_at", nullable = false, updatable = false) + private LocalDateTime createdAt; + + @LastModifiedDate + @Column(name = "updated_at", nullable = false) + private LocalDateTime updatedAt; +} + diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/FoodExistValidator.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/FoodExistValidator.java" new file mode 100644 index 0000000..32ea16d --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/FoodExistValidator.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.global.validator; + +import com.example.umc9th.domain.user.repository.FoodRepository; +import com.example.umc9th.domain.user.exception.code.FoodErrorCode; +import com.example.umc9th.global.annotation.ExistFoods; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class FoodExistValidator implements ConstraintValidator> { + + private final FoodRepository foodRepository; + + @Override + public boolean isValid(List values, ConstraintValidatorContext context) { + + if (values == null || values.isEmpty()) return true; // 값 없으면 통과 + + boolean isValid = values.stream() + .allMatch(foodRepository::existsById); + + if (!isValid) { + context.disableDefaultConstraintViolation(); + context.buildConstraintViolationWithTemplate(FoodErrorCode.FOOD_NOT_FOUND.getMessage()) + .addConstraintViolation(); + } + + return isValid; + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPage.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPage.java" new file mode 100644 index 0000000..9d33af1 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPage.java" @@ -0,0 +1,17 @@ +package com.example.umc9th.global.validator; + +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.PARAMETER) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = ValidPageValidator.class) +public @interface ValidPage { + String message() default "페이지는 0보다 큰 값이어야 합니다."; + Class[] groups() default {}; + Class[] payload() default {}; +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPageValidator.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPageValidator.java" new file mode 100644 index 0000000..c52e86d --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPageValidator.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.global.validator; + +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +public class ValidPageValidator implements ConstraintValidator { + @Override + public boolean isValid(Integer value, ConstraintValidatorContext context) { + return value != null && value > 0; + } +} diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" new file mode 100644 index 0000000..ec8fa85 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" @@ -0,0 +1,18 @@ +spring: + application: + name: umc9th + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${DB_URL} + username: ${DB_USER} + password: ${DB_PW} + + jpa: + database: mysql + show-sql: true + hibernate: + ddl-auto: update + properties: + hibernate: + format_sql: true diff --git "a/9\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" new file mode 100644 index 0000000..a96d2a7 --- /dev/null +++ "b/9\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" @@ -0,0 +1,13 @@ +package com.example.umc9th; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class Umc9thApplicationTests { + + @Test + void contextLoads() { + } + +} From 2402571c628e8f59c63fcde2bec2d3fd5c87c15f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EA=B2=BD=EC=88=98?= Date: Sun, 21 Dec 2025 15:07:15 +0900 Subject: [PATCH 9/9] =?UTF-8?q?[week10/mission]=20JWT=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.DS_Store" | Bin 0 -> 6148 bytes .../src/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/.DS_Store" | Bin 0 -> 8196 bytes .../src/main/java/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/java/com/.DS_Store" | Bin 0 -> 6148 bytes .../src/main/java/com/example/.DS_Store" | Bin 0 -> 6148 bytes .../main/java/com/example/umc9th/.DS_Store" | Bin 0 -> 6148 bytes .../example/umc9th/Umc9thApplication.java" | 15 +++ .../controller/MissionController.java" | 34 ++++++ .../mission/converter/MissionConverter.java" | 55 ++++++++++ .../mission/dto/res/MissionResDTO.java" | 35 +++++++ .../domain/mission/entity/Mission.java" | 47 +++++++++ .../mission/exception/MissionException.java" | 11 ++ .../repository/MissionRepository.java" | 11 ++ .../mission/service/MissionQueryService.java" | 50 +++++++++ .../review/controller/ReviewController.java" | 80 ++++++++++++++ .../review/converter/ReviewConverter.java" | 99 ++++++++++++++++++ .../domain/review/dto/ReviewResponse.java" | 24 +++++ .../domain/review/dto/req/ReviewReqDTO.java" | 23 ++++ .../domain/review/dto/res/ReviewResDTO.java" | 74 +++++++++++++ .../umc9th/domain/review/entity/Review.java" | 54 ++++++++++ .../domain/review/entity/ReviewPhoto.java" | 27 +++++ .../domain/review/entity/ReviewReply.java" | 26 +++++ .../review/exception/ReviewException.java" | 11 ++ .../exception/code/ReviewErrorCode.java" | 23 ++++ .../exception/code/ReviewSuccessCode.java" | 21 ++++ .../review/repository/ReviewRepository.java" | 11 ++ .../repository/ReviewRepositoryCustom.java" | 12 +++ .../repository/ReviewRepositoryImpl.java" | 47 +++++++++ .../command/ReviewCommandService.java" | 8 ++ .../command/ReviewCommandServiceImpl.java" | 46 ++++++++ .../service/query/ReviewQueryService.java" | 23 ++++ .../query/ReviewQueryServiceImpl.java" | 67 ++++++++++++ .../store/controller/StoreController.java" | 46 ++++++++ .../store/converter/StoreConverter.java" | 35 +++++++ .../domain/store/dto/req/StoreReqDTO.java" | 19 ++++ .../domain/store/dto/res/StoreResDTO.java" | 32 ++++++ .../umc9th/domain/store/entity/Location.java" | 30 ++++++ .../umc9th/domain/store/entity/Store.java" | 46 ++++++++ .../store/exception/StoreException.java" | 11 ++ .../store/exception/code/StoreErrorCode.java" | 21 ++++ .../store/repository/LocationRepository.java" | 7 ++ .../store/repository/StoreRepository.java" | 10 ++ .../service/command/StoreCommandService.java" | 10 ++ .../command/StoreCommandServiceImpl.java" | 88 ++++++++++++++++ .../test/controller/TestController.java" | 44 ++++++++ .../domain/test/converter/TestConverter.java" | 24 +++++ .../domain/test/dto/req/TestReqDTO.java" | 4 + .../domain/test/dto/res/TestResDTO.java" | 19 ++++ .../domain/test/exception/TestException.java" | 11 ++ .../test/exception/code/TestErrorCode.java" | 19 ++++ .../test/service/query/TestQueryService.java" | 5 + .../service/query/TestQueryServiceImpl.java" | 18 ++++ .../user/controller/UserController.java" | 37 +++++++ .../domain/user/converter/UserConverter.java" | 37 +++++++ .../user/dto/UserReqDTO/UserReqDTO.java" | 31 ++++++ .../user/dto/UserResDTO/UserResDTO.java" | 20 ++++ .../umc9th/domain/user/entity/Food.java" | 26 +++++ .../umc9th/domain/user/entity/Term.java" | 23 ++++ .../umc9th/domain/user/entity/User.java" | 59 +++++++++++ .../domain/user/entity/mapping/UserFood.java" | 27 +++++ .../user/entity/mapping/UserMission.java" | 40 +++++++ .../domain/user/entity/mapping/UserTerm.java" | 30 ++++++ .../umc9th/domain/user/enums/Gender.java" | 5 + .../umc9th/domain/user/enums/TermName.java" | 5 + .../domain/user/enums/UserMissionStatus.java" | 6 ++ .../domain/user/exception/FoodException.java" | 11 ++ .../domain/user/exception/UserException.java" | 10 ++ .../user/exception/code/FoodErrorCode.java" | 19 ++++ .../user/exception/code/FoodSuccessCode.java" | 20 ++++ .../user/exception/code/UserErrorCode.java" | 30 ++++++ .../user/exception/code/UserSuccessCode.java" | 20 ++++ .../user/repository/FoodRepository.java" | 9 ++ .../user/repository/UserFoodRepository.java" | 10 ++ .../repository/UserMissionRepository.java" | 15 +++ .../user/repository/UserRepository.java" | 10 ++ .../service/command/UserCommandService.java" | 8 ++ .../command/UserCommandServiceImpl.java" | 73 +++++++++++++ .../user/service/query/UserQueryService.java" | 10 ++ .../service/query/UserQueryServiceImpl.java" | 47 +++++++++ .../umc9th/global/annotation/ExistFoods.java" | 21 ++++ .../global/apiPayload/ApiResponse.java" | 37 +++++++ .../apiPayload/code/BaseErrorCode.java" | 10 ++ .../apiPayload/code/BaseSuccessCode.java" | 9 ++ .../apiPayload/code/GeneralErrorCode.java" | 35 +++++++ .../apiPayload/code/GeneralSuccessCode.java" | 24 +++++ .../exception/GeneralException.java" | 14 +++ .../handler/GeneralExceptionAdvice.java" | 50 +++++++++ .../auth/details/CustomUserDetails.java" | 31 ++++++ .../umc9th/global/auth/enums/Role.java" | 5 + .../global/auth/jwt/JwtAuthFilter.java" | 62 +++++++++++ .../umc9th/global/auth/jwt/JwtUtil.java" | 93 ++++++++++++++++ .../service/CustomUserDetailsService.java" | 30 ++++++ .../config/AuthenticationEntryPointImpl.java" | 33 ++++++ .../umc9th/global/config/QuerydslConfig.java" | 15 +++ .../umc9th/global/config/SecurityConfig.java" | 74 +++++++++++++ .../umc9th/global/config/SwaggerConfig.java" | 47 +++++++++ .../umc9th/global/entity/BaseEntity.java" | 26 +++++ .../global/validator/FoodExistValidator.java" | 35 +++++++ .../umc9th/global/validator/ValidPage.java" | 17 +++ .../global/validator/ValidPageValidator.java" | 11 ++ .../src/main/resources/application.yml" | 25 +++++ .../umc9th/Umc9thApplicationTests.java" | 13 +++ 103 files changed, 2788 insertions(+) create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/.DS_Store" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/.DS_Store" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/.DS_Store" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/Umc9thApplication.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/controller/MissionController.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/converter/MissionConverter.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/dto/res/MissionResDTO.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/entity/Mission.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/exception/MissionException.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/repository/MissionRepository.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/service/MissionQueryService.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewSuccessCode.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/controller/StoreController.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/converter/StoreConverter.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/req/StoreReqDTO.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/res/StoreResDTO.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/StoreException.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/code/StoreErrorCode.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/LocationRepository.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/StoreRepository.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandService.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandServiceImpl.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/controller/UserController.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/converter/UserConverter.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserReqDTO/UserReqDTO.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserResDTO/UserResDTO.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/UserMissionStatus.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/FoodException.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/UserException.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodErrorCode.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodSuccessCode.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserErrorCode.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserSuccessCode.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/FoodRepository.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserFoodRepository.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserMissionRepository.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserRepository.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandService.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandServiceImpl.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryService.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryServiceImpl.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/annotation/ExistFoods.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/details/CustomUserDetails.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/enums/Role.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/jwt/JwtAuthFilter.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/jwt/JwtUtil.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/service/CustomUserDetailsService.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/AuthenticationEntryPointImpl.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SecurityConfig.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SwaggerConfig.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/FoodExistValidator.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPage.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPageValidator.java" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" create mode 100644 "10\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..d51379d8b1d08e838325917135375f3b511a293e GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8O({YS3Oz1(Eto=u7B3;{3mDOZN=;1BV9b^zHHT8jSzpK}@p+ut z-GIfMMeGdhe)GGV{UH0p7~|eD8Zl-w#w=)v9F+z^cVnn!k`XzMkuSnThG2b!3lsb6 zfZyI`Im_5XSbqQhB+d)R`Q)v3XJ@x-b*;X2=Re8PFM?v3dqH-C)}@q5SnEM}70=6= zy?-jxB8by@rV8R{4k@?SaT>|elgl*9RjscBR?q6q?7?bvJRJ|kXf$09#cJYAhhjW& z*6W^iaCmfbF?&v4Qu(IoSt*p(?{^s*>x5nF+dCu1H`~~GhogI ztH0ee(CUc+VxWNm+#duqMAu-YQEeU2;q@8g9Yhq+@hyQU47vs@jSvChx)e~Ca`VLC zx*Yt%S zfEf5^4DimGf9AoW%-Q;5d3e?eX!p=iFt0)d1oVwd02sKB3{+6Z1?rIJ8mu(pDCk$^ PfOHX1giuEe`~m}C4YWy* literal 0 HcmV?d00001 diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..bf1533fda83f2590e59798c3022d849a002ae2d6 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O0O({YS3Oz1(EtrCp7B3;z7cim+m70*E!8BW%)E-J9XMG``#OHBl zcOw?-Rm9G~?l-@?*$=Wmj4|%d<1S+kW6Xwz$WhrK=-wErnPfzcV?>L58l^G<`_07u zI^efkY{Ej8u;|n%DbuLZ!{{m* zFGkM(naqkX$;LBPki=t1xxG%ZST1}y&*EIw20CCj?dHg7FPFVRuOqtMlT}A7`|hA4 zj{ELv)wB-|k4`T}Pw6C+FPcyed@I>ASivhOpX+%JW?3q;2k=$-RURQRKnxHA#K874 zV9o@)wY?P3%83DD;0Fe9e-O|RJ%go2wRJ#;*Jq4dh$x`rTLMuS^bD37Ap*j6DWERp z=83^|IrxRi^9+_6bvff|W*EoJTs>a6njQQ?r8Dknq@EZc2G$vi=y1%-j}m+8+#!3z#ZuU@qS2A6*L{uaY@5h2Q^^| zK(vzBVWB=39ipj-rXxBoDa}xUR3$1^5v3TA>cme)a_NYUODfeFqT~b7%7`))gsao@ zQ=vFRTGF_UJrH|frUyjsUdfI!gB6)EIe*WNIkq1(HGPXjMdhrj*~)BXj&h*?h*#gqbL+{*)QQ%n&5fxItxYFSs>-7Jb#1#d$DC2uJ1tE>^crCErkV8I zWP2RH*eSn9B>pVhbD?aHs?E`N_iKY0zOYD}?i&ki&-M3Md7o&8SNmjKZ_aafcm1k0>o>KfyLxs^%$r}$HLa$0sA&6k*0J^)e$H}D+dVv3vd!Sg z2zky8>_fJdSJee*9B_?MYl2tLpSO64t`8To_G1M*c%0WOO86{YuUoDt{Nw#5ZDgls z3QaSVPu1!AKEdtGThyAQARcq?3SArUX|LQ+)R42fLDL3~(GhZAm7KNfG=0!9vX;Y5 zRjRdY(Db3A^da9KFh`04YU4K+8yTkBMIe1B5pTv!($=7Q0g}Az$;Jo*6G?_@wj%=BpcMo=)PTK^fz=Awp+9bwsf)*y-Iz$ zK^{WrIki6B6rG8}ma?^U-Sx2j%wl8g6nmb%&d#v+*(dA^cAkCBF0$|059~+wGrPq8 zVwc$!b`=R!pb}N6!ChE|)o4HqTCoLf*otmEj2+mCM=*o~$lxFh97P@h3Mk@9JcDO( z8n56jyp4D8E)Fqb79Vg16uxBc& z5-VwZEwm{VqEB-P=X#-#?B1sJ+!mp5ajpRWf`v7;is&xwjoxh zpgY8Bc)HVYHbEh>G`UQxD+iYhsYxM5Ah(Vy6jmyqEu~Z1Jqm%G&yvFx+De7s&8y_F zA=yZ=rSL>J)Yc`NRSFwkF|kx%vbZJLkmMi`i)FP|ZHr0)#4E$Ot=ck;GYY40OYO-{ zg@S-9{~euY**W$lp>u-J`3w7%{lWf$0*=K<;XbS+Jl>Br*oaNoOsEu?+=d?XVmk&f zNVpuv2y!rS2!~-$!sa-h!YMqB7w{rp!pnFSui*^dz?+2D_wW(UPQzgDR1D(WWDFMj z^RDB$hlwXJtFk;rn9n>`pk7Y&Z~X<-@_$@F*RgDx?Ni-!i$)c4U0vk=-8cUJe~We( zFB^Lx_Q1{X04lrsyEDH0Vr f>4=U?N*pRT{X>8$FWdP3kMIA|%mnm~x&QwKEEa(0 literal 0 HcmV?d00001 diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..e75394bb032a7f3e1bc0dc623302290d5e4a9810 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8O({YS3Oz1(EtrZziU#y1Cs4q^2 z&U)Rk4i1mbE+;R^ER}DXP7Z7<*)v$dJ1Ax~ul^!UWcmc2D!a-eBnF59Vt^RfZU)S` zV0E{f23kEaKn&C{fct}hhUgkBHL9%xI=nt(yoHDYI=&?kg+bR~sSzR|T$cjsQf{6Y zT$h7im^{~DsZp0Ru4aaD%*@r}g{#@YFH}0?u14yK0b*d2fu=TXJpV7?m#KZ^ZAfRtt0>Hq1q^E*9E>MR&*I=m;M?t?T Q2c(ODB7{0(;1?M90yH~GdH?_b literal 0 HcmV?d00001 diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..0f3439b01922fe392d293f71afc805ed603d8992 GIT binary patch literal 6148 zcmeHK%}T>S5T0$TO({YT3Oz1(Em&=Z7B8XJ7cim+m70*C!8BX?V}(-4SzpK}@p+ut z-GJ2|Jc-yD*!^bbXE*af_6Gn&Zx$W`)BwQ2Mkq*GBV=CdD%fB`q30Mu0#PuZjDlp% zM1Rpl-(H3Yp23G9eENPBpyw?ZCGlk1Y`%*^v9z^acFIoGx%D2@+?)E-*`()>uW59l zR1)O6A6&-Kd{EmxRq51^(`c*{;xNLHo2xht)x4)>X*kijo^d!8r!uJ37mK5At07y* z?PWtQI?ZlFwmZ$`vf}LRADo;I9+P3JUJR82S=X{-F^5-FzEt((jnhP>_vp#9@@Ph8 zfEi#0n1Rh=z@7t6b+gLmYMB9M;0FxQ{vfdtx)w8odh5WBuFvEz5t5)zZwW$a(Y2Tv zL=TEEsfZ?3*e8ZC>1dZW&b62sH0dDp$~cc*Ie)wey*k>Z4hP{H!&&(?3{(OE08-C-l4xQrAO)K@M6IG}x`uARm& bNyj+XVrGzLA-hgTS5Z-NTn^J@v6nb3nS}@uQEnY&cFJMFuDz!1i2GeY5QhO+cob`o#5}(JJ z-OV8w@FrqsVE3DypWVy{*&oIjAFhHE#%#uz1r3p-QX*(BbyZ9-B3E;yZ04_%g&#@3 zWTL-l!f&s$6`QjsHeki?|L_-4n52&L$t%^`UcF&8td{lQ&E(okC+R8~PL_8#x|TBX zbA969gwyrdKDdx^Itk>JGC9h5>%uii3_Wc&>FJSUGOBnF59 zVt^RfJqFBKV6}FybgGybAO?P50QUz04be52X;fPWba;J6e+>}@bbL!73WKh}Oe1(e zxK0JssoXpZ6) zFH`!+FQ(9l7$64z83VjF@S5Z-NTn^J@v6nb3nS}@uQEnY&cFJMFuDm5WRgK4%jsXdfJ&iX<=iO=KA z?&c5-coVTRu=~x<&u->}>V;Vf`-UZsSq?*x@smEk*hf(mIUi`5yUd6 znCLH>@Y|a#WRlI9&&uEb5iH^;%^c^G*XoVEX3J_>9qYk+mTNEbvsF6wmv=b2mNE_s z-4AY}*?MXpT*xHzqhz*J2~jwMko(&x3FUe$S4o(vTu(c!w$+~6-Oc87)bEM@*Zrj%3(ee4!^d+7r@=X)TfpaDM1`BuxrBu_aw@hN0Jb}H)DPjqU0b+m{ zAO?1i0dp2uo!u*)DkcVqfgc#a{XsxObPeVj)z$$WUZ2t5Ktur@-x7$zpldMK2p$lw zQvr1K+e)#_juDx7gwBlW}pF;Hfpu7@_B|CjK~ zR6g>{DKsJmh=G5`0B=mZ$ry? userMissionPage) { + + return MissionResDTO.MissionPreviewListDTO.builder() + .missionList( + userMissionPage.getContent().stream() + .map(um -> { + Mission m = um.getMission(); + return MissionResDTO.MissionPreviewDTO.builder() + .missionId(m.getId()) + .title(m.getTitle()) + .description(m.getDescription()) + .rewardPoint(m.getPoint()) + .build(); + }).toList() + ) + .currentPage(userMissionPage.getNumber() + 1) + .totalPage(userMissionPage.getTotalPages()) + .totalElements(userMissionPage.getTotalElements()) + .isFirst(userMissionPage.isFirst()) + .isLast(userMissionPage.isLast()) + .build(); + } + + // Mission 전용 + public static MissionResDTO.MissionPreviewListDTO toMissionPreviewListDTOFromMission(Page missionPage) { + + return MissionResDTO.MissionPreviewListDTO.builder() + .missionList( + missionPage.getContent().stream() + .map(m -> + MissionResDTO.MissionPreviewDTO.builder() + .missionId(m.getId()) + .title(m.getTitle()) + .description(m.getDescription()) + .rewardPoint(m.getPoint()) + .build() + ).toList() + ) + .currentPage(missionPage.getNumber() + 1) + .totalPage(missionPage.getTotalPages()) + .totalElements(missionPage.getTotalElements()) + .isFirst(missionPage.isFirst()) + .isLast(missionPage.isLast()) + .build(); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/dto/res/MissionResDTO.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/dto/res/MissionResDTO.java" new file mode 100644 index 0000000..d43811c --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/dto/res/MissionResDTO.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.domain.mission.dto.res; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +public class MissionResDTO { + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class MissionPreviewDTO { + private Long missionId; + private String title; + private String description; + private Integer rewardPoint; + } + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class MissionPreviewListDTO { + private List missionList; + private Integer currentPage; + private Integer totalPage; + private Long totalElements; + private Boolean isFirst; + private Boolean isLast; + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/entity/Mission.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/entity/Mission.java" new file mode 100644 index 0000000..1f1b6ed --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/entity/Mission.java" @@ -0,0 +1,47 @@ +package com.example.umc9th.domain.mission.entity; + +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.user.entity.mapping.UserMission; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "mission") +public class Mission extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "mission_id") + private Long id; + + @Column(nullable = false, length = 100) + private String title; + + @Column(columnDefinition = "TEXT") + private String description; + + @Column(nullable = false) + private Integer point; + + @Column(length = 50) + private String verification; + + // Store와의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; + + // UserMission과의 연관 관계 (1:N) + @OneToMany(mappedBy = "mission", cascade = CascadeType.ALL) + @Builder.Default + private List userMissionList = new ArrayList<>(); + +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/exception/MissionException.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/exception/MissionException.java" new file mode 100644 index 0000000..b0faea9 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/exception/MissionException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.mission.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class MissionException extends GeneralException { + + public MissionException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/repository/MissionRepository.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/repository/MissionRepository.java" new file mode 100644 index 0000000..a3b0c28 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/repository/MissionRepository.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.mission.repository; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.store.entity.Store; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MissionRepository extends JpaRepository { + Page findByStore(Store store, Pageable pageable); +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/service/MissionQueryService.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/service/MissionQueryService.java" new file mode 100644 index 0000000..e0ea953 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/mission/service/MissionQueryService.java" @@ -0,0 +1,50 @@ +package com.example.umc9th.domain.mission.service; + +import com.example.umc9th.domain.mission.converter.MissionConverter; +import com.example.umc9th.domain.mission.dto.res.MissionResDTO; +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.mission.repository.MissionRepository; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.store.repository.StoreRepository; +import com.example.umc9th.domain.user.entity.mapping.UserMission; +import com.example.umc9th.domain.user.enums.UserMissionStatus; +import com.example.umc9th.domain.user.repository.UserMissionRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class MissionQueryService { + + private final MissionRepository missionRepository; + private final StoreRepository storeRepository; + private final UserMissionRepository userMissionRepository; + + public MissionResDTO.MissionPreviewListDTO getMissionsByStore(Long storeId, Integer page) { + + Store store = storeRepository.findById(storeId) + .orElseThrow(() -> new RuntimeException("Store not found")); + + PageRequest pageable = PageRequest.of(page - 1, 10); + + Page missionPage = missionRepository.findByStore(store, pageable); + + return MissionConverter.toMissionPreviewListDTOFromMission(missionPage); + } + + public MissionResDTO.MissionPreviewListDTO getMissionsByUser(Long userId, Integer page) { + PageRequest pageable = PageRequest.of(page - 1, 10); + + Page missionPage = userMissionRepository.findByUserIdAndStatus( + userId, + UserMissionStatus.CHALLENGING, + pageable + ); + + return MissionConverter.toMissionPreviewListDTOFromUserMission(missionPage); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" new file mode 100644 index 0000000..7ae5dbd --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/controller/ReviewController.java" @@ -0,0 +1,80 @@ +package com.example.umc9th.domain.review.controller; + +import com.example.umc9th.domain.review.converter.ReviewConverter; +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.dto.req.ReviewReqDTO; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.domain.review.exception.code.ReviewSuccessCode; +import com.example.umc9th.domain.review.service.command.ReviewCommandService; +import com.example.umc9th.domain.review.service.query.ReviewQueryService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode; +import com.example.umc9th.global.validator.ValidPage; +import io.swagger.v3.oas.annotations.Operation; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; + +import org.springframework.data.domain.Page; + +import org.springframework.web.bind.annotation.*; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/reviews") +public class ReviewController { + + private final ReviewQueryService reviewQueryService; + private final ReviewCommandService reviewCommandService; + + /** + * 내가 작성한 리뷰 조회 API + */ + @Operation(summary = "내가 작성한 리뷰 조회", description = "사용자가 작성한 리뷰를 필터링하여 페이징 조회합니다.") + @GetMapping("/user/{userId}") + public ApiResponse getMyReviews( + @PathVariable Long userId, + @RequestParam(required = false) Long storeId, + @RequestParam(required = false) Integer minStar, + @RequestParam(required = false) Integer maxStar, + @ValidPage @RequestParam(defaultValue = "1") Integer page + ) { + + Page reviews = reviewQueryService.getReviewsByUserWithFilters( + userId, storeId, minStar, maxStar, page + ); + + return ApiResponse.onSuccess( + GeneralSuccessCode.OK, + ReviewConverter.toReviewListDTO(reviews) + ); + } + + /** + * 2. 가게에 리뷰 추가하기 API + * POST /reviews + */ + @PostMapping + public ApiResponse createReview( + @RequestBody @Valid ReviewReqDTO.CreateReviewDTO request + ) { + ReviewResDTO.CreateReviewResultDTO result = reviewCommandService.createReview(request); + return ApiResponse.onSuccess(GeneralSuccessCode.CREATED, result); + } + + // 가게의 리뷰 목록 조회 + @Operation(summary = "가게의 리뷰 목록 조회", description = "가게 이름으로 리뷰 리스트를 페이징하여 조회합니다.") + @GetMapping + public ApiResponse getReviews( + @RequestParam String storeName, + @RequestParam(defaultValue = "1") Integer page + ) { + ReviewResDTO.ReviewPreviewListDTO result = + reviewQueryService.findReview(storeName, page); + + return ApiResponse.onSuccess( + ReviewSuccessCode.REVIEW_FOUND, + result + ); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" new file mode 100644 index 0000000..1652e58 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/converter/ReviewConverter.java" @@ -0,0 +1,99 @@ +package com.example.umc9th.domain.review.converter; + +import com.example.umc9th.domain.review.dto.req.ReviewReqDTO; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.user.entity.User; +import org.springframework.data.domain.Page; + +import java.util.List; +import java.util.stream.Collectors; + +public class ReviewConverter { + + /** + * 사용자의 리뷰 리스트 변환 + * Page → ReviewListDTO + */ + public static ReviewResDTO.ReviewListDTO toReviewListDTO(Page page) { + + List reviewDTOs = page.getContent().stream() + .map(r -> ReviewResDTO.ReviewDTO.builder() + .reviewId(r.getReviewId()) + .content(r.getContent()) + .star(r.getStar()) + .createdAt(r.getCreatedAt()) + .build() + ) + .collect(Collectors.toList()); + + return ReviewResDTO.ReviewListDTO.builder() + .reviews(reviewDTOs) + .currentPage(page.getNumber() + 1) // 1-based 페이지 + .totalElements(page.getTotalElements()) + .totalPages(page.getTotalPages()) + .isFirst(page.isFirst()) + .isLast(page.isLast()) + .build(); + } + + /** + * 단일 리뷰 변환 (ReviewResponse → ReviewDTO) + */ + private static ReviewResDTO.ReviewDTO toReviewDTO(ReviewResponse review) { + return ReviewResDTO.ReviewDTO.builder() + .reviewId(review.getReviewId()) + .content(review.getContent()) + .star(review.getStar()) + .build(); + } + + /** + * Review 생성 변환 (CreateReviewDTO → Review Entity) + */ + public static Review toReview(ReviewReqDTO.CreateReviewDTO dto, User user, Store store) { + return Review.builder() + .star(dto.getStar()) + .content(dto.getContent()) + .user(user) + .store(store) + .build(); + } + + /** + * 리뷰 생성 결과 변환 (Review → CreateReviewResultDTO) + */ + public static ReviewResDTO.CreateReviewResultDTO toCreateReviewResultDTO(Review review) { + return ReviewResDTO.CreateReviewResultDTO.builder() + .reviewId(review.getId()) + .createdAt(review.getCreatedAt()) + .build(); + } + + /** + * 가게 리뷰 목록 조회 변환 + * Page → ReviewPreviewListDTO + */ + public static ReviewResDTO.ReviewPreviewListDTO toReviewPreviewListDTO(Page reviewPage) { + return ReviewResDTO.ReviewPreviewListDTO.builder() + .reviewList( + reviewPage.getContent().stream() + .map(r -> ReviewResDTO.ReviewPreviewDTO.builder() + .ownerNickname(r.getUser().getName()) + .score(r.getStar()) + .body(r.getContent()) + .createdAt(r.getCreatedAt().toLocalDate()) + .build() + ).toList() + ) + .listSize(reviewPage.getSize()) + .totalPage(reviewPage.getTotalPages()) + .totalElements(reviewPage.getTotalElements()) + .isFirst(reviewPage.isFirst()) + .isLast(reviewPage.isLast()) + .build(); + } + +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" new file mode 100644 index 0000000..95f3e6f --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/ReviewResponse.java" @@ -0,0 +1,24 @@ +package com.example.umc9th.domain.review.dto; + +import com.querydsl.core.annotations.QueryProjection; +import lombok.Getter; + +import java.time.LocalDateTime; + +@Getter +public class ReviewResponse { + private Long reviewId; + private String content; + private Integer star; + private LocalDateTime createdAt; // ← 추가 + + @QueryProjection + public ReviewResponse(Long reviewId, String content, Integer star, LocalDateTime createdAt) { + this.reviewId = reviewId; + this.content = content; + this.star = star; + this.createdAt = createdAt; // ← 추가 + } +} + + diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" new file mode 100644 index 0000000..32d9429 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/req/ReviewReqDTO.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.review.dto.req; + +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; + +public class ReviewReqDTO { + + @Getter + public static class CreateReviewDTO { + @NotNull(message = "별점은 필수입니다.") + @Min(value = 1, message = "별점은 1 이상이어야 합니다.") + @Max(value = 5, message = "별점은 5 이하여야 합니다.") + private Integer star; + + private String content; + + @NotNull(message = "가게 ID는 필수입니다.") + private Long storeId; + } + +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" new file mode 100644 index 0000000..13d929e --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/dto/res/ReviewResDTO.java" @@ -0,0 +1,74 @@ +package com.example.umc9th.domain.review.dto.res; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +public class ReviewResDTO { + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewListDTO { + private List reviews; + private int currentPage; + private long totalElements; + private int totalPages; + private boolean isFirst; + private boolean isLast; + } + + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewDTO { + private Long reviewId; + private String content; + private Integer star; + private LocalDateTime createdAt; + } + + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class CreateReviewResultDTO { + private Long reviewId; + private LocalDateTime createdAt; + } + + // -------- 새로 추가된 DTO들 (가게 리뷰 조회) -------- + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewPreviewListDTO { + private List reviewList; + private Integer listSize; + private Integer totalPage; + private Long totalElements; + private Boolean isFirst; + private Boolean isLast; + } + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReviewPreviewDTO { + private String ownerNickname; + private Integer score; + private String body; + private LocalDate createdAt; + } +} + diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" new file mode 100644 index 0000000..9bc62ff --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/Review.java" @@ -0,0 +1,54 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review") +public class Review extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_id") + private Long id; + + @Column(nullable = false) + private Integer star; + + @Column(columnDefinition = "TEXT") + private String content; + + // User와의 연관 관계 (N:1) - 연관 관계의 주인 + // Review 입장에서 User는 N:1 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // Store와의 연관 관계 (N:1) - 연관 관계의 주인 + // Review 입장에서 Store는 N:1 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_id") + private Store store; + + // ReviewPhoto와의 연관 관계 (1:N) + // Review 입장에서 ReviewPhoto는 1:N + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @Builder.Default + private List reviewPhotoList = new ArrayList<>(); + + // ReviewReply와의 연관 관계 (1:N) + // Review 입장에서 ReviewReply는 1:N // 헷갈림 + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @Builder.Default + private List reviewReplyList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" new file mode 100644 index 0000000..56310ba --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewPhoto.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review_photo") +public class ReviewPhoto extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_photo_id") + private Long id; + + @Column(name = "review_photo_url", nullable = false) + private String reviewPhotoUrl; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" new file mode 100644 index 0000000..ccaa29e --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/entity/ReviewReply.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.domain.review.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "review_reply") +public class ReviewReply extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "reply_id") + private Long id; + + @Column(columnDefinition = "TEXT") + private String content; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" new file mode 100644 index 0000000..2ae42f6 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/ReviewException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.review.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class ReviewException extends GeneralException { + + public ReviewException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" new file mode 100644 index 0000000..921f95a --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewErrorCode.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.review.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum ReviewErrorCode implements BaseErrorCode { + + // Review 관련 에러 + INVALID_USER_ID(HttpStatus.BAD_REQUEST, "REVIEW400_1", "유효하지 않은 사용자 ID입니다."), + INVALID_STAR_RANGE(HttpStatus.BAD_REQUEST, "REVIEW400_2", "별점은 1~5 사이여야 하며, 최소값이 최대값보다 클 수 없습니다."), + + REVIEW_NOT_FOUND(HttpStatus.NOT_FOUND, "REVIEW404_1", "리뷰를 찾을 수 없습니다."), + REVIEW_ACCESS_DENIED(HttpStatus.FORBIDDEN, "REVIEW403_1", "해당 리뷰에 접근할 권한이 없습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewSuccessCode.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewSuccessCode.java" new file mode 100644 index 0000000..2c57d1a --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/exception/code/ReviewSuccessCode.java" @@ -0,0 +1,21 @@ +package com.example.umc9th.domain.review.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseSuccessCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum ReviewSuccessCode implements BaseSuccessCode { + + REVIEW_CREATED(HttpStatus.CREATED, "REVIEW201_1", "리뷰가 성공적으로 작성되었습니다."), + REVIEW_DELETED(HttpStatus.OK, "REVIEW200_1", "리뷰가 성공적으로 삭제되었습니다."), + REVIEW_UPDATED(HttpStatus.OK, "REVIEW200_2", "리뷰가 성공적으로 수정되었습니다."), + REVIEW_FOUND(HttpStatus.OK, "REVIEW200_3", "리뷰가 성공적으로 조회되었습니다.") + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" new file mode 100644 index 0000000..728d4b0 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepository.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.domain.store.entity.Store; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { + Page findByStore(Store store, Pageable pageable); +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" new file mode 100644 index 0000000..8e16350 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryCustom.java" @@ -0,0 +1,12 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.querydsl.core.BooleanBuilder; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +public interface ReviewRepositoryCustom { + + Page searchReview(BooleanBuilder builder, Pageable pageable); + +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" new file mode 100644 index 0000000..fde60e3 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/repository/ReviewRepositoryImpl.java" @@ -0,0 +1,47 @@ +package com.example.umc9th.domain.review.repository; + +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.dto.QReviewResponse; +import com.querydsl.core.BooleanBuilder; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Repository; + +import java.util.List; + +import static com.example.umc9th.domain.review.entity.QReview.review; + +@Repository +@RequiredArgsConstructor +public class ReviewRepositoryImpl implements ReviewRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + @Override + public Page searchReview(BooleanBuilder builder, Pageable pageable) { + + List content = queryFactory + .select(new QReviewResponse( + review.id, + review.content, + review.star, + review.createdAt + )) + .from(review) + .where(builder) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + + long total = queryFactory + .select(review.count()) + .from(review) + .where(builder) + .fetchOne(); + + return new PageImpl<>(content, pageable, total); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" new file mode 100644 index 0000000..261022c --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandService.java" @@ -0,0 +1,8 @@ +package com.example.umc9th.domain.review.service.command; + +import com.example.umc9th.domain.review.dto.req.ReviewReqDTO; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; + +public interface ReviewCommandService { + ReviewResDTO.CreateReviewResultDTO createReview(ReviewReqDTO.CreateReviewDTO dto); +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" new file mode 100644 index 0000000..35f0a73 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/command/ReviewCommandServiceImpl.java" @@ -0,0 +1,46 @@ +package com.example.umc9th.domain.review.service.command; + +import com.example.umc9th.domain.review.converter.ReviewConverter; +import com.example.umc9th.domain.review.dto.req.ReviewReqDTO; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.domain.review.repository.ReviewRepository; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.store.exception.StoreException; +import com.example.umc9th.domain.store.exception.code.StoreErrorCode; +import com.example.umc9th.domain.store.repository.StoreRepository; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional +public class ReviewCommandServiceImpl implements ReviewCommandService { + + private final ReviewRepository reviewRepository; + private final StoreRepository storeRepository; + private final UserRepository userRepository; + + @Override + public ReviewResDTO.CreateReviewResultDTO createReview(ReviewReqDTO.CreateReviewDTO dto) { + // 하드코딩된 유저 (DB에 있는 유저 ID 1번) + User user = userRepository.findById(1L) + .orElseThrow(() -> new RuntimeException("유저를 찾을 수 없습니다.")); + + // 가게 조회 + Store store = storeRepository.findById(dto.getStoreId()) + .orElseThrow(() -> new StoreException(StoreErrorCode.STORE_NOT_FOUND)); + + // Review 엔티티 생성 + Review review = ReviewConverter.toReview(dto, user, store); + + // DB 저장 + Review savedReview = reviewRepository.save(review); + + // 응답 DTO 반환 + return ReviewConverter.toCreateReviewResultDTO(savedReview); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" new file mode 100644 index 0000000..f58bab7 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryService.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.review.service.query; + +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import org.springframework.data.domain.Page; + + +public interface ReviewQueryService { + + /** + * 사용자의 리뷰 조회 (필터링 포함) - 페이징 포함 + */ + Page getReviewsByUserWithFilters( + Long userId, + Long storeId, + Integer minStar, + Integer maxStar, + Integer page + ); + + ReviewResDTO.ReviewPreviewListDTO findReview(String storeName, Integer page); + +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" new file mode 100644 index 0000000..b5e9232 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/review/service/query/ReviewQueryServiceImpl.java" @@ -0,0 +1,67 @@ +package com.example.umc9th.domain.review.service.query; + +import com.example.umc9th.domain.review.converter.ReviewConverter; +import com.example.umc9th.domain.review.dto.ReviewResponse; +import com.example.umc9th.domain.review.dto.res.ReviewResDTO; +import com.example.umc9th.domain.review.entity.QReview; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.domain.review.repository.ReviewRepository; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.store.repository.StoreRepository; +import com.querydsl.core.BooleanBuilder; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class ReviewQueryServiceImpl implements ReviewQueryService { + + private final ReviewRepository reviewRepository; + private final StoreRepository storeRepository; + + @Override + public Page getReviewsByUserWithFilters( + Long userId, + Long storeId, + Integer minStar, + Integer maxStar, + Integer page + ) { + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(QReview.review.user.id.eq(userId)); + + if (storeId != null) builder.and(QReview.review.store.id.eq(storeId)); + if (minStar != null) builder.and(QReview.review.star.goe(minStar)); + if (maxStar != null) builder.and(QReview.review.star.loe(maxStar)); + + PageRequest pageable = PageRequest.of(page - 1, 10); + + return reviewRepository.searchReview(builder, pageable); + } + + /** + * 가게 리뷰 조회 + */ + + @Override + public ReviewResDTO.ReviewPreviewListDTO findReview(String storeName, Integer page) { + + Pageable pageable = PageRequest.of(page, 10); + + // 1) Store 조회 + Store store = storeRepository.findByName(storeName) + .orElseThrow(() -> new RuntimeException("Store not found")); + + // 2) Store의 리뷰 조회 + Page reviewPage = reviewRepository.findByStore(store, pageable); + + // 3) Converter 사용해 DTO로 변환 + return ReviewConverter.toReviewPreviewListDTO(reviewPage); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/controller/StoreController.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/controller/StoreController.java" new file mode 100644 index 0000000..4a7fec9 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/controller/StoreController.java" @@ -0,0 +1,46 @@ +package com.example.umc9th.domain.store.controller; + +import com.example.umc9th.domain.store.dto.req.StoreReqDTO; +import com.example.umc9th.domain.store.dto.res.StoreResDTO; +import com.example.umc9th.domain.store.service.command.StoreCommandService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/stores") +public class StoreController { + + private final StoreCommandService storeCommandService; + + /** + * 1. 특정 지역에 가게 추가하기 API + * POST /stores + */ + @PostMapping + public ApiResponse createStore( + @RequestBody @Valid StoreReqDTO.CreateStoreDTO request + ) { + StoreResDTO.CreateStoreResultDTO result = storeCommandService.createStore(request); + return ApiResponse.onSuccess(GeneralSuccessCode.CREATED, result); + } + + /** + * 2. 가게의 미션을 도전 중인 미션에 추가(미션 도전하기) API + * POST /stores/{storeId}/missions/{missionId}/challenge + */ + @PostMapping("/{storeId}/missions/{missionId}/challenge") + public ApiResponse challengeMission( + @PathVariable Long storeId, + @PathVariable Long missionId, + @RequestParam Long userId + ) { + StoreResDTO.ChallengeMissionResultDTO result = + storeCommandService.challengeMission(storeId, missionId, userId); + + return ApiResponse.onSuccess(GeneralSuccessCode.CREATED, result); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/converter/StoreConverter.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/converter/StoreConverter.java" new file mode 100644 index 0000000..c0861ce --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/converter/StoreConverter.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.domain.store.converter; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.store.dto.req.StoreReqDTO; +import com.example.umc9th.domain.store.dto.res.StoreResDTO; +import com.example.umc9th.domain.store.entity.Location; +import com.example.umc9th.domain.store.entity.Store; + +public class StoreConverter { + + public static Store toStore(StoreReqDTO.CreateStoreDTO dto, Location location) { + return Store.builder() + .name(dto.getName()) + .detailAddress(dto.getDetailAddress()) + .location(location) + .build(); + } + + public static StoreResDTO.CreateStoreResultDTO toCreateStoreResultDTO(Store store) { + return StoreResDTO.CreateStoreResultDTO.builder() + .storeId(store.getId()) + .name(store.getName()) + .createdAt(store.getCreatedAt()) + .build(); + } + + public static StoreResDTO.ChallengeMissionResultDTO toChallengeMissionResultDTO(Store store, Mission mission) { + return StoreResDTO.ChallengeMissionResultDTO.builder() + .storeId(store.getId()) + .storeName(store.getName()) + .missionId(mission.getId()) + .missionName(mission.getTitle()) + .build(); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/req/StoreReqDTO.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/req/StoreReqDTO.java" new file mode 100644 index 0000000..ee796bf --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/req/StoreReqDTO.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.store.dto.req; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; + +public class StoreReqDTO { + + @Getter + public static class CreateStoreDTO { + @NotBlank(message = "가게 이름은 필수입니다.") + private String name; + + private String detailAddress; + + @NotNull(message = "지역 ID는 필수입니다.") + private Long locationId; + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/res/StoreResDTO.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/res/StoreResDTO.java" new file mode 100644 index 0000000..76a10f6 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/dto/res/StoreResDTO.java" @@ -0,0 +1,32 @@ +package com.example.umc9th.domain.store.dto.res; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +public class StoreResDTO { + + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class CreateStoreResultDTO { + private Long storeId; + private String name; + private LocalDateTime createdAt; + } + + @Getter + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class ChallengeMissionResultDTO { + private Long storeId; + private String storeName; + private Long missionId; + private String missionName; + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" new file mode 100644 index 0000000..73384e1 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Location.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.store.entity; + +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "location") +public class Location extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "location_id") + private Long id; + + @Column(name = "location_name", nullable = false, length = 50) + private String name; + + // Store와의 연관 관계 (1:N) + @OneToMany(mappedBy = "location", cascade = CascadeType.ALL) + @Builder.Default + private List storeList = new ArrayList<>(); +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" new file mode 100644 index 0000000..99ad0b6 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/entity/Store.java" @@ -0,0 +1,46 @@ +package com.example.umc9th.domain.store.entity; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.review.entity.Review; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "store") +public class Store extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "store_id") + private Long id; + + @Column(name = "store_name", nullable = false, length = 50) + private String name; + + @Column(name = "detailAddress", length = 100) + private String detailAddress; + + // Location과의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "location_id") + private Location location; + + // Review와의 연관 관계 (1:N) + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + @Builder.Default + private List reviewList = new ArrayList<>(); + + // Mission과의 연관 관계 (1:N) + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + @Builder.Default + private List missionList = new ArrayList<>(); + +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/StoreException.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/StoreException.java" new file mode 100644 index 0000000..296a979 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/StoreException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.store.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class StoreException extends GeneralException { + + public StoreException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/code/StoreErrorCode.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/code/StoreErrorCode.java" new file mode 100644 index 0000000..a1709e1 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/exception/code/StoreErrorCode.java" @@ -0,0 +1,21 @@ +package com.example.umc9th.domain.store.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum StoreErrorCode implements BaseErrorCode { + + STORE_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE404_1", "가게를 찾을 수 없습니다."), + LOCATION_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE404_2", "지역을 찾을 수 없습니다."), + INVALID_STORE_ID(HttpStatus.BAD_REQUEST, "STORE400_1", "유효하지 않은 가게 ID입니다."), + MISSION_NOT_FOUND_IN_STORE(HttpStatus.NOT_FOUND, "STORE404_3", "가게에 해당 미션이 없습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/LocationRepository.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/LocationRepository.java" new file mode 100644 index 0000000..2feba23 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/LocationRepository.java" @@ -0,0 +1,7 @@ +package com.example.umc9th.domain.store.repository; + +import com.example.umc9th.domain.store.entity.Location; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface LocationRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/StoreRepository.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/StoreRepository.java" new file mode 100644 index 0000000..5f3dd67 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/repository/StoreRepository.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.store.repository; + +import com.example.umc9th.domain.store.entity.Store; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface StoreRepository extends JpaRepository { + Optional findByName(String name); +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandService.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandService.java" new file mode 100644 index 0000000..7e2b19d --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandService.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.store.service.command; + +import com.example.umc9th.domain.store.dto.req.StoreReqDTO; +import com.example.umc9th.domain.store.dto.res.StoreResDTO; + +public interface StoreCommandService { + StoreResDTO.CreateStoreResultDTO createStore(StoreReqDTO.CreateStoreDTO dto); + StoreResDTO.ChallengeMissionResultDTO challengeMission(Long storeId, Long missionId, Long userId); +} + diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandServiceImpl.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandServiceImpl.java" new file mode 100644 index 0000000..82e93af --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/store/service/command/StoreCommandServiceImpl.java" @@ -0,0 +1,88 @@ +package com.example.umc9th.domain.store.service.command; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.store.converter.StoreConverter; +import com.example.umc9th.domain.store.dto.req.StoreReqDTO; +import com.example.umc9th.domain.store.dto.res.StoreResDTO; +import com.example.umc9th.domain.store.entity.Location; +import com.example.umc9th.domain.store.entity.Store; +import com.example.umc9th.domain.store.exception.StoreException; +import com.example.umc9th.domain.store.exception.code.StoreErrorCode; +import com.example.umc9th.domain.store.repository.LocationRepository; +import com.example.umc9th.domain.store.repository.StoreRepository; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.entity.mapping.UserMission; +import com.example.umc9th.domain.user.enums.UserMissionStatus; +import com.example.umc9th.domain.user.exception.UserException; +import com.example.umc9th.domain.user.repository.UserMissionRepository; +import com.example.umc9th.domain.user.repository.UserRepository; +import com.example.umc9th.domain.user.exception.code.UserErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +@Service +@RequiredArgsConstructor +@Transactional +public class StoreCommandServiceImpl implements StoreCommandService { + + private final StoreRepository storeRepository; + private final LocationRepository locationRepository; + private final UserMissionRepository userMissionRepository; + private final UserRepository userRepository; + + // 특정 지역에 가게 추가하기 + @Override + public StoreResDTO.CreateStoreResultDTO createStore(StoreReqDTO.CreateStoreDTO dto) { + // 지역 조회 + Location location = locationRepository.findById(dto.getLocationId()) + .orElseThrow(() -> new StoreException(StoreErrorCode.LOCATION_NOT_FOUND)); + + // Store 엔티티 생성 + Store store = StoreConverter.toStore(dto, location); + + // DB 저장 + Store savedStore = storeRepository.save(store); + + // 응답 DTO 반환 + return StoreConverter.toCreateStoreResultDTO(savedStore); + } + + // 미션 도전하기 + @Override + public StoreResDTO.ChallengeMissionResultDTO challengeMission(Long storeId, Long missionId, Long userId) { + // 가게 조회 + Store store = storeRepository.findById(storeId) + .orElseThrow(() -> new StoreException(StoreErrorCode.STORE_NOT_FOUND)); + + // 미션 조회 + Mission mission = store.getMissionList().stream() + .filter(m -> m.getId().equals(missionId)) + .findFirst() + .orElseThrow(() -> new StoreException(StoreErrorCode.MISSION_NOT_FOUND_IN_STORE)); + + // 유저 조회 + User user = userRepository.findById(userId) + .orElseThrow(() -> new UserException(UserErrorCode.NOT_FOUND)); + + Optional existing = userMissionRepository.findByUserIdAndMissionId(userId, missionId); + if(existing.isPresent()) { + throw new UserException(UserErrorCode.ALREADY_CHALLENGING); + } + + // UserMission 엔티티 생성 + UserMission userMission = UserMission.builder() + .mission(mission) + .user(user) + .status(UserMissionStatus.CHALLENGING) // 도전 중 상태로 설정 + .build(); + + // DB 저장 + userMissionRepository.save(userMission); + + // 응답 DTO 반환 + return StoreConverter.toChallengeMissionResultDTO(store, mission); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" new file mode 100644 index 0000000..851510f --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/controller/TestController.java" @@ -0,0 +1,44 @@ +package com.example.umc9th.domain.test.controller; + +import com.example.umc9th.domain.test.converter.TestConverter; +import com.example.umc9th.domain.test.dto.res.TestResDTO; +import com.example.umc9th.domain.test.service.query.TestQueryService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/temp") +public class TestController { + + private final TestQueryService testQueryService; + + @GetMapping("/test") + public ApiResponse test() { + // 응답 코드 정의 + GeneralSuccessCode code = GeneralSuccessCode.OK; + + return ApiResponse.onSuccess( + code, + TestConverter.toTestingDTO("This is Test!") + ); + } + + // 예외 상황 + @GetMapping("/exception") + public ApiResponse exception( + @RequestParam Long flag + ) { + + testQueryService.checkFlag(flag); + + // 응답 코드 정의 + GeneralSuccessCode code = GeneralSuccessCode.OK; + return ApiResponse.onSuccess(code, TestConverter.toExceptionDTO("This is Test!")); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" new file mode 100644 index 0000000..af81183 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/converter/TestConverter.java" @@ -0,0 +1,24 @@ +package com.example.umc9th.domain.test.converter; + +import com.example.umc9th.domain.test.dto.res.TestResDTO; + +public class TestConverter { + + // 객체 -> DTO + public static TestResDTO.Testing toTestingDTO( + String testing + ) { + return TestResDTO.Testing.builder() + .testString(testing) + .build(); + } + + // 객체 -> DTO + public static TestResDTO.Exception toExceptionDTO( + String testing + ){ + return TestResDTO.Exception.builder() + .testString(testing) + .build(); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" new file mode 100644 index 0000000..405e3b9 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/req/TestReqDTO.java" @@ -0,0 +1,4 @@ +package com.example.umc9th.domain.test.dto.req; + +public class TestReqDTO { +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" new file mode 100644 index 0000000..9f13f52 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/dto/res/TestResDTO.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.test.dto.res; + +import lombok.Builder; +import lombok.Getter; + +public class TestResDTO { + + @Builder + @Getter + public static class Testing { + private String testString; + } + + @Builder + @Getter + public static class Exception { + private String testString; + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" new file mode 100644 index 0000000..c26ed05 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/TestException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.test.exception; + +import com.example.umc9th.global.apiPayload.exception.GeneralException; +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; + +public class TestException extends GeneralException { + + public TestException(BaseErrorCode code) { + super(code); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" new file mode 100644 index 0000000..7264f21 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/exception/code/TestErrorCode.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.test.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum TestErrorCode implements BaseErrorCode { + + // For test + TEST_EXCEPTION(HttpStatus.BAD_REQUEST, "TEST400_1", "이거는 테스트"), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" new file mode 100644 index 0000000..a6419ab --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryService.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.test.service.query; + +public interface TestQueryService { + void checkFlag(Long flag); +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" new file mode 100644 index 0000000..1af8423 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/test/service/query/TestQueryServiceImpl.java" @@ -0,0 +1,18 @@ +package com.example.umc9th.domain.test.service.query; + +import com.example.umc9th.domain.test.exception.TestException; +import com.example.umc9th.domain.test.exception.code.TestErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class TestQueryServiceImpl implements TestQueryService { + + @Override + public void checkFlag(Long flag) { + if (flag == 1) { + throw new TestException(TestErrorCode.TEST_EXCEPTION); + } + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/controller/UserController.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/controller/UserController.java" new file mode 100644 index 0000000..565d680 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/controller/UserController.java" @@ -0,0 +1,37 @@ +package com.example.umc9th.domain.user.controller; + +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; +import com.example.umc9th.domain.user.exception.code.UserSuccessCode; +import com.example.umc9th.domain.user.service.command.UserCommandService; +import com.example.umc9th.domain.user.service.query.UserQueryService; +import com.example.umc9th.global.apiPayload.ApiResponse; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class UserController { + + private final UserCommandService userCommandService; + private final UserQueryService UserQueryService; + + @PostMapping("/sign-up") + public ApiResponse signUp( + @RequestBody @Valid UserReqDTO.JoinDTO dto + ){ + UserResDTO.JoinDTO response = userCommandService.signup(dto); + return ApiResponse.onSuccess(UserSuccessCode.FOUND, response); + } + + @PostMapping("/login") + public ApiResponse login( + @RequestBody @Valid UserReqDTO.LoginDTO dto + ){ + return ApiResponse.onSuccess(UserSuccessCode.FOUND, UserQueryService.login(dto)); + } +} + diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/converter/UserConverter.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/converter/UserConverter.java" new file mode 100644 index 0000000..179fbb7 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/converter/UserConverter.java" @@ -0,0 +1,37 @@ +package com.example.umc9th.domain.user.converter; + +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.global.auth.enums.Role; + +public class UserConverter { + + // Entity -> DTO + public static UserResDTO.JoinDTO toJoinDTO(User user) { + return UserResDTO.JoinDTO.builder() + .userId(user.getId()) + .createAt(user.getCreatedAt()) + .build(); + } + + // DTO -> Entity + public static User toUser(UserReqDTO.JoinDTO dto, String password, Role role) { + // address와 specAddress를 합쳐서 저장 + String fullAddress = dto.address(); + if (dto.specAddress() != null && !dto.specAddress().isEmpty()) { + fullAddress = dto.address() + " " + dto.specAddress(); + } + + return User.builder() + .name(dto.name()) + .birth(dto.birth()) + .address(fullAddress) + .gender(dto.gender()) + .email(dto.email()) + .password(password) + .role(role) + .phoneNum(dto.phoneNum()) + .build(); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserReqDTO/UserReqDTO.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserReqDTO/UserReqDTO.java" new file mode 100644 index 0000000..996a2a2 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserReqDTO/UserReqDTO.java" @@ -0,0 +1,31 @@ +package com.example.umc9th.domain.user.dto.UserReqDTO; + +import com.example.umc9th.domain.user.enums.Gender; +import com.example.umc9th.global.annotation.ExistFoods; +import jakarta.validation.constraints.NotBlank; + +import java.time.LocalDate; +import java.util.List; + +public class UserReqDTO { + public record JoinDTO( + String name, + Gender gender, + LocalDate birth, + String address, // Address -> String으로 변경 + String specAddress, + String email, + String password, + String phoneNum, + @ExistFoods + List preferCategory + ) {} + + // 로그인 + public record LoginDTO( + @NotBlank + String email, + @NotBlank + String password + ){} +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserResDTO/UserResDTO.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserResDTO/UserResDTO.java" new file mode 100644 index 0000000..6d27d85 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/dto/UserResDTO/UserResDTO.java" @@ -0,0 +1,20 @@ +package com.example.umc9th.domain.user.dto.UserResDTO; + +import lombok.Builder; + +import java.time.LocalDateTime; + +public class UserResDTO { + @Builder + public record JoinDTO( + Long userId, + LocalDateTime createAt + ){} + + // 로그인 + @Builder + public record LoginDTO( + Long userId, + String accessToken + ){} +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" new file mode 100644 index 0000000..ca884aa --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Food.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.domain.user.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Builder +@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED) +@AllArgsConstructor(access = lombok.AccessLevel.PRIVATE) +@Getter +@Table(name = "food") + +public class Food { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "food_id") + private Long id; + + @Column(nullable = false, length = 50) + private String foodName; + +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" new file mode 100644 index 0000000..03bf421 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/Term.java" @@ -0,0 +1,23 @@ +package com.example.umc9th.domain.user.entity; + +import com.example.umc9th.domain.user.enums.TermName; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Getter +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Table(name = "term") +public class Term { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "term_id") // DB 컬럼명 명시 + private Long id; + + @Column(name = "term_name", nullable = false) // ENUM 컬럼만 남김 + @Enumerated(EnumType.STRING) + private TermName name; +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" new file mode 100644 index 0000000..49eb838 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/User.java" @@ -0,0 +1,59 @@ +package com.example.umc9th.domain.user.entity; + +import com.example.umc9th.domain.user.entity.mapping.UserFood; +import com.example.umc9th.domain.user.enums.Gender; +import com.example.umc9th.global.entity.BaseEntity; +import com.example.umc9th.global.auth.enums.Role; +import jakarta.persistence.*; +import lombok.*; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user") +public class User extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_id") + private Long id; + + @Column(nullable = false, length = 50) + private String name; + + @Enumerated(EnumType.STRING) + @Builder.Default + @Column(nullable = false) + private Gender gender = Gender.NONE; + + @Column(nullable = false, length = 50, unique = true) + private String email; + + @Column + private LocalDate birth; + + @Column + private String address; + + @Column(nullable = false) + private String password; + + @Enumerated(EnumType.STRING) + private Role role; + + @Column(length = 20) + private String phoneNum; + + @Builder.Default + @Column(nullable = false) + private Integer point = 0; + + @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) + private List userFoodList = new ArrayList<>(); +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" new file mode 100644 index 0000000..fdb0822 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserFood.java" @@ -0,0 +1,27 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.user.entity.Food; +import com.example.umc9th.domain.user.entity.User; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_food") +public class UserFood { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_food_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "food_id") + private Food food; +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" new file mode 100644 index 0000000..4dd978f --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserMission.java" @@ -0,0 +1,40 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.mission.entity.Mission; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.enums.UserMissionStatus; +import com.example.umc9th.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_mission") +public class UserMission extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_mission_id") + private Long id; + + @Column(nullable = false) + @Enumerated(EnumType.STRING) + private UserMissionStatus status; + + @Column + private Integer dDay; + + // User와의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // Mission과의 연관 관계 (N:1) - 연관 관계의 주인 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "mission_id") + private Mission mission; + +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" new file mode 100644 index 0000000..0e46a62 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/entity/mapping/UserTerm.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.user.entity.mapping; + +import com.example.umc9th.domain.user.entity.Term; +import com.example.umc9th.domain.user.entity.User; +import jakarta.persistence.*; + +import lombok.*; +@Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter +@Table(name = "user_term") +public class UserTerm { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_term_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "term_id") + private Term term; +} + + diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" new file mode 100644 index 0000000..e07fca7 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/Gender.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.user.enums; + +public enum Gender { + MALE, FEMALE, NONE +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" new file mode 100644 index 0000000..1473bd4 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/TermName.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.domain.user.enums; + +public enum TermName { + AGE, SERVICE, PRIVACY, LOCATION, MARKETING +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/UserMissionStatus.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/UserMissionStatus.java" new file mode 100644 index 0000000..89c2c71 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/enums/UserMissionStatus.java" @@ -0,0 +1,6 @@ +package com.example.umc9th.domain.user.enums; + +public enum UserMissionStatus { + CHALLENGING, + COMPLETE +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/FoodException.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/FoodException.java" new file mode 100644 index 0000000..32fdfb4 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/FoodException.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.domain.user.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class FoodException extends GeneralException { + + public FoodException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/UserException.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/UserException.java" new file mode 100644 index 0000000..44031b5 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/UserException.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.user.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; + +public class UserException extends GeneralException{ + public UserException(BaseErrorCode code) { + super(code); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodErrorCode.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodErrorCode.java" new file mode 100644 index 0000000..f0f91fe --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodErrorCode.java" @@ -0,0 +1,19 @@ +package com.example.umc9th.domain.user.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum FoodErrorCode implements BaseErrorCode { + + FOOD_NOT_FOUND(HttpStatus.NOT_FOUND, "FOOD404_1", "음식을 찾을 수 없습니다."), + INVALID_FOOD_ID(HttpStatus.BAD_REQUEST, "FOOD400_1", "유효하지 않은 음식 ID입니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodSuccessCode.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodSuccessCode.java" new file mode 100644 index 0000000..6048d56 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/FoodSuccessCode.java" @@ -0,0 +1,20 @@ +package com.example.umc9th.domain.user.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseSuccessCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum FoodSuccessCode implements BaseSuccessCode { + + FOUND(HttpStatus.OK, + "MEMBER200_1", + "성공적으로 조회했습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserErrorCode.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserErrorCode.java" new file mode 100644 index 0000000..eeaa9d1 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserErrorCode.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.domain.user.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum UserErrorCode implements BaseErrorCode { + + NOT_FOUND(HttpStatus.NOT_FOUND, + "MEMBER404_1", + "해당 사용자를 찾지 못했습니다."), + + ALREADY_CHALLENGING(HttpStatus.BAD_REQUEST, + "MEMBER400_1", + "이미 진행중인 미션입니다."), + + + INVALID(HttpStatus.BAD_REQUEST, + "MEMBER400_2", + "유효하지 않은 사용자 정보입니다.") + ; + + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserSuccessCode.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserSuccessCode.java" new file mode 100644 index 0000000..7fa877e --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/exception/code/UserSuccessCode.java" @@ -0,0 +1,20 @@ +package com.example.umc9th.domain.user.exception.code; + +import com.example.umc9th.global.apiPayload.code.BaseSuccessCode; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum UserSuccessCode implements BaseSuccessCode { + + FOUND(HttpStatus.OK, + "MEMBER200_1", + "성공적으로 사용자를 조회했습니다."), + ; + + private final HttpStatus status; + private final String code; + private final String message; +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/FoodRepository.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/FoodRepository.java" new file mode 100644 index 0000000..d739c62 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/FoodRepository.java" @@ -0,0 +1,9 @@ +package com.example.umc9th.domain.user.repository; + +import com.example.umc9th.domain.user.entity.Food; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface FoodRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserFoodRepository.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserFoodRepository.java" new file mode 100644 index 0000000..0afa938 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserFoodRepository.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.user.repository; + +import com.example.umc9th.domain.user.entity.mapping.UserFood; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +// UserFoodRepository - UserFood 엔티티 관리 +@Repository +public interface UserFoodRepository extends JpaRepository { +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserMissionRepository.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserMissionRepository.java" new file mode 100644 index 0000000..7024a3d --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserMissionRepository.java" @@ -0,0 +1,15 @@ +package com.example.umc9th.domain.user.repository; + +import com.example.umc9th.domain.user.entity.mapping.UserMission; +import com.example.umc9th.domain.user.enums.UserMissionStatus; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface UserMissionRepository extends JpaRepository { + // 이미 도전 중인 미션인지 확인 + Optional findByUserIdAndMissionId(Long userId, Long missionId); + Page findByUserIdAndStatus(Long userId, UserMissionStatus status, Pageable pageable); +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserRepository.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserRepository.java" new file mode 100644 index 0000000..00d197b --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/repository/UserRepository.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.user.repository; + +import com.example.umc9th.domain.user.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface UserRepository extends JpaRepository { + Optional findByEmail(String email); +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandService.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandService.java" new file mode 100644 index 0000000..31af9a4 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandService.java" @@ -0,0 +1,8 @@ +package com.example.umc9th.domain.user.service.command; + +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; + +public interface UserCommandService { + UserResDTO.JoinDTO signup(UserReqDTO.JoinDTO dto); // ReqDTO로 받아서 ResDTO로 반환 +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandServiceImpl.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandServiceImpl.java" new file mode 100644 index 0000000..c384428 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/command/UserCommandServiceImpl.java" @@ -0,0 +1,73 @@ +package com.example.umc9th.domain.user.service.command; + +import com.example.umc9th.domain.user.converter.UserConverter; +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; +import com.example.umc9th.domain.user.entity.Food; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.entity.mapping.UserFood; +import com.example.umc9th.domain.user.exception.FoodException; +import com.example.umc9th.domain.user.exception.code.FoodErrorCode; +import com.example.umc9th.domain.user.repository.FoodRepository; +import com.example.umc9th.domain.user.repository.UserFoodRepository; +import com.example.umc9th.domain.user.repository.UserRepository; +import com.example.umc9th.global.auth.enums.Role; +import lombok.RequiredArgsConstructor; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class UserCommandServiceImpl implements UserCommandService { + + private final UserRepository userRepository; + private final UserFoodRepository userFoodRepository; + private final FoodRepository foodRepository; + private final PasswordEncoder passwordEncoder; + + @Override + @Transactional + public UserResDTO.JoinDTO signup(UserReqDTO.JoinDTO dto) { + + // 솔트된 비밀번호 생성 + String salt = passwordEncoder.encode(dto.password()); + + // 사용자 생성 + User user = UserConverter.toUser(dto, salt, Role.ROLE_USER); + + // DB 저장 + userRepository.save(user); + + // 선호 음식 존재 여부 확인 + if (dto.preferCategory() != null && dto.preferCategory().size() > 0) { + + List userFoodList = new ArrayList<>(); + + // 선호 음식 ID 별 조회 + for (Long id : dto.preferCategory()) { + // 음식 존재 여부 검증 + Food food = foodRepository.findById(id) + .orElseThrow(() -> new FoodException(FoodErrorCode.FOOD_NOT_FOUND)); + + // UserFood 엔티티 생성 + UserFood userFood = UserFood.builder() + .user(user) + .food(food) + .build(); + + userFoodList.add(userFood); + } + + // DB 저장 + userFoodRepository.saveAll(userFoodList); + } + + // 응답 DTO로 변환 + return UserConverter.toJoinDTO(user); + } +} + diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryService.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryService.java" new file mode 100644 index 0000000..0a61ab9 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryService.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.domain.user.service.query; + +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; +import jakarta.validation.Valid; + +public interface UserQueryService { + + UserResDTO.LoginDTO login(@Valid UserReqDTO.LoginDTO dto); +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryServiceImpl.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryServiceImpl.java" new file mode 100644 index 0000000..cb40cd1 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/domain/user/service/query/UserQueryServiceImpl.java" @@ -0,0 +1,47 @@ +package com.example.umc9th.domain.user.service.query; + +import com.example.umc9th.domain.user.dto.UserReqDTO.UserReqDTO; +import com.example.umc9th.domain.user.dto.UserResDTO.UserResDTO; +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.exception.UserException; +import com.example.umc9th.domain.user.exception.code.UserErrorCode; +import com.example.umc9th.domain.user.repository.UserRepository; +import com.example.umc9th.global.auth.details.CustomUserDetails; +import com.example.umc9th.global.auth.jwt.JwtUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class UserQueryServiceImpl implements UserQueryService { + + private final UserRepository userRepository; + private final PasswordEncoder passwordEncoder; + private final JwtUtil jwtUtil; + + @Override + public UserResDTO.LoginDTO login(UserReqDTO.LoginDTO dto) { + + // 1️⃣ 이메일로 유저 조회 + User user = userRepository.findByEmail(dto.email()) + .orElseThrow(() -> new UserException(UserErrorCode.NOT_FOUND)); + + // 2️⃣ 비밀번호 검증 + if (!passwordEncoder.matches(dto.password(), user.getPassword())) { + throw new UserException(UserErrorCode.INVALID); + } + + // 3️⃣ JWT 생성 + CustomUserDetails userDetails = new CustomUserDetails(user); + String accessToken = jwtUtil.createAccessToken(userDetails); + + // 4️⃣ 응답 DTO 반환 + return UserResDTO.LoginDTO.builder() + .userId(user.getId()) + .accessToken(accessToken) + .build(); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/annotation/ExistFoods.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/annotation/ExistFoods.java" new file mode 100644 index 0000000..71049f1 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/annotation/ExistFoods.java" @@ -0,0 +1,21 @@ +package com.example.umc9th.global.annotation; + +import com.example.umc9th.global.validator.FoodExistValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import java.lang.annotation.Target; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Documented +@Constraint(validatedBy = FoodExistValidator.class) +@Target( { ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER }) +@Retention(RetentionPolicy.RUNTIME) +public @interface ExistFoods { + //여기서 디폴트 메시지를 설정합니다. + String message() default "해당 음식이 존재하지 않습니다."; + Class[] groups() default {}; + Class[] payload() default {}; +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" new file mode 100644 index 0000000..e15b755 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/ApiResponse.java" @@ -0,0 +1,37 @@ +package com.example.umc9th.global.apiPayload; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.code.BaseSuccessCode; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +@JsonPropertyOrder({"isSuccess", "code", "message", "result"}) +public class ApiResponse { + + @JsonProperty("isSuccess") + private final Boolean isSuccess; + + @JsonProperty("code") + private final String code; + + @JsonProperty("message") + private final String message; + + @JsonProperty("result") + private T result; + + + // ✅ 성공한 경우 (성공 코드 인터페이스 사용) + public static ApiResponse onSuccess(BaseSuccessCode code, T result) { + return new ApiResponse<>(true, code.getCode(), code.getMessage(), result); + } + + // 실패한 경우 (result 포함) + public static ApiResponse onFailure(BaseErrorCode code, T result) { + return new ApiResponse<>(false, code.getCode(), code.getMessage(), result); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" new file mode 100644 index 0000000..d0d553f --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseErrorCode.java" @@ -0,0 +1,10 @@ +package com.example.umc9th.global.apiPayload.code; + +import org.springframework.http.HttpStatus; + +public interface BaseErrorCode { + + HttpStatus getStatus(); + String getCode(); + String getMessage(); +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" new file mode 100644 index 0000000..19d1b22 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/BaseSuccessCode.java" @@ -0,0 +1,9 @@ +package com.example.umc9th.global.apiPayload.code; + +import org.springframework.http.HttpStatus; + +public interface BaseSuccessCode { + HttpStatus getStatus(); + String getCode(); + String getMessage(); +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" new file mode 100644 index 0000000..c1ed6f2 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralErrorCode.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.global.apiPayload.code; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum GeneralErrorCode implements BaseErrorCode{ + + BAD_REQUEST(HttpStatus.BAD_REQUEST, + "COMMON400_1", + "잘못된 요청입니다."), + UNAUTHORIZED(HttpStatus.UNAUTHORIZED, + "AUTH401_1", + "인증이 필요합니다."), + FORBIDDEN(HttpStatus.FORBIDDEN, + "AUTH403_1", + "요청이 거부되었습니다."), + NOT_FOUND(HttpStatus.NOT_FOUND, + "COMMON404_1", + "요청한 리소스를 찾을 수 없습니다."), + VALID_FAIL(HttpStatus.BAD_REQUEST, + "COMMON400_2", + "요청값이 올바르지 않습니다."), + INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, + "COMMON500_1", + "예기치 않은 서버 에러가 발생했습니다."), + ; + + + private final HttpStatus status; + private final String code; + private final String message; +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" new file mode 100644 index 0000000..ef060c8 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/code/GeneralSuccessCode.java" @@ -0,0 +1,24 @@ +package com.example.umc9th.global.apiPayload.code; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springframework.http.HttpStatus; + +@Getter +@AllArgsConstructor +public enum GeneralSuccessCode implements BaseSuccessCode { + + OK(HttpStatus.OK, + "COMMON200", + "요청이 성공적으로 처리되었습니다."), + CREATED(HttpStatus.CREATED, + "COMMON201", + "리소스가 성공적으로 생성되었습니다."), + NO_CONTENT(HttpStatus.NO_CONTENT, + "COMMON204", + "요청이 성공적으로 처리되었으며, 반환할 내용이 없습니다."), + ; + private final HttpStatus status; + private final String code; + private final String message; +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" new file mode 100644 index 0000000..902d4b5 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/exception/GeneralException.java" @@ -0,0 +1,14 @@ +package com.example.umc9th.global.apiPayload.exception; + +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import lombok.Getter; + +@Getter +public class GeneralException extends RuntimeException { + private final BaseErrorCode code; + + public GeneralException(BaseErrorCode code) { + super(code.getMessage()); + this.code = code; + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" new file mode 100644 index 0000000..ee21fd2 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/apiPayload/handler/GeneralExceptionAdvice.java" @@ -0,0 +1,50 @@ +package com.example.umc9th.global.apiPayload.handler; + +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.BaseErrorCode; +import com.example.umc9th.global.apiPayload.code.GeneralErrorCode; +import com.example.umc9th.global.apiPayload.exception.GeneralException; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.util.HashMap; +import java.util.Map; + +@RestControllerAdvice +public class GeneralExceptionAdvice { + + // 1. 커스텀 예외 처리 + @ExceptionHandler(GeneralException.class) + public ResponseEntity> handleException(GeneralException ex) { + return ResponseEntity.status(ex.getCode().getStatus()) + .body(ApiResponse.onFailure(ex.getCode(), null)); + } + + // 2. @Valid 검증 실패 처리 + @ExceptionHandler(MethodArgumentNotValidException.class) + protected ResponseEntity>> handleMethodArgumentNotValidException( + MethodArgumentNotValidException ex + ) { + Map errors = new HashMap<>(); + + ex.getBindingResult().getFieldErrors().forEach(error -> + errors.put(error.getField(), error.getDefaultMessage()) + ); + + GeneralErrorCode code = GeneralErrorCode.VALID_FAIL; + ApiResponse> errorResponse = ApiResponse.onFailure(code, errors); + + return ResponseEntity.status(code.getStatus()).body(errorResponse); + } + + // 3. 그 외 모든 예외 + @ExceptionHandler(Exception.class) + public ResponseEntity> handleException(Exception ex) { + + BaseErrorCode code = GeneralErrorCode.INTERNAL_SERVER_ERROR; + return ResponseEntity.status(code.getStatus()) + .body(ApiResponse.onFailure(code, ex.getMessage())); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/details/CustomUserDetails.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/details/CustomUserDetails.java" new file mode 100644 index 0000000..19f7769 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/details/CustomUserDetails.java" @@ -0,0 +1,31 @@ +package com.example.umc9th.global.auth.details; + +import com.example.umc9th.domain.user.entity.User; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; +import java.util.List; + + +@RequiredArgsConstructor +public class CustomUserDetails implements UserDetails { + + private final User user; + + @Override + public Collection getAuthorities() { + return List.of(() -> user.getRole().toString()); + } + + @Override + public String getPassword() { + return user.getPassword(); + } + + @Override + public String getUsername() { + return user.getEmail(); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/enums/Role.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/enums/Role.java" new file mode 100644 index 0000000..bbb8130 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/enums/Role.java" @@ -0,0 +1,5 @@ +package com.example.umc9th.global.auth.enums; + +public enum Role { + ROLE_ADMIN, ROLE_USER +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/jwt/JwtAuthFilter.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/jwt/JwtAuthFilter.java" new file mode 100644 index 0000000..e2fdc3d --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/jwt/JwtAuthFilter.java" @@ -0,0 +1,62 @@ +package com.example.umc9th.global.auth.jwt; + +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralErrorCode; +import com.example.umc9th.global.auth.service.CustomUserDetailsService; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.lang.NonNull; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.web.filter.OncePerRequestFilter; + + +import java.io.IOException; + +@RequiredArgsConstructor +public class JwtAuthFilter extends OncePerRequestFilter { + + private final JwtUtil jwtUtil; + private final CustomUserDetailsService customUserDetailsService; + + @Override + protected void doFilterInternal( + @NonNull HttpServletRequest request, + @NonNull HttpServletResponse response, + @NonNull FilterChain filterChain + ) throws ServletException, IOException { + + // 토큰 가져오기 + String token = request.getHeader("Authorization"); + // token이 없거나 Bearer가 아니면 넘기기 + if (token == null || !token.startsWith("Bearer ")) { + filterChain.doFilter(request, response); + return; + } + // Bearer이면 추출 + token = token.replace("Bearer ", ""); + // AccessToken 검증하기: 올바른 토큰이면 + if (jwtUtil.isValid(token)) { + // 토큰에서 이메일 추출 + String email = jwtUtil.getEmail(token); + // 인증 객체 생성: 이메일로 찾아온 뒤, 인증 객체 생성 + UserDetails user = customUserDetailsService.loadUserByUsername(email); + Authentication auth = new UsernamePasswordAuthenticationToken( + user, + null, + user.getAuthorities() + ); + // 인증 완료 후 SecurityContextHolder에 넣기 + SecurityContextHolder.getContext().setAuthentication(auth); + } + filterChain.doFilter(request, response); + + + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/jwt/JwtUtil.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/jwt/JwtUtil.java" new file mode 100644 index 0000000..2e27888 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/jwt/JwtUtil.java" @@ -0,0 +1,93 @@ +package com.example.umc9th.global.auth.jwt; + +import com.example.umc9th.global.auth.details.CustomUserDetails; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jws; +import io.jsonwebtoken.JwtException; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.security.Keys; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.stereotype.Component; + +import javax.crypto.SecretKey; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.time.Instant; +import java.util.Date; +import java.util.stream.Collectors; + +@Component +public class JwtUtil { + + private final SecretKey secretKey; + private final Duration accessExpiration; + + public JwtUtil( + @Value("${jwt.token.secretKey}") String secret, + @Value("${jwt.token.expiration.access}") Long accessExpiration + ) { + this.secretKey = Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8)); + this.accessExpiration = Duration.ofMillis(accessExpiration); + } + + // AccessToken 생성 + public String createAccessToken(CustomUserDetails user) { + return createToken(user, accessExpiration); + } + + /** 토큰에서 이메일 가져오기 + * + * @param token 유저 정보를 추출할 토큰 + * @return 유저 이메일을 토큰에서 추출합니다 + */ + public String getEmail(String token) { + try { + return getClaims(token).getPayload().getSubject(); // Parsing해서 Subject 가져오기 + } catch (JwtException e) { + return null; + } + } + + /** 토큰 유효성 확인 + * + * @param token 유효한지 확인할 토큰 + * @return True, False 반환합니다 + */ + public boolean isValid(String token) { + try { + getClaims(token); + return true; + } catch (JwtException e) { + return false; + } + } + + // 토큰 생성 + private String createToken(CustomUserDetails user, Duration expiration) { + Instant now = Instant.now(); + + // 인가 정보 + String authorities = user.getAuthorities().stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.joining(",")); + + return Jwts.builder() + .subject(user.getUsername()) // User 이메일을 Subject로 + .claim("role", authorities) + .claim("email", user.getUsername()) + .issuedAt(Date.from(now)) // 언제 발급한지 + .expiration(Date.from(now.plus(expiration))) // 언제까지 유효한지 + .signWith(secretKey) // sign할 Key + .compact(); + } + + // 토큰 정보 가져오기 + private Jws getClaims(String token) throws JwtException { + return Jwts.parser() + .verifyWith(secretKey) + .clockSkewSeconds(60) + .build() + .parseSignedClaims(token); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/service/CustomUserDetailsService.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/service/CustomUserDetailsService.java" new file mode 100644 index 0000000..b85a95c --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/auth/service/CustomUserDetailsService.java" @@ -0,0 +1,30 @@ +package com.example.umc9th.global.auth.service; + +import com.example.umc9th.domain.user.entity.User; +import com.example.umc9th.domain.user.exception.UserException; +import com.example.umc9th.domain.user.exception.code.UserErrorCode; +import com.example.umc9th.domain.user.repository.UserRepository; +import com.example.umc9th.global.auth.details.CustomUserDetails; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class CustomUserDetailsService implements UserDetailsService { + + private final UserRepository userRepository; + + @Override + public UserDetails loadUserByUsername( + String username + ) throws UsernameNotFoundException { + // 검증할 Member 조회 + User user = userRepository.findByEmail(username) + .orElseThrow(() -> new UserException(UserErrorCode.NOT_FOUND)); + // CustomUserDetails 반환 + return new CustomUserDetails(user); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/AuthenticationEntryPointImpl.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/AuthenticationEntryPointImpl.java" new file mode 100644 index 0000000..be1884a --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/AuthenticationEntryPointImpl.java" @@ -0,0 +1,33 @@ +package com.example.umc9th.global.config; + +import com.example.umc9th.global.apiPayload.ApiResponse; +import com.example.umc9th.global.apiPayload.code.GeneralErrorCode; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; + +import java.io.IOException; + +public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint { + + private final ObjectMapper objectMapper = new ObjectMapper(); + + @Override + public void commence(HttpServletRequest request, + HttpServletResponse response, + AuthenticationException authException) throws IOException { + + response.setContentType("application/json;charset=UTF-8"); + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + + // ApiResponse.onFailure 사용 + ApiResponse apiResponse = ApiResponse.onFailure( + GeneralErrorCode.UNAUTHORIZED, // BaseErrorCode 상속 + null // 인증 실패라서 result는 null + ); + + response.getWriter().write(objectMapper.writeValueAsString(apiResponse)); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" new file mode 100644 index 0000000..0ba8875 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/QuerydslConfig.java" @@ -0,0 +1,15 @@ +package com.example.umc9th.global.config; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class QuerydslConfig { + + @Bean + public JPAQueryFactory jpaQueryFactory(EntityManager em) { + return new JPAQueryFactory(em); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SecurityConfig.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SecurityConfig.java" new file mode 100644 index 0000000..ddc9c97 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SecurityConfig.java" @@ -0,0 +1,74 @@ +package com.example.umc9th.global.config; + +import com.example.umc9th.global.auth.jwt.JwtAuthFilter; +import com.example.umc9th.global.auth.jwt.JwtUtil; +import com.example.umc9th.global.auth.service.CustomUserDetailsService; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +@EnableWebSecurity +@Configuration +@RequiredArgsConstructor +public class SecurityConfig { + + private final JwtUtil jwtUtil; + private final CustomUserDetailsService customUserDetailsService; + + private final String[] allowUris = { + "/login", + "/sign-up", + "/swagger-ui/**", + "/swagger-resources/**", + "/v3/api-docs/**", + }; + + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http + .authorizeHttpRequests(requests -> requests + .requestMatchers(allowUris).permitAll() + .requestMatchers("/admin/**").hasRole("ADMIN") + .anyRequest().authenticated() + ) + // 폼로그인 비활성화 + .formLogin(AbstractHttpConfigurer::disable) + // JwtAuthFilter를 UsernamePasswordAuthenticationFilter + .addFilterBefore(jwtAuthFilter(), UsernamePasswordAuthenticationFilter.class) + .csrf(AbstractHttpConfigurer::disable) + .logout(logout -> logout + .logoutUrl("/logout") + .logoutSuccessUrl("/login?logout") + .permitAll() + ) + .exceptionHandling(exception -> exception.authenticationEntryPoint(authenticationEntryPoint())) + + ; + + return http.build(); + } + + @Bean + public JwtAuthFilter jwtAuthFilter() { + return new JwtAuthFilter(jwtUtil, customUserDetailsService); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } + + + @Bean + public AuthenticationEntryPoint authenticationEntryPoint() { + return new AuthenticationEntryPointImpl(); + } +} \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SwaggerConfig.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SwaggerConfig.java" new file mode 100644 index 0000000..70757f8 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/config/SwaggerConfig.java" @@ -0,0 +1,47 @@ +package com.example.umc9th.global.config; + +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; +import io.swagger.v3.oas.models.servers.Server; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SwaggerConfig { + + @Bean + public OpenAPI openAPI() { + + // 기본 정보 + Info info = new Info() + .title("Project API") + .description("Project Swagger Documentation") + .version("0.0.1"); + + // JWT 인증 스키마 이름 + String schemeName = "JWT"; + + // JWT 인증 요구 + SecurityRequirement securityRequirement = new SecurityRequirement() + .addList(schemeName); + + // JWT 스키마 설정 + Components components = new Components() + .addSecuritySchemes(schemeName, + new SecurityScheme() + .name(schemeName) + .type(SecurityScheme.Type.HTTP) + .scheme("bearer") + .bearerFormat("JWT") + ); + + return new OpenAPI() + .info(info) + .addServersItem(new Server().url("/")) + .addSecurityItem(securityRequirement) + .components(components); + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" new file mode 100644 index 0000000..70f7459 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/entity/BaseEntity.java" @@ -0,0 +1,26 @@ +package com.example.umc9th.global.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +@Getter +public abstract class BaseEntity { + + @CreatedDate + @Column(name = "created_at", nullable = false, updatable = false) + private LocalDateTime createdAt; + + @LastModifiedDate + @Column(name = "updated_at", nullable = false) + private LocalDateTime updatedAt; +} + diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/FoodExistValidator.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/FoodExistValidator.java" new file mode 100644 index 0000000..32ea16d --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/FoodExistValidator.java" @@ -0,0 +1,35 @@ +package com.example.umc9th.global.validator; + +import com.example.umc9th.domain.user.repository.FoodRepository; +import com.example.umc9th.domain.user.exception.code.FoodErrorCode; +import com.example.umc9th.global.annotation.ExistFoods; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class FoodExistValidator implements ConstraintValidator> { + + private final FoodRepository foodRepository; + + @Override + public boolean isValid(List values, ConstraintValidatorContext context) { + + if (values == null || values.isEmpty()) return true; // 값 없으면 통과 + + boolean isValid = values.stream() + .allMatch(foodRepository::existsById); + + if (!isValid) { + context.disableDefaultConstraintViolation(); + context.buildConstraintViolationWithTemplate(FoodErrorCode.FOOD_NOT_FOUND.getMessage()) + .addConstraintViolation(); + } + + return isValid; + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPage.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPage.java" new file mode 100644 index 0000000..9d33af1 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPage.java" @@ -0,0 +1,17 @@ +package com.example.umc9th.global.validator; + +import jakarta.validation.Constraint; +import jakarta.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.PARAMETER) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = ValidPageValidator.class) +public @interface ValidPage { + String message() default "페이지는 0보다 큰 값이어야 합니다."; + Class[] groups() default {}; + Class[] payload() default {}; +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPageValidator.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPageValidator.java" new file mode 100644 index 0000000..c52e86d --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/java/com/example/umc9th/global/validator/ValidPageValidator.java" @@ -0,0 +1,11 @@ +package com.example.umc9th.global.validator; + +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +public class ValidPageValidator implements ConstraintValidator { + @Override + public boolean isValid(Integer value, ConstraintValidatorContext context) { + return value != null && value > 0; + } +} diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" new file mode 100644 index 0000000..8e28b98 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/main/resources/application.yml" @@ -0,0 +1,25 @@ +spring: + application: + name: umc9th + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${DB_URL} + username: ${DB_USER} + password: ${DB_PW} + + jpa: + database: mysql + show-sql: true + hibernate: + ddl-auto: update + properties: + hibernate: + format_sql: true + + +jwt: + token: + secretKey: ZGh3YWlkc2F2ZXdhZXZ3b2EgMTM5ZXUgMDMxdWMyIHEyMiBAIDAgKTJFVio= + expiration: + access: 14400000 \ No newline at end of file diff --git "a/10\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" new file mode 100644 index 0000000..a96d2a7 --- /dev/null +++ "b/10\354\243\274\354\260\250\353\257\270\354\205\230/src/test/java/com/example/umc9th/Umc9thApplicationTests.java" @@ -0,0 +1,13 @@ +package com.example.umc9th; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class Umc9thApplicationTests { + + @Test + void contextLoads() { + } + +}

    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