From 3466862d9dc9c8bb3131712134d38757b918d1c0 Mon Sep 17 00:00:00 2001 From: Sukka Date: Fri, 19 Aug 2022 01:57:12 +0800 Subject: [PATCH] fix(#39706): add avif support for node serve static (#39733) The PR fixes #39706 by adding `avif` mime type directly to `send`. The PR also removes the previous avif workaround for image optimizer. Note: The PR is still a workaround for now. I will submit a PR to `pillarjs/send` to help them update `mime` to fix the issue once and for all. But now `send.mime.define` just works. ## Bug - [x] Related issues linked using `fixes #number` - [x] Integration tests added - [ ] Errors have helpful link attached, see `contributing.md` --- packages/next/server/serve-static.ts | 14 ++++++-------- .../file-serving/public/vercel-icon-dark.avif | Bin 0 -> 33356 bytes .../integration/file-serving/test/index.test.js | 7 +++++++ 3 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 test/integration/file-serving/public/vercel-icon-dark.avif diff --git a/packages/next/server/serve-static.ts b/packages/next/server/serve-static.ts index 7c2a441c6b75ca4..c51236cf5f08dd3 100644 --- a/packages/next/server/serve-static.ts +++ b/packages/next/server/serve-static.ts @@ -1,6 +1,12 @@ import { IncomingMessage, ServerResponse } from 'http' import send from 'next/dist/compiled/send' +// TODO: Remove this once "send" has updated the "mime", or next.js use custom version of "mime" +// Although "mime" has already add avif in version 2.4.7, "send" is still using mime@1.6.0 +send.mime.define({ + 'image/avif': ['avif'], +}) + export function serveStatic( req: IncomingMessage, res: ServerResponse, @@ -21,10 +27,6 @@ export function serveStatic( } export function getContentType(extWithoutDot: string): string | null { - if (extWithoutDot === 'avif') { - // TODO: update "mime" package - return 'image/avif' - } const { mime } = send if ('getType' in mime) { // 2.0 @@ -35,10 +37,6 @@ export function getContentType(extWithoutDot: string): string | null { } export function getExtension(contentType: string): string | null { - if (contentType === 'image/avif') { - // TODO: update "mime" package - return 'avif' - } const { mime } = send if ('getExtension' in mime) { // 2.0 diff --git a/test/integration/file-serving/public/vercel-icon-dark.avif b/test/integration/file-serving/public/vercel-icon-dark.avif new file mode 100644 index 0000000000000000000000000000000000000000..48049da2b6016252071dcf9ce16465e77a48793c GIT binary patch literal 33356 zcmZs?V{~Rg(>5ARY)ot?cWm2sCbn(cwr$&XGO=yj_L=8-&-cU1PTcW`G0))IRBykeb@i^ zfdAuR{})H-KeV%h4X3r8vFU#sK~6(+Lpx4KcSk2RIdB^i#= zB~jD|%`GfszeZ%U_V+2E*Xrg=)rXN&bycf(zTrJw$Srr+%ca8teV%jt8y%8NCa6TS zGafEU$dVC?;g%PuGRfe8bvUa;7*oh1+!=Pw_E)k>vVLkt&9vR5uW<7!ArJ@Uycsx~ zC!QGG0!^P+_Go1!95dLHQ2EoA5X83w?Y^~osPaoOP>4^KCE_uj_*b)_H7KQ6)h+2* zo}+lZm>=A%Q3E%%}9ke8B!8@j!qLpEfBsgz69?eqMAu#{7Mhj4X43L zri=nK_BkGCLZHwL#{v zFNFVE<=c+nmRrx|RCLM#H|jokOT9Bi((HYjt}#pE?8j#@G2C{@Ux%p~-aHE$RP}5e^X=1Vd(+SSV8d<$%Avik4ZbF-WE0@{$Uu*w1ofS ztpv|+Soz7|M838TONENA3|w=jA(*n9RM45#Zr>EpkQrF*JaWLmsjOL&le)_)tcd!O zL{@0JRn4)GaEIA=6e(hN76tXpX!Qj5rVbT3gro%gDMx{X9%V?mMS zMoHp4XjttJ@8U5T_}F?EpzdMV{19>jH3859K_BSA6CUa!d;xjV$L4-@ z${jeIN4;0Hu6k&PMJC)R-q7jqHA4E@d#J~0SIHm)P`UF#+21%4ing^w8$e)s76s%G zU&r0JT$#ZKLc+JfXd~XDx>ZAN+5%{`BgxdN*`U-#daTeu6wTS^4)d`g4ti9s*m=rT z>euQn;pIUq9^oR%0ALb}$v5I51!WEuK{QO<_cWg+gJ`35a7QjieS4MTI(#@RN~3PS z`eox^pq<#)&uOcl#FvuhcdggZ+pym({PEd5b>-UkGGdn&%13LVf2#K*zUmGgNnuM+K;MgkzgGb}6!!8G~Qb8yW$h?I)!&PmO* zq%VXPH7H4GF7I;>ClKcx0bCSzzzxs#(q5LX-jzu}>Uay_`BDPI+t(Oz+=P68-P}`q zR+OxCVA%#+VT9|xD$ZgH!z-U0)h)l~2aMm+E>1K9plOveBJo6qDSbTq>=sdVi99zh zDzR~8Xgc>49Qg%fdm5%W+Q##JihxUya1iCvqewm;$#pjZB>iEIuc#26|lzZ5!Pom*LKM zPVX69bhYF5L(MwweXiA4o7$sE&<13+dil+?p3e~SW1b;vvQCKb*@swV#7vQqFD5VD zMXlaWebgKS-RIVBWZr4t0xs=!B8O7W{EH{AU|&{5qB{~d;QL)q?;?jCM4lQykD1Oh zG>unA*0x23Ov+Mxf_gLpwD|#~aQsu{;>H{(q>xR+L*QaEB74IYm=U)M*XSe&f=p$A*Z?tVZNAKK3;MJT}^SHq6SL)5COV`Yih5TrN0D zQke*#xZo=@Y~PZ$jDF%!J$3TiD6}~2DHr3>{;+D|_mQx+%xMaRKZi4kYRW$Twx_FImvgisgB{*nYEex0(Mkf-sS>V^k5dY0-Pkuo zM#Lv;mx!{P#QJ1x_~nT9ASJO2V&@aSV&@eVRct4g|Jqi05&VhS9!!5++$;+9}OP|M?X69>LD z^a%9)TiTgCiD^h7g~c2Bs!;5(HN^Mz4Qm`+?-_e}^^zoE7|G-P=b~kb?+UGK16+&vA93nN?^CvxtJ z3tEq+3^00=o3|!S+M5hYEt~QK7@%V6h)7^!vege@i0lH%^_)q>2%7Zj95u&(zvp?A z&Swn;?s>WjwT1L&l#QJC;pB9%)^8Poe6TVvf|1&d2U1t9uZG^Vv@VUd_&%GKS}5T)4LH#lj#TcV3i)LNspBHlpW_*&*iFo1kY>6o zdSvkgxhCswawDrC4gI&RDZVQDnHn;PJrk=@7WbqNUl;eP1yfep%TMG3nmTiLZGyYt zBc*c%RUFqDTW zuDsHwq#Pe9)c~(653pz{ljwH3j~qHAYKS3_yNT)R(i*>qZ~0*%Flm0wI66T+lk{ueATvtGtb4>Zdl!EMc{|LbU0eh_q-W4?<}y!#FNDN@~T~>YXYnr2&&<& zj4<FvPjPQB37L2{pSL`?&pB$b^eooBqO#| zuk8rUMrsknemdK+9AVCEd{CU1P7lsj5ns}gs;MOaGr(1GxyC!B?ocn-Pi6R9pP`%% zvt#@Btg5Z2h{*=Yd~nu46UZBEck{u^0PWGvykd*bP$bGg>RInrt0^Vr*CjP`8^mU& z3=Vw1*Dif36>%4di_vDWuZ6RZVYWyCroD&aI4E(=niMu}w6v*FT{;{W-trty+#MT% zrzSzT49-m9ak-9J*prBQX$W|_gEa7NtlSh0*-l8A8Ay$4BSM?cMmz75j(EcjB91bz z&lr~6>c2dl8Fh=TsWwZU61}rM@m?>$>&E3gUgQ>sN0f~E>{%BZoF zKS7RpMKK1^0A*O0u7$Vcyr3^AKv=<)wH(rQ8e$U6w3hNrFUaIR>74z~x2q+XXNK>M z!CBg*O5z4T0L^T1+%LxyknIv{jNj|il#v{bz(TA=AgN9>;2SA}z52cGmZ7Q;#t-5` zVbz)836A@B;_?x8klCT9HA?hl>U1pYONiEM)U?_!0>J9&*0zVzLi_FU@S|(_=YC#V zg&?)bI;zPKepgYv^ZEm*SR#=mJ-Ja>!dF_y*O>A8S9E}IgBNpk-iD8h+D#`&2FFoy zd#$AOpI;_zKnJ(+o~zImAYUG%F~h|K$5*@D7f%}6?k{xaqk1(f*0Dl+kYHUuCGu;p zYcJ0Z%Y*PK4lV{OCPw%x3A{P|yGP-neWAK7x3b};uk-O^z>bteX1aG^vZY>LOaDjt&sMx@7$cRKq8G<4(lCO*^2}}r5Jv18%Fr$ z=~`>=(Kb`bjyS5-Xn#HvIea9^`wXCarikSbt#2cl5FPDh-Fhb-8f2V1`t7jZTVGvM zK4dr3(O0O7RChLQs2%nzo_<R!N!>NSy`v`Tvo<*Di{~YsG92Oot+4fA#sxQUj(FJf>U-U3t z)w1OX0vaXpoSlp6d34g7L3YETO-j|rkI8J0Zn5F!&BFme3 zO&Xm)+7xWV)ly)(>WAyRIAE!UwGQCnII_g$C(^~0E@ZBV6dD#Y0#H-7W2xq!ARuqT z_0*XR7RI)mFRH4k9jIzbvYnL*&y!VD_~gGpDp1=sq0$9n+1X_>z zu8R3yp)a^f;7FzODN9mJC=;vQzM8N%c`8`ph;>{mTk13dqVMuN;<8M^+~K{6-zsSN zG9exY$zH`_&`w-fcFC+09eoMiJ|T{(lm6t)9p~Zf;WQA7yu@7+3`PcCEOx9uEOosm z(8el*pBM`Vcl}}Nb+NP52rFsj+2`C>WQ_#XN6UFag|%J{>l?aK31vf3$5!Y= zN#hOp6{!$-0zA-?Ta}zaPAgSeIOs&9@6WrZD$&SW*+#g=e_P5-sOT)02Fv{EfSrOx zFXvHh%C(CIvFt-wid(xvU*}wO=tO4^{^{RCJV$410U{*N0@Mct^s@{4?Y9lM%g5dS z_Y8QDk4s_tlWZA{wgUf(bQ@N?{JN~eAwr#+8fJ7`8%E|+;wF=LAEhJFN@uu)-`=B} zulHl~yK^#phNP_RI6$9p9*A!%PhNu$SduaKHX0Y{-7!prwxF&P{4f`kpBExVj=R8=#;_ar88RM9oh&#A1tB-YI~j;3G~5byp`7>WN)T_XV6 zj(gic1%W}gpwt{sf>95uii=_KN_+N=3hnXo2j?}Wc63eGKKq((_E%YVoygxE-Mp&C zyckkgUE@(6NCV>h*H&W9kh+2KabejJAWcA~9w=lR5tEa$}E6WRP4}tOhaX zuZV&U81w}Pwlj$vA)`M)312*nDj?^YcOkvG_jnkU1%8NlMjI|D+I&K`*5+N;;sH%`nzwew(}ss^ zq(-|4I4m5;FGqex?^|-PP}ix_Cy*P_O~x=;2JZ~++qf5l*=iZ#v09Y^K0g|5LNKx) zu+}c$-tVMf#h|5U$Yj=1x#H8l+hsVw_Df$|Z8HSugm93|zD(Rlv}0^)xAjklP`2*r zNM)-1?~HI)c`>@^iBMU&uVVYFZIdnh2|>pK$ZZgh29{Ms@Sl7Rh?bx$e>8u^ZQ=nQ z7!L~{zL(3L6zXVqcqpe{T?feEC4A6(RVSm@&!}m3tJ$h%@dFY&YE#H=*Rfo9MJ27- z`1y*;;>^i(CHe_(IWxNl)C@2W_4Y4^liPdQP6&0a1nI^3WEy&l;dEWCt-e;ty%Jp!3!O; zHRE)51%Wu?5Fegek{qb9WsSiiv+0`y#HW=EJm(k0D~fZW*Q9DJ(ixABl^-7CwDj+n zX1N@e*TXXkpnl$KV1(yI4uoB;k1&UQ9_^>@JaOI=RwN>YRf`CR#D1eg{9KzIJu@X5 zXEBkN!oDTn!}+r_m=RB;w{c?%S#V08Jm^-m+3pOq?*~m+Nbf053PNFw7qB3f`IHJ` z%-~X7zR!#ZwTnp$u6}RY*D%F$(@CVyDwZ~GquS#ft~?r9SG0i?|GSXlM%v5LmY1A_Qnz$%48FX z0x9erqqOA^9i0oN?yGL6KDM=-_`4-k7d;(Z==;aKX~fNiM!8pViU**D=aKv~z8POd zF~pSQVr}NVtvQcFZ^@j6AFhqZg9Y~a}?!EGdg{@1wAMtTl^Kb5;{b~gBiq4k$?eNx4J@Z1HXUB7C zi#_D_@|kG%?2@K)8GZNu)7b{f3`WOoCm#byucs}aXw7s5Sr?^BWn=C#DOA4n!S1&G zm(84bS(ncvlV0w~4ODGF`!&@m+SS*0gxvGtd$_4+(~aGaM+pia8Y=j`?HGI68~rlG z0aOBY2;0MxjEhWTykaGrpATW9%EX=_yev*J8%OYrb|6Qt>de49}c%)|DxyP&E(&S`il`-b80vM6d%Iy z7L0oMG@d(AczDWfalxMZCCi86n^lFB&QabL;*N-b-e&bfzZIXY-<^4et5-o$r5YpJwlqC4#3&LoiBJb%j;&kPeMS{FHEqVXeJTO5oV(uGo z%_d2vz3Cs3^_e;8rL_zV5)=1->M}XypK`9?Mzv{x+o&y`ppK5s(cvQ1dCIbbjYgu- zpZR@=c!zk>+N}vCEDHol%Jpdm5*8nWH@-K8)h{gN#9=7GVVYBDmTOyXm|@si@q}ms zhOv`{MHY&g!O`_a5#=?9M|5Iq|Iddjvl}NUun$jV;C|)i+ix=Ye#4r;Ax3w#Ccay$ zNnvh7$Z03DK=Ati$fj=2zFKp1s-jBT|T(;2xb#yq`r8 zu%s74bFn!rjlrkO5L4Fus|z)s=neGsJRfbO5Jlniej}j}u&Di59pf^G1mdAq!eVAJ zrC5&Ay+Pn(oKkr364Qyg<(B(MB_L`;4f0uh`>e#-rsTl}HUiOV2pCIV^xLkfJ zV~3%1+W2Y>8G8vR54aQ@mIWYIECf24qINtAXJ~Eu*}a=``nP&FG0zP%bUk(}94)1- zV+?tUZq(phbYfu7nW31eS+AwB%ThMb5iQ5EFyI7w41pkHRz?qpu_W{mT>DkJ%;LkZ zQDN97`hcG35f&=*T5}$^L_~xw+I(p|!w>s&=r;9#U5YLnBVK3xopmLeTSFZ_Is?bv zDmQ?ez?fg*QkH?#1c}u$cqS1TP-VA!sTl~}CtD>kLoO&fQE1QTK`K4!jFq87vua}> zT@K&>j!FnQrUe}Wz0LW2lsvI(uX5(|OhQ!xMd<#`tgok1xCk=>(p}ZaDeB!aE#DKMs)}Ahjk~4(QW*>3lDZd@L#Qjr`~z0^z@m`9O)G`jU7N-2U4XPF zhsaK~FwiiDngTL|^u7?PV`WG62Tu8%g$=#h^8jQIc%pn4?_$-VqNoUmTR{usXCn^| z(1N51EQ_1sr9v^I_ieU4jnvsAChUc?hS4)Jr|M&2f~L`3a67ODGO}A;HOL903F^vi zmbM?OAJh9M0Q{{*DCP06mSD4Y2}V#VBBZy^-v1ZAW$g@-aGzOaE0hR`lm&zgnxv); zr5KHl>;kfVCT^dB58~BF&%!p5{^M>ye6Pq*Vm@qcndRLkymMsdBB<>U~~I#4Lk`tzk9#i%z@ zfmQA@hXzS*MGQOlRzsoj!zJc8dXnk*NWMz@D)cWx>Sti9Tl=Mv0*g`q$}b1Ike^dn zTTJ#9O;|r|{gA)NU)$5N3y~P|EgB}A;Xp@(LMCg|2C1Po-6NhT^;}d1tGomRu~61t zNv6_c=;n&um$=p{dGjMppsb%m)ci zk#hWR4#b%^)xRiQC!Qa;uT}dAI0hoAdyC6Yty}EAvaGu{&FfqI^Owu-a!tmwVcrRD z#DKTmNPd*rgv;JGxS-cFG|4QS8Y5 z45gZ`K|1gPR-^(KbV2s{>@*4H8TU53-0y#~y|gXs8!X;7gsQ=2b3oc~UuXnO=n8?c z5SF8($&=-Bm`cC-d}K=Rz4&XSBwdpj>?Jc+Sez=^k^*Tb=lYC57=UN7glk7apuAvf zV*$Qy6iaI4lfy6)>pYy8Ca@Rs5v-d_eQpeOb1g}W{H78Yi)j($L=*R|gG}>rD?~ig z(r|i~TZf4;owwBsnc#ta6%MvVh;m{S2;tv^W%Cs_vDdhwNXsrf9VfWT&=JuhKTa>R zr)XChe`#WPdK66qgQSW!2l{pbjG&fkoaiba((BNsa9Z7X5r`NZ$Hf|t3|8SY#SrJ` zI{ao!b>`d)o8%3(oZ4xP1SU>V`{Vo4Q}k!{KTukOPU%CT1y6#XU5uc7{MP*$EB;cy zqXP1{bn9UKD2m2pK#G`lkymXiBtb_dB*l-mSgGTXJWCvK^OH{+J9uJj;fdc0x{DL{ zS=?Ny8Z8QiDDuV;A@&JXtp7-_ehaYE3+n{jBI-5o32il)kpa4eE?WxX*zOk!1;_m1 z2@;&v>7D@-DY4j!E!ADzj&b@l8*huAu&P*3sMrb!og8{((U@6PurNO&fTG15Pugai z1OBI_`8bUONYKa$&3Rm_LHF|vg9{#H0auz_SvE$SX3&NQIJp@Sux6&2%rYe*@*Nf1 zy%NcpwqwKM0VW!g6ObOPQmk zE2HYCsbd!6F}?v}$DAKx{m{ZxZ)<=OCvw63Q zGq$v`B4_6StXczH_zO0mA%5GqM(d9}se4ruM&_*jC7MsHvBx4`M-2ESE&aSrtg_P$ zt*8u+AwK*+$Z>5c~k0@ENF99k=qX4vWy46vgF0}MDi-EsS-Mj1NF>znYAh4V2 z8@tMi`MU}RG>-wG06J(!%$SHd{o3=IZ%D9{HteCgbbJt(4B3!Heu+J=tl0QylV8VM z+SnImsV*R2A_P`h)L6X0 zu@Zw2d~j6Wy9;ZBZ5}Z9n}S~y_s{|A>Yk$~SS;&Fp5upRX%xE`?zPmD-5rikT?2z}+-aB_Rj0m( z$8(^QNJB6$Tuy$q%x#u?Ucg^}B4pCqF~&Q${NybpLAZe0b;+{ffl%gnvuP3Am(Q+}V7fgwyuf3Wr$ z@MlYvyc93sBT2anGoso-jNtH74zmYM# z#gxQOCM-SONZ)A6fJo^0fq--vn^OMeivO>G3zvZjng2J5%*2`I{bbeg-IDO*n6L`~ z91Dz8hhkzlz)I&U{M&2{s?V3H@w2WU_MB9C6UO@^vr8mKK|E`s_gm7o-pMUVhbWHl zuvrb*E4$fumfUap{`W~K*sLZMp74WY2<D{@-nW77QEuVOlu2~F_CeZyZ-H`mr)^AOE04zWTiluWLhpab2%j2Rr)*VbFz z1QGl%Fs4oP;qX=WMAFXV=^-aMbE&pV{;s=AqJw@_ zHN5{qut+ft-YlL1xi8UFyVRG$4s|ccA&&jSe)2d&Wds$ScTqW6Tj$!e-Ip1(Fi?Nb zdz7ad$ygKH8lx?h&j5)#x|`;WZ{ID+|=nz2dCk72a6RWf^a)$Q)iX_?qh9^dB$N&qe0FUMTj95@0i>i z@dG4&bn#-oL4OSTBCq%vcE7LyKBaEJjSq_>!+;|h>Bi$5;3|;@*st2+HwZOOYV;`T z!qUxWKi`}@24qp8E6bEBE+4VYH@Fr(VH6c6l(Y+=?dR8xIh18i$jF4IZ-&hq}P!(Yse=G6I%_LrPVnsD0_ z>W}Uf_r($_R(6QlLks*l7H08s6*Fz)X8SW3{%p76k$*t@DEAb6uMP0*lWlWtSinOTe zYSvS3PZ${!!%=!FuR%5>gHgLGu^B))kyVxOPRJ|8G}XTS0Aqk9XBZesX}KfOku_`{ z5z^Kef5Cb0hG0L4!#TvJ20-9D8OCc}w zY#eO$(0B!AQ2@Pusr8C^Dp|)MkOc&i)?L5W-9bUdbf|Wk_2!A(md}-98`k%xvUhn! z)GZ5OZuml=PA2J1b20QDWb97BmZk(}#Kb)lh>R znW7w&cZkSuxx|`J2F#=eX)vMXr+?wwmKj%xopM-w>F17Qpm={B;of!i@*gRs8o-|x zh48ZEQ_bJt_m~7ycY<60o`bDAh?`6Jtsjf8I4OH$!J;Cn#pS!-z+Y(b=#a-QW+#IG z8Yawt)GQV2?_CFV;NP<;nuPJI%Y6TSoVw5(-akxB>63pAQlZ^Hh232QWBOJ~xgy9O zM|E}EaIr}djDwQZ^Y2m$##(y>IWhd9ESHqp2I6hpvj<0{N+-I*HfG$r`V*uHMr0_N z8@=A^sDFH5-(lUb2ASt`S^jYxPBk0xA=2)-Z{V@{!5>u}!i|ZUK8q|le9pYzC?|1= zlWtxXc7>VQI?LD_;QGX9L(OH~P5Y3}Y6$ARvVh zoT9p;;W~IPGh?+ZEQE!3Yb-%yE8D+Hgeaa@nf6Z%W@HTaels5dlMwO6z)Q6=(5P-I zh`kS4L!v=9GtxLmEVK0CFbSgXKG1dM>W4y2>`*`RMo==!;;6^AY_tB<#z^Y7d z9mHgP{g-a@TRgo0a;^J?JW0x+@nn{NrbzW7Pt4J@$hD97YD8hpM2}*2i=t`-2pXL) zL%!g$F9)09-=E`r0Pys-i(+-XatwxUwR3X;36!UQE#eI#EBH3f`G$1^*xq!c!nr=! zfuw*Zpp|fj@;wdX=aGvJu#fh)s_}7F2D#8sqtYZ>$u92rWLQiHQILAnST2M8h{$qW z7-K6?KZOP3)|tFxE;_;h+ba9k6-na2RVG|gke5MtZ!L{a8$dr$TpIA5a*A@wdo9n^J#H`*#jPL{;cyp1kNGJY&5`0-~X`gQvi>+pLn~YJX>%eb(+} z#Fj^*0lP#DyN&VfWqUen3L9t_$CauqcKs{tRQ*W&*cR{RkD2ewlfO=SRWZgSD+4Y3 z^aJiLNJ3~@4#eZ4QJhP)3$7kQSxP+? zci0#my`);MWG8>+7&``iqisP`^*W~mU}C+>x7;73&*Kuz{I`Tcxy5d#zsXj|eWr3#b9_(Ib*49~tSRl6qgLp9DxYM$T`S8j z6Ni0P2{;0)!Qi#^m1nQV;>mua9GxUZK`&0qP{ydAtutjV0DO*lui2r@phXW=1XCZn z#mqE(dO?R=l(>wQb4C-c5@@|bJ8j+5bAlbu*CB0W7RkSNi)JtfKSwf%25&hsU}}Ch zv)Y4|t)sjC44>>oB~$hC;}MLk%FRA0?~20#kOLaXTL4Na8q-Zn-{`MZ&hdsMD?g}X z?D0!D`}TAs!?*H;Ny+sHVXFi#N(5fOdmLZd2tJj0O+BbWhl#o!kh&Cu%jjGQlo)?v zm>N04}-Zsfvbk;*Al=kS{nCJ^i{Ms+%bLy%9qx0(P+HGLejC1&BM+L<8BvZuNs)=NmOB zhb0V$1Up`>2k4%Q9PwEn5OF8o4kBepGOxmJ3354cmC^^T=OW6!d)#{i@AFZe6g4L1 z)T^s-Pa6Na|4<{b`1FdSVKIWzWR;(8@k(4deJcs!h^O z^|KEUiyNwRH9sN%$c#2U0TU{<@9meby~`zT+b7{uM3IXcBPy_;^xEoZCExmHOMW7V zXl8hO5Gxe=U_8>@qASi-cQ9XPc@d(*8AMAdQ^dTQ2ab@L~E$)G10OlzA^^!l!R(Jws#VwM%_8C2c&FcFJ7@e|5-O%L?#OL;2^ABuoXrxWWY1@~_6aB}N_ z((Dp>m~tQ1sp*KXp>#1ZhU?l?`%dld-mMkrvb(_;lczEr?&m?N1yzomoM_b0P(-MF zXr?bo$!QH^*w-4|EnD48GPT$-=~f11{;j`oyv)~KzkB*$a=pE(EXc#b!vmKy#Y=;z z&g{(kqr#SJWSMebqBs=*FhS9o@@Ul6278k3v{*!9K{5?&P!RMa%>$SrVQOdSw7D=%T+Y9+ija&2wJ{Z^i2b_~(C(uS@wI;M-l0rr8=4&vyyGjG zWGo6W^eg9hy}$x^6Z&*uSZVI^zMX054#2s43LkAvJPu&H0)CBF@sgwO-=I+5$3TjUzt?@X;c&C_?2VG{UdiW7u zwqXkRCyoGD*`*@!wIyQ62s#e-wD`y9?E82D^0F_k>WF2%0qci=*$3WYFTZ? zguXVC8zy80B%1OevY)&<$4M6NRsmOPzk}lgGL2#n#diPIlJHoBJw*Mrk=OO)4N&MO z;}l2T<0Qvw67*yydF0;h)9W=q78qQ2ZTROkf)7#}@h z*^{}|)@~My$eTV!<;fh)-=LD+9%!R~KI@LUDQ^2{ZIDq$IXLKp>tNSBZdM-aHNgBq zD*i92ibQ|%SN(<1gaf{h(?)h?1D`dQ^LO}@2Inw>Y>q|hVMEvu!^r$MCpx$c1=H#o zS251rJ62{zihz*iQ`izo7Y+d* zbV+D^uK`oiR-WwS@h@Meu#T8J!9_bD-bd8uq^slps^BQ9oQR$DB11jF{ow6~xX$@n z9(EAcf*k@vWjsL#3$`8h^RnkK+YU2}pQ&sbA z&!VNyt%!!KMjq5CwpS$iZ|in>D+|Y5vl2HbS=mC3!nA#%%;K7=)t3?zsRV9}nTd_I* zW48(8<_syJRT3FQ*fQNYH*hh;Lk+X)=IJISQmRf_RL7#0vm?|L^U6{$1kCB$UgcSyYzswtRoJ`06e^ebR&1 z4N6iR|A*!+Er;Jl@_DIwXcpw)HEgpQ(EN11p?Ay4f`3*|u?``@30 zUoUj&q*Wv~3VPl=D!P$N$ps%XVmDXU{VvN~m+$_3k?~d=idNgf#5OqkP-! z-n%IZkcWrxM|+-L@8 zsM)7{rO6LbXgb73)?e@Ms*|D=GHNsD=%%(UoDAs}2la(9yW%|sxiq5q%Ec7!z*C>; zh51->cbME!Y_A+XT4!`B>4Jwfm`Y6Q!83U|@Fpn4CI<7a-lFnmJ%-pdnj*SAMR5`| zVo+!}!!cz`T@o;JKA<%|ejhV*IO`#GJ>1S?XY`Am<)J9$=^wPYr3&~6XxJK?yvu_- zjO9%X5gG6--0yVGZxc)CKYY}RT2_J-&%0=WK4?aHsDpL+ z(0TE=va}RuRfiRW+H4kGA(_cW>{WGg8C5=kKP6lRiD`WRR3IA_G(=MjljkT4rV7|& zJ@mXz%EeIro1p0k3Yy^v0JOzg!wT0Azxv#PZ885R6l7mDHR zyIEnpY3FVF9*r0=4XCm^RVYZz0K%wQ^X|iGM>WxVUkx``8N&I14uhf4 zpJXm@#WZHv@Li#*6L{;7Wtn4Q*s6*o8JXmy^X_r>G$DRO=Oky<-;!L6KgX+m5J|Ou zFNj=_Kve85qs|Yiztd~qEgBxe$z2r$i6h5KSM3=VA<&u>Z_{z@`x{v3O?6^1uZgU8 z{^Pd&+;56k8jg!%s-T2lq_HV#e%K`J`d02F_9qYsIV#@AVxe}0RDtP>8N@F7bb--e zz{=NB#e=;Po6flS=@@0nQYwygPdQAJucTUCqsy|??k9U(u;1J#3%)*dd?OLPJ)9*_ zCw(LHUUtofS|l}W;>GvpXceOu#~r#U*~^gQJr^?#qLuE^5MzEXQflBuMSOie{Zaj% z7&F&D)-;3*5}GA%f>i5sXQVVIhha;9{SOjGY;c5pv9!pkaB__mjxWQ+QmXqSB$$v$dbdqAZ0B zQuSh%xm4dW$3P716#8MWl9=k;B~K8HEIHF+L@&`!ai@7?7T}K^nXes5n6`TIOK>99 zEPJ3+QZ?_9K*lfQR5laW)V!PK zon@ScbhYt%{jnUv&6Qq#23or*=|T{5`G*4hzWEW<=&N0rp&Z1~BmkXt>TPEXwU6Po zlj}h3(;haMZ8vcvza*`AQAz9IOc-0fgHt*?)npMU0;L(Q@fu+IeFX~%d@(UsXt`yFOI2e`&xquRI>!Ey0b_;=(O2L8xkvmRu8=K6e} z=lI7D6cD-^hnqU}>*5ZDum3sLQ`}KWcwIx8ss@FZr-3~WK<<*n?Va2NXrD##4IhJ_~;zXvK5vVYu)TP z7i~-`?HYSOUPz7fh}AX3cdl;}$v=+YqC_xdQ7b%ez$sB0a{r6}-=S;l@r06@yY*Jt zEf|?Ix^=^3>*k^}IR~nZAimF_l3f}q9N{pAh(k@ZQfsVT@=~cVc44-=aF}qTa<6;Y zz%Lm~&2hA1&53CstMZH24tP}Zq|-l?fDduhc8N16)|cTyi&4TKt#%Lp)q4uT0(4bb z#3r!FMcdz;)(UJG3=p^5_LQG`_?Cq+{^V#8GmOAdgn+IWdoj=d{eMRQ0000}OF#WG z9z}zL*dHA2<{x=zU9SF`MFaDxA}ALuu4ELGHfP$A+?h6~RG%_?x7y-Rrh2w;gM3*^ z+h`4lizFiOrgvukzte57>vFr3tT*&kI!d5sh_zWH_U_=u$_# z$O1AGr@L;N>ujakTl`MZnzn6FFMdg?gB4|QyIs^emt)*^U{|0=c+rbs^UYnS5+(~; zPq=yTgfm;R9e0Ugr_L6r1=sO??Ga9)>ug9-wM2_C`C)Q`KRHVc*Mg+h0qEQy1NR6A zqy;N@#iYT~K0DM7SNd2_8C8*hI0=+tgw?bx4kW`E7}PsZ-c=>@6=D_*oWlnCZD$umT#w$cZXdpyyzBG z_RVN)A(>pGo=0@1^Y_BlQ#crFN2*(okD~FunHV-Th5w89avZGKZCW^NYKz#?s;NWv9ySV{vXg;gD7j}4a`NC@VzXLW+C${ci5vBcI2vzfxI?ee;>!ky-~ zFH#tG4sITA`MQht&n!Szyqf&8-tYlioeoU?34^Evr4)-bsC|tb%c-5C=Ort}*#b$umzpNs7v# znj&Gw@6QJ}wm~ep`a5^Irpm**SnWUYGtnfXzb18Wx>DYpMU}sXeh50+LsIBWk`yeW zm&eve5LB4CwZAd;l?7-5k3m=hq3>h2K{+6D5?BuYzvmc<6yx$dzJ%W)O;vfdxoqf- zo4=JcgClKqY~M?$+AT|WF}M5}^}vrwSL_y6y6TTbGX9D%7UfvFy5Q9~CXJ-cpBe`zfD!)+0D_03S!US>)>ygq z+J10fHamlan}#az&YjV5o}99L-eiagVc;nco4H>uthPDFdH-{`VMr?azU3aYSngQ> z>PnoIx%M4b5-~HdKkD)hgKfrw#xS=Tii+3!r6AwTdgghj#>nAJkhS(oDf|-KJnNVy zfgpT-s%sJa8>gY+(ypxG-@!1=TAeaW+&X3F367+4YXq+%=Zvjm)?i4;!#K9IFXFKQ zxvdM_c)nK=@^Hqk2s&P-8Bk_ya%^fm&ZD5Y#QcY)7nHxc;{Hb%_;}Q0 zpl6t8nWqfM_tMPsEjw9hJ7P~Kuf}ZyJi|Q0N$oj8p@H}xnigK_$~qXwzu1788hq1= zc(!(vyHdcbqBj~^V^edK`qMgpG)#&>Ex+X0`cO`NsiROx&tC97><-(H2!COb|PKjsk#-f5V z-W4*JT>z7N+qOr-vqQe6p_0CFE$s`O9$a~~9Uofhj9wWf$wle7=#Pk-ux(2M-X0j- zm`Yjmjt7nmxjemQq7D$(T=uw`@IFlB`w1$!i;Vvo8do)Z>=(*{3Mh&eB7f{c+Mc!e zPzUbD`l<2@$L8zeT=Xu?>mMIHvO`MI%ZlX79H&=<9$^`17f#@`;x7p4j5LvNE*J?0 zI#TgU8gVz^*`k96eK5g?%joZaeWPEpMFfHX1+mP@9%Zv_<2-y0URW%{B*U3?pg$kuh&lW$}qob43SC??B_gF=-jNMGe^;o`V#n4g!n_ZB!8f5gT z3|lg|M3Wr=sAs( z-#aF5j;hw_N~*218p+8IBwleZlfl zKz537up_p64I4NGj)R(*b*gQ(*U3~JsdzG??cqek*8Hfhji$5GgU;VGv5)G>U&Y*XCKNc3&yFqUrDEE#Jb zXxT)sfHMl;9Q4K`gUMa7r6A~SeF-v@M5U_BkHRGSml&XkWNwgne~K<@L%F0OIKii& zgqU;9;(*?6f4M=1PWg`m$>R=&d#`8eFe|rzU^)Jxkl}@SmBxE5psqRjIWvE3%aUxh!{QP< z&PHZlZBH-aXduZB(+AhFnrIvyy|%Gm_{SnP^<}M-L;qV!hC3|UZ(~bx4bOk_5Oj(6 zp1}fk%S+ZSU1d z`b$_UU6=NP48Zc)7q^q+InB{^s8|75#^93+j zQT@~!k)bdOQZ+scdUlYH^Z8QCb8_bi5Eaai3u%|uCLY)x1FSH6#ZGSi(Qk?*%7~jy zugQgQ{%~S5;T$(ps(!{du)HT-@3z$TltF=la3hlfB-5|dBKaTMaYDj1zQeqROU`c3 zPYuQYzq`QS!AM9rLMx%aa%%3t6Jk>|3X<@s^!Q~ItaMp%_MSNumoodqsf zpcUg*_;P@H1}j%p>i;XAwxMf^>EV~he9xu1tc@JIOSa%B`9dcU@sS^k;2K2(N_gUE!U3B2rDa>LHYwXLWv!3gMr0s^ayfRP~f06$1{2QY}PLl^rpDKO)7!2x(rszxxY<0JF&VhYO>oKy|=>jj_30Sf*V9S ziX>$_kPCkz2B%RS4Gqnq}*+5HSy?0#5P^e()B-F-+hK1J3bn z05`QAuGR&7d~~7hpC(H&{9Kxve6{xJdqC}Rd}rgBJ4>EByLn1g9-~v#;~S7Ibq~-& zUOLiVmEX*3k4y9R8LRtDBfDw1LT&UDRR3ERD!mzE1jxM!?`j=DlQaBNI0hy;~_*>_LO=NEEXct_lbWbO3OzmMFZ zF-C}O+NY}toPx%EY(qBpQE>gwq604BZrqy?M}g)eZbI#8tLg!m*I zkPPShGCuKNoGVTPkto-N8=d|JH+*_EO#-mud{(R7Hk>r@3dHeyVTY>#G(-NSSn*n+ zZ5*h1++)^T%YM+_cSFg&cxb@}oW1~C<~9(diPw2wS6d@q16HO+#H@?ZY;Tx#ZNl5IMgS_Z>fLDYkb|d*A76rm zz+E_H>!uNbrQpIy`e>ExO}rhi-J>CBNL0UCINILg=)Tm@gy9o8J<%7${nl{HQG9O= zeTxSBq{thD$RFSA8ZoTsT$vXL#)n@Y3eKxq*z2p5^as~8U$O83Izh6Qr2ULaGx>DZ zlTMvp_qaOQL2^i+uy~CY3wP~kQ!X(_m4vDyhAhATIx;4G@}?L700000It`8g|NsC0 z|Hpm+000009sc3R|0kQ>o8<;bAw6En8pf%d-ZbstK=>fudm)DcH^x|vR}H3wRX5Bi zUyOP}fgUQJ!!$i9gtghqa%mxhP__H;w^7_A{UvJw{$_^xb5XT<3`K`si-{uJP$BO) zDZ1iJceH&y?SGZWNf=0gig^`O;FBYZ+TNcqa9CYW$WC??(QY7blJw3J(;EC`IWy+9 zKw+f46}!OzC9QGiA~$g;uA9e$xyUI;i%4i%LnE=iF*i93KgN;2Ucyd^&E;>*llEK0 zu$)zwpF6(xpad2T&_## z{pf_2FB1ex8?Qy(|8NLYuJ^xCbS&Z@V&+u`vjU(;?T#VB123C;2azJ7mWkI!>(r?6Mm z({d8xH=V8Np&g0V;p5SBZN+mt3GUq?tN4J_x>%|*+rGEG?wftb6OuI8<(WHT;DK!@ zcY{E=;KEauy)lqK-|&*i{vKap02sD=i}`sGtgc<_5DV}QKFc;Rw^m16gd|kCY{Ez{ zEvjI7g5CtpT*rOHDDGNsk~PUuJ{CF%)MtJ0GO&~~@C9sVR(Ix2A@+!Qu?w3HBk5m0 zR%$^BHQ-V-^pkX6h6^epj2`lBY6cIiKCO()!)H>;C3q|S!nrbhXf3Vj6a%aqAr8DA zqWG~4AcIb8;5kn%Fb^+U+;`$DY~nTuVDwJEC&dR2qMx0XD*s!Wd9}jvAjR*C5kd?jwlqK8~B_Qg&p#9=P^3Nv!W~ z?p}TN7%^Q1{th>LyRGkWoert(C$~Es;_r3LuI2g)n~&Hj6Izvyjn&8Yhrda&T2#4{ z-FzGW0zWm5Eg1Vs*0v`AHXCoE(S5O|+Q>n_>x=*^$m_&(t2Pum5x(QX^-!Yj>F81s zG!DValB6aW7VS!(sN{QR$c@=qN9iS6o!p6(SSx;e>C|V=E!f%LM?Q-1>g6v$Cg*!7 zOE3p^dHY2Rdn00zxOAur3RRiGP0f>N76>KO?%&~N-DLDqzGI|Y6_O&hihPgPC)Hn- zkB8EI;n@A$qCNgd;r|UB6D%jKE(7YN1V~s&>C#6_C)68|bb2xh%|A=82v7@$MDmcD zr#;+QoK2iTQQw`COARY9(5rb*e{?Ap^GX_>F2!em%V(^3#MbIf0#?EBShp12$DD9u zu6U(TgsIDvFWHNSw>C**^l-s>oVec4Rjmr6<86QI3G=idK2+gbQ81V*i8^DCJ(t9j z=)8lm_f;7e2cC*YwV1#I9jlW$o{^A3+9lDIqP~4(oTUHrS{e`k+g(rqB%-&F7D-CA zlYwGdBbnL9*nfgf2F8B#2`9L36R!OAO($Q`XGn(gmtqF*fRwBnWX&w9+1E_wlcq>LSylId!M4oU6|E;Mb)PZ;4lF^19&yUJSnU@tFH18 zm(G5Y!$^iuL=RM0bDTw7+)<9e8rf#v-Sf6M8 zw>xK?6)mZjP(C>Mx-GY*JSptvpoRW3^bfk2+eGWmc&t?<%_tRcnq+|t z#nemq{*)wfJ#f|Z9Ndmblolb{gDSNgOA z>dEp71N9*8FLHT`-WME5ILv?7@V}7*&(a}JF>F)ekPZS}h+8mwAz#@;ZYH-1+BzKN z5cxkgLA?`4AX(f2qS04}(>8c5o_NTW-^;|R3-ybu^jSI|MARn~g{!B@vx`F^N)Oo0S*Zf(3-ulJt^o%HK9hyjH8K?F-~19fyvs7#q0uDZF^PX7!^feOZ0 zHZGlaEPkiXJYi#;;BM4xUc&pu9s`&MUCrfLUvKCH@)=spc05N%YXHa;X%%|}rkzZF zC6f(YN>-4*=tDjTaq*hLyQP-Ek$4u^Rou4yad~<{zEdF@Q(D4V%>9 zHbj%TuhS<&4qn#=B+!-dyrgHnph8*N24iI(N^MM8UD!!(U0z6ejj~B?r7f>6wUc4SLy-ZpPrr?K3 z##c&8&oD^O520**(AyMcgU3JpEmOhR+mwTHnP!)q&;vZNF&=3=V`h)Q?9JH0BDZ zpq4BDvhm22y}a_j93I|SYV!xWKt$`0qc*Q;k1F-_dfg%H79hzVx_T=HpN^#-iDGbC zlS4}TyyCfuWZ#U3rMsvP5qyl=d8OD+25!(idi_mvb{ppGN^b z#X;ac5BT>|P`;^iK=mfbJe<0o89P;H2-}A^scDc1Qwwmsm%erg6s-dBC@TH=$$ets z*eET?3}H1~u47u6N}zIY9rH{jom`fBhYMXho=;5224FHxo6?B0XwTUu)KPwAkwD~iLZwjBTay?ZtcB@o3?}EydldszUe?tKr=!V`p5PjDd z<#L!hr3u&avZ=0ZXRNXt83r~XCdQyGz(o=V@? zODiaPuB88F7&&Pl|Nnq=M}7s}&_#H>000000000000000000O0KmY&#|NsB}yx3Vc z!U>eV{x6lHz(r@eTK|>sVsXx+Tj9b35yr1a4aUMetI>#dkCe{eeg$#trdzoQO&x^7 zqe3mD7c%OmCA7~f>KMIDnB6SbOG@{Y)N2uyGF_n+QNUAfq6m-{jY4NA`aspnBr;yi zP_`(40>0ccIH&VVD0D&Vi}7rViP9CFDI)QrfMc5G9suIsN+JUcBY=7M6#3nW>ir;? z%RV5F-s6UQn$!QoPP*wl$>Q>h=u`^v@0xfDyMuig!~%5Xn$8QPR6Q z4P%gnk;V*e?Z{07XW4?33hx!MOZ2n}7tQ)S&!-H>4u|SGBXeT$-ejaJvwmJkp-3(A z!8kcnz{m+yK>Z7lK+7fSOM4W)ba6pcU>r{oS z=77A;r7^1g^*C(3W;{@fpIySIxe}^JzXp%e^cxO;kTAsYt$No$1OAIiy+0;(TT}b8 z1F+fLe)JV%vp~wI>zYKF36NstJd3X;;fCX_mKu$|=i*+Go9b*HkHt zc8}BN7tOT`rFlD%35eWFDka<1v(L+0_!uckh;2h`X5yQ+4nQ3?K>kp~ocB`(reC~a zN|aq|R(MIVfokio=uH|7m64BeRxOGR)V%|% z1SF?r_`S1g){BcH-KY4w*se1GgkLTg0ewxXP&Bm^cMFb%+ONL%iwgOBp1|b%;3B^3 zUiSa!5&Eo>4yd-_uj(}c^Y5Hthf`}KoWxmBq7jV_6s{!WLj61p@4ajU+ayr%pucIV z#RwFd!4J1t3p;Jxv;1BCnYJhrDsamEf_75x6i4Fv`hS= z_ukoNl(BsOIfId3C4gf0s>vUk21~-oq`m}zWhp>-?~dGQ_X2tWl)=eQTc@mvx2U&` zW2M^N%)?bM_X+8bHy%b^8Hj}9+xk)}$AU!5lu4^5T%#ug9zq`pACKl=?O?-4&njXp z9i1VaR<28{dm$WdY7nuctVFNI0sIfObXQ)S1G~B2&5#sHy5~I7c2|jV6hRtk-24-m z_?E0Ac2WQT{heX|=dTiP#lvH)mZHEh`t=R}4d*faQ#dRDFo2Wt1F)z{Y*=^6vuqcHcLUox-!EGM%9RJM znhvXDiO?Jym#);=1N!ujhd~t6^N&E%<2O^i6(5~K>#@Si2Qt?o9k}%a7sUwN39D6`Ae2!%XPycCW5tOhs8KnxFjz_-EW; zh03pN*K8?|4ap4;^PaW>go@Y7+e@I2XHX0A69@<6S@pbB4Z(OhtZ*3YaN#Wh+PP(0cVw~#%!>*oU}7X?(IBQu zfJ@hk7Pw;kEI2qQZ~hOC3RV#X%^9a0t`{^d%XUHH94Hd{^|-e#Trmv&?i{UTWDk5M zU-UB==g`gXUGq6 zvWBJ>uj@Vc;j2rUMsSic-W&fkpV;Lx=#hE|f}l5ZtN;KvSNw{%S0Lv4zy3v&BNM6s zK6-R|a-u&hWNZf#p{vjuO7Hr#uR`kRNd9eeBx^ACkS0>o#A;O|?2mU~u#-a->I(r< zud);Q`HmZ$V%cWI@wEewm!k;V zT}39PHa@|4!H2@BJS>oH(BaHbBJK&)Dq%Ir?$}%ijz&~;cpO(jNothOvDN*hWql$L z)CX8R-i2~;G<~a5ij_%nKr0BAPWu5kteWwJ!S_FOl!3C%r zW8T^f$O*wmc$)!Qh^@ryVl`r{FU($H5N4fo`LkJ}du+cqiQ8`WM?})Iw{E%cK>}bo zrj=_cHx1U+X8%gkP@>1`RxVf{<6W`V{XmPtA&5M};)IXPL-Gm%970N*1>a$K@IsnI zfF8Um!M0j~AT%P9)vYgLC)T7}{^$t+X+oH$va``{>_6=<_jA37${RALF3yA)E9cVT z*!lW&GZ>87;jD;Sd?X~o+?vB^T-;!}ZH7O3WA~Vd{g)QUAYFsxP)Y&$!1F7VHo=y6eduQo+~^+_o~K6CBZa&Q6wklr|0f*h*9$*qNuT1(ju`e#fN%Drh1 z*tszL<@S@g>d$fbw_K}kNu&*^(C<}?0eL0N_X0JxCUs1qHjGXgFg|{tvl{FnSonCN zl-}^Se8R|~U_$c)LxT8`QIRSedDBd2#mobBG{&8MudLkzxU}7k+>%g%s!MPEhnBbS zVp;)0a`h#QvU7&)t;!~~r4owaT;JEv`L8vvD)@+zbYT z88RQ)i#!3W*VC`rqTN#9CcTD{x%I`X)!u||v#S+Ext>*Z#I}kl4D<(BVf2E2IsBYG z500@oV~IL_b!XERIJOVV^xcPlY`bayG`U!Lv1MXLx?cZL50JLFzX_glQu7d`%ViwY zBsw3omR79dABvQqk70&M|DqxO3H4RTZoL8==s6a%YGD5OTN#>+@N-K`+oaj%4B*1S z3Gb9#S^}3jW`f1hPh0wvS-3*XM9A2!^~> zLD1HeQSaP}U$7g)Wf6Oq+rUUne1{BpYVhBnB0Bznl8KpAl*D=ZXJ!{XMJ!gL3AO== zFmn>#q!%9_!HXX850!!!QU8{0sZ&6kg-CIce|5U8irsfMxJJqf7}|c9^$qO#BL?a%IkOu?ZvM{p9n<`#O&k zA@h9qZ-vB=HK!9Wcu-enPjimWjPp0}q#g1gJ(U8IML%q~hE%Ivb0WCq9EEKg*MjCL zY}}=_jF%><#qQQ|BFJjlE@zgrX}RD0K9~6}dSBO(8oz73ZZBA5d4S}l85gyYO3!>k2=vC>ok$NeB#!4i#Q2LCy=zjdAvBd#00m`=6j^DdKlL=$6|AjVRPvoD(e-)pUX&ES zNsNX6B|pw~Eck0$gf9@hib|-%NpUCH6!-j6NDp>^b)dWe(N1rSS&E*uXL^r7Al=kO zdb;bg4CIfNDU~o&j{7ro34QHv)vL_qH>OuZMwAp?W&V#J9G#|c{ehQYW2$kfA&skx zo3QkBW9K3@Z3G95_1w5q>;KE9UgO-I~-hg(tz1>`glL;&{3ul-eO0{#r;NX z^w18H2oqOb+OGW|#*yUG{}n`@FbYFsVG5oCM@MGP{I(i9){DX>AX!EGQ%S6lG{4b7 z!0k2WOb&$ot>*o~z-&~pk!5J9cbU!}G!t?wji;4E6bYb=u^wy^(6P`)Sv~N$@c=aS zjowFkJ8|s$pmE*i&#@pF53f}uT4V>A)OG9cWEiVpB!Uu;!@j(;w+w>6X48}q*X_+R z1BKcfm?6=bIlQ#o3#(>yM}Tlhv8?q_cpqVoJn+NM3^?PAH*Pokju?61gYSY5z6d<= z#vhJ2_#eUi4~GN;e$c!>cPBbZRB+QtmR-;{2I|;9AV&shw69?A>xb*9A7q!n9|7YZ zBWM^)dIEzOO7#ZZinqeyKU3QhafmS=Mxp$Z%7de6{=>jHUW^w22|)V}P7FeW%M2xt zX$S9rf;bsvZ+-eevWkk3MndKp59~5kM(=ARvROx==LXbHZ})aCglAoT%}FV%HHiFb zZ1m!^hKk$&}RR@Upbp|<0@HZVe?wRg5Z{W&Nkdg zhWv591j)`e`j()k9Rv#%yk(WwPf{ht*%M9?f z6Ti@zaQO>K7m{Tvd*6I*m|6r=o!)-c;OGhuWbaKA>%$j=i4Elr@)KB~H-OI$12yy{ z*?^*(4qBphQm#HIJoj%bnCmB|g~|<)fLr5@hG2=2^d^};NM-fE#|G=LObo|vkiO&fzE%K{0Ph+AqlOE4M@*mH0~ixGV8-eupqF&3ezb-{Kby!wogd7Q zo%Kt}nU6gb#M%7X)%gzT_z|l?&pg3V)5gy*O32t;(^xOzo*qL$Lds`w!dmxXzLrhzFrG;D<*20)9Q5q3%3lB$+#^_R=^-A^=UCyBUqQi zQ!3Jeko5e!??^=b?(}&4Upn)I9z!z zB!nZj7PKxRG)(VmA+$}4KPHG?2@~_aF5XHI-pe++e`E91Dj)|;J}YX3uF(oS0aqrj z$)N?+2mdQT1y7CBvc8GL(GR_@E}c(=+@!w$Xr9m`c?Bmcf=dq?ia*^6;f20=b`Pw$ zkxLyRabAU%=k%ZjzrCe=WCw`ypq#FxAsEB`!JB)Z=_(QG^Y3?&X zrIaX|X*9a9_JAFpxlSKDjk6%bV`d0U z*O6zXLEj>OO1VG=9)q-FhZ;$QB?j3EhC~iZt|J#&fEb|Ehyt9L64vw?=&w>R^vTpg zMbC-#R=&`fcJ?A?){Sipb3#V6#(feD-D8|71u?hK=rmW74_3(*rqCLcLA8fqf)A}8 z+o-IDYwHRdbtg6W!SMc@cDVj=rR1(j`IHAotLb&g4!bp({&!g~XjBMhY9PE&m4Pdj z5MfBbe$4X$>rJQXX}1e^RU5D%gq{Yi`!X)Gp*BZrBc0V>*21nlj%eU(*?d--p~lfG!0X2 zX1|F*#m1YO{z-!0Vj9_3D)PLn~A)>mn#-e5Ho zUMqWtYPy;yGm}BQ%rkU`PK3L!If=SvNJcKR;Yb=b$m~W% z5qA~jiiC;nF+CdVz=&ZnhfvW59#UfXpgSfjQzlZ)S3KJO=s9`V2$0YKhA!EQ^}fB& z)my$Ly>%HRAKIdD@UHfZ=D}CxiGpaU9QJo5FQA$@K_GQde<4>1TH2PTuZ(tnHA`og zzG`Kbadf>PkEN6;3@xXbCA;I(_L_pI7K(!_sZ~`~P)kzI>+Y3hR25H_7PD2=Ra6qU z)Uauzfe9*5&N`Mb=g*u9$}mT(=f4bmhVX!TAiTD1uad~W3y1mcG1`92Lkx6$LOi?d z0&sD7O1$+nIq@5}FQ!WWMrNxvcYaFAz3-?hgzrX z!VBzILLaImUx|CAI?X2k-F8v*kuglgqakdAmDA>ebt1Ik!1a? zt!6@qqRK1$)KB^?_oNotdG$M_gPA~5qEwGr9pg}%kQg5v4fc}g;*XpTPYZ1NrOFWR z07VdiZ+D4kp`K9oI0s4b)O!b!@PBCW)YnAdYF8 z#T3~qgcQwgTPXn!i*Q(_ueDPRAvl)dF*q2$E@vQ2)kEzpDQ8{;76tXg0Zibh8z2){ zYj4L#l100gLRs{@-q%EEn#QAEz=k>zjoPyX9vyFcYT!b}Y(@|9wsCDC2bAgo)ldqH z5J`Ejl91Kq1$`0|neUlaV(V@tW;R|!!KAtMJ7%1bwB zpBH>Vj^-?1GWZ1zA%<5|K!cPlP^AL~Z>MKL72uU8=JcPP$dcQ_vkF?9zwsZfWI zQd2ToJS?HdE%VSLLgDn+kN^If@&Et;0L%yf|Nq$day$g(yV>daO9v^Wnnbe#oQnp| zeCaLnmvW;^{5THK+5(&hMbG~AdZxod=kJkpccos+F}6^qLH+jd|LVlezere2Zl)&Xt}>1XoKDp~Zla|Iw9`=i z3~5}BDZM&{NoAx$C*GfhtEfN)&rT5c3P?(jlFI!QDB2!Kfk2O1qSU)J8jVL?tHKv6 ziH-vu&bej-2C65q&jdd(OD;w`TR&DVuTK|&IH4r$Y$f>>3Qk@Pb4d-{zO?W$&c&AiBRHVhNotXk`;c;mY80TMB=uvIC(Kq@!Hlw+SWuYJwG_F*`* z?J&PtDerdz1$?b`5Lz)JZ|Q5Kx>fy!uI}{AAH-w#$RP$Xbf-i|RZ)G|TsR!s45^9P zO}`%dm*fJxEd7i8e@|B`$zQp|fb}r_I5q-lhxW1ctJjPtVc>2?@diALLXHy^&%5b}|$_Owb~Ue$Mm0!djICdDpV~snvJ8-QfmjQAf52!K+R@a0=unVfy9@ z`b|>F%X+$UuE0UYhajhDA&!Y-{Fm)|Ak*ti*6mB!$MfAx`6@MWujG^T{3ewuE}Q>(7qDTx~OZX1^+Df>#1c4kl|ZHm;b<~C;+)X2(7Q-?7nNx2&Mg*(sZ)U_*4-@b7Z zk9KDggR4OEJt$#q`1=uQbiz>K5x}1 zKirIGKG+(uyuy0+%1W%3C)b3VU}4nZwP}4t zY)xq!TMog)Q<;FUO`4a;j(ebw;=sKNkwlj6uPkXhi)m_wn)?_@SGw6-xkDYADNzb-&LA`xCLT)Sn@&|5};N*x+RnQC@92< zDL|TwegexwaOuEs3!|hJmR@C!bA$-45F`aancYwEP)6?EgMN8kgV{syaV!L@Adexr z(6+$PJtOOH1d!8#V$i-WkBr(<#ZtZhAT<64VI|H&)QRDxHpMD(Wqz9JEDvx?`!7(> z2pGQz?=NEM(xjPmcvbf~{Daz5mVtes^iNs+vzw`)-B*T~v`Ikh_Y;&yUgwNXPJm@7 zDBbGxM@enJTN{YZ%kT_=xZ*Hw_$ERj6*{&!6`m)bRT%4){Lei0E2Rf1#h+HE8= zB!oU0;kfU4Bp}m!+7pENg-t>m%>Bj7K~Q`7eaLBiR9Uq#k5hs%m4XE5EYExeBibnY zUqA#vT3k5<`_0T4RLLi}iP>5$w~^$`ABZ|@Kn#7 z8=eYGBKf}bz-cf9Y;E>$E|F7UE7?_nPl94GP7`AR>gM1yt4SaKPAL8LQNS{PM_E=p zMg_naHZ^lfr<=yDvZ>y zt?rcTlyF!S8R4DDkw(4gxi1~F%Dn-GK)Xy2lp8%`g-i9;jzV~m$-|QCe_F#)a)`#6 zTsH>_Gh99~S z><;Odxo^8y5NU>3Nlei&AyD*gY2TTts{4nS#57GzB3i*G!vZ28jQ1t$B#3Gn?^G^;XWa%l3hmdj3gj|SnQ%oG z9VM&pNDeog(ICOdSKjiXJN?-B`JFM?{hddw5Wpo&HUn!F{tN(c7Y=U#=E`l+??XN$ z%)l}|i%~gX)!b$0irGC*aYT)Z)<#Vn$00Guz@`bzt4HyC!Y#JQp zemh5f4-qlLM*&dF7n;Ej5&#MZKklR#=awikWMo5))Xzu2umA{D2i5=p000007-5D8 zAc~Lx1|h_}*#OASNst|m9B4mAG|GLnr7TAS4iV6R`P@x!vQi68Qi*6GjWVE!(%SjR c1n4TUeyB1|v!ghzEs|A#jW51U_-)|E@StE-2><{9 literal 0 HcmV?d00001 diff --git a/test/integration/file-serving/test/index.test.js b/test/integration/file-serving/test/index.test.js index e25f8cfaef0d3d8..cb886b6fd2387a1 100644 --- a/test/integration/file-serving/test/index.test.js +++ b/test/integration/file-serving/test/index.test.js @@ -61,6 +61,13 @@ const runTests = () => { expect(await res.text()).toBe('hi') }) + it('should serve avif image with correct content-type', async () => { + // vercel-icon-dark.avif is downloaded from https://vercel.com/design and transformed to avif on avif.io + const res = await fetchViaHTTP(appPort, '/vercel-icon-dark.avif') + expect(res.status).toBe(200) + expect(res.headers.get('content-type')).toBe('image/avif') + }) + // checks against traversal requests from // https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Directory%20Traversal/Intruder/traversals-8-deep-exotic-encoding.txt