From a80d3c7935ef5fbace54135e954c72e1a7779746 Mon Sep 17 00:00:00 2001 From: icefire <1028247921@qq.com> Date: Mon, 14 Oct 2024 15:52:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A4=9A=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- next-i18next.config.js | 6 - next.config.mjs | 5 +- package.json | 6 +- pnpm-lock.yaml | 84 ++++++++++ public/home/qrcode.png | Bin 0 -> 39861 bytes public/home/submit_icon.png | Bin 0 -> 550 bytes public/locales/en-US.json | 3 - public/locales/en/common.json | 0 public/locales/zh-CN.json | 3 - public/locales/zh-CN/common.json | 0 src/app/[lang]/home/components/form.tsx | 40 +++++ src/app/[lang]/home/page.tsx | 199 ++++++++++++++++++++++++ src/app/components/footer.tsx | 39 +++++ src/app/components/header.tsx | 67 +++++--- src/app/home/page.tsx | 177 --------------------- src/app/layout.tsx | 10 +- src/dictionaries/en.json | 23 +++ src/dictionaries/index.ts | 6 + src/dictionaries/zh.json | 22 +++ 19 files changed, 459 insertions(+), 231 deletions(-) delete mode 100644 next-i18next.config.js create mode 100644 public/home/qrcode.png create mode 100644 public/home/submit_icon.png delete mode 100644 public/locales/en-US.json delete mode 100644 public/locales/en/common.json delete mode 100644 public/locales/zh-CN.json delete mode 100644 public/locales/zh-CN/common.json create mode 100644 src/app/[lang]/home/components/form.tsx create mode 100644 src/app/[lang]/home/page.tsx create mode 100644 src/app/components/footer.tsx delete mode 100644 src/app/home/page.tsx create mode 100644 src/dictionaries/en.json create mode 100644 src/dictionaries/index.ts create mode 100644 src/dictionaries/zh.json diff --git a/next-i18next.config.js b/next-i18next.config.js deleted file mode 100644 index 0332432..0000000 --- a/next-i18next.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - i18n: { - defaultLocale: 'en', - locales: ['en', 'zh-CN'], - }, -} \ No newline at end of file diff --git a/next.config.mjs b/next.config.mjs index b89fb19..c3bec89 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,9 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - i18n: { - defaultLocale: 'en', - locales: ['en', 'zh-CN'], - } + }; export default nextConfig; diff --git a/package.json b/package.json index 5e37f9f..7dfd98c 100644 --- a/package.json +++ b/package.json @@ -12,12 +12,10 @@ "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.0", "@mui/material": "^6.1.3", - "i18next": "^23.15.2", "next": "14.2.15", - "next-i18next": "^15.3.1", + "next-intl": "^3.21.1", "react": "^18", - "react-dom": "^18", - "react-i18next": "^15.0.3" + "react-dom": "^18" }, "devDependencies": { "@types/node": "^20", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5321bd..ff6f1ff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: next: specifier: 14.2.15 version: 14.2.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-intl: + specifier: ^3.21.1 + version: 3.21.1(next@14.2.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) react: specifier: ^18 version: 18.3.1 @@ -175,6 +178,21 @@ packages: resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@formatjs/ecma402-abstract@2.2.0': + resolution: {integrity: sha512-IpM+ev1E4QLtstniOE29W1rqH9eTdx5hQdNL8pzrflMj/gogfaoONZqL83LUeQScHAvyMbpqP5C9MzNf+fFwhQ==} + + '@formatjs/fast-memoize@2.2.1': + resolution: {integrity: sha512-XS2RcOSyWxmUB7BUjj3mlPH0exsUzlf6QfhhijgI941WaJhVxXQ6mEWkdUFIdnKi3TuTYxRdelsgv3mjieIGIA==} + + '@formatjs/icu-messageformat-parser@2.7.10': + resolution: {integrity: sha512-wlQfqCZ7PURkUNL2+8VTEFavPovtADU/isSKLFvDbdFmV7QPZIYqFMkhklaDYgMyLSBJa/h2MVQ2aFvoEJhxgg==} + + '@formatjs/icu-skeleton-parser@1.8.4': + resolution: {integrity: sha512-LMQ1+Wk1QSzU4zpd5aSu7+w5oeYhupRwZnMQckLPRYhSjf2/8JWQ882BauY9NyHxs5igpuQIXZDgfkaH3PoATg==} + + '@formatjs/intl-localematcher@0.5.5': + resolution: {integrity: sha512-t5tOGMgZ/i5+ALl2/offNqAQq/lfUnKLEw0mXQI4N4bqpedhrSE+fyKLpwnd22sK0dif6AV+ufQcTsKShB9J1g==} + '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} @@ -1066,6 +1084,9 @@ packages: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} + intl-messageformat@10.7.0: + resolution: {integrity: sha512-2P06M9jFTqJnEQzE072VGPjbAx6ZG1YysgopAwc8ui0ajSjtwX1MeQ6bXFXIzKcNENJTizKkcJIcZ0zlpl1zSg==} + is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} @@ -1313,6 +1334,16 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + next-intl@3.21.1: + resolution: {integrity: sha512-hQm4Wgq5i1lfOHAWmXBVl5d2/XAeddcjsrUmjotXEESzPSvW5j2t0Pr8AV8WorTILgqU748aXuenBhz5P78tdw==} + peerDependencies: + next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + next@14.2.15: resolution: {integrity: sha512-h9ctmOokpoDphRvMGnwOJAedT6zKhwqyZML9mDtspgf4Rh3Pn7UTYKqePNoDvhsWBAO5GoPNYshnAUGIazVGmw==} engines: {node: '>=18.17.0'} @@ -1786,6 +1817,11 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + use-intl@3.21.1: + resolution: {integrity: sha512-52kYgcydYkG9SX0ZZGt7W6WD2Va01hwe15bDgkXuaTdSxrF9fDu6hHTV5DxIuSmSSf/FEcBo/nodpw3ZhY31Lw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -2009,6 +2045,31 @@ snapshots: '@eslint/js@8.57.1': {} + '@formatjs/ecma402-abstract@2.2.0': + dependencies: + '@formatjs/fast-memoize': 2.2.1 + '@formatjs/intl-localematcher': 0.5.5 + tslib: 2.7.0 + + '@formatjs/fast-memoize@2.2.1': + dependencies: + tslib: 2.7.0 + + '@formatjs/icu-messageformat-parser@2.7.10': + dependencies: + '@formatjs/ecma402-abstract': 2.2.0 + '@formatjs/icu-skeleton-parser': 1.8.4 + tslib: 2.7.0 + + '@formatjs/icu-skeleton-parser@1.8.4': + dependencies: + '@formatjs/ecma402-abstract': 2.2.0 + tslib: 2.7.0 + + '@formatjs/intl-localematcher@0.5.5': + dependencies: + tslib: 2.7.0 + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -3103,6 +3164,13 @@ snapshots: hasown: 2.0.2 side-channel: 1.0.6 + intl-messageformat@10.7.0: + dependencies: + '@formatjs/ecma402-abstract': 2.2.0 + '@formatjs/fast-memoize': 2.2.1 + '@formatjs/icu-messageformat-parser': 2.7.10 + tslib: 2.7.0 + is-arguments@1.1.1: dependencies: call-bind: 1.0.7 @@ -3329,6 +3397,16 @@ snapshots: natural-compare@1.4.0: {} + negotiator@0.6.3: {} + + next-intl@3.21.1(next@14.2.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): + dependencies: + '@formatjs/intl-localematcher': 0.5.5 + negotiator: 0.6.3 + next: 14.2.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + use-intl: 3.21.1(react@18.3.1) + next@14.2.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.15 @@ -3861,6 +3939,12 @@ snapshots: dependencies: punycode: 2.3.1 + use-intl@3.21.1(react@18.3.1): + dependencies: + '@formatjs/fast-memoize': 2.2.1 + intl-messageformat: 10.7.0 + react: 18.3.1 + util-deprecate@1.0.2: {} which-boxed-primitive@1.0.2: diff --git a/public/home/qrcode.png b/public/home/qrcode.png new file mode 100644 index 0000000000000000000000000000000000000000..193d73ecb5540b2b7302d8af4362c6f4ea5eeaf4 GIT binary patch literal 39861 zcmV)oK%BpcP)Px#1am@3R0s$N2z&@+hyVZ}07*naRCt{1op-n-M|JjpGdFI~uB2UsRn7rLB!MDG zL}79U8IyyFCWDO)Cg+b}FqjOsz#uZ1EFlRAC6pr)D6O=susQGEF!TNK)}eZOs-|o1 z^vs>zz3=n%vwNqyx~saNXl4e+nP0%kCS?Hluf4*-7v zCYb*5IhCshTnfAfs9MD;?%&;k9|9+5e%sn{FYqWdnWbVE;1j@b=C@0M&$<8420jWb zbbr@@J6)bNF5f5Ib1eNr;9J0!wremo9EK+D0rz(e_zv((_xD2JUw}oKJU5|oj{&oQ zkJC8u{{_{16EFn)1Ms*^`hzad(!?^J0=ya+bbpTn-vrKge;*FKJ9B>>_%Z6EbzoPQ zo-N~rz}MZgx{V4NE3eP|w$Z)+k{-N21v>)215TLkf|P_h>L0HKZUqgt3z+_ywHw#H z!2WG~oIeDfu?0BMrGFbu1o;)=Z7%(v1L>1AcJOZFcAD$327QM?)cE=IN#JQN|2G5a zHMDXAyvN<2zvt7WEqXh<^5pZc1r7j4fV%?e&A5xFt-Z44miE6FV<(+6L>Re1F8xf5%_%&c&PjT!GUL0@SSyjAiattzg}U_ zz;E-ABsKsX6-ciF`?>$`6-ck(SMGzzi0m007x_Jp7Xmv3exD2MjlSi+f%HK%u?+xw z1k$U(6B6EE2Ie8jGmnE@+H|4{9V`w7#4R8he<}X18 zkLMyQ>0f}K0p}#VzYN?4JP~*f(yRR*En4RR>v~j%GB8GK>9^OYpgvb9P*u=M+Dfz> zLng@Iwzy}ya2)VuWFC)UEt*Ky^rS>Hn8Ea7A+W6Ap5=(*^9!_)^b0CTcz6%m^2V?f zG;y^uKYk;YyHD^Enkfi*D!}{_-#3Up>VUh--fmYj&$cTITa`wbdKoO=4u~_Am%Q`u zZ}<7xIt(F&aTb+K`Ywn^*zWeGsEqdeFyU1^DifkK1?Hzss@}(TBoic z;%Aw%|d?)e{@JLZ2TJ|Ex(NNUK}VK8pWfxby+wN4YYt1D@j2htc*ro4*Eph4L1%WAOS)yDlS4SIMGi;#!H? zsGqS5VXj~D#5D#ytkXb4n^>w=f^|`RK$|v^s1;R-}H$1iiE5Y>xb% z-wI6?`w%uZ*u=Y;urjrRCWI8kjviV510(6jB|d*=!ds>yj@1w{2ozzAxK(k)y?gf- z>8)T}=GeHf0Y6E&j@8KTQ$cJy*Xi@u(w~O5woo*2Rq6lPc@y4L-)+<*zlY5G-9W6p zYIuuWD^!S24hti{8+M|cK^bG-r(zSHx)DQcV0JoS2hn(#PP#!653dN@#l&R_$bN?D z7kYtMhh1ON^Gy`a!)OKzh*LXeCB7q82kQ$l>D9K$MTkkI#_@_td|AF+E7XYd#jbMc zS47f_XfZaRLwr1d6~Kl_nw2f(8>Jv-8B9IM9z$8>n^tTO1k^Hd7tNF82I2#yUHq2j z<3;0$A2yCU?Zq^9zPc+{krV=&7(PXF=lu)PZ2|l{%_j0OymyHroQDp#XHf&b>;C^| z!js??z?F&b$Uoo8c)9!k7ip%yY(hp1+e4);C=uvaRD6SF2iEr`pn-) z(Ri49C5~4km?w*)Yt&qpHo?=t~QRqXpvSdv4T1PSGWC&S z$2E!u&ZxWk!Hr2Cqq(bH$=bMA**a#onAKc*ug`K;+c%NlVZj0R52GgvrEsO3Qk3$ z`rVo9Qp&R`mVw98SjIciF{V^q<-W)PUAB(50!O>_If!$WO}~WlSLaqZ1J!GBrVLl( zt%3_O1VP2T;2`)DrX7@Blb@RLCPI`AJZ z{Ued|OX!Vvh6*~W5-P(P?w)T((m$B^j@J|BX{GAmiqNVKHaWg0l3v6aEJNbDuHYG+ zUY{sIR{elp~eTa0nbc_#nBuOx!_4XY#(w63DT98fkBD|f*6st7xbjmQxemL8LQ&9hnNDr)uGiC*b$q4hDp|` z6I8n>%kx8(_%6W4WQ?#Iqnm73n3=fBL5e$wre@y*?ivqtbA)RaXRlqNFfFc6rC-555@1!8a1EY=nMHoj0koj9g|K~K83Z-|j?KIncm*Jn~qv9u1@|XrT21 zb>N@SH$NDWW$TEGW)s@Ckj2rW{!F5YA~klvN~E)U3SQT>8bx_33-3hV@&NaD9W8)n z05}(gfIBIZei_Zg*XtwI+1mI2hI@FP*@ZawL z`y!4~R!wj#iVc~f_#Fm5N#laH5xI7@E%R&fzO6ut{m7Ndy*J+$+TH%?5zrn?5vOJV#XNz_E-#t=0SVTA=?0Vu4?0>8~g64C(TV})>7;`1Lx z_#2#xbf!lUw(f09A+r_{rd$k?#$_8s!Bj$s`9qsQ1~U^^F)H}2VZXchfq0vm@AcT( z&s0-?k@UJK@i|*FI_(El`rmzWUt?zCDn=b|{_iKgRt&Liz$Dt@gA*sP6 zuy5m)@GnI^!?w8eF+^P1%K=0+!I| z%dFQ(a*f@}s<;992ycaL$*P#gHXq8o0~CFmnQxblP~66;q719z*9)G}ZL8vLNFaz> z6;mXxtwAAO7WPG9x(4xqSMNd`rC#Z1PN6Xdp}9T2wny(T!XWb3lx5bhLB6AI$^5px z>$DC)Cm8H-dksmYH@Lq?5dSZ$q`v^~B6}G5t;%|&cn}?}>UMCJ=?>~O{*LXZ( z-RKMGy$k1l#cbe&!0)>u32F%GQuA#(iYI&@9Y~*{Q8@I=VCVQ!mU+ zS{_y6-^tVvMO*1u7`N#@4%8PYW8&(zE~8hvl3~K%V}Ram6#> z5yEO@?JZgiW3-B11ZRoGtt<;2PrhYLT<6ohLzxq#^NTvgTHwaO@2xmDWn%;3MqM8H zeL4_pkKZ!=O5J|J7Q)=Vad%B1zFU5>ui+gCE(xU9(Zttn{F?6hR@;F3N-I<;Sg6Zj z$o>i`Y+r=*GuAkrUJY?bide=)YlJP&eYXbOdNza`?R?#9d@&E}tj83hJ(~WNOxMnbetqo;Z6{j2f zpvgaKRqXpSNj=7V;FWmlK^;kb#yYP8XW_XuHMCX!6JA1kIPjRvGk;8@yWM?|1 z@-Aw61&a!9oofT)aoHKbd>NO!ccezLt{`b3ODz5cjZvOkp^7|n9+&y;0mMJLKbWH# z`vA|wOZ=0_Us!7XUf>Yq!pGWSDe||~E6KNtr2qZg-=j$K`Ft z$hTccT-yR2qDI_w+%BF=bEEEzmyn)J^GSkHz76H z6*R|}tkNiDb{j9Gxvvc}y=Msf21OIs)^Nyrka!F_Xm521-JA8t6?@jf1?lz;i?$h) zEuN8;0H%rx@%V}NqyPW7TY(f zZ{=656YNg!BEL@+`%)mi7foDMyfo3Tcm(B<@un(-zefLDtmL}wHb>DADBQC}wVs9btgs|869pSq4GKj#xkzn$=8PecQADH=o@ z-1phlrJsmAAgo0euzQe2(6&jlkiV++Xfj%Xq6FDl$DNRcaD{vRdf-0f5d!y|&mva! zJ?`Cqq0!I#lMr|6Ueq>=fe$9u59Isl4=(?`t{lIh^>#apS+0!txNE8V_mORs;a#ZQ zR>%8+x3`hM+o%Aa$G5}1Xz_V^i#%oHAmkCm+GrJ89EzmABISG?EyO1xDSo=garT;v ztoE%G^L1cJ1$CUFKn8X9uzm_#G=wIvBB^mbQYgoyozQdZc-`508g(1?`$pnMfdzPm z^cI@M`#EU!oa55-TTwg9Rwb?vs=BgTw3&8c+sa}hz+eSmE&lP>^g`|bbo4|V_=@$$jBUI6tUYe?}sGz}`x+?b*+UaZq=v4nOn#?PR zif~oto(cTcE`(!|aBW6vlAnWD=w9u?T zN0#yvgRNfq#i)Y3n;wQH=}qW}M$AWgXdul)(rY%F_OEkwsAvAo*R6^qI9pI}a#!jZ zI&910u)p=Ux#m#?$GfqH1mIM!f$tr z@B*4e^<{{3nu0}Wi<8Yi0emene--!~&EMcsJfE%zXCf&!n|}pxT4Meo!hE{VCFZXZ z_EUEr>2-Jx&3w646w@J6wu)Q(wFErtdt1HkA#{puXiQn2Y7!Z|F;wKKfgsi zQY~7sIy@yY|1To>e@dD)@E;=iQ>g^ABKhm+Ol%5%5Xqma3w#yfptq^Ug9Z5Qcm67J zg>Lv!B>!6q^35R}*mzsIuC4+7zj#DaPB+xR<=&4(jJaN*H>OnPT zp-l~X+i6`}O^%)V{7U@>yA+h82vy=`O?~e1k>88dI~&;cj|Kg>ibAr7%>3H|HUXa@ zZP42>n0`en5jdtp=~cAtPW_>8>*r@vxBRiiHl-hYi~jK@Qa0`f{$Ca8GyaZnJie_N zlfcVpRIIncO2VC`M*893*aW#EG5=kJmEG-F4nt(w8tI3yV+!p163g%);X0%;^J|2a z@a=3jW0QBPa(@lsx~5JBlY}kswaD)w#9Y6mSa7dJTgq*1@>&MGn%v^J2>2p8?79j6 z@$LU*?olUECmPRPTimrdb8T|h#>llE4c2vtU$qJ~+#6~CxYE1aGgrIktU)@!RD$aX z$luaxmvN!b(D#_`D>jZ}*E-Y||3N0QRA?~FMy@n=!n>JW zNO>ZB9jyc=o!D`i3Yw^lFH_6hW0PG7=t#7o`4)gH+ zb}f>q+mS#<5U0rMT|)yYRo7TWeZj_94Gr9O+Hq%8{>|=r?e-;uQEXB;Qr$-E*jfx* z(0FW+mbcb3W8K0KQp^tGBNQ(uoxBR7UM$2DP>akQ|tGqKIa6M;wZQhRD02VMSQ_y6_8U2lhA6WeUOGXFmO@X|{#hPgr^~W$7&==Eko*oMTz+zg0{cwQQbD7ZCxtgZUFgiTZz8qMwkE7 zq;CaZgC-%{K8>L*k+s9|s9vT*siFFwl=%D^Y)1%jpe7N&Dg_@5TO57b5B3>UCiws30Ys?I*m6#t`Gm zrGB45;_YCFrKk4AZ5lHZmxrxr+bgyf{?yjs+_DIDij5^P-d*g>=yrvzy#w?DlfX3{ zKBH4oW?86H>=P_zc{4xp(+$(jg^(I^FlM2?FEM}Y8>N1qNs5mT{W2E7G!Dor;`UV0cN(X8u*`Mkp5^iv z`OME_mMf$2hqloB?e1Ln{xQ6x!LkRe)pHQ<9=jb_J64#U@dAF_RtP({v{N57^gZ(n z=n$%d`FG2Y7wdy#`0tc&hY@@mmF*C6z?ES$eqsGvI~{>m+|@`rSc8sfJgVeEw8AdH zZAh1L2cjn2M!FBBxoE3r$8FXiuFgyF6WOWg*u)y7&$tS$ly;K;b->j~x>$u)^6zER zk9TES?w)f4;@%W_kTnbeA3&U=HSSqApyNpu)Ih&+=~p0q#tPt*XrdZGex6pl>u%(z z@N1bmp6T*k;nJ4?A17V;ez41XA6ng4yLa?zi&8;>SeGK|#??sQ^EJu~@~{hXxxE;D zpEd41M9kOd0-+cl|Spc!{^7es&{pIet4l0K5S| z9#)|7@C0pK0TEz|?Zh4@n7oA^3D8}D_mQJ_Nvo6_aIsQTpmS+ z6f0w_Ejx|J*DIvDp4r|JYiH{xF_Nr}huFDJb5zjEKV3{;)+&3ENFAq~etUdlF%sd&bbf$l)p_%s|x?Hd<9)%>ItPW@# z9STmt9N>>M>yZ8juh{+y&HLqB@ms{t;8zm6Hlqmz^nY( z_u6n*F0F?2R>SBV+zo*`X1QkP1k&%uQy+@(*uXcakP_R8OieR_wF3jAmfQ$l0N0^1UV#nhrrStI-sw=2d@9Ca(FAB|dcN=9q7KLiB z;td?_v_q#DMs=*Ka1dc|TXq#VF8jN<{IpusfP0 z_Cw?4PT(?p9dBEAglizG|^3< zg|$p}|AA;ckGOYOkmVW7UK-mBwX!24*= zQC~N4DmqRwijKhSj(A>gr8kPmA>iMT)VCZs60L4;M-1_;0fVT#C!&?uTrhtIt;Qf1 zI!B}W?txbOFC)%Q3XVYA_8rg`cntB8K7^#Rxyb#?Y`hhADe8+Uh8A-leYh*Xd9wWk z>8t<3^#A}M07*naR8rpwDCWVOO#WZu!@m__1oee^s6GQos`~(GB+n`uk9HDd1(M8O zgT7T6I2m!d=AiLiLu39Uu8cb&cj$Yf-Hj2tKY+HmqiFma$#qAhdifybO4m`$L3`g2 zr^B4HolUdurH06n{eqB>q#EM=^a5wne15Htwz{2$=IRxmK{!T%ZKsbX%thNkTFk)# zM0yOh(^+WJ`6=PPmKq=P?;~}%I5Gb`!m$lEkWLl&SfC7(C|E=a4kFCcI-hb#va@ME z?`dWHM|aN`3Acm!6#JJz{u=PVMK3Rlb7CuJ==sJ4Go3{i72@2g=|G6XWQ_J+U?;+z zD(kzv-?0nfeq|i2M-iTcXW=bktuREG0$LVYdOG8?n*7DbWHmN8@unN2z` z@ri*l*paproJiR6xKA5pXoXS2*7$50cPHEq#(Ug}W+b&!FUWHC@!AQNFoUfZvG7~A zy}66dw%uC;Wg!-x4ARG3Y=TOid}9JZS@A>1nMTfCSreCuc_G*V-+LnI{q7j8Mtc^y zPTv*!j{V|UA_Xyhr47VO3G>-3=tU9g#0Sh0Jau9^F+ey@L920+$6b-%Qz;?0MSh=( zQ-Ba+eYG7-c^6UE#I+uoN%L5V56F5R%^hwMDJ%O0*9U%^ARe5vZ2X4s1pjNc9!B|X zG%rSV;OFlDO9?ytyB$#;iZG6M!IOW-8$J-?^CPMcF7mEm5Z4WG`fW z+X+o%<48$*flD7ir~dyA@0#K!M8517@&8D4V%~HBb@cH+NbjVcqkyO5<5{jjO3t2G zSxUmmz+;e_po*-DU&gBojzUWOxv0Nv0{)w{i3=pnyag$sEezaWkkxS9z4Hl(kG24{ z<4wrXUuru(2U#!8JYZ2TH9jM*`@ABqP_%T0>6!m-K$*D`xLGTGw$Csi$VBy%tP&>9%Erk?k zhN(^_b`ZB02Xb4LffnyCs%IJBp)AC{V^JMbo@aGE`1Mq5Usm+yb(!e%g}7R1i4X3bv||)T1jUi zaeO)O4gA*R4CE$xU$oL*hoqIeT>4&!r?oFy1(qTgyuWtodn2C9Zm#_IBPQ}U>7B&& zRCIa(bc$gFaiDH?za4~*V(p0}ntNUOQuR7j#7D9?iR+NG^Fz`H-qX=azBf__T#t?# zEl$jTG>VOAsJr*yl9+!X^0RiF%ex$H!@fiMHs~4XJMV$qxLg5z3g4HWkNVRJBpHsP zcCa!YjOZ7~AnEFEBvsmWbywuZ$h>vT0e(+dr4m8~NqvX9zvsEKeT?1(7~UK8wL#Pm zC(u^)k1l;T;KejrDX&A^$DZKbg!vX!PQeoJD4ID=H8f~J z9dI4ZW%v``qv<7q^!0ek#!mw26NqHj3!F;WAJ=uL^BhQ+JF|*3ZcYUazEC?oIm?`{O#DFbC>tm%ckbvUm1c ziYBqyXz|XMaXo2q7eU`SU&cv9YV8GPq3w65ukDBW+vS1uF{BdeDynEeJd^OYF*O47 z4urj>R?+GTTA}mrsFLpe;RKooX9ab#QFn!0c^rTyt$BD!CW|>}WwCQtc?^)w-{};4 z6ZTYkv@6E~;{2eLK|g{g2WF9Nry`t5^8{5vEbW-bf-L@#a69dZ{NNX16t!unzorKC z*pKG#TtVmdK>Z+87o!;LP1pz9&gdJ@A?$l?4(U9sX9db=e&~CF(a5`Y#E;pK2a2J{ z@1>%OK5iLI+L)q0#%D34iuSSXAb0Z(H#--49N#u<4PQhpAgZ!;SWbgM(RaXs*Qq%U0T z$}xey(*&|`JqP$G`i7UFwz`D$iR;C{n~@Gd(M$)<^FflB1zX!J6(o2fxDtU^<6y4wFu{+wmk`1Y1g>tea@v{juiM$Kn9;7 z^u53A(w87(#*6X#o*QZO{q}6sm*(R`&V7e;9@i(`dq+|K9YmAf*IQ*O5$llN@&l+& z4`ZbligjUx5IXYe%C|IULkK+g4pkQ92I%j5T1h+@@cgYNk}Gbg<#~(#}J-Gt?rK`{Jo#$ z%5f^qCi_a}`A{KZ*FS}p@Ieq^DKK8t=63q4+@xidB}?f2N^V{SZRm03vd_&1&E*E;pa z(TZC$lDQ{@g|sfeIZKT3hiq$pXe8YbqbgV%9YpKzP(-ASxr{Niazt0uPqrraL7gHN z?AfHP`E++&RfzZ1LKu%LRlm{+rrIfbbuKFfo$|c8H83Xeo)u#JpCU87>7Qb!@-0|x zr<1oGm5HIKy(`2gzU%Nhzo}qr37T65Vr`IBKXh{|FF%Gy$y0TsINlHcSNzk#%bYvH~teAI7$T z2cr&`EyHi|=cNV^PbQnboZcOP25ob$$h`YnC$??;{TQdgGik(JNzBKMAE?m5eV*Jjcm>&kR7nxs~^cbH!4DEI6Y=sRA7cu$tT z5D{YSJ1lkg*w$nO@zL!4%U$}uY(Jb<6o5pRxW*WuGL7Elx8|kfXVi-R_ zCNftl2JreQtLp~Rx1pvRsNkKkjpNU9R#1niwwFfm4ZfT)Nf4CxH?x| z8ESaSLl))+W!$|dpC1~JjMVW_nGKd^WZ*3{o>#Rxn9Jwp_zx$?0A}PR8W7< zM$xLHw%+2>7t&}cuj5n&6%>{}S$>il?mPf5=&15cuvPdACS{gxi$1fB!x2shH)QL==*JtFCK z)R|InS0w+JT>3X7>831>kz|*n8T)`p`WRupN*=>_C3*fz4J7)ZNd9lS^bj%9B%%Q{ zutEgYI+D&#BjwSJHP$-9$E6bi1gO(V0ULtlNRg)YBi~4v4QZQH;JYfDAGNc zqBI2Sj4{%1>UWrKq{JVHwfA5_`u0RHjR^`H=#Nl$HH!7FvG%GPk1IylGfvPX;mX!Y zS0;uyA>ftHF_$J*_}GB738zB1qU%VLn8pcnpdfvvj!ir!3B(4aO)B?Bo?*YWVl&%> z7J7$S|F#Ci0?LAqo*cW!6w$H1(l1KsNxDz^j=9fSPJi@;I>io5*F}E++c@19KWH9A z+p=Z&;~fJiGE82-@^#V&^<&WFlvT3bjdW8W(fI#ImeHTYI%N8wv5pH4UD%m zfahps)2lSsaRM)GTDra8zR}jSO{$>2maS8st7Tj>bCEPbqePW$2b;iC!{GG_!$`L~ zMw}DZ39_6)o4`%@=oeTSjhAR`l}#VQkC#bcEIWy0CzXSdq@Y8PW#z z0J3b&#w&_9;Ppc(x}w>x41Y3m%bD7_HaE~k+;xDW-e-nc{FY* z$7rnMDB>Lsqdv8g#w}_EeZOJ+vxSa;eeS_B*&Tn7^>4 z6t`^_lWpFg#~>>IAgb#scV+u-_B)#7*bb4msEo5{)PEb{7?2rx1!}l;s1vNgyRR5T zZjo)a-t1m>5$fO-;O#E&hRky=Lmeyyk3-wjb*S>=sIlJe(jSHz&iu>UJ3dL;R&W5h z2e#*LcGpkvivL%*dfPo?Xgh0Ly=SBEv_A9xJ4p{;wg@@g%jUnI^kYlIh?lm}UG|J0 zlV%yNpzvT;zm4b{--)l|lUGzZF%48urs$=h1kG|>067yGp58~@)*U#|M@LSw7 zYp#6u9S=%;$I)mK$v*!+ble4GdHXBA{bMU1Ix}hcqppk_+%q8E(NJJ31C|_BP?i+n-4b;Z_E+?O=UjJ*u}!vY*9|S-WnayrY7PkdTsn z{#qPmq=KS7hxiiaJ9>ATiJ5ji4Xq5JK&5rOKdmB!g0a@|hlk%ENnb{qdyEBy1I8Nv zr|O;+N`JR|M#xED9gzuB@ZL!Ni%8Q!J&bUm(#^!Ju33x_b{<#9Pb?wwXB~Cel*#e$ zBl%M$u2I4PV{6Fg*9aQGp?ADJ@VpS-5y@}CQvR8+Gexs-$2d|Ok)CYKiJh0)`_QQb$q;tLi|iq!TJ&OiomFj@D2%xUWf>;^!Lxh#5K=96tsLN`AgiRz z!t^bjU`0WCDwnNOZeY;_Tp>P*rh4h<6pM>*3Bn{2v)+eb?Hi*r>=yaGY}mQw7g0SU;SQauuw5A`OC7(3jFmN&pA;K(*8UTb z^lVvD-jRnzjh`eg;aa|nBI&&f2zw9VerY?9wS=8cwrZbt5qr+xet$U9|76{?Y{Ey2 z8A6o=r}=a0ivJhF8#1H+30&tHQN zrcs1hh>w@ezY%|6zX(-y<}?3|uEHCF-WMq29r#7A2)n!IW%F;wE8hnr>2G!Evysj( zUxr_y1#$?_*UMfP;1}Q*;92Z;U5l5fPDYb>HhneTZ+^E?K|x&db@(a1uRWK>F*%M5 zGez#VQ?V=F0cQ4kWwx{LPvh~O2a#1HTajaE)K%PwUpXqsi$ZqWc^U2TQg*=)pe@L4 zOP;%v4eYTJuc%Ey1x-G-r7#I3JF_2wU)9Eu!Zxd0n&qA`h$j0#)1LWv5G@q;?JeqY zJ7V`D{GoEQQi2Q8Zr8{Uo-LVgzt-l(7a2nLU$Kv%wbyvnb-Qft-e=I<8 zR)1#gJb@&&o9S)%v=P(}S-)|47f&N-Jgi3+_)h2-Aq=B2Z)I45H`p~{Hs#Hly+jpR zZFWNwY)BW9Vts1`b3ZeO&h-sj%faXE86&8zyBUah00|AD2vWT`5Iu@$OH+-OHH7D+ z7FShSxpg4`%?!Sh~LBXQO&Js-f=(YRo5C4B-p9nJQ} z@7at9sxeDisEohLyniD)(sOF7Of%>?=A!Mlwb4eT*LiY@?|2fD!0a8Hk>9m_T>3-N zj%Opjzg&j*#&RGEro29reg*#cSP`n|Xx05R^3~pfw-~-T_xufr&uNp->8?!njW(cT zOEw-3LtDvBne+?rLeUAXjvLVTwK|-XT7mBq=1cr8@gwvDjwj5$*?_iw`xEA!Oi&zh z%Mc1=TEja#EJ7&gZ5=h{)^wI|TgSTyx6}QUBP9=`t!HS=S%BmpN76sy(*HA({vU~D zSV(+4?16}|YXa#tr0=Yv?R6;Kf(QRJlKx&a`F%N3ho2P{-ndN~!?9ExNLUQD zV?^sC=>wz(0u31&DrjX%!CsLvbV5g&LHUSTZwDyHVpb(i-LUt@2)icD#Hcl?Td`rn zJS{uVxHB4x>5X#{@DObkk}zgZ6L)&F5MtkWacY zP{I4R%l5~0_~UmkqPefF#w)I$jrR&->Ep;xdkW?vYC~SXbO{KH`pZ?|6Qo4lD4KrYF(pyUzHdg}lZ}=HI`^@1G}K1uUfb)`EHHgum_oH=~bh zT(ddoRKC@FEiz2B!!bG&g)OU~?{p`!W~P3pLuj#?KODWxs)f@zm}rZ8A9IrEd)|2Y*)X8oi&~^A^ZnoEzH~k^PP)p&LR9`gT<(`Df(w=hO4;m`~4_u?*z< zQof9x_O(vyU{t1t{HYUH1-TS?6Fvg*Y;;`ab%;B4mP%XQT1_35};ZvXXxs&+7u|Sl@|G ztaOSh>PN4@ld>lfH|#6!@7JSoZC1V-@Lk|Dq)lG?A$Lg!WPZB|aVLuo^@DauA4YSB zZ6{aJ#+H2n@pyfYN0V5Lm-0sUjF`Wzccd1g4{#pgI;5V%>lAy_98|ZC+NRSJ0oxPa zNVpw8=hBZS9KZ6GrYD6lj0R|kBV`^!0dKt+E5^Ya#!2 zHFSsu|C*TprIGxLQ|S;R#E%{vjT$P(9=G$4vC5_%jO_=+jzOg!B<~a!7a)%r z#eRE;9c?jP%o7N6i58MZAsQjx@1%$tY`Rd<~@R+aAc+NG3 z3h~&EsU9w3{K|oT;Bjp&q2XI$pW<6e!2(J!Av;xhK@RF%WAc#HjrSVP44UA=n$4EhhD$uDcrX%(3r;yTmR z$nixeGBji(QRR^`*6YN*rgX{=O_sP;B1L>2OVOdqbx8k{M-BMB`~UZ7uCUQAwif)B zW{b!K-dB0IaSICKkjHYiF0$}+!+bntQA5EjKz{c_P6@9d>^v`zHH6Rk-h&poF{I?q zV?BPne4XYtokV`X%D^3jC&ycm0{jZXPC(b9agc(mX&&=i5M?3-=Mip)tJ~3y91Q$J z?zcbSC#-{j7rOtOm&c{ZLQz9{pjYGf)m7wa;Tvo{T(J>UhpbL(CEnp$FK`Irs+sh) z3LQ$lqs#BDpl#A_Xv?|)`CoewS%~jO1Jk?+^mCgIAV+>#>18qS-*^txGw~cM@Dp1s z>U$o00574jzyAuqQ15^g@mcco<-jl9|A$<9R(HG<_!{N(wF(NnnvdRe4xTHv0F8O; z?*nK;D?9}4umiH*&c-|Fyb%dIDgC30`g-;(@C5L!#P|OV7Od1B+K({zxP!zG%68(3 z!Q$ZAd-AX|T-m^_F@ypR#Gac)HsEZxF&7afzl#P=%(`sR!f;PQubmloeM&t>W*tPHKjO{+Kn_KeuU^(mnp9@pbgOul)D-8v6- z&>zqrUlCJ<4x_iz*9Fj47Fx9g&=|xzCcqtD@$0pV~I{*M607*na zR3Y|2lFk6pKrX*$5Nmlp+7d5E-|UgVw^3-dji}*Yjx0ul$nvxnx%arp{q}xz9oh$F(AqvSlyjzj;(MnksESTwA(b1Aam|CY>hrY)r(H6H~wzI>C5^);xQaXkt zp^qW%VHL&hI|JXA74(hIb?Hw+zTVDs&%6}52LFls`$WW(%6_+>A*rj53;}ON%<+@Z zw(NUoi&#U_%BK(q>RwmoWr*8#Z$cdh(C*-<%x~*}PZM_*kjG(&+qM87Y5SK*>Z>EB zz%!AR@F27WzYoP@oJ7*(`;hU<^mj*DuHw5R>F;;xFC*;d=}Oemjw2kuas!%34kGMBX)Wa`?nhDQj!9Ni zxi+J1Sg)e+6yYBUx5K$E{Vc+L$)ful8Az+6iN&IW=g*|p(O}&RwRMOSSi?Ij{8Ho{ z|DIUKr$_Stjx_0Q6dn1?=buEA{Q#Pz^63*ufB^Uc&EI(v@2_jhNEJUv2_Hlr0iMxm zAxc7QTQVOX5NVB*`?3UPkXY&gw=R;3>KHo`bh4J{l>HZPBS^(x-xd zK>=7>^@W?zfU|g#MYz`Gc_ytTl>c-0l;z_p73LWs8(ryM)V7<@w|F&;F+A5HYuO5X z%*0pX54W#H3&1s~olZn;Z92(~D0sy0@m9sR(0Eq&c2|ZP(lNcCM&0r?$O4`6y(;L; z<+C!stwv5OW826)4o2g}%1}oZZX=K`K!?5;X43x%{12KVc0(5MtWIq)s$);Aid!3| za|;~fkM$!SLD&O8_BtDN++jok*ivx+NAPFePAYi*1RC5km_b{x0k$(*J@!W(bPbXe zeoXr8T!dld%Jo3^{}Hr>`Wl*@2a!aVU4d>wtJIh)>uJDaa?d>nac|1NK8Pti3k|FR zw7vV0`+E*@$#Du=IhMPBzla9(Aaaee0F@RRdtmn-tq7sCT`gDpL zDBi9ej^FB5kz~@!qsOlJZBhkMNLt0oyAJ6mwd`8n%EkV3OQ*9iASOF##Pq_3uGwIKzQOf=eGO(0^A>_Kog5mCg zXe1vdAplKklEWFUP2@1*aEgsnb@QjQb7UD4{5#}LvhfhNxoFU2@HvG|IQ zPb|Z}gn3$rA;)fI;&{>~{Es0?bZ4}<6e;mPfpi~p5j*{eg8M7<#+q3sjv~x!+@10l zm>5Ewz$)G~&;B&)BP&QfU_7#r`UZqtmrjsdCffh6K zn{*$U5Fy7%Ri7f@hbZa|>B`I>Fwg>Ee#VAJ<7Cr9KXAmnQLp z2>16GGFG2=+AZ1JZ%JF6IYC{ z(F^}iMjVX|B1>NqNiXXFsx@dHSrc@ujJ-I@QZ||IXDZjB z#o>u)@;ne(NjKpmyiC$R=Nd!k8nLns#B`=M7GmwSKl=WUD0u!5@%}#L2`7UJ9Yk<9 zYQv?3k07KTFG#_Kz;gn>o1*ZZNIp{x$3l`XqnvV1B3;s{x!>#fL#Z+5yiII(MbcA! zm9KU0%XgSEI!Yd$c*sb_jVSoT#YlhmL1bV#iuhtvLv)H?Bd%Af8<}1r))!aNz0(zW z6tVncQsMo0F4hFi!pRoAaz8dfmthR66L-Lw{0--!)$kg3-Q=!QIxSrWdn1d)b*Mux zMV-_1R(s)NIo{%~OOXx>G|5CeAl7xa}DrS zeB%!w3*?_&9j`%jg4C5|*gfxhG+?iH&p2a>^=XBBDOSu+^%_G8)={Lxyq55x=Avs7 zwMUVjY&!5vG-m#S7Orb(Pm1jn^YOefyDq_7qz90`F`IrRKK4TuDaWtLUD=qQ`Sh!i zM~kxPK8ujIiR?Rmk957sFdtTf_z+`dBm0hFnpb^Gx2;LO4CV{V(z?N!GJ}PcA!INZ z%v>RZL$>_wZez3Ww|8^{U#2^g*8RwYK8z%+kR`a?YaQ?&;)l?u3j;K^b+7q*)>rJx zkEcp5J*2E}H@)mS=EqagPGB(e?=z5P&BVhy5u-d+*D!*}gri8pFxMSf#cR>Ciqg#| zPz*;Rp4VJgo@L0tQEH^>3R+2b#c!j3LZg1IsEjA$c}eEw^_Q7^C!xr_>k$oL1>%00 zcw7`A1*|2P-9b2%OP$-1?KXC9AuP=ko8 zcq{Eifu4&_IP8V@GxbZ-w>bl7+k6D-cXi~G?S{nsP~2A*(x{%f4M~aC7v~^Gfh`Di zv_0RL`MXno-DB{(CeV?itgG`W>oO}Sm}uS))Hvxe4+oK3+dL0zExmJNvI`2lkzcKU zLAql3y=a@0<-OcbI?w1>GzjwF@hq2qBHjZ;_8ng)Z6(_i=@+uwt{QSs*X~Mq7E{~4 z#jf>eLSBSAXPM8=Uf0oiq?==D_Lnt|SpO;56>a0Q{e1#WJSkFP1#PACJi0Z+odvXu zLyT!Y;3CvVmnozIU@tq)c#@M{=wyP8ED^yX##}u_i zToFT^@B~$-cfnF`jFe$BX$nTubL3G&3iK3&zE>STsoqI=ax7vo8&=S{XUr@%qpe9N zQt>$Oc_c~2w&Z!Tp&ddGAxo_M9dXIwp@_sf6`1}lj~G8IkByQ1lcY_gleG5OTLxAT zUx+J6JrR1B@wm!B=sB@*HYMzij+AW5T({F`4Jg9%T)uI4Z9*KJUad|8NXc#G-|YT< zIq9PPGmw%w`yGByx>&ye=}EHre}j)pH;SyB+4Os8Pa*qHG}dne^5@kFUQ0MgN6KZM zApW)BzUz?HcRupN6}#`-NCz~EqUN+x@_%TG_1z8WZ?o-iC+U*sFxnbt^RL1OO-aEM zke(myg!zq*paKScY*Lc`uN@wQL8UL+$rL+8c-#M=<1BBZQP^ry3f{ zl1@Tfs@aHRWdm&);fXRfRw}3+cgWnAcL{wE>I=3#UQDA~<2`8f3UWJ*+u0E`&a902 zzPJO8hplH5HjH$#b<6hWNyJddZb28(7}e*`H0s|L(il>F-0| za3LBT`8u9YZ|Yb9K1+KNmu-(WwwbStD`t@C6tnR}KDw4nGmS3m*+ATL!ZTKRb}V zkw$mZUB!IjJgzsmdwv{A|L??iyeg7^Ibq*O-N2=hGQ7*BzbBIZLzn*ENcvT1VtP1X zT~m$T9d~(5q>QoaD=uHiv0k^Yn8%P#@y~>}w5f)s1vC(JdW7 zJBXFR>K@Zq?T9~T*((1&#JOa>ItTZtz;70tG6W0k@n793PD^xa;xfv>RAD;K5bXS4 zj2dI_jg8Iux%*;>jjO#WXDkg6@2mEE5s@`khr)TO7d$R|N2ebvrq8H%_}q37dzVeh zosjyhL&xr&LvP5uS)IsV5U=VI)R}fco+|di>n;AAxwlSl4;ufVhwlQvfOOL5I+dJ@ z`hfX{i%p!J7!$IXL$QvrNWC#-^+#C~*BDY>hTON9f;&c#EQ;uBh$*C3(YrtkG18t{ zP-7i>8Io995lFLFzGE51q}wn(+a^Trd?$_Dqrc!uq^KqCqkT_>)VsYc=pTdLzkH5SQ)vDZcL$bnkF= z{_3W*H5(a8wxIU0c1R7SHh@kOY{d72EvU>Uah-{*XLip9q!TiZ)3Z?DG7i?HD~B1g z4n?GE>qi!Z_Dq+40J7>^KiY^Eq}0GIDfkfLfo;ZfH*djP)nA6b+j{)CScV@jFTjuE zjqbh`C=6aplsOoxX#f0hWI1^deK1qmO08#}$<8skI0v zAqDG$NYc6yb#hxNkHPyDnuiqcYtVqMAm@x0?f0Qbidl?bWoF~I)m79Xx(*z3;$7-p&Cwuy0ceL2m z&=&q$8r|LuA)VLpXgvHimwy)Ca5cwWw^Hsgy!m*F(7kB#&7OYP3GZ`jPekdk&|?++ zq4ZHSfsNxm0Y}kqflEj5``!v_Fbmg}f&nB-XX~|@@9&XkymsW2yt z;FXk{@SUwnvuQ<4LcezIYg#3{1+~!t|Vt zj3HYG@c!zo4%xnB>2}E4^5+c^?Ti<5K#(m%uhbfSgX7R@klku*q%p2vD-0tiXj#Vf zB%&&mH9^0YX0!hq%9Aig2-8MBj#u7)hQ@e#ljtCFKjDc;QYm|TxQ3~pPt4)~q;|+Y zdov243TlVEtEbIOkL5ImN8_a@E8}uJ&ubs#7cEm|pKS&|B-~m5H!=Syk^CztFGy$J`J7!ZE9v=9C$1wJLEF?2&uc3FxVnvf z(YBzhN$V~&;go@xKdviX`oBcdSJ6Ranv(H#!ez8`s~?M`FGdEGH$~FN@f4<37(ptV z&@Q|*a zX{1c70{#(Mk=}zWrYX9(I{qX^Kf!1YTLWVKWh3S3L#Itg-U|Y1Dq^t%W1da(XvGOB zYXGE{WvVbyJJcasxu34!UFY;0YRFyi#lT0ArR&9LE18wDO$W0I1)W%ew%{K@#*pKC zSL7%xs!p$XgHwSSZeo+lN?I?#sbgh?{+d6g4F{sr?b*HZ7R2>P!9rvz&hNK>NO^8M zK1H+7_w~r{P#G9S#Ls*keuu>Sc_^@MK3K-Z^zNW}udy47@bhcR^%E5emhozrz7Q$8 zYq|8)peDV*Q)o66ZNZ;)JR0fj@^v)tAG@PyOxg5Fz3D!zacwu z4bwQ&hFl)cqH$%<@{6_?jN(P)I{Hr8Z!kcklD*w;G(e*h#v08>jk4_!D#HwlF-RjH zt{aN?d|%1Ce9oqWKa~+GV<>+W^#$u|#?ntkl}5f@=o{qw+Eij2bPf9w zUj-d^xhHqeXV|{>xsO0AO7^(k`~16+A23imyaH{h zv-fv?yGURsK4mrOZNz(atG`hv^Xbf7~gUCX= zk4rxs@fMe5?l~VFJ4?Y38o$~1-w8Y)Z!vsct`193sJ_1FYqnPn@iD&P?pc6muxGC^ zH0f;N1OM3oJG!i?rI-~>8 z$bk$ru;ypv33zNmv2BEBe+u5jQmS$}7XRfSB^QEK12BVds`rceT=ontCSY z9Mjwh#S9fOK4TuI5Z*0~x@&~+VpwV89bH2iR+{Z;tGF`qdyy-VGDPcL(4-Z5mK_J0 zK^kJ=_}V!{-3nW1eK3BUxWUOLwU{B|D)(=!uPu)Jo=41^t9d;cAwEA$`+3bWI(x4o zRrfQ@xqnPSUIrbbl~U9Qn=?p5%mQ1Mmyt>06Hn11X3Fwd6epWBVoLbbMKU(_&6C5C z#E;5NJ8`{=X4lV0(r|+L}O+QDbn-Uh&*cme1YaR%|?96M+`Fj zCb5j?5ss#Fv-|z}NctAM)HiL&`nP^QQp(lPY+pf+_f33$7;qM9;CssyrP$z%}446tWk3VfQz zG5t`qWwm>*K@ymahf`3fFiSrl?;0AH|7&Qzu>9}N)L{=-Crke$>ffaV@*O}Ta)=Xh zj=N`P!g2G)kT^MtCX5j0Bh^>c7YO^JI;T~p42~hpOId;@#RW89_H$BcOZQdk!vf+6;UYt9i3LrcqNBM(k%*!xhu|N2@B5= z_f!%~4@Ea>3uWk|ih^>cDm!D|4N|RTMLy13xwq*TX{Ob;+FJZTZ3~F04knSLRYX0p z-9`u&5Tc03)hS|R+6}0m#po6`aqUU#ZEH$=#;)nR?ZKUVta}U6Q(fK0R+p|Y<-q4n~Z zzz0hC4$b{`f-uLeEo6CIpFzHT?nE=?5)|>nq=19a>GleKg17-$Q));_|6vqo@F-NV zA0x+PDH7c<@ULjLuOr>q5)@=KRT6nP@HC`vn}v90zeAH6$P)AxSHG%z?#JmbUdoHm zsr;Lf6grF!)c$EY3$-2M45Xwt-R_+z5QPzh4?`YP22o$yfRxcUx^&}l4ZCNI1K-8- z?RG$i^G`#Q$-!v6e4g^Qi>Cn3Mcckji0Ab&{NngX6pVOx#0FT8*aUxd=?5Y1W>)X@ zLu4TZ>HJ=Vww?13!S*^lDSZ%mGdaZle^-W4#h)oQxFm+KjI}vs&3U`v<>e4E$ zj52l$R`y(_`%kurOZqPT>IXWn}s@IHFy!}}q?8;~Sp6W2xf72q(mN}3L13^CvTm;O0Y^GL)! zGf7|qwZU%_^Unv~h$MnR^bIaY-(VcI{X1#&pm00z|42W}_f!-{-3%`4fX^bgzA0FU zOy)bI`fWtg%!Tgn{ef4y`;7U1B?{SpTn6Y#p(aU^M6kXXkejG{Uo-`(A_5lMX)qVIY<@It(0zmEFauM+Dp7xlG$(080fs-Lfs)=pJK5qdU0 z()GPKcUu+UKWXNz)X}x6mJf z8bAZ+4#M1ET9QD@=B6WCj z;yYeUGv}`ceA1;qi*Wo()8jrQlD?So6w;q2JYL@8(!WSEPpjtgfoMv3PT>D<@4TZW zJF0X4>%L*~j7Bq(W`x3Mlmj4;Kmr*M5(Y#tQGf{s+hB4s7~?=PJc2Q{;bA}q9w5Sl zCt(|Gyad7^qCn9gBq1RtiO~d2ypwM1et&$mU8hf1ol|}L+@8L}d~5Z(GhJQhRIXin zf3^1%@OhWM5+CY5``Lr$`vSyE3-v>GQ;VU7)I|9*P9Y&F1((r2mKwmV7PaItw2O;1 z{A8F*m~JqK^vJ@`47{U`&f&elBEk(mfX?T2!sg#${C%y1jkA$nA&GF_pV>6k(3j5T5HdFOXh$WlVojUXTC)AOJ~3K~#ZBn_1LQ z`+_9z5Itv!d(VPM`q7cHO$U!BJYTFG=g{6CS!?EU+AZ~U#0jjUg)OwmE<|-OpImti zp&KYExI9osD?OIt^G`HtA4 zP&U!*sL~5>v$4f7wjdeoUTf$k3#1zymeBo%eQ)IZREuKlcZ=)j%y~oP2gc(#KzQMq zL>DJhV7iqonuNI^Gl4CHNvc!$sLA(5(o?x)GmU!*d+D4ajf*yp_&s?v@cNtEB6-)6 zw#lp^Y{&?;Z3ue^^N%Lc;<}G8XAry@zYH5`pA=2}MEe!t1^zxXR@M-9plLj=D)8@t z@0$4j*-UsoS=-!4c;erJ=JPFt>$uCM-$vNu?*!>Cl%FF~A-QDn7wG_nN#6b+#FA?JE21Nt_^=U9Li#5ssF@)z{RVmE;n+4Inj zc{Spr{2Oo;s>40V0`e1ACX0mf$sUw11tZ9+^&})U{1_2@uR_tE%g{sv_INZofA0Q$ z72@DcAuH<&)JJRGzi$IxLz-l6gYtaT=HqChKNnAaEW(7V({gkX`9{<)pFtL_F;~Vx zGzM=)UJJere1tR$wM~c-_pG_@9WO)@-yLYu&OtmtBV)b|waE@-c{_j>)4N<5-i~)F z*)4vJ?nM3u_3cf-cM#Wc61B}FT7+xv_g`~m7(pIJhLJz7%`WX0mw%^w?ijkKd^K8( zHX_Ua-L4&OLlW*rB#n+DD`Bd`#ZBlAaSe@w31pFcCu#k(7D~&g zIE=&S3YEr1sAc{>9a(d>AvZ6ZkvX%M0U)1fZfX zs`JTyJo31^+dY3ViWz9vT~0-e>{0idqYzImRV~pA%t3SJY&7;pkUFH7y26uz$0BRF zofxhreAEtMHEfAgOQtvF}31T0T?Cgj*gm_@) zDWie>{axEZ9Unm}bKzI0j?`S?%&M0C`@Rld&@En%7MMKm<3ld}GQ!-MwMf)I9?#9m z*5Rw9t@JfKnKsYkdRVuWOT;N?vCh}=W_oAYd=25T@V1JcKY-WIWZQZjve*ryqggZe zn^Dru@H34E;O~!S`{`b0@M3Wee}eZik!`ELPt3m@se>B1XIzUGocZYZnCDRKLPEhX zQniHU%j4WT-WN%Kd}0|dKtfBt3|}`MS2j9r_HQpeZ(fE5b>7p4~81)-c+86%A2<^UgExgDD8YY^U-x7Iu)Hp zc)mQuegA|=dg^?-ly-Vd4LGli$JI-EKlYLec&o&0<?WFkvxvK;Yc?EUv6OVUXNc{;`0(b0bcnm}6+ zpU;jdPe&HA5i}NliTbuGf9&0&j{H>JgcRH(sElu+dnqFo3sD4}wfJ_r0r?S2!4PWG z4QNi?gLqz-l(C$8n@5?OapmA`p+8_lr)J{f*JsA4AdG6Cd zZP+Q9dp>Gw^UT_5KM$fdsJUl^q-ArqSi=X$O@+;Q$c%$pCUL3zdjXQPZlE;+^Dxpk ztwxodk7BMFXJiO*O6-O`$Ul)?^%y|X(?$3l;+uGPIsJfP)D8y_m+dmd1^a1HrVMP+ zxg2j6zX>tid*#n-5OH$OM+53Qw3}9S%&Mau^J4e>VZ^bz7e659p_~1yP&@n@F`uV0 z>5s;{)jkdF?5SlOKpdlU+%xC9GMJkd8|)83c~{kZ8${#%fv&7~ZFnZ$RndGr z-KA^%5$*noMv*f(@B<^yFZvnY)yEaI^Q?B_Z=t`McK<*lz%#0-Kn18F&R3pyvV(AF zwh*35JMUy1IWO!LuBP3O)16euFM1AP-)w*7(oaDaschOL&iNY}D{BM!?HW%RYRH}U z80}+emHW-}Y43+^$e&jV=Amm}dH&Hy67vtD>umXc_zvk~>2a>i+5GpD?z(3cI-X_o z??rscD%1{jbd1Z->CN~#|75g?Wz+Xjk$<~EBoX8XQWM?d195CZ=}q8`NbKJoNw<4N z`N3?TFI7>A3b2xJ(Ax%S3(o-Z9vQ0Rzsx{+Ll~reLfhxr6}{ui$n)<-lELdE>86l< z7U5v44O*j)$1o2`aG`g+8%?N?Bf=)>gzCSJ+ zZ4q;=(>2NlP&45fWq0UIH0~Fl?J;a6-5FmD{h&aO)uAXxUMGm@SW^4fcIoM2F2#$m z9f?9PX|xQn-xMvHdBhgD)HtKDxmo0|EQ^@st|%C7CrD|>s>WO!jK@``6m1Y5m`yYg zi!23p;WDrQL98=F@#}gCJIYmo7~^^;YO6Ai&aVkioN?kDvMeTv zbN=l6*n~+{{>LVE%)NIW6NEWXO~SD~Lx`0%m6{W?aN04wTNvLfh9;sugpj)Umf}LB z_{-}gp6}8JknUouOPfF<>lH|^QA3w=ccV@>MgMj9yIbes14-_1&;KR5BiJvv98IiU zXh9x9-YHU#xsOBxbD#U{L3Qrsolo=El%Az#PUc*lCX zfj1=Puc1rOBdBiM(cJk9(#O)H5btT1%fA=3`C}9FFF^e;g2wVrq-RbID3XG|!}C7( zxp({!A3*0~)DL@6`)xyh%Z};x#o2+f67R0Hi5hGZe)lm`|4Ovl-jA2Iz?;dJx%6Q~ zZp$7m=DTMcKn=T#&dj^Lz+AN0F2G9xoru;n8Gq7v8+J>b%Y+;?-)#O|bwb5T1lLgUG(6^5nAKf7H--aVS>m~CRm zqqe@KgEFK(-=s{NxY@BbgzB)smE&GokJH0w(oMPNOd-j~CVdU{!wS@nJ5gU`H}d20 zu_1S&zV4)s`DjAp^!D0Q9ktC7Xx#2Yb<7?SvkTWaet|q>@DwDfW{(ed(ETN9!xAKh z?#7?L&AoK073+2QUA5_+^HZwhK%Ials4W9DA;Nfo%^f6 zvm(#mLz)SCn0CUSEe>z2sEqH8lyQVK{mX^46NSyVvIxH`hTic%LzNZY#^UwDTwj7 zu1s!)?yw9k+MzOBhT0*<-TbqeE?h6&+Qj%?W#N`m5egy-61P(>=Po6zz_vS!RiImc zUuFmiJ$DtFI5Fk#FkVj?LMp!~){iS9Wy@n(Pz4qdz8m#L(z!Dq zrCqnNnd%G(XV9+en?in(Qv5g_O<4EwEBq$(X4>^&cOowdb>RK9*YO?{T`2{RLyGl$ z89qwdMpz?!VgDMcvvOaG=Nx8ropwR_VS)5f;Llz9X-MCdO`ib%#-$&Hj4b&&+>D>l zpQXK>ZzTPw_%M7>5&P^V{gQRJ7(nqvLjgg~L4ExR+I4wbNY~>{8@=`^e*|jyIzCiU z>fNgpn4679pj~eRA||Gaw1dcMb}t%$=2WlBGR{FAdomh`7KpPGcPYPv^lm@ElPpb| zGd;@V(9XC9c{(s@rj8uMoq;CO5L);;k#>gBhI6XR_f0%=J_Uowx@kPFNwk<%DRCWv z+W83g{F`Z&Vva#XRil*LNGmO62({w_@a?!YmwpC5FvNP~HYVH7^U;QJ4BDi>M`u#^ znP>sK15aY@rB~tsMCsUpFL!pV)e+s}6x2rB5q)UJDH~NUTy>=29L75~>qMV1j20d< zF^>|S3?`Cy>XfWsV9pwwq~D)2452nM*SS+n&tc-Qd+#vq_Xh{?q`_DpEXMcqe%c4C zamn@t((>gPqJ2WnbNL5Q8-@I~)iR&y5Nrq0c%7+>$3|qfDA49Fte2>vIu6oG7!Uo< zxL8>%!INl>WI7XVWouDS+oz7q?f0Nv!LBL%2kFYl)kr+w=kjksE|{O?(vLxWr8UT( z(|t%XdQK%Z=na-47dQ9e9n0N9nmZTJMEEk2)a;7IcK6IwedVK3KW#+qw+)3wH|6}P zNOIVL`d~eh>@ITY4*|Y`=l6`bdOX#o9|QceE7u;E_DkgE*YE~chPAF7TY!IXX#AULXglIvEp_RybaN0r#jIgf`7CP^K2DjQw-<=D;W22wJTQ_zh(A`wj%`OrzV8G@ zW3g0))eAaA%7lXWokeTBm}PI6VnX0-KoLzL1txWM16x?8>+sRWQn#B(k%GSLm=&9h zdBo~i)qEHvz8O_@eXIhRvg{AHMnj0M)m_W3!|fAs>7LTxmKpHEZ3$5B5mLke-Lzy0POw22*! z^kI!m`V?AtW7q3C#dGm(G@1GQRZ%9WmJTr=d4R|&AFo4!I8yPuXc3z0o^uCMnA+}e zItmuL0V(a5BCFhvF3R0&oP#F+4esANkU~7w703!?!8KPcqsZcRXHljMYQXc*1iBq@ z-hPZYMxge8E;@eiM~lf#?j0tPoPsPrOVC1mJMzq7=|=#MchA^^CuG_&@KoSMuIv`2 z`}273paV$BzZmuXeA>s-YFCG2TshYe_p=_tg=joYxjJq{5t6Esx(1Pz@v2REP{@#W}9a}Q!#54eB7oixVt za>QeK5)wDppo|0^<$Tu$#wdOZ)%bKD zLVTttqT}CjNSgQ%67f@{fkz-W+QWEnwm(8`my-Wj-~&imKZM%hHsCMOj=coWc#`sp`2P{P&T0_@=OwCbu&-x72xs|yPcqQK9;{|9;J{66{2cr6zu4*o7>vy1W zcQo)OyyV$LQsdvFBc6qddl+7gFoj(E+~Ml@BIJY48~~n#=JWq`&wCQ`|F#wNMIEgN zAD|k^bR|0WFGl?~;L7q2w6+vt01?$fe2V{czcDY5`SdB$$ztCj%+L9}OaD})48L&c zZ;Ir<9~~u5El6L4240NAWcr=F-+j}uyvC(}Es}0`+`2_9=HMjhX7muBZX8b_EyEWB z`I~6L261mf?feTgS)NDO7gegu;iG8}GHRdaqrU!CB>hG18COQi`1ZsyJf84)AE6q` z!~j}oLv?tS`^~k1v<6-e_wh*n>sg*gLU`^D@5+DSzvvo1o7oeDpKL`tgx`X6-sMlHaHVG0zFh@psP3_$RUF8*k_V zk@S-S-%ke*By7zYAl+A0$lN|edKBjvx5oOn?xDSdtpSc?ogLq}~5p6-l?T zXg>d^TZXKZl7(Hj>J~%9IcN6X(*kKV{P>7*(RO9hLt|;adx!naV+0QMGgg1iFUEcUsb@5POM@v#CGCt%NX-qS~ZFmorM%jJtk4jRMhlAdPg9Q(Iy`3 z{>J*k>K?mVw18soriPjB>n2^0rt4@`{R-{7eG|VTjuPGhwi9>Ym&c8?56TAq4%<&@ zCr38$I<8nGn!8ciYqT$JO|-L&A%$jWx7?fg{?0%dr|?vRkhhBl)tQIyAWZG(WYJkm zdl^TNf;|P-(7w}JKQ!@1kvwj7zgthcRFEA@W!Qw=>2qwj3ORY z3a-cd!pc5>1Jy*ZnM7sHOYoEUquzIEpOfRR450Q5%@=#-2HNLC1C0gqED|E@Zg%-L zqVbq7<9@2yU_t#9non!XGS)JGe;-+-7T^p1QT(Ji4{1@e^_l!qm(raj;`6TJyJL|}z zW}ZaHk-x6*qk(-ox^TTDlYSR6EKDMO=jC|mWREM~t%>gk-OYR%UXtI0JW7P>@ZKN9VSAXBGj10hJnoYhWxHH zNbByGM^E4oHAf@gfc z1Sv^>gQSd4;;-fWG2$s1XXQ?`!~6#I#|vHljfmp05cmk9i{QR{KAzt*g`^1!t#u0G z#+=~FIEg~BTga|C$RE}cv?H%}>F=c4fUGl#^HCd~it4lpwb#c{KP?3Q6xD4dYU`h) z*pF2l>uX4&d@SC|x*ySpj5ByL;+-u;rhPTT(crQ&usCq zQACF@Jxr_}e?>KVqS$fMO#DUEou731?q0=Jyo-1}s!%aCi5oh0P@>oE)#^PPFi!cP zh)HA(w6IK9gf5kPCteLvlxPP zG$^;DiCuOrB8HbDi`{DX+y&@TswoSfhPXYygZNF`5Vy$E-;3^X**&xo08N4sWMwg~(&Le3(wydPN4NQnBlQGinOuo<6eGZw@K(oH zArbvdyae)d#D|*=m_nA@chkxazXpF{{|%@;v;3gDkf(zxupT)hd@-IYwj1%h%y95~ z$lHlYNM>D5CE~srEsp1-aW;sIIG^ph^l8|OJh40njh7m-RDYT7kGqBsqxQKFtvgd_ zbANwX#_X}h7hMVF*e1r{c%fZ;*7K za{8$uE9z75?$AfjJWpl+pNJ$b6L9KCD5y%}>Ix6V`*J_jJ`A7W5^6&N0T$3-atoC(4rUeW%WjvekozD*cX{SI@1@??lWu(e_Vc2 zAiaT({k_6p(9Y?b#0PXO0f8ER<-?hTV>@0$T2R_yv?=HF?;uX8=_x+K!Czoz@^b@e zmYAi)7x2GyzxhQZ{cQ=)?-j-fm+?(Va)>$U`zM$Gnn?P0(9U~hB)v)8Gey7QU4+ZO zu_WDeO})UnNEyDGnEzFg{Ci1@_Fi7EYi z6;^#FF_`E6#JEza%KdJm2^~ovM~E+qKz*oSA!)nh z7Ro(5#0FDUo*}wLH{Ll-cT;u`ZnoTKoDQrX`=O4pO)`~_7t5c*R|HW$V(m~y)ShwF z>78S=euq&h@@V3@H!)vK{jzZFC2k}z_I`}ZWc;r?BI!2RW0A@Cx#!Pj*y0_lOE3F5 z#&Jp&G&V-Q|2b(!l-CW4fT1#mY&bME0-So zepeu`MKw+-yZLo0!zE|}Z*`w7h?`@Bk; z6cHM~kBM*N~ng`@S(+MeBSJ z0`r63PsoMU=G2yaI<^wTqKp5E8x{Ai@a4FkN8j<&^4ZryW|k+$RqFy ze1z|Nr$?LYPuv@%;XnFs0)2t_%-F3q&@pLAs0YA;R(Y zHX;c-1@FY`^z5@01zSzQ5;Qrp`KJ)^GNqm8Ar(TNhxKdH<1+pM?Qst$fmbKy?-s+z zL1n%UyYQFTzY$2^jy6_+zova|ZXw;ZPa$GX+3a&!JZoQI8RdGqLuKJQkMN=~N_Bd+ zZwH>=#5+Tb1tOh7$H&)2(o-dsQzH3O`9pOi6@>DCAh8U8PFR1soixStQIY&jMBq)q z&m#GI#Tk4c?Tdd_n5h#EKHLQU%snH<3H;k`3pZPs&W9nGUMi0|;b65@;uv%+jd7f^ zzWTdC6~3N|0?MYq?!V??QcoF7$_(MG#4^Of^;HpNCC^mOTAnii`qRv+QL0Qk{{sfiDihzF6`9?wTrmWVyb~MD{HI{m0VOW(hp4{ z>rp@Bw@JqZ;?ZOko}v-}p{VcYm!4?NA zgZW9zqLVV_^Vdk*;j_rsp;Mo77IV@tgf@xPXN3Bx(=z1Sx!183jmu_wy?j60Z}Pmx zP#jW2C3PrUVCs}#AbuWl2UF#(`J<3E^NC1Y{cwfPF2W#^DE1=`(kaN~o4qD;ic4GX z%C;ZxRicLc7g@Ob#{kzNm&>Ub#_K`myE3i8i|r{2Vsiw!*gfxVTFI41A#TkSlBBMo zRje<2e%T^2jHKK-_}~^d;|KgO+T>0~oSsD}%CsFPyVb3l&hH#VgBV7e;V&}3nU8#3 z-H)W8A>fy}XDoAn=exh_@RPEJ^j+t;^55ptCo}0Q@gd_DBbrDj?xT-H{n$ipIgA2+ z7#6xR9`EY02hk0zZ|2deiCq626W8S&8k54{d` z>bU#O0YuDup-X=To`G#F=MhB4Ou>9~-Nv3h>ONPJZV~&4D`PhQkMUN)r@8d8Oc~8Z za20p}^5c}P!x%bxfp*}px$h_3-*I#ltV;3!dQ?aA|2~e!h=s$t2rVLGnKJIj`y88t zg5>Vcq#wY$=w9UNupfVGU=*E97NEu8YL`BmdB%;zL#O5O6g0^XWIp@R7zK^Bo$mYb zOda0i($7U3RyO}W|A`jJVRRL2H1~`(Xk)A)TEnhf`Zo7$kc;iz zx%74D>Rbv|phYTQhR;Ix3)crr@^}0BUdj8bTDUAKbtu32#$GMw<6W(nnk!-VjNjLiZsbL%TCY`#cv(a{D6b ze}?)Y6co3K0w<@yVlm`DJ7)urt5+A87gKKDEjvQR7N=th(y}-u^1C|edVx@WJJu9& zYpM!)UKY~INR4^e{nKvIByK&lqi9iBEYKzqYR87l8;jf6L{f~ogAU>B$oF}~jAC|# zjy?Z+_cvz6EgMJ1(JFF(Qzz|yYA9+Jq^p%;KE)9jIuFBv4XyV+PR2Al&ZUnZ2(2VWP?D>t^uyFOtRqg@eJ4o50Q6?4IwW>0hXdObTJChhpDI6P2 zCwBS#RK$YXLNyCojd@R1vIVupLn3LZmep9q@OiUg;VRoMFjpsh! zap~6}u1`Mw2I5DHPS8XFLH6XHe*hm_@&>e!XVdp1#Wlzna&0bsFYv$J-#d|&)Lh+I zXuO{w9n%Qv^L#)26pfJ-yb`z%eTXX6C*h^MCbB+dd1R-eoyK<5F)Q45x!z=5D<+MsA`)F;0 zI%-EN<5pVrfJPNK5ltp@@srg-9Y?D)eh-};pOzs>dpTMl*3ueXdMT}>+zDDK8-uP6 zhCOI8G%P}wskgiGE=HS9ma=i2`<*Gq*V1}~I~MOUyn*N~*`xT8v`WDF{AH-4@oLiD z|J0%1t%~2J7`pj~M)^Z6#}QD2TlN1AN@?~`r~ zOTkN#^kRWZC-Ho}8uIyNI!F6_iT-kt-3@Apj<6Nq22<#mm3kfKDdwn0wHcq1Caq!@UMaVO|)=Sfmoo@ z2}FWjL6|?(K-bR>1uQ1+%j&g>&xrB3%oFZgBk6Wi;c0}qW({WEMN-$84a)g`LQDtK zPk~TF$Eq6XjO|$XtCdu9k^6~+kJ#pUVG&_#Rf@H6wxGzWmMZPU`oeTrF$vp_-o}1U zeQsYNW#MYhcqwKNRz<$A!WuTyNVQ59ag?fnxpn?+#w79f?DjZpiuD+eYdcbo-`wSU z4l2qPu26)S-)7t!`Mz6@Rh5V>3aLA3tiNN7_fD~}q%1|AKzDls$hX7&=1{;m3J8*?M(oFP&B|~W?Kc3X@I0{}((Z|(iHsn75ufhXK>80*TlY1p z@W*v1@wm!RLsW>BneTpy4{Xp6n1dX=4dL%4UWfQIDX0UFMEso^QkJhp-V&A&%BL zczj(REY7DchIrho-<6tg5-$sM9 zj@5beUiqFcV}8Em)04;Q;e{(54?;(#ZRl#p8YGFVs_6N3;2rL{8{9kYMlNYm@hC*w zSc@!7o6!}P)CKk^bR=7gcRIJ7bQj)3$W*`HJ!6ggo9fP`hQg4o$$U1Wqs>eQ>ZlUt zwm4gl50TyvXQ5-CW@vK=3kcbh9$uW%CZEn3^) z8+Z%%acF+8N8^1xnomgqK@Klm>G)RU`ERM{`Ol!cczzI$li46WugR z@~0}@mq+q9NsFu44_Js6i%>tDSCB7@p9b5=Kaq6Pk^N01{YUifCc+mYWq23b zq^CXBQk3%tJIYT#ad%FQd|%Zu=3K&}{E?&|8AHJsItgDEvyd(&?U=DR@_p(NC6#a1 z&zMIzut$w{-CYbZ2K||tcZ9IFB>ilre+{e?m=CxR=Hu@Lhfumnrz~7$&cae9f$8F4 zFPvGF`7r7ho$8|U=qDoVbkWOT5Hp3DJkr`2j49B!M7}o+(mUe$s)Dp8o%!EyK@|kl znYKW55@=$kG1I|u?=DD7kyuV=_TPq>_F(QK6iLUaolG9Sy)EMu7DcG88Zn6q zI#VCCp^8ENRpPE}yTusr@fmvdbg-TFPM@N>&}X+1c02rQ(mMGU_*i^dOd!fe3bN67 z@?}dI@V5|_l2f@sBgnXrN8Wub zVEr~}*LDVg7vsZj?MDmA7fE;Td?^aHa4b?(??B4rn-cRM3A`HVLgu5v{9njQR@K#` znZ{ATi)hs~-AH&r3SlAeGFln%>yUH3ab(1JF`6?q_sl8eXmF$Z?hF*~)UXC0ov0UB zj3QuV^_KS`rTqjNn=e7*#8gu25z)I$MOA2#8wVa%K?P0y{ zW8{2f>OCE=OIU|u-F4yxwV$yBg;9GXTC`3?yW|IvR5a7D*pSadl9{<4-i&T=>_ZmR zx1pWfcKcfpM=m9rQ4L9rZ+HLRfuzk(BT7t4{)Zr+TV}x|hNrT=v#{i7AVzaQ`k z!gai!-tdE#67O$27JVs_{+|59B6u?XQhD}sKWWsLrG)*WO`vNwDfl#DPM>j{{yC7= zL{a6dzzJwG$UlD)`RJREk6xAMs=XF1d?DUr19+!<$J-)xDD_ESCgKke_s{g(h%zo! zj60Lcp_&bdc^!B--P1WzFhpFRX%6sW{a_ZkGMr18=3|Rb8SJV}==+s{??ZST#cGJy zCXwnvwG3wx=3xyW{pmoY4B6P7509i<+{zOI=^zQMu%F5nt|9uL5ZKGJee7KpbRpKB zM;4?VD(Hv$8TmD~!5l@}c!@0vRgAT6H?i2FZ0J=#Oi_O14OvzVb>guGO7C@+Rnoiz z^fS(;yfdppOxiH_*0J_9SH*_{W}0x^4VEHF;H*e`h|bap%<^4^q6Kb!;=5vtf{pdq z;#!rUQ54DA%29S~erQ2jop@QtO5UBcIzNZr908__r_j4yCg#58hwg98>*U>$e6ta; zP-#D*H>~&l1!cGw4fvRAm{jkpHxr&X6QoI9HNwQ~20qes8A3kZn#he3#DffPN_>79 zZYOR~+Ko2jkfEcAkA-?$B>xD~mHjZ1UK&6-C9Yxv5y}3`{dNjj%J$*IM}Zd|o9_Gj zUEykYv$YNEVfVWlejqf_0=bY@#V9VnEuJ;^+?D7`!D}gZcUu*YYZxhbAB~8f`_M%C z5NhmU6mat~s9p9U-p)ITFKV+5L&&PQ8ZUwDMLe(6D9znsHL~O$kH$eA_)lb^8bjmx z^|T(*51@WX(NWc0{*%ynJkCAm1BefolK*1hr7koP>pa!9@)@YFvxb82APKw^#OCJ!x*>5|=DS^}ANSBcmOyp= zBx0}Ek*C}XUD|T@`2>o?nSxW@Gt7fa4M~?*(8_#|E%smyZhcyuSK950k4>|;+t(;A`4yV--1NTtIw@7onlf4L@M^z!(VziA-sEoH4D9_mq!;X#^`5G4ERxEa6uY%a*<>5U-2>U>;+WF_v&hAc`lI-Ot3@bMCCoIP z#G*09j%TLmzoX0dG`q|{Mcif8e!MXvguQiiCax;51J>(|UA=VGeGU=f@ z?nV;f1mQZST25nzkxu4I$oCux`CHy=ew?nRJ>bF=zOw!HnL>-y2qGAM3-6(!Q=E^i zKKHqL??;Xdt8$4v4{=!`UxGB;T7oEYl_$Vkfqb4txFJzbSpZ(Z9>+rRF}vn zBQFNObkA51d*b!6^U z$Oy3$f1!IFUWYj!d1m+#YTpBBZamVZ40@?kEP)Px#1am@3R0s$N2z&@+hyVZq&`Cr=R7i=n)*);ZK@`UE4OwyGLY#NWg(0p$Sc>Ab|u!(k94~APK2NoIsvHAP^NRng&sUsHmtoapH&AZ5Z}u zy0>lbso8zsy#MZ-nfE5k=4i-q7ekD(Jugs!S2)tJs|F45rT&|kjjjUH$206FAfats z2DFTiI86lK$5!LrQddZhM;Ij_<2t2-TE8CnesuvY;ywN(Ku6d_(U`XvXx_~Nx`S_+ zBtS!~A&<=M`9Iw&Dadua#6bdbj1OAY1NVbDzhi=1_$^VOd{{dss$F%v7SGMoH0;baBf7ALuC>MO0^5n`Rs#R288_L5V72ybpxK)%tk#D`e7!5I z*Acc9=qBiQ1-@>;N{ORV>o)@J_n78d3-hq?d?U-UQq}*a>SvZ^_k!`)me_Gq73Wx8 zJ-~xNS2X;s$Lu_4j_2a-X{5SZJPqGn7}fwU;Ei~JKMBTD#o)5wLRHjLeX`qCq62tY o)u2Nw=K^bhS5+-;qUEsv1^Amf&W_AetN;K207*qoM6N<$f{rHpH2?qr literal 0 HcmV?d00001 diff --git a/public/locales/en-US.json b/public/locales/en-US.json deleted file mode 100644 index 3c29ecf..0000000 --- a/public/locales/en-US.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "lan": "Chinese" -} \ No newline at end of file diff --git a/public/locales/en/common.json b/public/locales/en/common.json deleted file mode 100644 index e69de29..0000000 diff --git a/public/locales/zh-CN.json b/public/locales/zh-CN.json deleted file mode 100644 index 92a0d3a..0000000 --- a/public/locales/zh-CN.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "lan": "简体中文" -} \ No newline at end of file diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/[lang]/home/components/form.tsx b/src/app/[lang]/home/components/form.tsx new file mode 100644 index 0000000..3fb7eab --- /dev/null +++ b/src/app/[lang]/home/components/form.tsx @@ -0,0 +1,40 @@ +import Image from "next/image"; + + +export default function Form() { + return ( +
+ + +
+
提交
+ + +
+
+ ) +} \ No newline at end of file diff --git a/src/app/[lang]/home/page.tsx b/src/app/[lang]/home/page.tsx new file mode 100644 index 0000000..519154b --- /dev/null +++ b/src/app/[lang]/home/page.tsx @@ -0,0 +1,199 @@ +import Image from "next/image"; +import { getDictionary } from '@/dictionaries'; +import Form from "./components/form"; +import Header from "@/app/components/header"; +import Footer from "@/app/components/footer"; + +type CaseType = { + img: string +} +export type PropsType = { + params: { + lang: string; + }; +} +export default async function Home (props: PropsType) { + const lang = props.params.lang; + const dict = await getDictionary(lang); + const caseList: CaseType[] = [ + { img: '/home/case_1.png' }, + { img: '/home/case_2.png' }, + { img: '/home/case_3.png' }, + { img: '/home/case_3.png' }, + { img: '/home/case_1.png' }, + { img: '/home/case_2.png' }, + { img: '/home/case_3.png' }, + { img: '/home/case_3.png' }, + { img: '/home/case_1.png' }, + { img: '/home/case_2.png' }, + { img: '/home/case_3.png' }, + { img: '/home/case_3.png' }, + { img: '/home/case_1.png' }, + { img: '/home/case_2.png' }, + { img: '/home/case_3.png' }, + ] + return <> +
+
+
+
+
+
+ {dict.FocusingOnPlayableAds} +
+
+ {dict.goOverseas} +
+
+
+
+
+ +
+ { dict.customized } +
+
+
+ +
+ { dict.ABTesting} +
+
+ { dict.iterateGameplay } +
+
+
+ +
+ { dict.multiLanguage } +
+
+ { dict.breakingGeographical } +
+
+
+ +
+ { dict.allChannel } +
+
+ { dict.expandInfluence } +
+
+
+ +
+ { dict.lightweightDeployment } +
+
+ { dict.simplifyProcess } +
+
+ +
+
+
{ dict.caseGallery }
+
{ dict.clickNow }
+
+
+
+
+ { + caseList.map((item: CaseType, index: number) => { + return
+ +
+ }) + } +
+
{ dict.seeMore }
+
{ dict.contactUs! }
+
+
+
+
+
+
{ dict.contactUs }
+
+
+
+
+
+ 商务合作/求职:info@soyootech.com +
+
+
+
+
+
+ +} \ No newline at end of file diff --git a/src/app/components/footer.tsx b/src/app/components/footer.tsx new file mode 100644 index 0000000..f1fdf2b --- /dev/null +++ b/src/app/components/footer.tsx @@ -0,0 +1,39 @@ +import Image from "next/image" +export default function Footer() { + return ( +
+
+
+ +
添加微信,享受专属服务
+
+
+
邮件联系
+
info@soyootech.com
+
+
+
帮助与支持
+
产品中心
+
产品中心
+
+
+
法律与协议
+
隐私条款
+
用户协议
+
+
+
+ Copyright © 2020-2024 All Rights Reserved. +
+
+ 京ICP备20028159号 版权所有 +
+
+ ) +} \ No newline at end of file diff --git a/src/app/components/header.tsx b/src/app/components/header.tsx index 5ec6d86..ef7c5a2 100644 --- a/src/app/components/header.tsx +++ b/src/app/components/header.tsx @@ -1,24 +1,28 @@ +'use client' import Image from "next/image"; -import { useTranslation } from 'next-i18next'; +import Link from "next/link"; +import { useState } from "react"; type NavType = { name: string; href: string; } -function SplitButton() { - // const { t } = useTranslation(); - const lagn = '简体中文' +function SplitButton(props: {dict: Record, lang: string}) { + const { dict, lang } = props + const [show, setShow] = useState(false) return <> +
+ border-[1px] border-[#eeeeee] rounded-[3px] px-[10px] mt-[18px] cursor-pointer" + onClick={() => setShow(!show)}> logo -
{ lagn }
+
{ dict?.lang }
logo
+ { + show && ( + +
+
{dict?.lang1}
+
+ + ) + } +
} -export default function Header() { +export default function Header(props: {dict: Record, lang: string}) { + const { dict, lang } = props + const [activeTab, setActiveTab] = useState(dict.home) const navList: NavType[] = [ { - name: "首页", - href: "/" + name: dict.home, + href: "#home" }, { - name: "服务内容", - href: "/service" + name: dict.services, + href: "#service" }, { - name: "案例中心", - href: "/case" + name: dict.caseGallery, + href: "#case" }, { - name: "联系我们", - href: "/contact " + name: dict.contactUs, + href: "#contact " }, ] - const pathname = '首页' return (<>
{ navList.map((item: NavType) => ( -
-
{ item.name }
- { - pathname === item.name ? - : -
- } -
+ +
setActiveTab(item.name)}> +
{ item.name }
+ { + activeTab === item.name ? + : +
+ } +
+ )) }
- +
diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx deleted file mode 100644 index 83481df..0000000 --- a/src/app/home/page.tsx +++ /dev/null @@ -1,177 +0,0 @@ -import Image from "next/image"; - -type CaseType = { - img: string -} -export default function Home () { - const caseList: CaseType[] = [ - { img: '/home/case_1.png' }, - { img: '/home/case_2.png' }, - { img: '/home/case_3.png' }, - { img: '/home/case_3.png' }, - { img: '/home/case_1.png' }, - { img: '/home/case_2.png' }, - { img: '/home/case_3.png' }, - { img: '/home/case_3.png' }, - { img: '/home/case_1.png' }, - { img: '/home/case_2.png' }, - { img: '/home/case_3.png' }, - { img: '/home/case_3.png' }, - { img: '/home/case_1.png' }, - { img: '/home/case_2.png' }, - { img: '/home/case_3.png' }, - ] - return <> -
-
-
-
- 聚焦试玩广告 -
-
- 全面助力游戏出海 -
-
-
-
- -
- 100%内容定制,根据项目需求量身打造试玩广告方案 - 确保完全符合产品形象与市场定位 -
-
-
- -
- 支持 A/B 测试,通过优化素材内容 -
-
- 迭代游戏玩法,全面提升提升转化率与用户体验 -
-
-
- -
- 多语言支持,覆盖全球多种语言版本 -
-
- 打破地域限制,实现国际化布局 -
-
-
- -
- 全渠道适配,接入各大主流分发渠道 -
-
- 让您的产品触达更多潜在用户,扩大品牌影响力 -
-
-
- -
- 轻量化部署,提供便捷的产品效果预览方案 -
-
- 简化用户决策流程,方便追踪各阶段进度 -
-
-
-
案例中心
-
点击图标 立即体验
-
-
- { - caseList.map((item: CaseType) => { - return
- -
- }) - } -
-
想看更多?
-
联系我们!
-
- - -
-
-
联系我们
-
-
-
- -
-
-
- -} \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 4db939b..976ebd8 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,10 +1,7 @@ import type { Metadata } from "next"; import localFont from "next/font/local"; import "./globals.css"; -import { appWithTranslation } from 'next-i18next' -import Header from "./components/header"; import { ReactElement, ReactNode } from "react"; -import { AppProps } from "next/app"; const geistSans = localFont({ src: "./fonts/GeistVF.woff", @@ -22,20 +19,15 @@ export const metadata: Metadata = { description: "Generated by create next app", }; -interface LayoutProps extends AppProps { - children: ReactNode; -} -function RootLayout({ children, ...appProps }: LayoutProps): ReactElement { +function RootLayout({ children }:{ children: ReactNode } ): ReactElement { return ( -
{children} ); } export default RootLayout -// export default appWithTranslation(RootLayout) diff --git a/src/dictionaries/en.json b/src/dictionaries/en.json new file mode 100644 index 0000000..2f3a22c --- /dev/null +++ b/src/dictionaries/en.json @@ -0,0 +1,23 @@ +{ + "lang": "English", + "lang1": "简体中文", + "home": "Home", + "services": "Services", + "caseGallery": "Case gallery", + "contactUs": "Contact Us", + "FocusingOnPlayableAds": "Focusing on playable ads", + "goOverseas": "comprehensively assisting the game to go overseas", + "customized": "100% customized , tailored to the needs of the project to create a playable ad Ensure full compliance with product image and market positioning", + "ABTesting": "Support A/B testing, by optimizing the material content", + "iterateGameplay": "Iterate gameplay to improve conversion rate and user experience", + "multiLanguage": "Multi-language support, covering the global multi-language version", + "breakingGeographical": "Breaking geographical restrictions and realizing internationalized layout", + "allChannel": "All-channel adaptation, access to major mainstream distribution channels", + "expandInfluence": "Let your products reach more potential users and expand your brand influence", + "lightweightDeployment": "Lightweight deployment, providing convenient product effect preview solutions", + "simplifyProcess": "Simplify the user decision-making process, easy to track the progress of each stage", + "clickNow": "Click on the icon to experience it now", + "seeMore": "Want to see more?", + "contactUs!": "Contact us!" + +} \ No newline at end of file diff --git a/src/dictionaries/index.ts b/src/dictionaries/index.ts new file mode 100644 index 0000000..5036757 --- /dev/null +++ b/src/dictionaries/index.ts @@ -0,0 +1,6 @@ +const dictionaries = { + en: () => import('./en.json').then((module) => module.default), + zh: () => import('./zh.json').then((module) => module.default), + } as Record Promise>>; + + export const getDictionary = async (locale: string) => dictionaries[locale](); \ No newline at end of file diff --git a/src/dictionaries/zh.json b/src/dictionaries/zh.json new file mode 100644 index 0000000..8741dfe --- /dev/null +++ b/src/dictionaries/zh.json @@ -0,0 +1,22 @@ +{ + "lang": "简体中文", + "lang1": "English", + "home": "首页", + "services": "服务内容", + "caseGallery": "案例中心", + "contactUs": "联系我们", + "FocusingOnPlayableAds": "聚焦试玩广告", + "goOverseas": "全面助力游戏出海", + "customized": "100%内容定制,根据项目需求量身打造试玩广告方案 确保完全符合产品形象与市场定位", + "ABTesting": "支持 A/B 测试,通过优化素材内容", + "iterateGameplay": "迭代游戏玩法,全面提升提升转化率与用户体验", + "multiLanguage": "多语言支持,覆盖全球多种语言版本", + "breakingGeographical": "打破地域限制,实现国际化布局", + "allChannel": "全渠道适配,接入各大主流分发渠道", + "expandInfluence": "让您的产品触达更多潜在用户,扩大品牌影响力", + "lightweightDeployment": "轻量化部署,提供便捷的产品效果预览方案", + "simplifyProcess": "简化用户决策流程,方便追踪各阶段进度", + "clickNow": "点击图标 立即体验", + "seeMore": "想看更多?", + "contactUs!": "联系我们!" +} \ No newline at end of file