From cb04bf2ab8cae01abea62c0b3fecaf5bb99b8ac8 Mon Sep 17 00:00:00 2001 From: Rolf Date: Wed, 18 Mar 2026 12:39:48 +0100 Subject: [PATCH] Initial commit v1 --- app/layout.tsx | 45 ++++++++++++----------------- package-lock.json | 32 ++++++++++++++++++-- package.json | 1 + public/favicon.png | Bin 0 -> 784 bytes public/icons/apple-touch-icon.png | Bin 0 -> 4690 bytes public/icons/icon-192.png | Bin 0 -> 4864 bytes public/icons/icon-512-maskable.png | Bin 0 -> 10864 bytes public/icons/icon-512.png | Bin 0 -> 17220 bytes public/icons/icon-maskable.svg | 20 +++++++++++++ public/icons/icon.svg | 19 ++++++++++++ public/logo.svg | 33 +++++++++++++++++++++ scripts/generate-icons.mjs | 26 +++++++++++++++++ 12 files changed, 147 insertions(+), 29 deletions(-) create mode 100644 public/favicon.png create mode 100644 public/icons/apple-touch-icon.png create mode 100644 public/icons/icon-192.png create mode 100644 public/icons/icon-512-maskable.png create mode 100644 public/icons/icon-512.png create mode 100644 public/icons/icon-maskable.svg create mode 100644 public/icons/icon.svg create mode 100644 public/logo.svg create mode 100644 scripts/generate-icons.mjs diff --git a/app/layout.tsx b/app/layout.tsx index f7fa87e..cd7e4f4 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,34 +1,27 @@ -import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; -import "./globals.css"; +import type { Metadata } from 'next' +import { Geist } from 'next/font/google' +import './globals.css' -const geistSans = Geist({ - variable: "--font-geist-sans", - subsets: ["latin"], -}); - -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], -}); +const geist = Geist({ subsets: ['latin'], variable: '--font-geist-sans' }) export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", -}; + title: 'MulliganMates', + description: 'Social golf score tracking', + icons: { + icon: '/favicon.png', + apple: '/icons/apple-touch-icon.png', + }, + appleWebApp: { + capable: true, + statusBarStyle: 'default', + title: 'MulliganMates', + }, +} -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { +export default function RootLayout({ children }: { children: React.ReactNode }) { return ( - - {children} - + {children} - ); + ) } diff --git a/package-lock.json b/package-lock.json index d041991..f5954c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,6 +36,7 @@ "eslint-config-next": "16.1.7", "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.7.2", + "sharp": "^0.34.5", "tailwindcss": "^4", "typescript": "^5" } @@ -733,6 +734,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.0.tgz", "integrity": "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1000,8 +1002,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "devOptional": true, "license": "MIT", - "optional": true, "engines": { "node": ">=18" } @@ -1013,6 +1015,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1035,6 +1038,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1057,6 +1061,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1073,6 +1078,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1089,6 +1095,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1105,6 +1112,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1121,6 +1129,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1137,6 +1146,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1153,6 +1163,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1169,6 +1180,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1185,6 +1197,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1201,6 +1214,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1217,6 +1231,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1239,6 +1254,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1261,6 +1277,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1283,6 +1300,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1305,6 +1323,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1327,6 +1346,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1349,6 +1369,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1371,6 +1392,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1393,6 +1415,7 @@ "cpu": [ "wasm32" ], + "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { @@ -1412,6 +1435,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ @@ -1431,6 +1455,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ @@ -1450,6 +1475,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ @@ -8713,9 +8739,9 @@ "version": "0.34.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", - "optional": true, "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", @@ -8758,8 +8784,8 @@ "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "devOptional": true, "license": "ISC", - "optional": true, "bin": { "semver": "bin/semver.js" }, diff --git a/package.json b/package.json index ba2e1bb..9e7266c 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "eslint-config-next": "16.1.7", "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.7.2", + "sharp": "^0.34.5", "tailwindcss": "^4", "typescript": "^5" } diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1f961a7830fb95fa8e3e0bf20ab17cc53ed6d87b GIT binary patch literal 784 zcmV+r1MmEaP)-L_VUs1*-d@ZvQW!R$l}iqVP( z4|-A1iw6&$idaEKu;5S9grvI((I_bX97GRRw5>&H!Gc0XXr--bty-JJCZQdf*H#*v zwEL3MI56;dyxs4coq6AWhM^hd%DILsILst8GYOqc!7x{lrle={odj=%bk(o*)vY#` zDr_xc3zy($N+h@f)Jgi5DdDq)T{Q&*uaCM{G6`3>gp4k5j!bhYF4+T)GHX?bT{TRJ z_eB6_pNNEZo7!Ea2j1e`G1FgM(v{;B#X;U zfG`Pr`YKk!x9kKYc(a_)jKyAbVZ%E=j-?aWACIB?`ME-SpWl zAm(Hstq?IqMhVZnU#*xR)gli^`puN+pqq>;G?SjE-`%t+IQUoLG~y4h1=^-C@0HsC O0000tav< literal 0 HcmV?d00001 diff --git a/public/icons/apple-touch-icon.png b/public/icons/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f70c6e699b379937dd979f5897363676893cc08b GIT binary patch literal 4690 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 literal 0 HcmV?d00001 diff --git a/public/icons/icon-192.png b/public/icons/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..a6387e6ee6c786536ea2f5c37396ed41957b396a GIT binary patch literal 4864 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 literal 0 HcmV?d00001 diff --git a/public/icons/icon-512-maskable.png b/public/icons/icon-512-maskable.png new file mode 100644 index 0000000000000000000000000000000000000000..42a05a8ae5384482193ea5a6924901d7ddc75925 GIT binary patch literal 10864 zcmeHNX;hO}w|+w~pa#JY6$At*jfRRNl=CWA!5Z@TWVzv zbpRY7h|EJ0pa_DD5h5Ujc@zR6kOVT^Hv^b^zd!fSUElp7Yq657_uc#KvxjHzv(LVH z)X83DmDVZ%08|biI&cgC6u_?vfHDmHV26HK06$g+96A*Q0ISu-{}3QCSrY*Cfx`!E zkB25tc2C5)yM~R-@YkzuKE768eP8Iq1j75I_vc{8%06ycSMjOxHsqJ{mnu?2ZT>w))$&NPi-lR|5K2 zMe!3vG@(%uP`tDBfTt|?qZlUtLs{+1YsIVOpQtQ9xeA+y01yKyW3Qu7ZODmcMLQ^5 zEQd1W3ysdMz2at^O8!idHD$dtCX{-nzaJ3%=wy+oM3(5*nCkUpp-hd(1fNfq^A4|=34UB{(V+YQE{CrT zy-bV@wzEo7$2kzAr3|b$v6TVRK0wY#SIWg=grXcfy1a|a`%!>~9LXoxa`?K>YJF4! z6dUxUP^YGH;j2-lc+|WF%Jg7AXX8^#wpiuk+|7eOAHrGyR2)^7yON;Mcl4NSS372I6`(;wM2qN<0eU0Vg@^(u(wyD6|O5+Sj* zR0oagh-(nI1eOqFxH2$=OY>5@>m?IL5r9w2o;Djnce~ezSS69Cn|~dfT-~@sXt7l+ z!0IIdI$+T>&WfU+8_+a-$8u_6 zJ-st3G^FI>&||j02GNxt;sWwE6nlMMBQ=7gZiq=)RmQ7R-5?T(cixaBrrfLKW(WV% z?aZ3V&lw8%00G`8I|ekKxj5UVeFwX6(%JCdGi}pPkF3M#8nh(X$U6D~FzmXML9O)m zUJ5wzkBzU-B-wGSzeZ#x=&3}nqaOsHr--2)@f`l4HoTnq*Xmmn>EIsy&VgFh*}EqB zmZl~h`RNL`P=kLeP({26i31J1r52GQosIo1_`8BB+sQ?5g!U5$`70zOnd; zI@FHr{KvK?*|HpR9iEq4pxZN7S5QTKixTccNQ6%GOv}H_AG{e{lOF49@%f{_@T01_ z*wh6Zy~45>lw!seuKQ}#sWR1Du$E|;wL)gv%3Cl6>dX3qs(VVQA0?Z}+KDZ{lGVZ4 zhgu&xlCOL4c%oyQW3tRSZGg~$xz?E{-hCydG~%c5zXz&kt`Z0mB?rP!(!d3LS6d$| z12?hrtya7=_du}2U28-$4fsjTOYpN;eX%FpK|{Z99f=xzEx#KVBRK>KbTegDu8&p_Oo;x{B z5#IET4O1bllz5C2>=iFT>Sat&aqHTtiomt%&Bql$2OOFAA2ZdI1Tm@xd*K8WBH;wz zm@^#Wn6mdTzfS?g*tKRb=i4%Lw*j_NQu8Mf##(vLWCl=-E-Bcg>$E~A>0U!TR#w93 z10OU1YwjD$<%{NfXy5wCU>cIfXRVDMKxoly0I9}p5{AC9sqrv*waks@?gtHizd}Xg z5{a5Q!+ssgnU;(fFMs@^m+sv4IRm$Au81MTb`pN_%^OR2re*z$mmXi!dn3RPXN^0R{p0wQyOQ6I*Kis0%*VmgYCbf*V{S z$?NmfL?LF;|IGC7{eojAnw~Hzt`UHM;mI(K>{5$zQTysm#`iR21UG-7hEJXj8ebWy zXWXN07ZZ<=0TBV19ybq|)dH zAP@S9C39^t11_SW4ldNxyKz*Rug=k9nh(uk3|+UN>Mh>;N<#Q`~1#s_)FO#@|4m(~vCTw$a~;d&Tn zxGR(U*Fj_6waS)9u84lFUgKnSr)IwF;~+Y&K3aNKxS$Mx0P4VqV7*{Z*%2$h-LexA zAF;H=HXxa7#Y`gc^*6k}L9n%uErcaQsR6hi{A^rPuPR~D~An$WCxNk-yi4k zekKJhp+T1b&nF-Lp}M^)x5xCPa_;*r)b~>)N%n$?w4$zXQ;hDLFY_;7sM4&`T*@`K zHty{bXHF4ah%XzOt;TDBr>Wo*KC+C~xCgL&9pqRtTETo;xPz;lIt`}3Z^eO(eXkim zw(WnUNE?6(=uvGXo-nx!zMtyzyRU2ZI`05*9BjqbHe8oxW!Rl))e2s;# zvG9K#3t;<#@Vv^vGg{yri@3IVskidWd#ZCO{jLt+^7-_ce{YiblTIQo0o?XmFL%n( z)KN<{BDcA-dqY}V2ApZuJW4R%Yr$VNqEyt=%EX9||0lgACFJo^t%%-&+pQd;N3sjE zd*Gik=6}u;pdre zg~*=3hT>{GMpB(h+iY#uVa&35b-~CS?w;=8ebFqb;V)c5azjibjI448#*WvA zht|Ac$C@T%+$42zwX{2(=%8Z#X0ShxGg@)Ht1d}JKwl*P^KNfXruxYmoLP4@H2 z3p`$adMUYdJp6}gC>-9|BGq0QlKZI~lQe&Le(+t~*u10aoZ(2RsqvAZ{Had1mq@FS zGTnTL!O`HjA9F*C6*l{r0Q6#ma#B`6d8rGL&NND!|6*TvhR_^S=r+^2r*6c^~&r}u*=T+xV zk%Js5flbgZm#3JExLgvS!DFyQ^_V!y9z0suL!-BV=QVfFoX^#52IVyo?)!w@KTf<9 z_mrH(raZSMcjK;Uh8{omcc)i1=+r}|zGWoT_anVvpRg}4N;J$Ky_d20lVI9-KEXxk zwORDa@>DI#Lg_a?)6}1DXC8Pd&rro9RP?N7m7MMCzrq8-Ouq=KnTm;QFH)p(v>1{zBZ$cjz^(tvk@{!qLej z^FPnyhDKBeL9ZP6!;mzJncaS0kSS(5$T3NASC~~-WQZesPTYz#H3Y4?#z={N13nlx zrkxdWsexE+Z0)OqZ|m%$x#}$jE=;|cXszp>phaY@FKwSAC17wBB^FNQM1BtoXX&iQ zW##Ji$Jm1ok|1-CM=;*_;_k_6{P=;=vxiZMO@>{4l*yzTL&afl>h$GDlP9|=kNR9H zs!G@PjGj^i8v!TX{KbwLBz8=&e|eWmRq`txRY4b30T0l*ydOn4@L}V(_&g6D z5{=(u6NToL4{`RU#I6;0U3OL)A`tPG($oE0`SPp6+4^UFatpd*bualK#0f}WNyb~p~`fz)+mu)cE%MF?$=Kg zla#$-KObZ;_XZ|o(~|be*4Q5tV!UwNJmFy1QO~`X^rD7^{0d)hGW|OA47ywxoGru) z>L|0N8=`WHgkmg_w2=M`3iaONn&~AEh)$wGM ztXW%!$l(@0+ie~;+$6w|IZ@{s_=1T+Z@T`g#6F}lJ&U3gQl=zspGbO!nKR8;Ubd%a zFiWRLflC|Fb9mP7+k|SS#MWRUcrMhRT*<%XL=ZT&+Q zWx1=Z2z55FJj|r~{u8Iy=zL+wekDhHt#4At!2|a9(PmRRAz&o`C2eXT{{W6Nv33jSd%APynhd&?pesUch^u!$t;y&}ytAY|cL8=iMW zzPn<4U}+z zU0<$^A3973DrWg)^^|UooO`XuVfN{{?g;FE5b z$z`BD%v#@ZdS6$0^Rkg+tTt1&A;WDoozYEpAdcNuBQ#TK=YK{T zaNWcpivPQJ9K@^i7>icn^ZjF76Wy*P$`-t@FqL1<^Bg43EfDe5iCqiyM&{Y{q>Yj1 z-&I%7xh`F8+@TFb&mImB-4zwi3=+J7OnqY4l9Ds=?uc5m>r;K7S zya`YppWX;x=_*C^Kdphx>ZGcxXA)M5@7@QV*b0x}wiq_|%>le?5ep-;O`ATp;y2*I zrhZfCK9uti@prt7Fd+luIsIYka)$0flQ`hb&-Bjz67khj(q*tsr}P)pM-fIAvHMNp z9{NKpX-*L}PP$BvR;aMIK)9Q47-F5I+e6-FRTTNFD6&|J{l<7lVJF{;hZ8-!%-miI z^puBn-04|FWtFTkh)@8-N0#CvOt@5E{O%`lqXQPiF?6M=Z;^2W=Sj4GXDCM0$#Wqm zyaJn_wt?M}j8P)a81)3Csvh(egTnie8O3Oc@g}>F4Y1sjrb)&w763dQXFOS+I+SLUwoI_YL&ZZ^SPUt;t@yF|-Cb z(l{y<5X+~V>lbJIi5&)Ep1G_lJj-X8u6udNXElpCt{Hd-)XpIpl%Zq%vx>ss(jlLU z`pDkhBlv>tsPcfK9WxHrBGFrx?Z4%_p0LRpTB8BZ-u!Prv%J|4d!uN7Z}QG|?O}Uz z!@JfnwZ?EEIvsJsHl$t^3{RzEFG-6yEwqYJc&~*4Q|SRyVU$=`7^ zsV45oekoan4z7}B*4+39VfIm!@6)*1Nzx}31TBSkup z1j#n4wI|rMr;^h~Y2-ZZ@W?=KWEsR}lnMif9`~DzFS?RU#h#Z8_1mCXOH436i5tm7 z5t|AX8rxC<-fJq!!xMqbVitqNW(K3IbwtRI);q9YR-j&&6sQ7&(2O^%NS;7_Vb2d? z4RMQ&SB8iW@xxm=!jbzcSvcb?Nvk-BRm+E%h1p*d0$IW&|RnU_+L^V>}>88S5_tGcxkAOP4rGd zt5EnnO82ufS#%5b6If}9(ZJVxdVa-7y0P)%S<2>Sx2!hYo~NSMpOpkY4~3E906QU# z8Sns92G#_N7BH774-`v%(Fw!D5j)F`1T?UeS@bJT<1(L#uW7@ji+erT7)q~1&*NtB zk-YVS#t8Ihx41nzA3O2q9)zgAe<-pLoe|=})R`gbZ2FDBuG zG}5Ciz5`tvp5n?)hN)%C4f|ZXy*!}=K>OrJdWyabhLsE>b5sH4M3i(aN?!{+zew)T zBtvMD%l)MZFbDY=B?CDLisZ)8)Z_=Iu9eD@?6FxAdNh$vwFdOPg!)v;q#HPpCcUwg zPKrsArfdjKetPNJeR+0T@)F3+z^P5i4_1Ad(n|C35RYl4@nXOUHgMg?wlc^0e=?`_ l)u^DC{>P2F^D#`Mw=-tmuIse#4*>Xg*v{!d_CD;@{{qDgKGXmJ literal 0 HcmV?d00001 diff --git a/public/icons/icon-512.png b/public/icons/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..678200b42839e59fca0fda897b7c7919c34a88c0 GIT binary patch literal 17220 zcmZX6c|6qL_y3I1Afr)Kq{i4O%UGha4Q&*WN+~9V$WCGG!>BA-+APUdk+No&ZDdc` zvKvg63R#BijNg5Ew|zgqKi-et57&9!bI(2J+;g7i96|bLPI7GBvlRw|acFBDGl0RE z!2dGASdrkLpTzbR@DH1#meDO3jGYVm4-R|!j0Xn8!nBWRoF_h;jAMHicfox_CN}Z8 zY>a1jP=5ef)|R7s?Bkdf}cmHgGs&CPcHB5+O}2Dy71D0TK@)BOVPYx zrkuw)$eugd4bnT90z~i&TjY!eHoj5Khs4~(v^dc`-NeB?Oo>HEzy{+oOA zYWX**C!CsNouv}@@}!=*1dK%%M(f8Bw$1MD>{7e#HK{PsucQ-k>%JR%sGGWcrO8eI zk_L~$ZlrrRvwOQop>q^#no@qtv-8Ux#F+4IA_v5>1<#uGR_D-8~2j(nG3)(weu$Ke_I8T)gwYfI&+^U?}m#{Btmc{*8SUs6#z^;d3ekXSKv=~i- zIe>G2gy^Dcd7jhBa<{>pf&QCiw&!GY0v@v1r*SyneqU7hs(b`7KA#Z*i%>d31(L*uRFpKqK(V{x>CGNEwJh%a= z&?xqy+T-clumSp~T#k94xpMftx@~Dmgypovl2HH8<0<#u)DIHW6pGzenC%9(Yo@jY zD>>Cz(nF&{irvGXt4Atv*;ia^_kOeYhE7{N3#-6+)}A}^2Sn=!d$3*8ML{94-)Hc} zypHNh1Kuj-T^gP~V5g}mYIwMvQ;J^hqo617tE;S@(EhnVr5uy{TrN#BVxzvkOf1@7 zHH)?9u=7{0*!!}!gq>5-;$tz9|GKtOCZB7!9}5oW zk0LJOi~9~6U^T7Kx~L8_yNJ`;@3;v(^)iUs#+n-%^M%@etVwMFTk?hM9OvvDujD`C zf(Vhi_=w$h5e{cqJ1#zC+P?q!SKY(rbyMCpo7Cc8L;Yo09DQM$TOM+Bs4EesKA*ue zV<`CjJVh_4Qobp1QJk7DQi+pU^rvUn1CG+*sFyPg5^y>S+B`{XQj5N=%4V>U` zV-^%*VJmU5cu73lwO5lhU;ML_!`lI=&NGtG7hQR98dLE+Z+!7gC&bB5seQ|BMIx#5 z_93ov0y8kATsfNu-V7Y=jbZmgtm4!qs-S{^t1VPIH1M;&C<9IA60H$SOai7^2BfHI&Qe11tK&T zt5{kJbG?oQ`vq5#=u_{Vqh+;~Hw4aK>e2UHT<9Rvv^_1hH*aZ~)pPrv4hH^MdX-Ba+6jp5B(MKLfK8V)u6gGJ%jiTV;JVl+-&y12_iSN_)9vQgdukzGiTYK|Z z-8kB4P;ivGq!%1tbHOVul5Q`geeXR20SQnCXkDT5ab>iSLduaF_VfC~qb$8#5flUu z3GR)27Cx<%gi4~OK@Q@6)RlR$eL(I&hfFEVZXq!;T={eInlDm1v=1)A1xXEcDm*_~8U_s1)4IZ<%oFe1_TL&G5+l9X?sIQPfI-?Ry~#<@ z`do=VD ze2SGx)!VkI1kOz)HhVH#$5^jBf6_ya+46nO8E^DZn`^-o65ak0N50!R|A?pQQ5A)R zf}48C&84mN_^Zi%>mnkYp~X58%_*i#n=I-ZBTM@X=*~O9&tvXq#ieXh+dMLk(*Z@j zadiItDeNAXxA`)^)JzjudiyL>Yia|t+ub80n+Ks#u&AP32|uf9i&C#R?UO@y;NSqa zd?WnYD#93W?>zN;5L2HYhH zI46^! zi=mr*7RKyAqadosaGA75)qIJ^_`GvF)#t3Z%!`ja`*qY*Inz?lrlqkueWtTFou_}Y zbvBZ9j_iF+rno60Q>-p{waiNT z`6S*SK7aUQv^g-MeR99no}i+!;ZK+4&Xy38wzr?1>qE;E>^ts;Y?>yImJ)bRKB-`$ zg<@z;9e0EO`)NHAJh0O?T~Z26Ipqu6?V?#Be?#)KmDLC8bo|h;%#y4Ip&c3Y>(_T7 zMC;ih7uoBAI+!FheyewgV_z@lrWwN!Js=EN>;{3X-0?%F$0t?lJ&KL_Fu&OAL-EL5 ztay{k8HOM>EuY<5qfCF#UCACIW=7 z->dMDe*{Vr44?LCV!(oPG|FFYga2o1`dZ*AOZc4bcjrR!E5#aOp*A0k34QlHeznFo zc8%tjAcD@k{M5F4O;c!SgHegtE$Zt^AEa#GTZvcX{T?#?tTprA9fKM@&%@zsugQ9- zN^%3crPv(*JK>&pc30%03vBzIK3k;KG(1qvo#DSy%h7A5l}DpQt2&C&1m>$VTM$O( ziPE|G6K0tQuW3wbaZ%^S5xTTW&dlX$n;ze*Q3%FkPbON(-baVQ>6)KZ-Pi7Qkt>uN zFiBOdXU3rJ_z|nF=B_Z-cT;$uRpNK?&P?r?JQ8#Ig4bkLJ4+OWEFd@2GG6!89)`J; z&z%rsgNwL;eAmD6IWwxbZDe4K3w$&cEeZHCH(mc4s;dN>SWz63zr}%+`#=hcdcC_T z-Ky&owceu;@2StG!m|yLv2}pPfy`+Hue|2uyBPKh??&S~8x<$vA~Pf;3|WuBncnMV z4j5si$a344`SgE=F>bZF+AuM1dCL?{+a~Yv|tsR_SY6*2m;1949G< z+jIQ_-q)B-CA(^tVt0_hAO2wI<2s>T zK7w7y2Vs?V(cMxfZ+3OHH!>Fo22~&Xa0KxbT3-X}C7!g=lfCl?JLHm%#06DVHy{u< zIn$U{_Hq(US%{|N`MkX@icgLd6wZl2ZjVP)2g9Qk3%0lPry#hf>r~F7-5_eFFkkZ@ zx#O1?d;#vQ82H?irlz{^s#~HHibFG^TviZAX_fW3h%ImTQ@kw88@oMe7929{d$5Fs zqkDNjzEWNP!#tJ%3i*LKHtqTak~?1daqA*>%DHcH z;L`qgI*u2a_G*hcpv+Cuw|Ke2hw13UD6x6|PCVYBf&`1e_i| zPI!`{BJR0t{+iWV*{$<{PQ)llGpAl2aeNmL?b`O9SqiheVrQ+vfQ7&E(LP%y^odw_ z9<*&&eW9EJy40)qv8C?#n0OzplZjbdU>b!r+>*yDEcewfssmEJ)9z0=rfgjv0To9e zTWHXpTA0W(57W|BYl-k9&(&Uq=K6~IoE23YBEapCK`0NJg|75PxNSsk`zMhZ)B8O5 zDy}r9kGiwD3M#2%B zvoN++Yo>Rn+*<JmAHT z0dcI%`A2*Kn%P(VZp~iefE>Yt$I4Vj4k2C!S&I*+oFp2cK&OoK``#O!1n7z^1y3+X z>ML%3RKQ%EgTn6m<>M)dNjXA!6N$;Cl^5T$1LEawgslU5uM$I6Bi;h*SNt87_yefl z`ts3w3?>@eXcj7!d_l2(mFE!c4tx(uCGY~=IYu{u#nL#-fi}V6(Hlta)N3Rp_S2AU!rmvbdq>YX%bP+kZPCTI?*y1JF9YF^w>cGL zsqbdxy@SLT@T#x#Os-tb8SoB)Bb|8?;aZOl^@)j%s*3SWH??OlK%N1#piR-ALe7%~ zxA|;x0^BB#2QBi6hcenAZDZ%vxCRnJ71aW>3eNR*)<1hI;&s=J)Ppd94%i`BRkVZ< zR<{A0YQq7ko~Hh{)3`SZZdsPSCl;RV15asNJ#5cDz)!QHz-yp*M*NFkc;}FmfL@k- zUll)=n-;LpXNUT_zQsf+c;XghSaS%{dX;Fg8SE2OVkh+3x`3Ahz^6Qym168v|8!X< zHsANqCLQ?bC+t}s^h#K2^G&{7Wa5v}M-oe|Km?KS>Yj2%@-aV^)ROQ}BZO%gHIYFE zfQT$2&}Ow4wW9`bQtY7GIoVx})p(A_5DP^JPx;q@b`HMTxWt4u zXo3x$@c{<>+?{p?6N02!uk)XxX}sgbQyU;26wp+Q7nj$Dt8Z+j}bTx~J**ETh#H=999H0I&%Y;`nx; zC+XXXrmLzmvoFp{FzP;LV64m15sIc{_#Rl(LIYw1uARU_=&ZS{I>do5ChVN&KS|R# z!BhVN5+aBXOVrWh`LBfrVBOe3gc^HJK;yWIu`1xgGJW{i1| zpJY(3w>N=RC0l4*W4`@?4a~n}2OiFiob7-)7BoM*app8ZwdnS-;Em0IcEC=j5-m7` zl}Ek20QSq(p!w~y07g77GOLi`zxmqCD2qj$$8SN5l`&I#)aD*7vmsnL(H}IdK@=leV1TWgx0^>lowL+&eHkW=++Se3Hs_bt&Pfy@{la)7M2R}q2 z!^<|0z(0pZ+U5dimFhZ`ei2myr_ER3PY&IT_cN>kJBBZ_AY6r2X6$>j`Cxn_k}zgG zPs>f%Ok6Pwh=NX15W}N3RrWyGT>y)J595HLB3MlEITL)#8GL5;^#9WQn4$C^d^zOX zzP3;`^cBuiH{u5rlLw2YkVY!W<(K*v`(WoitR3_!D|ZkhZXz$iTlf)B6z1xozippG zp98{_?8W^#`Veq^Frdsl^=QOS88MD8D;2Bd3x0scnjRknkT%`^1p^|n`%B_8>=)&-O5L7q?3Pu96Xp1GCO6FawT~}Y>|nO3Wmi^V zz}ygsblCTBC=bAvD8l+P&G7j& zp9!3V>C8^p^i=i#-KF}~+5!Q(rV%#SI$Ut}3;YjFydINqGGZZhgFc1-c>O))_uV>A zR0inBl@^X}-0WpJLDL}cm~O%QqM(eXr;2P&%GOB)@I!ikZ2;8SKS2Y?Sa^Z$5XRLBRa%?{DXz(QkYS zZ*G@VR11r4{jHNPao`vOTyF5S)CE8A-Yfkh-Y*LE(G>7KrxlC%WP^g3etQ;)FqQ$6-3d%Z=hpG8D)qd7jcL^ywyQ3b zgn9pej~Y#z3SWe&WO`$PzJ~tQS8oN_td-YRnvu@+=YLFM>#!evDu#%rocjNm8Gr%M z-fOF=)W6JcnWbdxkD)1k=Lbh!{^zKU=+g9%MObOzzk<1@f*Y`tGy;D? z0^!`}Ve;O8`>E2SOOIji0M_LenOwoIg zx!#PVvqO~amlqFSLWmwVcUqF8^lmqnANG4PL(okVPkni}-)nVrCk;{?QfVjj9(%fGk# zBMn|8J%DiB`L8@dfYdljmmr0-|BoiirLu_DZxI>p*ZiOBVr$!%z_b+q|7qqTrDVDq zNt67aU#HLJ6WM6D{+D-ND%pM!Eiz%lU-^Hv=kd|`s$}PgiWW5x5X{#8b;OC7Xi$Z6 zV|sS?-_wG~kKx{MyYb3Ti2r}>HkAd`IWy01lNY_VgKGs#hVmYgCoY8TZ>W*W;`SpM9>H$l2)#)D|45HW^H{Wk**Xr^N{XWX z?AeTYmT!sBcjG@@3B5?{|9HQd#G%obs(i5Nlxw@VkiReK;T81$q=himJy69fZvi6O z{V$QJX6l)N7jSVGmwi^HeSz0>_WW^$43(LjOaT3M=fbV1tm1B|{8&Gh!=`_qncW~Z zuIRR*57Na=mF~*k{Bv1{e^Ng2=fSfpz0YnyQG?oF;g=9i{k>dgkd%_cJhdjnm)bAw3+|)j~EFkocxb1<`GPq^OP|F2=1Z!a$3}bDu;IoIm@!SsVs3n^ikl z@A%ZBY-rHmy9#B2UM{c_2B4F6E@ z{oLHPyCc&CT^Q2Pvb`7G=Jp^0$oSzG)N# z^oftuQ1)4@n^s`G!3yOuzvQct#5-f(ShSpbwc|FT<f8O1>Fm2Y&?lpq)c8{E)TJ z>b2UE&|Y;Avq=6Sd;;e(Uzfd=b}#aTCa5U(s)Nw!-__yKq3xSy-E6&q1>9D{0MG%V zDuCF0AgCR_&VjG#3j37+f|wu5JQ7n;d3SiTWI|u+IG)b)1*JSAfK6=5MO++FAsw1$ z8{rGmd5~*z{W+UCg}D4}y94Zg)SF*f=PzWE6;v{*y`=e462TJ{YnOwU-Pin}z`$f`WAoI4^M!z!mgQ znxLgYV(9?@2%i4tUkkJ&C_)*!OlV5?PJQ3Rpr4+ffrOP??2e#x4=+{@`VSoHZalniwB(=G}cdY5hDzKfA%?b-52U?xhZKuF40-N z2i6RKuLfPXuAK*;r*(4KcD=aXbA z!&QPK2eg;igBVWY`Y*B69{{zkocL!-iWNB^ZF@Ztu%6Cdx28Ca;w0QFl4GJ{~a z&1>+I19hOMUGyA-ryyWPdz%4Dmf!nfcyR_|m(CJnD2T(oE_pGE z#QNM_n1&z_^B<}+IUdxto~-?&+M-4Bq@aL@7m)+AkI=$b%k2oxH91#>ZB`ZYsIc_0 zD+$JoYN>`O``D<`WwGgt8{QBca{md-#-$Ij*H2dMhiMDzX^$La|0c{|K~H#?pzdOs zYs-g08 zuaq*iYA-ieWFJ{x=vQr!-RO8dg@6!;8qZOOT&P0u$-@YtARHzs=V;!XK9W|L5S8AW zr`T$!ayPT)n_`%D-);y!Igz+j@}yXGb^78DN79{u2M3WiOc*^Qeiu$Z${YJ~P)}IQ zc>cJHF9aFfYyeO9?o;j;y$V444=OtXmqWpqeq~hMlh!T}dEpjXaiPX+wV6fcl&H+J zj47xw16w7-(1@&4y>;q%1V_g?zkp*8T#+fpj@O-6Z=pqvTKf<9#I1d~BbK&$0>VCK z_Q0mq2>XMF7`38BB6!W`S_cqLM&81hZ+td2bu8f(v+UyxsJJYbH^e{EYWCF-Ewxj7 zRDT^uiV$wAr`*d_6>@iKOc72S?|XOn@aVhT4sT%y#ro#3W@8Ad3o%$X1go~7E^4hx zYLK_Xa;5GRUCC?Z>vZZW)az1D!w}sp)9)k;zG;)1X5O~r*kzt2TE3-%Vt+%(buPyb zE`$1uParI$%tJr(V&CcGk!;Rz#|Ug5Z(!FaCA%@3H!W)AjF=PmBQGzn5f9U3GFNim zRX{rMW8BYe!({(ETfNCb&@)x>iURIvs756hkI~CFpLO#k(Aq%~; z6kW_PeyEU^JmHh8z~9_bXy4ac6pr0BQPZp%VZ1&vH1a;VYjRELXz0?Q@!ZH{XfyG4 z|GCiS`w6O!JFz})xxv%&v@M#TAXoDf1a7A#B=#km*q@Ua9u3ckvg;)u8yO@o8CDqH z?s!xvqE5&WU;aXl5?1&8v0`F~IB{gia>I6PK6E;Gkhh{_r?&+i-M%h1ljsP#yl#NP zQ)_1KYeO#uP4C1&V^7DQ%hTG1|HkNaNM^ zeGO901F_WQwWAGX2cmx5_cT;%Tgr`%8vMMZgm4h2s`})OjMuu=Os{o$HtG44xf*@0 z#Mo>L89LB$`#Hw~;%4tkB-n(vSz6SPuX}u8QPl?NG%^&j0rt(*I0ZwZk^t= z$`D}`G4nT9ud>tiFedGXV#6&vJWKqtF4Qy|(}$kcx>Zk)ZwwGo^h+x;+pEp?Hl1T_ zRLayL9}N=sCKBD*=Gx+_gJEsgfGzpwO*H0# z4BCg$9#=Ks=RoUc(52TIHjKp#4+UPEnkS^Cemc+4Ta?!k(<0>^wPHK->c|wbu{_P< zRx!al%~kc&%WeVO7T7oOfwf1AX!jT|Qv_#-tyigxTA0#|{YH_3dS~!p@oGGb-YxAp z^!1t&j9w8MZxzlCKt>Bn_VCp?sP)l+Z{*sfhVbkcjZ(7Dq2N0|-?}vaC~c5dd!#;d zx1zP^YlV8v^j@Nw>4q|DNVe8&-_$DW&^mMPFbKcT@DjhLE>GSIr5$#nLtR1HN~9z8 z#eoMR*Pka3DLbAlU%HeKIrIp*+Uw_d=-p3xYyW*MJ*sm+>4qi=HPt!|Q!-X*C(w@4GiFMT716zUy!Pic6mKCQ; z?7yC>?K;xI5?PWFC+nCukvF`DBEeqN_`(WWt@mpF&hTq5rB6BvC8{MHTTsPmMD~HUYtX9F zmE#hVq1tk6LB(pcqvC9%qRMKl7%Xx^72c9XM6K7&Rj*iHSxH|q5S)aVTXkE%XldP5 zr&-Ueq~}cu(s7@uUKy3z*-%tt?^{`BQ-6o{Rq*b zRWseT%#b?=l5FTn4=r?YBQVTu?0V0hohma z5p*210$3_<;+g=c%oF%vf_xzK1hrLpt&vv5;?2n;my99&!rwRp4S(Q@E@H+N6)`6^ zi#<>UpzVR{9BtC%JDdF+p;0?~ah%H~Y>u=>62>T3vP=n{Y1H|%k@UQXO+P_T&}Dg&gSlP^eQj+ZS0@(^|qLWTwwJW z2zVe*8*1~-ETd>*a9^`(`yn9jpt{bA<4*FPOxZiL!RHiJa0DMC`e(u!_?e^+E{jJd zEbMQ;`3bg(4E(AK^tWn4Xq=r+(Sl<;8cx+aJ3jCoX*8s&TAs zUuW-W_l1WeI^={{_FgR+z8CtQPlgR;>>BRWV5TGrT(y`x@e^05{QOd9 z`Ir6W7PxXZ+Lwck55d#XxAd{ULd?fa&ly3b)c3mog+406*VV6 zOWuZhupcez;wGG?l;QANe}J(@R^B>e(a?-3Q!D=dc4ASyspO<_WVp;!kkVvLBa*ID zu0Hh1joy6yGv~%9iqaa#uH8~)<=cVd+z7904}LDz%C~7HpFpl#{>G%MMZcrNC6QxF z&dw_Ew!5Qyhy$~+9L*c{)~Zfq@s*-V0+kM4zU1&}_Y^gQ?dr;e#qhzM74n&=pBw!z zCgQEfl$;QWYEj3K@r%=wDuGPT1azn3)GC<^kMUsyRWV*;1@2Ni8}q&ST#cp%*Pr^X zt#%7b`b_zajEn6S+bvyY-(91|Q0h`~_Z*hL?i8MISf8%ULfF;4K7B8(d2mH_-U*m= z24FVw4CuYF>5^{`7{Yvl@C?rFV>2{eb)T!Bl|Ibd(B#$`@l4&3wx>H6?QE%N&Z|9q zvE+M(>I2;+>L=C)>CHofHNLsm=Ga%u9^ibwQ5xAZ#66s-;e%;v(ja|%0CJ)`&U$uR zYm};>)LBvMn1@PWSMQax#=+Av6#5ayr2_*>EgS1}hMyt#MTyO~Cl53#DxWR!N!kuT zh}B*k#L=)4r?IjM&bre~X32h0{FhA_8+A1s+C!Go z6nu9Fxi)kd)T+eG54S@dHC`cHTov718~NY(2ip|O5f0U>J#7<@$}_44XDo|?W4G2! z?-}O^Ts5HP&wQU7e4(}t$SN2#<{l__edZdc`6AW1tk>SZG<6$a(zu3K(3v!u;W3$7 zx;>-Sa4n26Z8L9ijP9hhWVY=+3H39v`R;haIWKlB-$+)EbWu0kOyE?ERDVsy?a9w2 zrP4(mlf=d3r5?KSN`(vv1wBkV+D7W*jm8-O;MfDT+YWf+OQb;~F17dUJ{8Rla!izO z0X^L(_qaQ4%9rlWXldm21+ao<3}YD{94=>;EvH zNk9|YZ(j>@pz#$+=%vM?I7WYLTue)_TFLd9q1+kw0sDypT!-CEszv&w*3r3?z1K^P zlQ{&EzEzIg$$eB}s6suj5xT{f)nW5o<;GF67 zvU7DYw5e;?xs?u=ufKov@SyjnGKrZ7@W#3DEMHOHn>D{OhjRM#qRgSQ{g$9d<~<0D z20=ZQIJrVLNc^zIn{{wN^#zAW(l?D#MaEF1uI}!!R&j<9eVM+!rYWtQ`N~Hbp6&*c zrw52KlTF<8gSoG+a3&x`&T=cA^)hYkIx%{rJaT9qA$HX*@?93VzOG8Jp(T<=D_=PiTQfI1LFyDoU^% z`LOydwVGaO(`>ckjNg-Y^Ym5c%`^*4?BwA%ud-hqi*&Q@+Wi=()FxY=N;`4wjhFE{S8VP)F{4Tbp+mFc|TR zvQsR2lt01xAsfuYU1W*Tswt>k%%7PewHm0Tgl(+ff2R(FVDGzu^-VKT*WYFi+Us2s zgU*-YzaI$kZD~s*o;(E{<`wYx-CPAxT`v!=-1VtzKmPDTwkecdYS3-sOz&K{1NR_s zkm_IWY!vS{6d5cp5nGk@K)XT{!+zoLQO@;hA5*?um5LO=!W8d@Co*) z+p2Hy(7jq6Fyhjv2A7Cl1KBX%3Bc4L^r>T~`1jm;LS8#gwK(OyW3!oC9|vqDRwp$c zKX%l5Kg;VH@05Ho2-tujj$ccBd%@G>#<`VI)*zwBv>Wpc;KDXJ5y?CD?47K{20(`CLRpb2lmHass zP4b%|ON^a=$yMK+O->@v08sT5b8S5P81vWzf^wAxOkSwo-0TOhKLR@6J2nTDTnQ(w z>Ngu`6}3z}e+`g;(VeyE(-NxUo~KT+RPR1#JNWvPr{I6%Ey-QW?>?Jt>o_yanlH>{ z&3`}EFja5=W?OttcBP)lfL@PA@mUbU*POhR_iMi8wFRZ*$rF9gd#>dttf~*no)15$ zfw_=i4ulCqy}S?1>S2(}vdJm*hm4P2F;=D2bk&|sMzzq0soLO#8=HeRSx_4?t*JBN z_9oqTIaB}Gx;RFvV~)mvrGFou={aj9XlD=Ie7{nCE`h0@m!e=2C#b7DPfTd@63mF5 z8<)I%w2+>qC0Eo^2AA;aa+gcVyg_ zg%pmwS?YBHlX=>|C~>C#B^Ab5+ca7kP8snpWHwfS-N}u1)U=PrhmYCip?3Yg7SVj9S3*Yje= zfb!W^bxkdeO`kB|W>K2nq89*ud=J>>oMKT{b)nD0HBL?IV5L1Z%Av!aRry@NqLy!f zs|F*3@54DyMZJ5sEq!ySF?1#9AwVN!XB?^TR-=nMj^@8QtjRigE`_kp1=3_bYA3g_ z9;l8sfT@S4-RGk~H1cw9fPRWOG^$39wejyu+?=Fk0u>Hjrz=xnc&|Oa0?btBKqVl> zdiAH+#(XX?W^ogg%ocS@%lWUi9RHxfI_m7EF>DhjT66%y$F!p;2p44OmA!7%XAqV# zxg5l)Y4*GTH$3k&_i!>?;cVbcA|8N5{X`D8LQkPFq`>)^jJu;pJ4+@m?bOn654fg&9G4JqpvQdI-UbyWc-Z+V{I%etOQkCXkNDW0Qk!R1JK_Eh&~%AUb}2ck+Mm@ zy*yTD)hq*M*DHWT6o5H#z3gK)%1WpP(EY-|+JJ{r=ta6bFXpU)vKj6lE%{Y@8zM>M6#r160 zv_f%n*$>+`HrAx0UMBMF61hG+HhQ<{piJ`*p#c4@13FgYvp#$yb$wYCDT(@=%b;4>Hk)5Jgnw~pgvLkAt5u}`=do)=`wdgvTJFKU(HJWlX?1xXh7u@YtSVJuC zAiCWE#n*3=`~m@6UoI6z0==(|%KkwN2&qHeGM?dEovJH5w{ls`ZBi(Jvo~1)mvp3` zxcqe9*`1neQs%f_*MnvVoOB`mZkdOjHPv}fJD7*(&^0k(IRlDRp>AS|gn=DY6Gbil zXiRWcbeH9=)SNmQap~DhQ2A+x&wF@oy{bE?jlxcP+}GcNcCT zi>>P%R^DZlgx3u2@x4VYJKN_ASQPJ9=4*-y3O!L-;ufQ?DiANhCzBA=oZW{Vv@2EY zDM?Ty=x~j!)E;!6#&o}p?Vsx`d9r@3w6Cbn*>f$|Z$q@`+psU6x>=p2N#U?;LqhGe zwbv^*%UZKk;^7A3Vm#57&NKWrM<-lgVt!?VyfwMdlC1q1{8 + + + + + + + + + + + + + + + + + + + diff --git a/public/icons/icon.svg b/public/icons/icon.svg new file mode 100644 index 0000000..7497e32 --- /dev/null +++ b/public/icons/icon.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/public/logo.svg b/public/logo.svg new file mode 100644 index 0000000..7d905a4 --- /dev/null +++ b/public/logo.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + Mulligan + MATES + diff --git a/scripts/generate-icons.mjs b/scripts/generate-icons.mjs new file mode 100644 index 0000000..35bd236 --- /dev/null +++ b/scripts/generate-icons.mjs @@ -0,0 +1,26 @@ +import sharp from 'sharp' +import { readFileSync } from 'fs' +import { join, dirname } from 'path' +import { fileURLToPath } from 'url' + +const __dirname = dirname(fileURLToPath(import.meta.url)) +const root = join(__dirname, '..') + +const icon = readFileSync(join(root, 'public/icons/icon.svg')) +const maskable = readFileSync(join(root, 'public/icons/icon-maskable.svg')) + +await sharp(icon) .resize(192, 192).png().toFile(join(root, 'public/icons/icon-192.png')) +await sharp(icon) .resize(512, 512).png().toFile(join(root, 'public/icons/icon-512.png')) +await sharp(maskable) .resize(512, 512).png().toFile(join(root, 'public/icons/icon-512-maskable.png')) + +// Apple touch icon (180×180, no transparency — white bg for iOS) +await sharp(icon) + .resize(180, 180) + .flatten({ background: '#ffffff' }) + .png() + .toFile(join(root, 'public/icons/apple-touch-icon.png')) + +// Favicon (32×32) +await sharp(icon).resize(32, 32).png().toFile(join(root, 'public/favicon.png')) + +console.log('Icons generated.')