From eca93d7179b628b3af4700699f8b5f81aaf43189 Mon Sep 17 00:00:00 2001 From: Kim Jinu <105920346+jinu6262@users.noreply.github.com> Date: Mon, 2 Oct 2023 18:53:20 +0900 Subject: [PATCH 1/8] Main (#24) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 빌드 에러 수정 * fix: Update index.ts (#13) * fix: Update index.ts (#15) * release 1.0.2 ver (#18) * fix: Update index.ts (#13) (#14) * feat: 미디어 쿼리, 페이지 수정 (#17) * design: 로그인 css 수정 * design: 미디어 쿼리, 사소한 css 수정 * feat: 로그인 페이지 레이아웃 제외 * release 1.0.3 ver (#22) * fix: Update index.ts (#13) (#14) * feat: 미디어 쿼리, 페이지 수정 (#17) * design: 로그인 css 수정 * design: 미디어 쿼리, 사소한 css 수정 * feat: 로그인 페이지 레이아웃 제외 * Main (#19) * fix: Update index.ts (#13) * fix: Update index.ts (#15) * release 1.0.2 ver (#18) * fix: Update index.ts (#13) (#14) * feat: 미디어 쿼리, 페이지 수정 (#17) * design: 로그인 css 수정 * design: 미디어 쿼리, 사소한 css 수정 * feat: 로그인 페이지 레이아웃 제외 * fix: 사소한 코드 수정 * feat: visitor페이지 api 연결 (#21) * refactor: api 연결을 위한 설정 변경 * docs: 타입 수정 * feat: api 연결 작성 * fix: 배포 오류 수정 * fix: 배포 오류 수정 --- src/components/admin/visitor/index.tsx | 7 +- src/components/admin/visitor/testList.ts | 148 ----------------------- 2 files changed, 1 insertion(+), 154 deletions(-) delete mode 100644 src/components/admin/visitor/testList.ts diff --git a/src/components/admin/visitor/index.tsx b/src/components/admin/visitor/index.tsx index ada2fdf..a34380f 100644 --- a/src/components/admin/visitor/index.tsx +++ b/src/components/admin/visitor/index.tsx @@ -6,7 +6,6 @@ import { css } from '@emotion/react'; import { useEffect, useState } from 'react'; import { GetVisitorsData } from '@/types/visitor/api'; import dayjs from 'dayjs'; -import testList from './testList'; import VisitorListPagenation from './VisitorListPagenation'; function Index() { @@ -25,11 +24,7 @@ function Index() { } }; visitorsData(); - }, []); - - useEffect(() => { - setVisitorList(testList); - }, [setVisitorList]); + }, [nowYear]); const [page, setPage] = useState(1); const limit = 5; // posts가 보일 최대한의 갯수 diff --git a/src/components/admin/visitor/testList.ts b/src/components/admin/visitor/testList.ts deleted file mode 100644 index 715e3ce..0000000 --- a/src/components/admin/visitor/testList.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { VisitorListProps } from '@/types/visitor/visitor'; - -const testList: VisitorListProps = { - content: [ - { - invitationId: 1, - company: '휘트니스센터1', - host: '한재식', - visitorId: 1, - startDateTime: '2023-09-19T10:30:00', - visitTime: '2023-09-19T11:17:19', // 첫 방문 시간 - visitorName: '최태윤', - officeName: '패캠 D강의장', - carNumber: '12가1234', - inTime: '2023-09-20T16:17:19', - outTime: '2023-09-20T21:30:21', - stayTime: 313, - }, - { - invitationId: 2, - company: '휘트니스센터2', - host: '한재식', - visitorId: 2, - startDateTime: '2023-09-19T10:30:00', - visitTime: '2023-09-19T11:17:19', // 첫 방문 시간 - visitorName: '최태윤', - officeName: '패캠 D강의장', - carNumber: '12가1234', - inTime: '2023-09-20T16:17:19', - outTime: '2023-09-20T21:30:21', - stayTime: 313, - }, - { - invitationId: 3, - company: '휘트니스센터3', - host: '한재식', - visitorId: 3, - startDateTime: '2023-09-19T10:30:00', - visitTime: '2023-09-19T11:17:19', // 첫 방문 시간 - visitorName: '최태윤', - officeName: '패캠 D강의장', - carNumber: '12가1234', - inTime: '2023-09-20T16:17:19', - outTime: '2023-09-20T21:30:21', - stayTime: 313, - }, - { - invitationId: 4, - company: '휘트니스센터4', - host: '한재식', - visitorId: 4, - startDateTime: '2023-09-19T10:30:00', - visitTime: '2023-09-19T11:17:19', // 첫 방문 시간 - visitorName: '최태윤', - officeName: '패캠 D강의장', - carNumber: '12가1234', - inTime: '2023-09-20T16:17:19', - outTime: '2023-09-20T21:30:21', - stayTime: 313, - }, - { - invitationId: 5, - company: '휘트니스센터5', - host: '한재식', - visitorId: 5, - startDateTime: '2023-09-19T10:30:00', - visitTime: '2023-09-19T11:17:19', // 첫 방문 시간 - visitorName: '최태윤', - officeName: '패캠 D강의장', - carNumber: '12가1234', - inTime: '2023-09-20T16:17:19', - outTime: '2023-09-20T21:30:21', - stayTime: 313, - }, - { - invitationId: 6, - company: '휘트니스센터6', - host: '한재식', - visitorId: 6, - startDateTime: '2023-09-19T10:30:00', - visitTime: '2023-09-19T11:17:19', // 첫 방문 시간 - visitorName: '최태윤', - officeName: '패캠 D강의장', - carNumber: '12가1234', - inTime: '2023-09-20T16:17:19', - outTime: '2023-09-20T21:30:21', - stayTime: 313, - }, - { - invitationId: 7, - company: '휘트니스센터7', - host: '한재식', - visitorId: 7, - startDateTime: '2023-09-19T10:30:00', - visitTime: '2023-09-19T11:17:19', // 첫 방문 시간 - visitorName: '최태윤', - officeName: '패캠 D강의장', - carNumber: '12가1234', - inTime: '2023-09-20T16:17:19', - outTime: '2023-09-20T21:30:21', - stayTime: 313, - }, - { - invitationId: 8, - company: '휘트니스센터8', - host: '한재식', - visitorId: 8, - startDateTime: '2023-09-19T10:30:00', - visitTime: '2023-09-19T11:17:19', // 첫 방문 시간 - visitorName: '최태윤', - officeName: '패캠 D강의장', - carNumber: '12가1234', - inTime: '2023-09-20T16:17:19', - outTime: '2023-09-20T21:30:21', - stayTime: 313, - }, - { - invitationId: 9, - company: '휘트니스센터9', - host: '한재식', - visitorId: 9, - startDateTime: '2023-09-19T10:30:00', - visitTime: '2023-09-19T11:17:19', // 첫 방문 시간 - visitorName: '최태윤', - officeName: '패캠 D강의장', - carNumber: '12가1234', - inTime: '2023-09-20T16:17:19', - outTime: '2023-09-20T21:30:21', - stayTime: 313, - }, - { - invitationId: 10, - company: '휘트니스센터10', - host: '한재식', - visitorId: 10, - startDateTime: '2023-09-19T10:30:00', - visitTime: '2023-09-19T11:17:19', // 첫 방문 시간 - visitorName: '최태윤', - officeName: '패캠 D강의장', - carNumber: '12가1234', - inTime: '2023-09-20T16:17:19', - outTime: '2023-09-20T21:30:21', - stayTime: 313, - }, - ], -}; - -export default testList; From 6e555e0deebe100f88a8fe152b7d1341d3693b9c Mon Sep 17 00:00:00 2001 From: Kim Jinu <105920346+jinu6262@users.noreply.github.com> Date: Mon, 2 Oct 2023 19:35:09 +0900 Subject: [PATCH 2/8] =?UTF-8?q?fix:=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EC=85=98=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#25)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 빌드 에러 수정 * fix: Update index.ts (#13) * fix: Update index.ts (#15) * release 1.0.2 ver (#18) * fix: Update index.ts (#13) (#14) * feat: 미디어 쿼리, 페이지 수정 (#17) * design: 로그인 css 수정 * design: 미디어 쿼리, 사소한 css 수정 * feat: 로그인 페이지 레이아웃 제외 * release 1.0.3 ver (#22) * fix: Update index.ts (#13) (#14) * feat: 미디어 쿼리, 페이지 수정 (#17) * design: 로그인 css 수정 * design: 미디어 쿼리, 사소한 css 수정 * feat: 로그인 페이지 레이아웃 제외 * Main (#19) * fix: Update index.ts (#13) * fix: Update index.ts (#15) * release 1.0.2 ver (#18) * fix: Update index.ts (#13) (#14) * feat: 미디어 쿼리, 페이지 수정 (#17) * design: 로그인 css 수정 * design: 미디어 쿼리, 사소한 css 수정 * feat: 로그인 페이지 레이아웃 제외 * fix: 사소한 코드 수정 * feat: visitor페이지 api 연결 (#21) * refactor: api 연결을 위한 설정 변경 * docs: 타입 수정 * feat: api 연결 작성 * fix: 배포 오류 수정 * fix: 배포 오류 수정 * fix: 페이지네이션 버그 수정 --- src/components/admin/visitor/VisitorList.tsx | 9 +++++++-- src/components/admin/visitor/VisitorSearch.tsx | 3 ++- src/components/admin/visitor/index.tsx | 2 +- src/types/visitor/visitor.ts | 1 + 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/components/admin/visitor/VisitorList.tsx b/src/components/admin/visitor/VisitorList.tsx index b79aec6..9a12079 100644 --- a/src/components/admin/visitor/VisitorList.tsx +++ b/src/components/admin/visitor/VisitorList.tsx @@ -17,7 +17,7 @@ function VisitorList({ content }: GetVisitorsData) {
차량번호
주차시간
- {content && + {content.length ? ( content.map((item) => { return (데이터 없음
+{item.startDateTime && - dayjs(item.startDateTime).format('YYYY-MM-DD hh:mm')} + dayjs(item.startDateTime).format('YYYY-MM-DD HH:mm')}
{item.visitTime && - dayjs(item.visitTime).format('YYYY-MM-DD h:m')} + dayjs(item.visitTime).format('YYYY-MM-DD HH:m')}
{item.company} @@ -38,15 +38,13 @@ function VisitorList({ content }: GetVisitorsData) {
{item.visitorName}
{item.officeName}
- {item.inTime && dayjs(item.inTime).format('YYYY-MM-DD h:m')}
+ {item.inTime && dayjs(item.inTime).format('YYYY-MM-DD HH:m')}
- {item.outTime && dayjs(item.outTime).format('YYYY-MM-DD h:m')}
+ {item.outTime &&
+ dayjs(item.outTime).format('YYYY-MM-DD HH:m')}
{item.carNumber}
-- {item.stayTime && - dayjs(item.stayTime).format('YYYY-MM-DD h:m')} -
+ {item.stayTime ?{item.stayTime}분
: } ); }) From f0e7eeac5c3c11b3c60e8487867eed00eddcae8f Mon Sep 17 00:00:00 2001 From: Kim Jinu <105920346+jinu6262@users.noreply.github.com> Date: Tue, 3 Oct 2023 21:00:34 +0900 Subject: [PATCH 4/8] =?UTF-8?q?fix:=20=EC=82=AC=EC=9D=B4=EB=93=9C=EB=B0=94?= =?UTF-8?q?=20=EB=8F=99=EC=9E=91=20=EC=88=98=EC=A0=95=20(#28)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: Update index.ts (#15) * feat: 아이콘 추가 * feat: 아이콘 추가 * feat: 아이콘 추가 * fix: 사이드바 동작 수정 * fix: 사소한 수정 --- src/assets/icons/community.svg | 8 +++++ src/assets/icons/company.svg | 13 ++++++++ src/assets/icons/complaints.svg | 10 ++++++ src/assets/icons/dashboard.svg | 10 ++++++ src/assets/icons/index.ts | 29 +++++++++++++++- src/assets/icons/maintenanceCost.svg | 10 ++++++ src/assets/icons/notice.svg | 14 ++++++++ src/assets/icons/publicFacilities.svg | 10 ++++++ src/assets/icons/setting.svg | 10 ++++++ src/assets/icons/survey.svg | 10 ++++++ src/assets/icons/visitor.svg | 12 +++++++ src/components/common/Icons.tsx | 46 ++++++++++++++++++++++++++ src/components/common/SideMenu.tsx | 10 ++++++ src/components/common/SideMenuItem.tsx | 34 +++++++++++++++++-- src/constants/common/index.ts | 21 ++++++++++-- src/types/common/icon.ts | 4 +++ src/types/common/sideMenuItem.ts | 12 +++++-- 17 files changed, 255 insertions(+), 8 deletions(-) create mode 100644 src/assets/icons/community.svg create mode 100644 src/assets/icons/company.svg create mode 100644 src/assets/icons/complaints.svg create mode 100644 src/assets/icons/dashboard.svg create mode 100644 src/assets/icons/maintenanceCost.svg create mode 100644 src/assets/icons/notice.svg create mode 100644 src/assets/icons/publicFacilities.svg create mode 100644 src/assets/icons/setting.svg create mode 100644 src/assets/icons/survey.svg create mode 100644 src/assets/icons/visitor.svg create mode 100644 src/components/common/Icons.tsx create mode 100644 src/types/common/icon.ts diff --git a/src/assets/icons/community.svg b/src/assets/icons/community.svg new file mode 100644 index 0000000..46f16a2 --- /dev/null +++ b/src/assets/icons/community.svg @@ -0,0 +1,8 @@ + diff --git a/src/assets/icons/company.svg b/src/assets/icons/company.svg new file mode 100644 index 0000000..ee0cd54 --- /dev/null +++ b/src/assets/icons/company.svg @@ -0,0 +1,13 @@ + diff --git a/src/assets/icons/complaints.svg b/src/assets/icons/complaints.svg new file mode 100644 index 0000000..5cddb6a --- /dev/null +++ b/src/assets/icons/complaints.svg @@ -0,0 +1,10 @@ + diff --git a/src/assets/icons/dashboard.svg b/src/assets/icons/dashboard.svg new file mode 100644 index 0000000..fcc02e9 --- /dev/null +++ b/src/assets/icons/dashboard.svg @@ -0,0 +1,10 @@ + diff --git a/src/assets/icons/index.ts b/src/assets/icons/index.ts index 0c59b37..74eeefe 100644 --- a/src/assets/icons/index.ts +++ b/src/assets/icons/index.ts @@ -4,5 +4,32 @@ import ChevronRight from '@/assets/icons/ChevronRight.svg'; import Excel from '@/assets/icons/Excel.svg'; import Left from '@/assets/icons/Left.svg'; import Right from '@/assets/icons/Right.svg'; +import Dashboard from '@/assets/icons/dashboard.svg'; +import Company from '@/assets/icons/company.svg'; +import Visitor from '@/assets/icons/visitor.svg'; +import Community from '@/assets/icons/community.svg'; +import Notice from '@/assets/icons/notice.svg'; +import Complaints from '@/assets/icons/complaints.svg'; +import PublicFacilities from '@/assets/icons/publicFacilities.svg'; +import MaintenanceCost from '@/assets/icons/maintenanceCost.svg'; +import Survey from '@/assets/icons/survey.svg'; +import Setting from '@/assets/icons/setting.svg'; -export { Notification, User, ChevronRight, Excel, Left, Right }; +export { + Notification, + User, + ChevronRight, + Excel, + Left, + Right, + Dashboard, + Company, + Visitor, + Complaints, + Notice, + Community, + PublicFacilities, + MaintenanceCost, + Survey, + Setting, +}; diff --git a/src/assets/icons/maintenanceCost.svg b/src/assets/icons/maintenanceCost.svg new file mode 100644 index 0000000..83a4626 --- /dev/null +++ b/src/assets/icons/maintenanceCost.svg @@ -0,0 +1,10 @@ + diff --git a/src/assets/icons/notice.svg b/src/assets/icons/notice.svg new file mode 100644 index 0000000..953aef9 --- /dev/null +++ b/src/assets/icons/notice.svg @@ -0,0 +1,14 @@ + diff --git a/src/assets/icons/publicFacilities.svg b/src/assets/icons/publicFacilities.svg new file mode 100644 index 0000000..804cb6b --- /dev/null +++ b/src/assets/icons/publicFacilities.svg @@ -0,0 +1,10 @@ + diff --git a/src/assets/icons/setting.svg b/src/assets/icons/setting.svg new file mode 100644 index 0000000..a563d86 --- /dev/null +++ b/src/assets/icons/setting.svg @@ -0,0 +1,10 @@ + diff --git a/src/assets/icons/survey.svg b/src/assets/icons/survey.svg new file mode 100644 index 0000000..3e37ef6 --- /dev/null +++ b/src/assets/icons/survey.svg @@ -0,0 +1,10 @@ + diff --git a/src/assets/icons/visitor.svg b/src/assets/icons/visitor.svg new file mode 100644 index 0000000..4965913 --- /dev/null +++ b/src/assets/icons/visitor.svg @@ -0,0 +1,12 @@ + diff --git a/src/components/common/Icons.tsx b/src/components/common/Icons.tsx new file mode 100644 index 0000000..ccbe73e --- /dev/null +++ b/src/components/common/Icons.tsx @@ -0,0 +1,46 @@ +import { IconsProps } from '@/types/common/icon'; +import { COMMON_ICON_NAMES } from '@/constants/common'; + +import { + Dashboard, + Company, + Visitor, + Complaints, + Notice, + Community, + PublicFacilities, + MaintenanceCost, + Survey, + Setting, +} from '@/assets/icons'; + +function Icons({ icon, color }: IconsProps) { + const { side } = COMMON_ICON_NAMES; + + switch (icon) { + case side.dashboard: + return검색
dAMQaiH zm^r3v#$Q#2T=X>bsY#D%s!bhs^M9PMAcHbCc0FMHV{u-dwlL;a1eJ63v5U*?Q_8JO zT#50!RD619#j_Uf))0ooADz~*9&lN!bBDRUgE>Vud-i5ck%vT=r^yD*^?Mp@Q^v+V zG#-?gKlr}Eeqifb{|So?HM&g91P8|av8hQoCmQXkd?7wIJw b z_^v8bbg` SAn{I*4bH$u(RZ6*x UhuA~hc=8czK8SHEKTzSxgbwi~9(OqJB&gwb^l4+m`k*Q;_?>Y-APi1{k zAHQ)P)G)f|AyjSgcCFps)Fh6Bca*Xznq36!pV6Az&m{O8$wGFD? zY&O*3*J0;_EqM#jh6^gMQKpXV?#1?>$ml1xvh8nSN>-?H=V;nJIwB07YX$e6vLxH( zqYwQ>qxwR(i4f)DLd)-$P>T-no_c!LsN@)8`e;W@)-Hj0>nJ-}Kla4-ZdPJzI&Mce zv)V_j;(3ERN3_@I$N<^|4Lf`B;8n+bX@bHbcZTopEmDI*Jfl)-pFDvo6svPRoo@(x z);_{lY<;);XzT`dBFpRmGrr}z5u1=p C^ S-{ce6iXQlLGcItwJ^mZx{m$&DA_oEZ)B{_bYPq-HA zcH8WGoBG(aBU_j)vEy+_71T34@4dmSg!|M8Vf92Zj6WH7Q7t#OHQqWgFE3ARt+%!T z?oLovLVlnf?2c7pTc)~cc^($_8nyKwsN`RA-23ed3sdj(ys%pjjM+9JrctL;dy8a( z@en&CQmnV(()bu|Y%G1-4a(6x{aLytn$T-;(&{QIJB9vMox11U-1HpD@d(QkaJdEb zG{)+6Dos_L+O3NpWo^=gR?evp|CqEG?L&Ut#D*KLaRFOgOEK(Kq1@!EGcTfo+%A&I z=dLbB+d$u{sh?u)xP{PF8L%;YPPW53+@{>5W=Jt#wQpN;0_HYdw1{ksf_XhO4#2F= zyPx6Lx2<92L-;L5PD`zn6zwIH`Jk( $?Qw({erA$^bC;q33hv!d!>%wRhj# zal^hk+WGNg;rJtb-EB(?czvOM=H7dl=vblBwAv>}%1@{}mnpUznfq1cE^sgsL0*4I zJ##!*B?=vI_OEVis5o+_IwMIRrpQyT_Sq~ZU%oY7c5JMIADzpD!Upz9h@iWg_>>~j zOLS;wp^i$-E?4<_cp?RiS%Rd?i;f*mOz=~(&3lo<=@(nR!_Rqiprh@weZlL!t#NCc zO!QTcInq|%#>OVgobj{~ixEUec`E25zJ~*DofsQdzIa@5^nOXj2T;8O`l--(QyU ^$t?TGY^7#&FQ+2SS3B#qK*k3`ye?8jUYSajE5iBbJls75CCc(m3dk{t?- zopcER9{Z?TC)mk~gpi^kbbu>b-+a{m#8-y2^p$ka4n60w;Sc2}HMf<8JUvh CL0B&Btk)T`ctE$*qNW8L$`7!r^9T+>=<=2qaq-;ll2{`{Rg zc5a0ZUI$oG&j-qVOuKa=*v4aY#IsoM+1|c4Z)<}lEDvy;5huB@1RJPquU2U*U-;gu z=En2m+qjBzR#DEJDO`WU)hdd{Vj%^0V*KoyZ|5lzV87&g_j~NCjwv0uQVqXOb*QrQ zy|Qn`hxx(58c 70$E;L(X0uZZ72M1!6oeg)(cdKO ze0gDaTz+ohR-#d)NbAH4x{I(21yjwvBQfmpLu$)|m{XolbgF!pmsqJ#D}(ylp6uC> z{bqtcI#hT#HW=wl7>p!38sKsJ`r8}lt-q%Keqy%u(xk=yiIJiUw6|5IvkS+#?JTBl z8H5(Q?l#wzazujH!8o>1xtn8#_w+397* _cy8!pQGP%K(Ga3pAjsaTbbXJlQF_+m+-UpUUent@xM zg%jqLUExj~o^vQ3Gl*>wh=_gOr2*|U64_iXb+-111a H}$TjeajM+I20xw(((>fej-@CIz4S1pi$(#}P7`4({6QS2CaQS4NPENDp>sAqD z$bH4KGzXGffkJ7R>V>)>tC)uax{UsN*dbeNC*v}#8Y#OWYwL4t$ePR?VTyIs!wea+ z5Urmc)X|^`MG~*dS6pGSbU+gPJoq*^a=_>$n4|P^w$sMBBy@f*Z^Jg6?n5?oId6f{ z$LW4M|4m502z0t7g<#Bx%X;9<=)smFolV&(V^(7Cv2-sxbxopQ!)*#ZRhTBpx1)Fc zNm1T%bONzv6@#|dz(w02AH8OXe>kQ#1FMCzO}2J_mST)+ExmBr9cva-@?;wnmWMOk z{3_~EX_xadgJGv&H@zK_8{(x84`}+c?oSBX*Ge3VdfTt&F}yCpFP?CpW+BE^cWY0^ zb&uBN!Ja3UzYHK-CTyA5=L zEMW{l3Usky#ly=7px648W31UNV@K)&Ub&zP1c7%)`{);I4b0Q<)B}3;NMG2JH=X$U zfIW4)4n9ZM`-yRj67I)YSLDK)qfUJ_ij}a#aZN~9EXrh8eZY2&=uY%2N0UFF7<~%M zsB8=erOWZ>Ct_#^tHZ|*q`H;A)5;ycw*I cmVxi8_0Xk}aJA^ath+E;xg!x+As(M#0=)3!NJR6H&9+zd#iP(m0PIW8$ z1Y^VX`>jm`W!=WpF*{ioM?C9`yOR>@0q=u7o>BP-eSHqCgMDj!2anwH?s%i2p+Q7D zzszIf5XJpE)IG4;d_(La-xenmF(tgAxK`Y4sQ}BSJEPs6N_U2vI{8=0C_F?@7<(G; zo$~G=8p+076G;`}>{MQ>t>7cm=zGtfbdDXm6||jUU|?X?CaE?(<6bKDYKeHlz}DA8 zXT={X=yp_R;HfJ9h%?eWvQ!dRgz&Su*JfNt!Wu>|XfU &68iRikRrHRW|ZxzRR^`eIGt zIeiDgVS>IeExKVRWW8-= A= yA`}`)ZkWBrZD`hpWIxBGkh&f#ijr449~m`j6{4jiJ*C!oVA8ZC?$1RM#K(_b zL9TW)kN*Y4%^-qPpMP7d4)o?Nk#>aoYHT(*g)qmRUb?**F@pnNiy6Fv9rEiUqD(^O zzyS?nBrX63BTRYduaG(0VVG2yJRe%o&rVrLjbxTaAFTd8s;<<@Qs>u(<193R8>}2_ zuwp{7;H2a*X7_jryzriZXMg?bTuegABb^87@SsKkr2)0Gyiax8KQWstw^v #ix45EVrcEhr>!NMhprl $InQMzjSFH54x5k9qHc`@9uKQzvL4ihcq{^B zPrVR=o_ic%Y>6&rMN)hTZsI7I<3&`#(nl+3y3ys9A~ &^=4?PL&nd8)`OfG#n zwAMN$1&>K++c{^|7< 4P=2y(B{jJsQ0a#U;HTo4ZmWZYvI{+s;Td{Yzem%0*k#)vjpB zia;J&>}ICate44SFYY3vEelqStQWFihx%^vQ@Do(sOy7yR2@WNv7Y9I^yL=nZr3mb zXKV5t@=?-Sk|b{XMhA7ZGB@2hqsx}4xwCW!in#C zI@}sc Zlr3-NFJ@NFaJlhyfcw{k^vvtGl`N9xSo**rDW4S}i zM9{fMPWo%4wYDG~BZ18BD+}h|GQKc-g^{++3MY>}W_uq7jGHx{mwE9fZiPCoxN$+7 zrODGGJrOkcPQUB(FD5aoS4g~7#6NR^ma7-!>mHuJfY5kTe6PpNNKC9GGRiu^L31uG z$7v`*JknQHsYB!Tm_W{a32TM099djW%5e+j0Ve_ct}IM>XLF1Ap+YvcrLV=|CKo6S zb+ 9Nl3_YdKP6%Cxy@6TxZ>;4&nTneadr z_ES90ydCev)LV!dN=#(*f}|ZORFdvkYBni^aLbUk>BajeWIOcmHP#8S)*2U~QKI%S zyrLmtPqb&TphJ;>yAxri#;{uyk`JJqODDw%(Z=2 `1uc}br^V%>j!gS)D*q*f_-qf8&D;W1dJgQMlaH5er zN2U<%Smb7==vE}dDI8K7cKz!vs^73o9f>2sgiTzWcwY|BMYHH5%Vn7#kiw&eItCqa zIkR2~Q}>X=Ar8W|^Ms41Fm8o6IB2_j60eOeBB1Br!boW7JnoeX6Gs)?7rW0^5psc- zjS16yb>dFn>KPOF;imD}e!enuIniFzv}n$m2#gCCv4jM#ArwlzZ$7@9&XkFxZ4n!V zj3dyiwW4Ki2QG{@i>yuZXQizw_OkZI^-3otXC{!(lUpJF33gI60ak;Uqitp74|B6I zgg{b=Iz}WkhCGj1M =hu4#Aw173YxIVbISaoc z-nLZC*6Tgivd5V`K%GxhBsp@SUU60-rfc$=wb>zdJzXS&-5(NRRodFk;Kxk!S( O(a0e7oY=E( zAyS;Ow?6Q&XA+cnkCb{28_1N8H#?J!*$MmIwLq^*T_9-z^&UE@A(z9oGYtFy6EZef LrJugUA?W`A8`#=m diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx index 93ff231..fe9f362 100644 --- a/src/pages/_document.tsx +++ b/src/pages/_document.tsx @@ -4,6 +4,11 @@ function Document() { return ( + + + + +Officener From 0c35cedd58e12827a9983bdc8515f89a832e915a Mon Sep 17 00:00:00 2001 From: Kim Jinu <105920346+jinu6262@users.noreply.github.com> Date: Thu, 5 Oct 2023 17:30:27 +0900 Subject: [PATCH 7/8] =?UTF-8?q?Refactor:=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EC=85=98,=20=EA=B2=80=EC=83=89=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 아이콘 추가 * docs: api 데이터 변경 * docs: 페이지네이션, 검색로직 변경 --- src/assets/icons/LeftDisabled.svg | 3 ++ src/assets/icons/RightDisabled.svg | 3 ++ src/assets/icons/index.ts | 4 ++ .../admin/visitor/VisitorListPagenation.tsx | 48 +++++++++++++++---- .../admin/visitor/VisitorSearch.tsx | 17 ++++--- src/components/admin/visitor/index.tsx | 29 +++++++---- src/pages/api/visitor/visitorRequests.ts | 8 +++- src/pages/visitor/index.tsx | 9 +++- src/types/visitor/api.ts | 31 ++++++------ src/types/visitor/visitor.ts | 9 +++- 10 files changed, 119 insertions(+), 42 deletions(-) create mode 100644 src/assets/icons/LeftDisabled.svg create mode 100644 src/assets/icons/RightDisabled.svg diff --git a/src/assets/icons/LeftDisabled.svg b/src/assets/icons/LeftDisabled.svg new file mode 100644 index 0000000..7966e91 --- /dev/null +++ b/src/assets/icons/LeftDisabled.svg @@ -0,0 +1,3 @@ + diff --git a/src/assets/icons/RightDisabled.svg b/src/assets/icons/RightDisabled.svg new file mode 100644 index 0000000..20cf419 --- /dev/null +++ b/src/assets/icons/RightDisabled.svg @@ -0,0 +1,3 @@ + diff --git a/src/assets/icons/index.ts b/src/assets/icons/index.ts index 071ce4d..8169d49 100644 --- a/src/assets/icons/index.ts +++ b/src/assets/icons/index.ts @@ -15,6 +15,8 @@ import MaintenanceCost from '@/assets/icons/maintenanceCost.svg'; import Survey from '@/assets/icons/survey.svg'; import Setting from '@/assets/icons/setting.svg'; import Down from '@/assets/icons/down.svg'; +import LeftDisabled from '@/assets/icons/LeftDisabled.svg'; +import RightDisabled from '@/assets/icons/RightDisabled.svg'; export { Notification, @@ -34,4 +36,6 @@ export { Survey, Setting, Down, + LeftDisabled, + RightDisabled, }; diff --git a/src/components/admin/visitor/VisitorListPagenation.tsx b/src/components/admin/visitor/VisitorListPagenation.tsx index d52c78e..f9e8311 100644 --- a/src/components/admin/visitor/VisitorListPagenation.tsx +++ b/src/components/admin/visitor/VisitorListPagenation.tsx @@ -1,4 +1,4 @@ -import { Left, Right } from '@/assets/icons'; +import { Left, LeftDisabled, Right, RightDisabled } from '@/assets/icons'; import theme from '@/styles/theme'; import { VisitorListPagenationProps } from '@/types/visitor/visitor'; import { css } from '@emotion/react'; @@ -8,36 +8,66 @@ function VisitorListPagenation({ page, totalVisitors, setPage, + dataPage, + setDataPage, + size, + dataLength, }: VisitorListPagenationProps) { const numPages = Math.ceil(totalVisitors / limit); const arr = Array.from(Array(numPages).keys()); - const onClickHandler = (num: number) => { + const onClickPageHandler = (num: number) => { if (num > 0 && num <= numPages) { setPage(num); } }; + const onClickDataPageHandler = (num: number) => { + if (num >= 0) { + setDataPage(num); + setPage(1); + } + }; + return ( - + {dataPage === 0 ? ( + + ) : ( + + )} + {arr.map((itme) => { return ( ); })} - + {dataLength === size ? ( + + ) : ( + + )}); } diff --git a/src/components/admin/visitor/VisitorSearch.tsx b/src/components/admin/visitor/VisitorSearch.tsx index 13de266..24668db 100644 --- a/src/components/admin/visitor/VisitorSearch.tsx +++ b/src/components/admin/visitor/VisitorSearch.tsx @@ -5,7 +5,13 @@ import { VisitorSearchProps } from '@/types/visitor/visitor'; import { css } from '@emotion/react'; import { ChangeEvent, useState } from 'react'; -function VisitorSearch({ setVisitorList, setPage }: VisitorSearchProps) { +function VisitorSearch({ + setVisitorList, + setPage, + size, + dataPage, + setDataPage, +}: VisitorSearchProps) { const [select, setSelect] = useState('COMPANY'); const [searchText, setSearchText] = useState(''); const [startDate, setStartDate] = useState(''); @@ -29,7 +35,7 @@ function VisitorSearch({ setVisitorList, setPage }: VisitorSearchProps) { const onClickHandler = async () => { try { - let queryString = 'size=100'; + let queryString = `size=${size}&page=${dataPage}`; if (select) { queryString += `&queryCondition=${select}`; } @@ -47,6 +53,7 @@ function VisitorSearch({ setVisitorList, setPage }: VisitorSearchProps) { if (response?.data) { setVisitorList(response.data); setPage(1); + setDataPage(0); } } catch (err) { // 검색 오류 예외 처리 @@ -121,15 +128,10 @@ const searchForm = css` } select { border: 0; //기본 스타일 제거 - -webkit-appearance: none; /* for chrome */ - -moz-appearance: none; /*for firefox*/ - appearance: none; - box-sizing: border-box; //select 박스의 크기 방식 지정. - background: transparent; //배경색 투명 처리 } @@ -144,6 +146,7 @@ const searchForm = css` input { width: 290px; padding: 12px 11px; + min-width: 100px; } button { diff --git a/src/components/admin/visitor/index.tsx b/src/components/admin/visitor/index.tsx index 5cbc691..19e537a 100644 --- a/src/components/admin/visitor/index.tsx +++ b/src/components/admin/visitor/index.tsx @@ -10,25 +10,28 @@ import VisitorListPagenation from './VisitorListPagenation'; function Index() { const [visitorList, setVisitorList] = useState(); + + const [dataPage, setDataPage] = useState(0); const nowYear = dayjs().format('YYYY'); + const [page, setPage] = useState(1); + const limit = 5; // posts가 보일 최대한의 갯수 + const offset = (page - 1) * limit; // 시작점과 끝점을 구하는 offset + const size = 25; useEffect(() => { const visitorsData = async () => { try { - const response = await getVisitors(nowYear); + const response = await getVisitors(size, dataPage, nowYear); if (response?.data) { setVisitorList(response.data); + // setVisitorListLength(response.) } } catch (err) { // 검색 오류 예외 처리 } }; visitorsData(); - }, [nowYear]); - - const [page, setPage] = useState(1); - const limit = 5; // posts가 보일 최대한의 갯수 - const offset = (page - 1) * limit; // 시작점과 끝점을 구하는 offset + }, [nowYear, dataPage]); const ListData = (list: GetVisitorsData) => { const result = list.content.slice(offset, offset + limit); @@ -37,17 +40,27 @@ function Index() { return ( -+ {visitorList && ( <> - + > )} diff --git a/src/pages/api/visitor/visitorRequests.ts b/src/pages/api/visitor/visitorRequests.ts index 6b7170d..c999d3f 100644 --- a/src/pages/api/visitor/visitorRequests.ts +++ b/src/pages/api/visitor/visitorRequests.ts @@ -1,9 +1,13 @@ import apiInstance from '@/pages/api/axios'; -export const getVisitors = async (nowYear: string) => { +export const getVisitors = async ( + size: number, + page: number, + nowYear: string, +) => { const response = await apiInstance.get( // 올해 전체 데이터 - `admin/visitation?size=100&startDate=${nowYear}-01-01`, + `admin/visitation?size=${size}&page=${page}&startDate=${nowYear}-01-01`, ); return response.data; }; diff --git a/src/pages/visitor/index.tsx b/src/pages/visitor/index.tsx index bd95760..5010597 100644 --- a/src/pages/visitor/index.tsx +++ b/src/pages/visitor/index.tsx @@ -2,6 +2,7 @@ import Visitor from '@/components/admin/visitor'; import Button from '@/components/common/Button'; import PageTitle from '@/components/common/PageTitle'; import { COMMON_PAGES_TITLE } from '@/constants/common'; +import mq from '@/utils/mediaquery'; import { css } from '@emotion/react'; function Index() { @@ -20,13 +21,19 @@ function Index() { } const containerStyles = css` - min-width: 1024px; hr { margin-top: 28px; height: 1px; background-color: #d1d5db; border: 0; } + + ${mq.lg} { + max-width: 768px; + } + ${mq.pc} { + max-width: 100%; + } `; export default Index; diff --git a/src/types/visitor/api.ts b/src/types/visitor/api.ts index e91076f..59479ea 100644 --- a/src/types/visitor/api.ts +++ b/src/types/visitor/api.ts @@ -1,16 +1,19 @@ export interface GetVisitorsData { - content: { - invitationId: number; - company: string; - host: string; - visitorId: number; - startDateTime: string; - visitTime: string; - visitorName: string; - officeName: string; - carNumber: string; - inTime: string; - outTime: string; - stayTime: number; - }[]; + content: GetVisitorsDataContent[]; + totalElements?: number; +} + +export interface GetVisitorsDataContent { + invitationId: number; + company: string; + host: string; + visitorId: number; + startDateTime: string; + visitTime: string; + visitorName: string; + officeName: string; + carNumber: string; + inTime: string; + outTime: string; + stayTime: number; } diff --git a/src/types/visitor/visitor.ts b/src/types/visitor/visitor.ts index 53c065d..74da963 100644 --- a/src/types/visitor/visitor.ts +++ b/src/types/visitor/visitor.ts @@ -2,7 +2,7 @@ import { Dispatch, SetStateAction } from 'react'; import { GetVisitorsData } from './api'; export interface VisitorExcelDownProps { - checkVisitors: number; + checkVisitors?: number; } export interface VisitorListPagenationProps { @@ -10,9 +10,16 @@ export interface VisitorListPagenationProps { page: number; totalVisitors: number; setPage: (page: number) => void; + dataPage: number; + setDataPage: (page: number) => void; + size: number; + dataLength: number; } export interface VisitorSearchProps { setVisitorList: Dispatch >; setPage: Dispatch >; + size: number; + dataPage: number; + setDataPage: (page: number) => void; } From 3685a4c653a9d888c73af663ce9a931e9d7442e4 Mon Sep 17 00:00:00 2001 From: Kim Jinu <105920346+jinu6262@users.noreply.github.com> Date: Fri, 6 Oct 2023 15:12:05 +0900 Subject: [PATCH 8/8] =?UTF-8?q?refactor:=20=EC=83=81=EC=88=98=ED=99=94,=20?= =?UTF-8?q?=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C,=20Icon=20=EC=A0=95=EB=A6=AC=20(#41)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: visitorList 상수화 * refactor: 방문자 관리 페이지 상수화 * refactor: 상수화 추가 * refactor: 불필요한 파일 삭제 * refactor: 아이콘 파일 정리 * refactor: 아이콘 정리 --- src/assets/fonts/PretendardVariable.woff2 | Bin 2068792 -> 0 bytes .../icons/{community.svg => Community.svg} | 0 src/assets/icons/{company.svg => Company.svg} | 0 .../icons/{complaints.svg => Complaints.svg} | 0 .../icons/{dashboard.svg => Dashboard.svg} | 0 src/assets/icons/{down.svg => Down.svg} | 0 ...aintenanceCost.svg => MaintenanceCost.svg} | 0 src/assets/icons/{notice.svg => Notice.svg} | 0 ...licFacilities.svg => PublicFacilities.svg} | 0 src/assets/icons/{setting.svg => Setting.svg} | 0 src/assets/icons/{survey.svg => Survey.svg} | 0 src/assets/icons/{visitor.svg => Visitor.svg} | 0 src/assets/icons/index.ts | 22 +++++++------- src/assets/testImg/index.ts | 0 .../admin/visitor/VisitorExcelDownBtn.tsx | 5 +++- src/components/admin/visitor/VisitorList.tsx | 25 +++++++++------- .../admin/visitor/VisitorSearch.tsx | 13 +++++---- src/components/common/Header.tsx | 5 ++-- src/constants/common/index.ts | 2 ++ src/constants/visitor/index.ts | 27 ++++++++++++++++++ src/pages/index.tsx | 2 +- 21 files changed, 71 insertions(+), 30 deletions(-) delete mode 100644 src/assets/fonts/PretendardVariable.woff2 rename src/assets/icons/{community.svg => Community.svg} (100%) rename src/assets/icons/{company.svg => Company.svg} (100%) rename src/assets/icons/{complaints.svg => Complaints.svg} (100%) rename src/assets/icons/{dashboard.svg => Dashboard.svg} (100%) rename src/assets/icons/{down.svg => Down.svg} (100%) rename src/assets/icons/{maintenanceCost.svg => MaintenanceCost.svg} (100%) rename src/assets/icons/{notice.svg => Notice.svg} (100%) rename src/assets/icons/{publicFacilities.svg => PublicFacilities.svg} (100%) rename src/assets/icons/{setting.svg => Setting.svg} (100%) rename src/assets/icons/{survey.svg => Survey.svg} (100%) rename src/assets/icons/{visitor.svg => Visitor.svg} (100%) delete mode 100644 src/assets/testImg/index.ts create mode 100644 src/constants/visitor/index.ts diff --git a/src/assets/fonts/PretendardVariable.woff2 b/src/assets/fonts/PretendardVariable.woff2 deleted file mode 100644 index a8d06375076f43371cd1d056838d2cc6002ee316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2068792 zcmaHSbyQT}7cZrRh% Aob3Ift19mBlA z?{B?--dgXh!@2hk=W@@Sv-kdd_U9hFUdr=gU}9ikJWCYD0HBXHkt!I^5{5A_)zZ;d z|4*TA7N>bXC`cPp<@eB3N=sWtJ6Ikgc-)*TfFQWARwX#RUzj_1F`N}s5DSbQI!gN} zbo4C-4*i3|SGZBBHX|q$%h=`7M(*}9#dp1EqaprZGpTy9<}!}Gf?deJjUG@w6nK%? z1+X^I%gEcvGC~Te4VyGcD%{J6ZF|t3KQ9<}dBmkf_F#QQhi2W|&2Sh$bv~f)YCg zpe1WgdLpY`NJ{z2?6&`5F5~w*P2vZ$zN|N>|F^^rfjXBvTi1%WecCct#4 rlkcfr6ZG2zX4r0OHc6$F@?O!<=-kX#l* zkaQg(PsuO9XYcZ8Awz$ k+TNb^7Rr9Z(1| z<>=9;^k6)!O)_evekBlv jvgx5Oe+mq)@P52cjE3w z$xUUL#}$?jz2-$sLreY?@-W`G`r_O?N1XBd(0}%x>ju;IWEF0ER!#Pqu7 2ctW|RAVTv!IdZj~z)eb%V4 zpA42i=t(WmpF1jz-Hey({e%1Z-SKZ`mM1fl%1iR$yGaJYX+s Nr)GaY*Pi-~aisd{y_(clqg7*35FCknh*xZF+nL}nv 0yy*@40`6(@&%q*PjtH~cgzT3O&;aeH`z%NP|OIUz1Guf0UWhVxS?8!ef z7p3@*EcqqN*%K)i!#l3OFvM(Zgq~}(`;nc;&(n2!J{7vo?qvzg7v^OF7jw PBu`>92tY)g>mCI3-)wec zIBkgf&f}d>x!(|cpIZ@Hnexpzjim6GWP*3UHIc?T+vzjKaq&6q(3!M^vv(I~@_Q@q za5;ZahV0s^yw#jy4YM4wW6+z5ZshM**2yqY=@dnb$hi(C(GrW;{td{1)8BaHkkYp% z3<$}|t$!7Rq}ekwsPH`hB|etL;?-E{Og06mnlr=GncZ~)va 6X`molHi_SvDP|}s{vOZ!u@Pg88TFD2j>{ol7}d*%T3OOOPEu~s$;xjw z?s|$i>MhTyLf_Y1PnE=d?hv}&9csBCd4ZQQ`)v1{@wb7PY{piKfgij3pJj!f&sg35 zk!ff|eQ7_KdhiE>M@E=(UpR^AEFvIATT1N5T3EdEXWOi);TfZtcfwwF(upp%(|*RJ zgc?*DzmdvecVvbIxmPj GxE9sb;9`7}rs@a~BN_61$qqSy8i$1gp?tv^eR4%bSaf3LGk_-Chb zc5j;F4qM3Q*On!lytiy8Jd)jA)}Zs P)`y<6CKQV?t>G zlH-mMEDjyB@9%DR0Ab4Y6i2w%N4AzKEiRyy&Xb+&H57JBHT`3+Pr7Iq6@PNEN~sA_ z8ytbEiE~|=0}S6M?BQ`dZ;*9})h%z3=f>HY6mrgHj`MU+;*tM6@1zsYNsZchMZfyE zD+X!9LP79Y_hms-#_jtjK2MI#Ja3mpw|)wzx|;o!NC_ 5FE_F(JqL~wG+<{OpS`w$$)U<$LY*%PYZhO#b`#0CF$ zV;&-z^2W|8I1mnKCeIhp7=K1!$iYZv<6I<&jEr$2PNL`&igS9mGizYU+vs6Iy>VPP z64SBD^BR^G2)yX3Qp9cc_l3G9YR^k2);2CR&6tS6!u!MK^1aL0Cj@wu-&Wey6_ic4 zUS4M2xjy@;?8vk|>+r`}K-j`6uih8Dn>Xz&xJS2CX+@*vsI;&y^pfHd*F<}9#P(-c zAkHJ5vpVfYxs!J)r3r~^nI0rK4ly9ZStbqHkFTgH!u#9^IyEK7U(Gg98eEdqg`SHy z$?&ik4am3N_}*C9SAK$!ki6D1{4PZr<|D(AM5{B&lrCF47(pFrD&!~D6mTp4S6`rX zGRQ {>G$qtBjBT$V$8zdIMTJ3XQMxU0boR(T!L?yp z2vaYF(m_`!`QgUgh@y7&YKH1Z_1`JSOh0{WT;gpDuZIhNhmB 3?H2YVNjj$gg2P8D3qDe~b36md`jFgC9a&jFA z41H`^tIjRWL+}Z!V1xv-12T)K(I<3)0_dT542fV(7$bH!L*__<#0=&(!EY!9$lU9R z&(A?n)x?ZR$g{H%CPKo8osX^7d&y)QV}VDdl@Z#)5tFf@Sr{Vtt^{Biwa_d?3csEn zc3d?Z+b;hTS4?j!iA~6O+vhN=%4A)cYBT?WIyO6Hd&h;^`Xzooor`lT+(>2zJcWU< zz$E$W2CHra)9pz^5=GJr|F1QW#m2%+j^$OvV#g32SVGB1^WaLZSnuaS_P9S@H%oRW z*kAcNF=Q?O?yfgb+;KkF=tzJ;(mZo)mfN2H^h>n04yTDWf3W(WFDDLr6CFomczm+) zUp39^dlQJ@N+R;d+^+j)7H0g7m%2RCo)i_I>Uc7%AVQr4P+O9jq(Td^KVOXXOziye zDXfmDasr!?FQkHb`ajd8jZjJffh-^p2nZVI*`~A@$9EeSpa4!~IgAS|c&w5qQB51V zt$4K_wc >WY*>_pU zqc{z=V;@pVvb=#^E6yv`*(=x8F>xSIKY+_p3N;m_6mwGoG X_=yQXS iaWsadA7J-T$65$@llGlV|FMGW3`N1{!$+ zvCZD_wWB43x0e@i1iTylx|4Yn6vb?QT=EeANo*}TO(wF=!E@NJ)`uX(B>pz$k zR3xmR?Dv)IOc~3LU7R6M?8i9kQL9^B+4Fn=rdr0K&q1Wm2fB&{d>#dv%BQ?YMy@X~ z&+siO$S}|n6!8#${Ke)?yb(YiZPid-ZX-g5)6J?)r1i7+NzTijA8{dfe>(cuDH7m~ z#}_-1nJ{7VDZIvf&D|x;RYwUfUcNojoh!eoy(kX7xRi|TK|Vk9Oo7(fM A%2Dv*2y*@M__x|A?H-ZCZNgxeHK->)C6^KYOh!$b=tX zU=QY3Un6Uf0p{7$oSi#MwM{c#rSJDZt=PxrJIvEEr=u+HrJ&W$pa;Uw?F2g|F$e5& z5?a(J4Lv((Bnw&dhp`>|#AT#v8O@|We&QnK7L^tMf)e!2xZ_{~^MgPTCNKng`UD1# z#=E@wNzuq_zW i~%qmV )-~(;rA*rJ6bq4gM^cJ)N$p=7 zmjM($tCX2LroNTG32)Elx{L;nztJsie5*bXj@uA*V*cP#-?F&e-rk;|YV#NE<^Np$ zzL5!m!(lECD~lKDH_k75x%p*h2vukJ|5aL|$o03Z(fJAafJ6wC0LVs=n9o{R8jK2b z#?I+3YIBrG#!?g6B^` &{#_NDw)nx+)~v?AAG$0UCYii9iA(*G0|?fR4d>!k*4HzKf?!g58?H4BjPrM z<9fNpQE;}8Q>u9S`8*SWBAKn#$mzB8?d4Oqv6)#dhsr&Jo017J@rJQL0{e`e_UXz| zzQ$fR`|(*olnM|?2E;`B9od8KJ&bn16Y&?&ztMyOU-$IA^(sai=Uv7O9jY1wx*E6G zqu Gfn&jL2q$;!abu z#L7j `Aw5rbIK4*J>>9r_COr$$W ;e>NNZZzUi1@|#YNK~vu7OVVMNBJ?c<(RBJK>{-FXkrb6;`ewFu;x3)^(*?+ z{+H+GoR1+QB*OXPU&U(N^r`!;@QoAbi0L82)_hdx3mv?X*25|X<64);wG1V-Tjtez z)%={OoCRvXIUoC)I^GJeqjB3XhPM&);!1v1eFUUpGjie24dd&$e$5~MJi%8Z4uep_ z)XACNQrnvIW=%vs3if&WrabH+1n+qt`H1NkixSV>V#U+DVj;S<<~i!pwdelIb(Y(% zi`5U>37-HO3d?HQFsNrA-_T)hPdV$Fh}Gu FXhUiCpqV2U@d^7L5^-|?* zq*GfmH#9#KNzM&sZEKQ;aepZ%A5uil5jqq`CsM7u)dw=HPnE;@Bj7Md3{M|rkH?lY z6z7+AJ2#k?ojsbAt%yG?T{D{0&aYFlWP>qSENsy63k(ipYqU+Y(kcXK?zUEU?Ron8 z8(pkP?sZXUrXTp4 -a%)w;L;@PDxj-3-bU+F5H6=H8IGUJknieb+_H zaE4bu;;kbp4Hg>ZEp;uU0&Njj#I+F_pwc3?5aBqe<(6z%Ar$^26vV)mv6m5bb&ELn ztIjyPX_wd|`htm(C-|j#EU?tB>=OEmSVRZPhy~^awO6+*jrGksaoAWFTgyY?6m;)` z=sWQyMmHdRZ6k}dTNw`H i?c5B1%t?Ha#?$Z9JqKa76Wvd8Y_t`TqD zp ;Q GEgX*%iQy@ zu<16N`o(0;;o>(Cd>IHH=>AtwC^}r<7aVka=|Ue_8S37e CVKDdXZSNeG*HB5zctqg%tjd9JW#wo*AQ7GbA61EhSMQ0w?2!@>;Hw`M z;aITWyV6}MKXdY*Fht%Hx!0ECN4MiV>*P#mB8zhjDcn8@ho1h5j^W|m%Hm`4lYACG z@N=r{Dzlzb)g|rx(K ewB5gJDM7+|f*uUo^{edIj-a7v>$i6`&Bfy|*Xa4WWv zy5yo{pMO=e`Tk^DiLEMm{(iOQ W}j%33aLLc?A4jzfk# zKZGBGXBNYgf2PkTC4YnXdULyq;;XK7Iy&)|I m#9 zq2VnNtY}Z}UyL$gTPUka9@$iCTXAX@%NF?{; nF>zZ%f;mz$tJRk<2nX;a;p7Xsv+Irwt27Ms(k M`8=_PDb @rKRZnPXRG%O41gx%{}s8yPNcSX1m5omQ_hAdDQwLU z-|!-6Q&vsPcDrST!vMzVWX4glvF$TsPcEx8llcC6!MW-lz;Hi#62;Uvi!D7i{*QJ( znZ?I~#dg#dF?Q&uqbUP$VxndaO)dl=6=a67@*H8u_Tc~sB|})$y5-&4M*Eg%z24UF zGU5g$!mGDMfR5+9UYASMIVi_Fxf?&EwY?$V!szJjEiYe*T5Q(UC>3u%C9mr^0^tUQ zHg7ydAV&>=ubfLb46nuzh${{-BO@;eWF7+_Jf>t^Fy5=5*awdJEbRHbTJX@(spzzC z6s; buXmApJac~yP?{(W_I_4_J&+HjF)%bb1l($k`XLC08m zg@UQ6xib> gqcF{+$1jpR?$a0FJ3}#hIDR1GraCF(-@v^^q;h)X88Aj81xgT z{?WO6C~?**?MZ< axUGVSu{B4x0}{DyTr~ zvk{+Rd!J%X2LrXNAL7RArV1~PH< =oW_>37+N2Z8@-H?#-%bM{~W&(y2!;(mgkcLwTpGP!*Y;$u-NwfQ# zXJ4z{6n$QYzuK4gCX&r2YMK|F7ft<0q^k8kX3cp`f50w#%<~@YxCKT4=(LZx1DK&u z;=Sp@KupXCl1GDu_4wc*oYG=HmeQ^mjvEOg{)j+$>sVV?k5(EZ1QyV0gvi3}-B!k$ zp+f*V^L{k@-Fjv^wcb|vWTrnY+Ty4FbI!*Kt$eb-{6$~3z7 l z7!8jsRm~jV!q~Kau!ejUx8cfG^ratm-1{er(t?l&1VY>Yds1RdJNO2`{GM1}^#c0M zC|MX72ysRfWIhUjSsVhi3E}(a0x@FJUoXPo>3Q zq-FO0{I&J>_Vyh)Wg1|> _~8V_(20Rt|y z19ng_ _Svaxn>Hn$^H}GNYjOxLAEm67O?Gye6X|#b>8xR zpgI=&YaVkvo?qYrmzT`AX7?s+4!`%OKK_16o?>_q+*SbX7DRjDjq{p?$wizw5>9DF z^BxA@ZQ2Ir&aV8#yVeMbGAD$x>A8~-2)6FzT^?V*#-o=V{qH&!0U`K{36G16(6NpX z9p)m|!P$#%wtCfl0^I^vF0yZ~#_l3UKFxY&=v@!1E8(N%q!9dWbhP^y0snLI^|!+C z-k@olhBt*r=lH|DPYBU!y%>l zVWoLP4u`6g#yZ`k|N10}WDw5!weaR_(Y6VO)|6-oI8ICb_+&a2PXD+6jPCnGz9Ejv zZ 3F^JWc`xYV@6mE4o|T zN%6T^+uK^@*7$dBaaHYi-8np-=*kS}QC0buGZ%XsP|Fgt79>xn_rv%I(_nU~R_N%! z7M_3ul{ERub%hljZT`7 N9lOK-AkC(nGR>K3&DIYF$wen? zs?1RKTBZwSW{+80#3XCN74tadQ1tY~e`Rj-;bye)0}OoK&( F>OJGx7ULS_I90pdUvzZex1`z=2L};}=%@xnBmymB z5)vrULLLJM9SQP5uS>&dbKn;UgdrWmP6Ta` >Q8Iu8vVXEiEm+ z6aV^vld82hboMiJ_SJOrjmbs(?svinHESCK2wdif9nJI1!0g@cm7zqy{zQu}p_CSt zKhflR>PNR>j)S95QNV(sLurxZo;A|@?oEJC+0d$2O?{)d>l4<*_dPM{vD?^En=X#G zTg&(-`wHnvSlXycq0XSYdgN m`h7SU{@Od*c9cKZ(!_-F7pS45`*`QEDnY>M-B&ycn10SXaRy zP*UJ#B?;mc$0)(TV`U~Vl2jwm`>v1iAmGlB-R(H@y>o1Z`A7zf+m~u#Z^VOZT h^=ou!Xb8cFrqKmc_Kk*B)j2sixit$5T>;4Z z{;bjWx7%g>dm?w(PSqlEq>i(foAV!m{ZAddS0?_kGIT?5Kcahv)=xPB(%kD>K5P)n zURARZN2pkDTQ?3bS32pUp={@B@AkIQM>IDVP31n_Co;@vYK7JVNg%>jt|PUyBXzV2 zXcRzm*nT|5FrIr3_>W5e_r?Aj8M@7ov(w2~{`@)p^D;dby6F9OH+ z78BFX%jc0%Et1h>hpsF0jjkERBAI)fIT_gWVDav@1BTPCXs3wlVq>qje!sFL>dGaJ z?z1=1>OG%;i4*Y!H)PJ*(ZvmtA?%MJ&Hts^^k~4-glUj|J#F#g?5*SfCkK DA+``)wx}tWiB{VW>}-EZG<)D)}3G` zGN7x_@oz>kS||qm6Fu%nfUf_ nndp*M9y#ddW={X@k=)>~so?_qFgA3XyD5LgT4 z9C77TZhL_?b!9Yr4hy@_a0lso>489H&XGE3AMt&s`% V((fa)aQCdK03S#d?l8M5M3Lm93Hpia0=QmO-YGkMJ#8+>We24Dz zxqkaFrz<%~9?o3%t2}FoSso`9wB|I_BJR9JAXY-dguD$bjaCR0$kjzaniGW&BPWwf zsk-7E8>}~f2jMZO4b3!cCf;Uz3L+1NXa{M8sLTyOI5*Q3RZqf%EnE0il(C!!9lcs0 zylh4Ok`uSRvdGvb|3`t(^Q^HPGt8@Tl&>b8R=rZG@(VgT{k0%0wbsGWdBXF=sm(uv znlK9crjqTrbcic3_|@K|T)uxQ#_o5J^4Zqu;k)LuCyt*L;>1rz8HtY3IadCnI^S}b zJY5FD+nN^C=_?`Qw_eyJ$&+ < zixAMKI;;KV%b&u`XNAJ$@cSfT!zE{1pdTQcUPs)7(^LrrP(kz=!pMlFX&=pS !=`6OwfQAFPhW_n|!Hiy|fSBXv{3P!rIam?uDSv93tE$N;& zW=8UT36lAhq`k_z{R}&s30ZlRuC-$#QpoN(jve&(qo+q_%AH7NmMfJxmHCxJTJ`np z?4e=qs;W&cs#EhI(8t*_ltvm04**UnWTnzR$pYJoh3^(8;;TQxVUtj-HW_jCD7QAf zX|9o~ooLx!6~C~y{LwcC1%amiSYzSvVG_r{g48WFJ1>@*85wE7Nf Qt`Tu@<;q`5h}<`SV%l&u4c( za|t6*M>m=Ws1o1o5BQcz<>meuA!?e{7rcsBy3D_s&2Co3m>3Y%H-_c4CQEuPuV)UI zafe35ap_4|WC(=u;X^n(SR_f=!itJRICjKPtUM;od?xf;KtOWEhnsw>=tJ<;FU4sk z+632iFk3Kwi%Lk6a{lmzL4L*I^94ssM6ofufh*&Cor{+JcUC4h9Tye*OM=usr3`D8 z5njK|9-A!I> ;Old;<50Kz`SS7?hhMN_0LO~DgB~d|a zSRi*N(IR%i`R)sLMkXWk9tt(eTYlp-cXely{W-Z|BC%d9Jo&*Nbz78knxRi!;P+kj zqVH92n(9T`>c@#3Qpp}m%U(8hf0B7il*<=Xhv|;-^b+NKcJ#*SfctbO-8? -~?6}zEIu!FGg7>+n&wGO77=1<2&$K}O-Qm0u?S{OL= z;4duF4+<{vQ=vv0_~p8A^QR;pojPi0VLi6&iM8aAy0S cU2YxQ)xW#nKVp>?G;(V{wPKYw(Y{F z2W*J(;p*LD*2VG4U53Cry1Kduy5gJh*Z~R`6CA)h%%Crif^e`4RUSfV-pMGL1| fw91Hx)Rfx--c5iAzszlcWNzKXRgcDDS?}ZDS vg^e?C2D$J&N+hV!;ajA(w!IO)vL= zEeeZ?0EZs`q1{c+A+P8pJqGV0EC9^Z!m2c$4;x|{QVNXDf1auN9Z{E^vgz9SqP{#} ziLk3}x6a$-uzcuRbtd+1F!bIJGYL_C`clrtx^~D2v)~@sq~YNq)rLi$v^|u#K;kH0 z!27Ji EB#DNcLB*en8Gk%W7qfq{+6^#7TC_(bys&w8a5Hy~>Kbl1DzT0W zie$jb|H8}^{Zi-su(b|s)aR?Yhn5#Eh!>V VaaK;7T+}t!G}{->i1?t+uMwa9viB?HFBN4hBg^|LSC{)?}McYeej6)oHb~b|- zgQ+VGMdesbdP3lfSs}b(uTq7JZ-<@0x%l+b92*av3-KJWg;j4)^IRyXmJgr#WeDjz z3{CBjq%SH7VZ@{!uko3P^IqU3QAgMLvKkyFTIxN9mfPDZ3dmw6GljY?Mrd!oFjx^_ zYH=DX*uK&&Gk*G_*`eoo+o87JT2ATV-}c?{g6*^FiL0#mwX5sg_?q~u>wrs?Nv=I= zEfyAJ3dT!R^nU|S_210*BLM5@n6~!oPz13ek{pMtTXWY2E> -;8$f^42mY!uAOv zreIibqGI$g4ihg(rU=BKg9bw|MiK^8dA8(D${W2h_kb5eB{@&f0h!{#aBhh4_J{ME zolE3hcHD&bcFQ=@PpSYVpIf6h=F>4#x#iHg(1x`3$cVoydq1l!(fY9PmTIYyR`cB* zl4hY`{H48vGJQU!^Y7pYx`(y~yT=o#wV6}LONX(qUqpj~i_hzY$W19Duycknm?>?g zNnL4gPfSv+my~EgU&_Vb ));gA1GtzQdjCJheRG-+b z@V12W`xD_5i3VsW)MlpFib|Ck(mgw+jEU^ur>5oF&;@xJmV12{*)BC0bFwa3w6m_w z*t92KLfY!i*F>_ns{6_cn8#C;+NYqm10w0K*e2gh6n0Ks-z0`E1*xhY#ho|!e1e1_ zFf8$@*Kf)c&tAT6UUE3CO>@UcFM7|yVwap>tDz*@=t`b}Pw?>;k^l<|?CeVSV)j;k z?|ID8R8PW8JVg*jZbOR78-e(|WKphA#hrYclH0$idc80FbpXqh> FVA{D(#1 zORRPh0n$c;=IuPAfqb&3n&I0@I`{#1Q!G(bcG%wdq9;#1419Sq4RQCYv9o_xPJjGu z{FNQ|0nUzP>giQhg3r@~M|J!%gZK*KN(JJS&w+GkKu}$}qN!DSNG7{op8}Z@{!{8+ zyuvRj!TpQ*4b~_8N9?%Lh-BU)-?aXaFBp`!R7qc+DTD)dlI bmgPD+8 zc0q*!>_^L&Nz;BchKwF~Rf02u9#IKN#cP-BbFG2#pC0|9*Fs5Yjl5i|x+rfIalpiz zMC;!&^ABCg6JuTytJT-40%Dm41|KWLwejZE6_-mB%*;JH_*wl-#HLfMCI6_PZ!Cbu zAPot=HMsn6d-KwMzKgA!PA!mXBR|G7w=!zF*%m_qj2l+yU%!^2E)!#Pk)!q4oy^B; zUYyb41K1R16@m)Xv*zDbIjbav){Sl9;F^_aD$OG7VU4$5WL!)W5s`;)@h~ESF-yj6 zQ8@OM&&6~cOq)2~eqvmOvr-(R0?WQP`%}>G &L`L3~Ww;CbIddBg z-{$IsMqZzrUtK)Y5k7d%*tXVYESM|VAW8h*<@PIOKJ7tt) 7BZpUXd%5*-Z13Em1q;ZI VjBh0$E6OqP%4s zd*i$*T^L3&P3LNw70RhX8H+}CjNLRVXEAKl_3zE-OVrs&xctY=H% >PVNYFye+t+hyY#N*b!LA4C(VQ p#P}nBcV5#f{>4N0p z&G%Jm^4hHM1>-YVcA;g4d| P-z tteiT9D(| zt>deM f~+#Crln z?8KMEx#&fH7eMy36}$BETTj_c4y6U&zW?F&%8henC085I5UoVn_x)oxRdZ6Z2M-=# z`ol{l>QU`8sGAp3@z{^LCpJBE6q>#T>DdM|uwC-Z->va|@HClqd Aa0 z@7GivZZMl2*25Ksab6itm#7g03W+Qv+8y0*D#}5vc+q@tAdJ_gV @0&yV^#E(VOD=9OMBNE>4?)DkmQM};tB847T@O?R=Db)5S&u64;eS9a}6%Rpsd zut8@00wnH4SC_5_G1#dln=f$hD%b7{S#uJE&|6PsF>~hRE(7(nwOvT-eGbaNXy{=S z{6To%L%clJ$qF)3_%(3m7)8{wa^r(q%djVYph`-rncT|xsV!^q_?d}-Z)gs EN zqefd9Yp}YXndt{1n?X~wYAwdEmLI6P)D9K1??N-4@pR{|Ps@QI96SKoCIK;VU&kQ| ze`&sl@rEH{-RgruMnAu-Xg{p2fVU~1esW>(&xszHLv-E*<6AYQtdGA^z1E!PrM{}@ zp5B_&URVbS^2>aPoq{R$1zrnuxvJI}*j()%a80obeznCRlVD-v_kO9KN5J4Yv3#M1 zybuoe%KUYDdx0qc%+vTa`-$U|m$$tA(T%`OZqH4VCGQDxJZsr82@mT9M=55ksdPmi zO?m513+lq{E>Lh)SJGr?*ha0CfIY&xJjCOnCzbUV)RU#_K(F5cd(Ru!av!3&uhPr` zA$i=mU _{mh5Aw zcFK?x&s5hYE#EmA+3#td;^q7+4$e|gs-1NnLEWLMiG5~Uj+TVKks{GsiVN>|4WYH% zx6CKF58}HJ^~ztaEnJTU{4(m{-_5#4C2e7RZYR~}IiiA%PW=E<^xIIVw)pDp?f&b# z>1(_m+RY&vhj ^A@zFld=GNZ+uPs z1XgAxp%#Vcd6E4*Pb%{7I-s{P;q^YzG`iY;eL*|
=Gf<+~Aq%f+36jvZ>l+MVgnwUQ?wTWL7(|eMD1CtrFGarcL+^gdp zNm{2vt(jDyyhwky!oN9Z1Rnj+SJE+{=2_6GN`Iq jtOF*^Z zm+fXUaY&9?YYwOG^< Xabrrt&1>OUNhb-UR>Cki)oG=b}n3G zB9SFzn$pk)r7A5=Hyp46G1k%V3qJctG^*g37KQV~{lgXHii)-^@R *DxW;K_3X z0EiLJcDB#%u`2nUSQd7i8=%@n@euY=sNDlO0(uc!3Wx3gO%`Dw9dHav?36vPM@e;? zUgTAyQ$3WEUO3!VLMgGRvS>C1fHkBdA7JThm2F%qHY1Q-X7IP=myV6l!pzmOHF~4y zu;&%-LqaTkGzj5QeJVjttkv8(6lAq*ANwq?X;9A$vO 3Rq)f|q;W~B%9 zqxCSd*P%zKBn@4f`8GZUT(y2*_5I#! a7(gt!Mu_+OjNL&zgQ-f2NwE9TGMxp zYXMbOxa7^UDtu9eI@(bF4Lz01C{?_^rOcC{Bq3{IZeFk@{{I5kqRP7w0>bXdVIj z@%w~-;A26XpYP~zehXMz+TX)r^)+K_^)2o!+1@Bg4o)_;FJPsZ*jnTrv?L{tuFz(; z5jiiOlcJqMD2ir#ZzG!(2va|Ca!Ag`kyJREbBKPF4obMYNV`TU3pQ*E9*p_Ru5oXV z<&rPyGxWLOxx67Jjge9LPQ%~uVbo+TKBTQ+38}XzQX}A>_oD)yOl?RXjDdf86Cibi zGAdsB1^&Qyadn&NzW}xUD3=e95pzivrYe9Yu;;b4qD(yC>VF;twNtlb{o*G$1M(N* zhgiEa{vMK>RABCgG2yuFgT8Grgbaww|4Eht1oA{)N=e|9G!G2Xv+D%gZesv&cQNzF z6Y1l4sQO&2gDLG_z_p%ZxujYHPO`9$v&aEl|A(w|3KAt)*7ex7ZQHhO+qP}5v2B}c zY}>YNt+})JiHnH)($NoH(N)zIof%*LnaK%e6l;fY`5fpW4>3fhh@dSK@FoR|hy;Wr zjzbVRhL8{=0VUBmCcqSnQ>>>LV3N^8P*DUnP8dh<9L+7!84|?8$|$jq8jPaIDdD^c zw@}v-(98@e@%|jp+(wuH#|pEs&q9#G3c0XuCQvy6wh*gBuss95&@Dv33j$-*|)DhJf~^&DvPlT1Lp&M-E?2H2>a1*-WRCaA`ZK6Wz&-}o6U@M7Ya(5-=H zf`5j*Fl;0UQ$H!FW xzV4}P-aYJN@ytIHTGigqX9C#elK42TR(H_Q>&s=jxRqZf>BiG^)ktq-(DS}n0 zuwp5*BGu+sYd64_l_(Qfj2tb)E!R#1Nz@a99ueYiClzL5U}eFY0H+0R62}HEXaR8) z;|4a>`a*1fMueY9f}cUAuR(@0b3ipu02V0L$2*6?88|X(oo`u-U*okpH)1ZDm4j^S zsMkClI`4)ixQQR+#)@_AMze9)XfcaC=cg_P1RZnr0NC(}G~}mA#5X2Q-cx`r$i6{C zVTBu-NR3jW$TGphH9?Cv(MzPF S(zZO)OQ8l+u_(4sj(85(fA36^ z7ez> _ADsF|!r_Hwbbne Lg3#ytrj$~2a5PmPM9Vt0SYc|T|AL9-)mGH w4iscI37UKTTAvO{-93 $6_q`Sc&V5emcx2D2{wjS**Z_FK{|DX+Rer6L Mehy|sw#E^RIoY@hoGS%v(3m}~4qJ2wFmjYS{N56}g1>lF2KuR* z#n?K`0DunyW0DXAgyuF2(_{o wpArwE>XVy9?G)gH2R$`jjzp#0I9zk7{kdI zDXd^OXpMXTE)I*d{16+!HvF@`d|u eCb#WE+H5Zv^JI7Nj>gC(v=hiKFUqCX^3 zOG+ICE{$UA!!!*KIj9d|J0ey_6qDA4iV-4X7_q`h#xXF}q|&7&NXIp!Qt}Tlq_8KL z5*S&If|><{L`X~o9$VmvsID^sYbodN3qQUlETXmPh>+$PtQ~A%sThPf=vXWL3^5vt zlNYh%_S(phk}MlVha$$Z4V1uCB!SvG87!#CF#-o5sY?+ok;73(l#N7DtOQH)fk^M- z1vo;7#`z^2NOeLH0_SN!fit*53bREZk&&&Cg98;Hb1`BW*GDlVGsYZ3vw^v)EC~MO zv`0t+*HaIU{3hqZK%k^V2w4(S2DN9jhbYFfC9p9N08FE!OYJoYo7Uq_AG+uv&03fA z1yuX{BF>L^DUdkmyjVfRo+zyiMoQr@kWmnu5+ygF&0|)WdLW6=jMO323q1T8`F8?N zj?9@4`tO9=4A2?O5J<2I31(rD45T8|4aqWDqeo3q0&xv47Z5GwNIEkL;;>Q(lmV$) zLadFj{%=l%WE29(b*|vKe2$zom=v)%kZDLrGgHF>LzK8lSn-3#dpgZR#^kbxROlKB z1-!5@=nUoT5?+4PL~Q((x}M*$b*WPC!#%T9rOz~yZD5OjK3VaZf-KOq>WMKV--?aX zi&yUUV j zg0ZRtb-A;Fx0KKK5N-gZAt%RT)_{@{mm+t!$-(&5vzX|qWqC+}AUwkrpr%NrGjc#Z z6Ke% jOX1ELy@Q>vJO~*u6Sz@)(N1>Zd~3A%N6eGuXR}C$KBUn9#WdC=ruAE>AW ~BktQ65KH$h@_nTX+4ZIO~m zB6Lcq+3lW%5zl3a7p8bhzY-9rRI!}ghz?BXqV2~#Oc!K+l-sc6{1xpAtPY!;)?JdU zK`3%3f=_^JgWOWlN_1S Ts6~tzRbj%^oJ _cC^YEoIwtC$D!f)}?B() wfJ$=Nlmg!PnKYq| z9h=eMAyPDH#Oxtdbl8dw=nx?6*fM44;)vX0b}cBy*9B6aDhJf`g=4jWkvL9p#(7%7 zitcwK=5`@o+Wd78RqO}ob=9c3OPTY &p(=4r+?T|z>Y8# z&SFzP)svkQT_Bn)LpK@+Z0-c}_|$IAUl`5k4V{ARE_dkDx2eDP#&}9pF{8>lh)7v_ z)&4j$ aZI?xDmrVbpe8`o&5MJXc-Jp|q|0&p&>7@Q5y43TJ z|75IXuU&uXD3iT$9B6X$-nL^uJ?=T_q=&!tIMAK_yLYO2rc9mf5XfG3@X>5?O>}xz z #gI=GTo=j=$(f$ zcNLA)TJ$f&jJ&N4v8u2A?zbM<+0xMVIvsDHB`c*ev+!=GCED=Fr8 g&o=R`R27iV^)Rsb zufq!74WA43s=xIU*7Rk!+l7DUK+8(&x1{x$phD^yShg6@UnLpak6Gw$nT1SbCid{Ak%W#htQCSNx z3L<0JW$W{T6ysSh6oKR@4@qJi(N34;1mgvqW7-$>GqW4QMde3C#0c=y)3zWaeTxsB zK*v;!=ZKmSs7#+=%f0~Kk`Ww|tQf!!9W9#n12qKXN?hXLxvF^x64b`hBc2M*8~Fv! z+Oc%K*1LCmDS~pXhJf3%3Fit_1T4a_=t=^3t$Evsd~Z$5bv6Bn1Tr#Y;M9+d4>T5n zghH1lFiof!6bVXF9aWg(K&nKW4DPs3WsV7^A33Si#R4-=Y`=iiF&W0j6y#F>xGj7L z8bD$rUzsp(y*omHars*aAl4le4)DO}X$#ioyGMF _QNC$cb=gHie1CSm1aoDHj^ z3brFc#f`V(kqNMoM+cE+(gP?65tsZy5zH26_J{$!(tvC{pFi)!A$KBPxF{%7`-7+b zv^I2I#--zKILqF}tQMky7^^*Qb_G$0M*)Z29^U8`LRJe$Ahe|LiIb{>B|Jk={U)>i zEmPGMlWQ`Sl%S@wK{80{@ed(6|Ag2q?j~QXNDf#Bs4EH|kx=o?^6;Ws0C?(oJ!u zBzkB|h!Gh}Ee0-Ow1x7p^xJO6?NE lLxe9ZY%gve?4C?qoY*?jQ0;gG}l|s3Gyr30Cs5GJcO{vu=We7V#wx*ap1yfL; zDc=+Q@NJ^OCscwUS0|N}R%s<#Co<2;sD#58c~6pJq~3$0Md-Tmdo1F_-*vrU#9DX4 zrsZf{$7Z-Cc bv@tbt(vE1EGea}-LT3xF-H-PArLno= z=I7m-c)?8dyO4Lq^|?ytn~5vVyp5Co$e_)#i; XnzCDiW=^Z!hTvD)`RD``HP8BV8JE*ovp6ni_n~<=(NbDZ z`iF8LQxb$hs1hmaQR$OTBYX>w6T|xC`kuHV914NoL4X2-WmqAv>poijP)ynW?Yn`v zLGqt|_+kVs4=!PLYtXwox V_C%SKT+7ozMIn1n6S2wiIEX8aVzd9}L>F-sGhNWs9h@ z_~tzp8<+Jw{!dc+TgX(1mH)bmaw2lajrrpad1?>Y^7>5$+H7okx=p3`;`UZnT3=LJ zyUK3=N&K~(TzPeOyuZ7L1`H7;RB(i(B+=5c^DEH1^*pG!#=RnnCz7HlisHgr6NdgA za|pnLn;%6W$Jj?X^}u4@8pc7_Fc8Ho8-no+>b(Oh2tgCmKr9x_G|>< = zQH-vMALXY4Yyk#%hLJ8Htg*(??(s$dBt&Gy ~0zs_$2k5d6_k9Ha>@oxZ0%zVM^t4#ysP4V@D3Q6bJU{H0N;y z+aF30CAzPaXhK;cl iW+xSE1I+l`gNjlBioNcjYV)}r&}YUxmCie zC^*MZ?|`$1ctc!>LQ&yuqM$Or1x>u68LHN{QMQVt(MH7oBPN*d<6up>xF!2zm|6n? zDyQRdx8a{>cQZ`AUgY@Z*Tes}3@7BKFK6*-2YFz>42f#yIOD$wZBA}`7Yswf5RoJj zPuV21(l5xAU0*3y>Oj%2q;+H7E7a$6!|d{R03+cD0+5j`^OmKn1NkY6*vh+a+19cR zbq&Au9>)kE1Qq~CoVBxmk+>|?JNpc_JbW(gk#ND=%)kflAT3!zVpyXlDWs{ WKoGyd&jT$C8(MrZ{HVz-@uUqyE1CKl>S SZswC=UDz%#V zizhWOW7@pD^p4z+Z+)$Q-(T@=L8g-Q_4Om>rUYQZBQlLQw@rYXSABROu)xrxfOv%X z{GcYxOwg*KvZ%*iv4A^_RhQWUwtv +=e7Ywzwg~r8S{{rPArXrUQ`n2ayWjHnL=C>e`!|wBbqX z^2WeR5_Fy}OX_^Zub>Ahve&4R; Bl@Q7E_T0O zoMR$5PsS$u)HK#M^H|%|&u#0;iXDXO&OgYJBLunP_Ynfyst309#exqF9tYLPX{kVn z& @w<~SjoD07M0AeOI>4v!TDlfRBE*6dXHL1Uxgwf845m#Bg=?| z&OhZf)23>y6?lZ4>MP(x)~({YX`FU(G(zO7>~$Q|vZ$J7HE1TPv<{k}i^8pk66>42 zs!5IM9>K$mKxj*ewKHT2Mdrxc^Q)8SWZThO-)~ay+6!@kFW|=p+^eYA^V$#zwzV>L zp ;92IYA4gL(V2GixY7(@ #fIKAx2-E@Xo=eC{8G+x)2efd3)r}jCt ztHJA*?A`!-Ypsijy>mDsZPhkD^GHVO5*{+Ba9*}#kW*aFwKljXFKvwggeSCDem21A zWM8m?QeTEx<~LG&7-XN6zdUoNM?V4m2D5}eUT|FRJ_f~4i6&G0Xa#5B^ft?bvj@FV zSw4Nbrx*TRA|3E8&L`q&&D_vMYRCQS5q(=EOVf;N>;A(1ml@7KtLV<@+~pnCZ)_9B zr;Y8Wfc=bW)7=~57jq0` MbNSQNE z^%x0KeG~0OtVf?ynCA4Uq_dx!)t)Q&kDd(Bs6u$MR@| {0|s~7a%d?cau z6g;pvzPBfLPKBskSo&4|)`~KoIH5dBw)(x{jb_VK5&DoK$ncj4?2Z&Yb?7|U+0Fm) zm0S$wLuj$Eb;!T)-5)AkO~`X8GtRdP#2>|SW)5kSLHy3<(mcH1q*`ar@-H_S#TdJ_ zCCt|#7jv)*dGhXoM*Jv!My_WuqGaxda8$3(d#w}hCbYrwd=yCJ_c8+R4MB3x8|&!q z)^gnx&wb;NWpjHef>{q|8wYTFEhCH9rL_Fi-rXgKQK(7Ln-g<_Qx|YE)}zlu4%Q9O zV}7_lFCx4{!4QU5YBV%QK9QgJ #yOTjq>9GwQStgLFMwm@B)T2}m zQZ}&aqihYdHrSi}ZtqUdZ+-yO4NiF5>L{d&tu10!C2|+omaDe>Ym$ddgpnSEkQFYw z<@U>}@6cUz^p<&WX9;v!UnpUivbVO=pLId9JJb`%G2php){BiQo#5O#20gYfWG>Z! z=nRsD^NA!A$qPyrm^YX#FjsU@aJJyQ;B;PPE?P9{)I4sy5D_-GFOn F8lM zP6SVpK(E;YjP^qXx#s5Pvn6FK+ZKW)z;wDk$AE!034sD+%hyDO#F$1DmEuAw*cQ36 z76>FviwGiBcyFfp ykpfGq6Ap#b_bO;DpKr=mpiXhH23y=_} z0L^A$P_)X3mvXC>>mn7<>J(0dSO6smk#D>le9FQLOdnafNGw1L$OtunMpb~-c{-7K zaNQ=8m2L61W0p?ZvdGQitg!`Z@URZZ>d^o@JcqSRxh|P-UD@keTYdcQ&zE^T@Oi(` z5q;(q;vNE1l!u=)BMPX3^a@$uD;APOx59`4IT*OBp+ykxX^9~@BuS5iYHV)aXQQ%S zz$+LQ1rGhOr5Oq2_3^}ExmFv*qcKBr^&SYatbrL7P@;4*E^g*&6u|-^x2UND(T0wz zskZc-l9k4$9W=Mr4XSKgx5lPPy6Y>)G`E|32<~`K8E$#X(V4ujB;7C3_+cNDz+n|2 z2UG}uE|I?wVe`y8Eic0=+{@`!_WoB(<)YUB;08AW;YPJ(#0~Dvk`}m!X3ZZH{X-38 zMa#P?SGeX_VHgDPHHWASas@(DuxcTMa!g5%W*MQ81t=FXV*J?|DdW`H9c+d|D@ zlp|XZ(hcq%X3aMW0eW3xF1gNFIVm&w?h~9YYTPj^lUj3LviMlHkOlXV7+87QV#e}R zebk7UL1e^ mYN~6hZVJ8`U zqT< @sdj2i>gVw+P^cNHv@8-CZ? zPl4AaGEqI^d2F y?A Dbmy!M7&@j6A$BqlHDIm>We$pAUIRA1@|c8aDK>{5)#n2(v{} z6+|IkS;|-mJ>=42R;3lN!|7#-?#^*;R)LD~X6xXczNM~;^O+ME%<*a=r!_dBo^Xa) zq@AqP0*bVZ)kd|C5ZSZH!JV3u*O9|MIAL)2OrGQrWbb3T?eIm)t?Vdg@OE0+`vJja z>GSGY1{c!BpdOu=Bg(jw$!*L555%mfehS7xniT(h8Aqy^jNquIa0Y*nY_mHp&q`Uz zx&C-C2jhqzJcYlgD&5FTF76`tf*|q69!z#;mN?kT9vMSbF;DP|9{htpGngMbeXF2m z9=yUJXl)*LmPA i7E0j zh)n1ZCZY)FQbQ&Q>hde4B*j^sS0HL-GjF)`+SZFrq3d>`jEgo#$kMas8 +X(wk0OgOIOESR z0dM(t?!GUff7bBdex8*B!GNpmB5-5R78xsRD-t1Hxm5M^7Sx$dU!v@MWA*4X)nQ*w z!i;t1>+CD&^bCkq=-r>PSlyZgcXyeu@B_kW3tzW Kbz`1%cvLS+RtQ@=~fV |yDvGdQZlg+gs MYd*DJGBV45Qa&K@OeFtmge=5v6I z@?qCVtd0GaoTqhkAfbS!UwBGu&5BG7pS8VnRna!P#1Jplacq+^_$-!(cZiQ~a-Mp+ zD;*6+3^W}Z DEl$)L{I9{V zj|@>+N0Rj+$PBZ1h66xqN2~_cHCXb0;nq;Q!rIu7uf{X(*~|>B $*2ron~b4)-088e0T zwaX9?{s{m<6Elz`W>i!PoR%f2Pva!PF+dCqPDykqX95z}kQ!iAL*m%6LXvC7TeM(y zs6{AUh1)X=575RLiQxp=Dn(@8r*H@-n@TqB)6Hy103H#72jTf_e)?RCHL}lz{wkPE zx6*@1S8h==Ru$U-uv!wUo{-@d)ZK_R)wG5$SNEPTm;Y3#)Bl{e5dcRJuMIwn5DHhY z?ohab#m)Q eh#O<;h;>qZaIJN>uqQM3Mer3To(~ z0{{M?y2q7z36gxQp8_dP4OUeHGOcoWUbfjFscs0>2CKgzXtNs*6Sl!0IVt*j!f3@i zeSx&$AJ0)ny1D9e!mSqquU-QDJP)wMt=9r?htntmhQghj1GIMS1H-M?1GiZL)OP9P z!mXD9w^;_ 7&A}R|jWt6{r9%b?Fnst(OG9ssnDl z3`m6|#v|vDu|@(GU=hT@-5;Cpp)>LMeq%ZCeo<50v>H1>k |y9Zl{mUx4aVJ#OAX?>$?`E6xQ zWQgiyHu64_ujWalXCX14<4xK*gHPS;e)rF6knIBJdFGRh7x@yT@4%rj?iER5X*gk{ z4CAO(S59dRdGe#)2L-;nxtL4v)A_clSLpKPVz~a}4tKR7cVQT_6B=#rK%SNcr{b!d zm3bhH=Bqh>s%7rqj20Bc3%M2dsW6)}lS1!ph{FU~;rpO0a(~Q}t5wMvZ;}_Ozl^&R zMRc5U4wF{7Z>WEnGdR&Q|CLHkw@XLKgdEmb{b-#AQ}^fW&F_Wo#qI^~Mfbr6_67rZ z244i? zeHZUKMK|hyM@T#iEV)4PKf*P z2{(U-gF`I2M7NI@<8p4up>gwSobbWrxXRT;E4EZcIQQ9ot6}x$UZDz`&9P>RLwPsJ zzXbY+Sm;|cxyzrs$FGJy&0)QZGMBHhEmr|(VSC2k6Hc_pZMkFas{TWT0Y0=G`b)Lc z$n@OV{LW4k%~_D#GGC@0kJ7#1U_aFqM$~lX<=Hm?$TBigw>WaLUxYQs_=WlN7gjue zvkQWaFDq(!K8Jr1qaP%heXRYy?mp4ow+5@R(*^eZK`rmG;p+_iqmp;$Zn>qoYORI2 zRk?AiG1_^0R~ZU1ZQJ?1*4{GL ??*RJk|+ft(ZrnVZumpF-4HhCXCzBH3={UP89-YhT0bc?aL9m zPx0oUw!w~FH$|alj0UCRAgLrcFgoQ_oDPHph5x|DJBSF0F^Y1Fvj (%jL4&09>%^=E+~K>b7YdGt5y1$(Ho8Vcr{DisQ7_ zOdQ8)H&X4nt9jQgT1V@7SmVC)*=CCGQ%!FSA0B{01cfJ<>jMgfN~u xo37kYM8p&?Ir9JX9bp zkmgAZB}S5s#-2NuFPFfPsNp34l29s@Ahye%!TnJ(G9@XVP%T#xE!BeU(1LQ8=Bx;d z!C(e7orvLtPOa7mZZNc_=H6V}q{~pkP4T{9J*(*ngo1s)imvO)V6>k33mTnDqup@P zh41%qtZ)6iTP#>zB$@@Myn^$!i?0AD%snuzINCmVw>KWmj^Fcz6MjtJ2T2afMLK5L zFQk)3t{*6b!|t#>q#SaaYD5ZRhukS#oUDNfS>crPY_$*^3V}+d1Cq^rH$(KMT @g~-R&^qUl&Nv3frhPc}(wbITdO(0fVui~0`Fv)c9U zw|M7^JK$egqLjo$#V$8~J1tiAd{CvmL!a4YUD{Y-ZHxU-f`o7@5bQ@vSk`pMa)-!9 zif|}32S?Ptz?Q%Q){t3VU9#%!+O=q)lvWKj-H99 ;5<>}ABaHFVqFJPhp=cYmjtAzFO+sba9j!EB8~H+8V3AG z8k6ibK@Ypv^#FcdWi%YPJwgFBd> AQs=LFYCPbLVo2SL`*2(X7pWtq) zjE_o?IA;_6)uaLDVHKQS8eqshM$4W_4I>~XO}zR!haHa5O} CU#|$G;;!F+38B+njGP1wJF~G3)jZ3MpDs zlJTKX*(|O{3F3&f&4NaetQrgDfvK6I`8+Vq5&XtOE{GI6QW5Md{N(f= 2mp!MHRZuh|X--qr0-KF_UR)a{j_Kc%I0;R;bF{#Vun{?(3yLUfb)5;Yt z7`e4lNY5o=9ZP6~jpbVF%ovzwsuo^spi~23B(9h>5vrY2d!2`cpG0kKozJzDq8_TZ za4K?4dW1!^7P-iw)9H4&9lp$ktNoo5j(<8@k5;$e@qK$b-i+7xzx+`w22tPu(Sw-J z?5_lpU@u>z@HR@SpXFS%Shi5zyEH`fRS=#cloqf|!P0unFWT9XwNNLDCPxbHs5M1S zlx>tWBFmDiY~k3^ijGz~Y_yDp;(S1{oX7i+%s^E#m0YP`Sjx|-w8%wWXp}Z=IX#3| zfzBOE@`x%h79Up~egQJ7;0#0Kn_W4I8cy7B6gJ?^dbU{^(3~~n)%M-LhlqwMlto3Z zLuqm?HwaX}n9*T=>|a4l(es_9;P3>Lv-`tCNPd@zef$latf `fEW^q>Wuw_FjVzJ|ScpsA3+asM3v4Y3`tYYbr+-DFhCJ zf%}MnFgyu?k4ys-Aw@`t6q->0a?~5(%@v9+#Yij}9dpV<=7Rvhu%v`!(L&a6o1|@a z>)LVN?sS#PYylS;FkMRNLTV9lVe_` 98h4 zFIsE2VrTP#2+tFko8Y*axM&@i(ILm$UjiD38JRdS+sB}Bo{KyCa*6(l9!Y9%GMZ|m z`e5^zk=83|E6QN-PgAgDVyMw8UDm}(O7wZ1 c7)khvgk%q=fnWYP84->ai{_3Nr9Cho9qn|N zX2u%RU}yR?vV=C6q5hOl!-3_TWVv$j7f9iJtfUIPxCEu^Dff9dT(~z J9Xh`Z0 z6qPI&M!Srr(~*#Xkl iPJR{m+HQAcXhIQUIT&B~Q;bI)eN&BxY^EK~(MeA-o zif!BRyxmRpy_-)%C;jNRB0q8 oqO#fu024RGDNEF|Epd3@}Y f|oYIA!63;r~WXWs1d{NDis zg8~_Ll9y3vL|kZhEC)Ah7Ar@b2bMoOXgl8+$v@ATZ>CNva^a>D^yV Z+BezibjpeFIz7EJ$8NS zbR9PLWZ}QPVvjzA<2mWN-QK?-!fLBFel;D-z7DFYP@b-zE$tF%-F21yBZ(S5bWQu| zj&4)(kxh9^$N08 Ztsl%A&($%k%5Yac&C==l#k0LF!SYsPW_SRModELvHe<45nxlx4#S<_kQH23 zRo1Yjc^QtIh1|spYP2?f87+KzQ5(RE^I9KUwBJj@(5RiCG&4pW9r8V8yvv^0O__-x z$FeFf0L!G1@j+rjqP*jFe#VR)RQ~YYg3-R%d7$P80JvdOn6JC*5xISAi?+dv9ae9T zbAjD|IH=W-#S3+AM!;2}Pd)_d<4v*&3G3g~cw14&%lSFb6qGsE?CJAJCA KXw5{b`DKpbN7JfO*>O+q#AKbS+}!btGXZ>^m^#`V0O3W?lJ0}34)Q? zv4*nEAHEr5;PS?GM7$>0kiH7AOz)9>5BIx{|J3W55va5*uF1{}R|qPh5Y2#hW@|m& zC^#RPlBj;Bf};%l%bo_N>|C0gOuM8|l{LbQQUO~XO1`1coD$i5gfGa#!qPnb7I_Ni z?qNqZHz(9pl$F%xPhw$Vu^LCon{8pyRz{lJTBDTeXV^R@=b7D9mDiIk=EeLR1tw8+ zFvL(*;05QuXu+}}S~E`n{&f7@NWBD~1Mf=b*c#E*@}Ij8oMXo-R-!HLN7=yxc =eC@0OD3zNu+AB(&Uq-B_ESnQTRj=Gk;=yO2qts|K{z+p$& z3h}G9=UQoRPl2X1w32&c*$;aCz@#o%8Ks(2ki0WhX^=hLKBN_&FCO8Hk=lA{bw!sm zL^BTfYr$pM{6(c<&*xUlBh0qp-leaXW-Rwq$mj{++c~v)gqnWYgxeY(w*gk^=fiGT zAJr)9>!L?+67S>S$AOb$##Pb|?xU~Vu+~k2{fWp|+?b!^@Q3|?QcU+N+@d%vYgQ-P z=Lf13*lne;a7`bAKd$bR$bjp_Z kZ(y%iyWe^rX{$^mPxR{g0Tq^eV6}5B1YS$MJJ0>e ztee(pq`