From 0bdbde7e21316c3cf2566549d5ed299d999d14d7 Mon Sep 17 00:00:00 2001 From: Benjamin Tan Date: Thu, 15 Jun 2023 17:23:40 +0800 Subject: [PATCH 01/61] docs: add page for figma provider --- .../NavigationMenu.constants.ts | 5 ++ apps/docs/data/authProviders.ts | 10 +++ .../guides/auth/social-login/auth-figma.mdx | 77 ++++++++++++++++++ .../auth-figma/figma_app_credentials.png | Bin 0 -> 45587 bytes .../guides/auth-figma/figma_create_app.png | Bin 0 -> 56609 bytes .../auth-figma/figma_developers_page.png | Bin 0 -> 91070 bytes apps/docs/public/img/icons/figma-icon.svg | 1 + 7 files changed, 93 insertions(+) create mode 100644 apps/docs/pages/guides/auth/social-login/auth-figma.mdx create mode 100755 apps/docs/public/img/guides/auth-figma/figma_app_credentials.png create mode 100755 apps/docs/public/img/guides/auth-figma/figma_create_app.png create mode 100755 apps/docs/public/img/guides/auth-figma/figma_developers_page.png create mode 100644 apps/docs/public/img/icons/figma-icon.svg diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index e7891666c66..de7a47f387a 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -349,6 +349,11 @@ export const SocialLoginItems = [ icon: '/docs/img/icons/discord-icon', url: '/guides/auth/social-login/auth-discord', }, + { + name: 'Figma', + icon: '/docs/img/icons/figma-icon', + url: '/guides/auth/social-login/auth-figma', + }, { name: 'Keycloak', icon: '/docs/img/icons/keycloak-icon', diff --git a/apps/docs/data/authProviders.ts b/apps/docs/data/authProviders.ts index a1053a30772..b4825a08bef 100644 --- a/apps/docs/data/authProviders.ts +++ b/apps/docs/data/authProviders.ts @@ -49,6 +49,16 @@ const authProviders = [ selfHosted: true, authType: 'social', }, + { + name: 'Figma', + logo: '/docs/img/icons/figma-icon', + href: '/guides/auth/social-login/auth-figma', + official: true, + supporter: 'Supabase', + platform: true, + selfHosted: true, + authType: 'social', + }, { name: 'GitHub', logo: '/docs/img/icons/github-icon', diff --git a/apps/docs/pages/guides/auth/social-login/auth-figma.mdx b/apps/docs/pages/guides/auth/social-login/auth-figma.mdx new file mode 100644 index 00000000000..1b7ce0b5305 --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-figma.mdx @@ -0,0 +1,77 @@ +import Layout from '~/layouts/DefaultGuideLayout' + +export const meta = { + id: 'auth-figma', + title: 'Login with Figma', + description: 'Add Figma OAuth to your Supabase project', +} + +To enable Figma Auth for your project, you need to set up a Figma OAuth application and add the application credentials to your Supabase Dashboard. + +## Overview + +Setting up Figma logins for your application consists of 3 parts: + +- Create and configure a Figma App on the [Figma Developers page](https://www.figma.com/developers). +- Add your Figma `client_id` and `client_secret` to your [Supabase Project](https://app.supabase.com). +- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js). + +## Access the Figma Developers page + +- Go to the [Figma Developers page](https://www.figma.com/developers) +- Click on `My apps` at the top right +- Log in (if necessary) + +![Figma Developers page](/docs/img/guides/auth-figma/figma_developers_page.png) + +## Find your callback URL + + + +## Create a Figma OAuth app + +- Enter your `App name`, `Website URL` and upload your app logo +- Click on `Add callback` +- Add your `Callback URL` +- Click on `Save` + +![Create Figma app](/docs/img/guides/auth-figma/figma_create_app.png) + +- Copy and save your newly-generated `Client ID` +- Copy and save your newly-generated `Client Secret` + +![Get Figma app credentials](/docs/img/guides/auth-figma/figma_app_credentials.png) + +## Enter your Figma credentials into your Supabase Project + + + +## Add login code to your client app + +When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `figma` as the `provider`: + +```js +async function signInWithFigma() { + const { data, error } = await supabase.auth.signInWithOAuth({ + provider: 'figma', + }) +} +``` + +When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: + +```js +async function signout() { + const { error } = await supabase.auth.signOut() +} +``` + +## Resources + +- [Supabase Account - Free Plan OK](https://supabase.com) +- [Supabase JS Client](https://github.com/supabase/supabase-js) +- [Figma Developers page](https://www.figma.com/developers) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/public/img/guides/auth-figma/figma_app_credentials.png b/apps/docs/public/img/guides/auth-figma/figma_app_credentials.png new file mode 100755 index 0000000000000000000000000000000000000000..e4d582ab9fb30ec2ba4d3a4b980d0e85e05ca546 GIT binary patch literal 45587 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 literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/guides/auth-figma/figma_create_app.png b/apps/docs/public/img/guides/auth-figma/figma_create_app.png new file mode 100755 index 0000000000000000000000000000000000000000..7caeb2c0057dc6ae48e8b5f26eb442f8c1888487 GIT binary patch literal 56609 zcmeFZXH=70yDp3s6_EuBD2Uh*5KyE^RjPt?LNy@LLlY?h0>lL(9c=X8A(Ti79U{_{ z-a;ox?}Xk$l5b|cYp;F&d_VRX{(9pi4p*hiV<~aBh#oh*8@V{fuT1v7sg`HOy!51g3o~k~jp(%=>J2E{5zCQcr znSnD6&4mW)f5%!JbIfUI#>$?{Kh<$JUKv08iUn6m**N?3_~~0AHzRq9@1?x^N^{QF zh$iGzBkyrv<<#rOf9g&e+B1%xdl^mE9DP>~6X<7Q{HiN|iTMvk^G}&8KmGsc@ny7# zg#IK_X1zZw?mKv#y>e!QXd~X4@c5B)XY8Y`w@K|1&vOxr78k&R{`%Ea5K1)pk1v9m zk6Hiy`N{P&Pfq;(`S?>Bw!c6AaprjU-yh#S`QzQ`zdxV!r4jo3PtB=H&nGqi<%eWky$){QaDFy@gLZ>|0vc{XAPXWr&~JB_A>*@O)w`nAwD}c zLgw+PR`7>^cH*m{`gYf{bDslz@+1`Z`&HOhT_UC?t=enqpRIkexV>eBCEIAGcg=0a z1!yO9Po+uIs{ZGiQo))ecl*#|{$Jie{QQ!=bRD)>ZPqq}?oE?f|6Ytn@KKdj!h-WN ziomp3Ze8-5l#1(8Wfj#t=hgq?2%p$&f$!rGT{!^_{5U1nBCF=}GjXZqEc5%6$U+0v zbn}dP)>Vb83LeJ~YvB{a`$+cJWOrL(OnbII#fNk>TlD#8u19Gc*Q6>T0~Mx5^SdcQ zxAvI8PyICv^Pac3jcm6R+yv9P(C+r5Wv*X-q|v@pkv7h6*E1d-5?lyWEMgk(WX6U$*7W_uk882iM z)L3#0a){2Q7W5o>KNr1|xgc1y8&qyu)HmsJV~9C5cdquLd1+3Y!Mxg)?R2e!TbcvE zjpaNNZ-^Ua@>}Jp)j@8#b4eWrv*a1}uxT6Fj0PILe6Bkamz3&R9`qc%l$!^PQ2 zhqXR;U$`IqPL+e>hk55t{gp!NHRMAb_UEKU^)A8~M&(v+c9K^w6y8fd!cK2b^CzUR z@Wm1E&<9iY6NQPH`yMBrkn)X7vb>3I5mLJ`)rICm6*k(L%8^H(T6ha9Wcw89*+dZcLO|lW|ymyU=|De&cd%Y%C-8lxD-yYk?6b zOr9YImg~68q9;h8u?jYKXjAA;nM)1b_JZHgx-uU#t+Pz%KjfURsZNA>Cv4G*(c_)j zYF0D8!eyOqb&sUFE%V+eD;RS z%Ex*YIJv662XC0DQFBb=&~B`vM^P(1*~jo!?szr4+|C12y_QkSHpib3NG2UZP&zh; z+vPe*><$%p)t!yg?+$x3T!xD+qD8I$*zlTK#JF`Bs-kUhtt@;4H4Y?Cq)ydS(qUYo zevxdSL5XE9|Kv>HT%4_8Zar>=2e$1TH-)Ke9>*f=-fQ_BO~>0of~Iz0r0t4yD`R8h z_<@3PSJQu;&S3%coa{OSc{94|>en3m3528NY-^-zYyX$p_EwMe-%lMMT5<`*dJiEr zh(QMXOtSWu8NFGU_b+`l2q-kJJjYiE3|eKY7fl`h@lT+S~nyOCZW#ua5YRDm-z~P{ozo_Y5_Wn^;XM+PHqW z?fjqh-i5a$)$SEOgv#LeF3ow1=|vB8-;lfSr?3}k@+fLDOf+jrSK48W;>kcE zB2#B5b0M3zkpcsJ*QfXi9GVJR9$(XHxtl1<+#QIC>)kyC#!+1OR1EKGckzKrj{Q!0 zmmN|3!yF0A+N&E?m^(qI9z$eA%U)Z@% z@gw(g<-!b(PKbvY*ac=lM7|fA=-VGc2OjlQie zv}MSh`uyQj$2#Jo`%9aa3u|@zqD}ZO`*>Qixc>8B5puBil6+@On&F0P=$Pi z*XlOL(PaIPLd)%GnaFDh)W&o~^wC;Tiw-I)R&|`&$!iDarrK4gQO}}M>_^LhQe2aj zW$xt9QLFVlg}wYhpk`loi$%}C{qTK)f%lMjka#FGX~{KCPkpOU7y0{#d*Xweub9S9 zsD2)-Q#wGBx9S;tta{Y8%^r=!TlSX=n*}x9xphmfkB-0MJBz~LVj_H8_;4{>7`-{_ z$a-|@%b$LyJK|*~lCmNe8!90^@zb~hqs&LodfJ!XJ?~Q>otB(>=5qJ z`0Vr^Cnb@3WGMCux`|AvO#tkp>++zIm(h<-wRVjdjvv(~2An03G>=jFaXDz4suV;= zM4~E-QN0+}W0Wb2vWttT^G6vQ)AUUxL^)u}Jc{U4wd1+B%U%l6!>+l_zy4;Gpq(IS zqc&WUP;8@CDP%=Zv?9=|HDk__FQnccv$t#Fd>8)Uu7t#+N7|2;KH>88D6;~bHH%rh zaT9g5zqg+Itow1kMA)+vRoiCi*^auL&EiFEEkmkK`|PYY#Ptlbk$*lY7_UW?m*Ftu zS+2__M^mh)M!BqZ;)F+9*Zh`licf`JAxQ4@6UrUNJqfiZTwt!*`qgd)6j)D9S#Kx@ zG+7gQ*teyfbyTaCD2_!gakoupCtB-Cz*l=6B2_W#R@%a&WgT%sHksf8 zdy#qD=jWPegf!~-%jkyJ10#?ogkvO!z+dkaif0g!Z)UgQQn0xsctu zz&k2YhRQ)Z{a@4vP>|&YhWX02vwSbVX=n>CX6W68H8_k{Dac>`;__j4GMQYu7tG9y zlk4B>_h>e^avZC892 zHb`JJt!90Sj{LJCI9uX-3#UMlf{d`gTP6q0=b(7DXCf+)_1vSS(`kh0cu`9_{k%LsT`$WurOXv?T* zAEB-GzH|~MJZi?i(wav%aE~1J%@-@A-+b14`D#y>>3p|o_7p>6=yIYIfytyBD|iRFu9I`c_B*mG~tmJt@o>+8ky}NtF?|o zKo2WgWHs?Bav&Yf@fG&+xW2q|I1vTO@uNNGgB(ippi6XhHSv}l6}`1WC&nS++HdHs zk9x36cSTj0(kVfJ8SAAN)*3l13WBNuv4cKFRar>IbD_5y!%Ya= z4%oFF3}VTuAsGJ3#$M9OrzatHuooE*2bnd|x67=qt~?SaN2EFF;(udN35dmQ<9M~;w5?0JSYd-xZT z^-#SS?SU0)XLngxpOzsldeGPY)!7f7v>R5_+pFOO-CGl$w$Ylml!nYA)|N6(jR%CZ zBQ;3wJ*MeC7Ktr*bg}EQE+(FZlV0hv?O-8CC*(=y&dnQ-ENis$boqAXPZqIaQay<# zA}@s-0y4$L=R#Sr?{}=f{5N zZrq#>8gA&U_1x_(H7a+gdbCh@+4$mh;p&mCk>zuB0XI70h5HKdCO#d@D~L}{bjD3y zUq^lWS-i?^w#)Cl{_vxnPN2rx`w6Lq&Lf%K2QMjs2<=R-N+^6v*O7P}h3+KO9BdWj z*`lI0Ub|3J7a$epd_#=k7GpM<6}#_`vcX)?^Lo#+dZ{H{%38)B9~CmU*%-l-E!J5? zQaeydRQ!_IX5!4I3XjWoDI=9{HHD}RU*d9U?_kONINq#fhkXBF&V-|#w5=UqBv6n5 zCws&#l`*RkMTt5kmy7mpScNF=g;P@lbhU6mO9-_@wZX!2ZcWkqM)Bu~Yway6(hfZ} z{+2Fsdk)1_KX~6`b+eLEm4}V;gm5jP<0U@&=^w&pXR&+uW6Gr}Kh%juSXR@OkrK3S z(ArO9+TwBDJl%DBHv7!HkiQ;2WYk6{)%(72{ z7+;r~r`Xy-9kI1798w_*$)Oxd^HSR5$;C$HkqtE*S~`j zAFpyPVRgDsFLR9bDX8ZawHG&D>j=qM`f*)8U}>H5gTZW_NA0)cLuy3^)zh2xE*v@N zh!*`TUPJD}7vF~X<0Ki8@4Hp$*-6`d_Jy@;y=_a}-uR;faf3a)#P#}y-w*#IUgafS zY@~GW-!tub7*xjvTFb9Q-k6CTn*tU7=iMjx+zZNZI;9N)Om*I30s?3g3Yo{=($Z4C zI#E!ZgNnwbOowhY;7kE9>#y^c;0;x1P%G8DysC>S30ao;;j|m0uEkn?MkWJ^* zPV;cd1YGZ`sM8d09KMfoO*P(9Wap- ztKFM;Ts8W*tmR-=W&XQ(_9ma2qBfU|&NtNlrBTisp$B@jxNaD{Bb4p2YX z9{Yjubv|Rv;U%_%{BZsic!X3|MA~BC#7L1@z?#NI@^1M8Z4p&okY#El^vXAem6iVO$+Qhl9T~>x8p_@k1>MqXmnYFkQhcjrm&SyLl>i|lL9nW#hHJw06L~W= z;Bbe4KCmt1-mmS6QZK*M&WVhzo&Xqv#c%`=spY9&a_wGe1+TC9hQ*FKam!Df7`3L! z^|H(^c8w231Ss$R%Zi`SNi(d9_TKJcnd{Diqe{Xbm?!bJXl=*g3MXwG3W6~bPOn}o z)$)MhP!?SMc>2WOrzU08H`W3D-(pfy~O^f`zM}6-8X>g)oqTln$MURmGfw_8?WB&pACyglSD`t1#gez{rQa;=Xm zc?~|>7QL7BjVd|3(48LQMz&!%`dtb83b=5=RZp|GzO-eW=#8v!6Cn(4C{ zDoUEeKi3`1#T&!%u~Qjd59Ud~f28oP3U@~jKuY!}@(Y&k6#;Z>J6Oe#pxFJcUnU_m z@OX>udgHB$lP)Rk?Jpu*C+2q9+8Z7Dr8Tp&hHvSM-Hgp<#9io;lsZg894aw%?GYvj zop&ZdEcCT;p0(-C2+FEV_K8cOb->pcXbWWIv4E~x+`%Pcz5ZJ+-~#Dr-cQ}BZ!uvU zL3pNe&6e0tb!k(!vuoREkLGDfmj1~s zwYwuCRptAXqm+r2VZt*0H5y*-XeVzyDxz{{4{k@g*F>=oa!-9QO*kR5U(eto+E-JY zyV!4f`U0Cv8y|G8BiRvK^7vGKA1Zw$O~?`dLRiaG$ng%vVn0j@U`qv7*Y*i!g|VVl zJ&oPY%rp4pO!|INTCMTQ7_9`~mSpYL$2NeloKqVaJ{4r7^w`EVv4lrFwSsX$){R}| z+c9fmQ|?|g3pmNmHd=~`6!+nUq@ko~tVjIbi$UA7HHrjJKEZ6Pjxc5MT2|-~LBRA@&JMO&)H7pg-eUW(hp(+cR$2pM0xTR;T z+;5R@R8Y)a;?4X6xky#OpLE*=;)}GE=$C~`>j1-w;%7qv1Wg8t7U+yGNJkqH!}FHr z2@4BdUF1ungdfODEyN-jch}Dh!wTPCEpR1!FkzsmfQu?qWZaG_KwVOzg0(EWD0G#&!LSgmv9!FZtWr9UVRFt)ygl3S0BFpDoB~@nSAJY zf5d*eIV_*wLCa}>ixS@F!3kJnUPy4kvL>j|2@Y3QSY=ut0MUZSk4JbhG6+R1wrHaY zD^Xn6ATS`J=xyYT2d~#ye#*VLlydg4L>xuRlIIW;??n}At^c0u%_N5xaN-n5^~=vT zWKFY_BG$;#uN;q8f_j8=8AvZ}#aq2P2+^eKJ|ZL;o}f;Dhm55h!~Py&9KBm}sPFgm zwX=Zuso0tzy-`_J%MPPud{c8a@jen5aIft1AI}6H)rQ8X<+?NK`t0OyQ zKu5H4yd!Gjwb7JsP~z&E`wZplW{v1h)N86e+eo^!E!}Mbt2~*NuX*EBC_NFO2iks3$Z}8z957gCe=M-b4Nd?N0JO^E^rO$>@PUxF$it#&M}p<=)Pl+t{4{hOy{^8E5<}6L2&7PRWD@j zBNcsvgne%{k#p}nhxvx6&2~lca z;0eto35q2NbCmf6ini63x0+Ag7ba2bgg50ynf?_(E24GoP$>x#k5Ha>u6JE0elMV_s;Xg;H|`@f!?S35(0;kp>s zW4lL!u(Ff9M<42QT>Q#eSyL81Nx$QM!1nN-TkL`3U87~*NfR0>L92DdPw~JjGYrYu zs`Ckn1b#0i<$4pg{7tj@gaNhK?e#~k2c45$35jS4S{YZZ2K8qxo@Wl@Pgum^m+O{q zdeomz!Hoh45(%_+l1+VUB(EOOnfKPl?@-P&-};xmr7T77B{YSY^k*HPU60Ns)RYVY zLPcyo%-a!rE+qEuH5{NnBO%96pFZ`ZEA4^Ma#GnBNML?ybMA@JpP(tu*UEI-tU3d^ zor0!O$x5C$-1%)phevaa7WsbLf@g@U#eVf=ebVA_N(mTdof1p@`^=KlFXyTWR=Qes#Cck? zQz_*>(A~oum~sD$jCTLHWN!>h+m7ZcO>Psjb{f}+4Gfn25-m_M##{(W*VXDj%*f29 zIe}iSgl-7^*x)Tz1MoJ+9@ygQH@^Ri8&|sjr3C4YFQ@8@(duI|a~7eVm2uT?{ujqC zSJ>90>81>ABFQuIOOQ0(Kepz*4i@CwU9RLvTdh5f=HUYeEz>fv+DTS{dz2x*`!vy0e$Q|LI)Dg832>Wgg-}e6d}81m7V1-IUQ>tD?s4D$ zngH;1EzE4LJyyhQQVlUPeBY#Q%+e0>%ZhOJv0O)z)Tm{W`_$R^#lGx_4tdF_zh>v& zaRR9IJ&4SD-^<>Bv(UWjgUxp)vSf0AHA~ry=4htVvx~T_ zj<`-W22q!4Y>Wp_xaPTVqoBA6pz}J??&vA@0JHqKfjqq~gnH4&Zq%1Aec<&FP65dl zF^`?+)O|KDivF7a`RUeLLIiU=RIJcrYmU=<`%{O^(Ru^*wJgCf8FXi5_|akRtWT{)UriZiVJqgL+5H~l8-lOC(@+|ICQ%O2lwO^V z*Ag2%JME9U-Vahn!MIwD=dd*78R5X;%k{4I*hd9g7w^94Hstszcr+`3?CDoOFv7qx zqja7(M{p9dsB#+3A5>!T2=myR(#sHvEu~a5cn4N#XoVs>(& zc6NC6Z!v+|?ax^}8E&t+FLJ5%>sSOH2+o2tTzI0Lt%gao!`BQS-$3lHoJCX0CDtk$ z5O)oUrD7P7(o0{is{^sA;nyj`fJRuqC#-O1c@V)6!!8_$t1_js z>-$$icG0j`){-KBU9p zkeCkNQ*=TY?AObaJxZM8oMaTb9hz=@HT+7~5!td7z65gRn6PY6skX zn)K-|5rZ~0+PwQ&rO_bq3*vFK?hu6W_it^ocs|?#e`jc z_+zSVadA=Z!}(Y-r?jlHfvpJSQNv~3vjJURXcamri%-iANVK5!(Fji5-Lfj)H zM@Hh(l^Bc=n^X%MbTa^KdZ5z&!L|H>yHbubjX3qXt90xdA1dZ5zonZGPoXkN|dac5@M8ucv&HIVH?^)ZA)^KH+vXTzf!6^Y!Fk-L{RE(<{Y>fUgzyo==4Tu=x%b0^8xav$Q7b z)QvyxUB;NLR|Jm%pj6ic5%Nl6&r+@W95au8eFpe0pp-~??SJzwzNFd|%#7hx9iM&G zf7Y3L*Fc%oxc(T;J%bMyI1B-dRl4S3zP-=`j5g5Rob;|z4A*daCQ{%Fu-<`ugRO9h zwQr0>)Vf{_f0eo~lEB{L|i`Gl_Y1?45SlatgzsiKNzSkoB z2uVI_2w)gx_2E*DGYYS$#ECktG2iFnnvc{oE^@>SqD_$B-yJLa;!WJG-R@NZ$mE*~fjDg}94%ntU<*K( z1un>alYgpuod*Ko?nQOU$tI1{^lbeAd;EEV7G{ilS!^D}OsHBeTn62Lwy4V8=a-K{i?7{sOcoL?ZSBn}MZz<~Aw#NzEZqEFIaY9R?o=Ws6JcRY<$V$9x zU4b(0jl+}0->r^qUZ(U+W0ELO#EI0o^=nM^6Q*jVGqKr%I2+nHPSfKx-Yb-+&}Si0x5q%k_3LFPboU429kbo5dG0mFtJzuF z9|DahH$;nH#EaOkja3f(sQL(T8c%>!gA*Q}OhT+ZF2G2<+Z;`^*yYJ9Hh_mY9J%Y9 zug(Fp!KyvE+FZ-43Sz0zCO(zBzZ2sYcuDeI>2S9dHHTBXCVm^9xlDJAAJ;aEKCDid zyA@t|iQs%&wni#2aqT3h??cB;#;HUTq_#d~+cS|3dAPl(3l}D@mQNI_<||em6-+Fh z7W3MFW3f&qy^`>li?#YXEO85l1Asu@#kFlQQMyM)0YFAefs-K~E}2S~dRwO_g7mM! zZ?so8G#*tPqe=PtoV4nQT<$zh^QOvXNW>9e!%5k1!PpK;zxn+gK$I?Nq8%Zmi_>R6 z^>h@lAr+$eq5Rb=#b7SOXT6?w5LkgAN$QR^+ahGh?qJ#qkgNXd!-BR9hW!g_a`oUY zgU$Jusj{as2}4EGN-~F^R{OT*;vIRQ4U0w&l?t{3RSRhw(=7tVH5DLyMaNzG3Zd0P zQFSw)Rro7@A8*TNv^m(E1$&)!$-=0_GE6xQGJ+M%yUjL?cb^VpD@6mWJyzkwmX8|Z zL4BxWa|Ax<(L#DeR#p~lD1Yg`Vd*nDC;G)ma`gmhE#9$CQ=zbG2}L1dDe-_yW8+Yo zV9^*|;=#NO#YWZKLVFGjdE|cAd+Fp)AF2v`AC~+2DY?Q~iajdP{J7r+@k2Qk;NVA6 zFKhq+rC-e*zm%4XQ_*P|8+%DNHB@t9Fy-k9`R^9@8Dr(0 z%{c!0=cV2#27v$7m?uC90X)fGF0X>go(qPAG@i>fv*B{PzdA5_+xQBI^VF@pT2NKx z`MOJOv?Iq%Fkp|uu09sLbZ)WcUbcAZ?xH{{Y&=Vqoq4XLOS;d;u+%y=i@!8JGdnx4 zPAUAV<_@SO`5ll`t9{~0f;j?-0Ii9qqVjihzq&)dEpkf?CT(>}ID(sVOTA_DgCPeC-k@r`_PUC% zlzQ%c0YOHTi0n*s%Ou^CvaDqq^9tQuIGM}Rnxfz;!+f2Oj}Of2uc9vrH|?&D(w@JZ z;(MAGx*AlU_zSsdL`d2hEjd>Pp0Y0LXVxI>b$uI;=B} zd~LkQGjldkiJ(?^A;nfZ`$Z7h_JOg0>Ps~WcSuEq2UIOndHwN}!_}x)42F4bYU?+0 zWSeV#1;AI7-}sPJC$X%#qmp1Nbm6M562*Qf8t3`Wj;^k9iFqOci?wKDaech=hWN@8 zP=l`&&_|O2kzYf^6(!{s^j|4e_6Sw`sGP^1zN#FyzS$;__mM}xCY?7P`;lqmPm9-h zQzoymiuhwR8iwoVE&v`a=!ln81%U>0L~ZETpG!6&E$IPc*KV||;KLg>Q+~rzFcc=n zc4rs7HYnlVhugU(*gC~F-jX(Nh+E08ThEhe&MRv zH;~M1SE>$v2-sg1cgfM^mIED6cntS(RM$q5^4pIA_1-Ygt}k2N5ll7(o1gmG-kuC>lFd5H7w$}r%*#T+nHnr9R5*K>~Sijw15mxL=Y z@0j0$TrO+9Efxe4t1Q^Ip|n(JnQ0@Zpnp?b6Zt}jT~ zHdPY8>*>g0&$v_d?7}c}Ov(A(n39}0l)qFUN}-w-Wg&#abc6PUu7)}FWvNaU(4{)h zuoNOGK#ialFQV-C=Sdnt9+|AGl1plZ@@<5>2aPM4pUofNv5a;eY&y6a^wFI`Jgp3O zEluX+oqARLrO6|;BuRrEj32BEW<=N)22ug(a3_j7IJ9(Bb@Tqm0Ge1Fl z0fbknQ$xqH=dW8R%)sVu(5x^ zK#V5fIegvd*hY(Iuc&IC?ZCEjj$jUDpZ&IF!54yM&k;u#`X}Vf)XVt1!m8Ffp1L=a zvi74zW=c3u&>WQwD&J<#70h$-do-TXGI!fuMLk62G7A*V(4};yj0U1!HHWch%hNq& zLnrIxXw+LulKW70OR=^C`B$Vox4Tp2O0dML4`=+TKqx6H$`Wg71cGX*@FFUq$`nBU zoFT)~gkOPhJ|*@er~~X0`f1JGP22vQPaQd3?%JB=MOQRWfjd#DdCv#Gvem1>1xrQC z-}up5Sy<$%xc78@d7OIpfVZ}LD`sCUsUn)iuv51BWoq&*|Fs+S0V&FBkq-{`mM!mBA^%Bdi?#t>Ypl0a?>{2YTAKbva51XX>H^nv} zBJ?}7gmWwx68RB69cUmjurxh@zn_2@=74ro?c4%-ZsT~9Qxp{i1px4a$}8+W>d(~< zpl7#KhX%zH#1O~Z-0R~m_5yen8X5`~X0Y&}-t70rQ2foKsU{^L#bvq;yZ~b?$sTi8 zR3w{xdF9#-xh6W&6yTEDGdw4q3OktfUZ&={5r1(d>yKps$&JOjt)l~zbU#Stn)jax zuR$M03iaum5BrQ$iIu8efgzZYu{y@B-e?0sb_*MW_rcd9Y`Gj@Ucbh?zz7Y-a|bpq zQ7jRO!_T(x9&^Ja^~|WZ6R~0OY4jW5E?ED5Igy{2+4?5W+BBAoy^!`EA^zfOqud=?NrC&t8@G zs&LSq9$~B;^zsXd8jq$$?y45Sq^F5uQVB6X@ zDONTc3;f|IiQWcSpb}v-rZ1xl`FzVU>XXwX`<@q}4L7gSVK<@MV4?XsjKHyzL+`gx{4rMkD6izU<%T zKacHtnjgf}a;~7@i19rbNHY4)>vV+)I1eAN?|J+>RoYK)@EVG$u0jt%p8Y;1hh*M+!w7u;D4K?vO$keql zE)WHLABg)_R#u|c-QOva|;1`-ADp|hh0ri|S; zrWW=b6O`Q)@(lXL9Dy_oLiG#78$^GIjsPMoNJRa}BJiXO)9SE(yv(nQaYvC!M;?+l zo=0uHuX_37ugrZl6<@>s;{Zn{(PB&tms!k1VCTk_DYtE! zTHqoN0dQ7xBz4cF#smbOixGl+FfU9PA7J7fCv0`ez~|4UUodzd!A?WdDgPJ2_ie6X zgIicy!WL$;Z)7(AX=pnvl;m}^(E>Pij_J(IuP>Md1 z8=*DtapR_+t*yPOwXh|9aEGrPBO;<(H3w0J4ENGyrstbrjdwn;tl06PTAwF10u}up z)E2S<&bi#CuNlf1f{BdlA5jj=A4x=#4-6wK&M%z+e!;+9T?y={BX*oO)jqFX6z`s1 zEgpWmI#$87Kc+Qm9#Q_{#aYxFwl0iYj@BZov?A0$!}V;=GyI*8DKkNk!j}deX$3l; z7k;|RFE6evS0N5&qiajhTCR(|O@ged^2b)%_KmGBi#jAMSs?XSD(92(Kwkx6fJ4Qh z((mS^K(Wqq?L7{V5#YU8I{|1lKznluve40D#v0BxK_^P>%qa$doYQu4971a_Ari60sl)cIiYklLs%j%GSOq zDWpSm)WWv`;mnbAQ!J&0+?XSX?Km<(l=jpq_I&j{tI?(dH!uUnBu4Ei^RUp;Fc7ej? z=qE=^-=a!B>-&J|4BXoQV4cvD9-xaWgc6Uox=cV1KHW<>nwOz6+Um8cHnL#d1R$Kb z3C5*rKHKS>t3cq{m};V9x!?T)0B6VQRS~1i_7RGK6|e>lT{wzB3)sUW(4=8cN-{xI zd}`P#xj?Q95HA4Fz|}t);&9hj1J}x_VBRuNV}UopT=ybYkZr>7`XcC0t-pT7O27*< z_f|*srcE=IDE8jSB8*(5^RLf$TGN|DeKveAprouJfH2pve6xorF{{VJK`6Wydb^kz z4LeCT)(31?sJBy!96%QSzB`wWD=>ls{3h-M@S@u)f8GA;)rsJ*zi*F7bGrZjlS&px zuRVS%KWjITAFHdNGiG9Y2Wa__1J^UQ4N;S#47cz34FDRBQn{y44dFY&Y4Qr&kLXw_ z&nsA|hIOM&WNZrq4T&m|=AwBlJ_VI!Op&^fzy)_Q`Af>V?9G=-KY#wz=+aSesGMa{ z(KK4TGzJJi-pJx2oW^4P+|{0pDm>0JgoRJ576=l8=;Zi?fxcL(cQf*msIIP#1^!8` zMt(B(lX?yfj25EIjS5K|0EUVI0*r>Ma)Wz>xVbnU>}F0lOLT--fw)Q4*_?IQ0hOnV zR-v(E!|W~?BNTm7lv5^g7U&&I^5D){2T#0~%cY%Bz$}P;$h#ZRn@`bYmm=aEfOYc_ z;qR{0b3^Ct>Mn&$pp;r+KD*^OXB2bGO*I^_3Sf`kj$gwaugZ712}IWnh+%)3E)$Xt z0m$bo3Nzz5|CI%CVICt!wH&ODxOEM$)WO!}l20V5M^6P*$2KI-RwcA@I&BB8!IUrZ0DkV|mKr6liM~v*Jtb8xMpT z;g{_%6Q)noywkd?K)Fku*St3j&_eFwtq952AwJ+oZ?txHUIWnT6wEJc(giqtrz*Pc zo3(_G1FITP&GA`nAbTVT+4KU}kt!m=uW-$mCNKBe4}CM`kZ>!VaEqa8K>FWaH3l;F z6qOMoYicB+bHLq`SD0|Th~Q%9KqH*ST?Z?3?}dpCX1_CZ2dTE(%hWYcV1#MqbS3#50-}0>Q+lO#N|A;C zrTap6>gH@)^<(90%$uQNsXWXa0vh0-Xn#SqbjCbP2Q`Q4Ro>&LwxoL`>HXh+D=RC% zzHklZ8+_SQiE>C-*8XnHD1q3u6UJD93J3H@t_$v9Uc$=UJd|Cu(>{8|t^=^wI>(7R zhw#ty;1yhIQUIGXP(@wKJNV+2DhVz_PBUNq%XFf;80#nhkNuFL|C&wo_vGq#8{xMz z&r~@*W&e-3JHmIr<&yjaP+gC(h#zJKl`qHr&&0AOWdAQXXiXe<3xv|ASl7EY`` z{-tvpFZdh8@kdQD^~@Nk10Ih(8_CliC zBW;H>z$vkUQ3&e1ifa5^p&lmPJj+S2Bb4;-l1=U zUN;6nrhS1(Q4`=TKx>7Sa^fwX7DeATNONJX0QC_xx$t|Rhc46#Xe;R`*;1zjUR!qo zruB^{1hpvakL((-M*aNCt?lyCQAW{7HBo#ASlT^a;C;p2Ru-6XCbNMMo?d{@Af!Mu zn=jGEo;IM3lsyLpsMhR&T{}%ZPfr%NTt{5%bH|UQUf**XxJ$>%Uz#B939iE?OMBZD zXkKyQ*Fgbq!myRPT?Rocx4!MJ08oLNj#Rc-N6L(Q`ok^Li7_p^bLbH;I)DeI8PFCT zwDI^v4H(oQ;PRsVU*GD?b-%L_Tn_HIF!Sol@2Nwm8am9Y!#0^mOTLyW?cPF_78sT9 zDq9d`+}BeQyMciwzx@ZrVwQk-sP57(*eGGbm~A|~!qgp9w^p?bSiIe0lWPc^C5VVF)8v5M3Xu zrKV;{7u4nB5jE_tQ;GWs-`-^Rsh}AD2oFCD1ca!dUO+9{1Z*8POut3o+n_VhH^#?f8;$qiQ$B9uol2w+3Y38DvpBCs+sg2ppRJ zW1y=5wc9rSC)FxgfOwQfewcEAx!)@+023Fv1@hdW*A_EFN@??o%d{*YboAs%hZ{6` zbpx>51P+x)hT9^VBBL1^JgITA^g!~X60W?RuhwWkjXxD0rO791M9RAkrj3|_5tiwe z2nIq!W(gS6Ie~e{$AeWQ+Su3t?0~rhQ4TS_+BoLa!cj&6QDfaq@m^~5&Ih_GAahhh zt$IZ)gjGN{xay_+7R++y=O^Q>yIEVAxynt>)C{1 z*5E>TR#k9SLiNq7Ly#+AHYEwz5eHp{k{fC+HG++jCX7eX@3H`2%fh~gHG{}Sy*Ds0 z0NLK7FkiU7vG))W@D3Z%wDL^QcHsVOsbj}rfze=`sG%>fkg;u`DmY zw#hIgx_IewRalOm{t0RF{&Y|ussBDtOx&|-DIm|eEf)q(h#B@j9}LZkD;G_>?eJWE zN}B~;FLk!?exg69ygWsqJ63&k4Zjb?;LGge-E!Q%#oK?@3w!=1RjddPMzEhU({c(r~xo%5tGPa=C;istyFd|T5YJ)-)+ zyS+o5F?rNLFFMv;W^Y7qE3DR+CiQTpXrbhEGw`;b)huiQEB%l-G_BGDu3dhLjkRf6 z8Y)UxjAScEFqj4@#v9&Y8-}gecilCzEWmuKR2-zvUjm#j(ytQ&cM#~(= z4MUW5G%?BNOyd~utW97|v?X#zp58hDGFjOxR%yUxao6$>K~O>-_S3Qm7~9zbbds(R zzXybgmR%F7*uBpwsxsDco0nH5V9V!X%6aNc&728hRTwjm_SwmMvs|Wg3bPN~*8ou- zd7#AuIYeK>%7pU^kQx%tpf_;3FlRV4Mk^n&4F*KPxr4iWBYh&^UbQnoOBhr62U4;% z7dg=9A9h72mnBLe%Kkt0-ZQGIt=kgCtRNyFpdg?kl0hZ22`WiYa+0hdl0h;^QWOvn zP>GV$CI`tGjzmeDoHIzyIkRglJhyJOs@C3X@6WrfRn_|UoljteImaBM_dfb4*kb(v z+hTVzNvE`%QIitBu%&`?Ue9QKV2;@^pE~UW)OWyml7Lhg!LU?aXZb}ERy0^&CZ8x1 zoryay(l=tA;Si)GBU_ncDY*L28QYMjUzghnZP?ZaWFu=_MVV;dOd6~KOW2OAPpJvL zZKln@TI07eZcNW2hir|-5jura$#EXHLoi=>X&atR<~a4ini-+{vMP)Dl$ZTLUR%J# z8mld(qB;xEgkG0QKGYaL(qr9R6v@k|q^p^9!9W|ncQVaf)Emb(FD(FsOR~+bNXk`q zY!Nx{NWTqWtJ38Dj7pMtt7P=xadjPvGU_uIcgbYG8nHRuerQkEJX&e{15rj>IOKTf zOCTNl=SS?TYL8`&KoE&;BEj-GP+=^z_f`z0CS4z~xpDvQ+HHGt2$A45`}Y07ou`39 zxgL>lch`kn4iSyh&WiRYIX#foabBb5F!;KCACN(%QMW4qTy)d--oexHS600x2Dy_? z-91L-^u8pSXoyB%s07rihXH`F6XjveN)f9ppeKFQ-V9m6(HcrA6*#GZAk#R}XJjO; z6~day_OxG=!A>K8323zL)6jltE|T|D(F1B8pK?~MvKO@m19>UlkpM>ePaC#d-lKU; z&CVCmD1`R51k* zt&qyiMontYxkp`#w_RnmMa8*y{f%FA){Fr&E*N(`z__)x$BH8jSk!Kd)(YCMzO;{b zefBm$Wx{L3CSM|Zlvm0vEysZSD>0Ed9pP5ax(L%cKB$t}2~U>8?O!j}TDV8^l0HUD z?WUfBb)fs-|Z}CNDXz3 ziSiGH#e5>{!T^jcFV}q<$}!Pv$-1?;}3fg zsKg3BQPXRc*;_zT7ch6(WuPq*C9U5HML_rLT0M0%{31}u9Q|{KAep9^Nji3{Q5GVQ z9jl;?{ecvc1TJwucWJOo2=%sgzt>i?BjBt%2O-r7GTy9`dB&E7(>J+HLe)4Qzxz%E zUx>KzW@`h7eVH_?nJ%TuY!mIFitL2?r=_;ZQL8ehqq{QRH4Ep7vQGI-EsEs&^Xj(d z%0%(^YuX*+vqYV(^z%)DBSfdtij=X9;xlhUa;Wie_nnC}~G$=S)lZ&Qyr@fb!a(KYw6h#(|JvyVlAzVepAL zUj$1d6v$9(B;KIx!s>XsC=y*SsFk=}+^6McJxCC02B9|C1k|kbyW?`PK2%ep*GnNYb%D@Kem+YrUvd(56v4_sKGS}9Eth?PkRm#t zeB3ht&jjEL5J{+^t%HmJ|JnYj1iOR78G)!h05AfJu`PsMu#Ye5sLs0ZgI(WmsbxgA z7*0R@-EKJll{#N&&M6N7kNF2ylZpq(hf_%BFSBT;BvSNwdw9CdF+VJQX*AyaC?K~;aj^h z;>e=QgfnR`#p_do7IpH7j8dCYLA0_w|0h|(rpE0&K6eT!*a(ud1x^-^dr(-`_>;wK+zOTZuYnCvb@vi3Nl%50;do9lrJ9HAb2vGUj*<`~5@mWhxu0{P)Xe7{BBhbxSTyM;dfre~bOQ{6$)G#QBrPH7lNLJy1N&a{bj$4D*gT+?* zElsfb_8=l^+jJ|zI{4tKl}65GQUnD;vDJ*0MJ)+pMt3+3;XfS=BQ~|O+11jwfFsK?z|Zz3YpEN~kT;~^BI*3Y z*%yo-l>yYX2H;Dw_Z|qi?M9so$-IgHip-mVy()fY4k=F|rb>Ph%phuy0)|1!my|^< zp`c_jr%Cbr%B*rHfaOdRdESlj0hx73w?L3ML+Tu)hMgT9=PzG>=}?2JEeH(@OBG04 zO=YOR+#V)36V5ziI2J2N;Zh9glrFKJ(|LTui-&A&-xTN(I54uN0fsm1 z%^U`o*z|H|ptu@;#LyVFmb^`G_N;bQkZz$G{{7zcZgCAV&Hc5`( zt|a)y9u3|bcvZIfw*6SjU6HQcCV`)?#+^(nd0w59n8VLD^L#I7at1T)<2R_U5^o!c zw2NH`Rg|sicA}lpX-`XZ)oCD@aqrLdo>lpp2)g%T9@O={(WxUoDKkpgQYfw;_|?vk@VYz^Bl( zM<*Xm4!<0J4ts|5Us>~*qxpE1JG^CTPNTrmo5z@SPzSvn{bLibdK4TI!VNto%fqDy z*!Aud*p#V&x&Hciq5d%Q9fW598q4fCKnI+3gn|AWX&OYZ`%fjbupIzcl;%Y0K3e8v zyPKA?8gTps>sd8Dr zA#HMaBsgEM+kq?cKTJIT;<7j&5Zv+a^Nkgd30h z3e86m#bF`DC5S5gZ^s@%yT&jH?I2X^RDj<;V=eyUhR6Cg;CpAKE0#Suj8;KpGCJoT z{_-QQ(g1AH@m@@pRK#QG&%y$}m~YS?r&H@43{XOPJ+-S7kXL{;1mB4l_gBVHn3rX1 z6kD2g{8$lTYYwRV47J{-r_f<6obk)+Kkk7#85&7C^fR>|aRc!t+kwE^F?UNq$o*MH z_?>S9m|LttO=jMog9gwQ#OxKv`wPQeL|Kq*GX6|lw!BGGJ>>qAJuPe$wCBs#UcLHv zGF##_Khh?J5h{{(|JHo;3N-9lb3o#n$SG%Pq|8A*18ytKqF~Vrw>)<)rB$SMP?v@^ z?(W>XE~Povhzg(N-@U(qEay}rIoy4D8fVNAfy86(rV>xHo*jc=83xo^4n%0^E-9?} zo&}H3_?B>jM_-v!j;LmV{jqj9&qofUuBV+qJNCu>nVuFCLBrn!LP4Vt>|{S(Te{P+ zm7Lb0$#Vw48CDh+DW%oPkC$-XuXqK@(*Hqpwrc&=8VD9qa|rpp*1I`0q#p(qPzJ*> z+1;jj1MVR1nnLaysiwt{fB<$t#vwrv+4vXKtSk9Tw-j8Sh8UA~gK`$WzcQ7%%0M-u zuRw%vrh{q^dLVh-U42C&>_yJ6UVz90^z^o7+p9_And0&l5})^j>n0#`a|tuaZ9m9Bu9ES<@mbKM{&{ z6d)pOGW_=2_hh2V;1Tlj@_=hedsXjCF_RUkTJ&}t($gTR4WmIskwBIHiBB9TP}!zI z=`z!d>;FpKy@%m80GC$h*OWSfKBGR~?kk}6yh^FR6D{j%<<+R$-A>5P&VH~tr#n|S z@DolgC>ipuaV9=wdJxxFP#sD~8@EOyT|%eT^mKDC$2wql$gr-U`$jSL_@KPbOSS7F zomGy>gA#1Aqw&27a=4B58uP z61@I#z8dJ8tfDAh+Jh!Zk(;bq4$PJBDl(02F4@!qcDe6pUv_-86)IT{N(h6ABUIL; z&=zVMG6*%7^|Q51&K3FYSRjC@%(3&lu(5o9zd6_$6^(aHd9(OBMZ0#9WDWP~N}U1A z8;390Dn(b>?g?k37v5eDgbo`B!n2>?ZE9C5>O*WhVxg%=oPvgXVnmnOsb|9(E0_nq~gKt~jF1!IS zUp9Q59GgYTsnPpJMGI;Q+vTU$ zWdo)iflix94KYf>&(~kVLhYu!AnNo?&0SHBC4Bp9c=!RVP-s%lQ-X3jPg&S`Nu=7) zPSpNSx|Id|u=RYG#8QfKzI9|eM78-B1=SEdhdKlZ=@c3Gyoopi0s`XKlL^!NkZn-y z!EHI$44Sr=kj@q)ACh_@#@c9R^@8U}y(5XM8Sbe*r3uF+=Zbtq&PfEw!YdYKy%}n(2g`cgInGUQh_j z#1jSmo&o5Bp-*B}k91xzA*`48wn>;peJo$N_d~3pNFMGYNW7&;rxsUJd%1+3@ikN_ zLAikU&8LCMbB^`a9`I0eH&YZ#NYjmsI=+0lyh1pMU_O*ez3KZu(NHm}9eDW((y{up z?!laZ#}~Xa<=lL@6Cu$u8?6||xMk8v*-)m;S=)H_lJQe#JalZ=r_2OUY@pIR$-}qU zl@>8!RCbXHSP7nYgbxPI?;(+@Ub7@#cvm;-LU$9xb`@wO25dpIZmZJOATQGvXB4Yr z5QMupjbgR*XQUwDW+) zW~gxvCgm6&rhF(AD-N44B0P1E7eM;PHfZ}|@~_KAC`=Evu3Oq1G-k^y^4}mQCJmB2 zW67enkMv0)%Reu6JAK{2vvHcOAR#FU=qJewN?d~<$?G-A60b460NxFb(-i`D1C@eU zqYS=xA1ERt;S2uq-UKM8&+GG70LyDheXgoL@7H2URnE~deob}MTOP(`nrfuhX9l3L z5np6KEWJTBRC}1j+y7zdMxzFkxUy7pry=MCet#_&Afy^57Li_~qxBIo3L||VrnzQV z9RhcV$a2HhGL;8wbo(el@3oT*uS+HQ9qeYgKN z9|Pd?>tS*THgDN0ihwRtiv4-JNcoaVs-T{t$e1c=gFV`DWN8D|gDtewVp7aT(Ix>Y z*nE1bRJ0txb?=&56dXQ-9~95$cL2FGL~@C3Bs5T5p_ItxntIn%;<`HU%e~zIrj8^? z5HI!PCK5k@3R`_jE*vst_5QN;G*)Oriz+R-kDTngH6;YTVw>JI=Vae3TyM;>ZHpr! z)($0FQK%*jh%Jzx>5b}cQRH8^q53tm%FO9!r#c?`KSi*~5`Nc@m&W zlkaZ-$@fbuwFZ?hOZ?@7H@XMWQzZRKaoP&of}#0jEc!G*$Dw!vN~8QlnLjO@>D*h_!KZEq!S7?!^3IR^^?bM ztrB+|f$+Pkn2c;WYvCmPE3>B1)C-cF#KLY#rbuSrt-PcKcy#0t;4o?YK*@o;$N$*< zlWi!7mDfJQl1nSLeq%EWq7kf@w39q;P>i1Rv{S#X2jO?-`G$z}JF=)WyM8$!xpbuh z9IkORq;=;wEG5GFGJg=K!jwBd!6k(~o~-i!2JDK^V{z}`*EDH80K3bMD$p>=h=8vz zf?xAe4~jVV`K`l#Flg6Oa$U;rO`S>Rv{vX45T{g%6rbu%wP(>Va3DW;5^ThA5ahwz ze*7})gI1wgq!7887edg)ZNCMz73phy?ZuKG>Xdp&mwZ^p`ipQx2}ml+U0pEh94X4* zt|BRt^;F}14R@VA9O-vu%7+&YNk_K430Lk#yeMn>X+Z7c)xXyWLSIq2t&IATrut!M zafkGalILwqNwg#n&*4~skdujb`OdwKQ?K&4vn-hXk6h?23cVa$SrwaI`>wsKW*Eo@ zas8zeaeWD-jegf3#DVWDz!IP&TdpP$G9l z0Z7z#b|?K8Gz^xIs?QwFF9F$H*N^h~)HDtuNO<8mn4>RfWVc;>k&z0rI6&gMmCcNJ za3J-jM<+7?&HE!VG9zM{FBg)=#<@Z(JT{fiOOC2M-z@Vr|I@m=ZDWxQ)aj6pZBe;0^M|s{15Qgbug!m0=*V=S8-fbV(B^^Jj)Fw z6=ah6P#*!>O|Geurrc7&?DP;2ZUAcDv_=hAy1M#yEa6qbSAo7BZC^ue6Oh*XxyqU< z656pIW*kDcV0ZhlQ4Rh_S3)9VF$S}{Hpx~r<_1|H0rVGv1%X}70HSA3jep1_s{i&c?!7H-JrN+Ee3nIFafYcO zE~>eKF$~}*H5O9< zha0;*jAUHL@-H66!W!aZD+%mMV@aK*HS7EN*ip7VS42bMw1Xgy%7{v$*hV6KkRJ~oT@OBEJhRIVrIFlZaa9^2XN*?&fB55zOCxD^VwjXzg zjbZr6!1c>-N9tsc5KtE@m-vz#nN=Ry;_Eb~aBSEARQ;hLtk% z{e+MZzsg8-;TTaHgv3WZtv$uVkNlFc;vU!z&lLqng{CHcTU}hGmh2GZ)I_>wqSVl$ zXuu-0Xo0>s1_VuC*QOE*=I21n6ey(tR6Xfi%^81~ny(z$c5ClHmB)bWaF})``tCdr z9!1ozbI4OeM^KEi=Y}8pK`x022=>W40L=uq{3*o+!yu2*jhR-JG_@K@o5BDzf)%TA zmbo(t2xxYK$qW6*d1G^pt%}{O>6~FBg0;9eDxT5PJ&(&TwnOVQ(z?}BP8>OwaF^zB z(_J2Imxk!lyFTw8(lOm=?~TFjDX}qjeC(U=koVc>obH{7GdYg106gf8%pZ|zElcH*UD`Ts2<<1+|wz%@E|E!A?&Bpm~bfXn} zcibokW%GZAh9UXnwqZyr?tKWBhzR7{aQCa8>47$5tNcnE-N9}^PrLQ4Z3C%BCeGef zcpr*eem`D_(=E8@DJ-zFWNPcC6wbc08&7)O?JBI7H^=pU2$Zz?DEoqc2|0GB5?hX| z+nb{O?=nNujY4Aj3u~+U#c-7XkTgBl zmAcE|+)>2oR%B;<1vwQ5Yqte(c1cF5_aVe9XXHyj4Wu*$v5#RxFGMr38R?dQLuP4k zjZk!*8}W?F8wUkqP+SU^N-hZaXZV8kxCVkG)5f#CGj8uglRd{`@3=K{Mz=C!!(YJJ z)b|h+#`{zP@A^C#JxE*m7MOhtgJSW#cP%$8)@C@&YHs;)%6aw`(-I@o_+rBCO0^G^nrmww1WUQQu9WWp zl9v7^TQC<|hbWn}@aX9MHCLe1?jLy4%wTZBcnSn8AbyD%>Glr}K4x@07x4uxRmcbw zcL2vvC`n0WJY-q}Cj$ja7C92RH<4FLaUZg?yKd)3i)x=UvRcuR3tx!JVp5xHOlj#h z9eKCFG8|(~tW2V_El)hmM0D-eFJC#>E`DdS`-cO;!OusX4#Io2|pddXpRrENro z8QPniIu2dG7M)TkL_C8;ZMqD*F+ozDkcv0}2avs^)qUp&!Ntgn!#4qJXNR*H;z2a9 zA^R75E@Ugiao%2zkzq+M=y1OU!Z>-GGWP2$)LfU$c%U5ru=A<%58=uz!THZ?S~^VmYrg&#j!^LJfLbP-CP7=+kPbX@UMADR`_l-AB--;-1nrVk$O zwYox~MzjBAk&)$Kj{)ji2Ung2$GE>jxd@O7sr>^J zKQaODCw?#XJ$(>hA_w!Q7bFY+^Oqn9|KIE4+5dN2p8tO)w*G$;QzJ?C-|PRn=E8gU zFQ!ob4_qOV-XK5-_CYE)Xbov@Xt3BIAzpbKW)Xlnt8Z{JRtINP=A`p(82Eyu=RZ0C zg$5qFL?WpHEawz5HF%|l;h2Z(uML_P`|ICdX#@d0mz{v000Tt1CRt`U3H1+pzl0-0 zo^WtZW-ULG*l80cfPzql9RU#o{YL3W8*nmzmemvf!(AN-C;B-e2r$HzX zXMrpIY3*O=l^ABHFsblL5hshZ{UDFb%Rq%MuSbn5=$H1J45c_r#&&J~tVS`%?d_|% ztH`~+Un#wcgF{;l39FrQpD=;IpL>+OCsJ7>WYXEsYn70aKs0Z7_!Q9oA(DCqD3&Qr zv~HAD8`g1ojU+*StC}|CzLJBF$MVJQmMhmFVlihI;(WXzgze-CL=bo>0nDJ6iir@V zqG!Qnm*ac+!Cw7>T0erc8TgbpN75gQOj!pw9lD>4aClFL_=pa}iC_Gx`aEI|IwTLa zJqdx3@|?pXy~%5N7v@NTAPHoFNV^kDHROFuhEor8>t1+3+R0cAUl5p}tZPlvNm7gS zV8^)1)jk1Z(#WKO?zDt+_m(9V7_j-X=G~8SJzCHPd&S^FQ?NNLP%63d+KVxR6zOLh z{8$I5d*nksZ@o6NpvRtV(t$+&VNX4kUzMH7{|_@sz13uAu`kzOIV=`I7Wyjwoy~09 zFI1jwS`A_qnUl|$ln82=+{nJP5-3qIgQCa_$Du;xx z{lQD}-ci=Un;W2J|B?bVT0u~4DNOF2K&_N@;=Qg9c>anX5K^#?MNB_inwqS*@p3N| z7Mk===*j*#x;+dzN3m5ly*{F@wX%ZDbQ-d0=mWkr5&H&EH`Afw``s#?pLuM`gh9ac zOuAs8ym^>uat!WU#_f*ZenSnxe6`GauH)!O=dGziJxR0mT&i$o_j8IoXD+?Ir;$>Fn0N+Ygp@uKQkD|flLS7hJn#|3{oIu za>`mKD9`q>buk%Rr7)j)qBaDqgH+*VgBK3=51mkU^Y->@+IQa;An`Uzom4x&B;_MP zdQS~*5;QnTHz$# zULA&$Uv}*jlJH7~!%~OFaTwmoyZrFv|KO22*|p)Y;f=#WLR16}*LD0!!Bhvf%O(B4 z$L}vh@@*OuFT{ zIR?5z`b_|WSiv&h4tCKk-b3QkII>Spj*0vA(boh^R+kRFWP%1u#s{5dWPee!T)bfG zv!$EHbEb_jkLf5m4_qQe;?g2khPrAE`|@6Pui@VFYNvrx{Pgi9Xg$6yy~_*0+UdaP zm4t*p)I(U)?K3GdN6mXC)gy;pA7kI%<;K2P6N~<+Bs;b`_?Sb$vaA2toqg@xOnxPg zCjp5_v?;B923fUjk40`hG{%HE6%eVpustv+>(k{RE zz%mNvIJviDqBPI>i$=$Cp15|8iJUywNR;sM}-m2j>FeZ{;4Fx zNeVhXxI>pj-RGPz=D!`Z4Ns-bHF1;o5A)t{sgsx(6L=Cx3H?}Hc0vQ>2SyHV%D}uh z>j+M)HQC9(phurX<4?NS0qeV!V|)5`#a$@d=KiP|Omq?8lclQ60N$mCpX6KbiEg1c zT{~}pCcUqB%5$&YFLL5SjBxB>V3#F{@oIkxob z6hN1eaNvOp_V5(31!%8~_aVRNCIz!r!|%J%P{2f-^k~xGz%Z)Zn{wPhwFd^eMd#=Z z|4q67ec;;Xn#ZsN1N3{XCBs!uHmY4M%B(~}zViBY_9Bl=SX+bIL3 z+~?j3g%zbQoQ}bE(Gf6nNJ0=>_BVOSHHd5?60k9VO|@N*koHeN0LvgIz+qp`|C}9h zh%+^d0t;`%Hf0d*5M@1kAM!0b(a`luXq|+2mV-#}2-nkRLp0nynwD zjU?$6SMN;A-}JCGCbL`@#weK%)l9HMgT|>d=krYZ*S(oC+rE$n?Sf#^U>`=ZGSSdX zf@qss$i<1rTmvlf_KsFu5m7bZ?4VI_hLR7A(PK+77A{aSXdOphF(I+E1+)zd%1_nR0U2Y{X|Vj@v!4Ch@~q4n zdF%h|+(7nq!&TfM>|DGjCNpCC4@yrS?{q#|_P4~P%9#?Au+FvZ_w)9Ued>9Fa!IoD z#1uVBpm5lBQ0REgA8HxkI9@@D>^0iX4{9QKCS+0pVv&wutBF)IrlnvU1oYQnST9y%P5cq8QNJe#Y; z9<8vn$DfF+2L_=H-Q{qST0QQ6x*xqpp1nQ2a19Fb{iGcI$RN^2f*=VN``1NXvgfu^ z9F=)z{9G`4D%Z;1)ZpikC23>#dyzhM$i<-u?m;RrsN99%SPJR`;XHJfzt+=h0WlwV z7zOVItDAwy46!goCQ>|mfcPka@Wl2Z;2}`sPePfgOtr$<1~rYs1ZWzNS_}O@+#>pu zyYhiL!z@Ju2R2S0l@7{{(~Gu zs{-}Ji23?m&Td}Ybd&0|rsLx!^Q;ABR@zFP#_X@exczAXt;~!+gLw15DBP` zm9z196J_UQ#66Q5u=eUCi}CbTYg2A5&W`l-uYSCB;w_s`&p8)6Q-UAic-&Ncl!W2E zajM+mZ&>{9g;;q=-gV~hZ(_Ph=UTn4Yo&!MvF=gT#-^DVc@snCy<77Pv+&>Qw-#QiEGN6Ewo_!vAn0?XMmZk_cZj@u;4E1gu@4o5m z?1PNJz(C?7S%qU=J^7}PEG)IOkprDI^FzKxRuX<&&DBv|@knz5)F_q3x<9E%JRUBo zOR(w&;|$zGF-MZT(oB_4#K4w+cjkS|ON;E)WY&p~tzW1hd=sw9Tm%o#6Pt+~ z_Xt@R7jFUOn+20hGqVLWj@(Y=Y%>cV2W_287yiknIY&57jQ@yikv&kmz-hjFC(>2f zz3c78K~24No7up?u0vf+?9sVaw&=+0t*1X)E(nJc@Te2;qAF~*DQ*0C8B$X8FcNIq zw3CbEGkRSWV?)n671BcNcE)a^Y?;wuD@2GAeDJ^A)|0(x3PIbN{tCf7Q-|Yi{8$0) zKnuSh3;77$+cO5g8`yrQVoCV3oSsk{4!HI|#C*`j3}Y7(l1jbW{V1)bmn}v{#+yec zO@>w$d8c{w-9L_xPmo-!w4s4j$5qSV*eoFwrhTv|+tjExplqS0B*{BS6?KK=u-iSZ zHui?VX`J_W#^8v1PxM!{-H{aFZoFe^$K^WaRMN(KX!H2%jzPu7Qnp*D`L4x`TgW3O zna3PO7iAt9)A=cEF9xbdNic*Quh3B8@uo=sstOjyjIKwxI^7ru`yM9WW8udWYo5=i z?RjZsY&7rY2p6rkP#BZS)dX8VKF%h-LS?JvvRl>??rzW1pfisOqK)YILFWGH-lB) z*wW4YvSyiO_S`Y&+vC^Yx%6L4DhoKy=sdW9VRM;PWKjvc&JiyTLi)3RGs|n^60n5b zuDLAL%{+^+qqY!qZsoQ9hu1#+mKjB(o$F~L+{$|4XrInXOS2b*`_Yt`3SsH_3fabX zH|=gJJX#88(kVq3z21U>>WXTN6)GY<=$vEEalpvm!cU+7Bri(1RS_|f9=gbkvE6pn zTy=Z%jQ^Z=FT-at6y|daM#d^4!&AO-84t~Kn^JpD6jfw;-9`Ip@*;O^D*>O-@SiV3 z>BCWvn8DKx%6N8i5dy6#m_k#~OD8qj9hHQjkpXo$ep~&AdM5cTRFkNzU^X zu;|A((3px0OssCwa(U}HnMWZO4;%S9HzM-I738l(de7$0(lcC$v z3@5qsoj)#r5)zAKXrsx^5>S7hAC!!xygrKHV~B;pviWQ>Q@2n43=jU_Ta7Hn6eg__ z5O`l9;hSC*oKGL2z;zB^j6Tau$`|Zcq{H?v11HJ*H+OE+n(2E`&#SaD`Ze&Ov?P3y z(A-INI;_Ft*@HmAuTC6!lj_I>Be()BPm;r`6sNtvxC75$Yu8VCR&Wq1>=$2aw0oi# zv8k9euPXf`=iI4Pg?+IvISfjz6Mr3&-peCsR*Xop+8}RQGlTOLHBU(i8^$0T^2o`A z2pdW4#aKTy4Hs{{<_Q22llM1oH`1KEi5J-+^dwX#`U8XX%tqwlp~AlS#YkDn+0f3V z3uU$^|6I0_@O>TDd`0@7{M2RP@s*J3gy*O4JjJ=tbyjxrefDQ^U(w0HFcH(+DW>V| zJ@Ww?m5HIhRu;{wm#*Q|$Dz=M>N1xcmIV#m)~K zN29smupV*h)bJ`}<*3zAs~Tc-I$*p~&3mYtNfvYOG7skh->n6WLUvY-vbwr;)|*@S z{bkezT!M{(#PU#z8Cb`C+i(&XyJ9Px+ob9h4{4K#F#ee>$mzg6>!zM@BETU zl4o$ieS`j(+dkUA-rVCC9i@;uI8fy5n2mZIlC!Sdi%nJfCi_2HygXw z`Ph&pUee|BJL8|{4Sm1auW{9amp zVCH<7>53LKNPN|N6xU+FJAm~uQ{~+s$|I{^2149(mL2D(ION1XogLS(Q3N=paFo7R z`=--Iy_dH58!uOSsZl5n*XwLyVqlQar&a91%We0lem@L)Y3bS0X!ok!0kaQR{1n@^ z$zgPT(82nd>kzfhe5k~pmKAO!oT*!^R(X>&8fvo?K&cTzw*0ZXtzB3**m-Go5u=-P z>Vh7=<}+Wk{3i93W3NNWeYMZF=wK*y=oku+2>h6Kk8SE!#{e8l1%Ep6Dn;Zc~=>k`Eh5p1gU zqdUKe+!l&ReP4^zG7GCN?`WN=cWaaBiUYaSMhp`}$772MSdIBEw38`s$I!Kp(sIl0 z;knpce#fy4lUKsZM$w#RO*t7;)DcVaZ;Ml;MH%}E&v=XRy+L15)fKiCIjEDN3O;fe z?I64mw4kUqLIcIy(rBe?)G3@k0T*|i7%_+}vhj^VG2|Pxt%HSc%#TzGc0*9gW#2Qj z)r=}Lx&)<7{fQm&%de6J(+t@3(=Gqzvt`j&_>GDjXx|+F^s3Wu(LKMvtGj>GroRl| zH+(QelG3&=JdHDm!>oyqn}e#8_8?wZGX9+&&AUIPpH0jMHj6ussn!a`abB|RlAL}| z4r0kirpC<$+*}35A)G8IR^t~xSR9S(4{0g1v@0z72U?7|pey<(4Gbr1Ajn^THzVIu ztWb)bsnfk8n4Fn&y5!ElKzpcXYyet4XRp%ON!QA-A+fF-AB{hl>keQ`i=Vfewp zqol>;kGa1t=pCV^wuE^%HE!%{{ZF^CH1N&5K+bQ}%%G3Yxid$fn{B^47;SE%y){Tl z(PKWEgSI#*phQj3sp3+vv=e|sY=@sMI?6Xvi{fzfN(w4j52r-OQ6a7S+iYPzSx8>( zDAlR=4@Jx`JNvMVq1~LQT!p zcFPKdem9<4utig;*6#^t2_-nsXr7H>ic4Bo(VLlLOi3`5v)NEsX*)g|oYeIfP}bIV zttC+rc?bGEXg)rgAgc_OK82J29CjIbHW{_YS)5u%HYe7g0X=lIxrTLnT=W=fl86OwrTshuNnMl5TnB4+m9iL4AEx^1P6z|E_$bd*&Pvj%% zi1)luF|xxB6vqcYchMazxw55BzOjXoI$+Ih6@ZD5`jIxulJIM6fT#g^^mFJl$LXUy ziN};uDD&qTu1hi@SZnp_f^Bs>4i3@C(eOdtMH--Xia^f>-sdhb5M%_%Y&m(=MJGUt zlAIYQuFuhXi75JsFn-y$P`V3Z`%;jq())i;z7L4VQ&0K`c6|&$rXe}4{2R>(*3==F z)M2h>L>Ux+Hvu=uI#B#Tj$K3oz4jC#jQw>PwZRDFwL<>W1U^&WTs5164CRad0^5D( z$TY5!z+Y3m&WQ-!=)cs(*EhP$S=Lk9CG4mC;`rTo8A`sN;*bs`UqZ_p&J}Fw1`8JH zit7$<*DY}k_2Gl;ZLe8ha0A5l5nw@vC=28Nz%;c9;J9hl`deMNh=8Q|teX&jm&k6| zMrAMO-nU4QEOS?^`GTwKF=}*AIuMb*f#5kMD@%ri%Jpy!gvR1{-@v?NEl$*j@xXk@ zx>E|MBwrWv;;CR@&{yDnEy3x>fef+{=($Vu%{L5;cPD{;b=j?^7Mm*i<2ZVtWpw*+ zQD5lUM=;W=2Kx>WePL^eWi$Z4vQX$gKo#E9&o_732yb@@6es)k*~CRB>3XwD<$kx& zQKyivAH0@pXR$*wf@DW^O2En6!;HH$HYcE$q4Ad5RLmdbS!=vA5yWRGK=1~B0qe+Q zu|+Oq5k6sHayFbJPD8CE!>lCH=nQ8UbwIdB;C73)D+HSQK* z`m24M8-2tqDZk1m8X=qj)ZUK{geqeUe~d81Aa2C&`eQ>`VeX62acA@~Mu2sXN%4&m1``0S#%0pC8janHo|+D;aW`Dmk9M}bELhhG33btZX=tDm=)S~K zuet=2K8nC9PpA1o!BY_~q3lk7u)hsOb42mD%%DcS!YuGWW$B$QT4MQ1kI?#c{QUub zK=24qi$9AP&)fFvh190Z|3><*ONAk{gsn~_>g|~AX4x(jF46~mY?sryv^mHJbL}>| zq88v=Nk+Kr&t;s?f^WVzjuI+aO-YL4n@b3g=i`MY_X(5GhkA`5$(J8b5;~gWv7PIn zt^Fnpib`luwF83;v3y1Ob^!4ByAvKpy&18MK!#>?KD|TO|EBb9O<$@$gL^L!yA<`; z?hriq&4U5UD!ycr0UHk0U@)=oLSrp(xu;7xc zYr&up5HL zTx8>dufh%p{rDwQAw_~O36nkyaHqv0c@WaX;xcTx+2PV1fZf2F;VO$v=>6NKem8x^ zUk$iULOCU~lu+9q)T_jaJ9cpvuDV4;Lkoq~L4 zyr&htd!sLOsqe;TR<<&i$|BJBBQ}N5lfE{3yfk_T1)&z|F>$U0+*cqrfCYLyuTsee zc($U}(d|zF#4p1B>QsE-2nrLS^>6+O)(^qZ1YV3YFvo|$B>TXDw+$f#1A5)#aq8o7 z*g}ZqRA$BgJP=qTmQ5^jJkXJW*h;p*FiH^#SR?VHWkJK8mJ!`2dk;tFdb{XlhIezY zMu(mZJspx(1PwDDxRmb0uthq#+kT_Fb=)1SHvwkVzd2d8kXgDMs37fS+t>of+o~B; zdGv7w{y&Z?Nu!681(btL55}GIiHffYon6S$Qk~fo&Rmh}Z5+A6sRQnyz|^<0uXsQ| z^Dww1LlAG?U}4rO+ePL&LXXW?TZszfZv)rNlv#8qa#$Z0I?g|=Web&0aQ+#|J`L}; zEkmjvXQCb=Ybw z#xt0&YwCw{TvsTkZ8EArAjz)w_~e2rVtNDuV|VJE`F)Yj2z%z4#2V2H53o=n<#Va#WAb80IVRr1aLgB({rQqAOBWLXE7xg3f!+f09=}qKK6x@YO z=3Q%!EFbGzB;#B(lo&mu2E|drD5`hb(a%2Qha!0sTxMHrt zYCx`Qh>i@d_fXrNz~uk6zhuODqvuULb!+E^z&WOzY_`{F+%rgOdgU#$dcT6o)Bgs0 zqJC=>7<+%wO(0`_@ip4G8oUb;aoW@8k$jw)M#{U=B6#i6QT@c7DzEiNqmxE^T1oYW z>89uG==p|^T*AE`)I3%5Ue9LxGZ(CEj$w63)}X5p6Vk$L&j(7WM@4drUWRw_{vnbQ z)xwOb^8{37Z^x@35JN`+w;zy;9ngzC%5`4TxMI`Ew!ghUVPj*ll<8c$IzFk;M#_4x z8626#amNEDLpK~s&}qjsj#k24TQZH>?8>iQ51!jD-rl=jSKg-xZ~Xn4a3o=$0LG0R z5+N8?;R<=f6)JunKOyX1Yy4pyh52)m5#s5L7MHET#l(R1#e+fiXSuBeP0}ms$NQUO zi{squ>-2|(JAIYNr#$(9Mpba%Z<<5fnR|wy9ScMYg6qF&zC}UX61*%F7c%e~IxQ3; z3%YuHllEaAa~QvaC8J5&H%SMi>3FzQ7bcin*g~GbKxrygP%`D6;*(o_g^}&-6*}zh z4(jpfaR)Us-|=+%;woz0`g86#UtD2dmKD#iKM|-G>cN!a);b} z%DtgiVCw?vp+AbIa@*XGjZRQ7IfbKXIW*vC_R!M*wvEb?d33{kVeo|j+riy=wnq1I zzL3hewcM4~U@U9tR9<4L)YPlT&I(9qJ`)P7Xyue4!+&e+S z-n)04@!q>+%P& zQk(R;I$s#=cw}0&x*X4xv}j9$$H1|SC^0WQxeQEmq1GFP455JOI)|5%Xr-6y#vk5^ zAstPzZo~0U#pp9Nv(_W8bkhYSa%oeB>!)5s^d+u+t)IQ$@8&r;dwq-~@J2n^aDXzj z_2%rXk;GHQ6ic#^Uy@I@p6iSD76XS>a#a0b8dnunq{9L`R(}&4Fr#W}m6g0uJMB~G zsTiU}LT?rNs5H|RQ76Y4MQL~x=(aGNsUo9peUas7$OzLA;vy}}BJq3}UMZIG0w$4o znge zJ%Dasiouj8IEFVoL`PR`=Dj~p`|Bi@OeY($x3lQQ zRD8cYo;5qWkE>?=jwErPkO=^F2`^U$} z5tvV*#((6DzKv$zbBGdCle1;;tWet;qGwC(b(~4^tgqqg~Pi!hsAeLh=qK z1AHrv@pGk@**~c#xi=oMcq!azrQ@>0Rxe57!(M6c>EJ)9w)~lbZRh%yT8>d3S2XuJ zYERd9;sRJUVO9=Ci|c1xCGp zZs$pIz$y@?Nib^(ohR(%hWGg{Ru2*!!M$U$zUy-&MZ!0oOEFxPsoWZeaFb$KhbZFQ zwdZ#%C3hIua;vMQNG@l@83)gfi1)en+U7(CXG=o3OJuZ!yB|*S3a!vjN`d*T{nOD* z^zUJ~U3&Hnvj)c=f779IyxwN%LuBIBZm>NN=>K&0ZCLwdlGYCDP68oRqb6+#>NOg zL39xiP%egma@Syw0dWp07xqNi0{v?XeK7d^bT04q9`TW)7kgSl7_M$S`C%)56pfo4 zOV73vLp=r_E%}c@VQqqFnzHrQ+GaLi1P_I$PoGMniCW?>G!@>xdl!G-{2V;~Kab9) zr7|w_60wuvEJ2)p_bT1v%3=`ZqZ@&vjthkO9Fw50OB&_p&-O2t$WsTR#@?l#Qm>Wm z&@YA89m84q&3|;e(BgKr1q(|tM|+D3{`0L*z=jSFf2}?5wG=in_oBFjZV_?v%}#vI z-~ZRrObrSu6DtRbL&9IBTuEp(NQ?{UHE9lCmZ9dKQjkd@+qdqNHK3AzYHbz2;~K zC<|Xz7pq80t`IcnnzssAoZjVHL7mnRFkv<^Ig%ofEz}gf`SJXG9m8W6{{2(K1WI)( zcgnI-a-eI;vis8WbLn`eSJG+OE zSHCOKN>LJcOzCvC$&W1e+~u~Ww_Jzc`_PqmZ$B?p{6O`85hb%uFBF_C*^oLXQ|)Y; zvMogPbI@P99`Y6NP>{AV_Q;_Dv(-vWtqx5*&@dZnd!;d{A1oG7>UgtV-Bz^IIzqYr zb_?Ap$@5o_0}*7kkW9Rzs~e2BwtQH#UkRSbSEDe=7#a&1E{j|IEb8L8JaJaG#iIUv z9_#DcwTwX_PP@FCp24I`f*LNL-21ht{$$>S)t;wLA4i%J$7+-P5_H&q^Y&Txw{cjU z-E!3SEI#n{^6h52Qy;B~I&T&satNRI%=b9M?q~GD3SXmv)+$Q*E0S0)tI0Yg)#woT0|07VX6PiMZ`KS-1NgIenUk4KYZNMz6-$5)l0|jNE`36Y$P#0`{q@^zHcvaJ^rsH zh4NS6R|7?34H|Bv*Y|I3U8;e+q|3Kq8mIRUK528FLgwt#VX`3fab#O z69$B>J=&2kuYfrm>C9+B5~fxDBYno4AF%!uT27c7eL0kgram+{oNj*`Ka57MG>$dP z6pyU~3+!%LX_n~}t`Nm4Ol-lNN1^uVa%NS12cxwMx;qAg^nDY6IrH#s#T?2)E9DoG zn_ls;qw%Lju=->MIu@Ni`ZHxZp8@^Fdd6He#lr#)u4S;5mn;bw$oJYzCW z>d8;hwS4jIw9NXD4Bww4zX4hSvrBxubD&LZC=?GPDCA?pEaq?(-65Af(a8ohd*r-R zdj6fns_8nq^wOVuGuiZa(8}3p6O=RTT^t)T9K*}W>`*}>`{8cKnobx{|P$ zEr20G*jJ%Uej>i=4}~+@#Kr zzi(w1BLFw6D7gv}*~GSJ(=OA-(9!O~L0hOjpKs>@b|YB$i&;Hm!gu4;8;s;QFT#ZE zNOz_+9!Q0p>n0i48*0qS!WlUQ_t~5^OTL7#`?}M$8DcSuhu63lr@(rT(rvsIRT$Pu7Z) ztJgHHqF$0(A32eEJf>pB!9ZPKC1xPc;08_j_}{xglR7&z$4Z~Bjb$B4rR)nj@z~cT zQ9U-pYggo}kOXbL! zdR+s(L`s8zexn5DSM!}+8L^Q>*@kjuxlak?~?r?S~@y^I?nzne~Xbin5Ajiq4 z$T^m^^92k=`PmxEgl|Qw$H}!?9*fbwQPy-qLr-2=Ys1WO%zpigJ?H)yu4H|cbG>gb zS9QTjPx>M-`2L_*3fG>VDvJ_)yz8{!>>=1m4zrhBsUr8bEj>SCOH zspDZ4RVgYMw4*~?JCGjy+%k(yYh%<$Ajr7Vfy{f);p^RIYl z(TbTJ%r11kzbu|^!Z70W2 z=sQkLpPib_w6230qrq|pVRGe{jYox>(Wg6_t{ctBu0j5mFdrM{0#0)1ao;H zc+b!6_B)2|UbH+Z5>n~^O1JH9cG4e-%1O18<-J&$NXDGji!J2TqNiQ3L(t_k>+lVJ ztaJSjvi_tnqoa<<{T;F;Hik~HU{_2PA7Bb1iOB2A?zo|lO7R!Id+_RR%|}ktImz6Z zZk?VtZ!1LazO9nCd(S?ZUz75&vLEv4r$}M99n_R zzxgX?$L!(MBC=aGSpi41IqgD1M)RHNaH9?0Z@$)XgH#VI0-i0KD!&5wSiRE2=2hEe z2V6X-9h>ahV}%HPMA~}^A$^UQcX#A;I?~nAGm8nzq=8u2^v&;gK-th(oCe|b;yDa9 zB(&g2Gn{;@rQzeAWsljK9#*kzE^jqGa+O;av^>tBBNlNau@j${4|l)2nbURd(c5&_nRwXgIH3fd=^Xe? z)=bSp&kc_b_S~s#{gUub=~GdO+Qs>v^Bs!qs02k1G~BrPzt9%VQ~Czet}P0#9Yd&l z*j0YK8x01>nncimQ(v@7R&Kb_bh5`T4WYHqQ*`oy7k-ZnRQpImk|jN6;cBIIvQVFv zRdJTStr8um@YQjJff^CiF!aTvMWA9Hi78y$FIvdvNr~QsYnrZJh_iE~MQ$IA%hiNG z2jI4t5>x2zuXZCU?7mN};y&u8)oR{+tIiwSlN&oZ%;TzGboH0M9^|ri)syA%_fXku ztTFPkowJBt2ns)crOw+Uf?Y~_v8p{|cFfBrlW~G@XM>QRF$k-S23%fGZ;Z6y6W}IK zO427vI^?-8|0OA2i(9NseEe}{l$otmpL5nRyK-@Jw$3n=t;Ts-knJ;b^);C0u3u_) z{~j~XWt|VMHOgf?4=#VcQk_H1GQspbf7I?hFx-_ZlBsN;kOEE7vYgiQa$NY|nG}2e zZ;kUkMfs*(^TH-psws4sIm$aL1tM)eK7)neTlG-iuLy zEvyu@cfX{-*v1aLhz}~<4HNmkrFa@PBmL-`*`-g&>@}GvxQh63jTKVE7a5b zr*)fp^cUhu*|V@I@x@S7?E0J9AQ`Cv=m)MihAPg*`7Ot3#=rYT z@2FMouX|W4yentYLF2gLpf)BeEW9(YU&H3V$JZo~zTfy}>sgre=1W#8DPA*(;O%sL z{8(C@trjn7v`3p+U5fTrEK}!wM+^3ELU2nbfA{>C^7Wud<&yCGKuZ&#?0g_NNcbT$ zPsi_$x#f5nrP9$9g^YulL25B>k2V93>r5)VbwyH?-h4%e0dr8SJsYsL!EC-5L~MMX zdq*U-$|P*#aZ5hSY=4=j9jL{dI3`Ce{b(O8*V=ry3Q)t~>DPO*dvZz-Q?ic)ZTDLm zwbhhPE1OI)AnQhSs94uvydox#X_b}6*=5&Jbks-(m?`_ZbsP7&bo!HT?`@p|;LxF5 z5i2G8wmd37Zp0iEp8*27$V^N4kmmiyBUG!aqwHPWikyx2T(^dsz74t`e@`rNN|-O} zMqZ+|b+zR0qsJ6lAWG$)f8Cnvlc9ZdVhrD(A%3;J=Vfmd_9Am+VxsjbY z<72&{vzF({_6uW~UaDCa4rXeWO`Hf4l}(}W_N!miix3UkVo)a<^HE+XGF{fb!i@ zv3>8qgKF&B|1Kj!MHNR zhQ@-m{t6qwG?W*w3C;)2Ne^`&!>1l97qCO^bHLYCFigZnNrxp#>l{Oo32+DTr7vys z`o~}XL2>;vHM+pdrlzJT-`_g=HBGMsJd3e@jK$)U1D+OO_(SbLkf$4R*N{{ zQD^S`^)?49CQuxYGrYgK#DmD&@!k6qj8?nW4to~3UYMTvsDjM+3&rSHJhjON&17-B z+a6SOR*I*!vHlrijw(_*811c&*RS8eTb#X&2Yau#NsMxBo$np_7#CP$Vd(vv>txXchXpE-L}jyWByLS6 zi<)Kq4!Rv;7Q$_g)ejJ75PfiPQ!$YvYL5)oQFz|zBLS|093%r>Y3WskcZ=Z@_3bCJ zI4ZMieq0Hwe`UUACAwNP5yBx@cwc?}lPuNwpaLgfy0zvt(gTQ+aGK6QvlYG8tXJ2G zc??Q#QlumVLe}4ANz>k&M##UesH5e>_e{F@SaV`-TwaC^D;L{w0tVUeRbf)N7UA!Z zt+x3Lt6%GjO-{D6*KvET9-!8W-Q~~~tXXIE$lVE%WXO=(xqfF1Tu~@<4!ut(--eTJs;5JJ)rOVZiiuQ$CY$7? zGC>#IpW}G5zV1I!w&K*c{81$#-2OK$=ViMt!QbJ=K8>lmgmt@>01*AmtFb{b)~$2tqo0}InzQIyv3c-Yyn2RU0WHt4*LtDDb&T+UNN;nbH20u*^g5uF|$T-?QDVW;bsTkTP% z5n&_(InayP^_PLjaGi5Az(3_<^quV*E8%voa2-QOiLn7YUtk7C?U%(P zl$|Xl(@93_C;wC)j=SCBx9IKKo_A%sjndct+oDmto{I0fxrbsnZy}Z9mlR{@h> zqzeN(Z%oAWFmFd0tpF87H_lg@C9t9O$W(5*UqRcWNHp|#{kg-EVZbXvp7df$j`Tv> zV5vp|6RDphj>j1^CM=4q5CsgnKaMT&=Rc{luzo&MJ1aNo-g}G<0zEjMG@mJ(#2XIp z_(Ft`zXjLrq~)tA*=z{yJUuX>j8g@;Zhu?OJPdK@9Pz0W{De5-PQBEl^25J0U6rQ0 z3eRAtKn3Fr4C_&++psxq4$hZog&=p0oX+vIS5#F2< z>82_D{-|u3pw5S7uSRBrp)YT1O3mLSoaL7%@uAPg)Xqm z$GdPAlUu46sveNm=d+@IQuBn;bI!X}3|*@V5$v{;M1ZD;{9}oV0A7ec|H-u?essq_ zb7}s+QpcP)D=PX$nc;mQD6eJEXx(IT80-0B#0{jcu>H1#u~ZhO*+Gmro4ObR4fSGn zTKG|EZ}*fzJwit;mV%NlZ?#{>urDO>pO+J6V4Nr-BI5n&0O{4-l?9kU37XV-!{G;l z$ybO?m~=DUS2YKB&UtBH%|VR?N(+b30y=eJ<%9mX~;;0M@rwTk3os>89}%hK*m{wbP&Qps>hDMDwI5_tOio;pX_X3-8+`UtxV(EFB?X`7$!HwYv7YelmUq* zZ^-^R`_Wn;M#HRz?bISt2xVSo*Os0)? z@z||CyuBxQRw^N5j2(k&Fn20ojOViE+CzinVGvVoiRXlRB0l;+Gp>G&CPIc(dI4T+ z7}3GZgp{iEG*8U2h9!az7)ut>5B^3HD%qIb=lBHlWD@YRq6$lhk$j!41Edqm-3k(3 zi{3+ZL{cvD;@Fl;l+KTk(kR_{KXl(&)XGIM&Tf*ddH8jdsJftAWKp7x3>%i#93AL-Vb5}!8@oBGH2Cu+KrJx2U-r?s>`REyR zO~9L}6$vLGfrn+gMlMM_+ox_&! zR9F!u0UAQ$5)%0`R0=E(D(uPUQvJnPTrS_%6u7&e-1#Hs$}t5w>qIwEkUS{1#=pm8 zf|uNJiI&Cml7m4+UmG|tN50JL{Nc-M58;)uf~ca`-3Rx;XzefOx9F~wzbsXx3%6Ak z!ChMSaiDXw+->1Qa4V+JF3{ZtXKFr)YArxbfKk(m@I4r!K0X-|UczgxzdvdplL8a$ z55fh%v?W((wO0Vk)ctUM)lr$2-muoFnz3)orE9l;k|Dxqp(h`wY7fm*@)Gb;8XISYAU&rzI;&PB}VDPehJbpT`Bn z;8ASi#+(siaH)Dp#duuN^>ZdEV4mH{6-T-owba9!hVpzzW;kKINJR-f!r5T(){MXb zJ$X+3aD~)$oLHkew9oA!+KAsK9jx!gP@a~h539>_7)b609txD?Z-^iq^!H5|uzk>f zc{KTQS+-V=DAX0JeZ9&%S%z}&UBqs2f+t&6=AQGP?-3J?OzM4!u8#>6mNrk%dtGhm zq0lqo=fA{j%M@!e>&ZX$iBh_wU3DEc7LG|0Zg$OZnl9ELNel1g?R^7N2ad@AsNV&y z6myGT>?mM%jT1ELw0U_ib-a}Q4ByKiO{Gms1(;GrMMUIGGr_Ps@`hPk-Q#sn zC`=A5-P%9sA{AkCV#6ph&^foA_tOnWkybT01$WPa4RG# zIF03GHTKueG_ouQos>XpLaJn2qrZ!b3k(}VpUvYqW0usKZV1y&|N@Fm|rU zcfFz^cLN|zInQosedY^yrpOfM*+gyQETszC+f@IN+D;|bp$RX}LbN5PD*dxb$i|<2qX4k4{}z&4{3;ki>sUQ9lMntzC%_4p zYt%Z^x^+&^z1+3kmsJJYCpzIelaS>KenZQ}&>j^i2>j~ZvWS64(0#~sr_S1mk375$ zHVpS=G2Wj}VWADLJWEuJ8tLvL-2I1Tkr6Q)povwSh2R4iVTh*`6pPV0%oTHBz%gPq zsu0@!NJVyv?p0@aQ3@B;WO+@mQHA`D`19tnxZaHIjFt6#* zSBYi;gb_x8&lwUfxHe9=9b{5}G?2b>MX~jueV86xQv?Yf1xtl7zK6rIcDfxC3>pG! zbNSXR5vTnfg=XSA@4t620&6`v0T2xoHF&j&8 z>3*jb5=6AGd`c9~oC0j{TiaXFZ~2qYVuNIs0>K%)f&pUw=;!H%aiW#IS?LosC`*g& zqMb{y>l&l(1VVVz*knx?BMo-xO*62@3C~gblM1%;Of9oLeYcp~RNo2I2Ha^RI0895 zBoLxP#-WE;9c#0_cR16ZX_euI|D2O7?lzT#chX%dEMK-NcO%BF3#zK3TC3ycJ)}qZ zwEHp7uE_UzJ^J)Qt=A0s1<%n3U;^Qm0#HH+S$Q@jN_Q7dIapYtpQV%#=z?`D72oz= zRaJeURh^fSX~8nqwFwgny0-j;Az7;g`GGob<)5e=p19iqS!{f)rKD|9(N5kkEG3J* zm_EsPO(Vh_tt*<$QGF+a`)Ajb7gm-J=bE|YOP9qLfC=F*dWWX_bX?2dnV$+W5u8*b9)|02}uv#`S`uQh zQgyxi)=#ssDuxKKdJpDG_f?9|8hFU2wh_Hg@n>^!F`v;7$yxfftKeizm9>f?b87+Y zG%2z{Jcs-d@F}f4hZa69>y{>!q7SB_LZMG3#oi#)56vYIYnp%ZdX(Q?m!Gv@-8DR$ z++W&oaZsl3&$Nt-AH>cw-i}!OjG>dZe2)XWb5@Qu-b)QJ?^um>ojcxF9mf++mT*Zo znIZW=1JD}2t3B_C>hTDv+vX0 z)ys@i2rz>`&D_ehuSb7tOuRdUj<68WWUgR6?r4LT8WhK8oG%sw67$0??Zv$tU-xb% zvWSxfxE_%b;b5S8FS@P3{xa`0y2OLI1&wPeQO)2-RGnt-3!(Zr4KiL}XLp3yW=&MagAq`n(eD@0RRr)tT{HK>vuB|5J5eL)CI9S1-@ z-dthZdzh`^M^gsjSK0egXDX|it!ZLg&-y$xOvtu8RvaVs{dMk+3(-wwj!eSqm5Y`B z@wF$=c0xa5k<xaXygXi+72gGbwkDq zKx;wvwf%~$GbkCobl)Sr^r1^#Lf{9TuB4{#8x0%E9CvP>i_@vVF=zKoo z`9rsZT81+9>)s1*C+1$KMV<)S(zR9Qi_gTtRt5S@AOX2Yo?uUKEWc9h9Dh5(lI3~b zZH7^|7cn4LUaP|^A&>cHsAQ{7px*I?0(ypg)!0puGA@AQ3^Q(Sd z(8eQGxxzNyC$Y&e5~?E6Hzb*jxcXHp{MktF?$u>wkek8o`8Mk&qH6+7>EDv^qjPpr zCLop;cNjP@JX^0oCMd6#cnH9OYU_6FJsW|#F>j>w%9CQN-aE}s>I)feYs-YpM-R;O zv-L$JdY%9&__-tK_vrQA(>ose-`#%uBYvPHX9MP{=0S@{{MJ8KfEg5;22r6vrKuA SM^r-@l;zds3NBpzb+b=qZf(U|$fHZ<2N=bK!Akv{ogLHT2pa>{Pmq<$~Dcy{KNVn23bm!0m zGqdjj^m(86dH4FhZ>_ce*dB+6$Z_A-b@ur?W9FT*qV)A^^GBp*F@*IS>&JtcNYM(ym@!sg&7>2FVOVzl7izC;(0e)TEc9mgP+2TcAt zL!q|MW3EWak=?IgP#zEb$Y687#w5|TQNFgSdOd5ckir&KG0ujlu_=#*p^~6xl&!r< zyCP0K2?@|7fudf~_|{{e-Y##mhFuZq#cpm$6PZ~Gnlkhs@%5`|80SBN-qHGDUHo|W zHHiG;$B3(!%rAZvr~6M2-*mQKCsXLbdn($M$cJj^_1O#(JDu5KWD<}U&=4@@x~g(R z9P|7H98L>sB2LUG%-zLq)B-zrC9727nPVG|ao^>>^C!e#%af14>GGTZwj_FZJl7fy zMy%-fb?ojfjN4YqMEr{cljKBplfZ6c@GpjvEx?9<2-(w)!jwbqf_ z;Jd$tb2H|Io0sJ|0?JK?Q#z4IvN4C*Q9`uWRunGP+iH8u$Z3~wcJ5r%*KL#oo| z;KONe_fVxaoJlH>mEsA%iqGL6{%J-YIX#-5oU}ey>tKhhaXSJ)E|Kh z$O!r;#R5b-pK&hK=eIX68hX7GaYy>Sp%dfmUtF%VpK}>@yJb=Sdj{igHU^^q#)iUg z1~Tvcw-|82!`M57pnNu1bda?$GyB+|I&PD-E=s3SBFAmgwp<}CQoN$d(rCX)8+9iY zP#W6uJ*>6!o}*Aljhdn+y|(Im^{aS!?2Lb{{wfhGsacQmkmJ>um=s4GwTd0E5AM+w zB1MV@8+=Yo_+FESbACk#dFkMH+tuy%JRYFK?X+s$Poplekbf;!f#g=6k(+C15Y-$J zBN=tF*o&tTukmVx4^=`C*?jtI8seS$;$d=OiWCT!X8Ic}9>e;ROCOpAbsD3>PDAf< z2O*-Za>v4)g|dsaJl`|4vI@r=gR-Q8`il+M=l$iT-WXo@Q)vC%p)9wF{K zr=9BVE7cs^;~=Oba#yQ9Wfm8^-YG45ZJoMpN(+SOfvW0T#=jdneNn&BR!MlGEVd}CiXYpWqX}c zkR!t-8XmND-Bn<-@jacRS!)Ta0;J%mJ2X6;qy80Ui-=z<8MWUg4AAjz$8YOtV@s&y z9*V60HF>~AYZ2*|#SkY_6#YJZ{mFJmf4JA{$k5H|2H(NNqU(#9k38D|u2l;8Oul7h zvQx>YhUJ1SSmx<;wTw|N7^98|uiLnzq0{+s{X?4by^l-%l%TP5Q31fyQp2$e3*|}5 zU>P!Oi#@Zn?Z>IKt&~GEF!gu_o@Kni$>Lsv-NqfY6P!>JURj9XrEJ{~)tMO^;Fvwh zBh1Ya#pL-Asgu~yPOHhhX_lu|L= zya$T0)&(dH@Ddm^lfL6l{M}Y2Y4Q`Zj-{i6LRnOG?rbvyl){mE0ap@VIZRP0*jKRY z9z!P`wTm@I*{Q`?Y1%yHF9_cU6m_cv)}6#Tv_xsaO{9k82^(vWes=HsF^r=e^@VYh z5n}#!2^!MvO^)~3*rV{tKMk6HL+xlokrfq}qiK&hI(X2Qm;YkNa&R;rKly#ddhGKf zR<2y~Zx-L~XcvMBjPBGL;6IC&1TQt?UT&{#q?n#x_8m@@K4Fzm3QBloFc5-g)Gk0t zU6^-b7cpE&^s$-Ht(I;w%pyOI+NeDl2S4n97+=XJY~!bl>tl%OYgSdbmQr4OfOEwW zP8ylLrn+y;76uq2D<~~BI~V`1EIEZ&js(H8pJPN%e_qxmm-wEcDC{@nhR~!V(#@{I`^??p_6n~M1-*%|?u5Z4NF#bbc;DQk zdAQGt+C2cghj~jjBj)tpqc|MjTRsbm<|uGjDtxOLnz0_0Vu8Y3VW%%bsAal|u<8ET z(jw2=E00iU$8ss2rd~CK4`1?7*TY6-NevCS9&=SK)x@C+DL+~(L)bGjGc=IZ=yW5V z5rK#C5%SyfKg4zO*><}^MT#i*Zt;6@lPTKzU!WG7rjPfl*TNts}<_v>qa$~ukc^1X0T+iAs3cQo%Ta%%wl`;6GxVXHu$pHi6a z6whwAn7=5M5*Oz6LrQ#tcvsdOalL!oL6fztwRag(eMYq>iAEVv(jJ|u1T|F0D)-X6 z%o1K9U1fX38JOYPgEHEVX3j1i>3534-YH>AtH+Qw2D^RVV`ivAH4ek#Vo(`MVR8_$ z05W?Kwn;FUEIqY$+Cl0TLulyK7nb|1jYdDYmQl-tyL49V)p4YaxAgd!{L@|~THkS3 z&BVR0sT-&`6+4W~jPlK5w}^>~JRA>Y3et(%)Tkz-n>@xzuj||5W+*~b8WWhv2r!L0 zfiZr8jrB58+%#3S<^x!0C_O5XzMp&}SA&>Ni)i6=?v4R-;_ySnmojA}ivZHpU&41U z=(&C;_?B_$n3O$RbvsNon}cNoG=?h5uaIlUy)TgL8MaU`U8~wiv)@cV#}*39z{^9$ z;YGU=KDP~91)IBYyLd0ebT+|X_3z#(%9_-d(z7BRt4(r87!LUKnal^Ev})s80Ad*P zE|W&nm@qlx!X$iuCifrTqiWYG86Vi(s>^5ak!gPbD^wKK6!(oOccvfsjEhDTZ6ejK z+eMsjbQmue;m%J^|B|$qsXrPRF8K;x__R@SrTY6-J4wCH{indM#c>DSTyQ-jiR+&C zyP43#Gjy(5gy`AJ)YcscQHguHFoNMlCeV4foZj++&vyA${1WPN%7FY&@o}(>hK1Yq zcZwERk5zctG72bSTs1Wm3uEeT)O?{Od!nh{`_`3ESg0g;GaO1c9=~AX56^I(-MA2{-w!nMEPsy5jp$}rTECH1s8Yx#F?nd`Fxp>p15uE z)~5RL5;;!^6AT3DRS(uIr~B@OE<(N)X=p_fg);mzI!}_} z#>8N$<7aMammyQiEjQ&Kh1cV=B2?;7s~TL)7T#icUXbNA4Iui$s1_^ z(fU4EdS6%Mu87wC=JCS+6|GvBJ?=gf2E=d56orRY@BI2biZFo=9@b$^4YM0nSI>}6Wa7f zP)yyh{t~?&4!MWSO5k0cX%jsewrZleq5I?oP6Goge2il{EJUFnay)>^wih)hc2Y7r z-Ed4g*BDiBg^!ID2{TxEU)|?}8>f?g(yZqAYT7!IVZY9OE4C(9N$J&lnXmo!y#`c; zFJ;1!wvq|WJbjbA3y{3pd73Yj<)_QoS2@d11Db=_h1fegaa-|X`nRzq`G54$P>#l& zl67gn!4HFcI_A(TiLN2gLcSSRWKN-VdXF@dEM=LDX^3+uoDm1$jhYL&u(YFuf6l-? ztM&)T%4kJAl$SW)ZA!A^z2ou7SttpOF>etX@ z>NH<17gm%u$I<FOVe&r3suJT}7pwwFFYXKCeR6MlRhxnxe3J-gyrayrUVv;Y`NGPbHzX)@N6aZPU7vFSXKu6WaIYS)W!8LAQU@~;lmKN z;YYsIo~=}F$W?Vnjp2$a_?1T6_9{mQ@}!k5bfBDf6?cK)E%ocu6$r7zw}pT@lMbk& zefz^vW?hZ;sg7{Q$2cjsqFKy`8{@t@|Il%z=g)JgI>p3crR5%lkggA}`wQF{bxIz|oiO+qdiA)UW?s>BY~% z4BQWP_Tc#W$Dc#mVMuJ%nm8K&PF#d@yS8f0hZS`QOBqAe2N*PpbRcrHij7E5ZW;WH zhXyDc&UCK8M$L^5PT1H{Z8T_NM>DJ=e2scT4U&CecV!oR9j)4#erVP z0LSZ-Is2*iyAZ_2mO1rD<(m)o44<*p&MSd6oKfW}g$#%Q1V;bktJGx=#u)HJ>MXR`(GJB6HV;*%|kCutwD;DpI0JjJg zC*zrdM?`dprE7UNC*yRl;fJv4zyO_Y566mic8fbn4(QpM8Pg*VOiVkfqhUG4n*GJe zg6+Inhc82Xlgf)4kk=aWjFCsjU&ywn9oq3C{RhCG`|hhZzmk+O%G-F3FH16LB8w$i z;s+QAZ{AiQ-|ZyU5-wGww!{?7EC3C9g;IhY+Za~Du9&5<*Qs*`l}q(xtiSVq)rLDN zViDhn!?uEJd)K{-RVG*2zHPMLa9^6uts1t1o)wy;JNX~+R zkwz{?nJ<>HAW3UB3VAv`{33XZcXm9};MCartu%ggLHx_-UUacirEYq6=$Uy}Cy$vM09r=ME6E#G0 zgX(g1%r10*b=j)bPl$~-0D^d^slv-JmycO!Y+&(I3_@@CcBPNUbIKA1MW zA>CeyY6KJC;2bx3?$5eOcH0EMHb^cm-YuhRCb!B>+f}9mr9#SfoY8PVk1wD{MkB)A zipPRQ`ReUstm=uL4~_l(+rz(T5X9Z#4*lI7OKc;bX^2E9og`xM17eWoSiV5DI1PR@;{oCpVdG57&Z?>32n-v%g>}-ob2$vTohUK8HvpX+4Php+7 z&^)zY3K#{a3fxG>Lq@Ec?w9w4UPfUqoyYX&nC8dUomK*wvm?TqusHlA>Xewm&te^y zW@r}n_SiKhVq#DP{KzIzD*Y98y{pGBmqjl_Oq@$P4oomMq>y{iSb_@VS}2t69sm)2 z7p!qS?uf14xfQd2PRT`MIf9O92AZ7H2<+Fy0CmGK{p+@`!yza5hi z(Hz+r&X3OccgACAvUFeIWD`gXU#qw}TIHPkNWMiSR^;%ok9CD39t|K@de&Y6ND!Mj zG_a1Lna-~L68WVzjdtbE@WpQn(iT6}nm%P8O3Ki5VHX z=JwM5?dg?0qtDn3t!rC>_%V>Y#VY5^#$*T;65O+59I%-Md`#LAZ1d$b@hed!T*$qMN4SavRDx78RD2!WgQ1g1TvSk8ddwl3OqjwW=&*b{_YAB053% zZ1i#qXe3A=qr%9Tm@SdCRPFq2AyGz5TOHcjDq{E_lM{#$N|N>{qdP(?G$EAP>kyi+ zOak_k+V=&xM`fJqfPySnfQCdQoUv^~9k7P}vD6g!LezbnU$JG3Z zm6MV4Dj+y6)e-{uan!IcJ3KUJ@Nv+XJ~I=53js91w(;~p$4%pb`%SsP2u_AB?i-%w zaIM~2)Qk2h3=yQX?ia@}?>fKJ;paNG0(q`y#V z>UD4jw%ibx&dInTj0L`dh%g|^-mU5zv1=tSLl#MqJi@arewa6Sa*A!C?y&fT zU*D)IhEh!!oZA-K)bp-Zm|s1PR7L5K;*M6uSmf(p!=}^TZC!lbtDAFMzQ62O<yD!+<4LTY-?sUFNtZe!-LP>K4rXa(KX^FY> z5gC^^|9U^(V|Nj}>6D6^AwYG?nK|h?esKIsXm|Lhbr1TVjAuZ1o3Q#S8>acuc50et zLXMF}xD$W{N^lwE(I-WQpWQ27N?U{xLE)W_A#O@|HXl(4uEP?y-9|qsbv7E{z7Hb@ zRX387gN#YeCMA8DZC0RpEPZoOgy#7n(RBaSA!u8EdinRD1w>2uhigB{KT{&m%}2k7 z5&y-*3bLKtm&EC3aj%0oL(V2G=Bo2NAV+_8ZcrP`*(fDVCUO|mcDBpG$m!te&wEus|{~u0-=Hq|M7tk;M z({cJT%jD@n+;sn!?f;+h|A!Ny>G>~b$NznmeT<2-xa{}j`~O+|`LE?K{*NH`p9PEl z?f;JBh(`}_hJyOu{-4F4|Azek5ed;0|K|z*e_speGcLT$TvaQZ5JXP+KZ^hVOZlG^ zB1wNw(z$VeXB+No=W$#!;v$Zx{k2c<9}FH%;s2IiO8frk<;i*e`EStB{rY#73_TAg z<|M!KkNK^C&#W2e`xPIr{7yIISN^YMLNwdw-tWh+a!XA+Av|h)U!5}9X)MsmbBP$f zR;DrtREyjp7y>Vvv9Uo9Y0r}3jeEhLESYyz97i~p`o0#XNTffs87tdg8@3xQG1;7` zhGlRUCOTwj-fqjY6ypc^y^=s@W@0?j`Z^PhiVH z{8haQ>x4>)gs~D6x%6)V)G#Fg8h|+8LgLW|arPXYuVo=*);wK#q`{{acvR4S+K;7T zBdXcdh1TpJ1QUw!jI#;oFx@&>ADt^u&c>%pTtr&^`% zN1tv=45$V}@?1k`K!LC3gXVboh$x%*S^$75C%t#OrQvIZwVPTE-qqY;1e9V2BRf#k*f?3RP&)sq-IP#9|Ga0*}fd2?(+FGIHoB3B~a zz6po)!-T+cXx@gFIGYp-&DDi0xM|;gYvrRxjY2$hQSh8rh!=Dx=zt1UTj0t;n^-1q zG(y3CERn8kZnIIhUJd0%lI!r<2opfo7(+3}+8R9=@=srSn z`XHVP)dKcF`0hSy6@%Zb1w}Y$W%nO_Th$MvJbe%N>Ozt(qbNKQ zw4%PlW>|7a*as6oteXpfG}|uyb)qy%b$y2q<#W0PwS-<^v;@9tqc06iFxZp9r4#k0U+z^Gv9S^&rHWJtB^R|FE3<$}aG4jK%(bFC57U`RZ8<8XQpH@4 zvvF;q0u9 z0)HSByxC#bu0O>gVi>lb>zJe2>`iM8Wnt{0@$A(dv)jXie{zcNG;~tb-`aZc(C=S^ zbq+VtEAEp^QAA1YMX6x@n=7RQc%CiQ<0dB|silo;{Ek?NZad0Ylgug{a!qvk3nIG+ zky!~>Ge=1yD8Y;nU!;#s0abwUfLXc2!p=rW*i+IBY58rz&7!wtWmA{Cqtha<{A-SS z_VJy#jnAa-ubm(}0c5lt6$%2q)sB0tLf&o2aQ$aZ8()FCj=hz(oY$w7QqSX#xyORF zSsB=(yGnXc#DZC0K|uj*3FsbVws>u|j~xV4EU>0Dy<$N_5I?+&U^F0q*>ZVps*(n^ z-&;rQ&kzcW(;T_|*(K6$oP=_yU3s}EbI{D?$I<@4aE1EBXWf%u!^3=r->*&*eG&0G zaJLiIbenR7lqr#m3{zf-5dAj=q>VLf0$H#_sX^D<=R{2ky>#Jd+=yAu2HTKYBDG^0 zvglJa_gS2;Ow8oJ(<_Mb+dJtRT(lT&6x{#$ECkpkDbR;ZS^1P)O^c-ZchRT;qKS1Q zfQf+z8W=KFWJw}gy0i_`hNQwa^e6e2_O1hlot2fvj}u0d%5_r8$f(!@WAH)Xl*apD zTb&%t7BT%4^d6}d8ZRQKUt+Vkhc46mFETz5XYQy0&R0o7ifpg6sa4vNj%$&xMGHn9 z5DYb+V@+V4Y73eDgz0ygwG}qeO^?IP+Oor!RHEMQCkGnx7HpFk`Cx2I-T7YRFQ52iAP=BIdt274A;Da<`yfyFPmzKBE2X^V zTZC&lV(UVPc|&JKEFenKT__NU{SvvWYXm55ospePTo1Wbl&{fvi+Dju(rCr>_UCk> zYf4I~S!bugVVz-?TdBugVk`KPES$i`tupa>*p}(!X3WfOpu=h``Cvf`=x4%K!*eew zn%%-~?I*2Tu9^K-?iZnMLrvP+Rk0mSHy(`^vItKQYmcx|$eyU@-X0BNnY4z0Fa+(+ zlG4A?!H+l3e+`R^JjqCLnfYouCUnv~ev`*?q{=6+Br14Qf3k9RV%8~|N-YTklTe&p ze;`Ncbs?)iwa6!TzB3?p2Ux(l{5O#;AUMC-jk=~XwiN2${Q$3FGV3nWMYP+DlK&Jn z{>EhWL$b~sOJ9mn{zb%?R&wiIheQV0Kbn_GlV;?YqzU|e& zOYtBt47CUe=|m0QTi2dV71Q*VBVjtufB#C0lwtDgPcQf4+8)6bx>7?+V*+-e6E*)6 z|4Ambq|2DM#6vpSg>nxc$%Wn)HJHgN(kk_A-JEo5PbJm+Izwewr|HJ7k=fgJ>7Nd= zXF#edcKl*ze?y%Z?c8~@{+yYrdZY%?N+~%jIT?E@oj?NNSYxyqf8D$ku1h@;#FRDo zZNBNg*U&L`AU@gFM&IDt7@sh!Kcml+Cw~L37L1p8_FT5c>rWyTWQU^!M{V z#q0}qX(uasxW;G5Psa{+7fH?`X1#k=d>@Hs!V+wy~K6Md*6Lee;@)Rir zd)A7E1`@1Grr&>f=v%)zZwACFJ8%DZQHU|g3Kv!ifMP+$H_m}vj454&seapA8(e%V zEb^=x?C@%X6_wHe!Fr2E1iK*W$8IZIIBfh1eO!-m^r>l(XVxz2Cd)AqI)fLT_J&iT76$?A?(JQPb<@1;SzMz^>bomxBFoZ>|1QB znDfF8LY*3n+6{+R9UN_zx4ISHXG7JfwNT{wzjNx7Qy<#^06z;oIy#Ccp`*>fI&K1I zg;{X?5ZA3p%YEy&w?xt-oT)-R_2n`+yLy(>SXFsMNxuA8)wGUhY87tmK`h z%0Oo|f(+#Mm2I09$WSWo@MFBRE z@4|H;zfo@uTlVM`S?ksJ*~xiwoeFBt_h?O?SBAOC9nJ*;`h$N172LtVOYX(Cb1^-} zL=|-FHdgB^0869)5~~0j$XkFYtd~E|56JFK!NWowhtp>Du|Xi-mi!%~a7PH_6dguQ zV%<+}XS560srhvvnbH0qw1HIuRG;jlHW7f`!(QCx+gZcjasKyI_R%N3Se{&@@|7=f zI$+I}bmsIB-y3)S?JzlV{r0Pc5 z0KvHgcs5@1(%Q8FwiF&?@4ItlDD#8YVLo~AE>6IpNC1N}Q4n^BJLH3^nvl4T*U$GK z6Y=ebeV8xMX&_OWLf63DB&>rUBDhZ^=s$9}CLHp;w~hxiTql7T?U+k-KMoh&T`lrK zh8|M;?oR4^c0xsu4zwZgcpC4c z59AjJ)ctAsRhO1qqANYuB$)u-%>hHetFX9rMJJ`st*@4b#3WUN+qD=PkT1o7DuvYf#LavAJGb#%aOB8Ms;0-FU zTQ^^~cb+uA&k&tI7HA%X!R=SFN|09BQ#-6J=m;ch@r*&BC;)Ig_a~s{tb-UB*8*W; zns_xQHTmW1Y5C(8k!a*@1u+VyZij@0g%456#LK0Yx20i#Lc>7h;+p%|eVeQ?=*h|- z0bu>Q0SQtzE5XsbqX#?H|L~1(&KK39B35N{%;ySO;wnOpNe?0VyM9ES?s@d4hzJrj zNdYLy+#ImIj$AIksrq>pyMD`Hz*ESR<1FOShWJPU@VKn3mJ_chF8~v6*Sq7|u&Nim z%^QId5{8YRR7{i~*P1F~9j}!B+*=tufy13S-*on-EhSYnT4!4P@pY!W9+2nmy8qOt zU$@ZWtU0R{B>ZdE*IB3ZIXQI%qZJOW?YyF*dHBVa9=?)HD!NypEefB7CbpB+9eSXv z!cT@+1)WW$@ozS&1~M=n|Ok-8RksU7@7q z&tFT)kDC>Re;vkiD!3D^lc3%o*Y6_g%+&9)!?}+Gy~6Q zP7C~rxy&^+hHH?)8Kx!Ht(qj8@vybiExuJ**Z-)Y|u!1)*;o{QH$Cx_IvE}B-Kld-HjsNgxiOu16}q8)Ec zDV1H&raob&TmE-k5=V~*{m3tPh(A0G#{=R(biKss>~4mF-+14H>|QNK03xwT|MiO6 zl|CU7QET7i>3j#Pda1|1gbbrJH4<#dYvYA$++jnG4+?GDV5Yc_OlP8adqtV#I+*tH zHuv%KA(^5(;nVy<%?0?YFmo0c?-*B_3pz2+-&Hm7_i&$Qmx$nJLfnamx|rjTtrJ?Jw2m`RiGt6 zm+4H}q#Sj!n8UM&Az{Nw`vT=x9?Hjj7I*g~#T`cEnrkKAstuJFx5G(g>tfg%A&?0r>rMeDzXyVHnI zG{^fncfhQmp`ig7TCZtk_WllLcvyWDrklGYtZMy6LjXnlL-*Cf+T0zEmxB4xCB@<> zc6W9YIfLI+@%GG^qT8OIMj*4{cRSf3EiRY%Q7su_Oml&*<(*3FQ0;V#)C<3L@X#M3 zLuU`K0Qb}M7t!;)pU4Ny?x)mY03%qmY)l^dk%Yvcz>XO~NMoP*D z>l+udHs$=QkTFps77r5mq&-@qS)~<5;V3uNvhE}XZk}%1vAN)3Hl-EAncI zqNla;u#10CYX6~9=Svi8VnE((3J&0Nv0WY}#t%$)kinbpy@smF7i_KLU0aofW~YNO zoR6q&?yznO&6=opKM*In@bS+San$>NNZd&UyV*VjXe`d`o!!A67ejPNcX>aF_$w%u zP>RwU;^||g3Ok(P!ZdluPA@VRy1^j_FuTs(XfB~QKRkSx6D2-AnWb@p)I~)0@Rqc3g=OJ$xM6JZjF1X)gVm(&UEm ztEljT2qMB$x7UEb#}YjVoe7`{?^h11&7tCI6shOynlOtaa6IjlWO1S}cRnvzu%tkf zeblGhv5n%qbF&JmzalA+1M(I}e-LcUg5q*llYtC?3n)}Nv*P;I9aa;#kupYf=Re+p^_ae2DLopD7ZR)9!8U#I_^+hg8QCWT z#Ly`Gw1A9|s9rt$`M_sCSh#V8c-ho;dh{3EUzEpqT$9GaG(TjMqP%>^%p1rAGdW>D zAA8164t^dRPgfS0ec8H)uY{G+!*yj|59sot(MSQmTkYYMGk*mV`S{d68&R9-5WJ=3 zS+&oJt4N|st|2_%ce_994>brcf9(Ch z&0CtCswNy8L_jlCs##2z-MhMLSJx_Uef2!q7e-^mEIeJ#1XQzP93Q6F#9^pr;nIGO z)Jnj&T=zqz;ulV@4~?KP!qF3m*h7m%Gn$x5`y_m~go0zr!P?nfH6YtpUVtS*hh_dP zT)~UfSLD7!pl~Zu!RJt9Y8I50K)^=zfka?oslbl7*a%LW7@zcLJbV8HS%NUJNgs(sw{^XuL! z`-!evkAp{Gj#R)2b02uQ;AN0uUowXR`DQgdrMxQ+xDY6rS1&47b4j3Sc+iksstaJj z?Q8qp;k{fc)>t->TzBe9>(Ng+11jZNy|X8LkZ#S-z^Y!PYWpwJSpvZkG zy|5{XMi}fw^Yyy9SJSd?UQ0VH6y`PQk|+x2@34k0@pE4?PXk7H7gYmb-0Pk0fN=wm zUStcL_0EvXeAA<4*L}I~j!5i6?&6-NFj9FO+OU4lG!PK(4YY9M=+mP)af7l*#Bp0E zyU7^^eaT){n~{0h#pmXh3{Me8*Zq=cq33^J&m1lg*jWUiN5KALs3PW~xR{we?P7AL z4}h8Mt9kQ_EYzPgIP7&HZTA3AXrdht!23QPdrE7DbolBQ7R~+4-qlp-$qTM#43PO% zoqL!}d9N;+w<`3(z0F#U1i2gWobIMGq>|}|p>2xHR-||lfGcPe(~VJPG|_S8aNqv) z@$2Wk(|Tka0>h@PGps7PT~VT!%xMLF%Yr+zbo|7%$MswoYHPlhjwAU3j&eJ9!)V0x zdX3t1#e7I0h|}ADCt{|J4am7=6T5twlh&zpR2!wAhj{v z#!HwBNT#a^AC34}4K^P~>}uQ6Z*EVrtOIrsm2r{o`GHp6PQyno{WCj&8o4O}vdE^a zs&Ky<&#Ilh)L#UksFN)SxHXIlSln9^>vhTMT^%g){@w+Ay+cX(nlZ?P=LKlvttZtX zXQEexKjjHKF@p**8fLv;e!cvv7M7F*Te($@^@Goh{`%(C2TH5%%0$ z?&gEm88ip34CWlBj_2ee0plq-5#;JkOgPU~XKs=Y(yF4FRxY6=%$+OlS6y6OaHKT4 zja&%Y|Ne1P`kuP{b1Gx8`hqtdgi!1RFhzu}E|-hC`#cqufT7h4KD4{(Ol#+HDUi!| zeh(d&#s$XD3ES}A_hAg`j#)7yR+Dw=Y zbw4==`e!oJ0c}*_)EKLIzm=@Uc6%z2GCAYa8dEAk5ar6gb=6>!Sym08jI!8Q{p2eX z-=lc15AWWi0ARAG2OFc#NTtSrUW4MkKp_eAH@Q`; zT`%W(X&8*Q1OV+^e5f&LNK0yi@G?F7X-2|^g52LIV$H3=shQR7+SImc#&PTeOnRcx zoL|`$dpT@#!b~vr^5lE0H&)qu z?-(QYO1sN_;*RGfXs8LSeV2UUm_ikh#e8tuWD#U={;R?oMJ?3G)N2sE!Qh8CD@Z1; z8G2hB_t5ra0a@=VdU(A~Rd=I#QE8&=ys{-O@vgq7csVcd`Ex4(M)~RkZsiCy-iT+h z7R(J^FQ`n1F-Wtv778&M%Rksm^tc>6td(tSJn!x@$9bv5=MZu|h9x1|*DWkPj_tHX zHtGr*25H_lm$=Arj?DuZQ}K@e=>A_d-ExN-_-KLjNdi-afR7pQF_SlTTIa1Wbol9{ z3j7$*jP=0JHOSu=fT?}?8j3OE)w$Pxqy?U&)9|RbNS1#Zam&y1`5-exAGop)6#fxm z=lZ~`M%VqnFKRmad7@|YX=HH^CF&ZGu>Cg^FbAhc5z`tG@;I(9R)fmW5FP2LA>9VJI-b}*z3Ach&iPb@@mTj&6 zXts;F9BHQ|)E=JJmd{XmUA8K* z5s1~;s(g|_)M`TOdI;60`8MC~)T;Ycg{;T$h|aO&UL#YcyYop2xLqKL}yt0j{H0TCU|g%pVVjwd#rsYGD~<^UF7g}3La-~ z`Y9v}kPGe>FfI8EPZ?es#e(Hv*YA1Ew?+EG^BKe}vFbNVnuzp^nX!EKT2NMuVjz$v z&|0MpIsj~OQveUJ4Nl;L{j(Ppcw5zvdW5DddM+`ut$&zg!#Ntbor4|1$1fL3&a;{b zJ!e=1T5v8cjihg0LdVsA|tDa!v+qtYip?Vx4LaToU#64 zqw_*|(#FQdZOS7jWzT-n_hh5QkHxjyvbF}ksG!}QllE8B6-{-ux;{`-a0BZocki52 ztq`AF-*Uq4LyvC#6@L0envX<)p+ZCRrDRKHeU(t(T0obRj-9MaXQ3hr|c2HO;sn1*Uw@m>NweR>vZ@A#v;ril24Mu1!yb;6eNVd0}AbuD?xL=!Pc zSEM zg!3cNB@c8xFn>9`3y=;Cc`@H6qXBJG!r>Nd<~vy1;Zp@}eFohcqWY*nwV|x|FlDsAqzV z1y`F=s*-5>HccvvsPW@9f11wOGvQ93RKQCB*VqG^a4%Um$18BLa_I&LJ zpAU;aB%&`;G;g^6>(>+VaScxY&6A(E&@ZRm`LpqORxYuOR4+eGN2ym5M^{tE0#xLD z!rB6NVu&?&zYbn0ea!EVjE8uZ9!r9NLg{b!Hu<5)UJ*T;r&+yd5EK_Y=6yuPhh;Q@ z@mvX>|C(&C(vE#%CwME70NB~Q{_1aoNxXc@oU^wgf zqUdBp_+WLfcnvvlw|aItIiR+XdEMP(rYPb%q`@8x*)Sp3i0)4oQ3w0XZ+c*QW)Dp7ca8wEqi%cTIp< zM+-zbKKI?d9!}g00S}^2&pBlLe#D;n$t;4|chN_NM{}|a2I*G*ZVm(zV0(Ap^V)Ou z*00^9)ZW1CzGKb%T$sMWaGz}(uhgU9_!;WztcM5|yKjh(+wX^(`9xxOhuD)uX=*F& zceStOEs_QjtZZ>Qx|ETooa8s@*Jp17yJY&FYmJCJ-$z(Be-DGxW~=+pft7p3+lKRjNC#YxAafOhBvF1Qnc;rU4Y?Nkw>=` zqvAUB1vq&C(Z$>|>bmioJ^B&$pB~nK;N&uf^SUCnZ{V=>7t0hpEx?`>3FEEw_C(3% zEe5lxL_D7djiGB(lg_yI+Mp?u!FkK$m0cN;0GD{;E&ZX74-J~~^bxDr)b7*o?xk#d zhU%c;MJRYhWxc||#Q2N!hX}HGF{AGSu-AB6|CDGhzl<@4UB9vo&}!AZE&lPWu#meU z-nz!XWd{>9hXej>`0Tsk=z`C^_eoR0*cA9qvN>znu^ffOA+EaeEz!jL(n~qLk87?a zC%2I5>gpDGO|DUU%o7$R!dC%V*ScgS=|t+`+RNez$) z$koq6KhC9P_hf$Oq~S+{=!}v?N8-dT$U^Tu{SAX^KFa0D-XUQ_eN;o>Qz}&ZgK)Y# z^?n%Q;NU3> z`>a4x5RhU?>DTuDUK;i_V^KEQta%~W*VoSA^tMP)z;3S?iUv7DQ`gOaUb@#UH4SwI z#sx{hg4Y>Ji;@6^2G`-J0Bxv0(~Q?3!6)dtSUcxx8qrtB6+3p%9uc!7Uj=FDaIvN^ zaxq`;a*Vy+E!HF*?^{mAdWcnZFACX8(Vcfn%Ui4K=4+lyyA39yCIDOoKEC(=#(=u? zIPL#K*INce`K{f!=Q*#4${&fB`pk{Kk4p{LAn{b z=EyI}N(kUcAD;%X)HF_+%*InOhQ1f$ZQ^-Dk(I zZQ)F)xkGL}r-K$jpLN~xwOV|h@!yt)_m-=V*Uc?0!zWD4mxl8ehTX#jvHYPA zjNA{bI|r!Hp&l1F4wan(b2sw5w^E&*0TCMSlsyj|X@d-3tHThT_HWha^|y`OFRMSs zTegVfN#3;t0d7>~#P)D&j=z}>q8HkKC)6}ooVTMEP$J!$t%>(IsH52{=CIi<%7aVO zT%S-dnQ&?$>A=AUbb4?V-g|PT`!!TXs{P4!>8>TtID(SZG6&77VBfDsuk{1hy7Kow zf%$FxW1n9qWA~Lo)DxvwcTlXQEB*Pb8;$vLE{$)f#_||EOfh|1)68A0)s6t@qcT<$ zM^XkmFLas^=1y-6C%sTLw)N(?F1(u|>#9Mvc!b`s9vT>+a~~M(-9x@QzjFfiC);l@ zEB$)=A>yF1uNqb2@qb3AzaJ9C;|dSU*emXY2pj6rqVAHj5DH;JOpq0Es@qst<&6_G zfVFC3ttD8q3u1r#fqzH9t4X-eW>v#yrPbklAk@wS@Y2ps;375JX-B3)<;}01L;Hl| z*phIIe*GZ9!4b9bvc1916_)e(!~WTje>X*bfNZ`P6edsfS2=f6+{C3o_S3gc7la)t z%kLGj4qBOXG0SA*E0#R!TR#|E-#1&iXYEFUl4C1^?<;xpTTs-?HP)}jE2$o{nZ|-9 zD4x+NRX7U3AfpvS=1KP|?u*mMwN^*@c%PssDJdrw-ioDh_vW1wQVZE1eW0r_yQ|{2 zUK1G8erVTTOB^-eJu3oWa5rj4g65^|M!K9OoQr%H95|U;$%Nha#e+^ubRLS^*Izbi zBO2sUl^DQTR*kKI&wf>`Or?OD+=0Y&IqG{&+g-=Mzuup5TT{~QxCshK?)g}O_^eT+X>yxZX19-6`b^9%G1SlITbC+2^yWY|_fLl4LaYCmV@(3E*-d@&-3}9s;`e!8 zevVD^<~}S$R^+0{^2gqriZ7_QiQTi>mcWo(m&ZNOEpj6|Lo8q6RcS87HVySF4OQ~5+>-#TTHC;Rav z)rv4kfk?m(FN3;N;4=OopbB_vpr0MT3q!o?4xyVMGjTwM-ogu@!qHZ~S`u}|zQq0K z?CXwN0^}97ayHy!v-tM~*77nY_z5O7SPrN+7o>>iusB0dV#Pmo%U!jkZS1~4R}v)` zXqKquPmHlM{L&rJXM4S}W3OK)r*x@fT$%)qnljk3x9dHOyZ-`JyI3|O6$z%A`F&IrMBP+rQ+@YT)Q(Xb~`m*)p#UlrK_edDggEG>D7J?;n`Ufxa@ zHYO)Z7iHpcqg&&&WQGr(G-*P8ceS?zoGqya6aM=qLmPg3L?S#f7s%GFE8Qa{mcOQK z1r-ewC>TEtMp-;i{ShvSK1UBN>*BmqO-$W1c`cYu)u)hLoWze z*H%_6h&VPSL}q^D6AMPc)OoEwa689E&UBhdc7822`VG*E_6X2$AkzBRl`WPJ^i990 zXe+C%KZ3;JgQ~COyeEi+eU4!fTH{+f2;;t~6fV6ZrrnCk)7+AwV}UnFPLsbqts__% z7wDCpnwzgGYrv@HHZMK$%H`AIn)Cg{hz`?IF7tjSe(CL)P_z2(st50Sp32!J6X&~> zbH%nz3%Rp9zUCq3;T3i2H$`aw@PNRq;TwQdwXGBVKw$D_$qPWR8Zi$AG6X;SM{AGo z_}3_4!a_%dDw@RVo|trlEgPX>6)b4IR%8Dx?|4)8D#Ce)^mO}(5gAQ*4F+5Kok=KSiZqbR%7PC=z>!*brPDJf+P7R+x{2)3zt2hu zlK|5LAn7Lp3UfXui`sOQ=VjK;;n5sMQ-J?*stp49BjIxEIj59zdAqlKxm=3QExgy3 z7^lg4LhAC&w3gadb&Du3Q@5KXQ@Vuthnx>~u`|vp>fhxaKi{C;Zeqg3=PTGDXMgO* z-r%bt7M3WGD5ag^#Vw#P(tTOJ2goNzy0cz?fGLpAi4`IoC!vm%c*p=$u@0vdZG<4m zI9y`!+FIxf;WJ(xK7GO7J8H`TIw#*LU%0O%Djw4Wde(l;hxl_?zm#dbZUGWj;Q`P3 z7T^mhwD?Mhx;}hWR+_07t&(3XL?%*knN_@b<+WCwYZk3U#Pbd3NA1CLd>pO*d=@P; z{s&*bhODSa4Yx^q`#!+#rsErQ4D{d!A9!XQc&}-j$Dkm}hf&BQd7LyiW2b&2gpofD zp#6Zd0FfNQZu(;07W-2E%$!#a#Xr?cAqNmfvgbkS}xe#zdesov~U&T+g$*u1mKL@b`ioj|Lf2%V1)(PRd)5Q z093(aSt^Ri^e6j4=~H6z12{U)5+t@wlrk{PHzQ#^6Q*(Uc{5MLae;fRTy{2q7d)ZQqp%eYY`V;vro#)_K{-xW2ssH2z@)`Y#ge5A4MhI}zi|Gd9o)xc3 z6Zy7t!FTpk4zo|-5f|wQ!$9vIdQKQ(7~kjU7)7;| z&Nj|Pgjp_qx%!T`wXMIESwr3SiQI3txZ>?vEW(b)zt;chIhDOM_rQ9J6#vPk#SjA| zA9m&VI$wMZk<3RbT*>fb->YTkaZjGb{nu#4O29@5%$KZ6ZdCwPu&D)#&we_~;4wHA z`&H;qwHYmHN7+U1eqG}GuEpvxQe{2rKKQL~Zuf^S{bcD$#e5$YOvJ8q`SQCpE!XUW z{dEpvx?u&RJ71e+J<$`hGES8Q+B1m7p;nq==dQ5TDOXf6`=kMDWa zfop^QNy7q!15wWm_xM;NW@l*-dS^9on?70)D;s#=M}W;*e3$~j1QM_;Z`Xf3ZpCkI zwM7_~m9`Q+k?^^lZ$~-icMBg^eDE&asQuRg!;glfR03)&#(DHu4i2iDo|aAJSGwm) ztv|51ww28wTyMrZBJ1)FSZ@e5SsqLw%;c(Q z3qa(cTRK6=eO;w&bs!j~BDFxJFW@C_&ArdSg4`yqzCF45BQ(C-y5j`y&FfD1-G{@Ny}w;|wzO*cc#I zC_D&N(dszG%SF83n$NkLEeTuuU3y)8bZ+8zEt07;vrwI3I@Ii=010>9;x|t_mJgDj z{^#A!7aDg__Z!9h0`*ke6ycf~eDN~(sg(3O*dRld^IUdbd59iG@wHBXL^jqo8ltKC zmP-;ar)M22)NaQe3F8On?F%NbKQM#s0M0*l^->B(x;)l#a^V*P4%1mlr~Kv2G)Eu? z(S>dA5M^nSAQflOjPkOY8eQd9NM?FB(G1&Ij@!2dtiBQo=hek6hzWZ*f3>vQbEXW4 z4fq|RyH3T8ON;X_gkT}asQa=u$ews(+(`r%fVMm}r^x0Uo&KRSjO!)1;u}~!<&m~q zAJeJa%kYk>@>sYfsyvnyzdS#On+&Q>ZVu77x12}IDjxj-$}ToW`~(wVn{N+ZR|Zi% zp0{@aS-zZS=UxC3L*!{*CYa>cFh-=Tpsl6gO8J0&W9V2GDW7ML&PJN2_)X2N_nqr+ zvxi@ePPJzK}L2t0A-)M2L5a z#>t}|7Jp?P1xZ2vU-Q00&sve3dz59s#!x{rbv6q^5LhXq(Iohl0zdXR( z%{0|A3<6Ah=7*=-s8?1g>2S`L87;G;qUYZv6!G)(&%Q(0L{fczhh1d}-}LF9aGpGE zrVTQ|J`GtATvMaeZCa1t+;y%#*Iz+c3aLE#qfngAB=nl|jRN!{D>Q!+1Bq(GttV;c z*9gSjNWqZ-Isjmu&IITd_JQ`LxXN`5)ozX45!(tOe?EuOnWydkA_wT4>_opXq$bXp zg;kYED(}=ek0&w%`idOtBB@mX^84|R?e}JTU!_;oAFGi2f}}uUv{K!+;hca%Ng5SgVtUf?|b@3Zap-mPNW!^J*XSZG)Ui+`QNv@}(>%8xTQ(Kpu0@AGLyQjJ6 zNM%6MhyMA2(tOsim+^LPQ#?9__l@|Y+29f78@0G|Uxn?xsql9j&k%^~fDRq>Y^(XF zZbQwYwyWtJp8Cl;E`d2{$ors*M@~i`%ZjK^Q9~&LoQ3flPl``bM z?g_pYLkCJg;}QHOD}neTX&7^OI&9ST_713#sGPe6z8f?>%;R+s+V40n82jZz_4h0^ zm4mSGcMm0fcjUC9?CsGfr)UP>!7e11l?f&7qnd7mfiZI~pB;$L)~qd^q6mcHR$$8G zcht-}qPgt)ODY=(d|k9Qb*}hd2Azf+$O~E7u=_hkQE}bSB=`6gD*dDM1@&(Yxn9rGz3I`irhJQ% z=lMP$UsSodfm(&}@C1L3_avmIA}3_>y>F>ZKpNsdEcHMx?%6Tt$fTJ7n}CK zL-l3^s()(f4qFN+eJpauiwb9~Hth&yHwJ8QvSvzKbEdP5EoS&xbuU8elKr{HtCna0 zcZ|ILdW^`pNp~77TdsfW6a7#9qn0u@T%58Rg_QQKW~@Ky=7*Sbyg7506OC;ZeX_4Q zuYYik)EDug%tp?49b_ZDwb+Lqg)h0RcBc0(04RE!f4)Nz40~d-1*(7vjAsdD_4UN_t>x)&J39`DSz4OS2u4Mn!&X%p zzPUSU2d$C`#XkPfN3mKQ2Oj!j!J_d2#2{hQ)CB0kWt`(w;hwCM^&c;rOqHIOPgk|9 zFWhSWeIUv2Gz>Bd$^^TzblPUd692sT{4bl8q)6r=dr=~cJqh}TVdk`uQfg*QqT!{O zfx7XoBAaKz>bz&cVwnbst7odAb`xb7)F4OJJ)FO~Jc4v5S)je&L8NJ&p(`_ zJAvD?jtxbHj~>wgmZNmHLcw`K321?bG6w*jb?cN;;3sLO(&0l3EUE`11y1>(@40xW z|MRr|ZGl7?LVGLXvErHY2mh`2y&P5lUNO2gjRBt0x~3@OK; zK>REy$XhJ!^&59i?E>{>m`?UQDI^|!*%`^ZihH-2*JBFq+t(%NH(!{a3eJNV z0!aEp5UlOSJl;CF>Hw6Va^_bYH&Tjx$^K{jVY_jwoX3j3Q&>H#u+BG672CuV&xg?&RHh44GSUV9}1>+@JF<|@` zS=ZGW&_FD9-CIM`A1)QSE$c-4Q1k;dz4E05q+wX(rg;>MBw*=zX0496Puq z#Ab%8oDxA#e|51INq^3_v|fQh3IdjVsd29*>rvHV;=o@85(r}~^6``Exs;}+W>|&3 z2TC`c!=)0!XV@m_C;~|rUM*$mDMi=7)cf}c@qRHwlin)S|Br3I`mcpRaUxZ0W}3UG zxu5<5G%SbYwz7_WSN|fU_x5s@-RE983+=a?%Pg^=rJn$tK9}{w?yBO@H)4u@e90iU z&tW#8MD4L8V5(ltkBAs79;|gH9KFXOpVE~U?=tNd5fOoO5|9Jf`eIx|1ci?BNl#uR zD|~b-{~+k{N;^)D(Z9c`+r4`OUZs0$--StZ0EY=~5do{ub5NG@0&1txQZ+fmA z!rZf6^9A&F<(oXJA8wq-20(9LPv&$;!4gWRdS*wHLmdH zV@Bv+T4W9)SLjP`uf%GTHD`5-oM$%{727nUO6?M$}))oMwt-F(WY(J_V31E z!s~RG=u$^i?aSARyrQtTac^zrwO8gg+C!)GhX zNh(nK1+)!&K~{5t=6@HJfuQ>tb@AD!?7J}aW@L-JXi$=&aptlE=%o{XHUVJB*}=hu z^69t2SqLb+o2{D10}i@izlf{SIKlxf_5k01icBFKAc^5gzN9x*1zO<5^f{{{HajUK zm@f)*te?hTKPGzoq@y}|5HeLd1iFv(qS-#~)`1w3XYY#pN)F@#rm6{ zACua*nVYHs+*;smm@_CVO8{pqM4wtYcKml_g}Feh;y2n5{b1QtDbw3xLwqgX1|CxD zta*+zj*W{Z4u97!v;wFY`x5d+g_d%dEsuhohsw!#qM4uO-m&@sVD3xfpNbte5hX?V zR;Eupwv)MCrLHa6mmT#4c|NS;$ZVqc0fbe{xMS<=2}Ne0(|QEH=i<$~{ueaM63_gf z0hs>nh7Q4_!5yag$0@XVL2?kOlnL+Y_m8*UhX5I;-b!UxJg5wy_jP>A!fLK(!0HcB*3YsgnMe!{c_;>g{ej+yX7T zdrp8s2fM@Ud30MQq#}9JVOAA%xKIzf6aS_N%hrQuo&#k90_qj`J8Z$gHm}Z zpxgWwGkohYxXJa!vAA@7uCqsix%^6P)`l2Kg8e}mZ$iqZKETFEf z2MS@BSGr(WnX!#^M-UrDgW1#@Z**K9W}HjRMWjko=!+j|=I549-ylnHj5K72t02y!^P;;(y#V{^ z&-X=747%>$&1;FzcB8J>T;C)ohWbV$cmCD1XB2?atcgHDdzneLBIlmjp6y)Tg)cFz zlt1a4XvJB#m6rN7YGT_ue2p%?|F4*ESE#2ybEOH|R^Tp1k9jfkj~#pKKD zSH4bQ9DGSA_;99gMBZh7so{O=yCbHvUAQ${LJ`(b7}m}P=!fRAy~Kjq-Uq%6Pb+}* zz(3OPRCxhIoz3Tk1_k_o250`ynx?~SrDE=)1w?`(ep*!Icw@S>O4NpM223lKTV6I1PMdgpzpW zMx+uNz?rT-OvH!$#C)m1`XpvRwW5pKp25Ij1&%pxqPw^h#~2oQ^dA5oKM^o%6P`MJ z*bkRaQ&+E~_)7mJzQS5LVdMory72cIdP?>*6g@)U!H)a1d^Wx|2{1j&@Rw(M8q(F_ zzwx<^1BsUG!}uM39K>*r9i6{G_Z)kGoxUrxQ~b~ zA)f#@>mH%~3Am9SmVGgq>zynrEG#Ly>*<+?Pd4-7h%%KLakA-mn|@C=H#@y+`u$o- zOqaSSbP<6wcvApOiO4q8Y}Jl=11iX@LubMxFc{YZ>@E5v(ZrOe#}bnRU1d2rMRmso zKMKIIV6%C9PWmUb$8S6s`2w}PU9)<=ta+v(Z7RVaK9+r1oW{k3)|I)GOOrwa$j>dC zkDg}ZdI5IF=}T5lnnGW2%1{3l2D~0YI3@_3N09WFNzOa-LhC(#9H=SrC!#BG&xEC- zBVXkV42~8Cy zgVH<`N|b59>Z}?2bwUHC+9u>M@fFZJtw6lKi-owyEq`edY)ybHL1HNs%U6oO@zxBq zd<7uI7h`hu@-iv6T$gue7R0&srZ5MIjII?exuf3Z{!>q%kEzDF#Hes}!t*emi`6r!&H5$#}td{Tuhcgb4)*aG$0hX1_}MpPvG(Pi{$Ek&r;; z-C5OiNU16kHVVj4KSt0`WwD-xEnVB?O+BWhLX$!nyM3FQZG&|L%NeGP^|-4o{y1)- z^StShM40z{npM~t&BNlpUP7X?H%uIWD4+J%iBaxlx9&W(V_J|c7}1M^=JpTsfimNH zoDXJF_cQy9&@Rcjfslzj&{X~Va)Ahaf36Qk)BN-5 z2raa8OM^}n-%Oox!r>8`T@{bQ$w*Q%rbNcajEaA@keyx_)6S_4KieT}kJ(OTynEhn z@yw|&O_P3e1A^H(`}KQ%>4gab z`D=U&cUhuUzPX8wk?D`cvu9QryNo4vPRC)UmRBhU1m?HwA64xFn?<*!>4dAOnYU8U z*1A$6_fLE}?m|2|VZe=Bc`QG*)weJhQ5(5GrfYEx6h_S+-Pn-5(8VnRgZ(v}%bTq~ z(7{F1A0I7sqw3L~ZPS@nK|TezskRd``t3PCf3}dZ4KD z%y`dO8mWm271v>isXCr;k~OQV>LOan*eNU8NUd@rrD%95AZ#IIav5^3`PaVwL*7!g z13L8YdhHQ5mQjkk_@8)~1l`b2R1cC+89*ZiXE$3c?Lb-ctjxc?b>Wp!X<}*0=kC$; zsSVe?v{}_26lIz)NX_+JI z6Cy8BB5cupU3zPbAfZQ4jj*z_*OsDRs6VDPNr~kuG*8pVxD=7ZVtBh&jx-!DkYP`>5eAGYb6UM8;#ohaG7HjtwfM& z_vCmsx3-Y;xNq`BQjX;!*=?P&gMuchZq3f|fa-hZ%<+~bYQ((@zTv1HHDFjGFt5n% zb#Vb`?qB)`M(f4hh70(ANq@J{DugT?KX{$>C@@xc@4g9e|Dr7ya}OAlr^n-Ku;4?e z#8ylQj7FQu9m|c>;!7r!-=D~mW8k?*J*@hcH%k%IX=Q3EtUt{d$$IGH7gJ}{#s9Fa z#=&nw-65rmh!Ft_`exkoSp+3^EOs|Np;_GM#0cJ}q9VYweoa191!Mc?T4Kl62iPdR zmV28|W@puuDsPk*ce=z8nfp&eByuU4|WWr z5JiHx+CBpc4%>3de7@aD8Mv-*LH_HP17V{~tk)9ZSGr9^|6Wyr z#mu~`@DRm3%ScLY0a_;(eucG{2~?@hoe`^#dBD(sxZbMrx7P@=D@%@z=Qs7K=u}9Q zmfN+7i9VL7W3Etvx#c2rLnfD_f-8H}dq+l6dpj1aeuUik`oH+@5HrDVd&QI;FH z#^djb-?T&y3;fdEgn$|wugW`@e(uvg$$0_T*^6pqzLS1_7_8RvbHVjX4D{vHOLfeAs& z9{U>eON%YWHEL+LA)|`#6i|4vJz}cfLe_96_(BuCZY+p^E)ph zk(jxwScTxa|MH_#G?Bq{k2pZ|^5o-zob4qx&)DS{#?rLDbk?Q8Y_2ahGrBD; zUm8hGV$!<+U@xdUi%LEHNaW+nc_Yuwb85b1*s%@@Pt|=3O*9tg!;+qsLPSL1bS(mT zmisBO>?w;}-9wagEgsO)08%Lon-r^1P5Y(@P%8BJE=yg>1h{5Cuj#NU+Suh@W>JyL zaV9nk2<6cxfK33R!mqlZ^{We23;pr-8X5s=#-+g7Y`?&G$feDoBhyW#CBzyE0!Qnptm8jJHs16e zi--w&3H8^@0Vd>QJd%Fv@W1DIPRJ|wdFQ1?H^3ey8i=~4MAuQh9NFC$k(C2Z03f+z zKHk@_N(jw14*X_-o%Fq}({mtkFA06rxeWNb+x9eUS@Z_LlTkY_JQD@C*`Y{)Yx@+G zwIA)c-=O_;_gpYJ$MV|=A20w1;%_(c9-Xlg5}MEn&dS}zI43PA+ptRz3OJtJy1s4e zE7SH=tkAwE7>qTEigquD;q)sdXrN!`yaxCOAipMkccmM=iE?pL+-|)$129Y+NG(@P zC}!baIE7$Gavsheq6yzb2wfRD4I4Q+OAVXhm23q;`}Ply zWjzS`jymA!(H1Oio;Ipe?TP{7Ri3AA7+AcvIPwk+FDK^23H1Q%SF=w$hlD!hN5PH= zHk!{47O{>Z)yXL;QX^Jqh5tT4X1E#v22)Z|n$My16@-j#bg39!bZW)T^* z_KKc>d{q9(boYM_GZUgb0`xluG=?;T9E(WKog>w^)Yborb0NJ_QDyzPUZ<-hoJ?Zbf&JsE$TMV5_?JSVHSGcC3Aw$P^f`tv!lwE2uk_ z4dVm0>m~b!5)o=n`6V}?sR-FQ^vk=mezt8L)%C&*I<4!zNOz;42+Y?nD1vX!Sg=h% z0GIOtybs5Z4r!oh(XgZj&O7;lkOrAPam#0vkA8;aqHdI{!>$Ojk!aejz7S7+sfUJ2 zRcoIZNQ+zbP~Bni>~2p&&3&$g z!d;_X-$DYdQ_Q2JwgSP^{T&)UyZW(X4ld{Q@g-yD)-7=1WdZWQW)hCs==GtECQa4Wv zKkIS`tO=LrTwLsmLFQ({jCJ(kV?w%fR@klq813tYxq$Q2|xEtsPTo0nZ z`~f2dvQ4cKdy-=R1p2)dn#)0tZ4R{5b+J|TTQ7W{w(bph>xjl;W~HuP7Ypq(j6h>) zu}jBuTaM0dGN*LOXS((p-&YhoAbLF#!S@*ul-8pJkH8!+Nq65a@8W8M!So;vhZ`BH46~6SOZ&KvId*RCfOx^lJ zMD#N^^r3!a-nW7oW&3rvz7NM8>M*ZpuuW`0S80$T@_Ey+PnZCK)5Acn&%bv+!;!=J z^SsIc2(vEx{IUObu@Scyaz%%u79>(iz%3GjTFmOeh5%}_L;YJbp**!*DfS;H^VWd*Qg08oB)Yt58K&2H47nJRXAy zC%XU+mj^bP`~APxqJ;uzo>{LJqbklVgVj*i&Z3wWyw6QLmDiDnS0L6BQ zfV(ATMBU+6)Jb>eCloZzj8(ju^-$M`YY`2a~d z%%3KXzP>eH!vtPtpYz5_T^#`2{_!f_>38DG%aIn4%xEo#+z-y+Licx zl1?wh#)SF7la*q8-$O1>zs=VhCTEwy-$Jt}|Jq)$4}8?X0#hklfqC)w%ZGx82vX?@ni0npxvX=g$0yy+GcoZy-C*zQRd-xVPM zbckP9Np=YFmh64ZigykH{lRkuH-5v|GY*8tS6~+b^vyz`V(epQwX+~9z2aPG(Z|>_ z;}9|U$HrMMTHxCX6?=w3b{PoTklPq;_!Gn{=SD%`fMOREWRv~{$y=&7N?I+h@jBpm zgrFeHC_GctkBSP*q(J~7nY%*j@2_iK&&$>9UZK=*O9YTfyWA_J_&Vhq98(#Pej50+ z^Y+;q3))yM8O%gKq@&@==I6`Peb!HMK%pXm4N#$T)gC%EH_ie?o#UOn>I22(PspKx ziBt-n0raSRS5;SQ`z*p0Q}n19Tv9y5jr)7T^L$DvUF-fKLX$NmHZxf_1hln>Z9sm2 zC)>4=u8r%e+8hGk9~t1BGj{GQx12aX+^+Nl2;+l8&#zqt=M>kxQ*6h-61Y0|E|x(q z(Tta1W>A>C;`~sZog-$>BO7%t=j*1xCvLLnOKyllzevqYKe-(`5$xPh<(Ne(qS{V2 zK~_i^siw{Q>ARjYS1d1PO@UYvrnOLWQ>i_1CD3gpY8fK=GT!4WqPtWC(iJl;&rXWU zAV%fKfooA5W{X!apJ!M2W^_zs#NPneC(g0=6`Egp@GCMtqbjm$XN1Og4!dPT3XHKKin2C(@ z?Wj0DU%0Uq?4lJD_WSkMiqX&ElBVzik(MSEDKeA|P}ZO6{jqvfF~wum+}c~d*EG?G z6zvKwm#_rO&qVVS1Z(RuIpy}76U%|e;m6%43o@c=)q2@#FJqU12@`NWHLP~UgfleN zFkUIcjOTGK=jhgZ{I3~vEX3au%2i709#uFZ82QN1n)hHFV3ev&Hr752lGZ-juIpp% z+~#-VTN2#ngriP!?>}?;(LI2O5da~hc4@muAi$YlR(Lz3VzuiTd~{lJ$hyp}OBy3| zGTxC(3}J!`pb!zoPUVBpN!-B;9uwXhe0Nm2 z25JPP)1f8=_`A$w!yZCv#Or7sbxGy=cE*FTs{pl!q#y!U#sLvc?G?8W09=S^`Q|JI zm5>8-%+^VA0MX{erT9h5p}ci>W^o+Lfvv#VX0ndLlgUs2F+;qb_(OH84Ty1fid8t% z|N2#IKF8%MVhQE?FJX#xzK4`6gJr5Bc4m@S%tDQHlt)~CVPQ}bsoK#573T}vZRsvG zGD%)C= z=`pR_PhO?;#P$JS+!)POpMf4rl^~d8VxrW)wO*Sqtk7eeIKxNnC|1Q4_^m77D$f1t z!}Ma&L~heP9y=-5E*<=F67L2Gb=_l1a7%q`3xZ`E~}WdC?-}E zRKKyoJ)0PBY#X_p&v-RN<_6iN+ZP$c6d11Qp#!melV~a&2gG%DG&oCeB0Oj<1uBkp z5{?7;=m|oG=<(L!z!N;T;-q5k+W>G_1)aNh1Ggg@tUv+?EctlACSMxeykn$jL@PAn zTO#^{!N~RUEfH0&-^i1vm2qyLzJDT{{5L7eQArKZ}T)f$K> zxE<=1Sw}q=n8l@SDD#fj7elo_;WG=_KPnsEmlIDXX}%Rg?fuPx=u~FG&X9Y>o>IMq^y%Yc ztU}t1Fb>=y`v@wk@Bl^VEID0TER_*``=5*GZ|c1`s&U-MYxY~hUU!>xku;%F*UZFN z_GdDAsqxkV+Gdi5hE(rTb>KZPHI-C_L6SLr!4Tn;D2k_0g}We-qPFcHYH?=6y-wdWu6j()9O@h)|vHle1Z z@WAKZluIdLYNZUebMeR&g;plbE;T0yB^H@okX+D-quC!#v1GdK`M%Voe~|r&X#2l+ zjp)hIuhsr?GWV115KWL~El7708*fe4%qIzZn0|b7giQ$wI0!bw#wYI=R`jniV)HW= zRF&L&p3uCRxiHqJj+z`7IGb{=?vk3w9&u{Xh3jq^;vlpD(;ph~u4rh{g;H*lh%0QQ zy35vtPQUw}IR6vFySWmYfPVMC=eZ@=Iq*#>Zc~2PSVG7&KauW#&hOu?@_;|}I0~H} zM!v{jvd22a8sfH{vADk;8$82R1Mr4}*I$un*s zYk)Aw1Kx_58D7uBePf}Wy_k-`4&G3XNCOotSbrdl95A1^L#|bVd~Ckdd*I(Dd&B$~ zG*Dqi5LfX?DBB!AN4{hv^Ty`uee(omqdeUzNcAQatU^3$b@7Mh#r-6KtkjpP)#AO_ z_jiW;u4Vn_cKXvRCvLc?v*j5sr`Aw!&;i1or%d)v(hX2h+>rT{DH_}2Y<<>gEj(#n zP=mF3DjOmsp4mk0o{d7GQib8wdqp@>S7NVfxu>C zhMFiI%22M)QFB@Qmzpa7dW+bq!daNK9+ZR?uso0D5F?y>y+kXJXHM-_UqP&wuR*0#)9 zLw8*t;-l~4*}h-C$ay%!dW<>e-FOgsIc@bgfeCNx;Hd(UE50btB*dHu%7K!-EM!QdVXA{h&-LxX|mEf{XJ$Ko?-IH7{~_n zMZxn}9Fmt{%b*PjG!Hg_^%>>if9dM!BEJa7Fd;s@*c;PjJWMksg>7ms^)lyF=)JGcf(kFcUK_qENDz;ixF{T_&LHfu=!(WE7N6|FD~ehwZ#=iRFajY zKsLO}lYoY^<3~ovXN8CdI$ky2AH}@G!LbqG(3`EW-)M?RUPxaT)ovVN!hj4qKW)bO z6~Sv@QD~A%+1F+B@Blepw3^83hW8J$jSUq@oSL8bKBfH*w5df>uH%@`}t`}52 zwNpjOw9ZzGrP3O}q0hV&rfvq(I-|o7?)LG89Jx$`()KOj(O4jiwo5e=xdcpE2e|d6 z2gr6?m(ibIyn=nv%=}Z&DA#ZEJU$_)=I%)YLe30jjD=ig!6ZBSg4UWe79bVU^ zbTN2%3MT)clb7!za~_=~(q5D=EnNs5egb!f4> zi7!jc@jlJ4iN?G|!!czQ$#(85f3DMs+i%kRJ9&7T?4P9oCxy)Z*lYdZ*(wHp+vW`P zLa5mw`RItg(JN8M&e`LA^WE3*5e;}|;ruXI`4KPjU(Js4@^XJ#<;R-Gqn96zS>7pFC^!!l@8Z181k7pl z?}&E6zH&gdE?ZtEra##)xS4M)Lt7@vYvY*NGidDqJ)Fp%-aj4L}D#K8`e%;|G zg5SH^W(in2X!=mI^~^Q)ZuZXEpq%qvZ|mb`LTd#2HmFP~%eVo4wsJgqUY#H$j5xd- zy3Bod1i^RXP@NOSX#Q_Eov>m6haQobh)aVy0;t|Se?zd&ekglNyI_pAc~rE^bT$AE zml}D1ZTwgssn;h)QYvmM7&DzdWAfT$3=`|DcoUIni*GpI14bu?iK{rm66>tWe=f`d zIO?a(s&*L*L#LqNgL4{sgSWG#3I zkDEtpCf^~0Dj-R=SG5qotUF@l0q*E?uVu_%Z!@Zt@eY8BIGob8>08*!gVrzYTti?W z@@G$e7%0c~ir9fw1dqbBbsVqCOY0N~(md&j@&J!r2W9l7Zd1sNJ0-HWSV`80-f`?~3%@uM*3~mlg7;TevpQpi=MX-J@G~ zwcF9CUa)hr21-<|%NQhCa;j95$o~PPWvA>;=->W5%v0j@fBTt2FO7cPA4!g`22cC6 z@Ay9Gh&m}zJzWJ9y+iPh#Ys(&)>#E>ti=ms8ZbXM#*fDzoFfJTip{+w<-fe02liIe z;1R;a55Viq=7xk1~g^ zAd;BM@8los?h77rZW@D(={-JE?fSHl$U4v}?*=o~p#@^ymN9xTy=v12r)TI%}CjkKOt~3c~jrdrnnNt80iqa6cBey5X>ygDoRy88wdFn z=SzmxW+@d++4S*R&XLIVUSrk6C40#v$4*m<*#=OUT3j+QZGX=E%se3KVKWV+t%rJ> zH(LOaZt$*mCwa->=ACQG%6R->GJlsNrPQF~p$B8eZHB2lYkyaE8$o;YyDg(%+06GM z^KH>`41Cj2?*s~#EH@(`DT~tqBy#3P=XdgcHa%VBm$2+bdzi0QG)X?FtvW9AVkmyiPr zu;32##ap>dGpss)5Q2*g?EAxFj!W|KHq0|*K<#FGl_cvqKCMbGFf3`cRX#~Exj09? zmA=xbJUfUebNpLg36b-yU_vUyzkn?iiljHvx~$bVQUhc(So6F~gcqK84Tk7HMP20s zT3@V-cJ2Rc<6N%=o8e6xxVi!6`PLFU6L5feWAm1{8PiM)a+z+Y@s!Ma2QGsPRAN2| zBrGkD2kd{^$pBFrsnqvVlxc*;9S(91O*+hYE{RENl zuGH(!pKUc42z+%|Q<8q1k%Ra2q8<|CA4oj{%k&5yku=7ebx`xZ6l9lnlp^K>8x~|w zZ~kkAV1SMFXRbm(vv0eA%-^kG$9Yf1@SQOSG*RhYdf-i+x=&6qJ8CAoUB1thjKw1< zGlY%*JOKVi@i-}8D-xbVElNwg`CUbLliwR{_l%H(Df~V_V(+x?MQ3(B~&+q zjISnO3kICD&Yn(_bd;D18YyI{Omf>rHG8IR|pq(F)RtN^;j|EV!QzJFVgF=yJMS=F*)_9q$6 ztoQ#N_%LvybNTn*cU=7a_!0_wTDa03s_A#K3;j{|b?C$`8?i21jnRD;$B+9Rmn7Gs zA%8Xk_~4f=n*1<8XnV@4*SE?TI4SZvoRL$RLBjG8PTvA>75iu9+YM!q1OWKodAQpO zuqq0V(qDRJR#m-3js{-F9{-UvQ^l#2CWasPPUSlEa=}G|7$lBQIs%5D9^aVZxv4PM zDi!YE8wJe|Fi>TZAs3pe%&?bUU+r5?AUMqE?0im-pG9f-z!1G;8=*!ADLekxz${*i zmpB{B%FD7sgVTK!DkPo_-e>u0nCsT#1Puy&rn6z={c_MN&)vgbCRQv?-|IIWDY1jU zIR^D~BnfyscSxu1F`{+FRZ0yspG^s->g)|uMO{i|#Tu@IEAK8+n`*oH3R_*58cIdON8PJvu5l!VTezERC6 zobCT?E>?Z;Y$4iE@Rd(%dxZb3xQoemJ7Ox{N;_d+3lZ-HTF68L<{Ht>w))6@yx6_JfW&@73Vl0oE5=!^l~!Lq%=L zAtZp+%b6$?c~1*D0Jh*G6@5NQI^dkG+&gwTtW zfPx5!^xlywp+o2pLT3G{P3S|)><=b=9y<^%_yl`kNeVA z^L2doFc`>dYyw&gMxDlq-n3Qmvl&mvz6>wWFYRJ}i+?Zk?}nrme+huI-`gGdlE>WM zy-EJpz*2Szm?zZ7;_Mfgvm5~HD=AcaI^<%|i_q?_flPj(F_(r$ zfCeZN(QA+ph)dG;JdiZqWrOZh-omXkk|P{OKD1{p%TaDG1ClngbP z$m9`GrG~@|)e`5in36f&JdJ-=xrtw^f3{#|8$Yh5dWSm!$T1TP zE<@6e)2Uh=wRjvZ70TI?REi#&nQ;Ot2dv+~8RZdDZVAwHeCy&_ukZsa7i6uY3C!A6 zPs60As^H3T(K6yiF~BCuU?fh9Z0EODW=?yye_ZW5)yH{6Q*Or=#k;TJ@j=3hJnClS05ZnzUBMY?rHCbx|6ls0{Z8z z00W-?Y^Ch>OT4u~4Ojy0jUMO*U#ewJ%)nn1?*-=&ld5}Zmqp(KMq@j(9;lQEBrd4` zO&N~l82~QLdyA1W0$syZ{W68^+{g+u&T-$I+OqG!&7VYKD{rQsYG#2dS?z*muDQsK zqmY`gCMK@+u(AvrqvJbeo`58?>t@){0H$G3=-5t_A`&(H8t{CACK@(K($Vv)Xsr%; zHmLUXA1{Rrkeo(je6#O%=TiO5K6T+4z)ETUtbQ8{eLgTx03Cdh4MYkGH~Fs$%Svp2PPu` zRpL^W_CQFHG%=p5nS8s3<*yY3d@KC_a7&Nh=g4c}afRT+%RB&J_zb+@EQ?s?m^N{= zOp9fWYUG-K?}hJ&aGUaM9+?6^!EoXIkU=-|Hq|~ z;awWLAej5suj~J1mx~|%W!0f-Q7NU`dvStWIlU%860td8FCJL&usFlEI>_(SFV!T6 zmty!9ng8x(2)YHK4RLJ%nK!BJVa8&upZ!!lbl`R*a}|8EcJPM#b)Kkk3_@L&^M zCc%HC`QjrtvwKYdCS=^E1}N4BzTloW603Enjz7R^eRo zFV*%fpc2FOALI~%Ntjy%)Zp7&KcyGyj2VF!rY<{5EFbWjabAQ0TIcn@Bwbux+anT9 zWmEs@3)DhQ3g*w4RV-7Szv7qh2Oo9s>J}uG${u-);v^4mrDp>j?MfMx|3Uq4q~}Fy z?%Z``>A_>x7)KypE?kSkTD$>zv;mc=wT!_LgK|2~*?{-_+ACGt3t?Xd-sw(Vg>_Cb91^8xSD)5U{lhtty;PqS z+KguD5(z3=xLE6zRI%XoVgaG7a^Zs~R)uGI{oi@Nl`Dh>qtlW;{DYk-R{|}zaNpZA zgC@It?}}RaaUm=7M=&jXZQkTXu;Y5&xw}#CZU}zf>VIHQt23(N-$1a#ER)8zy$oPF zU?n{lfdc*k;0ExH96WX~E9r@?%j5tW4eIM31Hgh;e4O?lKL!9d!&j23r$GIz`BOQd zI0Nq@&6#0ZK(!0&aVF^;5b}h!7T_vf56e@1v?NS{RMUSNFH~jveQwogqYKS>qPcYu zegSXQ3U(!EfrLQjv2HRgiN1(e=0%g;|F9sydFB8Gnx?>yBk<`>i$VO2;~D3l9G+XS z>PiGUBMKI^x&Sh*>Jt1}tmga=pdQs&+e>8qEvNX1{t_GTl}wG+LCaDALxuO)PNL`T zStG!9>*1%pgPCbSYwO$qKJdy%!Ca^g|9q>LxL%gq!FaEjOSe(+VTiTce}A5frzibc z9{yqtW-j^gEr6Ewbcn zyu%kzF_U0wI~!SK`3rWW1`SnfxPtQ{&0|#=J6SVXV#$1z%kdHnoMNg-f5 z&jc?}_e8GlS`Y34g?O*;YxbUn)An?gvM72=FLtoz;C~V5i~EIH*Me#>&ieXA7vGBj zGS1%`XP%7qOlYOJS7F}sh+FjW06sM<4al=RlbQuap;y)nuvMpnPu7R~4eMp!0pog? zUQ(kDA_f=JQK-*N9=nkhOUadQ=L?c(wo3cUmK|?!h-_XPG>rJKYY^vfC}`LB%{K#F zXFi~uW==Gvk<+2koZb5h0(=!j*SyPWS%X5M7JHMkdx3kgDUNt_8lYnuLM?Q5Qrbzg zQrgc%DlF;h2{1vx&i>n~v;yNxc~jF9>sxVeIGq?i15YOx70uxq_=b;&1^?vrrj%xV z{qkehP#kW~j?O0fJ?~>d+Rfi4Y%n!h3wj#ZV8?kx3eb$W_OPR^Tc7-po8nR=Fo@%S zeec^uSrtV?NDhYUZsy}CF$H(^1VT-}oZeRoMx9jjXs6KBb(<03Y@BfG2SD3j8HepB z8Uy~T&fgohGlb3Bo`$8`p)zmu==^yx`M;6dUZ{YA=?%D`!rcXM+8r9DwCwu4H=+&H z{D1(?!T^>f#b=F6bdstVK#zq<4yFuZXJh*d&HUHa$r!bBrY~2mY-o2HvUx7)zwx|h z(fZfRdVB#KFj(fIgf%oi%co)uOwR|DL*WO>2DjJ(X}1AT1|5FFvh!Q&aygtjZiFY6 zL9z-M7&=%D5ZnOo6`Wh55>C)nMm#d7V*0p_ttw=r;ZD+i@j;%o2BRhGMMeGl#oSo@ zD1vv}TAToRScIFKj#>2A6)=4M#N3@EU4dN$7>6bb;VKD<5kFcJG-8zO!ml>MAzWe% zSp8tCIb$!#5u8e1rnO6ItuFUx&F_eLG>3QiJAelMfI_Ag$S4CI+xi|53Of(11Rs;K z)hYXrfHBj}k5U)_P5=7AHgF`s4pHg4OD|Pcfr)I+*}uFy3OUo>U-QfNflh5V0A2LU zzH`gG@x~_joM9QyDZKJ0z7V|E0VuI|i9jtVP(X9{X>qh`!y}>o*RT25K~Jb-_*BlG z9aD*-nQQE?(Afy?(f)PWdH(TxTj#$CB1~Zl*Il(|ifroZp>UmHF`wp$3-wzorp@XF zUPB&Lf*cQiew|;q&$|E(1P9(fY7ek;UKL{k4Wx{Jxcnqa-qrf#*UlTyJ{I=s3WgT~ zajAQh^m;q`uuf6a%jrr6AAz;ulYZ0EBX8Iogu~JlJBbcClW!+bbUOnKqK;AY7wZ!@ z^YXF`pkd@CJ)D$X+X%r)MV7Sdu#pYWEZUE)jNtt6(ZDz10)+6n?4zV%_66leBF2!i z6MVBzf&~}*%d)ZqcML{tbXS@>{t{YJW2{Oq&YqlB&I3yJjugNOC1%CDFZ>q6z`OIq zZZ7I)u&wRfTfX%yOpIf9o~Eq1p7@(X%AWgNhHm)~S6VeTZSQLtuJruk>rQ`;8I49R z(uX#}oQxW~7#o}nsCTm}PJPqn0zfM4gtBxh-Wz2eg}O^e4M-X1_dJw_8w3lg4R% zl9x-%CcAg-!HO6!1pM?TCOXZ7Y?3`^)$OI0BXr!A8C&_z4q))ybJ_1h98d2a3N zzS~)w^%yk2^Mq-xee;jH!oIQc?XTL?yU$O5?=)e~=hhe=hZ_B5B~|~D2pDtwW`x7L z2B&AwXVSXRrqBGQDB8ohQym4FjbL7h1Fr+qhna^IDl$ok;Jd@F6-w4|m27PNb^LeF z$6v5Is&#_Z+3L6nBcF~ItiK|kFl-o_9f=+ zRKCoo0$Sql9CE3?A+j{gx|~&`z&LDi>m1amp_{L3HKuH^|Ne%vjme}TNQ~yIur8D| zL0ldp>rw!tf!B#TYd99C_&SZ z2-fwMQZF0jud>H_3@K2`p>GtbqqSgY^D8(su{`2y9JSxA{z{`k#F1+b3PP#Jfhpj9 z0uBZ~du(JINH)EBTeOUGc09+bmc0tQOTCS?k8f&~|@x zW*>+gsmuNlD^O=<-!d`P>NE?2Jmql?3Jd8Fl>=v%K|8;mkm*sf{}`;Cj^^7{!=O7S z=&bb*EGeyEi`YpeBlWKd{m!~I2$3FA8IZZrxtY1xGK(*#K0{GxN{-K*1OrlQoIXCL z+UX|lse-S1$(=o{A>629>DoL5cDT$^DB+gioIY)8uZ$vhi-4qqk9Le>CNW{sg)Ev#AL$ zH`ECgFsfGFsWO_{qsdgJ5%HoG-1l3rf~~i&SDvb?q)O`FL6rz=iQfQ;p7*#9#u-gG znyXNeIf&eO$uLK-7C=hr$yj04>X=N%{j{^jpd$*g_airc5&NdVhAJu>1XkowL_;w8 zBGCSLe=&+Jox{&H4cKRScPMX;f3rak$k3T^WD8Fi9-(uxKdw3a3`L}vKFwB=ayc

;0@-&fsrNmy(%#VV+k@GrJo@#v6xSTG&W6 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 literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/icons/figma-icon.svg b/apps/docs/public/img/icons/figma-icon.svg new file mode 100644 index 00000000000..38539ba64cd --- /dev/null +++ b/apps/docs/public/img/icons/figma-icon.svg @@ -0,0 +1 @@ + From 30ef320972fe48cd7ec2b889ffbb4abcc8397f7c Mon Sep 17 00:00:00 2001 From: Benjamin Tan Date: Thu, 15 Jun 2023 17:25:52 +0800 Subject: [PATCH 02/61] feat: enable figma provider --- .../components/interfaces/Auth/Auth.types.ts | 4 ++ studio/pages/api/auth/[ref]/config.ts | 3 ++ .../AuthProvidersFormValidation.tsx | 39 +++++++++++++++++++ .../stores/jsonSchema/auth_gotrue_config.json | 12 ++++++ supabase/config.toml | 4 +- 5 files changed, 60 insertions(+), 2 deletions(-) diff --git a/studio/components/interfaces/Auth/Auth.types.ts b/studio/components/interfaces/Auth/Auth.types.ts index 3c4118ec83b..71ca7e519f2 100644 --- a/studio/components/interfaces/Auth/Auth.types.ts +++ b/studio/components/interfaces/Auth/Auth.types.ts @@ -30,6 +30,10 @@ export interface AuthConfig { EXTERNAL_FACEBOOK_CLIENT_ID: string | null EXTERNAL_FACEBOOK_SECRET: string | null + EXTERNAL_FIGMA_ENABLED: boolean + EXTERNAL_FIGMA_CLIENT_ID: string | null + EXTERNAL_FIGMA_SECRET: string | null + EXTERNAL_GITHUB_ENABLED: false EXTERNAL_GITHUB_CLIENT_ID: string | null EXTERNAL_GITHUB_SECRET: string | null diff --git a/studio/pages/api/auth/[ref]/config.ts b/studio/pages/api/auth/[ref]/config.ts index 66545dba0ae..5832f17f036 100644 --- a/studio/pages/api/auth/[ref]/config.ts +++ b/studio/pages/api/auth/[ref]/config.ts @@ -64,6 +64,9 @@ const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => { EXTERNAL_FACEBOOK_ENABLED: false, EXTERNAL_FACEBOOK_CLIENT_ID: null, EXTERNAL_FACEBOOK_SECRET: null, + EXTERNAL_FIGMA_ENABLED: false, + EXTERNAL_FIGMA_CLIENT_ID: null, + EXTERNAL_FIGMA_SECRET: null, EXTERNAL_GITHUB_ENABLED: false, EXTERNAL_GITHUB_CLIENT_ID: null, EXTERNAL_GITHUB_SECRET: null, diff --git a/studio/stores/authConfig/schema/AuthProviders/AuthProvidersFormValidation.tsx b/studio/stores/authConfig/schema/AuthProviders/AuthProvidersFormValidation.tsx index 750ff44fa62..08df2bd9299 100644 --- a/studio/stores/authConfig/schema/AuthProviders/AuthProvidersFormValidation.tsx +++ b/studio/stores/authConfig/schema/AuthProviders/AuthProvidersFormValidation.tsx @@ -540,6 +540,44 @@ const EXTERNAL_PROVIDER_FACEBOOK = { }, } +const EXTERNAL_PROVIDER_FIGMA = { + $schema: JSON_SCHEMA_VERSION, + type: 'object', + title: 'Figma', + properties: { + EXTERNAL_FIGMA_ENABLED: { + title: 'Figma enabled', + type: 'boolean', + }, + EXTERNAL_FIGMA_CLIENT_ID: { + title: 'Client ID', + type: 'string', + }, + EXTERNAL_FIGMA_SECRET: { + title: 'Client Secret', + type: 'string', + isSecret: true, + }, + }, + validationSchema: object().shape({ + EXTERNAL_FIGMA_ENABLED: boolean().required(), + EXTERNAL_FIGMA_CLIENT_ID: string().when('EXTERNAL_FIGMA_ENABLED', { + is: true, + then: (schema) => schema.required('Client ID is required'), + otherwise: (schema) => schema, + }), + EXTERNAL_FIGMA_SECRET: string().when('EXTERNAL_FIGMA_ENABLED', { + is: true, + then: (schema) => schema.required('Client Secret is required'), + otherwise: (schema) => schema, + }), + }), + misc: { + iconKey: 'figma-icon', + requiresRedirect: true, + }, +} + const EXTERNAL_PROVIDER_GITHUB = { $schema: JSON_SCHEMA_VERSION, type: 'object', @@ -1060,6 +1098,7 @@ export const PROVIDERS_SCHEMAS = [ EXTERNAL_PROVIDER_BITBUCKET, EXTERNAL_PROVIDER_DISCORD, EXTERNAL_PROVIDER_FACEBOOK, + EXTERNAL_PROVIDER_FIGMA, EXTERNAL_PROVIDER_GITHUB, EXTERNAL_PROVIDER_GITLAB, EXTERNAL_PROVIDER_GOOGLE, diff --git a/studio/stores/jsonSchema/auth_gotrue_config.json b/studio/stores/jsonSchema/auth_gotrue_config.json index a0d00a3deb2..b7dbd41399e 100644 --- a/studio/stores/jsonSchema/auth_gotrue_config.json +++ b/studio/stores/jsonSchema/auth_gotrue_config.json @@ -156,6 +156,18 @@ "title": "Facebook secret", "type": "string" }, + "EXTERNAL_FIGMA_ENABLED": { + "title": "Figma enabled", + "type": "boolean" + }, + "EXTERNAL_FIGMA_CLIENT_ID": { + "title": "Figma client ID", + "type": "string" + }, + "EXTERNAL_FIGMA_SECRET": { + "title": "Figma secret", + "type": "string" + }, "EXTERNAL_GITHUB_ENABLED": { "title": "GitHub enabled", "type": "boolean" diff --git a/supabase/config.toml b/supabase/config.toml index 7b1702d2d8e..f0c3d816b66 100644 --- a/supabase/config.toml +++ b/supabase/config.toml @@ -59,8 +59,8 @@ double_confirm_changes = true enable_confirmations = false # Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, -# `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin`, `notion`, `twitch`, -# `twitter`, `slack`, `spotify`, `workos`, `zoom`. +# `discord`, `facebook`, `figma`, `github`, `gitlab`, `google`, `keycloak`, `linkedin`, `notion`, +# `twitch`, `twitter`, `slack`, `spotify`, `workos`, `zoom`. [auth.external.apple] enabled = false client_id = "" From b104c6c8ab4daa7a4d1823a82986f29389b7fa2a Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 14 Jul 2023 09:20:15 +0800 Subject: [PATCH 03/61] Scaffold nav layout change --- .../Home/ProjectList/ProjectCard.tsx | 2 +- .../layouts/AppLayout/AppLayout.tsx | 16 ++++ .../layouts/AppLayout/HeaderBar.tsx | 47 +++++++++++ .../AppLayout/OrganizationDropdown.tsx | 78 +++++++++++++++++++ studio/pages/org/[slug]/index.tsx | 63 +++++++++++++++ 5 files changed, 205 insertions(+), 1 deletion(-) create mode 100644 studio/components/layouts/AppLayout/AppLayout.tsx create mode 100644 studio/components/layouts/AppLayout/HeaderBar.tsx create mode 100644 studio/components/layouts/AppLayout/OrganizationDropdown.tsx create mode 100644 studio/pages/org/[slug]/index.tsx diff --git a/studio/components/interfaces/Home/ProjectList/ProjectCard.tsx b/studio/components/interfaces/Home/ProjectList/ProjectCard.tsx index 20bf8488a3a..ad3689be4f9 100644 --- a/studio/components/interfaces/Home/ProjectList/ProjectCard.tsx +++ b/studio/components/interfaces/Home/ProjectList/ProjectCard.tsx @@ -24,7 +24,7 @@ const ProjectCard = ({ project, rewriteHref }: ProjectCardProps) => { const isRestoring = project.status === PROJECT_STATUS.RESTORING return ( -

  • +
  • ) => { + return ( +
    + + {children} +
    + ) +} + +export default AppLayout diff --git a/studio/components/layouts/AppLayout/HeaderBar.tsx b/studio/components/layouts/AppLayout/HeaderBar.tsx new file mode 100644 index 00000000000..543159b4785 --- /dev/null +++ b/studio/components/layouts/AppLayout/HeaderBar.tsx @@ -0,0 +1,47 @@ +import Link from 'next/link' +import { useRouter } from 'next/router' +import FeedbackDropdown from '../ProjectLayout/LayoutHeader/FeedbackDropdown' +import { Button, Dropdown, IconHelpCircle, IconInbox } from 'ui' +import { useProfile } from 'lib/profile' +import OrganizationDropdown from './OrganizationDropdown' + +const HeaderBar = () => { + const router = useRouter() + const { profile } = useProfile() + + return ( +
    + {/* Organization + Project */} +
    + + + Supabase + + + +
    + + {/* Account, Settings, etc */} +
    + +
    +
    + ) +} + +export default HeaderBar diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx new file mode 100644 index 00000000000..b5e5a9426df --- /dev/null +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -0,0 +1,78 @@ +import { useRouter } from 'next/router' +import { Button, Dropdown, IconChevronDown, IconChevronsDown, IconPlus } from 'ui' + +import { useOrganizationsQuery } from 'data/organizations/organizations-query' +import { useFlag, useSelectedOrganization, useStore } from 'hooks' +import { IS_PLATFORM } from 'lib/constants' + +const OrganizationDropdown = () => { + const router = useRouter() + const { ui } = useStore() + const { data: organizations } = useOrganizationsQuery() + const selectedOrganization = useSelectedOrganization() + const orgCreationV2 = useFlag('orgcreationv2') + + return IS_PLATFORM ? ( + + {organizations + ?.sort((a, b) => a.name.localeCompare(b.name)) + .map((x) => { + const slug = x.slug + + return ( + { + if (!slug) { + // The user should not see this error as the page should + // be rerendered with the value of slug before they can click. + // It is just here in case they are the flash. + return ui.setNotification({ + category: 'error', + message: + 'Could not navigate to organization settings, please try again or contact support', + }) + } + + router.push({ + pathname: `/org/[slug]/general`, + query: { slug }, + hash: router.asPath.split('#')[1]?.toLowerCase(), + }) + }} + > + {x.name} + + ) + })} + + } onClick={() => router.push(`/new`)}> + New organization + + {orgCreationV2 && ( + } + onClick={() => router.push(`/new-with-subscription`)} + > + New organization V2 + + )} + + } + > + + + ) : ( + + ) +} + +export default OrganizationDropdown diff --git a/studio/pages/org/[slug]/index.tsx b/studio/pages/org/[slug]/index.tsx new file mode 100644 index 00000000000..0daf06e04b4 --- /dev/null +++ b/studio/pages/org/[slug]/index.tsx @@ -0,0 +1,63 @@ +import ProjectCard from 'components/interfaces/Home/ProjectList/ProjectCard' +import ShimmeringCard from 'components/interfaces/Home/ProjectList/ShimmeringCard' +import AppLayout from 'components/layouts/AppLayout/AppLayout' +import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' +import AlertError from 'components/ui/AlertError' +import { useProjectsQuery } from 'data/projects/projects-query' +import { useSelectedOrganization } from 'hooks' +import Link from 'next/link' +import { NextPageWithLayout } from 'types' +import { Button, IconPlus } from 'ui' + +const ProjectsPage: NextPageWithLayout = () => { + const { + data: allProjects, + error: projectsError, + isLoading: isLoadingProjects, + isError: isErrorProjects, + isSuccess: isSuccessProjects, + } = useProjectsQuery() + const organization = useSelectedOrganization() + const projects = allProjects?.filter((project) => project.organization_id === organization?.id) + + if (!organization) { + // Return a 404 page + } + + return ( + + +
    +
    +

    Projects

    + + + + + +
    + {isLoadingProjects && ( +
      + + +
    + )} + {isErrorProjects && ( + + )} + {isSuccessProjects && ( +
      + {projects?.map((project) => ( + + ))} +
    + )} +
    +
    +
    + ) +} + +ProjectsPage.getLayout = (page) => {page} + +export default ProjectsPage From 5d1b88d4dc6f92362c58ae9132307382f8ab1f48 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 14 Jul 2023 14:44:02 +0800 Subject: [PATCH 04/61] Add help, notifications, feedback widgets to new nav bar, scaffold user settings dropdown --- .../layouts/AccountLayout/AccountLayout.tsx | 1 - .../layouts/AppLayout/HeaderBar.tsx | 24 +++----- .../AppLayout/OrganizationDropdown.tsx | 58 +++++++----------- .../AppLayout/UserSettingsDropdown.tsx | 50 +++++++++++++++ .../LayoutHeader/HelpPopover.tsx | 61 +++++++++++++------ .../NotificationsPopover/index.tsx | 61 +++++++++++++++---- 6 files changed, 171 insertions(+), 84 deletions(-) create mode 100644 studio/components/layouts/AppLayout/UserSettingsDropdown.tsx diff --git a/studio/components/layouts/AccountLayout/AccountLayout.tsx b/studio/components/layouts/AccountLayout/AccountLayout.tsx index f4b7599e8a6..3abeb892928 100644 --- a/studio/components/layouts/AccountLayout/AccountLayout.tsx +++ b/studio/components/layouts/AccountLayout/AccountLayout.tsx @@ -28,7 +28,6 @@ const AccountLayout = ({ children, title, breadcrumbs }: PropsWithChildren { await signOut() - await router.push('/sign-in') } diff --git a/studio/components/layouts/AppLayout/HeaderBar.tsx b/studio/components/layouts/AppLayout/HeaderBar.tsx index 543159b4785..2e2dfa5dad6 100644 --- a/studio/components/layouts/AppLayout/HeaderBar.tsx +++ b/studio/components/layouts/AppLayout/HeaderBar.tsx @@ -1,19 +1,18 @@ import Link from 'next/link' import { useRouter } from 'next/router' import FeedbackDropdown from '../ProjectLayout/LayoutHeader/FeedbackDropdown' -import { Button, Dropdown, IconHelpCircle, IconInbox } from 'ui' -import { useProfile } from 'lib/profile' +import HelpPopover from '../ProjectLayout/LayoutHeader/HelpPopover' +import NotificationsPopover from '../ProjectLayout/LayoutHeader/NotificationsPopover' import OrganizationDropdown from './OrganizationDropdown' +import UserSettingsDropdown from './UserSettingsDropdown' const HeaderBar = () => { const router = useRouter() - const { profile } = useProfile() return ( ) diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index b5e5a9426df..3149b62b941 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -1,9 +1,10 @@ import { useRouter } from 'next/router' -import { Button, Dropdown, IconChevronDown, IconChevronsDown, IconPlus } from 'ui' +import { Button, Dropdown, IconChevronDown, IconChevronsDown, IconCode, IconPlus } from 'ui' import { useOrganizationsQuery } from 'data/organizations/organizations-query' import { useFlag, useSelectedOrganization, useStore } from 'hooks' import { IS_PLATFORM } from 'lib/constants' +import Link from 'next/link' const OrganizationDropdown = () => { const router = useRouter() @@ -21,50 +22,35 @@ const OrganizationDropdown = () => { {organizations ?.sort((a, b) => a.name.localeCompare(b.name)) .map((x) => { - const slug = x.slug - + // [Joshen] Improvement: maintain URL if navigating in between org pages return ( - { - if (!slug) { - // The user should not see this error as the page should - // be rerendered with the value of slug before they can click. - // It is just here in case they are the flash. - return ui.setNotification({ - category: 'error', - message: - 'Could not navigate to organization settings, please try again or contact support', - }) - } - - router.push({ - pathname: `/org/[slug]/general`, - query: { slug }, - hash: router.asPath.split('#')[1]?.toLowerCase(), - }) - }} - > - {x.name} - + + + {x.name} + + ) })} - } onClick={() => router.push(`/new`)}> - New organization - + + + }>New organization + + {orgCreationV2 && ( - } - onClick={() => router.push(`/new-with-subscription`)} - > - New organization V2 - + + + }>New organization V2 + + )} } > - diff --git a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx new file mode 100644 index 00000000000..6f62bd4f28f --- /dev/null +++ b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx @@ -0,0 +1,50 @@ +import Link from 'next/link' +import { useRouter } from 'next/router' +import { Dropdown, IconLogOut } from 'ui' + +import { useSignOut } from 'lib/auth' +import { useProfile } from 'lib/profile' + +const UserSettingsDropdown = () => { + const signOut = useSignOut() + const router = useRouter() + const { profile } = useProfile() + + const onClickLogout = async () => { + await signOut() + await router.push('/sign-in') + } + + return ( + + + Preferences + + , + + + Access tokens + + , + , + } + onClick={() => onClickLogout()} + > + Logout + , + ]} + > +
    + {profile?.first_name[0]} +
    +
    + ) +} + +export default UserSettingsDropdown diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx index 6b6add879bd..770b8d65722 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx @@ -1,22 +1,23 @@ +import Image from 'next/image' +import Link from 'next/link' +import { useRouter } from 'next/router' +import SVG from 'react-inlinesvg' import { Button, + IconActivity, + IconBookOpen, IconHelpCircle, IconMail, IconMessageCircle, Popover, - IconBookOpen, - IconActivity, } from 'ui' -import { useRouter } from 'next/router' -import { FC } from 'react' -import Link from 'next/link' -import Image from 'next/image' +import * as Tooltip from '@radix-ui/react-tooltip' -import SVG from 'react-inlinesvg' +interface HelpPopoverProps { + alt?: boolean +} -interface Props {} - -const HelpPopover: FC = () => { +const HelpPopover = ({ alt = false }: HelpPopoverProps) => { const router = useRouter() const projectRef = router.query.ref const supportUrl = `/support/new${projectRef ? `?ref=${projectRef}` : ''}` @@ -127,13 +128,39 @@ const HelpPopover: FC = () => { } > - + + + + + {alt && ( + + + +
    +

    Help

    +
    +
    +
    + )} +
    ) } diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/NotificationsPopover/index.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/NotificationsPopover/index.tsx index 1ff8530f549..f4e3db7e003 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/NotificationsPopover/index.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/NotificationsPopover/index.tsx @@ -12,15 +12,19 @@ import { Fragment, useState } from 'react' import ConfirmModal from 'components/ui/Dialogs/ConfirmDialog' import { useNotificationsQuery } from 'data/notifications/notifications-query' import { getProjectDetail } from 'data/projects/project-detail-query' -import { invalidateProjectsQuery, setProjectPostgrestStatus } from 'data/projects/projects-query' +import { setProjectPostgrestStatus } from 'data/projects/projects-query' import { useStore } from 'hooks' import { delete_, patch, post } from 'lib/common/fetch' import { API_URL } from 'lib/constants' import { Project } from 'types' -import { Alert, Button, IconArrowRight, IconBell, Popover } from 'ui' +import { Alert, Button, IconArrowRight, IconBell, IconInbox, Popover } from 'ui' import NotificationRow from './NotificationRow' -const NotificationsPopover = () => { +interface NotificationsPopoverProps { + alt?: boolean +} + +const NotificationsPopover = ({ alt = false }: NotificationsPopoverProps) => { const queryClient = useQueryClient() const router = useRouter() const { meta, ui } = useStore() @@ -35,9 +39,10 @@ const NotificationsPopover = () => { if (!notifications) return <> - const hasNewNotifications = notifications?.some( + const newNotifications = notifications?.filter( (notification) => notification.notification_status === NotificationStatus.New ) + const hasNewNotifications = newNotifications.length > 0 const onOpenChange = async (open: boolean) => { // TODO(alaister): move this to a mutation @@ -232,21 +237,51 @@ const NotificationsPopover = () => { > -
    +
    + {/* hasNewNotifications */} + {true && ( + <> + {alt ? null : ( + //
    + //

    5

    + //
    +
    +
    +
    +
    + )} + + )} - {hasNewNotifications && ( -
    -
    -
    -
    - )}
    From 0672fe046444ce9bfa2ebd9c028fed851ad19760 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 14 Jul 2023 14:46:30 +0800 Subject: [PATCH 05/61] Add alt prop to feedback widget --- studio/components/layouts/AppLayout/HeaderBar.tsx | 2 +- .../LayoutHeader/FeedbackDropdown/FeedbackDropdown.tsx | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/studio/components/layouts/AppLayout/HeaderBar.tsx b/studio/components/layouts/AppLayout/HeaderBar.tsx index 2e2dfa5dad6..061df2adebe 100644 --- a/studio/components/layouts/AppLayout/HeaderBar.tsx +++ b/studio/components/layouts/AppLayout/HeaderBar.tsx @@ -25,7 +25,7 @@ const HeaderBar = () => {
    - + diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackDropdown.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackDropdown.tsx index 34efce3944f..00da09d71eb 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackDropdown.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackDropdown.tsx @@ -2,7 +2,11 @@ import { useState } from 'react' import { Button, IconMessageCircle, Popover } from 'ui' import FeedbackWidget from './FeedbackWidget' -const FeedbackDropdown = () => { +interface FeedbackDropdownProps { + alt?: boolean +} + +const FeedbackDropdown = ({ alt = false }: FeedbackDropdownProps) => { const [isOpen, setIsOpen] = useState(false) const [feedback, setFeedback] = useState('') const [screenshot, setScreenshot] = useState() @@ -41,7 +45,9 @@ const FeedbackDropdown = () => { asChild onClick={onOpen} type="default" - icon={} + icon={ + alt ? null : + } > Feedback From 14e8c19c965e62e1c351164d9d3261ecb49eaeca Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 17 Jul 2023 22:31:00 +0800 Subject: [PATCH 06/61] Add AppLayout and simplify height logic in layout component --- .../{HeaderBar.tsx => AppHeader.tsx} | 14 +- .../layouts/AppLayout/AppLayout.tsx | 9 +- .../AppLayout/OrganizationDropdown.tsx | 17 +- .../LayoutHeader/ProjectDropdown.tsx | 21 ++- .../NavigationBar/NavigationBar.tsx | 30 ++-- .../layouts/ProjectLayout/ProductMenuBar.tsx | 16 +- .../layouts/ProjectLayout/ProjectLayout.tsx | 165 ++++++++++-------- studio/pages/org/[slug]/index.tsx | 53 +++--- 8 files changed, 181 insertions(+), 144 deletions(-) rename studio/components/layouts/AppLayout/{HeaderBar.tsx => AppHeader.tsx} (69%) diff --git a/studio/components/layouts/AppLayout/HeaderBar.tsx b/studio/components/layouts/AppLayout/AppHeader.tsx similarity index 69% rename from studio/components/layouts/AppLayout/HeaderBar.tsx rename to studio/components/layouts/AppLayout/AppHeader.tsx index 061df2adebe..f27e9d5a24c 100644 --- a/studio/components/layouts/AppLayout/HeaderBar.tsx +++ b/studio/components/layouts/AppLayout/AppHeader.tsx @@ -1,18 +1,23 @@ import Link from 'next/link' import { useRouter } from 'next/router' + import FeedbackDropdown from '../ProjectLayout/LayoutHeader/FeedbackDropdown' import HelpPopover from '../ProjectLayout/LayoutHeader/HelpPopover' import NotificationsPopover from '../ProjectLayout/LayoutHeader/NotificationsPopover' import OrganizationDropdown from './OrganizationDropdown' import UserSettingsDropdown from './UserSettingsDropdown' +import { useSelectedOrganization, useSelectedProject } from 'hooks' +import ProjectDropdown from '../ProjectLayout/LayoutHeader/ProjectDropdown' -const HeaderBar = () => { +const AppHeader = () => { const router = useRouter() + const project = useSelectedProject() + const organization = useSelectedOrganization() return ( -
    +
    - + { +
    @@ -34,4 +40,4 @@ const HeaderBar = () => { ) } -export default HeaderBar +export default AppHeader diff --git a/studio/components/layouts/AppLayout/AppLayout.tsx b/studio/components/layouts/AppLayout/AppLayout.tsx index a14f74d752c..275113dbde8 100644 --- a/studio/components/layouts/AppLayout/AppLayout.tsx +++ b/studio/components/layouts/AppLayout/AppLayout.tsx @@ -1,13 +1,14 @@ -import Image from 'next/image' -import Link from 'next/link' import { PropsWithChildren } from 'react' -import HeaderBar from './HeaderBar' +import AppHeader from './AppHeader' +import { useFlag } from 'hooks' const AppLayout = ({ children }: PropsWithChildren<{}>) => { + const navLayoutV2 = useFlag('navigationLayoutV2') + return (
    - + {navLayoutV2 && } {children}
    ) diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index 3149b62b941..52fe6f28602 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -1,18 +1,18 @@ -import { useRouter } from 'next/router' -import { Button, Dropdown, IconChevronDown, IconChevronsDown, IconCode, IconPlus } from 'ui' +import Link from 'next/link' +import { Badge, Button, Dropdown, IconCode, IconPlus } from 'ui' import { useOrganizationsQuery } from 'data/organizations/organizations-query' -import { useFlag, useSelectedOrganization, useStore } from 'hooks' +import { useFlag, useSelectedOrganization } from 'hooks' import { IS_PLATFORM } from 'lib/constants' -import Link from 'next/link' +import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' const OrganizationDropdown = () => { - const router = useRouter() - const { ui } = useStore() const { data: organizations } = useOrganizationsQuery() const selectedOrganization = useSelectedOrganization() const orgCreationV2 = useFlag('orgcreationv2') + const { data, isSuccess } = useOrgSubscriptionQuery({ orgSlug: selectedOrganization?.slug }) + return IS_PLATFORM ? ( { iconRight={} > {selectedOrganization?.name} + {isSuccess && ( + + {data?.plan.name} + + )} ) : ( diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx index b56940ded52..784bf0589a7 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx @@ -1,7 +1,7 @@ import Link from 'next/link' import { useRouter } from 'next/router' import { ParsedUrlQuery } from 'querystring' -import { Button, Dropdown, IconPlus, Popover } from 'ui' +import { Button, Dropdown, IconCode, IconPlus, Popover } from 'ui' import { useProjectsQuery } from 'data/projects/projects-query' import { useSelectedOrganization, useSelectedProject } from 'hooks' @@ -30,7 +30,11 @@ export const sanitizeRoute = (route: string, routerQueries: ParsedUrlQuery) => { } } -const ProjectDropdown = () => { +interface ProjectDropdownProps { + alt?: boolean +} + +const ProjectDropdown = ({ alt }: ProjectDropdownProps) => { const selectedOrganization = useSelectedOrganization() const selectedProject = useSelectedProject() const { data: allProjects } = useProjectsQuery() @@ -75,13 +79,18 @@ const ProjectDropdown = () => { } > - ) : ( - ) } diff --git a/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.tsx b/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.tsx index 50bdff1621b..2ef126699c0 100644 --- a/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.tsx +++ b/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.tsx @@ -2,7 +2,6 @@ import * as Tooltip from '@radix-ui/react-tooltip' import { isUndefined } from 'lodash' import Link from 'next/link' import { useRouter } from 'next/router' -import { FC } from 'react' import { useTheme } from 'common' import { useParams } from 'common/hooks' @@ -27,15 +26,13 @@ import { } from './NavigationBar.utils' import NavigationIconButton from './NavigationIconButton' -interface Props {} - -const NavigationBar: FC = ({}) => { +const NavigationBar = ({}) => { const router = useRouter() const { isDarkMode, toggleTheme } = useTheme() const { ref: projectRef } = useParams() const { project } = useProjectContext() - const ongoingIncident = useFlag('ongoingIncident') + const navLayoutV2 = useFlag('navigationLayoutV2') const activeRoute = router.pathname.split('/')[3] const toolRoutes = generateToolRoutes(projectRef, project) @@ -46,22 +43,23 @@ const NavigationBar: FC = ({}) => { const { setIsOpen } = useCommandMenu() return (
      - - - Supabase - - + {!navLayoutV2 && ( + + + Supabase + + + )} = ({}) => { link: `/project/${projectRef}`, }} /> -
      +
      {toolRoutes.map((route) => ( = ({ title, children }) => { - const ongoingIncident = useFlag('ongoingIncident') - const maxHeight = ongoingIncident ? 'calc(100vh - 44px)' : '100vh' - +const ProductMenuBar = ({ title, children }: PropsWithChildren) => { return (
      = ({ title, children }) => { >

      {title}

      -
      {children}
      +
      + {children} +
      ) } diff --git a/studio/components/layouts/ProjectLayout/ProjectLayout.tsx b/studio/components/layouts/ProjectLayout/ProjectLayout.tsx index e2dae22e23c..7e72ae8ca00 100644 --- a/studio/components/layouts/ProjectLayout/ProjectLayout.tsx +++ b/studio/components/layouts/ProjectLayout/ProjectLayout.tsx @@ -16,6 +16,7 @@ import { ProjectContextProvider } from './ProjectContext' import ProjectPausedState from './ProjectPausedState' import RestoringState from './RestoringState' import UpgradingState from './UpgradingState' +import AppLayout from '../AppLayout/AppLayout' export interface ProjectLayoutProps { title?: string @@ -39,61 +40,70 @@ const ProjectLayout = ({ }: PropsWithChildren) => { const router = useRouter() const { ref: projectRef } = useParams() - const ongoingIncident = useFlag('ongoingIncident') const selectedOrganization = useSelectedOrganization() const selectedProject = useSelectedProject() const projectName = selectedProject?.name const organizationName = selectedOrganization?.name + const ongoingIncident = useFlag('ongoingIncident') + const navLayoutV2 = useFlag('navigationLayoutV2') + const appHeaderHeight = navLayoutV2 ? 48 : 0 + const isPaused = selectedProject?.status === PROJECT_STATUS.INACTIVE const ignorePausedState = router.pathname === '/project/[ref]' || router.pathname.includes('/project/[ref]/settings') const showPausedState = isPaused && !ignorePausedState return ( - - - - {title - ? `${title} | Supabase` - : selectedTable - ? `${selectedTable} | ${projectName} | ${organizationName} | Supabase` - : projectName - ? `${projectName} | ${organizationName} | Supabase` - : organizationName - ? `${organizationName} | Supabase` - : 'Supabase'} - - - -
      - {/* Left-most navigation side bar to access products */} - {!hideIconBar && } - - {/* Product menu bar */} - {!showPausedState && ( - - {productMenu} - - )} - -
      + + + + {title + ? `${title} | Supabase` + : selectedTable + ? `${selectedTable} | ${projectName} | ${organizationName} | Supabase` + : projectName + ? `${projectName} | ${organizationName} | Supabase` + : organizationName + ? `${organizationName} | Supabase` + : 'Supabase'} + + + +
      - {!hideHeader && } - {showPausedState ? ( -
      -
      - -
      -
      - ) : ( - {children} + {/* Left-most navigation side bar to access products */} + {!hideIconBar && } + + {/* Product menu bar */} + {!showPausedState && ( + + {productMenu} + )} -
      -
      -
      + +
      + {!navLayoutV2 && !hideHeader && } + {showPausedState ? ( +
      +
      + +
      +
      + ) : ( + {children} + )} +
      +
    + + ) } @@ -190,44 +200,53 @@ export const ProjectLayoutNonBlocking = ({ const selectedProject = useSelectedProject() const router = useRouter() const { ref: projectRef } = useParams() - const ongoingIncident = useFlag('ongoingIncident') const isPaused = selectedProject?.status === PROJECT_STATUS.INACTIVE const ignorePausedState = router.pathname === '/project/[ref]' || router.pathname.includes('/project/[ref]/settings') const showPausedState = isPaused && !ignorePausedState + const ongoingIncident = useFlag('ongoingIncident') + const navLayoutV2 = useFlag('navigationLayoutV2') + const appHeaderHeight = navLayoutV2 ? 48 : 0 + return ( - - - {title ? `${title} | Supabase` : 'Supabase'} - - - -
    - {/* Left-most navigation side bar to access products */} - {!hideIconBar && } - - {/* Product menu bar */} - {productMenu && !showPausedState && ( - {productMenu} - )} - -
    + + + {title ? `${title} | Supabase` : 'Supabase'} + + + +
    - {!hideHeader && } - {showPausedState ? ( -
    -
    - -
    -
    - ) : ( - children + {/* Left-most navigation side bar to access products */} + {!hideIconBar && } + + {/* Product menu bar */} + {productMenu && !showPausedState && ( + {productMenu} )} -
    -
    -
    + +
    + {!hideHeader && } + {showPausedState ? ( +
    +
    + +
    +
    + ) : ( + children + )} +
    +
    + + ) } diff --git a/studio/pages/org/[slug]/index.tsx b/studio/pages/org/[slug]/index.tsx index 0daf06e04b4..263a42d7732 100644 --- a/studio/pages/org/[slug]/index.tsx +++ b/studio/pages/org/[slug]/index.tsx @@ -1,3 +1,6 @@ +import Link from 'next/link' +import { Button, IconPlus } from 'ui' + import ProjectCard from 'components/interfaces/Home/ProjectList/ProjectCard' import ShimmeringCard from 'components/interfaces/Home/ProjectList/ShimmeringCard' import AppLayout from 'components/layouts/AppLayout/AppLayout' @@ -5,9 +8,7 @@ import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' import AlertError from 'components/ui/AlertError' import { useProjectsQuery } from 'data/projects/projects-query' import { useSelectedOrganization } from 'hooks' -import Link from 'next/link' import { NextPageWithLayout } from 'types' -import { Button, IconPlus } from 'ui' const ProjectsPage: NextPageWithLayout = () => { const { @@ -27,31 +28,33 @@ const ProjectsPage: NextPageWithLayout = () => { return ( -
    -
    +
    + + + + + +

    Projects

    - - - - - + {isLoadingProjects && ( +
      + + +
    + )} + {isErrorProjects && ( + + )} + {isSuccessProjects && ( +
      + {projects?.map((project) => ( + + ))} +
    + )}
    - {isLoadingProjects && ( -
      - - -
    - )} - {isErrorProjects && ( - - )} - {isSuccessProjects && ( -
      - {projects?.map((project) => ( - - ))} -
    - )}
    From 93453141a4b798b469fed7b6eca32d6dd6ec65ae Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 17 Jul 2023 23:14:50 +0800 Subject: [PATCH 07/61] Add loaders for org and project dropdowns and add more options in user settings dropdown --- .../layouts/AppLayout/AppHeader.tsx | 7 +- .../AppLayout/OrganizationDropdown.tsx | 7 +- .../AppLayout/UserSettingsDropdown.tsx | 63 +++++++- .../LayoutHeader/ProjectDropdown.tsx | 7 +- .../NavigationBar/NavigationBar.tsx | 145 +++++++++--------- studio/components/to-be-cleaned/KeyMap.tsx | 4 +- 6 files changed, 147 insertions(+), 86 deletions(-) diff --git a/studio/components/layouts/AppLayout/AppHeader.tsx b/studio/components/layouts/AppLayout/AppHeader.tsx index f27e9d5a24c..b89f7cbcc22 100644 --- a/studio/components/layouts/AppLayout/AppHeader.tsx +++ b/studio/components/layouts/AppLayout/AppHeader.tsx @@ -1,21 +1,20 @@ import Link from 'next/link' import { useRouter } from 'next/router' +import { useSelectedOrganization } from 'hooks' import FeedbackDropdown from '../ProjectLayout/LayoutHeader/FeedbackDropdown' import HelpPopover from '../ProjectLayout/LayoutHeader/HelpPopover' import NotificationsPopover from '../ProjectLayout/LayoutHeader/NotificationsPopover' +import ProjectDropdown from '../ProjectLayout/LayoutHeader/ProjectDropdown' import OrganizationDropdown from './OrganizationDropdown' import UserSettingsDropdown from './UserSettingsDropdown' -import { useSelectedOrganization, useSelectedProject } from 'hooks' -import ProjectDropdown from '../ProjectLayout/LayoutHeader/ProjectDropdown' const AppHeader = () => { const router = useRouter() - const project = useSelectedProject() const organization = useSelectedOrganization() return ( -
    +
    diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index 52fe6f28602..c6ec2767203 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -5,14 +5,19 @@ import { useOrganizationsQuery } from 'data/organizations/organizations-query' import { useFlag, useSelectedOrganization } from 'hooks' import { IS_PLATFORM } from 'lib/constants' import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' +import ShimmeringLoader from 'components/ui/ShimmeringLoader' const OrganizationDropdown = () => { - const { data: organizations } = useOrganizationsQuery() + const { data: organizations, isLoading: isLoadingOrganizations } = useOrganizationsQuery() const selectedOrganization = useSelectedOrganization() const orgCreationV2 = useFlag('orgcreationv2') const { data, isSuccess } = useOrgSubscriptionQuery({ orgSlug: selectedOrganization?.slug }) + if (isLoadingOrganizations) { + return + } + return IS_PLATFORM ? ( { const signOut = useSignOut() const router = useRouter() const { profile } = useProfile() + const { setIsOpen } = useCommandMenu() + const { isDarkMode, toggleTheme } = useTheme() const onClickLogout = async () => { await signOut() @@ -20,6 +24,13 @@ const UserSettingsDropdown = () => { align="end" side="bottom" overlay={[ +
    +

    + {profile?.first_name} {profile?.last_name} +

    +

    {profile?.primary_email}

    +
    , + ,
    Preferences @@ -30,13 +41,51 @@ const UserSettingsDropdown = () => { Access tokens , - , - } - onClick={() => onClickLogout()} + , + setIsOpen(true)}> +
    +

    Quick search

    +
    + +
    +
    +
    , + // + //
    + //

    Theme

    + // toggleTheme(e === 'dark')} + // // className="w-[200px]" + // > + // + // Dark + // + // + // Light + // + // + //
    + //
    , + , + Theme, + toggleTheme(e === 'dark')} > - Logout + {/* [Joshen] Removing system default for now, needs to be supported in useTheme from common packages */} + {/* System default */} + Dark + Light + , + , + onClickLogout()}> +
    +

    Logout

    + +
    , ]} > diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx index 784bf0589a7..3d873b91d80 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx @@ -6,6 +6,7 @@ import { Button, Dropdown, IconCode, IconPlus, Popover } from 'ui' import { useProjectsQuery } from 'data/projects/projects-query' import { useSelectedOrganization, useSelectedProject } from 'hooks' import { IS_PLATFORM, PROJECT_STATUS } from 'lib/constants' +import ShimmeringLoader from 'components/ui/ShimmeringLoader' // [Fran] the idea is to let users change projects without losing the current page, // but at the same time we need to redirect correctly between urls that might be @@ -37,11 +38,15 @@ interface ProjectDropdownProps { const ProjectDropdown = ({ alt }: ProjectDropdownProps) => { const selectedOrganization = useSelectedOrganization() const selectedProject = useSelectedProject() - const { data: allProjects } = useProjectsQuery() + const { data: allProjects, isLoading: isLoadingProjects } = useProjectsQuery() const selectedOrganizationSlug = selectedOrganization?.slug const router = useRouter() const sanitizedRoute = sanitizeRoute(router.route, router.query) + if (isLoadingProjects && alt) { + return + } + return IS_PLATFORM ? ( { /> ))} -
      - {IS_PLATFORM && showCmdkHelper && ( - - - - - - - -
      + {IS_PLATFORM && showCmdkHelper && ( + + +
      -
      -
      -
      - )} - - {IS_PLATFORM && ( - <> - - }> - Account Preferences - - - - - )} - Theme - toggleTheme(e === 'dark')} - > - {/* [Joshen] Removing system default for now, needs to be supported in useTheme from common packages */} - {/* System default */} - Dark - Light - - - } - > - - -
    +
    + +
    + + + + + +
    + {os === 'macos' ? ( + + ) : ( +

    CTRL

    + )} +

    K

    +
    +
    +
    + + )} + + {IS_PLATFORM && ( + <> + + } + > + Account Preferences + + + + + )} + Theme + toggleTheme(e === 'dark')} + > + {/* [Joshen] Removing system default for now, needs to be supported in useTheme from common packages */} + {/* System default */} + Dark + Light + + + } + > + + + + )}
    ) } diff --git a/studio/components/to-be-cleaned/KeyMap.tsx b/studio/components/to-be-cleaned/KeyMap.tsx index d70714b6741..a68221cabb2 100644 --- a/studio/components/to-be-cleaned/KeyMap.tsx +++ b/studio/components/to-be-cleaned/KeyMap.tsx @@ -1,5 +1,3 @@ -import { FC } from 'react' - /** * Render keyMap * @@ -13,7 +11,7 @@ const customKeyChars: any = { enter: '↵', } -const KeyMap: FC = ({ keyMap }) => { +const KeyMap = ({ keyMap }: any) => { if (!keyMap) return null const keys = keyMap.split('+') From 4977c95ef7dd988c6416b4cfc05cf928e10f3dfa Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 17 Jul 2023 23:15:00 +0800 Subject: [PATCH 08/61] Small style update to Dropdown.Item --- packages/ui/src/components/Dropdown/Dropdown.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/src/components/Dropdown/Dropdown.tsx b/packages/ui/src/components/Dropdown/Dropdown.tsx index 9e9d688f687..a1c1a3b25fe 100644 --- a/packages/ui/src/components/Dropdown/Dropdown.tsx +++ b/packages/ui/src/components/Dropdown/Dropdown.tsx @@ -103,7 +103,7 @@ export function Item({ icon, className, ...props }: ItemProps) { {...props} > {icon && icon} - {props.children} + {props.children} ) } From 494ada304fc22e2d4bb20f40d79951c10fb4facf Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 17 Jul 2023 23:16:33 +0800 Subject: [PATCH 09/61] Only show project dropdown if within a project --- studio/components/layouts/AppLayout/AppHeader.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/studio/components/layouts/AppLayout/AppHeader.tsx b/studio/components/layouts/AppLayout/AppHeader.tsx index b89f7cbcc22..d064174b550 100644 --- a/studio/components/layouts/AppLayout/AppHeader.tsx +++ b/studio/components/layouts/AppLayout/AppHeader.tsx @@ -1,7 +1,7 @@ import Link from 'next/link' import { useRouter } from 'next/router' -import { useSelectedOrganization } from 'hooks' +import { useSelectedOrganization, useSelectedProject } from 'hooks' import FeedbackDropdown from '../ProjectLayout/LayoutHeader/FeedbackDropdown' import HelpPopover from '../ProjectLayout/LayoutHeader/HelpPopover' import NotificationsPopover from '../ProjectLayout/LayoutHeader/NotificationsPopover' @@ -11,6 +11,7 @@ import UserSettingsDropdown from './UserSettingsDropdown' const AppHeader = () => { const router = useRouter() + const project = useSelectedProject() const organization = useSelectedOrganization() return ( @@ -26,7 +27,7 @@ const AppHeader = () => { - + {project !== undefined && }
    From 41f1a28ab1cc3bc4e50a7743a2c98299498dff64 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 18 Jul 2023 11:22:27 +0800 Subject: [PATCH 10/61] Update URLs --- studio/components/layouts/AppLayout/UserSettingsDropdown.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx index d5bcb4fe7d7..64b4a42bc8c 100644 --- a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx +++ b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx @@ -31,12 +31,12 @@ const UserSettingsDropdown = () => {

    {profile?.primary_email}

    , , - + Preferences , - + Access tokens From c92c4af57e50e1d2866e0ba2bfa13c1343164c31 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 18 Jul 2023 15:50:43 +0800 Subject: [PATCH 11/61] Scaffold new settings layout --- .../layouts/AppLayout/AppHeader.tsx | 10 +++ .../layouts/AppLayout/AppLayout.tsx | 12 +++- .../layouts/ProjectLayout/ProjectLayout.tsx | 24 +------ .../ProjectSettingsLayout/SettingsLayout.tsx | 55 ++++++++++++++++ .../SettingsMenu.utils.ts | 0 .../SettingsLayout/AccountSettingsMenu.tsx | 5 ++ .../OrganizationSettingsMenu.tsx | 48 ++++++++++++++ .../OrganizationSettingsMenuItem.tsx | 31 +++++++++ .../ProjectSettingsMenuItem.tsx | 26 ++++++++ .../layouts/SettingsLayout/SettingsLayout.tsx | 65 +++++-------------- studio/components/layouts/index.ts | 2 +- studio/next.config.js | 10 +-- studio/pages/org/[slug]/settings/index.tsx | 21 ++++++ 13 files changed, 232 insertions(+), 77 deletions(-) create mode 100644 studio/components/layouts/ProjectSettingsLayout/SettingsLayout.tsx rename studio/components/layouts/{SettingsLayout => ProjectSettingsLayout}/SettingsMenu.utils.ts (100%) create mode 100644 studio/components/layouts/SettingsLayout/AccountSettingsMenu.tsx create mode 100644 studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx create mode 100644 studio/components/layouts/SettingsLayout/OrganizationSettingsMenuItem.tsx create mode 100644 studio/components/layouts/SettingsLayout/ProjectSettingsMenuItem.tsx create mode 100644 studio/pages/org/[slug]/settings/index.tsx diff --git a/studio/components/layouts/AppLayout/AppHeader.tsx b/studio/components/layouts/AppLayout/AppHeader.tsx index d064174b550..f2524ad6712 100644 --- a/studio/components/layouts/AppLayout/AppHeader.tsx +++ b/studio/components/layouts/AppLayout/AppHeader.tsx @@ -8,6 +8,7 @@ import NotificationsPopover from '../ProjectLayout/LayoutHeader/NotificationsPop import ProjectDropdown from '../ProjectLayout/LayoutHeader/ProjectDropdown' import OrganizationDropdown from './OrganizationDropdown' import UserSettingsDropdown from './UserSettingsDropdown' +import { Button, IconSettings } from 'ui' const AppHeader = () => { const router = useRouter() @@ -34,6 +35,15 @@ const AppHeader = () => { + + +
    diff --git a/studio/components/layouts/AppLayout/AppLayout.tsx b/studio/components/layouts/AppLayout/AppLayout.tsx index 275113dbde8..6090c66fd64 100644 --- a/studio/components/layouts/AppLayout/AppLayout.tsx +++ b/studio/components/layouts/AppLayout/AppLayout.tsx @@ -5,11 +5,21 @@ import { useFlag } from 'hooks' const AppLayout = ({ children }: PropsWithChildren<{}>) => { const navLayoutV2 = useFlag('navigationLayoutV2') + const ongoingIncident = useFlag('ongoingIncident') + const appHeaderHeight = navLayoutV2 ? 49 : 0 return (
    {navLayoutV2 && } - {children} +
    + {children} +
    ) } diff --git a/studio/components/layouts/ProjectLayout/ProjectLayout.tsx b/studio/components/layouts/ProjectLayout/ProjectLayout.tsx index 7e72ae8ca00..b67b44f4f50 100644 --- a/studio/components/layouts/ProjectLayout/ProjectLayout.tsx +++ b/studio/components/layouts/ProjectLayout/ProjectLayout.tsx @@ -45,9 +45,7 @@ const ProjectLayout = ({ const projectName = selectedProject?.name const organizationName = selectedOrganization?.name - const ongoingIncident = useFlag('ongoingIncident') const navLayoutV2 = useFlag('navigationLayoutV2') - const appHeaderHeight = navLayoutV2 ? 48 : 0 const isPaused = selectedProject?.status === PROJECT_STATUS.INACTIVE const ignorePausedState = @@ -71,14 +69,7 @@ const ProjectLayout = ({ -
    +
    {/* Left-most navigation side bar to access products */} {!hideIconBar && } @@ -205,9 +196,7 @@ export const ProjectLayoutNonBlocking = ({ router.pathname === '/project/[ref]' || router.pathname.includes('/project/[ref]/settings') const showPausedState = isPaused && !ignorePausedState - const ongoingIncident = useFlag('ongoingIncident') const navLayoutV2 = useFlag('navigationLayoutV2') - const appHeaderHeight = navLayoutV2 ? 48 : 0 return ( @@ -217,14 +206,7 @@ export const ProjectLayoutNonBlocking = ({ -
    +
    {/* Left-most navigation side bar to access products */} {!hideIconBar && } @@ -234,7 +216,7 @@ export const ProjectLayoutNonBlocking = ({ )}
    - {!hideHeader && } + {!navLayoutV2 && !hideHeader && } {showPausedState ? (
    diff --git a/studio/components/layouts/ProjectSettingsLayout/SettingsLayout.tsx b/studio/components/layouts/ProjectSettingsLayout/SettingsLayout.tsx new file mode 100644 index 00000000000..f49f876963d --- /dev/null +++ b/studio/components/layouts/ProjectSettingsLayout/SettingsLayout.tsx @@ -0,0 +1,55 @@ +import { FC, ReactNode, useEffect } from 'react' +import { observer } from 'mobx-react-lite' +import { useRouter } from 'next/router' +import { useFlag, useSelectedOrganization, useSelectedProject, useStore, withAuth } from 'hooks' +import { generateSettingsMenu } from './SettingsMenu.utils' + +import ProjectLayout from '..' +import ProductMenu from 'components/ui/ProductMenu' + +interface Props { + title?: string + children: ReactNode +} + +const SettingsLayout: FC = ({ title, children }) => { + const { ui, meta } = useStore() + const project = useSelectedProject() + const organization = useSelectedOrganization() + const isOrgBilling = !!organization?.subscription_id + + const router = useRouter() + // billing pages live under /billing/invoices and /billing/subscription, etc + // so we need to pass the [5]th part of the url to the menu + const page = router.pathname.includes('billing') + ? router.pathname.split('/')[5] + : router.pathname.split('/')[4] + + const isVaultEnabled = useFlag('vaultExtension') + const menuRoutes = generateSettingsMenu( + project?.ref as string, + project, + isVaultEnabled, + isOrgBilling + ) + + useEffect(() => { + if (ui.selectedProjectRef) { + meta.extensions.load() + } + }, [ui.selectedProjectRef]) + + return ( + } + > +
    + {children} +
    +
    + ) +} + +export default withAuth(observer(SettingsLayout)) diff --git a/studio/components/layouts/SettingsLayout/SettingsMenu.utils.ts b/studio/components/layouts/ProjectSettingsLayout/SettingsMenu.utils.ts similarity index 100% rename from studio/components/layouts/SettingsLayout/SettingsMenu.utils.ts rename to studio/components/layouts/ProjectSettingsLayout/SettingsMenu.utils.ts diff --git a/studio/components/layouts/SettingsLayout/AccountSettingsMenu.tsx b/studio/components/layouts/SettingsLayout/AccountSettingsMenu.tsx new file mode 100644 index 00000000000..2a6a68c633d --- /dev/null +++ b/studio/components/layouts/SettingsLayout/AccountSettingsMenu.tsx @@ -0,0 +1,5 @@ +const AccountSettingsMenu = () => { + return
    Account settings
    +} + +export default AccountSettingsMenu diff --git a/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx b/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx new file mode 100644 index 00000000000..809c030ae02 --- /dev/null +++ b/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx @@ -0,0 +1,48 @@ +import { useRouter } from 'next/router' + +import { useProjectsQuery } from 'data/projects/projects-query' +import { useSelectedOrganization } from 'hooks' +import OrganizationSettingsMenuItem from './OrganizationSettingsMenuItem' +import ProjectSettingsMenuItem from './ProjectSettingsMenuItem' + +const OrganizationSettingsMenu = () => { + const router = useRouter() + const organization = useSelectedOrganization() + const organizationSettings = [ + { label: 'Overview', pathname: `/org/[slug]/settings` }, + { label: 'Members', pathname: `/org/[slug]/team` }, + { label: 'Integrations', pathname: `/org/[slug]/integrations` }, + { label: 'Billing', pathname: `/org/[slug]/billing` }, + { label: 'Usage', pathname: `/org/[slug]/usage` }, + { label: 'Invoices', pathname: `/org/[slug]/invoices` }, + { label: 'OAuth Apps', pathname: `/org/[slug]/apps` }, + { label: 'Audit Logs', pathname: `/org/[slug]/audit` }, + ] + + const { data: allProjects } = useProjectsQuery() + const projects = allProjects?.filter((project) => project.organization_id === organization?.id) + + return ( +
    +
    +

    Organization

    + {organizationSettings.map((link) => ( + + ))} +
    +
    +

    Projects

    + {projects?.map((project) => ( + + ))} +
    +
    + ) +} + +export default OrganizationSettingsMenu diff --git a/studio/components/layouts/SettingsLayout/OrganizationSettingsMenuItem.tsx b/studio/components/layouts/SettingsLayout/OrganizationSettingsMenuItem.tsx new file mode 100644 index 00000000000..d7987ddde8c --- /dev/null +++ b/studio/components/layouts/SettingsLayout/OrganizationSettingsMenuItem.tsx @@ -0,0 +1,31 @@ +import clsx from 'clsx' +import Link from 'next/link' + +interface OrganizationSettingsMenuItemProps { + slug: string + link: { label: string; pathname: string } + isActive: boolean +} + +const OrganizationSettingsMenuItem = ({ + slug, + link, + isActive, +}: OrganizationSettingsMenuItemProps) => { + return ( + + ) +} + +export default OrganizationSettingsMenuItem diff --git a/studio/components/layouts/SettingsLayout/ProjectSettingsMenuItem.tsx b/studio/components/layouts/SettingsLayout/ProjectSettingsMenuItem.tsx new file mode 100644 index 00000000000..ce956a96365 --- /dev/null +++ b/studio/components/layouts/SettingsLayout/ProjectSettingsMenuItem.tsx @@ -0,0 +1,26 @@ +import clsx from 'clsx' +import Link from 'next/link' +import { Project } from 'types' + +interface ProjectSettingsMenuItemProps { + project: Project +} + +const ProjectSettingsMenuItem = ({ project }: ProjectSettingsMenuItemProps) => { + return ( + + ) +} + +export default ProjectSettingsMenuItem diff --git a/studio/components/layouts/SettingsLayout/SettingsLayout.tsx b/studio/components/layouts/SettingsLayout/SettingsLayout.tsx index fa1edfb8c91..60b648a1a26 100644 --- a/studio/components/layouts/SettingsLayout/SettingsLayout.tsx +++ b/studio/components/layouts/SettingsLayout/SettingsLayout.tsx @@ -1,55 +1,22 @@ -import { FC, ReactNode, useEffect } from 'react' -import { observer } from 'mobx-react-lite' -import { useRouter } from 'next/router' -import { useFlag, useSelectedOrganization, useSelectedProject, useStore, withAuth } from 'hooks' -import { generateSettingsMenu } from './SettingsMenu.utils' +import { PropsWithChildren } from 'react' +import AppLayout from '../AppLayout/AppLayout' +import { useParams } from 'common' +import OrganizationSettingsMenu from './OrganizationSettingsMenu' +import AccountSettingsMenu from './AccountSettingsMenu' -import ProjectLayout from '../' -import ProductMenu from 'components/ui/ProductMenu' - -interface Props { - title?: string - children: ReactNode -} - -const SettingsLayout: FC = ({ title, children }) => { - const { ui, meta } = useStore() - const project = useSelectedProject() - const organization = useSelectedOrganization() - const isOrgBilling = !!organization?.subscription_id - - const router = useRouter() - // billing pages live under /billing/invoices and /billing/subscription, etc - // so we need to pass the [5]th part of the url to the menu - const page = router.pathname.includes('billing') - ? router.pathname.split('/')[5] - : router.pathname.split('/')[4] - - const isVaultEnabled = useFlag('vaultExtension') - const menuRoutes = generateSettingsMenu( - project?.ref as string, - project, - isVaultEnabled, - isOrgBilling - ) - - useEffect(() => { - if (ui.selectedProjectRef) { - meta.extensions.load() - } - }, [ui.selectedProjectRef]) +const SettingsLayout = ({ children }: PropsWithChildren<{}>) => { + const { slug } = useParams() return ( - } - > -
    - {children} -
    -
    + +
    +
    + {slug !== undefined ? : } +
    +
    {children}
    +
    +
    ) } -export default withAuth(observer(SettingsLayout)) +export default SettingsLayout diff --git a/studio/components/layouts/index.ts b/studio/components/layouts/index.ts index b5ffd3d933f..3213ebfbf7e 100644 --- a/studio/components/layouts/index.ts +++ b/studio/components/layouts/index.ts @@ -9,7 +9,7 @@ import TableEditorLayout from './TableEditorLayout/TableEditorLayout' import SQLEditorLayout from './SQLEditorLayout/SQLEditorLayout' import DatabaseLayout from './DatabaseLayout/DatabaseLayout' import DocsLayout from './DocsLayout/DocsLayout' -import SettingsLayout from './SettingsLayout/SettingsLayout' +import SettingsLayout from './ProjectSettingsLayout/SettingsLayout' import StorageLayout from './StorageLayout/StorageLayout' import AccountLayout from './AccountLayout/AccountLayout' import { AccountLayoutWithoutAuth } from './AccountLayout/AccountLayout' diff --git a/studio/next.config.js b/studio/next.config.js index d95d252877e..eb2634ce51f 100644 --- a/studio/next.config.js +++ b/studio/next.config.js @@ -135,11 +135,11 @@ const nextConfig = { destination: '/project/:ref/sql', permanent: true, }, - { - source: '/org/:slug/settings', - destination: '/org/:slug/general', - permanent: true, - }, + // { + // source: '/org/:slug/settings', + // destination: '/org/:slug/general', + // permanent: true, + // }, { source: '/project/:ref/settings/billing/update', destination: '/project/:ref/settings/billing/subscription', diff --git a/studio/pages/org/[slug]/settings/index.tsx b/studio/pages/org/[slug]/settings/index.tsx new file mode 100644 index 00000000000..f45776ebc32 --- /dev/null +++ b/studio/pages/org/[slug]/settings/index.tsx @@ -0,0 +1,21 @@ +import { GeneralSettings } from 'components/interfaces/Organization' +import { OrganizationLayout } from 'components/layouts' +import SettingsLayout from 'components/layouts/SettingsLayout/SettingsLayout' +import Loading from 'components/ui/Loading' +import { usePermissionsQuery } from 'data/permissions/permissions-query' +import { useSelectedOrganization } from 'hooks' +import { NextPageWithLayout } from 'types' + +const OrganizationSettings: NextPageWithLayout = () => { + const { isLoading: isLoadingPermissions } = usePermissionsQuery() + const selectedOrganization = useSelectedOrganization() + + return ( + <> +

    settings

    + + ) +} + +OrganizationSettings.getLayout = (page) => {page} +export default OrganizationSettings From 167326b47428286a7a30c9ab686d676f93b0fd2d Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 18 Jul 2023 17:53:38 +0800 Subject: [PATCH 12/61] Implement organization and project menu items --- packages/ui/index.tsx | 7 ++ .../ui/src/components/shadcn/ui/accordion.tsx | 6 +- .../OrganizationSettingsMenu.tsx | 25 +++++-- .../ProjectSettingsMenuItem.tsx | 71 +++++++++++++++---- 4 files changed, 89 insertions(+), 20 deletions(-) diff --git a/packages/ui/index.tsx b/packages/ui/index.tsx index f1c481e4a50..da0f15fe962 100644 --- a/packages/ui/index.tsx +++ b/packages/ui/index.tsx @@ -135,6 +135,13 @@ export { PopoverContent as PopoverContent_Shadcn_, } from './src/components/shadcn/ui/popover' +export { + Accordion as Accordion_Shadcn_, + AccordionItem as AccordionItem_Shadcn_, + AccordionTrigger as AccordionTrigger_Shadcn_, + AccordionContent as AccordionContent_Shadcn_, +} from './src/components/shadcn/ui/accordion' + // links export * from './src/components/TextLink' diff --git a/packages/ui/src/components/shadcn/ui/accordion.tsx b/packages/ui/src/components/shadcn/ui/accordion.tsx index c5950299253..c5d5ec3dc15 100644 --- a/packages/ui/src/components/shadcn/ui/accordion.tsx +++ b/packages/ui/src/components/shadcn/ui/accordion.tsx @@ -16,8 +16,8 @@ AccordionItem.displayName = 'AccordionItem' const AccordionTrigger = React.forwardRef< React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( + React.ComponentPropsWithoutRef & { hideIcon?: boolean } +>(({ className, children, hideIcon, ...props }, ref) => ( {children} - + {!hideIcon && } )) diff --git a/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx b/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx index 809c030ae02..42591bae660 100644 --- a/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx +++ b/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx @@ -1,9 +1,11 @@ import { useRouter } from 'next/router' +import { Accordion_Shadcn_, Button } from 'ui' import { useProjectsQuery } from 'data/projects/projects-query' import { useSelectedOrganization } from 'hooks' import OrganizationSettingsMenuItem from './OrganizationSettingsMenuItem' import ProjectSettingsMenuItem from './ProjectSettingsMenuItem' +import Link from 'next/link' const OrganizationSettingsMenu = () => { const router = useRouter() @@ -25,7 +27,7 @@ const OrganizationSettingsMenu = () => { return (
    -

    Organization

    +

    Organization

    {organizationSettings.map((link) => ( { /> ))}
    + + {/* [Joshen] We'll implement this in the second iteration, just to keep things small */}
    -

    Projects

    - {projects?.map((project) => ( - - ))} +

    Projects

    + + {projects?.map((project) => ( + + ))} + +
    +
    ) diff --git a/studio/components/layouts/SettingsLayout/ProjectSettingsMenuItem.tsx b/studio/components/layouts/SettingsLayout/ProjectSettingsMenuItem.tsx index ce956a96365..0a40d1eaba1 100644 --- a/studio/components/layouts/SettingsLayout/ProjectSettingsMenuItem.tsx +++ b/studio/components/layouts/SettingsLayout/ProjectSettingsMenuItem.tsx @@ -1,5 +1,13 @@ import clsx from 'clsx' import Link from 'next/link' +import { + AccordionContent_Shadcn_, + AccordionItem_Shadcn_, + AccordionTrigger_Shadcn_, + IconChevronRight, +} from 'ui' + +import { useSelectedOrganization } from 'hooks' import { Project } from 'types' interface ProjectSettingsMenuItemProps { @@ -7,19 +15,58 @@ interface ProjectSettingsMenuItemProps { } const ProjectSettingsMenuItem = ({ project }: ProjectSettingsMenuItemProps) => { + const organization = useSelectedOrganization() + const isOrgBilling = !!organization?.subscription_id + + // [Joshen] Links need to be updated once we start implementing these + const projectSettings = isOrgBilling + ? [ + { label: 'General', pathname: `/org/[slug]/settings` }, + { label: 'Infrastructure', pathname: `/org/[slug]/settings` }, + { label: 'Add Ons', pathname: `/org/[slug]/settings` }, + ] + : [ + { label: 'General', pathname: `/org/[slug]/settings` }, + { label: 'Subscription', pathname: `/org/[slug]/settings` }, + { label: 'Usage', pathname: `/org/[slug]/settings` }, + { label: 'Invoices', pathname: `/org/[slug]/settings` }, + ] + return ( - + + +
    + +

    + {project.name} +

    +
    +
    + +
    + {projectSettings.map((link) => ( + + ))} +
    +
    +
    ) } From 273f1b4127795a91bee05d2dece56309022cb300 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 19 Jul 2023 11:02:06 +0800 Subject: [PATCH 13/61] Implement org settings pages with new layout --- .../GeneralSettings/GeneralSettings.tsx | 2 +- .../layouts/AppLayout/AppLayout.tsx | 3 +++ .../components/layouts/OrganizationLayout.tsx | 9 +++++++- .../OrganizationSettingsMenu.tsx | 2 +- .../layouts/SettingsLayout/SettingsLayout.tsx | 6 ++++-- studio/next.config.js | 10 ++++----- studio/pages/org/[slug]/general.tsx | 4 ++-- studio/pages/org/[slug]/settings/index.tsx | 21 ------------------- 8 files changed, 24 insertions(+), 33 deletions(-) delete mode 100644 studio/pages/org/[slug]/settings/index.tsx diff --git a/studio/components/interfaces/Organization/GeneralSettings/GeneralSettings.tsx b/studio/components/interfaces/Organization/GeneralSettings/GeneralSettings.tsx index 435adc38493..5cdbc251e8a 100644 --- a/studio/components/interfaces/Organization/GeneralSettings/GeneralSettings.tsx +++ b/studio/components/interfaces/Organization/GeneralSettings/GeneralSettings.tsx @@ -7,6 +7,7 @@ import { useEffect, useState } from 'react' import { Collapsible, Form, IconChevronRight, Input, Toggle } from 'ui' import { useParams } from 'common/hooks' +import { ScaffoldContainerLegacy } from 'components/layouts/Scaffold' import { FormActions, FormPanel, @@ -19,7 +20,6 @@ import { useCheckPermissions, useFlag, useSelectedOrganization, useStore } from import { patch } from 'lib/common/fetch' import { API_URL } from 'lib/constants' import OrganizationDeletePanel from './OrganizationDeletePanel' -import { ScaffoldContainerLegacy } from 'components/layouts/Scaffold' const GeneralSettings = () => { const queryClient = useQueryClient() diff --git a/studio/components/layouts/AppLayout/AppLayout.tsx b/studio/components/layouts/AppLayout/AppLayout.tsx index 6090c66fd64..7cefb9a6453 100644 --- a/studio/components/layouts/AppLayout/AppLayout.tsx +++ b/studio/components/layouts/AppLayout/AppLayout.tsx @@ -16,6 +16,9 @@ const AppLayout = ({ children }: PropsWithChildren<{}>) => { height: ongoingIncident ? `calc(100vh - 44px - ${appHeaderHeight}px)` : `calc(100vh - ${appHeaderHeight}px)`, + maxHeight: ongoingIncident + ? `calc(100vh - 44px - ${appHeaderHeight}px)` + : `calc(100vh - ${appHeaderHeight}px)`, }} > {children} diff --git a/studio/components/layouts/OrganizationLayout.tsx b/studio/components/layouts/OrganizationLayout.tsx index 91ec8e0880a..691f99f25b5 100644 --- a/studio/components/layouts/OrganizationLayout.tsx +++ b/studio/components/layouts/OrganizationLayout.tsx @@ -5,16 +5,23 @@ import { PropsWithChildren } from 'react' import { Tabs } from 'ui' import { AccountLayout } from './' import { ScaffoldContainer, ScaffoldDivider, ScaffoldHeader, ScaffoldTitle } from './Scaffold' +import SettingsLayout from './SettingsLayout/SettingsLayout' const OrganizationLayout = ({ children }: PropsWithChildren<{}>) => { const selectedOrganization = useSelectedOrganization() const router = useRouter() const { slug } = useParams() const id = router.asPath.split('/').at(-1)?.split('?')[0]?.split('#')[0] + const isOrgBilling = !!selectedOrganization?.subscription_id + + const navLayoutV2 = useFlag('navigationLayoutV2') const showOAuthApps = useFlag('oauthApps') const showAuditLogs = useFlag('auditLogs') const showIntegrationsV2 = useFlag('integrationsV2') - const isOrgBilling = !!selectedOrganization?.subscription_id + + if (navLayoutV2) { + return {children} + } return ( { const router = useRouter() const organization = useSelectedOrganization() const organizationSettings = [ - { label: 'Overview', pathname: `/org/[slug]/settings` }, + { label: 'General', pathname: `/org/[slug]/general` }, { label: 'Members', pathname: `/org/[slug]/team` }, { label: 'Integrations', pathname: `/org/[slug]/integrations` }, { label: 'Billing', pathname: `/org/[slug]/billing` }, diff --git a/studio/components/layouts/SettingsLayout/SettingsLayout.tsx b/studio/components/layouts/SettingsLayout/SettingsLayout.tsx index 60b648a1a26..2054f542438 100644 --- a/studio/components/layouts/SettingsLayout/SettingsLayout.tsx +++ b/studio/components/layouts/SettingsLayout/SettingsLayout.tsx @@ -7,13 +7,15 @@ import AccountSettingsMenu from './AccountSettingsMenu' const SettingsLayout = ({ children }: PropsWithChildren<{}>) => { const { slug } = useParams() + // [Joshen] Note to self - these could contribute to a Scaffold component + return (
    -
    +
    {slug !== undefined ? : }
    -
    {children}
    +
    {children}
    ) diff --git a/studio/next.config.js b/studio/next.config.js index eb2634ce51f..d95d252877e 100644 --- a/studio/next.config.js +++ b/studio/next.config.js @@ -135,11 +135,11 @@ const nextConfig = { destination: '/project/:ref/sql', permanent: true, }, - // { - // source: '/org/:slug/settings', - // destination: '/org/:slug/general', - // permanent: true, - // }, + { + source: '/org/:slug/settings', + destination: '/org/:slug/general', + permanent: true, + }, { source: '/project/:ref/settings/billing/update', destination: '/project/:ref/settings/billing/subscription', diff --git a/studio/pages/org/[slug]/general.tsx b/studio/pages/org/[slug]/general.tsx index 245a3e23f05..d186365fad5 100644 --- a/studio/pages/org/[slug]/general.tsx +++ b/studio/pages/org/[slug]/general.tsx @@ -1,4 +1,4 @@ -import { GeneralSettings } from 'components/interfaces/Organization' +import { GeneralSettings as GeneralSettingsLegacy } from 'components/interfaces/Organization' import { OrganizationLayout } from 'components/layouts' import Loading from 'components/ui/Loading' import { usePermissionsQuery } from 'data/permissions/permissions-query' @@ -14,7 +14,7 @@ const OrgGeneralSettings: NextPageWithLayout = () => { {selectedOrganization === undefined && isLoadingPermissions ? ( ) : ( - + )} ) diff --git a/studio/pages/org/[slug]/settings/index.tsx b/studio/pages/org/[slug]/settings/index.tsx deleted file mode 100644 index f45776ebc32..00000000000 --- a/studio/pages/org/[slug]/settings/index.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { GeneralSettings } from 'components/interfaces/Organization' -import { OrganizationLayout } from 'components/layouts' -import SettingsLayout from 'components/layouts/SettingsLayout/SettingsLayout' -import Loading from 'components/ui/Loading' -import { usePermissionsQuery } from 'data/permissions/permissions-query' -import { useSelectedOrganization } from 'hooks' -import { NextPageWithLayout } from 'types' - -const OrganizationSettings: NextPageWithLayout = () => { - const { isLoading: isLoadingPermissions } = usePermissionsQuery() - const selectedOrganization = useSelectedOrganization() - - return ( - <> -

    settings

    - - ) -} - -OrganizationSettings.getLayout = (page) => {page} -export default OrganizationSettings From 5bdda49e77ef91425ff4193d818324a4b2db097c Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 19 Jul 2023 11:16:05 +0800 Subject: [PATCH 14/61] Update account settings pages to use new layout --- .../layouts/AccountLayout/AccountLayout.tsx | 6 ++++ .../SettingsLayout/AccountSettingsMenu.tsx | 25 ++++++++++++++- .../OrganizationSettingsMenu.tsx | 8 ++--- .../OrganizationSettingsMenuItem.tsx | 31 ------------------- .../SettingsLayout/SettingsMenuItem.tsx | 27 ++++++++++++++++ 5 files changed, 61 insertions(+), 36 deletions(-) delete mode 100644 studio/components/layouts/SettingsLayout/OrganizationSettingsMenuItem.tsx create mode 100644 studio/components/layouts/SettingsLayout/SettingsMenuItem.tsx diff --git a/studio/components/layouts/AccountLayout/AccountLayout.tsx b/studio/components/layouts/AccountLayout/AccountLayout.tsx index 901cd8949b8..b862872f8d0 100644 --- a/studio/components/layouts/AccountLayout/AccountLayout.tsx +++ b/studio/components/layouts/AccountLayout/AccountLayout.tsx @@ -8,6 +8,7 @@ import { useSignOut } from 'lib/auth' import { IS_PLATFORM } from 'lib/constants' import { SidebarSection } from './AccountLayout.types' import WithSidebar from './WithSidebar' +import SettingsLayout from '../SettingsLayout/SettingsLayout' export interface AccountLayoutProps { title: string @@ -23,6 +24,7 @@ const AccountLayout = ({ children, title, breadcrumbs }: PropsWithChildren{children} + } + return ( <> diff --git a/studio/components/layouts/SettingsLayout/AccountSettingsMenu.tsx b/studio/components/layouts/SettingsLayout/AccountSettingsMenu.tsx index 2a6a68c633d..80c3b593dd3 100644 --- a/studio/components/layouts/SettingsLayout/AccountSettingsMenu.tsx +++ b/studio/components/layouts/SettingsLayout/AccountSettingsMenu.tsx @@ -1,5 +1,28 @@ +import { useRouter } from 'next/router' +import SettingsMenuItem from './SettingsMenuItem' + const AccountSettingsMenu = () => { - return
    Account settings
    + const router = useRouter() + const accountSettings = [ + { label: 'Preferences', pathname: `/account/me` }, + { label: 'Access Tokens', pathname: `/account/tokens` }, + ] + + return ( +
    +
    +

    Account Settings

    + {accountSettings.map((link) => ( + + ))} +
    +
    + ) } export default AccountSettingsMenu diff --git a/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx b/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx index c5658c17f7c..37852e45d0d 100644 --- a/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx +++ b/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx @@ -3,9 +3,9 @@ import { Accordion_Shadcn_, Button } from 'ui' import { useProjectsQuery } from 'data/projects/projects-query' import { useSelectedOrganization } from 'hooks' -import OrganizationSettingsMenuItem from './OrganizationSettingsMenuItem' import ProjectSettingsMenuItem from './ProjectSettingsMenuItem' import Link from 'next/link' +import SettingsMenuItem from './SettingsMenuItem' const OrganizationSettingsMenu = () => { const router = useRouter() @@ -29,10 +29,10 @@ const OrganizationSettingsMenu = () => {

    Organization

    {organizationSettings.map((link) => ( - ))} diff --git a/studio/components/layouts/SettingsLayout/OrganizationSettingsMenuItem.tsx b/studio/components/layouts/SettingsLayout/OrganizationSettingsMenuItem.tsx deleted file mode 100644 index d7987ddde8c..00000000000 --- a/studio/components/layouts/SettingsLayout/OrganizationSettingsMenuItem.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import clsx from 'clsx' -import Link from 'next/link' - -interface OrganizationSettingsMenuItemProps { - slug: string - link: { label: string; pathname: string } - isActive: boolean -} - -const OrganizationSettingsMenuItem = ({ - slug, - link, - isActive, -}: OrganizationSettingsMenuItemProps) => { - return ( - - ) -} - -export default OrganizationSettingsMenuItem diff --git a/studio/components/layouts/SettingsLayout/SettingsMenuItem.tsx b/studio/components/layouts/SettingsLayout/SettingsMenuItem.tsx new file mode 100644 index 00000000000..e8bcf9b13a0 --- /dev/null +++ b/studio/components/layouts/SettingsLayout/SettingsMenuItem.tsx @@ -0,0 +1,27 @@ +import clsx from 'clsx' +import Link from 'next/link' + +interface SettingsMenuItemProps { + href: string + label: string + isActive: boolean +} + +const SettingsMenuItem = ({ href, label, isActive }: SettingsMenuItemProps) => { + return ( + + ) +} + +export default SettingsMenuItem From 51444cc790c08db0f615ad3032588f9fd6bcea52 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 19 Jul 2023 12:22:51 +0800 Subject: [PATCH 15/61] save last visited organization to local storage --- .../interfaces/App/RouteValidationWrapper.tsx | 27 ++++++++++----- .../layouts/AccountLayout/AccountLayout.tsx | 2 +- .../layouts/AppLayout/AppHeader.tsx | 2 +- .../AppLayout/OrganizationDropdown.tsx | 8 +++-- studio/hooks/misc/useSelectedOrganization.ts | 13 ++++--- studio/pages/org/[slug]/index.tsx | 34 ++++++++++++++----- 6 files changed, 59 insertions(+), 27 deletions(-) diff --git a/studio/components/interfaces/App/RouteValidationWrapper.tsx b/studio/components/interfaces/App/RouteValidationWrapper.tsx index aacae694dc3..58e4091d73c 100644 --- a/studio/components/interfaces/App/RouteValidationWrapper.tsx +++ b/studio/components/interfaces/App/RouteValidationWrapper.tsx @@ -6,14 +6,13 @@ import { useOrganizationsQuery } from 'data/organizations/organizations-query' import { useProjectsQuery } from 'data/projects/projects-query' import { useStore } from 'hooks' import useLatest from 'hooks/misc/useLatest' +import { useParams } from 'common' // Ideally these could all be within a _middleware when we use Next 12 const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { const { ui } = useStore() - const router = useRouter() - const projectRef = router.query.ref - const orgSlug = router.query.slug + const { ref, slug } = useParams() /** * Array of urls/routes that should be ignored @@ -43,10 +42,14 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { // check if current route is excempted from route validation check if (isExceptUrl()) return - if (orgsInitialized && orgSlug) { + if (orgsInitialized && slug) { // Check validity of organization that user is trying to access const organizations = organizationsRef.current ?? [] - const isValidOrg = organizations.some((org) => org.slug === orgSlug) + const organization = organizations.find((org) => org.slug === slug) + const isValidOrg = organization !== undefined + + // Save organization slug to local storage + if (organization) localStorage.setItem('supabase-organization', organization.slug) if (!isValidOrg) { ui.setNotification({ category: 'error', message: 'This organization does not exist' }) @@ -54,7 +57,7 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { return } } - }, [orgsInitialized]) + }, [slug, orgsInitialized]) const { data: projects, isSuccess: projectsInitialized } = useProjectsQuery() const projectsRef = useLatest(projects) @@ -63,10 +66,16 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { // check if current route is excempted from route validation check if (isExceptUrl()) return - if (projectsInitialized && projectRef) { + if (projectsInitialized && ref) { // Check validity of project that the user is trying to access const projects = projectsRef.current ?? [] - const isValidProject = projects.some((project) => project.ref === projectRef) + const project = projects.find((project) => project.ref === ref) + const isValidProject = project !== undefined + + // Save organization slug to local storage + const organizationId = project?.organization_id + const organization = organizations?.find((organization) => organization.id === organizationId) + if (organization) localStorage.setItem('supabase-organization', organization.slug) if (!isValidProject) { ui.setNotification({ category: 'error', message: 'This project does not exist' }) @@ -74,7 +83,7 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { return } } - }, [projectsInitialized]) + }, [ref, projectsInitialized]) return <>{children} } diff --git a/studio/components/layouts/AccountLayout/AccountLayout.tsx b/studio/components/layouts/AccountLayout/AccountLayout.tsx index b862872f8d0..ae83fbece97 100644 --- a/studio/components/layouts/AccountLayout/AccountLayout.tsx +++ b/studio/components/layouts/AccountLayout/AccountLayout.tsx @@ -127,7 +127,7 @@ const AccountLayout = ({ children, title, breadcrumbs }: PropsWithChildren{children} } diff --git a/studio/components/layouts/AppLayout/AppHeader.tsx b/studio/components/layouts/AppLayout/AppHeader.tsx index f2524ad6712..ef8d9a91c38 100644 --- a/studio/components/layouts/AppLayout/AppHeader.tsx +++ b/studio/components/layouts/AppLayout/AppHeader.tsx @@ -35,7 +35,7 @@ const AppHeader = () => { - + ) } diff --git a/studio/hooks/misc/useSelectedOrganization.ts b/studio/hooks/misc/useSelectedOrganization.ts index c2446380fc5..282e9daf081 100644 --- a/studio/hooks/misc/useSelectedOrganization.ts +++ b/studio/hooks/misc/useSelectedOrganization.ts @@ -8,10 +8,15 @@ export function useSelectedOrganization({ enabled = true } = {}) { const { slug } = useParams() const { data } = useOrganizationsQuery({ enabled }) const selectedProject = useSelectedProject() + const localStorageSlug = + typeof window !== 'undefined' ? localStorage.getItem('supabase-organization') : undefined return useMemo(() => { - return data?.find( - (org) => org.slug === slug || (selectedProject && org.id === selectedProject.organization_id) - ) - }, [data, selectedProject, slug]) + return data?.find((org) => { + if (slug !== undefined) return org.slug === slug + if (selectedProject !== undefined) return org.id === selectedProject.organization_id + if (localStorageSlug !== undefined) return org.slug === localStorageSlug + return undefined + }) + }, [data, selectedProject, slug, localStorageSlug]) } diff --git a/studio/pages/org/[slug]/index.tsx b/studio/pages/org/[slug]/index.tsx index 263a42d7732..ba4fa711073 100644 --- a/studio/pages/org/[slug]/index.tsx +++ b/studio/pages/org/[slug]/index.tsx @@ -21,10 +21,6 @@ const ProjectsPage: NextPageWithLayout = () => { const organization = useSelectedOrganization() const projects = allProjects?.filter((project) => project.organization_id === organization?.id) - if (!organization) { - // Return a 404 page - } - return ( @@ -48,11 +44,31 @@ const ProjectsPage: NextPageWithLayout = () => { )} {isSuccessProjects && ( -
      - {projects?.map((project) => ( - - ))} -
    + <> + {(projects?.length ?? 0) === 0 ? ( +
    + ) : ( +
      + {projects?.map((project) => ( + + ))} +
    + )} + )}
    From fd5d250c2ed23957de5be5098c3ef5a8337caf99 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 19 Jul 2023 12:37:06 +0800 Subject: [PATCH 16/61] Refactor settings button and fix route validation wrapper --- .../interfaces/App/RouteValidationWrapper.tsx | 36 ++++++++++++------- .../layouts/AppLayout/AppHeader.tsx | 12 ++----- .../layouts/AppLayout/SettingsButton.tsx | 36 +++++++++++++++++++ 3 files changed, 61 insertions(+), 23 deletions(-) create mode 100644 studio/components/layouts/AppLayout/SettingsButton.tsx diff --git a/studio/components/interfaces/App/RouteValidationWrapper.tsx b/studio/components/interfaces/App/RouteValidationWrapper.tsx index 58e4091d73c..9b43d4c5a8d 100644 --- a/studio/components/interfaces/App/RouteValidationWrapper.tsx +++ b/studio/components/interfaces/App/RouteValidationWrapper.tsx @@ -45,11 +45,7 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { if (orgsInitialized && slug) { // Check validity of organization that user is trying to access const organizations = organizationsRef.current ?? [] - const organization = organizations.find((org) => org.slug === slug) - const isValidOrg = organization !== undefined - - // Save organization slug to local storage - if (organization) localStorage.setItem('supabase-organization', organization.slug) + const isValidOrg = organizations.some((org) => org.slug === slug) if (!isValidOrg) { ui.setNotification({ category: 'error', message: 'This organization does not exist' }) @@ -57,7 +53,7 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { return } } - }, [slug, orgsInitialized]) + }, [orgsInitialized]) const { data: projects, isSuccess: projectsInitialized } = useProjectsQuery() const projectsRef = useLatest(projects) @@ -69,13 +65,7 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { if (projectsInitialized && ref) { // Check validity of project that the user is trying to access const projects = projectsRef.current ?? [] - const project = projects.find((project) => project.ref === ref) - const isValidProject = project !== undefined - - // Save organization slug to local storage - const organizationId = project?.organization_id - const organization = organizations?.find((organization) => organization.id === organizationId) - if (organization) localStorage.setItem('supabase-organization', organization.slug) + const isValidProject = projects.some((project) => project.ref === ref) if (!isValidProject) { ui.setNotification({ category: 'error', message: 'This project does not exist' }) @@ -83,6 +73,26 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { return } } + }, [projectsInitialized]) + + useEffect(() => { + if (orgsInitialized && slug) { + // Save organization slug to local storage + const organizations = organizationsRef.current ?? [] + const organization = organizations.find((org) => org.slug === slug) + if (organization) localStorage.setItem('supabase-organization', organization.slug) + } + }, [slug, orgsInitialized]) + + useEffect(() => { + if (projectsInitialized && ref) { + // Save organization slug to local storage + const projects = projectsRef.current ?? [] + const project = projects.find((project) => project.ref === ref) + const organizationId = project?.organization_id + const organization = organizations?.find((organization) => organization.id === organizationId) + if (organization) localStorage.setItem('supabase-organization', organization.slug) + } }, [ref, projectsInitialized]) return <>{children} diff --git a/studio/components/layouts/AppLayout/AppHeader.tsx b/studio/components/layouts/AppLayout/AppHeader.tsx index ef8d9a91c38..f25ffe0dff4 100644 --- a/studio/components/layouts/AppLayout/AppHeader.tsx +++ b/studio/components/layouts/AppLayout/AppHeader.tsx @@ -7,8 +7,8 @@ import HelpPopover from '../ProjectLayout/LayoutHeader/HelpPopover' import NotificationsPopover from '../ProjectLayout/LayoutHeader/NotificationsPopover' import ProjectDropdown from '../ProjectLayout/LayoutHeader/ProjectDropdown' import OrganizationDropdown from './OrganizationDropdown' +import SettingsButton from './SettingsButton' import UserSettingsDropdown from './UserSettingsDropdown' -import { Button, IconSettings } from 'ui' const AppHeader = () => { const router = useRouter() @@ -35,15 +35,7 @@ const AppHeader = () => { - - -
    diff --git a/studio/components/layouts/AppLayout/SettingsButton.tsx b/studio/components/layouts/AppLayout/SettingsButton.tsx new file mode 100644 index 00000000000..a30744a72b1 --- /dev/null +++ b/studio/components/layouts/AppLayout/SettingsButton.tsx @@ -0,0 +1,36 @@ +import Link from 'next/link' +import { Button, IconSettings } from 'ui' +import * as Tooltip from '@radix-ui/react-tooltip' + +const SettingsButton = ({ slug }: { slug: string }) => { + return ( + + + + + ) : ( diff --git a/studio/components/layouts/ProjectSettingsLayout/SettingsLayout.tsx b/studio/components/layouts/ProjectSettingsLayout/SettingsLayout.tsx index f49f876963d..f8bda210db8 100644 --- a/studio/components/layouts/ProjectSettingsLayout/SettingsLayout.tsx +++ b/studio/components/layouts/ProjectSettingsLayout/SettingsLayout.tsx @@ -1,24 +1,27 @@ -import { FC, ReactNode, useEffect } from 'react' +import { useFlag, useSelectedOrganization, useSelectedProject, useStore, withAuth } from 'hooks' import { observer } from 'mobx-react-lite' import { useRouter } from 'next/router' -import { useFlag, useSelectedOrganization, useSelectedProject, useStore, withAuth } from 'hooks' +import { PropsWithChildren, useEffect } from 'react' import { generateSettingsMenu } from './SettingsMenu.utils' +import NewSettingsLayout from '../SettingsLayout/SettingsLayout' -import ProjectLayout from '..' import ProductMenu from 'components/ui/ProductMenu' +import ProjectLayout from '..' +import { ProjectContextProvider } from '../ProjectLayout/ProjectContext' -interface Props { +interface SettingsLayoutProps { title?: string - children: ReactNode } -const SettingsLayout: FC = ({ title, children }) => { +const SettingsLayout = ({ title, children }: PropsWithChildren) => { + const router = useRouter() const { ui, meta } = useStore() const project = useSelectedProject() const organization = useSelectedOrganization() const isOrgBilling = !!organization?.subscription_id - const router = useRouter() + const navLayoutV2 = useFlag('navigationLayoutV2') + // billing pages live under /billing/invoices and /billing/subscription, etc // so we need to pass the [5]th part of the url to the menu const page = router.pathname.includes('billing') @@ -39,6 +42,14 @@ const SettingsLayout: FC = ({ title, children }) => { } }, [ui.selectedProjectRef]) + if (navLayoutV2) { + return ( + + {children} + + ) + } + return ( { + const router = useRouter() const organization = useSelectedOrganization() const isOrgBilling = !!organization?.subscription_id // [Joshen] Links need to be updated once we start implementing these const projectSettings = isOrgBilling ? [ - { label: 'General', pathname: `/org/[slug]/settings` }, - { label: 'Infrastructure', pathname: `/org/[slug]/settings` }, - { label: 'Add Ons', pathname: `/org/[slug]/settings` }, + { label: 'General', pathname: `/project/[ref]/settings/general` }, + { label: 'Infrastructure', pathname: `/project/[ref]/settings/infrastructure` }, + { label: 'Add Ons', pathname: `/project/[ref]/settings/addons` }, ] : [ - { label: 'General', pathname: `/org/[slug]/settings` }, - { label: 'Subscription', pathname: `/org/[slug]/settings` }, - { label: 'Usage', pathname: `/org/[slug]/settings` }, - { label: 'Invoices', pathname: `/org/[slug]/settings` }, + { label: 'General', pathname: `/project/[ref]/settings/general` }, + { label: 'Subscription', pathname: `/project/[ref]/settings/billing/subscription` }, + { label: 'Usage', pathname: `/project/[ref]/settings/billing/usage` }, + { label: 'Invoices', pathname: `/project/[ref]/settings/billing/invoices` }, ] return ( @@ -50,20 +51,17 @@ const ProjectSettingsMenuItem = ({ project }: ProjectSettingsMenuItemProps) => {
    - {projectSettings.map((link) => ( - - ))} + {projectSettings.map((link) => { + const href = link.pathname.replace('[ref]', project.ref) + return ( + + ) + })}
    diff --git a/studio/components/layouts/SettingsLayout/SettingsLayout.tsx b/studio/components/layouts/SettingsLayout/SettingsLayout.tsx index 2054f542438..6bb553df5df 100644 --- a/studio/components/layouts/SettingsLayout/SettingsLayout.tsx +++ b/studio/components/layouts/SettingsLayout/SettingsLayout.tsx @@ -5,7 +5,7 @@ import OrganizationSettingsMenu from './OrganizationSettingsMenu' import AccountSettingsMenu from './AccountSettingsMenu' const SettingsLayout = ({ children }: PropsWithChildren<{}>) => { - const { slug } = useParams() + const { ref, slug } = useParams() // [Joshen] Note to self - these could contribute to a Scaffold component @@ -13,7 +13,11 @@ const SettingsLayout = ({ children }: PropsWithChildren<{}>) => {
    - {slug !== undefined ? : } + {slug === undefined && ref === undefined ? ( + + ) : ( + + )}
    {children}
    From 3476c037efd07b0eae356ec9d966707d47d4665d Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 19 Jul 2023 14:27:04 +0800 Subject: [PATCH 18/61] Ensure org dropdown maintains URL --- .../layouts/AppLayout/OrganizationDropdown.tsx | 10 ++++++++-- .../ProjectLayout/LayoutHeader/ProjectDropdown.tsx | 5 +++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index 54171336afe..c100cb0d8a0 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -6,8 +6,10 @@ import { useFlag, useSelectedOrganization } from 'hooks' import { IS_PLATFORM } from 'lib/constants' import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' import ShimmeringLoader from 'components/ui/ShimmeringLoader' +import { useRouter } from 'next/router' const OrganizationDropdown = () => { + const router = useRouter() const { data: organizations, isLoading: isLoadingOrganizations } = useOrganizationsQuery() const selectedOrganization = useSelectedOrganization() const orgCreationV2 = useFlag('orgcreationv2') @@ -29,9 +31,13 @@ const OrganizationDropdown = () => { {organizations ?.sort((a, b) => a.name.localeCompare(b.name)) .map((x) => { - // [Joshen] Improvement: maintain URL if navigating in between org pages + const href = router.pathname.includes('[slug]') + ? router.pathname.replace('[slug]', x.slug) + : router.pathname.includes('[ref]/settings') + ? `/org/${x.slug}/general` + : `/org/${x.slug}` return ( - + {x.name} diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx index 87d25cebb01..232e27d29f5 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx @@ -80,9 +80,10 @@ const ProjectDropdown = ({ alt }: { alt?: boolean }) => { const { data: allOrganizations } = useOrganizationsQuery() const selectedOrganizationSlug = selectedOrganization?.slug + const isOrgBilling = !!selectedOrganization?.subscription_id const { data: subscription, isSuccess } = useProjectSubscriptionV2Query( { projectRef: selectedProject?.ref }, - { enabled: alt } + { enabled: alt && !isOrgBilling } ) if (isLoadingProjects && alt) { @@ -118,7 +119,7 @@ const ProjectDropdown = ({ alt }: { alt?: boolean }) => { } > {selectedProject?.name} - {alt && isSuccess && ( + {alt && isSuccess && !isOrgBilling && ( {subscription?.plan.name} From 6c397b52a0ac6617126fa71daa492224bca58be1 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 19 Jul 2023 14:47:48 +0800 Subject: [PATCH 19/61] Revert project settings changes and hide project settings in org settings --- .../ProjectSettingsLayout/SettingsLayout.tsx | 12 ------------ .../SettingsLayout/OrganizationSettingsMenu.tsx | 14 +++++--------- 2 files changed, 5 insertions(+), 21 deletions(-) diff --git a/studio/components/layouts/ProjectSettingsLayout/SettingsLayout.tsx b/studio/components/layouts/ProjectSettingsLayout/SettingsLayout.tsx index f8bda210db8..40b057b839b 100644 --- a/studio/components/layouts/ProjectSettingsLayout/SettingsLayout.tsx +++ b/studio/components/layouts/ProjectSettingsLayout/SettingsLayout.tsx @@ -3,11 +3,9 @@ import { observer } from 'mobx-react-lite' import { useRouter } from 'next/router' import { PropsWithChildren, useEffect } from 'react' import { generateSettingsMenu } from './SettingsMenu.utils' -import NewSettingsLayout from '../SettingsLayout/SettingsLayout' import ProductMenu from 'components/ui/ProductMenu' import ProjectLayout from '..' -import { ProjectContextProvider } from '../ProjectLayout/ProjectContext' interface SettingsLayoutProps { title?: string @@ -20,8 +18,6 @@ const SettingsLayout = ({ title, children }: PropsWithChildren - {children} - - ) - } - return ( { @@ -21,8 +17,8 @@ const OrganizationSettingsMenu = () => { { label: 'Audit Logs', pathname: `/org/[slug]/audit` }, ] - const { data: allProjects } = useProjectsQuery() - const projects = allProjects?.filter((project) => project.organization_id === organization?.id) + // const { data: allProjects } = useProjectsQuery() + // const projects = allProjects?.filter((project) => project.organization_id === organization?.id) return (
    @@ -38,8 +34,8 @@ const OrganizationSettingsMenu = () => { ))}
    - {/* [Joshen] We'll implement this in the second iteration, just to keep things small */} -
    + {/* [Joshen] Hiding below until we figure out a better UX for consolidating settings on projects */} + {/*

    Projects

    {projects?.map((project) => ( @@ -55,7 +51,7 @@ const OrganizationSettingsMenu = () => { -
    +
    */}
    ) } From f1d1249a4f46dbae4579e2c0af29279e03c52f8f Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 19 Jul 2023 16:10:21 +0800 Subject: [PATCH 20/61] Add redirect on /projects if nav layout v2 is on --- .../interfaces/App/RouteValidationWrapper.tsx | 11 ++++++++--- studio/hooks/misc/useSelectedOrganization.ts | 5 ++++- studio/lib/constants/index.ts | 4 ++++ studio/pages/projects.tsx | 19 +++++++++++++++++-- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/studio/components/interfaces/App/RouteValidationWrapper.tsx b/studio/components/interfaces/App/RouteValidationWrapper.tsx index 9b43d4c5a8d..182de527f6b 100644 --- a/studio/components/interfaces/App/RouteValidationWrapper.tsx +++ b/studio/components/interfaces/App/RouteValidationWrapper.tsx @@ -4,9 +4,10 @@ import { PropsWithChildren, useEffect } from 'react' import { useOrganizationsQuery } from 'data/organizations/organizations-query' import { useProjectsQuery } from 'data/projects/projects-query' -import { useStore } from 'hooks' +import { useFlag, useStore } from 'hooks' import useLatest from 'hooks/misc/useLatest' import { useParams } from 'common' +import { LOCAL_STORAGE_KEYS } from 'lib/constants' // Ideally these could all be within a _middleware when we use Next 12 const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { @@ -80,7 +81,9 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { // Save organization slug to local storage const organizations = organizationsRef.current ?? [] const organization = organizations.find((org) => org.slug === slug) - if (organization) localStorage.setItem('supabase-organization', organization.slug) + if (organization) { + localStorage.setItem(LOCAL_STORAGE_KEYS.RECENTLY_VISITED_ORGANIZATION, organization.slug) + } } }, [slug, orgsInitialized]) @@ -91,7 +94,9 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { const project = projects.find((project) => project.ref === ref) const organizationId = project?.organization_id const organization = organizations?.find((organization) => organization.id === organizationId) - if (organization) localStorage.setItem('supabase-organization', organization.slug) + if (organization) { + localStorage.setItem(LOCAL_STORAGE_KEYS.RECENTLY_VISITED_ORGANIZATION, organization.slug) + } } }, [ref, projectsInitialized]) diff --git a/studio/hooks/misc/useSelectedOrganization.ts b/studio/hooks/misc/useSelectedOrganization.ts index 282e9daf081..e10acce43e6 100644 --- a/studio/hooks/misc/useSelectedOrganization.ts +++ b/studio/hooks/misc/useSelectedOrganization.ts @@ -3,13 +3,16 @@ import { useOrganizationsQuery } from 'data/organizations/organizations-query' import { useMemo } from 'react' import { useSelectedProject } from './useSelectedProject' +import { LOCAL_STORAGE_KEYS } from 'lib/constants' export function useSelectedOrganization({ enabled = true } = {}) { const { slug } = useParams() const { data } = useOrganizationsQuery({ enabled }) const selectedProject = useSelectedProject() const localStorageSlug = - typeof window !== 'undefined' ? localStorage.getItem('supabase-organization') : undefined + typeof window !== 'undefined' + ? localStorage.getItem(LOCAL_STORAGE_KEYS.RECENTLY_VISITED_ORGANIZATION) + : undefined return useMemo(() => { return data?.find((org) => { diff --git a/studio/lib/constants/index.ts b/studio/lib/constants/index.ts index 24743c4904f..3e3b66f24b2 100644 --- a/studio/lib/constants/index.ts +++ b/studio/lib/constants/index.ts @@ -85,3 +85,7 @@ export const STRIPE_PUBLIC_KEY = process.env.NEXT_PUBLIC_STRIPE_PUBLIC_KEY || 'pk_test_XVwg5IZH3I9Gti98hZw6KRzd00v5858heG' export const USAGE_APPROACHING_THRESHOLD = 0.75 + +export const LOCAL_STORAGE_KEYS = { + RECENTLY_VISITED_ORGANIZATION: 'supabase-organization', +} diff --git a/studio/pages/projects.tsx b/studio/pages/projects.tsx index 8fe0df5780d..e36beadb3d8 100644 --- a/studio/pages/projects.tsx +++ b/studio/pages/projects.tsx @@ -5,11 +5,15 @@ import AlertError from 'components/ui/AlertError' import Connecting from 'components/ui/Loading/Loading' import { useOrganizationsQuery } from 'data/organizations/organizations-query' import { useAutoProjectsPrefetch } from 'data/projects/projects-query' -import { IS_PLATFORM } from 'lib/constants' +import { useFlag } from 'hooks' +import { IS_PLATFORM, LOCAL_STORAGE_KEYS } from 'lib/constants' import { useProfile } from 'lib/profile' +import { useRouter } from 'next/router' +import { useEffect } from 'react' import { NextPageWithLayout } from 'types' const ProjectsPage: NextPageWithLayout = () => { + const router = useRouter() const { data: organizations, isLoading: isOrganizationLoading, @@ -19,8 +23,19 @@ const ProjectsPage: NextPageWithLayout = () => { useAutoProjectsPrefetch() const { isLoading: isProfileLoading } = useProfile() - const isLoading = isOrganizationLoading || isProfileLoading + const navLayoutV2 = useFlag('navigationLayoutV2') + + useEffect(() => { + if (navLayoutV2 && isSuccess && typeof window !== 'undefined') { + const localStorageSlug = + typeof window !== 'undefined' + ? localStorage.getItem(LOCAL_STORAGE_KEYS.RECENTLY_VISITED_ORGANIZATION) + : undefined + if (localStorageSlug !== undefined) router.push(`/org/${localStorageSlug}`) + else router.push(`/org/${organizations[0].slug}`) + } + }, [navLayoutV2, isSuccess, typeof window]) return ( <> From 2738fbbd3f8746c9b1dd48d39da68e5f3ebb62a4 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 19 Jul 2023 16:14:38 +0800 Subject: [PATCH 21/61] Update new org link --- .../layouts/AppLayout/OrganizationDropdown.tsx | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index c100cb0d8a0..80937af89bf 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -45,18 +45,11 @@ const OrganizationDropdown = () => { ) })} - + }>New organization - {orgCreationV2 && ( - - - }>New organization V2 - - - )} } > From fab17d5d27d89cf18f9e40629d73fde89a43b507 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 19 Jul 2023 16:20:49 +0800 Subject: [PATCH 22/61] Fix --- studio/pages/projects.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/pages/projects.tsx b/studio/pages/projects.tsx index e36beadb3d8..a004508fd74 100644 --- a/studio/pages/projects.tsx +++ b/studio/pages/projects.tsx @@ -32,7 +32,7 @@ const ProjectsPage: NextPageWithLayout = () => { typeof window !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEYS.RECENTLY_VISITED_ORGANIZATION) : undefined - if (localStorageSlug !== undefined) router.push(`/org/${localStorageSlug}`) + if (localStorageSlug) router.push(`/org/${localStorageSlug}`) else router.push(`/org/${organizations[0].slug}`) } }, [navLayoutV2, isSuccess, typeof window]) From 1edf879f38c804a84a0597c77ccb686955ac4815 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 19 Jul 2023 16:37:20 +0800 Subject: [PATCH 23/61] Fix user icon in UserSettingsDropdown --- studio/components/layouts/AppLayout/UserSettingsDropdown.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx index 64b4a42bc8c..b17cb64175f 100644 --- a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx +++ b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx @@ -1,6 +1,6 @@ import Link from 'next/link' import { useRouter } from 'next/router' -import { Dropdown, IconLogOut, Listbox, useCommandMenu } from 'ui' +import { Dropdown, IconLogOut, IconUser, Listbox, useCommandMenu } from 'ui' import { useSignOut } from 'lib/auth' import { useProfile } from 'lib/profile' @@ -90,7 +90,7 @@ const UserSettingsDropdown = () => { ]} >
    - {profile?.first_name[0]} + {profile?.first_name ? profile?.first_name?.[0] : }
    ) From 46c1e676aca622e0231236f2e3a3dd8f73537180 Mon Sep 17 00:00:00 2001 From: Stojan Dimitrovski Date: Thu, 20 Jul 2023 19:48:16 +0200 Subject: [PATCH 24/61] feat: use access token from ram instead of from `auth.getSession()` --- studio/lib/common/fetch/base.ts | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/studio/lib/common/fetch/base.ts b/studio/lib/common/fetch/base.ts index e7cdfdeceb1..1e338f28ca1 100644 --- a/studio/lib/common/fetch/base.ts +++ b/studio/lib/common/fetch/base.ts @@ -1,6 +1,7 @@ import { auth } from 'lib/gotrue' import { isUndefined } from 'lodash' import { SupaResponse } from 'types/base' +import { Session } from '@supabase/gotrue-js' export function handleError(e: any, requestId: string): SupaResponse { const message = e?.message ? `An error has occurred: ${e.message}` : 'An error has occurred' @@ -86,15 +87,32 @@ export async function handleResponseError( } } +let currentSession: Session | null = null + +auth.onAuthStateChange((event, session) => { + currentSession = session +}) + export async function getAccessToken() { // ignore if server-side if (typeof window === 'undefined') return '' - const { - data: { session }, - } = await auth.getSession() + const aboutToExpire = currentSession?.expires_at + ? currentSession.expires_at - Math.ceil(Date.now() / 1000) < 60 + : false - return session?.access_token + if (!currentSession || aboutToExpire) { + const { + data: { session }, + } = await auth.getSession() + + currentSession = session + } + + // using memory version as gotrue-js can be a bit slow when using + // #getSession() as it has to read directly from local storage + + return currentSession?.access_token } export async function constructHeaders(requestId: string, optionHeaders?: { [prop: string]: any }) { From 415a8b768ec016a600a343c400883fd81b518185 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 21 Jul 2023 06:39:22 +0800 Subject: [PATCH 25/61] Temp --- studio/components/layouts/AppLayout/OrganizationDropdownV2.tsx | 1 + 1 file changed, 1 insertion(+) create mode 100644 studio/components/layouts/AppLayout/OrganizationDropdownV2.tsx diff --git a/studio/components/layouts/AppLayout/OrganizationDropdownV2.tsx b/studio/components/layouts/AppLayout/OrganizationDropdownV2.tsx new file mode 100644 index 00000000000..005b571fbac --- /dev/null +++ b/studio/components/layouts/AppLayout/OrganizationDropdownV2.tsx @@ -0,0 +1 @@ +// [Joshen] TODO use Combobox From c22cbc00410c58ea2795314dea59cdaa036bf696 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 21 Jul 2023 15:01:35 +0800 Subject: [PATCH 26/61] Update AppHeader org and project selections to use combobox --- .../layouts/AppLayout/AppHeader.tsx | 2 +- .../AppLayout/OrganizationDropdown.tsx | 140 +++++++++------ .../AppLayout/OrganizationDropdownV2.tsx | 1 - .../layouts/AppLayout/ProjectDropdown.tsx | 165 ++++++++++++++++++ 4 files changed, 252 insertions(+), 56 deletions(-) delete mode 100644 studio/components/layouts/AppLayout/OrganizationDropdownV2.tsx create mode 100644 studio/components/layouts/AppLayout/ProjectDropdown.tsx diff --git a/studio/components/layouts/AppLayout/AppHeader.tsx b/studio/components/layouts/AppLayout/AppHeader.tsx index f25ffe0dff4..3aa96a11853 100644 --- a/studio/components/layouts/AppLayout/AppHeader.tsx +++ b/studio/components/layouts/AppLayout/AppHeader.tsx @@ -5,7 +5,7 @@ import { useSelectedOrganization, useSelectedProject } from 'hooks' import FeedbackDropdown from '../ProjectLayout/LayoutHeader/FeedbackDropdown' import HelpPopover from '../ProjectLayout/LayoutHeader/HelpPopover' import NotificationsPopover from '../ProjectLayout/LayoutHeader/NotificationsPopover' -import ProjectDropdown from '../ProjectLayout/LayoutHeader/ProjectDropdown' +import ProjectDropdown from './ProjectDropdown' import OrganizationDropdown from './OrganizationDropdown' import SettingsButton from './SettingsButton' import UserSettingsDropdown from './UserSettingsDropdown' diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index 80937af89bf..210df04dcb8 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -1,74 +1,106 @@ -import Link from 'next/link' -import { Badge, Button, Dropdown, IconCode, IconPlus } from 'ui' +import { useRouter } from 'next/router' +import { useState } from 'react' +import { + Badge, + Button, + CommandEmpty_Shadcn_, + CommandGroup_Shadcn_, + CommandInput_Shadcn_, + CommandItem_Shadcn_, + CommandList_Shadcn_, + Command_Shadcn_, + IconCode, + IconPlus, + Popover, + PopoverContent_Shadcn_, + PopoverTrigger_Shadcn_, + Popover_Shadcn_, +} from 'ui' import { useOrganizationsQuery } from 'data/organizations/organizations-query' -import { useFlag, useSelectedOrganization } from 'hooks' -import { IS_PLATFORM } from 'lib/constants' import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' +import { useFlag, useSelectedOrganization } from 'hooks' import ShimmeringLoader from 'components/ui/ShimmeringLoader' -import { useRouter } from 'next/router' +import Link from 'next/link' const OrganizationDropdown = () => { const router = useRouter() - const { data: organizations, isLoading: isLoadingOrganizations } = useOrganizationsQuery() - const selectedOrganization = useSelectedOrganization() const orgCreationV2 = useFlag('orgcreationv2') + const selectedOrganization = useSelectedOrganization() + const { data: organizations, isLoading: isLoadingOrganizations } = useOrganizationsQuery() const slug = selectedOrganization?.slug const orgName = selectedOrganization?.name const { data, isSuccess } = useOrgSubscriptionQuery({ orgSlug: slug }) + const [open, setOpen] = useState(false) + if (isLoadingOrganizations) { return } - return IS_PLATFORM ? ( - - {organizations - ?.sort((a, b) => a.name.localeCompare(b.name)) - .map((x) => { - const href = router.pathname.includes('[slug]') - ? router.pathname.replace('[slug]', x.slug) - : router.pathname.includes('[ref]/settings') - ? `/org/${x.slug}/general` - : `/org/${x.slug}` - return ( - - - {x.name} - - - ) - })} - - - - }>New organization - - - - } - > - - - ) : ( - + return ( +
    + + +

    {orgName}

    + {isSuccess && {data?.plan.name}} +
    + + + + +
    ) } diff --git a/studio/components/layouts/AppLayout/OrganizationDropdownV2.tsx b/studio/components/layouts/AppLayout/OrganizationDropdownV2.tsx deleted file mode 100644 index 005b571fbac..00000000000 --- a/studio/components/layouts/AppLayout/OrganizationDropdownV2.tsx +++ /dev/null @@ -1 +0,0 @@ -// [Joshen] TODO use Combobox diff --git a/studio/components/layouts/AppLayout/ProjectDropdown.tsx b/studio/components/layouts/AppLayout/ProjectDropdown.tsx new file mode 100644 index 00000000000..c666c6565dd --- /dev/null +++ b/studio/components/layouts/AppLayout/ProjectDropdown.tsx @@ -0,0 +1,165 @@ +import Link from 'next/link' +import { useRouter } from 'next/router' +import { ParsedUrlQuery } from 'querystring' +import { useState } from 'react' +import { + Badge, + Button, + CommandEmpty_Shadcn_, + CommandGroup_Shadcn_, + CommandInput_Shadcn_, + CommandItem_Shadcn_, + CommandList_Shadcn_, + Command_Shadcn_, + IconCode, + IconPlus, + PopoverContent_Shadcn_, + PopoverTrigger_Shadcn_, + Popover_Shadcn_, +} from 'ui' + +import ShimmeringLoader from 'components/ui/ShimmeringLoader' +import { useProjectsQuery } from 'data/projects/projects-query' +import { useProjectSubscriptionV2Query } from 'data/subscriptions/project-subscription-v2-query' +import { useSelectedOrganization, useSelectedProject } from 'hooks' +import { IS_PLATFORM, PROJECT_STATUS } from 'lib/constants' +import { Organization, Project } from 'types' + +// [Fran] the idea is to let users change projects without losing the current page, +// but at the same time we need to redirect correctly between urls that might be +// unique to a project e.g. '/project/projectRef/editor/tableId' +// Right now, I'm gonna assume that any router query after the projectId, +// is a unique project id/marker so we'll redirect the user to the +// highest common route with just projectRef in the router queries. + +export const sanitizeRoute = (route: string, routerQueries: ParsedUrlQuery) => { + const queryArray = Object.entries(routerQueries) + + if (queryArray.length > 1) { + // [Joshen] Ideally we shouldn't use hard coded numbers, but temp workaround + // for storage bucket route since its longer + const isStorageBucketRoute = 'bucketId' in routerQueries + return route + .split('/') + .slice(0, isStorageBucketRoute ? 5 : 4) + .join('/') + } else { + return route + } +} + +const ProjectLink = ({ + project, + organization, + setOpen, +}: { + project: Project + organization?: Organization + setOpen: (value: boolean) => void +}) => { + const router = useRouter() + const sanitizedRoute = sanitizeRoute(router.route, router.query) + const isOrgBilling = !!organization?.subscription_id + + // [Joshen] Temp while we're interim between v1 and v2 billing + let href = sanitizedRoute?.replace('[ref]', project.ref) ?? `/project/${project.ref}` + if (href.endsWith('settings/addons') && !isOrgBilling) { + href = href.replace('settings/addons', 'settings/billing/subscription') + } else if (href.endsWith('settings/billing/subscription') && isOrgBilling) { + href = href.replace('settings/billing/subscription', 'settings/addons') + } else if (href.endsWith('settings/infrastructure') && !isOrgBilling) { + href = href.replace('settings/infrastructure', 'settings/billing/usage') + } else if (href.endsWith('settings/billing/usage') && !isOrgBilling) { + href = href.replace('settings/billing/usage', 'settings/infrastructure') + } + + return ( + setOpen(false)} + > + + {project.name} + + + ) +} + +const ProjectDropdown = ({ alt }: { alt?: boolean }) => { + const selectedProject = useSelectedProject() + const selectedOrganization = useSelectedOrganization() + const { data: allProjects, isLoading: isLoadingProjects } = useProjectsQuery() + + const isOrgBilling = !!selectedOrganization?.subscription_id + const { data: subscription, isSuccess } = useProjectSubscriptionV2Query( + { projectRef: selectedProject?.ref }, + { enabled: alt && !isOrgBilling } + ) + const projects = allProjects + ?.filter((x) => x.status !== PROJECT_STATUS.INACTIVE) + .filter((x) => x.organization_id === selectedOrganization?.id) + .sort((a, b) => a.name.localeCompare(b.name)) + + const [open, setOpen] = useState(false) + + if (isLoadingProjects && alt) { + return + } + + return IS_PLATFORM ? ( +
    + + +

    {selectedProject?.name}

    + {isSuccess && !isOrgBilling && {subscription?.plan.name}} +
    + + + + +
    + ) : ( + + ) +} + +export default ProjectDropdown From e46bb132f3026745554380de233e0cff5a090982 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 21 Jul 2023 15:46:51 +0800 Subject: [PATCH 27/61] Optimize UI when redirecting from /projects --- .../layouts/AccountLayout/AccountLayout.tsx | 9 ++++++-- .../layouts/AccountLayout/WithSidebar.tsx | 15 +++++++------ .../layouts/AppLayout/AppLayout.tsx | 6 +++-- .../AppLayout/OrganizationDropdown.tsx | 5 ++--- .../layouts/SettingsLayout/SettingsLayout.tsx | 20 +++++++++-------- studio/pages/projects.tsx | 22 ++++++++++--------- 6 files changed, 44 insertions(+), 33 deletions(-) diff --git a/studio/components/layouts/AccountLayout/AccountLayout.tsx b/studio/components/layouts/AccountLayout/AccountLayout.tsx index ae83fbece97..7efdbaa5e11 100644 --- a/studio/components/layouts/AccountLayout/AccountLayout.tsx +++ b/studio/components/layouts/AccountLayout/AccountLayout.tsx @@ -127,7 +127,7 @@ const AccountLayout = ({ children, title, breadcrumbs }: PropsWithChildren{children} } @@ -142,7 +142,12 @@ const AccountLayout = ({ children, title, breadcrumbs }: PropsWithChildren - + {children} diff --git a/studio/components/layouts/AccountLayout/WithSidebar.tsx b/studio/components/layouts/AccountLayout/WithSidebar.tsx index 4413ab6a3cb..cdf48e39a65 100644 --- a/studio/components/layouts/AccountLayout/WithSidebar.tsx +++ b/studio/components/layouts/AccountLayout/WithSidebar.tsx @@ -1,12 +1,12 @@ +import { useFlag } from 'hooks' +import { isUndefined } from 'lodash' import Link from 'next/link' import { FC, ReactNode } from 'react' -import { isUndefined } from 'lodash' -import { Menu, IconArrowUpRight, Badge, IconLogOut } from 'ui' -import { useFlag } from 'hooks' +import { Badge, IconArrowUpRight, IconLogOut, Menu } from 'ui' import LayoutHeader from '../ProjectLayout/LayoutHeader' import { SidebarLink, SidebarSection } from './AccountLayout.types' -interface Props { +interface WithSidebarProps { title: string breadcrumbs: any[] sections: SidebarSection[] @@ -27,7 +27,7 @@ The information hierarchy for WithSidebar is: SidebarItem SidebarLink */ -const WithSidebar: FC = ({ +const WithSidebar = ({ title, header, breadcrumbs = [], @@ -37,9 +37,10 @@ const WithSidebar: FC = ({ subitemsParentKey, hideSidebar = false, customSidebarContent, -}) => { +}: WithSidebarProps) => { const noContent = !sections && !customSidebarContent const ongoingIncident = useFlag('ongoingIncident') + const navLayoutV2 = useFlag('navigationLayoutV2') const maxHeight = ongoingIncident ? 'calc(100vh - 44px)' : '100vh' return ( @@ -89,7 +90,7 @@ const WithSidebar: FC = ({
    )}
    - + {!navLayoutV2 && }
    {children}
    diff --git a/studio/components/layouts/AppLayout/AppLayout.tsx b/studio/components/layouts/AppLayout/AppLayout.tsx index 7cefb9a6453..5abf9b3a826 100644 --- a/studio/components/layouts/AppLayout/AppLayout.tsx +++ b/studio/components/layouts/AppLayout/AppLayout.tsx @@ -6,7 +6,9 @@ import { useFlag } from 'hooks' const AppLayout = ({ children }: PropsWithChildren<{}>) => { const navLayoutV2 = useFlag('navigationLayoutV2') const ongoingIncident = useFlag('ongoingIncident') + const appHeaderHeight = navLayoutV2 ? 49 : 0 + const incidentBannerHeight = 44 return (
    @@ -14,10 +16,10 @@ const AppLayout = ({ children }: PropsWithChildren<{}>) => {
    diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index 210df04dcb8..d8cfe64cc6d 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -1,3 +1,4 @@ +import Link from 'next/link' import { useRouter } from 'next/router' import { useState } from 'react' import { @@ -11,17 +12,15 @@ import { Command_Shadcn_, IconCode, IconPlus, - Popover, PopoverContent_Shadcn_, PopoverTrigger_Shadcn_, Popover_Shadcn_, } from 'ui' +import ShimmeringLoader from 'components/ui/ShimmeringLoader' import { useOrganizationsQuery } from 'data/organizations/organizations-query' import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' import { useFlag, useSelectedOrganization } from 'hooks' -import ShimmeringLoader from 'components/ui/ShimmeringLoader' -import Link from 'next/link' const OrganizationDropdown = () => { const router = useRouter() diff --git a/studio/components/layouts/SettingsLayout/SettingsLayout.tsx b/studio/components/layouts/SettingsLayout/SettingsLayout.tsx index 6bb553df5df..81ec13f6e89 100644 --- a/studio/components/layouts/SettingsLayout/SettingsLayout.tsx +++ b/studio/components/layouts/SettingsLayout/SettingsLayout.tsx @@ -3,22 +3,24 @@ import AppLayout from '../AppLayout/AppLayout' import { useParams } from 'common' import OrganizationSettingsMenu from './OrganizationSettingsMenu' import AccountSettingsMenu from './AccountSettingsMenu' +import { useRouter } from 'next/router' const SettingsLayout = ({ children }: PropsWithChildren<{}>) => { + const router = useRouter() const { ref, slug } = useParams() - // [Joshen] Note to self - these could contribute to a Scaffold component - return (
    -
    - {slug === undefined && ref === undefined ? ( - - ) : ( - - )} -
    + {router.pathname !== '/projects' && ( +
    + {slug === undefined && ref === undefined ? ( + + ) : ( + + )} +
    + )}
    {children}
    diff --git a/studio/pages/projects.tsx b/studio/pages/projects.tsx index a004508fd74..ee0c4af7441 100644 --- a/studio/pages/projects.tsx +++ b/studio/pages/projects.tsx @@ -25,33 +25,35 @@ const ProjectsPage: NextPageWithLayout = () => { const { isLoading: isProfileLoading } = useProfile() const isLoading = isOrganizationLoading || isProfileLoading const navLayoutV2 = useFlag('navigationLayoutV2') + const hasWindowLoaded = typeof window !== 'undefined' useEffect(() => { - if (navLayoutV2 && isSuccess && typeof window !== 'undefined') { - const localStorageSlug = - typeof window !== 'undefined' - ? localStorage.getItem(LOCAL_STORAGE_KEYS.RECENTLY_VISITED_ORGANIZATION) - : undefined + if (navLayoutV2 && isSuccess && hasWindowLoaded) { + const localStorageSlug = localStorage.getItem( + LOCAL_STORAGE_KEYS.RECENTLY_VISITED_ORGANIZATION + ) if (localStorageSlug) router.push(`/org/${localStorageSlug}`) else router.push(`/org/${organizations[0].slug}`) } - }, [navLayoutV2, isSuccess, typeof window]) + }, [navLayoutV2, isSuccess, hasWindowLoaded]) return ( <> - {isLoading && ( -
    + {navLayoutV2 && isLoading && ( +
    )} {isError && ( -
    +
    )} - {isSuccess && ( + {!navLayoutV2 && isSuccess && (
    {IS_PLATFORM && (
    From 6ce4200486f7235f3c4fb234428dcd650efc52e5 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 21 Jul 2023 16:07:19 +0800 Subject: [PATCH 28/61] Add some slug validations --- .../interfaces/App/RouteValidationWrapper.tsx | 5 ++- .../AppLayout/OrganizationDropdown.tsx | 44 +++++++++---------- .../data/organizations/organizations-query.ts | 1 - studio/pages/org/[slug]/index.tsx | 1 + studio/pages/projects.tsx | 5 ++- 5 files changed, 29 insertions(+), 27 deletions(-) diff --git a/studio/components/interfaces/App/RouteValidationWrapper.tsx b/studio/components/interfaces/App/RouteValidationWrapper.tsx index 182de527f6b..9fd0b0c8cbf 100644 --- a/studio/components/interfaces/App/RouteValidationWrapper.tsx +++ b/studio/components/interfaces/App/RouteValidationWrapper.tsx @@ -14,6 +14,7 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { const { ui } = useStore() const router = useRouter() const { ref, slug } = useParams() + const navLayoutV2 = useFlag('navigationLayoutV2') /** * Array of urls/routes that should be ignored @@ -50,7 +51,7 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { if (!isValidOrg) { ui.setNotification({ category: 'error', message: 'This organization does not exist' }) - router.push('/projects') + router.push(navLayoutV2 ? `/org/${organizations[0].slug}` : '/projects') return } } @@ -70,7 +71,7 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { if (!isValidProject) { ui.setNotification({ category: 'error', message: 'This project does not exist' }) - router.push('/projects') + router.push(navLayoutV2 ? `/org/${organizations?.[0].slug}` : '/projects') return } } diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index d8cfe64cc6d..b05643e8602 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -61,29 +61,27 @@ const OrganizationDropdown = () => { No results found. - {organizations - ?.sort((a, b) => a.name.localeCompare(b.name)) - .map((org) => { - const href = router.pathname.includes('[slug]') - ? router.pathname.replace('[slug]', org.slug) - : router.pathname.includes('[ref]/settings') - ? `/org/${org.slug}/general` - : `/org/${org.slug}` - return ( - { - setOpen(false) - }} - > - - {org.name} - - - ) - })} + {organizations?.map((org) => { + const href = router.pathname.includes('[slug]') + ? router.pathname.replace('[slug]', org.slug) + : router.pathname.includes('[ref]/settings') + ? `/org/${org.slug}/general` + : `/org/${org.slug}` + return ( + { + setOpen(false) + }} + > + + {org.name} + + + ) + })} setOpen(false)}> diff --git a/studio/data/organizations/organizations-query.ts b/studio/data/organizations/organizations-query.ts index 98a2795b55b..dab843414ad 100644 --- a/studio/data/organizations/organizations-query.ts +++ b/studio/data/organizations/organizations-query.ts @@ -10,7 +10,6 @@ export async function getOrganizations(signal?: AbortSignal): Promise a.name.localeCompare(b.name)) - return sorted } diff --git a/studio/pages/org/[slug]/index.tsx b/studio/pages/org/[slug]/index.tsx index ba4fa711073..b1e1245555c 100644 --- a/studio/pages/org/[slug]/index.tsx +++ b/studio/pages/org/[slug]/index.tsx @@ -18,6 +18,7 @@ const ProjectsPage: NextPageWithLayout = () => { isError: isErrorProjects, isSuccess: isSuccessProjects, } = useProjectsQuery() + const organization = useSelectedOrganization() const projects = allProjects?.filter((project) => project.organization_id === organization?.id) diff --git a/studio/pages/projects.tsx b/studio/pages/projects.tsx index ee0c4af7441..5b26b3ccdb1 100644 --- a/studio/pages/projects.tsx +++ b/studio/pages/projects.tsx @@ -32,7 +32,10 @@ const ProjectsPage: NextPageWithLayout = () => { const localStorageSlug = localStorage.getItem( LOCAL_STORAGE_KEYS.RECENTLY_VISITED_ORGANIZATION ) - if (localStorageSlug) router.push(`/org/${localStorageSlug}`) + const verifiedSlug = organizations.some((org) => org.slug === localStorageSlug) + + if (organizations.length === 0) router.push('/new') + else if (localStorageSlug && verifiedSlug) router.push(`/org/${localStorageSlug}`) else router.push(`/org/${organizations[0].slug}`) } }, [navLayoutV2, isSuccess, hasWindowLoaded]) From 9469b236a548d367e9abd685210dc2aeb8ef1b39 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 21 Jul 2023 16:43:47 +0800 Subject: [PATCH 29/61] Update UserSettingsDropdown to use shadcn --- .../AppLayout/UserSettingsDropdown.tsx | 197 +++++++++++------- 1 file changed, 122 insertions(+), 75 deletions(-) diff --git a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx index b17cb64175f..59b652b2b7e 100644 --- a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx +++ b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx @@ -1,11 +1,32 @@ import Link from 'next/link' import { useRouter } from 'next/router' -import { Dropdown, IconLogOut, IconUser, Listbox, useCommandMenu } from 'ui' +import { + Button, + CommandGroup_Shadcn_, + CommandItem_Shadcn_, + CommandList_Shadcn_, + Command_Shadcn_, + DropdownMenuContent_Shadcn_, + DropdownMenuGroup_Shadcn_, + DropdownMenuItem_Shadcn_, + DropdownMenuSeparator_Shadcn_, + DropdownMenuShortcut_Shadcn_, + DropdownMenuTrigger_Shadcn_, + DropdownMenu_Shadcn_, + IconCheck, + IconMoon, + IconSun, + IconUser, + PopoverContent_Shadcn_, + PopoverTrigger_Shadcn_, + Popover_Shadcn_, + useCommandMenu, +} from 'ui' +import { useTheme } from 'common' import { useSignOut } from 'lib/auth' import { useProfile } from 'lib/profile' -import { useTheme } from 'common' -import KeyMap from 'components/to-be-cleaned/KeyMap' +import { useState } from 'react' const UserSettingsDropdown = () => { const signOut = useSignOut() @@ -13,6 +34,7 @@ const UserSettingsDropdown = () => { const { profile } = useProfile() const { setIsOpen } = useCommandMenu() const { isDarkMode, toggleTheme } = useTheme() + const [openTheme, setOpenTheme] = useState(false) const onClickLogout = async () => { await signOut() @@ -20,79 +42,104 @@ const UserSettingsDropdown = () => { } return ( - -

    - {profile?.first_name} {profile?.last_name} -

    -

    {profile?.primary_email}

    -
    , - , - - - Preferences - - , - - - Access tokens - - , - , - setIsOpen(true)}> -
    -

    Quick search

    -
    - -
    -
    -
    , - // - //
    - //

    Theme

    - // toggleTheme(e === 'dark')} - // // className="w-[200px]" - // > - // - // Dark - // - // - // Light - // - // - //
    - //
    , - , - Theme, - toggleTheme(e === 'dark')} - > - {/* [Joshen] Removing system default for now, needs to be supported in useTheme from common packages */} - {/* System default */} - Dark - Light - , - , - onClickLogout()}> -
    -

    Logout

    - -
    -
    , - ]} + { + if (!open) setOpenTheme(false) + }} > -
    - {profile?.first_name ? profile?.first_name?.[0] : } -
    - + +
    + {profile?.first_name ? profile?.first_name?.[0] : } +
    +
    + + +
    +

    + {profile?.first_name} {profile?.last_name} +

    +

    {profile?.primary_email}

    +
    + + + + + Preferences + + + + + Access tokens + + + + setIsOpen(true)}> + Quick search + ⌘K + + + event.preventDefault()}> +
    +

    Theme

    + + + + + + + + + { + setOpenTheme(false) + toggleTheme(true) + }} + > +
    + Dark + {isDarkMode ? ( + + ) : null} +
    +
    + { + setOpenTheme(false) + toggleTheme(false) + }} + > +
    + Light + {!isDarkMode ? ( + + ) : null} +
    +
    +
    +
    +
    +
    +
    +
    +
    + + onClickLogout()}> + Log out + +
    +
    +
    ) } From 686213511ce667609f8d983b810a32285e1975ef Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 24 Jul 2023 14:34:40 +0800 Subject: [PATCH 30/61] Address comments --- .../layouts/AppLayout/AppHeader.tsx | 4 +- .../AppLayout/OrganizationDropdown.tsx | 34 +++++-- .../layouts/AppLayout/ProjectDropdown.tsx | 28 ++++-- .../AppLayout/UserSettingsDropdown.tsx | 99 +++++-------------- 4 files changed, 73 insertions(+), 92 deletions(-) diff --git a/studio/components/layouts/AppLayout/AppHeader.tsx b/studio/components/layouts/AppLayout/AppHeader.tsx index 3aa96a11853..1681d108206 100644 --- a/studio/components/layouts/AppLayout/AppHeader.tsx +++ b/studio/components/layouts/AppLayout/AppHeader.tsx @@ -18,7 +18,7 @@ const AppHeader = () => { return (
    - + { - {project !== undefined && } + {project !== undefined && }
    diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index b05643e8602..c84da6e9f1a 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -1,6 +1,6 @@ import Link from 'next/link' import { useRouter } from 'next/router' -import { useState } from 'react' +import { useRef, useState } from 'react' import { Badge, Button, @@ -10,6 +10,7 @@ import { CommandItem_Shadcn_, CommandList_Shadcn_, Command_Shadcn_, + IconCheck, IconCode, IconPlus, PopoverContent_Shadcn_, @@ -25,14 +26,16 @@ import { useFlag, useSelectedOrganization } from 'hooks' const OrganizationDropdown = () => { const router = useRouter() const orgCreationV2 = useFlag('orgcreationv2') + const orgNameRef = useRef(null) const selectedOrganization = useSelectedOrganization() const { data: organizations, isLoading: isLoadingOrganizations } = useOrganizationsQuery() const slug = selectedOrganization?.slug const orgName = selectedOrganization?.name - const { data, isSuccess } = useOrgSubscriptionQuery({ orgSlug: slug }) + const { data: subscription, isSuccess } = useOrgSubscriptionQuery({ orgSlug: slug }) const [open, setOpen] = useState(false) + const popoverOffset = (orgNameRef.current?.offsetWidth ?? 0) + 12 if (isLoadingOrganizations) { return @@ -40,10 +43,10 @@ const OrganizationDropdown = () => { return (
    - - + +

    {orgName}

    - {isSuccess && {data?.plan.name}} + {isSuccess && {subscription?.plan.name}}
    @@ -55,7 +58,12 @@ const OrganizationDropdown = () => { icon={} /> - + @@ -74,17 +82,27 @@ const OrganizationDropdown = () => { className="cursor-pointer" onSelect={() => { setOpen(false) + router.push(href) }} > - {org.name} + + {org.name} + {org.slug === slug && } + ) })} - setOpen(false)}> + { + setOpen(false) + router.push(orgCreationV2 ? `/new-with-subscription` : `/new`) + }} + > diff --git a/studio/components/layouts/AppLayout/ProjectDropdown.tsx b/studio/components/layouts/AppLayout/ProjectDropdown.tsx index c666c6565dd..73c0440d8ec 100644 --- a/studio/components/layouts/AppLayout/ProjectDropdown.tsx +++ b/studio/components/layouts/AppLayout/ProjectDropdown.tsx @@ -1,7 +1,7 @@ import Link from 'next/link' import { useRouter } from 'next/router' import { ParsedUrlQuery } from 'querystring' -import { useState } from 'react' +import { useRef, useState } from 'react' import { Badge, Button, @@ -87,15 +87,17 @@ const ProjectLink = ({ ) } -const ProjectDropdown = ({ alt }: { alt?: boolean }) => { +const ProjectDropdown = () => { + const router = useRouter() const selectedProject = useSelectedProject() const selectedOrganization = useSelectedOrganization() + const projectNameRef = useRef(null) const { data: allProjects, isLoading: isLoadingProjects } = useProjectsQuery() const isOrgBilling = !!selectedOrganization?.subscription_id const { data: subscription, isSuccess } = useProjectSubscriptionV2Query( { projectRef: selectedProject?.ref }, - { enabled: alt && !isOrgBilling } + { enabled: !isOrgBilling } ) const projects = allProjects ?.filter((x) => x.status !== PROJECT_STATUS.INACTIVE) @@ -103,15 +105,16 @@ const ProjectDropdown = ({ alt }: { alt?: boolean }) => { .sort((a, b) => a.name.localeCompare(b.name)) const [open, setOpen] = useState(false) + const popoverOffset = (projectNameRef.current?.offsetWidth ?? 0) + 12 - if (isLoadingProjects && alt) { + if (isLoadingProjects) { return } return IS_PLATFORM ? (
    - +

    {selectedProject?.name}

    {isSuccess && !isOrgBilling && {subscription?.plan.name}}
    @@ -125,7 +128,12 @@ const ProjectDropdown = ({ alt }: { alt?: boolean }) => { icon={} /> - + @@ -141,7 +149,13 @@ const ProjectDropdown = ({ alt }: { alt?: boolean }) => { ))} - setOpen(false)}> + { + setOpen(false) + router.push(`/new/${selectedOrganization?.slug}`) + }} + > diff --git a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx index 59b652b2b7e..4d061e31805 100644 --- a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx +++ b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx @@ -1,32 +1,26 @@ import Link from 'next/link' import { useRouter } from 'next/router' import { - Button, - CommandGroup_Shadcn_, - CommandItem_Shadcn_, - CommandList_Shadcn_, - Command_Shadcn_, + DropdownMenuCheckboxItem_Shadcn_, DropdownMenuContent_Shadcn_, DropdownMenuGroup_Shadcn_, DropdownMenuItem_Shadcn_, + DropdownMenuLabel_Shadcn_, DropdownMenuSeparator_Shadcn_, DropdownMenuShortcut_Shadcn_, + DropdownMenuSubContent_Shadcn_, + DropdownMenuSubTrigger_Shadcn_, + DropdownMenuSub_Shadcn_, DropdownMenuTrigger_Shadcn_, DropdownMenu_Shadcn_, IconCheck, - IconMoon, - IconSun, IconUser, - PopoverContent_Shadcn_, - PopoverTrigger_Shadcn_, - Popover_Shadcn_, useCommandMenu, } from 'ui' import { useTheme } from 'common' import { useSignOut } from 'lib/auth' import { useProfile } from 'lib/profile' -import { useState } from 'react' const UserSettingsDropdown = () => { const signOut = useSignOut() @@ -34,7 +28,6 @@ const UserSettingsDropdown = () => { const { profile } = useProfile() const { setIsOpen } = useCommandMenu() const { isDarkMode, toggleTheme } = useTheme() - const [openTheme, setOpenTheme] = useState(false) const onClickLogout = async () => { await signOut() @@ -42,11 +35,7 @@ const UserSettingsDropdown = () => { } return ( - { - if (!open) setOpenTheme(false) - }} - > +
    {profile?.first_name ? profile?.first_name?.[0] : } @@ -58,16 +47,16 @@ const UserSettingsDropdown = () => {

    {profile?.first_name} {profile?.last_name}

    -

    {profile?.primary_email}

    +

    {profile?.primary_email}

    - + router.push('/account/me')}>
    Preferences - + router.push('/account/tokens')}> Access tokens @@ -78,61 +67,21 @@ const UserSettingsDropdown = () => { ⌘K - event.preventDefault()}> -
    -

    Theme

    - - - - - - - - - { - setOpenTheme(false) - toggleTheme(true) - }} - > -
    - Dark - {isDarkMode ? ( - - ) : null} -
    -
    - { - setOpenTheme(false) - toggleTheme(false) - }} - > -
    - Light - {!isDarkMode ? ( - - ) : null} -
    -
    -
    -
    -
    -
    -
    -
    -
    + + Theme + toggleTheme(true)} + > + Dark + + toggleTheme(false)} + > + Light + + onClickLogout()}> Log out From 86a743b9648967fbd7f645557294605d5cf45a48 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 24 Jul 2023 14:42:56 +0800 Subject: [PATCH 31/61] Small changes --- studio/components/layouts/AppLayout/ProjectDropdown.tsx | 8 +++++++- .../components/layouts/AppLayout/UserSettingsDropdown.tsx | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/studio/components/layouts/AppLayout/ProjectDropdown.tsx b/studio/components/layouts/AppLayout/ProjectDropdown.tsx index 73c0440d8ec..97c4f12ca61 100644 --- a/studio/components/layouts/AppLayout/ProjectDropdown.tsx +++ b/studio/components/layouts/AppLayout/ProjectDropdown.tsx @@ -11,6 +11,7 @@ import { CommandItem_Shadcn_, CommandList_Shadcn_, Command_Shadcn_, + IconCheck, IconCode, IconPlus, PopoverContent_Shadcn_, @@ -24,6 +25,7 @@ import { useProjectSubscriptionV2Query } from 'data/subscriptions/project-subscr import { useSelectedOrganization, useSelectedProject } from 'hooks' import { IS_PLATFORM, PROJECT_STATUS } from 'lib/constants' import { Organization, Project } from 'types' +import { useParams } from 'common' // [Fran] the idea is to let users change projects without losing the current page, // but at the same time we need to redirect correctly between urls that might be @@ -58,6 +60,7 @@ const ProjectLink = ({ setOpen: (value: boolean) => void }) => { const router = useRouter() + const { ref } = useParams() const sanitizedRoute = sanitizeRoute(router.route, router.query) const isOrgBilling = !!organization?.subscription_id @@ -81,7 +84,10 @@ const ProjectLink = ({ onSelect={() => setOpen(false)} > - {project.name} + + {project.name} + {project.ref === ref && } +
    ) diff --git a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx index 4d061e31805..97596d64fe9 100644 --- a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx +++ b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx @@ -63,7 +63,7 @@ const UserSettingsDropdown = () => { setIsOpen(true)}> - Quick search + Command menu ⌘K From 2ac5d6c85a505d44d0a4c52bf04f6eb4e34c735e Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 24 Jul 2023 15:03:54 +0800 Subject: [PATCH 32/61] Slight optimization in useSelectedProject hook to return project if projects query already finished --- studio/components/layouts/AppLayout/AppHeader.tsx | 9 +++++---- studio/hooks/misc/useSelectedProject.ts | 6 +++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/studio/components/layouts/AppLayout/AppHeader.tsx b/studio/components/layouts/AppLayout/AppHeader.tsx index 1681d108206..05ba788f92a 100644 --- a/studio/components/layouts/AppLayout/AppHeader.tsx +++ b/studio/components/layouts/AppLayout/AppHeader.tsx @@ -1,18 +1,19 @@ import Link from 'next/link' import { useRouter } from 'next/router' -import { useSelectedOrganization, useSelectedProject } from 'hooks' +import { useParams } from 'common' +import { useSelectedOrganization } from 'hooks' import FeedbackDropdown from '../ProjectLayout/LayoutHeader/FeedbackDropdown' import HelpPopover from '../ProjectLayout/LayoutHeader/HelpPopover' import NotificationsPopover from '../ProjectLayout/LayoutHeader/NotificationsPopover' -import ProjectDropdown from './ProjectDropdown' import OrganizationDropdown from './OrganizationDropdown' +import ProjectDropdown from './ProjectDropdown' import SettingsButton from './SettingsButton' import UserSettingsDropdown from './UserSettingsDropdown' const AppHeader = () => { const router = useRouter() - const project = useSelectedProject() + const { ref } = useParams() const organization = useSelectedOrganization() return ( @@ -28,7 +29,7 @@ const AppHeader = () => { - {project !== undefined && } + {ref !== undefined && }
    diff --git a/studio/hooks/misc/useSelectedProject.ts b/studio/hooks/misc/useSelectedProject.ts index 824bb14a073..8a300429bb1 100644 --- a/studio/hooks/misc/useSelectedProject.ts +++ b/studio/hooks/misc/useSelectedProject.ts @@ -1,9 +1,13 @@ import { useParams } from 'common' import { useProjectDetailQuery } from 'data/projects/project-detail-query' +import { useProjectsQuery } from 'data/projects/projects-query' +import { useMemo } from 'react' export function useSelectedProject() { const { ref } = useParams() + const { data: allProjects } = useProjectsQuery() const { data } = useProjectDetailQuery({ ref }) - return data + const projectMinimal = useMemo(() => allProjects?.find((project) => project.ref === ref), [ref]) + return data || projectMinimal } From c05a2abf0ead5a761fb8dd42a7684c1fca2bd695 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 24 Jul 2023 15:05:01 +0800 Subject: [PATCH 33/61] Add allProjects to dep array --- studio/hooks/misc/useSelectedProject.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/studio/hooks/misc/useSelectedProject.ts b/studio/hooks/misc/useSelectedProject.ts index 8a300429bb1..e61ecbfc086 100644 --- a/studio/hooks/misc/useSelectedProject.ts +++ b/studio/hooks/misc/useSelectedProject.ts @@ -8,6 +8,9 @@ export function useSelectedProject() { const { data: allProjects } = useProjectsQuery() const { data } = useProjectDetailQuery({ ref }) - const projectMinimal = useMemo(() => allProjects?.find((project) => project.ref === ref), [ref]) + const projectMinimal = useMemo( + () => allProjects?.find((project) => project.ref === ref), + [ref, allProjects] + ) return data || projectMinimal } From eafa23d5f1b1e1805962d63dbea53c1daa9284c3 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 25 Jul 2023 00:42:51 +0800 Subject: [PATCH 34/61] Small refactor --- .../interfaces/App/AppBannerWrapper.tsx | 22 ++++--------------- .../layouts/AppLayout/IncidentBanner.tsx | 19 ++++++++++++++++ studio/pages/_app.tsx | 5 +++++ 3 files changed, 28 insertions(+), 18 deletions(-) create mode 100644 studio/components/layouts/AppLayout/IncidentBanner.tsx diff --git a/studio/components/interfaces/App/AppBannerWrapper.tsx b/studio/components/interfaces/App/AppBannerWrapper.tsx index 3f3faa61251..581ca0c6669 100644 --- a/studio/components/interfaces/App/AppBannerWrapper.tsx +++ b/studio/components/interfaces/App/AppBannerWrapper.tsx @@ -1,26 +1,12 @@ -import { FC } from 'react' -import Link from 'next/link' +import IncidentBanner from 'components/layouts/AppLayout/IncidentBanner' import { useFlag } from 'hooks' -import { IconExternalLink } from 'ui' +import { PropsWithChildren } from 'react' -const AppBannerWrapper: FC = ({ children }) => { +const AppBannerWrapper = ({ children }: PropsWithChildren<{}>) => { const ongoingIncident = useFlag('ongoingIncident') - return ( diff --git a/studio/components/layouts/AppLayout/IncidentBanner.tsx b/studio/components/layouts/AppLayout/IncidentBanner.tsx new file mode 100644 index 00000000000..4004c1922cb --- /dev/null +++ b/studio/components/layouts/AppLayout/IncidentBanner.tsx @@ -0,0 +1,19 @@ +import Link from 'next/link' +import { IconExternalLink } from 'ui' + +const IncidentBanner = () => { + return ( + + +
    +

    + We are currently investigating a technical issue, follow status.supabase.com for updates +

    + +
    +
    + + ) +} + +export default IncidentBanner diff --git a/studio/pages/_app.tsx b/studio/pages/_app.tsx index 6051ab68387..b0652d80767 100644 --- a/studio/pages/_app.tsx +++ b/studio/pages/_app.tsx @@ -62,6 +62,11 @@ dayjs.extend(relativeTime) dart(Prism) +// [Joshen TODO] Once we settle on the new nav layout - we'll need a lot of clean up in terms of our layout components +// a lot of them are unnecessary and introduce way too many cluttered CSS especially with the height styles that make +// debugging way too difficult. Ideal scenario is we just have one AppLayout to control the height and scroll areas of +// the dashboard, all other layout components should not be doing that + function CustomApp({ Component, pageProps }: AppPropsWithLayout) { const queryClient = useRootQueryClient() const [rootStore] = useState(() => new RootStore()) From e7f9c24e152f4232b533dde0c06552ee89e61c37 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 25 Jul 2023 11:24:11 +0800 Subject: [PATCH 35/61] remove bg --- .../layouts/AppLayout/UserSettingsDropdown.tsx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx index 97596d64fe9..e8ccc497529 100644 --- a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx +++ b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx @@ -50,7 +50,7 @@ const UserSettingsDropdown = () => {

    {profile?.primary_email}

    - + router.push('/account/me')}> Preferences @@ -61,13 +61,12 @@ const UserSettingsDropdown = () => { Access tokens - + setIsOpen(true)}> Command menu ⌘K - - + Theme { Light - + onClickLogout()}> Log out From 43e6a6730f40b787b8d45f2b8a2bd072249ae727 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 25 Jul 2023 12:35:41 +0800 Subject: [PATCH 36/61] fix a11y on comboboxes --- package-lock.json | 261 ++---------------- packages/ui/package.json | 2 +- .../ui/src/components/shadcn/ui/command.tsx | 8 +- studio/.gitignore | 2 + .../AppLayout/OrganizationDropdown.tsx | 33 ++- .../layouts/AppLayout/ProjectDropdown.tsx | 50 ++-- 6 files changed, 79 insertions(+), 277 deletions(-) diff --git a/package-lock.json b/package-lock.json index 084b2d064df..22daacdc395 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17539,246 +17539,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/cmdk-supabase": { - "version": "0.2.2", - "license": "MIT", - "dependencies": { - "@radix-ui/react-dialog": "1.0.0", - "@radix-ui/react-id": "^0.0.6", - "command-score": "0.1.2", - "use-sync-external-store": "^1.2.0" - }, - "peerDependencies": { - "react": "^17.0", - "react-dom": "^17.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/primitive": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-compose-refs": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-context": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-dialog": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-dismissable-layer": "1.0.0", - "@radix-ui/react-focus-guards": "1.0.0", - "@radix-ui/react-focus-scope": "1.0.0", - "@radix-ui/react-id": "1.0.0", - "@radix-ui/react-portal": "1.0.0", - "@radix-ui/react-presence": "1.0.0", - "@radix-ui/react-primitive": "1.0.0", - "@radix-ui/react-slot": "1.0.0", - "@radix-ui/react-use-controllable-state": "1.0.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.4" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-id": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-primitive": "1.0.0", - "@radix-ui/react-use-callback-ref": "1.0.0", - "@radix-ui/react-use-escape-keydown": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-focus-guards": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-primitive": "1.0.0", - "@radix-ui/react-use-callback-ref": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-id": { - "version": "0.0.6", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-portal": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-presence": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-use-layout-effect": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-primitive": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-slot": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk-supabase/node_modules/react-remove-scroll": { - "version": "2.5.4", - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.3", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/co": { "version": "4.6.0", "dev": true, @@ -17921,7 +17681,8 @@ }, "node_modules/command-score": { "version": "0.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/command-score/-/command-score-0.1.2.tgz", + "integrity": "sha512-VtDvQpIJBvBatnONUsPzXYFVKQQAhuf3XTNOAsdBxCNO/QCtUUd8LSgjn0GVarBkCad6aJCZfXgrjYbl/KRr7w==" }, "node_modules/commander": { "version": "6.2.1", @@ -40177,7 +39938,7 @@ "autoprefixer": "^10.4.14", "class-variance-authority": "^0.6.0", "clsx": "^1.2.1", - "cmdk-supabase": "^0.2.2", + "cmdk-supabase": "1.0.6", "color": "^4.2.3", "colorjs.io": "^0.4.3", "common-tags": "^1.8.2", @@ -41287,6 +41048,22 @@ "node": ">=6" } }, + "packages/ui/node_modules/cmdk-supabase": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cmdk-supabase/-/cmdk-supabase-1.0.6.tgz", + "integrity": "sha512-DPeenlnJBtSxx49gJzMbe3gmC/IYCJcE5AZbs/G82pjWtHwK/skzc6LkJqIjdt9JOSoLjsWk0gYFCQXUp3JGBQ==", + "dependencies": { + "@radix-ui/react-dialog": "^1.0.4", + "@radix-ui/react-id": "^0.0.6", + "@radix-ui/react-slot": "1.0.2", + "command-score": "0.1.2", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^17.0", + "react-dom": "^17.0" + } + }, "packages/ui/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", diff --git a/packages/ui/package.json b/packages/ui/package.json index 207a450235d..e0a036269a0 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -54,7 +54,7 @@ "autoprefixer": "^10.4.14", "class-variance-authority": "^0.6.0", "clsx": "^1.2.1", - "cmdk-supabase": "^0.2.2", + "cmdk-supabase": "1.0.6", "color": "^4.2.3", "colorjs.io": "^0.4.3", "common-tags": "^1.8.2", diff --git a/packages/ui/src/components/shadcn/ui/command.tsx b/packages/ui/src/components/shadcn/ui/command.tsx index 24f15e9e715..2f57d3bd0d7 100644 --- a/packages/ui/src/components/shadcn/ui/command.tsx +++ b/packages/ui/src/components/shadcn/ui/command.tsx @@ -70,8 +70,12 @@ CommandList.displayName = CommandPrimitive.List.displayName const CommandEmpty = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef ->((props, ref) => ( - +>(({ className, ...props }, ref) => ( + )) CommandEmpty.displayName = CommandPrimitive.Empty.displayName diff --git a/studio/.gitignore b/studio/.gitignore index 9dd40bd86d1..fbcd3d36150 100644 --- a/studio/.gitignore +++ b/studio/.gitignore @@ -33,3 +33,5 @@ yarn-error.log* .env.production.local .vercel + +/public/dashboard diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index c84da6e9f1a..e33d171fe59 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -46,7 +46,7 @@ const OrganizationDropdown = () => {

    {orgName}

    - {isSuccess && {subscription?.plan.name}} + {isSuccess && {subscription?.plan.name}}
    @@ -67,7 +67,7 @@ const OrganizationDropdown = () => { - No results found. + No organizations found {organizations?.map((org) => { const href = router.pathname.includes('[slug]') @@ -76,22 +76,29 @@ const OrganizationDropdown = () => { ? `/org/${org.slug}/general` : `/org/${org.slug}` return ( - { + onClick={() => { setOpen(false) - router.push(href) }} > - - - {org.name} - {org.slug === slug && } + { + setOpen(false) + router.push(href) + }} + > + + {org.name} + {org.slug === slug && } - - +
    + ) })}
    diff --git a/studio/components/layouts/AppLayout/ProjectDropdown.tsx b/studio/components/layouts/AppLayout/ProjectDropdown.tsx index 97c4f12ca61..e1bda5c145b 100644 --- a/studio/components/layouts/AppLayout/ProjectDropdown.tsx +++ b/studio/components/layouts/AppLayout/ProjectDropdown.tsx @@ -77,19 +77,24 @@ const ProjectLink = ({ } return ( + // setOpen(false)} + className="cursor-pointer w-full flex items-center justify-between" + onSelect={() => { + console.log('hello') + router.push(href) + setOpen(false) + }} > - - - {project.name} - {project.ref === ref && } - - + + {project.name} + {project.ref === ref && } + + // ) } @@ -143,7 +148,7 @@ const ProjectDropdown = () => { - No results found. + No projects found {projects?.map((project) => ( { ))} - { - setOpen(false) - router.push(`/new/${selectedOrganization?.slug}`) - }} + { + // setOpen(false) + // }} > - - + { + // setOpen(false) + // router.push(`/new/${selectedOrganization?.slug}`) + // }} + > +

    New project

    - -
    + +
    From 056e5d628ae56b44edf4e2635f73f08a68a4c76b Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 25 Jul 2023 13:09:10 +0800 Subject: [PATCH 37/61] fix combo --- package-lock.json | 45 ++++++++++------- packages/ui/package.json | 2 +- .../AppLayout/OrganizationDropdown.tsx | 32 +++++------- .../layouts/AppLayout/ProjectDropdown.tsx | 50 +++++++++---------- 4 files changed, 67 insertions(+), 62 deletions(-) diff --git a/package-lock.json b/package-lock.json index 22daacdc395..6ef3321773e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17539,6 +17539,33 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/cmdk-supabase": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cmdk-supabase/-/cmdk-supabase-1.0.7.tgz", + "integrity": "sha512-5Ts9dZTLSqNwCEFzps/dtNK6Q1baje1JuA+5qjEvtfkk+SGZG0S5D1uqxbAk7YQqF/ctGZHxe8O+0+vNPYMk2A==", + "dependencies": { + "@radix-ui/react-dialog": "^1.0.4", + "@radix-ui/react-id": "^0.0.6", + "@radix-ui/react-slot": "1.0.2", + "command-score": "0.1.2", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^17.0", + "react-dom": "^17.0" + } + }, + "node_modules/cmdk-supabase/node_modules/@radix-ui/react-id": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-0.0.6.tgz", + "integrity": "sha512-PzmraF34fYggsYvTIZVJ5S68WMp3aKUN3HkSmGnz4zn9zpRjkAbbg7Xn3ueQI3FQsLWKgyUfnpsmWFDndpcqYg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, "node_modules/co": { "version": "4.6.0", "dev": true, @@ -39938,7 +39965,7 @@ "autoprefixer": "^10.4.14", "class-variance-authority": "^0.6.0", "clsx": "^1.2.1", - "cmdk-supabase": "1.0.6", + "cmdk-supabase": "^1.0.7", "color": "^4.2.3", "colorjs.io": "^0.4.3", "common-tags": "^1.8.2", @@ -41048,22 +41075,6 @@ "node": ">=6" } }, - "packages/ui/node_modules/cmdk-supabase": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cmdk-supabase/-/cmdk-supabase-1.0.6.tgz", - "integrity": "sha512-DPeenlnJBtSxx49gJzMbe3gmC/IYCJcE5AZbs/G82pjWtHwK/skzc6LkJqIjdt9JOSoLjsWk0gYFCQXUp3JGBQ==", - "dependencies": { - "@radix-ui/react-dialog": "^1.0.4", - "@radix-ui/react-id": "^0.0.6", - "@radix-ui/react-slot": "1.0.2", - "command-score": "0.1.2", - "use-sync-external-store": "^1.2.0" - }, - "peerDependencies": { - "react": "^17.0", - "react-dom": "^17.0" - } - }, "packages/ui/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", diff --git a/packages/ui/package.json b/packages/ui/package.json index e0a036269a0..59f0f58500e 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -54,7 +54,7 @@ "autoprefixer": "^10.4.14", "class-variance-authority": "^0.6.0", "clsx": "^1.2.1", - "cmdk-supabase": "1.0.6", + "cmdk-supabase": "^1.0.7", "color": "^4.2.3", "colorjs.io": "^0.4.3", "common-tags": "^1.8.2", diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index e33d171fe59..b58fbd62956 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -76,14 +76,7 @@ const OrganizationDropdown = () => { ? `/org/${org.slug}/general` : `/org/${org.slug}` return ( - { - setOpen(false) - }} - > + { })} - { - setOpen(false) - router.push(orgCreationV2 ? `/new-with-subscription` : `/new`) - }} - > - - + + { + setOpen(false) + router.push(orgCreationV2 ? `/new-with-subscription` : `/new`) + }} + asChild + > +

    New organization

    - -
    +
    +
    diff --git a/studio/components/layouts/AppLayout/ProjectDropdown.tsx b/studio/components/layouts/AppLayout/ProjectDropdown.tsx index e1bda5c145b..61fbfea55b9 100644 --- a/studio/components/layouts/AppLayout/ProjectDropdown.tsx +++ b/studio/components/layouts/AppLayout/ProjectDropdown.tsx @@ -77,24 +77,24 @@ const ProjectLink = ({ } return ( - // - { - console.log('hello') - router.push(href) - setOpen(false) - }} - > - - {project.name} - {project.ref === ref && } - - - // + + { + router.push(href) + setOpen(false) + }} + onClick={() => setOpen(false)} + > + + {project.name} + {project.ref === ref && } + + + ) } @@ -163,17 +163,17 @@ const ProjectDropdown = () => { { - // setOpen(false) - // }} + onClick={() => { + setOpen(false) + }} > { - // setOpen(false) - // router.push(`/new/${selectedOrganization?.slug}`) - // }} + onSelect={() => { + setOpen(false) + router.push(`/new/${selectedOrganization?.slug}`) + }} > From 1919cf8b224bdef914c5af829746c260651a69e4 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 25 Jul 2023 13:24:19 +0800 Subject: [PATCH 38/61] Small fix --- studio/components/layouts/AppLayout/OrganizationDropdown.tsx | 4 +++- studio/components/layouts/AppLayout/ProjectDropdown.tsx | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index b58fbd62956..0c0728e6e4e 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -85,6 +85,7 @@ const OrganizationDropdown = () => { setOpen(false) router.push(href) }} + onClick={() => setOpen(false)} > {org.name} @@ -98,12 +99,13 @@ const OrganizationDropdown = () => { { setOpen(false) router.push(orgCreationV2 ? `/new-with-subscription` : `/new`) }} - asChild + onClick={() => setOpen(false)} > diff --git a/studio/components/layouts/AppLayout/ProjectDropdown.tsx b/studio/components/layouts/AppLayout/ProjectDropdown.tsx index 61fbfea55b9..be09dcbb804 100644 --- a/studio/components/layouts/AppLayout/ProjectDropdown.tsx +++ b/studio/components/layouts/AppLayout/ProjectDropdown.tsx @@ -174,6 +174,7 @@ const ProjectDropdown = () => { setOpen(false) router.push(`/new/${selectedOrganization?.slug}`) }} + onClick={() => setOpen(false)} > From f3008f17d1574a39112ea46a8ffc90c0f67c17e1 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 25 Jul 2023 14:15:43 +0800 Subject: [PATCH 39/61] Fix access tokens max width --- studio/components/interfaces/Account/AccessTokenList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/interfaces/Account/AccessTokenList.tsx b/studio/components/interfaces/Account/AccessTokenList.tsx index 5746aab2995..9b76f1c93b0 100644 --- a/studio/components/interfaces/Account/AccessTokenList.tsx +++ b/studio/components/interfaces/Account/AccessTokenList.tsx @@ -25,7 +25,7 @@ const AccessTokenList = observer(() => { return ( <> -
    +
    Token, From 7367a7af1f46b24edeeb5d7668d5f330aeb610de Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 25 Jul 2023 14:20:55 +0800 Subject: [PATCH 40/61] Fix wrong logic in NotificationsPopover --- .../LayoutHeader/NotificationsPopover/index.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/NotificationsPopover/index.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/NotificationsPopover/index.tsx index f4e3db7e003..ebc0348ea3f 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/NotificationsPopover/index.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/NotificationsPopover/index.tsx @@ -238,13 +238,9 @@ const NotificationsPopover = ({ alt = false }: NotificationsPopoverProps) => {
    - {/* hasNewNotifications */} - {true && ( + {hasNewNotifications && ( <> {alt ? null : ( - //
    - //

    5

    - //
    From 4c9729b0464f31eced5d5eb0b1dcda6f5953898a Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 25 Jul 2023 14:23:30 +0800 Subject: [PATCH 41/61] migrate feedback dropdown to shadcn --- .../FeedbackDropdown/FeedbackDropdown.tsx | 47 +++++++----- .../FeedbackDropdown/FeedbackWidget.tsx | 76 +++++++++++-------- 2 files changed, 73 insertions(+), 50 deletions(-) diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackDropdown.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackDropdown.tsx index 00da09d71eb..be10c7d934e 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackDropdown.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackDropdown.tsx @@ -1,5 +1,12 @@ import { useState } from 'react' -import { Button, IconMessageCircle, Popover } from 'ui' +import { + Button, + IconMessageCircle, + Popover, + PopoverContent_Shadcn_, + PopoverTrigger_Shadcn_, + Popover_Shadcn_, +} from 'ui' import FeedbackWidget from './FeedbackWidget' interface FeedbackDropdownProps { @@ -22,16 +29,29 @@ const FeedbackDropdown = ({ alt = false }: FeedbackDropdownProps) => { } return ( - { setIsOpen(e) if (!e) setScreenshot(undefined) }} - size="content" - side="bottom" - align="end" - overlay={ + > + + + + { screenshot={screenshot} setScreenshot={setScreenshot} /> - } - > - - + + ) } diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackWidget.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackWidget.tsx index 0b9571b34ba..39851aa93b4 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackWidget.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackWidget.tsx @@ -2,7 +2,21 @@ import { toPng } from 'html-to-image' import Link from 'next/link' import { useRouter } from 'next/router' import { ChangeEvent, FC, useEffect, useRef, useState } from 'react' -import { Button, Dropdown, IconCamera, IconImage, IconUpload, IconX, Input, Popover } from 'ui' +import { + Button, + Dropdown, + DropdownMenuContent_Shadcn_, + DropdownMenuItem_Shadcn_, + DropdownMenuSeparator_Shadcn_, + DropdownMenuTrigger_Shadcn_, + DropdownMenu_Shadcn_, + IconCamera, + IconImage, + IconUpload, + IconX, + Input, + Popover, +} from 'ui' import { useParams } from 'common' import { useSendFeedbackMutation } from 'data/feedback/feedback-send' @@ -125,13 +139,12 @@ const FeedbackWidget: FC = ({ value={feedback} onChange={onFeedbackChange} /> - +
    - -
    {screenshot !== undefined ? (
    = ({ }} className="cursor-pointer rounded h-[26px] w-[30px] border border-scale-600 relative bg-cover bg-center bg-no-repeat" > -
    = ({ }} > -
    +
    ) : ( - + + + + + } - onClick={() => { + onSelect={() => { if (uploadButtonRef.current) (uploadButtonRef.current as any).click() }} > + Upload screenshot - , - + } - onClick={() => captureScreenshot()} + onSelect={() => captureScreenshot()} > + Capture screenshot - , - ]} - > - - + + + )} Date: Tue, 25 Jul 2023 14:23:48 +0800 Subject: [PATCH 42/61] Update user settings to allow opening in new tab --- .../AppLayout/UserSettingsDropdown.tsx | 84 ++++++++++++------- 1 file changed, 55 insertions(+), 29 deletions(-) diff --git a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx index e8ccc497529..1867e7d9223 100644 --- a/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx +++ b/studio/components/layouts/AppLayout/UserSettingsDropdown.tsx @@ -6,6 +6,8 @@ import { DropdownMenuGroup_Shadcn_, DropdownMenuItem_Shadcn_, DropdownMenuLabel_Shadcn_, + DropdownMenuRadioGroup_Shadcn_, + DropdownMenuRadioItem_Shadcn_, DropdownMenuSeparator_Shadcn_, DropdownMenuShortcut_Shadcn_, DropdownMenuSubContent_Shadcn_, @@ -21,12 +23,14 @@ import { import { useTheme } from 'common' import { useSignOut } from 'lib/auth' import { useProfile } from 'lib/profile' +import { useState } from 'react' const UserSettingsDropdown = () => { const signOut = useSignOut() const router = useRouter() + const [open, setOpen] = useState(false) const { profile } = useProfile() - const { setIsOpen } = useCommandMenu() + const { setIsOpen: setCommandMenuOpen } = useCommandMenu() const { isDarkMode, toggleTheme } = useTheme() const onClickLogout = async () => { @@ -35,11 +39,9 @@ const UserSettingsDropdown = () => { } return ( - - -
    - {profile?.first_name ? profile?.first_name?.[0] : } -
    + setOpen(!open)} modal={false}> + + setOpen(true)} size={14} strokeWidth={2} /> @@ -51,38 +53,62 @@ const UserSettingsDropdown = () => {
    - router.push('/account/me')}> - - Preferences - - - router.push('/account/tokens')}> - - Access tokens - - + + { + router.push('/account/me') + }} + onClick={() => setOpen(false)} + asChild + > + Preferences + + + + { + router.push('/account/tokens') + }} + onClick={() => setOpen(false)} + asChild + > + Access tokens + + - setIsOpen(true)}> + { + setOpen(false) + setCommandMenuOpen(true) + }} + > Command menu ⌘K Theme - toggleTheme(true)} + { + const dark = x === 'dark' + toggleTheme(Boolean(dark)) + }} > - Dark - - toggleTheme(false)} - > - Light - + Dark + Light + - onClickLogout()}> + { + onClickLogout() + setOpen(false) + }} + > Log out From c3888b22e4df08c39dadd6542493d5459622ff7b Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 25 Jul 2023 14:23:59 +0800 Subject: [PATCH 43/61] modal behavior disabled for new dropdowns/comboboxes --- packages/ui/src/components/shadcn/ui/dropdown-menu.tsx | 2 +- studio/components/layouts/AppLayout/OrganizationDropdown.tsx | 2 +- studio/components/layouts/AppLayout/ProjectDropdown.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ui/src/components/shadcn/ui/dropdown-menu.tsx b/packages/ui/src/components/shadcn/ui/dropdown-menu.tsx index 93eb4f2b669..e4141e48221 100644 --- a/packages/ui/src/components/shadcn/ui/dropdown-menu.tsx +++ b/packages/ui/src/components/shadcn/ui/dropdown-menu.tsx @@ -153,7 +153,7 @@ const DropdownMenuSeparator = React.forwardRef< >(({ className, ...props }, ref) => ( )) diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index b58fbd62956..154776243fe 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -50,7 +50,7 @@ const OrganizationDropdown = () => { - + +
    + +
    - {alt && ( + {alt ? ( @@ -167,7 +169,7 @@ const HelpPopover = ({ alt = false }: HelpPopoverProps) => {
    - )} + ) : null} ) From f23b2d00b3c6fb51a7e0f1e5d1fdfed7f051f4a1 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 25 Jul 2023 14:35:56 +0800 Subject: [PATCH 47/61] migrate Help popover to shadcn --- .../LayoutHeader/HelpPopover.tsx | 276 +++++++++--------- 1 file changed, 136 insertions(+), 140 deletions(-) diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx index 463088d2b42..fc5d36c9f4f 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx @@ -12,6 +12,9 @@ import { IconMessageCircle, IconTool, Popover, + PopoverContent_Shadcn_, + PopoverTrigger_Shadcn_, + Popover_Shadcn_, } from 'ui' interface HelpPopoverProps { @@ -24,154 +27,147 @@ const HelpPopover = ({ alt = false }: HelpPopoverProps) => { const supportUrl = `/support/new${projectRef ? `?ref=${projectRef}` : ''}` return ( - -
    -
    Need help with your project?
    -

    - For issues with your project hosted on supabase.com, or other inquiries about our - hosted services. -

    -
    - - - - - - - - - -
    -

    - Expected response time is based on your billing plan. Pro and Pay as You Go plans are - prioritized. -

    + + + +
    - - +
    +
    + {alt ? ( + + + +
    +

    Help

    +
    +
    +
    + ) : null} +
    +
    + +
    +
    Need help with your project?
    +

    + For issues with your project hosted on supabase.com, or other inquiries about our hosted + services. +

    +
    + + + + + + + + + +
    +

    + Expected response time is based on your billing plan. Pro and Pay as You Go plans are + prioritized. +

    +
    + + + +
    +
    + +
    +
    +
    Reach out to the community
    + +

    + For other support, including questions on our client libraries, advice, or best + practices. +

    +
    + - -
    -
    -
    Reach out to the community
    - -

    - For other support, including questions on our client libraries, advice, or best - practices. -

    -
    -
    - } - > - - -
    - -
    -
    - {alt ? ( - - - -
    -

    Help

    -
    -
    -
    - ) : null} -
    - + + ) } From 7fdcef1d00c5921fca4b97a4e9a4f830b00d8f12 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 25 Jul 2023 14:57:37 +0800 Subject: [PATCH 48/61] asChild issues --- .../layouts/AppLayout/AppHeader.tsx | 16 ++++--- .../layouts/AppLayout/SettingsButton.tsx | 14 +++--- .../LayoutHeader/HelpPopover.tsx | 43 +++++++++---------- 3 files changed, 36 insertions(+), 37 deletions(-) diff --git a/studio/components/layouts/AppLayout/AppHeader.tsx b/studio/components/layouts/AppLayout/AppHeader.tsx index 05ba788f92a..60feb13dbfe 100644 --- a/studio/components/layouts/AppLayout/AppHeader.tsx +++ b/studio/components/layouts/AppLayout/AppHeader.tsx @@ -32,12 +32,16 @@ const AppHeader = () => { {ref !== undefined && }
    -
    - - - - - +
    +
    + + + + +
    +
    + +
    ) diff --git a/studio/components/layouts/AppLayout/SettingsButton.tsx b/studio/components/layouts/AppLayout/SettingsButton.tsx index a30744a72b1..ef22d069887 100644 --- a/studio/components/layouts/AppLayout/SettingsButton.tsx +++ b/studio/components/layouts/AppLayout/SettingsButton.tsx @@ -5,17 +5,13 @@ import * as Tooltip from '@radix-ui/react-tooltip' const SettingsButton = ({ slug }: { slug: string }) => { return ( - - + + -
    - {alt ? ( - - - -
    -

    Help

    -
    -
    -
    - ) : null} - - + + {alt ? ( + + + +
    +

    Help

    +
    +
    +
    + ) : null} +
    Need help with your project?
    From 588bbb4a4072a1440f1b0fe9d8ba0a178c22c129 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 26 Jul 2023 11:47:38 +0800 Subject: [PATCH 49/61] Revert changes in useSelectedProject, add error state for schema picker in tbale editor --- .../components/layouts/AppLayout/ProjectDropdown.tsx | 6 ++++-- .../layouts/TableEditorLayout/TableEditorMenu.tsx | 9 ++++++++- studio/hooks/misc/useSelectedProject.ts | 10 +--------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/studio/components/layouts/AppLayout/ProjectDropdown.tsx b/studio/components/layouts/AppLayout/ProjectDropdown.tsx index 2d467b1864a..9a882441d23 100644 --- a/studio/components/layouts/AppLayout/ProjectDropdown.tsx +++ b/studio/components/layouts/AppLayout/ProjectDropdown.tsx @@ -100,20 +100,22 @@ const ProjectLink = ({ const ProjectDropdown = () => { const router = useRouter() - const selectedProject = useSelectedProject() + const { ref } = useParams() + const projectDetails = useSelectedProject() const selectedOrganization = useSelectedOrganization() const projectNameRef = useRef(null) const { data: allProjects, isLoading: isLoadingProjects } = useProjectsQuery() const isOrgBilling = !!selectedOrganization?.subscription_id const { data: subscription, isSuccess } = useProjectSubscriptionV2Query( - { projectRef: selectedProject?.ref }, + { projectRef: ref }, { enabled: !isOrgBilling } ) const projects = allProjects ?.filter((x) => x.status !== PROJECT_STATUS.INACTIVE) .filter((x) => x.organization_id === selectedOrganization?.id) .sort((a, b) => a.name.localeCompare(b.name)) + const selectedProject = projectDetails || projects?.find((project) => project.ref === ref) const [open, setOpen] = useState(false) const popoverOffset = (projectNameRef.current?.offsetWidth ?? 0) + 12 diff --git a/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx b/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx index 1e8f7e114e6..7e7190a73e9 100644 --- a/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx +++ b/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx @@ -2,6 +2,7 @@ import { useMemo, useState } from 'react' import { noop, partition } from 'lodash' import { observer } from 'mobx-react-lite' import { + Alert, Button, Dropdown, IconCheck, @@ -83,7 +84,6 @@ const TableEditorMenu = ({ ) const schemas: PostgresSchema[] = meta.schemas.list() - const schema = schemas.find((schema) => schema.name === selectedSchema) const canCreateTables = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') @@ -110,6 +110,13 @@ const TableEditorMenu = ({ Loading schemas...
    + ) : meta.schemas.hasError ? ( + +

    Error: {meta.schemas?.error?.message}

    + +
    ) : ( allProjects?.find((project) => project.ref === ref), - [ref, allProjects] - ) - return data || projectMinimal + return data } From 1fbd7c8240c25b276057020d658b3bf75487ee3c Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 26 Jul 2023 12:04:20 +0800 Subject: [PATCH 50/61] Small refactor in OrganizationDropdown --- studio/components/layouts/AppLayout/AppHeader.tsx | 2 +- .../layouts/AppLayout/OrganizationDropdown.tsx | 6 +++++- .../components/layouts/AppLayout/SettingsButton.tsx | 12 ++++++++---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/studio/components/layouts/AppLayout/AppHeader.tsx b/studio/components/layouts/AppLayout/AppHeader.tsx index 60feb13dbfe..5ea83c6e56a 100644 --- a/studio/components/layouts/AppLayout/AppHeader.tsx +++ b/studio/components/layouts/AppLayout/AppHeader.tsx @@ -37,7 +37,7 @@ const AppHeader = () => { - +
    diff --git a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx index f5408e47440..035e4073307 100644 --- a/studio/components/layouts/AppLayout/OrganizationDropdown.tsx +++ b/studio/components/layouts/AppLayout/OrganizationDropdown.tsx @@ -32,7 +32,11 @@ const OrganizationDropdown = () => { const slug = selectedOrganization?.slug const orgName = selectedOrganization?.name - const { data: subscription, isSuccess } = useOrgSubscriptionQuery({ orgSlug: slug }) + const isOrgBilling = !!selectedOrganization?.subscription_id + const { data: subscription, isSuccess } = useOrgSubscriptionQuery( + { orgSlug: slug }, + { enabled: isOrgBilling } + ) const [open, setOpen] = useState(false) const popoverOffset = (orgNameRef.current?.offsetWidth ?? 0) + 12 diff --git a/studio/components/layouts/AppLayout/SettingsButton.tsx b/studio/components/layouts/AppLayout/SettingsButton.tsx index ef22d069887..7576d779903 100644 --- a/studio/components/layouts/AppLayout/SettingsButton.tsx +++ b/studio/components/layouts/AppLayout/SettingsButton.tsx @@ -1,11 +1,15 @@ -import Link from 'next/link' -import { Button, IconSettings } from 'ui' import * as Tooltip from '@radix-ui/react-tooltip' +import { useSelectedOrganization } from 'hooks' +import Link from 'next/link' +import { IconSettings } from 'ui' + +const SettingsButton = () => { + const selectedOrganization = useSelectedOrganization() + const slug = selectedOrganization?.slug -const SettingsButton = ({ slug }: { slug: string }) => { return ( - + From 6a40595b5573152228837a5bedaf7df09ddf7c79 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 26 Jul 2023 12:05:38 +0800 Subject: [PATCH 51/61] Small style fix in HelpPopover --- .../layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx index 4c2cab4c241..05f28ff10ef 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx @@ -64,8 +64,8 @@ const HelpPopover = ({ alt = false }: HelpPopoverProps) => { ) : null} - -
    + +
    Need help with your project?

    For issues with your project hosted on supabase.com, or other inquiries about our hosted From fb4254e0a32f69f610c0d380eb29f2728655b0b7 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 26 Jul 2023 12:34:29 +0800 Subject: [PATCH 52/61] Small fixes --- .../interfaces/Settings/Infrastructure/InfrastructureInfo.tsx | 2 +- studio/components/to-be-cleaned/ProductEmptyState.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/studio/components/interfaces/Settings/Infrastructure/InfrastructureInfo.tsx b/studio/components/interfaces/Settings/Infrastructure/InfrastructureInfo.tsx index 5e81d11cadc..ddd6c3498f2 100644 --- a/studio/components/interfaces/Settings/Infrastructure/InfrastructureInfo.tsx +++ b/studio/components/interfaces/Settings/Infrastructure/InfrastructureInfo.tsx @@ -82,7 +82,7 @@ const InfrastructureInfo = () => { label="Current version" actions={[ isOnLatestVersion && ( - + Latest diff --git a/studio/components/to-be-cleaned/ProductEmptyState.tsx b/studio/components/to-be-cleaned/ProductEmptyState.tsx index be23e0edc04..33ee6b1e1a8 100644 --- a/studio/components/to-be-cleaned/ProductEmptyState.tsx +++ b/studio/components/to-be-cleaned/ProductEmptyState.tsx @@ -39,7 +39,7 @@ const ProductEmptyState: FC = ({

    {ctaButtonLabel && onClickCta && ( - + From a15443194af53ce100ebac5e43031fc07c904b58 Mon Sep 17 00:00:00 2001 From: dshukertjr <18113850+dshukertjr@users.noreply.github.com> Date: Wed, 26 Jul 2023 18:37:29 +0900 Subject: [PATCH 53/61] fix: add proper conditional filter example on Flutter docs --- spec/supabase_dart_v1.yml | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/spec/supabase_dart_v1.yml b/spec/supabase_dart_v1.yml index 46bf3067102..70a69f18086 100644 --- a/spec/supabase_dart_v1.yml +++ b/spec/supabase_dart_v1.yml @@ -1768,13 +1768,22 @@ functions: - id: conditional-chaining name: Conditional Chaining description: | - Filters can be built up one step at a time and then executed. For example: + Filters can be built up one step at a time and then executed as shown in the example code. code: | ```dart - final data = await supabase - .from('users') - .select() - .eq('address->postcode', 90210); + final filterByName = null; + final filterPopLow = 1000; + final filterPopHigh = 10000; + + var query = supabase + .from('cities') + .select('name, country_id'); + + if (filterByName != null) { query = query.eq('name', filterByName); } + if (filterPopLow != null) { query = query.gte('population', filterPopLow); } + if (filterPopHigh != null) { query = query.lt('population', filterPopHigh); } + + final data = await query; ``` - id: filter-by-value-within-json-column name: Filter by values within a JSON column From 6bc7244b705e8900dfbbe8293fd2a1faeb5c978d Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Wed, 26 Jul 2023 17:01:15 +0200 Subject: [PATCH 54/61] adds some notes on dimensionality --- .../guides/ai/choosing-compute-addon.mdx | 77 +++++++++++-------- 1 file changed, 47 insertions(+), 30 deletions(-) diff --git a/apps/docs/pages/guides/ai/choosing-compute-addon.mdx b/apps/docs/pages/guides/ai/choosing-compute-addon.mdx index 1a27b1e52cd..23b5c4f722f 100644 --- a/apps/docs/pages/guides/ai/choosing-compute-addon.mdx +++ b/apps/docs/pages/guides/ai/choosing-compute-addon.mdx @@ -4,29 +4,24 @@ export const TabPanel = Tabs.Panel export const meta = { id: 'ai-choosing-compute-addon', - title: 'Choosing Compute Add-on', - description: 'Choosing the right Compute Add-on for your workload.', - subtitle: 'Choosing the right Compute Add-on for your workload.', + title: 'Choosing you Compute Add-on', + description: 'Choosing the right Compute Add-on for your vector workload.', + subtitle: 'Choosing the right Compute Add-on for your vector workload.', sidebar_label: 'Choosing Compute Add-on', } -This guide will help you choose the right Compute Add-on for your workload. We'll provide general guidance, as it is impossible to provide specific instructions for every possible use case. The goal is to give you a starting point from which you can make your own benchmarks and optimizations. +You have two options for scaling your vector workload: -Note that it is only useful for index searches, not for sequential scans. Sequential scans will result to significantly higher latencies and lower throughput, but will guarantee 100% precision and will not be RAM bound. Therefore it is possible to use a smaller plan for sequential scans. +1. Increase the size of your database. This guide will help you choose the right size for your workload. +2. Spread your workload across multiple databases. You can find more details about this approach in [Engineering for Scale](engineering-for-scale). -For more information about engineering at scale, see our [Engineering for Scale](/docs/guides/ai/engineering-for-scale) guide. +## Dimensionality -## Simple workloads +The number of dimensions in your embeddings is the most important factor in choosing the right Compute Add-on. In general, the lower the dimensionality the better the performance. We've provided guidance for some of the more common embedding dimensions below. For each benchmark, we used [Vecs](https://github.com/supabase/vecs) to create a collection, upload the embeddings to a single table, and create an `inner-product` index for the embedding column. We then ran a series of queries to measure the performance of different compute add-ons: -We've run a set of benchmarks using +### 1536 Dimensions -- The [dbpedia-entities-openai-1M](https://huggingface.co/datasets/KShivendu/dbpedia-entities-openai-1M) dataset. This dataset contains 1,000,000 embeddings for text, with each embedding being 1536 dimensions made using OpenAI API. -- The [gist-960-angular](http://corpus-texmex.irisa.fr/) dataset. This dataset contains 1,000,000 embeddings for images, with each embedding being 960 dimensions. -- The [GloVe Reddit comments](https://nlp.stanford.edu/projects/glove/) dataset, which contains 1,623,397 embeddings for words, with each embedding being 512 dimensions. - -We used [Vecs](https://github.com/supabase/vecs) to create a collection, upload the embeddings to a single table, and create an `inner-product` index for the embedding column. We then ran a series of queries to measure the performance of different compute add-ons: - -### Results +This benchmark uses the [dbpedia-entities-openai-1M](https://huggingface.co/datasets/KShivendu/dbpedia-entities-openai-1M) dataset, which contains 1,000,000 embeddings of text. Each embedding is 1536 dimensions created with the [OpenAI Embeddings API](https://platform.openai.com/docs/guides/embeddings). -Emdeddings of 1536 dimensions by OpenAI for dbpedia dataset with 1,000,000 vectors. - | Plan | Vectors | Lists | RPS | Latency Mean | Latency p95 | RAM Usage | RAM | | ------ | --------- | ----- | ---- | ------------ | ----------- | ------------------ | ------ | | Free | 20,000 | 40 | 135 | 0.372 sec | 0.412 sec | 1 GB + 200 Mb Swap | 1 GB | @@ -56,8 +49,6 @@ For 1,000,000 vectors 10 probes results to precision of 0.91. And for 500,000 ve -Emdeddings of 1536 dimensions by OpenAI for dbpedia dataset with 1,000,000 vectors. - | Plan | Vectors | Lists | RPS | Latency Mean | Latency p95 | RAM Usage | RAM | | ------ | --------- | ----- | --- | ------------ | ----------- | --------- | ------ | | Free | 20,000 | 40 | - | - | - | - | 1 GB | @@ -74,9 +65,19 @@ Emdeddings of 1536 dimensions by OpenAI for dbpedia dataset with 1,000,000 vecto For 1,000,000 vectors 40 probes results to precision of 0.98. Note that exact values may vary depending on the dataset and queries, we recommend to run benchmarks with your own data to get precise results. Use this table as a reference. - + -Emdeddings of 960 dimensions from gist-960 dataset with 1,000,000 vectors. +### 960 Dimensions + +This benchmark uses the [gist-960-angular](http://corpus-texmex.irisa.fr/) dataset, which contains 1,000,000 embeddings of images. Each embedding is 960 dimensions. + + + | Plan | Vectors | Lists | RPS | Latency Mean | Latency p95 | RAM Usage | RAM | | ------ | --------- | ----- | ---- | ------------ | ----------- | ------------------ | ------ | @@ -92,9 +93,19 @@ Emdeddings of 960 dimensions from gist-960 dataset with 1,000,000 vectors. | 16XL | 1,000,000 | 1000 | 1345 | 0.072 sec | 0.106 sec | 17.5 GB | 256 GB | - + -Emdeddings of 512 dimensions from GloVe Reddit comments dataset with 1,623,397 vectors. +### 512 Dimensions + +This benchmark uses the [GloVe Reddit comments](https://nlp.stanford.edu/projects/glove/) dataset, which contains 1,623,397 embeddings of text. Each embedding is 512 dimensions. Random vectors were generated for queries. + + + | Plan | Vectors | Lists | RPS | Latency Mean | Latency p95 | RAM Usage | RAM | | ------ | --------- | ----- | ---- | ------------ | ----------- | ------------------ | ------ | @@ -109,13 +120,9 @@ Emdeddings of 512 dimensions from GloVe Reddit comments dataset with 1,623,397 v | 12XL | 1,623,397 | 1275 | 3700 | 0.020 sec | 0.036 sec | 26 GB | 192 GB | | 16XL | 1,623,397 | 1275 | 3700 | 0.025 sec | 0.042 sec | 29 GB | 256 GB | -Random vectors were generated for queries. - -Emdeddings of 512 dimensions from GloVe Reddit comments dataset with 1,623,397 vectors. - | Plan | Vectors | Lists | RPS | Latency Mean | Latency p95 | RAM Usage | RAM | | ------ | --------- | ----- | --- | ------------ | ----------- | --------- | ------ | | Free | 100,000 | 100 | - | - | - | - | 1 GB | @@ -130,8 +137,6 @@ Emdeddings of 512 dimensions from GloVe Reddit comments dataset with 1,623,397 v | 12XL | 1,623,397 | 1275 | 840 | 0.093 sec | 0.124 sec | 26 GB | 192 GB | | 16XL | 1,623,397 | 1275 | 940 | 0.084 sec | 0.108 sec | 29 GB | 256 GB | -Random vectors were generated for queries. - @@ -141,7 +146,19 @@ It is possible to upload more vectors to a single table if Memory allows it (for -## Methodology +## Performance tips + +There are various ways to improve your pgvector performance. Here are some tips: + +### Pre-warming your database + +It's useful to execute a few thousand “warm-up” queries before going into production. This helps help with RAM utilization. This can also help to determine that you've selected the right instance size for your workload. + +### Increase the number of lists + +You can increase the Requests per Second by increasing the number of `lists`. This also has an important caveat: building the index takes longer with more lists. + +## Benchmark Methodology We follow techniques outlined in the [ANN Benchmarks](https://github.com/erikbern/ann-benchmarks) methodology. A Python test runner is responsible for uploading the data, creating the index, and running the queries. The pgvector engine is implemented using [vecs](https://github.com/supabase/vecs), a Python client for pgvector. From 4f47ce1fc1e5d071254ef0ad331bffbf7515a0ee Mon Sep 17 00:00:00 2001 From: egor-romanov Date: Thu, 27 Jul 2023 00:33:57 +0300 Subject: [PATCH 55/61] add charts --- .../guides/ai/choosing-compute-addon.mdx | 28 +++++++++++++++++- .../ai/instance-type/lists-for-1m--dark.png | Bin 0 -> 261792 bytes .../ai/instance-type/lists-for-1m--light.png | Bin 0 -> 60653 bytes 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 apps/docs/public/img/ai/instance-type/lists-for-1m--dark.png create mode 100644 apps/docs/public/img/ai/instance-type/lists-for-1m--light.png diff --git a/apps/docs/pages/guides/ai/choosing-compute-addon.mdx b/apps/docs/pages/guides/ai/choosing-compute-addon.mdx index 23b5c4f722f..0fa2dae726a 100644 --- a/apps/docs/pages/guides/ai/choosing-compute-addon.mdx +++ b/apps/docs/pages/guides/ai/choosing-compute-addon.mdx @@ -4,7 +4,7 @@ export const TabPanel = Tabs.Panel export const meta = { id: 'ai-choosing-compute-addon', - title: 'Choosing you Compute Add-on', + title: 'Choosing your Compute Add-on', description: 'Choosing the right Compute Add-on for your vector workload.', subtitle: 'Choosing the right Compute Add-on for your vector workload.', sidebar_label: 'Choosing Compute Add-on', @@ -67,6 +67,19 @@ For 1,000,000 vectors 40 probes results to precision of 0.98. Note that exact va +
    + multi database + multi database +
    + ### 960 Dimensions This benchmark uses the [gist-960-angular](http://corpus-texmex.irisa.fr/) dataset, which contains 1,000,000 embeddings of images. Each embedding is 960 dimensions. @@ -158,6 +171,19 @@ It's useful to execute a few thousand “warm-up” queries before going into pr You can increase the Requests per Second by increasing the number of `lists`. This also has an important caveat: building the index takes longer with more lists. +
    + multi database + multi database +
    + ## Benchmark Methodology We follow techniques outlined in the [ANN Benchmarks](https://github.com/erikbern/ann-benchmarks) methodology. A Python test runner is responsible for uploading the data, creating the index, and running the queries. The pgvector engine is implemented using [vecs](https://github.com/supabase/vecs), a Python client for pgvector. diff --git a/apps/docs/public/img/ai/instance-type/lists-for-1m--dark.png b/apps/docs/public/img/ai/instance-type/lists-for-1m--dark.png new file mode 100644 index 0000000000000000000000000000000000000000..713ae4f4459cb3c0248a7eef6fc01dcdcebe1dbf GIT binary patch literal 261792 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%0Dr;yh$Hs@8O_5{hI|}=X}-!^-ac& z!Yj!f=kC6zcB$9CchEf+FI3}6@rchmhz9f}?cCT|V0x||^tYn%Sl#8;{~gli4PfW+ zs*x1v$fUY6+1mOFAryVjBiRx~(Nr!_#;L>9u$#ATutffap~)_(+Sn3YU&RANy=WvAyLknkWA)wln_vKcW+luWTHmS%h4&MjF_^h+ zfmQxf9Y!=27jAbMbG#)r=bX;}ZKG_bwuzoJdjy;s5ztWV2d3l(ecD0zmwZ7G6l8v9 zfI^DID)P-|yl-adDE)04`Q7AV_0!z7fJLOF3w}O3apML@(nq&V_nAyB-iC{)Yq?p~ ze04f;D!Sug3xY=p-|dk0+k`tx3`;Hc$1|nSv9K>)W2+#(O!jw&%;W=S6%5{IiqX0$ zF>Ie)G9-pfote#Z=~Mt&B1K&D>OtS=Z`gYyZyU>d_}@6`6KB8;#VYEyY3BPTnQ_!9 zJ4?swjRG6{I|ndM<7C!e-&61%1kmWg(Md(zMTdY4<8EN&X>hyb+KrJ5rd)ETMY=sL zywv3tPpk4@$sd-Y*OlFW@9>pftxt@tqSsr+s&llR6n2!5`;R5rmi$yU#HKwEpUP0E z!Q~T;nv9#gS7EH8KMh8G0-fkOK!T6cRmm(us6gL`ZiacZ>?8xEbHL4MyJAwU-JxzM zEtKsnOE*!TXXY*#?H*~yC^R6makA+uj`@&rC}h7N3@>v7Rj*}X4?Ze%@ge$C={NT^ zi!K3v0QwEdj-aSil+l1@`dY3#^SOb&#H#j#$BRO&Zs{sozdGBX6GQ zIZl{pf~QEXNa2AmrXw}I_id4-?K&HsQp;e;!yI_omhi~P4+b3fv6(j6h*@YMl zwW4xO0<9cI#?a=jciJ7ed%1dO>zsFi7XnvgR``Hp6Q8~8W6vyMGi&mxp1iPGG&TvQc5LE))>*3V{Sb+s<6^;YVazG5F3v zEj0=BQpL`t6ZNG7^wqhas>4URZ-JJ2=(9?W2gLRQY*u!eZiKPdJrBfC#81oR`tbfF zaaEzUs{m&dFM%QP*iTz=R^le94L?OsHA!oZ87{EJKU@VnGO z?Nv%TUf6ertZU*U;z+a6z)|+=&iIaaSxNZ+sw#~h0w-E;Y#+F5xtV6Fexg4q5^bgK zFyR$ZW2(B|77=Z9=gVu0T}V`;xuKr+zEwT$>Y}iUcQ-$+K4{(>WvE!!nUyes{uzC? zhr$^n&^X1P&<(vwrn>9k|AhA{jw`bces>CPjh*tcG`lO-sx&>H)b4MR{Dl&gcl&#x zxQS?~V(9OqX~og?b(&@Tpk#3bswSkm5{RmK9e;WQ)R49|^%3q-#?lnA<;1Y@WjJY! zeZ6V0@=BbMT)z_`^4Sm4tkiMMH>fj6tq*Oyv26kd?9;ra`!Fb_bRF02qm$32isf`& zJbNa(QlM>!7QRDYl5@tL4~-+eQ%!Zp?pyjS=e_#6>d5f)ITk0Kg5$yP?pJWYAB&!O z28Y4QFA7OzaID#JbzC@cEbMu1V+CZk(IX2rJ9wvLMYF=)gBRT}M08S;PZ1Bv>MEQO z{P&jpU3LGbgqSn3INF7yfV}-`OYKn}k_sLw4CnMJVV%vPLLz1t_9?6^Goe7`H|JTo znFU8a68t&gZWhP-pf+q9f)rAoJ}6$Q@$gR76_32)0Jn$F-FwEsBpTkFq#FM-YvH(- z!Na##qK3q72C5eqI7Wa8+MJ45kC3o)+0n%gtXi~!o4M^X@>NOTa|Rdw!`)D?2=CE= z%`jx}W>;Oq$MDYryF?az>yP^pKn6ohqJ+yD>X5yqwy}JG=OYI>ohx5s&($kdcLw`r zs@MbSeItI>K4({rE77ko3^!^c+!B-p?`+1VJOl})H;HosD@S99L7xxvzdnsC8IxPf zBx0z_4I*}!vdG8M6oXFW2{^Av5sL_j>>S>jE1y#y_EGcrN z!f6cJBnhtSnbgLWQuvoQVT@IN9bDa(UT47)}ljKkU~xN=BWM_G5^S-UM7Yf`TQKg2;lJqz763S zG%Tg|6fonl#qpof1+V3S7et~b^Vgw#tH)rMuo(Ylm*~vql<_43J*lpEU$;t3n+;;d%HZhk67o~|q@xemi-EWSjh) zDfaPMmC7hKJY{JxtZJpVK+rXG!TiO`b-|CZJt)~mH}PGDfN6?v$I&L8#-m|m9dRzB zk6y(3b;MrZXRh@4XE zZ5f;dSY_<6l>2%fy1|9oO%qUSH5`l~rRpEE*3NW8|9zd_UWM1(rlJxFxmU49vhXVX zhkmu11$0bg(nM!?Lt!Fyf>K3LHvBK0Xdi_Ev;|6Q;aJUXq@DLkG^(!iq-``Jy5Z49 z&6xiS3;#Oj+!4jDUJqPD{E@e41<`<3e4MEIDxJuJ{x3Hio~1W)V)sM zOEN7FBLt&kt+#Ic%Rg~wE1p02m2hba2Si}=2=Yv~wnt?O&} z4zJMl_HqZprD5pE=#QiOD2hpp-oRQg7+QP4QRf-#q_A06dVQye(i*M z$9WDfqf#7H2oRN?gH3Rk`bNL(_dms+)+vi?U{$CQ7B+)ZjNP1&1%iWZq zy1||@y^S}}%5rql^Db|LqPQd8M^q5MJb{L{F5r&KiOeDml^T`}`X|h4tmE%c<1<`E zKvD0d0X$PZZ{fjXWIx@SJr&QWXV{?jv8A|;$YM$YoFCbN3$~63VN1&|5dX>HS)ftK z1|^-VhR3&)5bH2H}-YBvzya;hA&pBvFaC2V-x2#%6oGmuY$5> ziJ78(jZ4`>yrvqKz~Sy(nkOYSC%$lxcQcOEv(Ngtx!PMzxrW)^esxD)Eg-kW1c~qj z0uTGX!@BII^IR(m2|kLaB`ZZb?eO)uoT@@OiyDMBc9IZwX9Futs~lD;-$Al&e>3EBN?w_8%;NJ}@TTKG_% zvZT%kls(bSZ=Rh%3*h7f;KNYww=Ze!{5UL7E)>28V4AXG=n3WaPGk?HXg-U_GvmJt zu5O*+Ji1e^x1Ia^+026a`nL0EV6e1Bc)@)tCd4A^Y3c>=Vl0SWq|wZg*3wx$kb3ts z?jLIMNh#HUi%tCi6{8;};2np) z>2Z)gUmp=AUf^c0Gj#MS2L3?)ld9;=7NGCQ?+Gmz>@Ev2IPZ~9P9BoTV9n2;sL@zC z^%f$I>~epeyyA+(Y5-c;$Ka-C9MbN6jP~v=H}OMzMY)UXFPsU0mX-b-vT{q4^+?om z%cbnhrIaJH#!11Ed`}I~KVuTE1hdw$qLnr1m+ieJKIL>^_>?bQp==0}-E(WKt7sOR zydd?5!&pk)E&rM)@+&m~HgndEUdnflQ@EGNiz^F~vm!aI-PG!xAMcblN}ZY}pKSi3 zc#9<7T8RkEq`@27BanC4zy*_bE%$^lhq~mbzN&8UX6a5 zuI456?}Nu5Ll_BZ9-Vm25veNM62%@poG$9pEHC=>wlNGj3%!-Bud}OFJ5^JgzVaIF z{Ocsfv)(AOF^0*Uv)HZQ?;w?1R}OWKuy*CIcccz&&SLUYU&|dc-^G4SjrSS*y&qq+ z(x5ltJ_Y{lYGOUrVc$8kU(tlx4%V=eOJiDRGLkd+t776zF{g80`*i9~ZkEIl+&=2O zcGP{=TTad9`V7$M}uvv%w$ zZAI-)3k`Z?3&`N=k>OTNLwXYIG<$-UbW9HaAw(7!kq@c?#d0C4k5Tw)c{|Rqq~u-Z z^?95&TTjSS6t1FW$wpetPHs=DpVsUe4b)OeB^>dS3hPptF^V*JZbZ9^FmYM_!Ff@r z=_1`G^gUqYdem%WV{U*fXP4VVUGpIP?IN{8|F@cJ>$p^X=y*bCXeM~I=(@CwIN;L% z^fOQD?w@Fh*#TvS$>?vo@yDfWFEDH+Hz}!p6u$GYN6j^Lr1yCDADM*}-LyyB?FlJ_ za_U3JrnL7PmU5ijp0>^|9)XuX?6y3UieQ4E6 z$b2-&%vxKgv&%bY3($Cnh*ARLfHBD)`f-82Re`;vLPV zc6VoD-DH0Q#dz)JxPAf08cPs%mZ}i{Wj*QNeK(hE7amq{w`1qZMuWbM>0NqB=PWrH zo%Wlpeur(oJR{jR#y-kqb0~x!M`PW}WkH2@0%#AhuzbXvZRgQz%ND>#FcE3S^ExydrrH;iI*n);fe=HQJnLPssvM}MkWN?2Q;-%T~R-cbYF zcNnHq=K)`QNEmMSwqdP%?6s=B?Aqd>)JFZCqT-P#+SJX}n+EuSzHy#}`9*7tGyDq0 z%xDU!MAFIQTj&-h8fE>k)XdiWJ6sEl-IVqWH%I7aLE4Amh}#&`@Iu7qr@HeY*|~Lj8{d3LaztVnI5mNFKt4qbd*X|IhDbr|3BAL^x81M=c6x^Ows=Vlco)+EpU0-bXV+*>(9v_W=UY9 z5LOsGzjn0yUw+Mw^D4-F$hOQCo+|p23E7wD=$hXmhCjpCDFlgM{44uEDeF=f`|1ee>ogv>2U-g&OyZDR z@vGwpadCPWsMWol@~89XC6%xaU#onn_)&IwrgiTWtbF&g>#CNnrD#03p8JqCSnYR# z;ir~(4_@i~@Wk5L5>vOIk+q$FZdZR_BZ2F4ap5!t>u30U4=<1#oP`;TM}{^)?1p&V zF`ru!-hQz(6;K|)XE#=kL)3nm_3vOwob*>jU_MQMH^d8naXBAUs0x{MA-68*=Yl9| zaW?Ds4Nk8b3DBu_+qJVkVS?VX%z;4kukKF2-`H4d)`F7=VV{_XMHwxFP_$@bUlg}e zk&8Si0UK%t*?u%{V;??`da9@b$INZyS3BdZXXLT_6dw%6*7xgfI84@dT~E+P4Q80E zLzWWteb|GmRilFrl`a3|!#s1*#)NGg71-}1iFLxuWqlr}t2{7QQu{0YtI&U1 zf5mBQb+^eQ2Yk#|R-~;MvD@K4Q$WMERAt5#Udg|n=Q1PwltcUqlB&}<- z-9}jqvD8q+WZL(`q8(0A918pPV#p`#;C#%ew9lXMNS{4F{M4_*B*w}aJll`iSkyS` ztkq02w-!A|G(Zo347>82T#v(o^mldvLo#mZ==i`H6jm$eb*(hqz=`tQ#=K*&rgIdp ztV?6zjp0q1m7~Z;^sg9ABwG(X~Ct>h_@$-gREMUns z{XbeQi=Ez9ohAc{SSnBME$n`cJjqFN>2kSISeZlgNe`y4h}Sr_S4@x~4|e@ZYlYC6 zlgeiMg@l=PG2bN8%ASjcS2LSCoZ%Hn@NX#+xa&#I+oYES^Zx-kAU`8}@&6!}BkF~F zya|$GfAtkt&yD+$`_y&=fWr>tz8UE~tbeu8T3OCGfpgsIQcRZy6RO z(A2#@?=F(?rKH=ft3ATBhtnR}q>zNuj3!OFmcZ#$gb!;;pB0c=Q()oXf~MWuGRR5* zd@al!DrNTn9dx+H5BQ>qcsuZj#2N!-jH!x<2y7_zIg9+j!*vgC16H4A2oKSJ)*qY` zdr=jYRBKa?w;uBT6%b%kv@hEGAd^ah{;MoWq_X6BDy3aTSHHAic^afijymrPEtvx;*Gy-CA|7(@su2uuTzU!CBK~b z#%qmQLW2H5QQ`{&YYws&E*D?V0Ao@U7Hk=+>S3L<2PcWi)|eNViLkJNv~Rw8(Eok29iGLsgAA5`bygvR)LK;xd79I+NYw3U zJvC0nXvlxq3Z`3r=9l>RG+89eG{}OH()*h;(eAECeS$o(ws>W*J9Y-!UUje;g$iU9 z?yxb`QH?*wERi;9OuR~*CL}eH{Q#0dsUB6Hk}USMBp^SbT)P%N-1p)#^30$R#fMge zRl|8}$sIf|P8VzL8wz&3CQ)7Q^ihM+%C3|iH*$b;uV;OC0YflvhTWQ)fn1@=#ljTa zSHLzTN#|%13=eTg#lp|W$1ul4JGQ<9_@Kz*Q`Ux0^toj=)i}9Xtp%;H&6lg;_J|vC z3ytU(JnR6Xj-wx3kGS|Pv|CD{oF?Nc^q_}ip8$xau9ZJ!YXdFSK6WI^f0r6JQP~TQ zD`U&KG(tqKbp;scPmlkt-aq+9_V~x8nyDaa3HXgLR5Dl0x)sG>o5*+Wrv%M;M5Qvv zuRTs*`g03!HR5;4Mr5+OVG9*u6Lk&(kqqVIpCdM8>ojE!j~K12y?`QE%@V%dYB$U7 zF|>^)={+8}E||YC<+nMvnxb4$jwAp6sXl4-^RI=B#?IEmb)K8*Q5ajMBiP$?LW1mh z0}sV0%)+$JOG*V-{4H&Us$(PeHR4;|)TGGiAdGpNyB#pKc`6A!-Pa6>8bU=eB7G=t zc1sxTV`aHEga(>Pc6*!+dh(RcD0@+FO3zpnO#2AR1lg}Dbtn|(m%15`f$|1nxzN*i z*PpTwz*HkdBYJ8ER#=Odm@+J**|<%nms!scukqE!ga15hnP^Zhqg(Sb_X;qvmBd#* z^}z+xe+hJMTBTKJvl`Uk92~EeYzi1W3n`htf-_Q2)8KjK?mfT=OlP|j+6u2Y(DzID z#~C_v=hT%_%a4J|s)$?lbDdM3h8%(U+k}1xD}TF;&lqN5DVMfKYSO_(%KPdX`H&A7 ziP|4_pZTI{zn{>FijLxKOTz)2|&%)8A43#2RocVY0fv4Un3yM9{;>Ut- zn`#!UgOqcOS(T}_Z;pTY`dy}YV)}Df&l>MZ21P&}alq$TT#;R>fJ0U)bJ_ zh?dP?h@1Sr80(s9^?o~H;?4X?a-P(=hdJFdV*>gOq4z#SNL5g-aq_g8VRyfq0!sz8 z35X{Ee$Sf0`@jEh(3J24^(8@UsNn$v)VP|HuQ=J5A@;~l;fpZ*cV`=rl0K#0q<3-e zc@b=?ADDP=?TjcW06OJWMAhoflMnrCOBW{#7^D>eD1xY6JxFcqu9>oO5k@A$rHe+) zxlBFuXKy1;a3JEz3O0$leY8GKCT}#p=Bu>T-}}QJzT17Qc-Q&~FL^qNCrQS1oSf^$ zsh2Ncs&QVMykPuau6rB9g1*;Up76Jy!zyY1N%>UOOd)U-$Lwqy8L#(8qvhD~tT;eI zBRn*E`*{6dV1hZqETGMJR7y=y6miu=3A4U}?r?wAA)b=F?Lj%xkDg21B@ys1yyIYI z*leq9E6t6SSZ=FXf1%WNBIjC;-~hq7n2?-f*mUie!Wt58zEZEJZfAiz_i4!K$?Xe? zjKyt#^>uIxqKnWlWjlm5JZ({rAXV=IimfH=Ow8j`F?=!Ia zF|?i$MwjJ@uo63A0=B0g!!|slBWplfg9;%rI6ZVlozDJM1v`GYVVAwJ@mi+?qrYz2 z(yIkN9KYO$=oj2LjA&~L5mcpen$mSUKbT}CXkXx4kImj(pmCHeuXu(s9aff7I57o) z4Nkp`81pM!UDIz`qj__m*tieW#YQ5u;tP_O#1#GNoY7}`dL!eu@2iZ=@Tj7mgjH*# zPKK2_?0o=@5LeVb5}2&u{j24FPm6`{D6PGHnMRY2Woua^kQ?|h)9SA#|8P`1L!!0N)QV>FyD{aY4?UyGUO?$c2zF!)^pX%NfbSDc2s&J z%0W;3fu{p6`ELC10gHSI`=sJ-lFx430pv5Kk9g~@*^>X1J`%l7H!Ue2f15Yf9X_=2 zl5Gwfc~mEc-9B=SO4UIC@8K5};D4#AEgRf(A92)Zq)aRU+5WU1CP_Sy=wj5*!p-zb)GRwC=2iAiiMj>J|p1QlzE@f1#?`&kQ%07V;_;MX~+| ziHlCUWck%tQeP;KJ*dD?8t}f%No@ZO#sOzDeJRV}aS8cd5c9IHtMt^`3vJAbMc4I3HFdA&GWqknz-^*ZGQD~A zgbH5m_$hx!ATm^pEj5W&Cs4MPI1U!@kO4U=W;YdoHLEt(E1}AY#hHS#@T`;Bf zsexc36;Q1R6o*JHs-%j)vS_Vn=d2Vw=Bp-1d`??hsW?j!lo!w)_YS(8k7+?_U8@34 zE)q_)4oe|?ldozjSxVY*>rV}_nVFgJ$M~YATI8)p>%OMg z(qSrvbH_u1M0Cic>u?lO^1Ge^vlb%Uc|Di&lVIc9sz-x+oEZ5L{39qFe?@z969GY+ zB!vBU-@LrufWv7mz&iWx-FiR3rG<4w6c{;7x{Y_EA!1bX!=kMcFK&-eZdCz}Itj0M& zo&-BVb(b%PYppRxqp4yH*#eB=Lo{)r0l?Sr7d~JTNZJuCzI7keBHZ-m3Kjd#CBccO zome?}V}1Y}9@>F1_rV=(V1c`>$3cVru@sQm?6c+76R_w-schSSv_0M@KK;_{1+g3H z%PN2u?Ht2HAy%`!6V;hNZObTZ}(@0KP|i z>8W=>fxrY8Ha~jN$Z?(_Lo=0QaDnb0&ajNvYEWldYP;Zw@u=VMt8f>4h@lY0&P%?t z+84>sM?Wyp%d7L3Mt;)30i@7H|4II5ex|d(N=_%2q5YA3{LNl}8xBJTh8~h9mg$2j z4jpmLg!7fN%AY^r6m4X;jq4Eg$jWj_|79|fZz;Ls@K%;zFM&?KblFZH{!I9U{V?s| z-|b%vaSaUOc@>zchuGmH8AD?xK*HS^`me$DDeQ^+D;6f}hCWmuYxI$r;41mG&0RE7 ztciLAfKXgEiK6JEI>Y|k%FM#UdShn)$KCr=<*?gN0dj8cF^Pibcr;W-rvjIy&4cQ# zE0TX(SC3*qA<^kW-2n+CJ{bj4Esu1}oFbZD;0`OXl@xu^QJ==pEmL-Uv7Ei6Rf^{+ z;uhC}OI$P09@)r?$IF@G=LvD*v`qbip8~IZ0FGBH7mx{f7XC5BvVg5T*J^F2Cs`uf zi2M2mAZg(5Qn@q-Wch)0>{m$!?s-Kuw>-I@`LF2Z&<%g!(`Hwvy;EZ-RV}jS^Rri7 z#-Vc5oiGNjoUwO&6W`p0{1@rq0A%T>(Cnqxm>TD|v`1tGK*pboZBjo8%wwU>GPE%t z;+IS4Kc57$&tfT@L%(6 zX2Hycl373i6u5{5mqg$!;l7FI^pV(PaY+(aMIa%QMWasc)Le{SRgiM-EALk$5KoTMaeez|i#o_R2s;>u-&L(kcgCRH z`)2>U-+`@zGMjsSz1@K6x#n%pM(_SxU&1@=;q>%ATymLxL2~4`d1!WA7R;C6YYpR2 zCx1p5b#_3Bx^h%{p(!KW`up~H781xR ziYF4t;E%wMDpW6*Uzc|6u-Axo;l-Qm-T*Y4>hP zFizP9I?gW;wSWA&jv`S|4D3cKhwBPIGVyCSh zp`OSJr6^t&?mXVtH;dryG2m5fD968uf~n!-$s^H!gE0%sO+DnVUd-$s;9EE&g1o_; zRsS1E7PiusIlcyYO+qy-4?A?Ql#BpZ9(r1CXNbglz1II&U5(KvA16n{_^3syr-3j%mJo0qk84r58qr6 zTBv1%$+qhJa)~vHk19Cd{+5tEH1cZdKzMoH0mRUnu#I<%8$q>5;3wzO8$IYljLE+W zRyYmxAq#k4&41Y-VmU5{|M#2*y?YztXTK*fKZn9xW@f*h#prnOVHneV|&sW70L#$=)-gX zScKy~ey$n@HBP$iy$KdxK(9YrYdUBcNDl0kGW{c&yH_Tgm*%V2lLm^)mm=q@0PgO) z#I+RjDxUi!^IdPW!u`uxj=A>Ha5moL;v(6h{KP$czmh zz88!L;TEhXKSC`?BmXX5(c8z}lQ=wN`8$c4Cv#ig0x6n>yfsNxCe5I@Y44cCbH@z5 z?(Kb{wPOm(cm7b1#fWV%0&~jnS5Irn-x&T}SoOu#jN0F2@5y;hS`%TUt5tdpNu-ze zs2P@DWhtmj*SZinX|y09^eb7aO!+XnEUs2$q1N{4tPz61%1Lq zXveDbxW}(I&E7x4HQTXb-SsYQ5|Jc0W}Isp9?oy9typYrodyb$`1BKu^!biVe_H+W zZ29ZK7;F|-cmneNFZiu{B8G@Bl>`$r9Rob@f&i3VebMS*2LTXQBKA8Ndk%)j==O@D z;uoA+D+pz-nj>?oVtf4h5*Gg%wPR3=e6*y>q{qTh$YG}Q?gf*DPrd55Wt*`=;i~TF z(mFJGF*H>uM_{TNC6_jQ&CspDvY=}!I0|`Q&?Wvd$SD@ANJwsctdbj`m?>yhEluFZ+t{4GmPYXqYL^ zPAp8)C!>w4&)I69GM0gyE*mpXk;uNk-vofRj&#yNBjmP@9*Ys4SRbnIY-h=>_?`qM z3~^%X2&oDkS=T9k+TDxYB-9Pucp8{#Ox7L-$}ndAXwL2xi;g&DN6&P1I(YCk?Yq7Y zd5%KQFL#7C)$q#Zf4^E;_U0ls>9^-$A?!<3oJMJ^nocYjlIC%xt$LHx8-tC(G)s9d zS}T0=HNuVe6w&c5=6{PZ*%CVTQL@>Wn5-N5oIM4F*6Y(Cj>E9@`u+9isa7Cdo!IvS z68_(ALAGji-&2GFqr1`wNZM}u)FinHh7ouq&s`8zMNf@ggb~07F^+#?R=qhMiCQ-g zdhyy$y8J(;21>VM*n{ocx>khS_}M>D(G&a(w;+fInTuAvBTOpv+57iDmd=7Ls)lRZ zq@Wk15A8#KkxSwIF3D=wb#0? z^Q1>vKDO8Yl4xBKyt7K%_*NtF-#9sI;80x2&URR7f^m1F4OkW9 zSrEX-r^e8_EANau-v25T6h`A^Pfo<9&&jls(?j_%#Cob^V=$kqfj=(|i^&r$%m{ci zX}=a7vA}`7mtjjOOpA49+X)P5KaI&4Wte3f2*>^GRqXZjx)38YOyDLuQ}xl%H>Un} zE4n6b>__&9;Q}h%>^c(bN~|uf?tz|6{nm3%W@Kr&GKzwxZ1}7-;b&U+-+Gaa4-Z^s zD|{h#l+sE@F(aun`JQdBepxvO&^j@fI7`+xRM3ey|8Vjm{YgMW|Lsr%lvKhzz(>Z< znJdq91dv1?e;unE1c8u1FaXK_A7flcEarHkajGcM=%xozRs^l*Z{zWa1h<$z~GF@o#+?Ci9r#nUQ(;3qii%9x&G$yb8~zD zB42i8;OH{6TKv`1`|I}mMF{J3$x1`_QIf_pRgI%2Xh`OnEBI+*T*K|r*djNl`=^xy zFKnz}Ood0Yj#S$q)6wsYlRgx>G^kb+GLOv!6i^JQS&D=1f(*Pwl|fNmk=d>p=Uk{h z7Y?;$)6U{2zSVm2lzd^|c}&_E6hlv?`Q99Wxf-y0hO2vLq;*188fUib{=Mcn?fX?j z{*x(;o?nT>OJRea6EloG%MpJgCF@3pd}_w)Iy;DmLy`LO?2t`e5%D^R>%Ngj`5=KO zh-k^|;b*&!uu-(uLhysEW9-G9;4LG;=||cbZ$(G9ze1nLs9D3W6wOA@I@>w6^y$b} z?F{5vjBsOAg{?~059(cDaMRS;G%4w=`Lbi_ge+C!WvpAIy!~?2(6;Rj`xRIr^{Z}G z@m0V#6B89aeKS_1YBYK?d>GK=zlEL^SJGoq?zpBCnJ|$4D=27r{`)GTEiV^pw%@7) z%^8qB?XIUw&a-*AkkyWij8B~5MPg^Z7W!13rudf2jSbSO_7e511)YtEzN&c2>uUYme;JKTSBy1V*JTMsj<9Vt!0p!2tETH$x99V@XXc)2MPpWye6 z*tTBq9)0-i zY}}Vol8WMLCWndCHT2i9l<;8pUDH{YA*#v!6^1DpbkVK${p#ydnpNU~j3CTd!=;j` zS9zg6W#I*D6y^{4)G5FCZe^js-_2DIjFa1dV*V794hNboAPp+4s>^C-sRhQ+HjDgR z|1av*orgnR{cK{b@ZreF>T6-z+!6?9_5j|aL_hlJCg5IJx@&uykn&q)K+l`ZDxNd2 zfMv0_H%t*R4$G<+Ww(1Ii_(V^tWUu9_eD@$j^z?>ZFrt=rhA&X{Z&(4p9`#nnLtV2 z3JaYfpWNWCRf%u?plz_M(Vg8B{7&a3xy3Dgr@SUDvO?lYzfTvdTY4resc{`Q(A+ZQEjfK5S8+P4ATl3!+EW_9(!M|-g-QuJ$o<^L*yVVpNg?qSaQn#WYJ(v_1KPcA;k z2m2Ac`qMtF3rPFxLUW;wOcpR-KHx3jI_{pA+|nAs*L!fmuH?b`Zmhoe&>0V|xexw& zI@W5O23aO*b#(tZ$qp$_4xBQ%eQc>euqTMMVZXyX0qhbi$ugEoaQaxpi#2a@7{tHX zQ6CMQpPF?Ni!*IfmE3#X8l5P1Z%1p#`W{nevTSK-sK??uc}+3e@y>Uctnavr!B=hX z!&17b4feRMjhi(Jgt&&U-n?mGH(80?}(Yss%9UL)JB`9qR8156mbWOr2loVo)WcVwSM=PMZj z>U}!<9R@>!M%MMWfvx*JGH{SqyYoCkW~4Flx{oyu)sH8L6x2F_Vg?E#cWthVpk`&y zt==OCU4#QQJ+A2Gpv~t(1X5!zQ2sVi2*^T0p{x;B=T^pJhhsd$;LU^+;_q!~9y8!= zIT>jx`6R7JB;_U^g~t}Leck(U9~D@A(D%59%Cx;i?f;<>LTY-^qHoZ^_qmnGr9s(J z*aKAfw9&P$yd*P*oW|nEn<A*oo@3y8nq>d*+uKlkY0R za_+7zdy4ZOV-5DYzoBSN@!(D?2z_sOV`2o1jWkC|YO;}oKfJwkN8G)Ix*$V=Lm;ZF z5=hA1QB{|_XaZ`8;?L8~_sExb3}8SH2@3iKiA`^{@`1;9t4~O(YA8BnP(NM_kcd)* z1JTz%Uv#MZFqc#L7peQo5g1*v8~RNA$M%@maz9;AJMSta?*b)doOcDl8{h=Gz!})| zxBOUh?D)Px5zwPNYC(-y^|KpG2x?pZ9m-e}j=|~FZxp;Me-E-!tY3zO#3xvErt-TT zK_*d(`4eA!w_zZZYU54Pwi!bSI&^_)}&eqlv>a$6>zl-J&YjQG1b6jTUvOf%9u0>c=_1tgHG zARRci6;WTYekYS;EYEU)OulbE4E!06l0Z%%|FbcUK2oTAkFooId;gu7U!s18*lNoK zdOlK8h&7h`*D}pG{Gpf^Y!g-1JUT@9s;Cz(5Pp*-yHAp*WRIwB(j_O>q8n0U6wWdp+ zWbEHCY}FGd{O2GO=G%)Jwc~S{5R6C3m@!-)>`$;ucjj(LZMKcD!?y_?t<>6qjL7qI zz(FG*E~L8o&lC(rhklx-_qi5Lc>fP~GMSoIJuSY8M@7e;!$a51^#|MBH9JyFl=4v# zR6LAJ(z-%N!sCbkOt004+PB8)#CBxy_0g(n4Ur>@EE{k?lIOsG8h?F!X~FFg_RU}=+9{`@Vt~9eKNQ!b zV&%1CnvCZJ!fx#M&{nCctmJRQYl)qEcv-T}!p=xxtalNwG3t^;#Q-TL+Ou5;Ce2A| zj}m+RIF$}9G0Qcx|6%e62euCeZ02g;+)E&_&-Ux6(S+Apg+++v)1?He!lx+&W^aqhAAMrg3$gU#$>Xnhg<`alZlY%E zYr1I2K@#4nU!yfkv47qCl0xduG$fksgsOlRjGzSfCq~y!ek?y(@TfS+Z zgm*w;nY@ah8&~W3e16ZitHs|)PrAKWY?Sd?Zh+CuG9csv@u)=`J~@8XBI?Z!$ab1< zTqb^$7$9m7exS&u+gr`#p=O_=MUB~^+t`%rLoZPQ=u!>cm=}21hr*J?b7t)i4PMms zyG)>2L>qOoD<-m-vtKA8FgJpt^oBQ?^li`eqT+o|novpwJ$U-XT(JM5@9W*1$<&D` z_i*=j8LM88tf%gtdhT8fg;tmyQdT(^Jx80gi#8MV?*=pHb0k4+JylFAL|(f}_#F%} z=BWqopSPpW7%9*Rz?qXvRF7XDdm~Fkgg(Ps>*No<#IJnL5L)v<|^ zg+tW0Hy{w8nRDw(v*=~HU1*;bZg{-#@l->3H z$@hML)ei7WFCV04GagZs^=8a(gq=0t{j9rZV!M;;^fDK;S9*vBjmOrk=F9m+TNHm-8AzAi&y<$84xij&w>%|krDn_gf^@bo> zFDE#WdP7yk5>pn+d7GUL+5z+*5mB>SanTmF*e0*_p1X7IF};QO2UDwpK~ ztZUl-5k@_OgN~p6N>_>xc^vVGBc)7apBuEWaRA5X_pVyg;qm`$PJ;!LFfwq~T#^=SKuf>%nuA(@L1x?yaqf@|O@} z;`a{H0R(NqrOKmJBMKjWJXhYq#04|89soyc)^=#kmpa}Lv)lA0=9fTrFxbxh6~0sr zkzW{bGG1xWYZ{QWfz#Ey<}xI{EcJ%r=_|X(yFo-c5-%RcYJm-39EBPuLiLyy{Spfp znzICI@qe}gDv8SmFhcq$uRA?afVfB-Oam6S$Ee4SOj8)686WZ-vVK7T1%jsz{~P&q zMjR|)ZSrfZpOgs%aNe;AT-Fk4{}FOCt>O>T&;1UHotUntE_IsW>WR%-oHz+$+Fdo)Z;MiD$l8jyge3`$ zanQna_WJn(W!_!UU@=}L**-GF7%{%g3d^6vHo@;qyxE~g4ryj=*93(f00Yv`seeu8 z*2NgoS?P*1E^OeH=NpC^y|pd8`tKqr$#5UBzc5V<*~jIuy0vYLQ;nNSuz){*bC*f4 zuCZpS>$uQ$Z){ik_vRH6IF#8SO6rQ@p>to3K^$Spo_Ybl5jHv?2RH%6r8i^OOe1{gNaJlG=?mG(`IBJ5R*3)nB#v`e9|M`DI_DMRG#mIDP$Jf(y z4*@p#bE-7%M(R|s$P3$fIWKqq^4?Q1L|1qT+gO?(@zzL^XEnLaS|&am46*;E4|+dh z6Kf-Sjgj^n+v3hok59Gn&*p54+>#sQaaWuVL3TPMHSzSVapL^qBx-$JEX37rA0_ww zQvFn%J~4$DESmP~H2INAaehj)Q%16V&&aI{xG>E2a%mYiK7+(h_OU;Ej?p2A55?*t zX%B}iqML`t&?K~V*0feJxTh741`SUcd2Q?_raYTQ1~w$0Sr?M?vWYz(;{KhWrV|QE zWnhih!+4fe0k$zS%^Fc*&+@}sQ{H^GW;*35^gLXmw-_26xJC}XnsI-VqG2Esv6TLB zNzq?#uGD==tcpQwaDkmlV_hAGIWv`ZzJzA>oK8uC-U4hlt38fXT3w1ULzb%^v`82B zqErjSrjQD|uA=a-D$7hP;RHE`u5OJy<3in`2CZ=m+a>t#(CL2gdPFoiSr+H^UX0gf z#~3e=x-qJ&cXQi$pMaljE2oYURi;|PFc6YCT}O}N|6CinNUZX(a%m?0M)S>Pxl&%| zV%6=t54#f3ZxCFnR?MY7kg(|Dqa6KbNAhPGF0&5{EFT{I9plUck1Iwq7Ytud(g@cc zXxe91;nDqKIEmFd@vKg~&b`-*jv|r&ywxZ`?qbziL$c2Z_6_R0|xq^i( zAMjwT@sQOc1%DH$DF!A*kvVvs(KAH&I?T@28-4#9`3gVQiwN!*k@C07nUpu7EJ1dC zqKXZ{yY(&55#Bi45|hbm$ls3rEAa*X7*mt?A6+qtwLtu}l?_{&n_3Z3RpmI}si9wi zre-nn`}N9!o~hqnWc
    Gvt{0+tw{jCL2DPG({SuW>Xx3>HjgJb;_MFw1*kXHPAk{ zHmjiXsBxRO?G?nSKQOf=fwyO#0!{F0T>&;k!~Ed6j%c1r-RJc%AgU;p?B)&^2K|)u zu{}VIq>x(-}1D{nrC75{^~5v)JH(R30KU)4tas^N5G9g zfPeq};WUu+tXY~28+YLD_AB|lenZn~gs!d85U(NSAn^S^b4tF-QwyslHdz;p=!rxt zcAtEfRrasn{2rbUm|5oy70wXLBlpPZT2FVp1z*rYHXSw6SLXQT-!H_i&6@@0)$g6( z7oUAqjpqGv_gFiOIO;{H ziv7P7HCbWg)p!9l)<;5h3vtgs?V9T8S>;Cwuu~awtsSQ{#GJ_s3p6XI=@-tOzM+)l z1#P-bK@opzj;Us%Ws*AlKN?@Fl4|Wti_%g)CP6SkHiCn)b6_+K?)Qznn>Kk(L1zxS zN~zjoqL zc79e?Jr#2M`QW`igY(?Hua%W4VF@et&rSzcvv7&kaCG{uJ&>35JNu4(G}UErAe(Y) za7p6?YbRutfN$aH;FDlHoJT&R$@@P)+1HWy8-~$ zeR+5oWY}}1*G}`T9U88@Z?tYxB(ctb%0WSmp+#US{;BP8O3HLqQ{8PtrejVB@c0|L z@biJk1e%nH&RZ|8<^6xN?CjGQ?Zq2ZN_z&gjA8VyKhGNvL$R^K0pDJIC`~gq-lLH@ z!#PnQ29uHLmX0Z(5wsHI;a#r@dH+szGi*cP7c&CBsS=e7ec7P)ehT!K9?C(4VHjQ! zR;bE8t#_*i5?<9GYbSIZdDgvJb|IvTGHdp8-qu%yG*~o;#o3pnt^M2>5c|VT2Mk&p zh_arv6QJ3j=5-`m4vs19dVVoy^B3(!S-CfVKk)X8^A(-YIkkdh_aC=JFU#R4(%Hnb z!bNmHkjBOI=%QCQ6?qW-AgX@p&)9z}z#KcXL4vvk%R$t>w))U(Or~HK5%XN%oN!r1 z+?E%#Pk!e9pmw3!uL7u3J2leB*JNsmaJ)iCLMF)*9`!E*<0TpD8`?4?mx+bbs@Q6_Vd6Q|>6!HY_`9PD$L&|kQ;)Q< zjY}l!p+)|EsY*1?T<}Bq#W|)!ivf97|J~8POUy_K>mrVf_4;H6@V1>vy(3~6@QPTn z^{FdF`g%TrP`Z6abfsPm6A z{ZW7FaQoa!=gDkwYM$o5r^W7rvPz$Qa&jv_GB7r3u{n(IWnh!WPCWd@SehcfGrMYg z{wU7*LOsLylw7b(PL1`lNMqRexKt^&+nxEl-ym+oYp!-Zo7BuCW#DXk7!RLyVqDy& z{;r|V{6}Jp3)|+gf~T6xL1!5GJ{Pxk(S(PzwfYwRj&u$QbNa?V;{eeJQ)VP)0%pdp z8ywFRfHbQy&Sgqcy?5g`b0z~EGq`=EW+OJdjNQq1cFn7Mz9#u7qu4#9k5V0?Uf6$h zprS2g{yK=kfX8ZjS6749I?$5|(KU9DIKt~1I;DR48Q$|EJx1$9yc=0s+$H5#)7UySDBw3owtAXTG z+s&m2&?>BAuTZ3^ElM+pRuO<=c&6SdglHt$c4pwbVw) zC$EGGaRe47K68=dtmJS_sKsiJ=(D^09tu{jO@-0d!=noC7~`s|1=r28yHm_BsucoxffESoe` zV!}+vv&v6}e}U~IsM1p^)INDF^tG42ZoT@;1xK8e-?TLn@W-Cl7oX(+G~|0Ii9ZLe&P!R3DUX? zQe={7cGUzw-28c@a-szZ&Jc~hYbzwnCo3UOHbVU5SZ!_#UT9uFSTpRmxWjvN=B^Pw) z;UYf7*G)~yn0qZo%IWht8Zi;Anzw8mt<65STR)N8&snVAD^k51274!xRY-|oT3Zi= zep{}~QKS>rfR~HQ7quTQwy>d&f5ZnTOI!8iv_~C?f9T|2-V%iXqMT}B=w2TxX3R@* zA1#{wFQ5^`os-_t%=65ZpxU9G*PMVy%c$2%IU#UHf1`!Xi#j?Yp8(^1dpVMf-jy`D zr@yy!>oZkhuO7Mas7~kBjgpd(Jye@CrCS--ao=t+NsTsW|9!{d!T^iB@!okAzfRes z>5kPyTz*)7m#^bzZVPkgTZ*8HyKI--T-V2_WK)rP*F=^r@|^jzAeu@tU1>)p*01Zn zI_R*!-b%5^OQFbpiH!~LlDt6&Edceb-lr+4VqH>m?6tRoOc0~rd}*3(T$B=c5lZEUTB3J#k!MeE z3bHAaW#QJBi!JJ9t=8Cr)t0E6tsA@S;rI!@y@$kXCfcv?Y+XHc&##>;VYRB}Q;0*$ z!ccb}b0F2X@+C#&gRJtAeva)sE1<>v%paPGj2UeW%SI~%S-Eu@VUGTzBFYf9G=_P54+rM`n z&L1~?l2E2Uhs$dKrrhXvJ`nfuncPDoPj885gMbSANO(V~fXJYY@<~Ix zT02;D6>JMMaqd0zG0AJH-a&Ls;|T0XFssEHHr|8S$v`8LqC$K*<_hI~}gCpdQgN?on--mIKdy@0y^ ztCT&wuGB0EMgFQ5#vtXB(aN(}Hyh}{h(A$uqsr{1i0e=%_Dg@t&Hu*0&ZWEmwuj;h zpe1Z|rSm!w zBR!Xqt89%|R_}K<)Rt=MT11&|BS`GetSU||X_VpT-+vKM8mi{axC2}LLkjG=KEXG3 z$Kmd9$|vda|80mr*DBi6XEkLTp>~7WKZ)vtowj@<%nja#r3zTGSiQ9Ee3SkG!kLyk zhBvTNfbU7!eprS;_fA*8(g$Q`p8Z1iYO&K9cR+QHJ^5R*ggeLdryA%-Q~s%aUBip) z2)o3z`YBhbodh=TAyl8ep!faozb_f12NJKvG%$5sKkifaXuosvX$ttwiIrVvb@+>_ z3R1r26gaPjw85J)T2g!>4 z(84kPK1CKdB${C?Pu%&I@T8%rm*)9blka}dc&uDcf^$oPeWY{P6F4S&+aIG=0IgOP zM@x+4X86k#GCLYV?nD`blU$Iop7)25#*v4jkz^h%4C;N_YqIDqfMzYrN0Yx9k*SG*}bg)7mzCGGpdj4pFT}7a9zLsZq^7$MO%QM~|ZVS-@|M?L&2LpMidLo9e-wy#hW{Z{w|t)iUqej|)uqn$>07evQJVLkFqVUjbS5X9{hPJ{QzDG{G~#~G z{sb4)J;%;i9ICq~22jcX4kA2923oFo_vf_SM{D8yd$XeXG%rXq2>pRxYUHYyj0iDn zDJ=5iZ~NA|#sc$}zZ`36FiEW-QAlItXzAZy2)f_xf|8rJ2kK9~TB%~(2Q#Cu(xFM$ z59ozebi6*i42&YripvFo;4O;w>$|afVXMYwouVWkvyp4*RCl*lJM#4c_@w9Qdehp{DUmb9 zL5+vA9Mzw+VT(A7T$*P6=^m24r#VqWR=Qwm7G0n^`jJ zbdK{aBK$gTtBql2PjxEE`&0e#HA;oOOgOR&9SDs4aokof7Cp;h`qf(mJWp6#!ZdDM zE-IyxHlCagRNcg-?0ke{_f6QfkG2fy5JLbGDdAOmc`=Ox0by#tzK(TSzflJZ>_6Y) z+M2j+94{bVIk2l!pTirKVYPSfH#2B)`{Ziig>IJ{+&vfN5)wq}=ad85Stq`H?`vpr zi}w!rIBR;PBjwsIuGUYYA~!1`qqt6PyR@>JYHo&M8-Aph#|#l$xvof9)b{3 zFvAZOg&jF0rS&_jCQW-|ovEDMq!qCU@$sb>dlvn)F?#D0zEPY%tuU(Q>SR&x>GSHg z(Btph4|ELQ>px=bdIt4lNP>;k{{{Wo9|Z7=uP)&|R%(1_z}>Y7N%wfVdzILCNNn72Ij;nb8I3@5{DW98q?)Q>Vvi#u);kE9?1d)GBn$KcL=EU+!YGYv% zz7P~cT{_HF%thzPQwekp zb_%ooUDsa&aGMyz&kWHd{oGuo2fQuQ{6y`NN=-UFqV6B>V3J>bIBX{0xZ8ENpP!ve z66&^F9eUHF6uTvnGkHq*s_{01vAa#*;~USu9&!;*XJc`Uzh5_me@l}6xy?`;w)sWP zUZYQT|E5->_kj`8ACSA6+APy4Mru?q2g1L)&$r5ZHCfCW*}dSsQk$kaNiyib9HDUD z^3G&XmeK#9{`-nbq8FVx+zeb+U4;52=P{tH7XF)fH>9Qn`bn4>ErqzhSB5Z5jG4uS z+)Vw?y&*d0HM9LV<`R&;M@M1Wtfh$=La?+~i*51D7=4h=kfk`rGvmXk26hh!XmBh$ z^~Ak2#az$onLjS#{*V`*7W6jKbdj5_1qO~32A#uj{_B+h}Kc zC*E*GmdgiR^Pnful$=n>6{Tslo=~18ns1o5Cv+> zgJ*(jB$X&fN=jf3a*DvPSUH3H2DZ7*f0 zOf-tQl~<0ETV?|mIp+*J2O4P#FF5E=5Yq%f|; zVDz;14WD9u4QX-FK<0%}2$RBCoPZW+mGDH@lZz?aU0>3G`E&PFzE7flH>rXHqn49l z){do2z)q(GU9SE!4sl*Bpn^*-`vOOU3MM=>d%RQvtdyQ6caah*w?O{pxo7^7S((x~ z+m_$Ih=V7;_V$eN885FcOb9_w9ec+6I$ussJ#POx6+22d_q&RuP7sb~+^@)en63pM z4+55@&{>*S8+EV#lg4fp4x&o!l-^7dm1!~TmU7g+$iZt09Tj9{7gfu_7+ zpMMr0`8>>F(jw{|7`v~87sWTP&R`A!;BGIIQZvwY> zs(aMz*4p(Hn4-3VH@BxGSbxDEiMFpN-Y2Rr&L@=D8))4qcByrD@6Rd^s*9$Q-1u^M z5EKPPqsK?sAPkHiKhVm0@ejdTiFJmb9nN0B6UCx2Y1$qoC2~Ift%ngygXE2b1rQlm z{Zx=he5H6O7r*h)i*Z_C66#^Bo>5Ga9Gw?MwLLK=`c5&*7XIZ8n}^TB!F(ywZcoGz*#YT`|h%ef@;a}($BIdA(P#I{6dnm?wvsURQs z*%MK$B0aPyE(kjG->!o00qs_~G+vCJoHOGCc;cuue~XEpb=b4447Bu$M;@f(KTpo2 z^>+Z?3W7*{c9dmb$Wj^jS8J=33DmaKR4afye)cAMbwya+Vq?WG^e5zW65ZT?FbKdb zx_Ucwgm!lwo0_?N%<#wUb)PZ^9Q)Q854=kSQ(66Sip+b!Q)VWXZI1jf;T7vtX=169 zmQW;RO_2I9m~7NS#0gp5Zw7x zjJ)>xH4lEb`4sP1?nEaxGVezi(h!<&5#>>N{O>i1P3e}1m> zm`X?^hmUe*jdvcD2Aac@!s5c~El|9o5umvRxnTJFoKKGt7fK_%5A^QZMZrGgpw0x* zh^ei2U=-VN)^^B0^zTVL7!A_~?TUX`AB6t+8G*Jdf082Q+Q-$pwo`P zbK{Vaa}-wg9Gxs2Ibfjyb_N4AE-S+)jM zcmg>(*93>YY$MD_g1I*kvvr3P8Lwyip~V*~%w&p+?{V~mgMnHfRp;m~&g-@VnqNNW z*u!6x^HRg4MOdC-+g`z(NfJ;ZF({|WM$lugkd@I*y8ZZs{&G)^+API9ORD-jo`0U* z#xp;&40`ACXu`0+T$3mnIXpekNy0B@?EPMbOVD=x0b?fBe%QT!l3~q#Oq-mwjpvG8{+W4EC)L8ZbDl(8_oQS8Tyiui&ZeYhMZGg zuh+wM<~7EtL%2Y6Vf(1lN@M01W4+I?PChV5!S zhS|;}mJ$N4W4Vmf?2h;`nR`JuRlAZ7vgKwe_f>;{9(vSi0DI3*kDoo4N%82svN|WQ z2lRqI`Ws2B28^MzZZLXry%_g#L7h-&pcm5*xbm z4<}R!TF=d{+m`Jb7DgE8)0c!RFk8M=vz~cy^>O!Hs!ktjMu{+bXorM9TLCwz(ctdPK{AwPYqV1)Qd-r6LY2-<{9o^A0-(eA2g4xoSZ)X*rZO*r|*b=okwm%-d ze?IS>nAs0D*17xsU6=MZ>z=m*{c^AaLN0(WzuijXF@lqR4f37LP!&%8!&rYhA zj{68H&(YCbNe|IS&3kkU=V|wpKQJ}2a<5V1?9Xn`|0XFk>Ma~bCvZEA;4VwA@!oTW zXBlIUy}ynb8Y!_o%1(yy6TT)9UvTYH>)^_Vr50<$U{q(U?O~KaB~DVuK{Y{kHr6c z9`x?5`YvsAG^F|iBZJp2K{7{Q(>Bj48QnZ}c3-<+Um2j7pB-EesnD;KJmAzyQx%Q< zRQ-;!K6?LuswcmhG9$de&Dj$k$z0DsszYH?ZvTAgmb_uY-d9V;Op!b0P=~zM(rNM}A z9P(b=;GJTwB^|!G5fruX77H|0r(qAC$5u9WBRb`anI{d}FK*3>MireWCBe`(0tl)Pte}50)3<)OjTqd9p%KPB1G9jX{)IG5eok~WQm->O{t*UYBr>(y>KTQUl zCA)c&4Uy9G18-0;2yvFoZ)f6{Aa2d3t6Q=4{2x-czjs`GnKT}>bMuPAR$y)9guFB! zZM4)85>LLZD|G{(0vD%%$dmii0m_#4WaSl~C`$maN*}_M-cQ zfSh%z)+VjFOnhA7Vn8mK1d;M9gb68$@Uw<*HyFTNInSPVHeXWq93 zc8uA#eolC}$9@yQGH1}O`{u>{m;8I=EfnvMA7%7IXSSEq80d;4f9{a%KtpPeSiEZNt0q?;ES$Y3l!bT-Y}JsRSr7 zN-)c%n(!2W!y5xRnvaGCFISzUEXbBmG7_Xfc^<5?R;Lzm;l#}{w4)p6aFWL!d3aqS z+Cu?3h7u=@=*Oep(Z9>t3cNW8B1Vu;K9J(&&(FE_^cj6DHBDNED}84eLB0zP`hY~C zDCiGP4^+d6ma@Unq8h1%nY&y#9m=qdb#NG`_!!c5na<%`hd?Wsb;y<_l-XVvz7Fco zhV@O%4{Zvt*9vc>VrOQ@r1Ziif?@yerNNawp5&hxQ)nwFlAp8BS3F`klAAfTg&s~4 zL+DQ%(WUwE77u5Y0;4Zu)o)i>C8NoKH2<10OW&eKMMMMjPH#sj>A8CZWD|$+9=JUY z(80gUzs~)^EtqdFX!%aXq!yH@Zf74fDNr_GVy^~A3IM@dhyf}pnobLva5AcE(wg?7L``?GlPElPoen@3FIExVR^3}y(G~!R< zmJbdGrUOtCfm3PhKJUA8)yAAu$uLa1jL4$EOO^xIDtj73 z<-yLvz^J}dSh-uJ(U+*6r{B_8QXmuek33+BeZ#2sIvJ{^{b?|1=B<#>f<~qo`quZH zp`Z;ARP|jw&*?)#FjiSix7p97sU+-`Y?6bJAsG7o0_lHFpda&#V|Z(V$R$L%X8Vq>z=#Hz6I{5nd4V9 zCh(HjU{K@LFJ<2alX-3IuVysT4an#~>zXef;*vWV1|TMX((`Z9)|7DVn3v=*Tc7@= z5LqjcTtmPTx;ViY*PA$uE|y$#ax|Z zuw~=a;#B0Kq=6YyYFDiDvJde~FvKQpX;;@s<|q?*68GBEc;YSM(|$ms$-hl`%6WFj zKY9$?e;JaTQ8`c)I0WSe@YXecl!4o}5ur~%t(1`ZWvX@x(}0l>R4zeq4C&2d5mPi> z?>DOJ9Y{GCWOzro*erP&)-@buwNb|d{xg-U7R_+m%37QH9-*{huy1==l^AO?VZVH< zh|Vr+k`DqCYg)7lz*a`;AgvsYM_}$auw#|2?ztNLHO0_Cz|3*aFNEkoknWV|ev}m9 zU0tIa{iA+u$@u#DKapJZy+BlNf$b%5a%D3?^n5R_pZ`4(P!I_a{&05u8{krAm7j=6 zyDNiq%fM0hJ7~xJ?)LsUn#VY%56Hjg88)j=R`iJ6C5_C9faN%@y<)9r4NRVTQe4$z z>CWmAnnY((l=@?)j1}vE=v?wMle&ApGO0DZG9d8F3bke$Ii%=?UsG*%v7^`0HWfc1 z7AN}(enk>8X+X^p_}A=MR~pl}3gl^B+i7jSrYt|NK{(ukuiR!)mruCymtorbu$^o1 zU4Bz>JT^OFj$-u0U++27wGe+oc?6}DW~X{dotBX_d|8#SUUh-C1w&*bPy9h1l@|6s zhiK-&4nk0v2;(ie}c?vpkP zejHto;qR+QQRdO3(=BRuk*7g@J1+U@dh86voys1c^Wr_jO=$6YM3k2D9I|YtCd{O! zKI$JH)6yuelstl8H5`e~*NDc@xjE}1LSTe&25x?1gWl70EtNF4aZ6s8dCzBpb2;a?U0Iry zl<5f($kHAokcY@CnS43tb*H?YcQEfh1 zf;~Isb0`zXKl-Moa$dP zPrcaJ9ep+qs5PG|J$&9ZF+`h8i&l3^=Oa>p^0sAyf3gBEi7g8{^8|$HP%^N5T$iMn z-+05CgqBuAg3LK;j>q?79?}ClU0+^ryp2d2P=95jOeO8W_yOB5XbZNng*H7hAkJZC z+bCz3wcvl`%;&RMbvr~@xFI;_zTZY|u0Ez|Pvc{;0j4;ol_I5kN+tN-ilw_;5FiN| zo)tbBS!G1gzDB!I-bG6*XWP#(U%v5m?Xw{@F0m@OU%;zR=1p~;tw|$^?7nuZ&pKAL zw}Ungr?^W=17Blo{yzZuKnA}83}M5Z>dnsro9OGwn?)a>05OV!HJt<6{FctV;9BRi zXve&V?CatM{3(gDlXZHYeo%fCfHy`O`*zF;@z0mpe@;8NNUpA4LWd|VMr-lo<&a{C zVQ?VVZ%i?4YdwvGQxZCO<1i5CBKT?#m#g*3}mA^9~hwU8mY2s8SbGJ?5CH^@E1sg(FTXf7m zXYmg{*$7VgobpdrfgoMH?%vn=mUG<~{IC38bE^5M?39?oIcoNGvX8qjDXJIid2ZJv zce~1j+K4FNQE_Aof-!k^3jZpAD{(7jCh+cen3rzhq|Luo95ZFG0-IW?0t~{F)fR3%NEtnDiw4{vd7b8HnJ*8zblyO7R!Xwp!P!K{Jx5QT&{^FqnY zx*>F@*IBht-i$;Na=6kXn`Qi`uAX*7i|w#2L1y7HDE?>P%x&}7D33{Tm8^YAuQGSs zuIaSYVRXFgWtoi>-87lM2z2MK@<^8FSa8D&0w)3L}|^wK;6((wdN$=dWyTiG4|Z4rOf_`h0v zr|$s!*%tA>#Q$`B&OI9cL;##qh;Hjs9g7!_@3f7UbDWtM`q2Ev@$VG>Jig)|nQNn9 zL!-g*%jY!jyW|*+|H|bR|CsTwE$#R4t$x+VO2<%%Wk$=>?O5wE6(sS0!O8Lif3!S~ znv)^ZW2yOAqv#j5V>-dfn?70m2BSyY+;7KhhaLWNFK;^*B^zWDqWi8ln(EVZ&YXM^ ziv#OZJ0+PX>4uF?Bpl0JiKSf#EiwA4@qhf%UnB9O_~*`d{4>SZZTC%!?{B|sW8@tc zUN*C_KDrkd<0T4>Dtf(Vd_?k%(5*Y$(SN`5IunLh0TNk8K*Q);wdb~cf5g&TG0!@n zCE1k6^qj%7APSuqyL2899Q}!J&nGA?uKXi%p$lS3mW##o~A2uhSlW{5;&`;hwsh zH~CP-{O)5$%dhUhpkH>%fExeB$8@Z8pS;;;4HW|c$ayz{cy>?^dZ9y?A8DW2=Yw>< zV*LB_@gKIndi>w*eVWC;CI07iT2a-LS2Krry9O;ZD*p3IzPRh1cO&enm~<*iHC_!Z z*D|do{yDT;{9_aU+*938Ccl;-9x?O&V z|Bre?qPv+x*IGh%&ZTYeHtmhTCLPb~9+_e<40!4I_o8*j|GyvquiEaL7T@3QCq}-p z`OE-Sl<>vbfxtBj-w5iNJbH4?Y3fMeRC0SIQyLpZ*7#?llO$iP^f`ftPQf?lp(SoE_O*zG&TGz3 z(NJ)5bg+y6r|$YHFh$O zyB0ZIJoR{Gxx9>2V+`^|ls*0>-Z;gP&BK0c{L{6xef6zz)oM`#NZ40*v%X-@-0;x~EPh zQ_1l8aYO;e;5B6`d7<)>WC3Pe00u;3@{Xc5p?kNe0P>DR+RiJ9ran$j8Mq+4$eDLF zWRWx_cyM-~qSAY7uZhX-BG({m;yaegOnDzfz{^M2UQw*poR&(kndkSKm@!tuF>6t;VtE6c8UH-@H=% zPhp>o|M1JJ$N$~lr}?I6^u`oT;rmJ3znroCtf9&=ADqe zSm_3_^ocxTnunK-N|Fg=BQChuR@}E=8?TkyTRnK8<4!=EbclcRD*y_BUau@pTsL3~eZ&9wG2p%cQ^nFB^QnwS$?g}8|KqXg z=i{I4c-i>B+gr9Qpu%S#p82>J3gyL>OV>h(@^ktF5IDFqmop5p2Qr;zpdz^iiqUtA%Ye@ zd8f0-|Day&v0*`%oOXC5vxs&)-1Xw1RJbUH#XO&gwhc8u}N+cKf8Sk=_*ODb|o zWusUOm+%R3-6bkzRUJyGtXZ{D;q_=UE81+csAv*zWr>XFWYy;f1{$^ z8D+=+vf9e;|>MHNCG+D3lIfFnjXhxXL&UdB}fY}p$cBoCwJ3l5{yJB zQ0NXZm6IO6xsK|SCLy4!NAPMu^)-3ryvw;&N^GmoZi+1#Ls=gZGWr`-FCLRS|Gon1 z;6G$QyaEfT8*waJmWvmmFE*?KI02r4B=JZK>U0zkxFtNQU*%ka__Gi8SMFo%r_2-T zlPLenMM?w2?pGX-$*0NSpkr?_xAV&j#6L;%RQw;J`5VOl-QKG;--{>2#xZDv4Vs9K zw(*(FG2@@!{np6fNO8_B9REhL6bli>=X;wSbu-&lxH-as#H7&CQdh6|cgRzMnw~5R zC+F+d)o{)ED4Psh)l-ci5kiLe$9W-&Hgh$8_UBy1#sk~XQy$AXaGCSWrB-%8`h``0 zclinVAkAN_8M%smz$qW)cVQV@y5=m79$s@*xzX#(N|W%kGtEbAiiFO|z0Gkpl21+t zd0rXNS|)>s=C+=|n1q9dLH#u7Oy664u=#@#t{1(sPx)4t1(%Bd=y=CJPSz@Sd&hQf zjC^OK1j>u;IF45?lq|r9l2%5wa{>kUGoSILPeEt*h@4SUK6_$;`}G7K2~22HQViJ) ze95Umb8xW_di6q0MA4PUtyzPNv&KA~Xs3=Kprijv9#q0ziD#k3uQ>*MX9dEG3&FfD zMH{pSn|fa3qBiD=|MkZ5$%25aBH$VzME)4Gm(L9oofw<1u5wQS(2XkdY&y3r1D&Kr zqv-_{;D(&Xe-D}`0#)D5lknk1$?AIsZ}UcRccJ+2eUdm%;y>(u@%X>n`!wTMTFmo# z-YAw0@OdWUI}09X%5yx$zt7jq6@f1q|1G7?E{wzRo{Q?w_7Kd%ELN!Kpd66+-||_e zsHQ8EaEWssOf;bM}oLceVb?u<<^Cwo}3aZhW#&Cgo(9YyBbdg8-k3?^a z6(SJ@$kt<%YO&-?Vk9fq!e2K6JaviJxCabMv~|CjcAu@JT%~f<<9iCix*6g!2by4O zjk=U{D@w9dPJSpD|2@eJ@=umt>swiN3J#lJi z{!g}>zA8RNb~2u^Wu6P%s@PS(h>!R%GICMOn+c)}pp&)*rJ}WNF0?ZiG(;!)>Ml0GB*O{|6 z^Bp`n{zD#SYLn5fP%%LG9DN>GBJIl}M`WsX$dFrQODuyHqX2I_@OM6}a(4Rzl((Sg zysE;+jV6z!r=I{;`qt82!+$>SSmZFQn*r=M1b?D8d!)#A!bi0sd}uUlEX}m}I#-L4 zhmcOPhV9p}Whd9+sTbQNr-U~yXs(y}pT}!tlm?Je8A zG4idAP{=qzyF6mqzwP_@)dxqOTMJcCMlT?O6wN*pr%Mv7S56ZtZOQccA6?)_Of!X3 z7LUz<+CZUHuBe&)k%a|6A~zG*lmSkQ4HTW?(SM84%~ytw8~#U2M7ClWVk<4^o; zoYer6k|T2M%n$X6OO}_C6Xg(-_eS&}`i*msdB|J3TVYEldIgcxT&2aNwWl`Xqj=bk z1sFGyidVj=T<^&(()O+~h7CT3zG=$7k@in{jZ96t6I675*7R9r!otglrmRcA{z&q6 z?Aq|z%4H@rYD1d+cJigC8ly<=zRGX<9P}8=JP)0(q3_K9*yDd<9Pw_;D)Ecn?)XRJ zajp2j+k3ZrW8@p#%tg5f@0lV(5d>yNSNi!(6rV}xSkap#f@CrOIGt;lGm~2tGiwsl z1p+5SN&GX9FyJdx^(pemF0Shxk8X07I}$k_#MnxYfP*ZAf(fvK zX#6rPXT;{TI%|E*f(u-}g(@Sgv7vED_5c{QkaQdY+iV>^1 z>1&RW`;~UcuQ>DK@$Wwu|I+7AFb?-^QY^p_4D(M&5N?#=#Zi)3iFUN?$^h4qcM>m zqQBVDOCtiWEZ{&ksrVlSR4*R0P{kY;PdL=A^OUoSvl{EYkc#7Fp2$|y?hd^p-Sw-d zQ;bbrv~U z1^aHj!W=@ry>a_x8zXPA`0~x2 zYu5x=PlhS@)vkZrVUOfUA5SoEz%)DMxJgGoMq$NIlKmXcV!|lFaMeFMEHrH~10pBY zLZilddk?h4<~1&XpXGzvr+|Cf@1f&^ZYAn*5NS13(4FKmE$`~{qog4E!JolQI;LT3 z4$Jm>SAv0p=Z)|HEhS6Y=lqH&>7U zE45g_-)+-!p>6WMU(5I%7xK6YHxQi`Y?13sX?X-cs-V-ty<~AZ=jq%0<;x_O+`Wy$ zWBy~@aFW++yy(hfg-`Y6VlA*P^8n{AsJ&E9k}D}QPl$~&EzR6s@m~~7{#xdM9nF|0 z-9$*Gl7`Y&Td?FN@52t7Y>RgQ2d8|t%U6wQS@AJj`eY^yADjN*lVADeiLGtrE4UVC zNOlL?9yMPvzs`2RVsmBNZDDlYmm?=xa_*Ua{KG}!-|zT8i~m<|H$H!FyPp{O542s8 zJ93NX`%KwhiHr-5OejY5C{bkso#*;pizqte5y(t_A%ii}CI}@T&AkLt>z7HgETCj3 zyT`ND&&cskzO|%f%DeFo8!mi_cIiyOW=cZ}CopL5&!k!|iGqzw&=&2v6zqapzw5x>>0690WsgCE7eD1F`dzhb+pUjKgM zvdiVz^OfV@u(hNYDlk=E-1E(dOo@%2`hJ}==q4XXE+;zP^SemZ`4k71yJR&^Z(#jh zWa+d)v5ZBQt%r_?S+aJmY^xeLOYLgSc#Z!wMXj@5A!Q5yc#S#YIqUR1 ziRlv+#=haDS>ZoaH{OtV^qU#GnJhl}-ifc7%ps@e#}f66$h+)np>@t} zvezY;H_w?zMjj-7?4n2K@|yAQKNbJDjmI7n&VUcA?|F7Ysx@_|VUxnj|ky-kLfi z0gCM0!&y&PIp9)|Vgdh3nYnr4H5-IZi>yJr)MTAq%w^C;g4&A~JWh0hn%|^Hcdh;F zg-ZEIEgy>JSX}TqnMa~AWClIKvD&!6(p3(l!aLlv^=DtL!=fvjEUaq&)1se@Teeu9 z>~Jk`Q95xvf@2Iwzm=c9m3c9gjVUIfPb09LSBig@=b8B5Eu^m)|95+*<`nHtpevvvykFc8-L^?BJgQB;DebVERwGke92O@iLD*WG!$2#ZCy>c3) z?{0nU+xP8nrv3*OylzMGof=kom6ib~{P`$+2@@Bzf1i);18hI#sX5jc3W_~7tn67j zjbZM->hQ_t;i=2mgm`Qngg4t?HvSzy75}*7UpW3Qcz!=I^1bbTV&of}xk=LJNBZ+4 zDGeYzlCFauf6r0#*fN`Df_-=ije&T2n(0SEd5#DbwPL63or>@DX)N4;kt1s?HNK4eqhEoF*E$P*g~V~k+|7V;~j zaWMuH&=|ODv91duzN26BJkB3-%;1S{Eswd=dlCdf^X zlHpqMU-R%>{KrD%UE=>L?Ot@9H_5|tzBWhs+Gow$@MR5kG$U~D&`xPBI-tzHAhILgIi9NuYyV72>(6SYioa~kwx#s97qALC; z)g}v5=X0Vndi-l+T|#EIN8%sRORO`cQQy^2$F(rxl&2lF=R zAU_3U5fgsv*ex=20@)t2Xd(Kcrn%ZAd@FQde>Wb7m}dpzxPu~N!Scj86TfDgFJ^P~ zS&7lGNo+Z__S7F+R_K4 zn-Lar!In8eCK8HOY%51A94qGu{+sF&-J{RI?AbrC(9k_va;{OX<;?@df4<@JC|iQ;=#ce7@$$tkjxJF1IlONC z>kXvpwvT@-b6n>kblxuhU%cHnFTS_k8zbM@d|lYFEfo2qIT>HZAH{JNPQsG;GXQ&^ zOO_M7C@o5TA$5)TC*7Zj|F{GBHt~Ovb}zcln@ju~WKr+cXB+<~wAT3dwTNrJn*SvJ zE7x){Rr%JWuqixg-*Gi#mT_stf1(A(JCozQ*7A4trA-Z5 zu%rAbbYE>nAEON!4C3>(v9rmMP4={%H#|Z;fm?GUOklKQV`NE>bL6Wa+ht6!oL2r8 zWEVdp8{mcF|Knd{9`S_46Y(GC?)axJ4z=}*wkxhXUa9?(jgfdn{OTpFUzH4rw?R5tYhj#_RBkNZe@3G{ahC(42-!c zGi@o0T(U(iY)baNn9Q3FU1tG(ov*O*mEynr08hn#EH2+7{x8(-Mb~*-;(s1V-sAX( z`tDi$j~qk3%(#F`PTTlLkAGj{A5i`rJ3!Ax+64bm@sdwNV9hzKBlG8LS)8C^E?ylP z|Hkxv7yqT#95hBed}9L>nSH@N&X$Ee@?BPQ1pk5>Z)O0>FX;DqX8+(kq^*j$y2;?0 z4@nQU#ky{A<=@sC-spDu!#-R5-=qz-2NqsUO>~=$CjizWI&ppO(DNn^(@xyA4gQ0D zzcw@6*G;0W&g!tD$FGS0&wn3yKK}XI9sm3IzuSAZKky5h=OXjkjf*kM=euUYr`zmc1099D%{fGq<> zCQWN{8bqhMi(sNdh{pDdqA-dpPS9dr1~d1xV`wekAwhQFUG{^8TOw5I5u?1>tC$1q z2L=Lf*SjKy4e%z1lsoN0eRq$WP6r~JWB4(Nlyc2i?-M%hmBqA~#6aln?h*%Scd|+9 zZEX=lwzcM)p=)j&us&|Jobd7uw#^u(V{@~Df!+3g^p5c_et+TkzuS8?iGOocs7}vX z0)&bkqnMceBd4bS0dT<*r5F93W5$aAJk{dA#z$XWhk0@;`XSd0U+37`+XN_k7-1YI z0N=#2$Y4cN=m;;gJZ1YaQ`gFCUZLCNT(#QhxW6`d@cAkTmHwQ~JlF6)<*}_SJkNDp zbb^e^`mZ~n_5le0qUT<7lyq!OZ0Sec-xfbo-wdA!y)u44G|<);bgj;njO(@XU+|H+ z`0W<|jb&EfFWW%;@>S#Ce=7d5*!qtD-=n=l{roH2FWDG*mzKp96$+WUyk|gNv~%Bj zEgAqNEa_KYTv(w)U>wCWD7dIl$-chws_Mf_PAWVSkcl(zGzWVwJcDm?CUXR3)gMh} zHedDQ^T8jiL+I~yl?yOl7MP5pv(8lOF;+}4LqvTjNI6j9zJU3eU zI%X|wLB3Ub)b}`0k*!JwL7^MA4jSubif_jY5_@S^*G+vOxUg;vr0i?#ASrLm9qU&S z7CxSwLKm8^)Yo0dkiN!|=(~&dNUyjKERuLc~)qxZ#o9@wBe3Y01$QsyInsGO-z z$Pz{P)O&1lqH>g(6jDqtBaLrY=_Lb zA{Q0XJ;KU2AbBX|tczqnE$#tiG4F)id4W{4l%4vB)(}5WS%{{A{K^`Mc;g}%lpygi zU+1sM!y7EQAtQ86WG?+k7K0YUDPs6$VGl#3j(NTK58a-P{{{c=_;0@Zy3PGJ5%f20 zzwDzl?=Z2M2mt*u!3MsOge$P;BVC>&ik<+Nl+56Q%o&fMz!<>lGs$st$qaptT)PJo z4|(gZNx!?AcaMXIgBB93n>XGBBu?*9wyMGuGhu$(;URPk8~ahhCIvRI`#H<-+vCiyBx*R=-O%_eo4Xa>XaBm{)Fv8L=FlSWyfHhEYUkY1pv z;?KvXy}jFeN1{Wv6JS*y{zr>Ssk;id>`k zx4@k>E4h0simIUMe1yJ>RynRZr?8m^VslaGy2h*&?9S&wGPbd@84jgQ;UBi(?*R$h zM7PYrq>ntkNc@tw*@Cxu-JRy#nvOG`Qr_|2^p>{Do}zov51IKb=WpNOKlq#{eMM@t z^#KZRX%1^0py%_PRgMHW-?DBk?%A&v1VJN=S2`QdE!&pBf$uo1AX4(j zoF8*HeTM-!?Fbgh8zy@C2lq2J0g4~Xl6Uky*NVl3z%X6MH*^7tfuhZe6j^+d-#hoG zf;RoY%MVlMkO`_Y-z=%QhVmu91?drV*yiPHEcUhH-^i}d#lJUQE*}4Pdy6JH7ZnFi zJ%$_Gvd;F+amBw04;jbtA7dpqRscHI+@48!p5Y@-IRsP8TnY${e>6FZr(PO>k$I%? zQkgd~MYvdYbB2`~HEo%x$a!Y0OO<1axZb5c^nX0iZfE2i?;7JK%YM9lJPMZ{n?jFd z<+*XXZjDFaSfBeLq7ixZBM1%6*Dlwsa_43|82?FT@dGh&n{Aq-vrU0r|JcNpwSoH@ z6TaFkc(Fg15Q_*E19;8&F9dr&{zVSl@xQD;Ua;LybAErjzkKyO8!gByO6#r3I|!0+ z;WiF!Edrbpk=1!y__<`Uy303RWxiChpJjf5NXOv%Z0M?4<0Hh2)=uBPH5b-PG$x)y*&Hppq*frjW=13D;&>-2ebZ*o}!oU7by9s!ICX!auLY=ZRwy32qXIawQOTK z9Ap!YW42wKDgJdQ#!ScQ7<8}Jlm4Rd@BWkVPnRzo|5s~%L7o1tCZ-8r0rIhIr`(CJ z3OwJ$|AraIKX>b2#+-gi8-MH5OtF#sNNF6JqqsPB*F1fUeYk9nVuuf?JYQWX{=q(G zS|rWjI`cuv`}yVzN}^ad^(e=KKZvfB&-ZyF*=V8FEe^t zrRDK>HLO0I`J6Y6eS`nL${IyI&$p~K8s4Acf5)~>;~Ou61Hg8FN@9Z0W zU4hq+f8ZzLKTo6dyW{_KK3=5xCgWwjX}qD3x7&H4o%P<6yn@s z(?}xTz#Kck;~iOj{EvC{aP03rWuGAP@TtRDqU%LkRfG=y2tzT5qGh?mF@LU;KRRHf zV}69iwcts93<{4`RssAblar1M=%-CUi=6d)Ih1ZpT)fl82iklduMa+N-E3Gs&cM2D zClWL-NPp_SGrnI!7mmft+Cs>Lw|pptK<~H~za--Hv5y2<{4j@;`h z-mD$>53>aEko{Wm-|v||6aTn={NL?uS{06%Pt8&Mr(;&0af-oXXwOA4F5}cShtFcB zZZOO~1{u4=zfB)?2>)gCe7u{B?Ybt#CXM9{*p!h&A#Gzc*3}Nh7E6&v^fX6Nk6rwy z4cLY~r_~KPWBZ}m&+%npmQRwk^Ggxl=A1WMJN~b9+g!R6J~8IdtITu9C5Z0npHSIO z8_k{OU0-f=x-+ki7p53IkI!tn9DDu|Iy>3N7;EvzG&!eR;sxh_QspW zcYBy5ZdZ9>YDaH#QKD8-hp)+dt^pv|3W1`S8~j(`$T>&ZmH~JR98UAdzy$(js4UT! z?LPEfcftFYgT>+{Y|;IFS!m8*n*lAl@)vnMt|cH)>Jy2S*!F_=DzT;MZKRBkb$8M4R*G35ri zqdu=2WjTp|%K3^R8vmjfsm`0mm<6Td=i(n6{{}6_v+&WP+^3OpUf6C<@ozo;wP50$ zDt7Y9OPp_Wj$NOUOZ%YV|K~aWUIakr8SC8S+>5)lxhDBoHnDf|IM2`NN7m=dbln21 zn;hhKG3R+hgfM=qFZ(Ph8~J(+Z9d0yGL>}3Jy%<$Zx~2M6I|ptd)4^Qp-;v?cwIEF z-|@ft_$#(`EpxZOv)#W+^PP(wIV6OcQXyN zKuJ&o(FDZ)(Jdd5OkqunY`6ke>Q(PEX_HJc|0HqnGrC2P*f$R%ce9=L{E;?Id2{-G zwLR2oy!eZm&tn4a#m7J(?nK)ZAme&Y9s5lb^CI)m)i`dfFLsbJ6vj6{cCr`6-VSWi zms?PUkTXG2^35mh3cR9Jm2k$RK|ZkW*s4O6xUh4!t&MsR4?E9Tgcm_TFzvCm;NaH zN8x$?svpQU-nKNHWtuql!tu|3{7n1{cJc|_@&D@WzH#xr?U#MW$h$O7`wSSf5~Tk| zA5P90xU(;VlJQ?Njb#JFPx2l4v38+rCwa=_D-iLHD^gNN;y^4C8jqohXCcOSA36_E z!j*ng@3?z!4fLFBSdtd()W5c@Xa#V|?m04EIpN3fl3@i>BW@*;3{CsAv!oLelq-2p zifJF`LFkK!nE&**N6ob_nV)Q)lUVZxvM~E9&nMg5X~8E8t_| zN^Mu$hCCHpC|{)c2!Axum9GVPZ?O_QjABw3V7>v=E5*P6h4@b@?-2hNY4_czuUZw$ z(!ATPd^$SBnetShAOE7loAF{U@In34r)L7oLdZ8FIrBy4Q_WvS^ed}Gp6VN_dAC@O zG4Iq0<2C;4cDdxTvRG{})cA`3>KD4J9FfNA$;!%)s%MHdMJ>ec#h*|7kob2ksMPS& zdS3E#nk^!`W3-|%3btZg_HnR4Vj=H^p)Yfx{<7W_VcKeAU;PTG938%hAwX`55N~Fo zPg}4)%zx%$?{@PqWaje}gMt4V6gkfYZz@O4^9#p+pT!@&v|GzUcg6gjHG0!z>Va|SetzwwL2W|ooP-^4co!R1_ONX&7_;!@Ov%3 zm`2|9b=3Dnu*SsG$X1-hrM7*P9eYZUa~}G5>*PR!2LvEGzslGJ>ci$e*{3#*z|siK+8MfZp1_4Xm~WdW;`n@8 zpdk-& zwd>yECUcq@V^Vp&WN4*OxUmHrDWrYFB)roWrCR{D;1lj z_z-ihSc}ZLrB9Qeu3GDp0F_v=Daez*qf_+E_au`ff6Mq`TQVk;8xd~Id3)LT2Yx#K z*-vrDKX-cR=D&%YziYccO7o3v6b3#Y-7i2HfnP-{Y!7SOk6AD5W4GvRqMoEPhn z&x4LsdXr8EM#^CY;&pPu!t6>(bjn~Pmo)@5;SJ4^nM8Z)Ec?uE)o1n(nXD!LWI-sm zTPKJpJV{2W>oNzQ|38o) z+i-}ljh6{1Q=0IhV}pV8;=3`YJMc8uEHf`cj-N=i`e;VobE$sir=M-~KjKZ~Abx2h zZ=l?RZ$2fF^Bi-GWdWqebw}@V@&7poj|cH4jd$_ylkMf>|8DQnc;5Ts)Mtk*guyQ5 zlB=BZ`p9*9XV)6#@N=L&{bVMwwUs9UV9I@#mm7YJlu`m4>8!tOQ&0xB5s6drMR$&g zsS*DrSG4%&Cb8LgZfR*E&UrLoog8kI1II={_<=V8tADD=1-SGh+sbu7o@`{Gq}vS*HtA=S^QTy| z!+0M*sjMI0>HLP3KCge&*ygLrGkwsq@2keYw?)s7`(;mz zyu;%_Ss+*i=m=l}y_q9=P#;NR0@bl&3cXv4Nhf!&C!I+0$%n5wsy{f%N!|n}D^A!9 zx<>y+e-FSRzM1ei5l!NYET%j&5jvf#)dAU*KI2(y5CIyn?k&Nxe%RSJiEwhJI|sB_ z-~|eLo|VN7AD1#xa4LGr9Ob6OrccT0EPDAE8Hd3p=Z#wUUR>`5`oLl%zef66BP0tI zgT@4sM|2P0N74-6nCpSmXQ#91>gBsYiw)O!jPo`3$#}bXS^rti?d9TsF0!7Ef6?W_ z@qe*qz1X>1wzK#LTFgOX$J!W3E}>&;pPP^o2ZukmHIu}@pUA4Wgv);uJ9;eXc#VI} za}oV1Z|jeCEe`mOKgVnGL=}}ahTzjznSH}A^J~iAn9bw!_^)%`X#k4rHeP)2^X;R~uXDk7c1%!F<~Zh^_|6lgugV^BvcE{d zH+71SiewB;K6qebtF?IvG3LN=8jJC?1HZ2)Aj+q<1>%Ng72+;7j(KJOXPYd30+ilR zU+cah^!uU~5PtbMCyG|cQGnlkV=gcv9spXvy?gv8+3Uyu)!M!A`nvU8;+u1Mycw%c zs}UXc`S|z(Dt3F5`^T-&i(^;j6<;UKm{z-c-(_72PCJYLmA;)`*J7@Z+4&~REMs{M z(l(a2@!y-K+vQcdZS;yH1|ZrxAr z_V>5@iIM+ABP8S^!M%Zu>w={N$O!h?|H0R}KxyCu0-z-BnM9K|BB{+TR{hY6ym@LQ zDP54QU{!@!0(kNcy^+9%1sHS_0F;myKJx1qDE&XVg}n(WIO$8_d;G7(+K_{6Gwq$< zalztH0R=Dla-JrAO>Rz$uv!YpMo65C$0a<#yX=&D6CeoKLZ5{2#b3HeBv+YJHcVuG zSuc_y^-5nWIb;59&QsVh^e;jvf9&&PpihgGFUjM^pgG8mg*N}*Y~j85x3b0O<@xRQ zv|J;(>C`*Mf7s&k@qf2>YkbFie0+~w&pC%fd^-B`F~=V_EQ}2K*W=i|;|S66{Qb74!u*1u_b(Mbr~Gwa8qH%Q`mFX=pSOEE8YqD_3WbdSx_d5ioH&LK-y3jdZWnra4 z<(+Sz)acHEqwHx-25yF$`_jQlC&;`S+tVTb$9&3+E(@S4l50#9zqO7V7g--^EPe8vm%+^IiOh5ASIlU7U(a3#K)R;KM#N-$mRlc}YsWq^-%b3e@qv zQ;iuamKgUcb`?{i4;TMiqq`Q58PnFDA`9E1+0j(H%*!+PIOFDnWG1>YS7v&SfJ^4l z+EWb8M!kR&9M1f~agZ_Lt3ewzDR~$g zbbKw3Cf+G?#g(@t&p49ybhQ=7NcVM?VL8{|{_6Oj+796{&%zga_!z6`QCPa z`Rcc}${0t^5fH4ul~H#i8CPB3qrj5GBzOf-QLYAq>m=GMdw3=I4fcpE>s@;^ zknR|)3z7mP121w6*rxNt%(MGhGpsr%NVY!iU(7>c9R{Gy;|K8_OSgR|R zLfA^zvS-Ne61%~lUp4-%ix4i5PN6?-Gu{@c6n(HBxdFA{&{8TM9 zOkpHJtSKDZ49)TDiqmDksS`a7>TZ`*#^cZ|G88;Lva zzTZ48-E|pJNsGX-CsuU6!1~jq00Hf$*l#%&aPW}6o8>d_d zJzlWoYtm|D+R5DeB^&J6u+H(ZkaZW<_c#ic$5-+(*Iqy#9|@^>w`J~Y{wRt2x^xL) zm`7fGc+#o6^fD~3*%$hx-_W8j3AoEOf}dPC*4-jnAEaH1Cf{}HK53?7ayhV(I~D&c>AtIrmG zY8#qy+&>}_#j)h1<(1>rWlVT;-XWdI!DMvN?oR;5k#j*A_!PON($|uA| zWhXI6Qd1JPrq3GuF4~rjoC@qIi?dvSB-hDvAO4Q``TAkU8lQ7z>lo{~pYW5IBJ4h) zc+t1}1#9iphi#Dk2x}QP6zo|SuKI`v`#J{mW1dSTA#D7^Ccl`JGzuP;vU-lg%@3J{^1Zpfm z<_@`2QOkEJE5I>v$7>hUE71oyWD@dvl+0(KC+N74%=dhq0U-b``s7Y?qm>0Vs-KC> z$lMhApJceyq2#nICK+TIc>806OD=0`oakF%T(SzrdzZ56po0f43#*{ybt{A@=z{F4h$ruBM3X$R-D6Po|r$+H{)1ErUz$U#FkAre&ht_g1hc+xo@ zzXKz0>B`66c#@I=C?N!IaC~jcvcZ@Wh#%x;LQD2JuZv&KYo<09edgz@WkaOtoc3ux zlLBtWv%jzN>ms+rj+xFg%Rst?9kSpCz#Cd@n_+8yM3y!@9yB*%r{c?UUM~L0@1Bc) zip49(|J~lG8KwKxH;=bQ{^T_-3rJLP$GL<51vXSs;F1eq<*#rjnq$26@ZenJS;|+j z$<@bvu}pkOzF91B9G!-Bg%mrP=c-$Z56I7N{J$*m}?&Q#dKwCw2a zK5#o!IG>Leuq(QeO;twwY1G6>IA`3RHC4=qnjz<99+4};J}SLl_#pQ95lh`l=ndD| zIqgB-*^yOm{AIR)Z*#k5%m$)ffxEP>J_;-jjz%qkn1NHX$Fv!(<=FBQ`}aID6ykS8 z5_5g;DBAf*fsZxDhAIa@`k#sW#?r6=oE{G5{m~CwJ#hdm!H#cd<4}0Cwm0-pCCs+> z(Qab3xiV?)M`v|*AlWuu82O9Ktz&qj{7`@QRP>-C(?g2;nXW}wVt2+%y`6GIncZIK zEv{9u&@eVfsO`8?$?%n7RQpSmmh1VYuqpcE-;78;Qe~x(*ii)^-`@$+>oyCyRTJ#V zuevIb8L3D*=xY1TyACKoFYntBaZ3eFahAH7-fbk%!oWWJ)G6`Nc0~dhkrb?~Vw5Ad z{xiQaRY8*fas^H+|1X(C97L^~;{_?PR@Q1C|232Ift>e<$|hX(#0dwUo8Os#-Un#(7(BZnG-k z(E5{9uVrErnO`!Gv==6ns=Ukj~J9wi~ z58M=tj&Ox!cP0{k85Exkw|xF?^icXXM&@&Jp(fGkC+bp}J23OGd3xW|{elaKdZ+pX z{~u~(Ob(;=yK3xWVGykFk`U%=!JtX8X|ffc_%n+1>2t@tvXkF>`pI2OlDjZp+_ZxV z6G4NMct_pCfJ*$;Cb8H5-==(KZ!Wk;hSs_L z2Z0X!uW*(*8SDeB@5DUIb3YS&5|RP-Vx3wvsuO8I#+~G?cw=aPWYvsxvho)5<5;;i zn(KE$^Q8wOyv1Lj$WuPnYMQUizgh7=V${D&D$ns}fLug*R(K{ImD=w0w|@GD9HE=J ztQX7g{ayNV^ARCx{|9I^CIY-m#`!=^02CWEhJ8E}G2k&CGkMH8+~qs2kui30`*WkA z&GqJc8f@UsH%{teB?Fr|vDM6~^(-Q_6_bioWgz@OZ4hY;e@|l5vp0w9?z5jA!)nOi z3$2>&0~Iu(B6p1N^0|z|H=1IFDIU5P=D<0h{8{Jj_y5!KI^{*cGJngK&F~=m@eMQC zea#xUAbx1uYBrDC_fghv_NEux{ze;hZNx-|(sjw%lw6R7M`xT~TQ!A$4k75I7|Tul z8VlS>bNHbbQ;~QTbZ>QSR`OM>jo8sybc6AWpfgEaO^*D5sOPv;|6pR+YF`Sr?$LK3 zA6^}gd4WT*FQEZ7HQgfKErb^xa>Vp@TCQVJmx8s&;|Q7UHpLj`PvudHwv~c;MS)-8 zUeyAwEMjr~hGbc|+Z4B0-Q~iQbwZ}}Cf*oM;3UnwSR0Zytvy}uCk;){kw4M%9`)2I zT}e4>lw+F_t`xK13Z`AN+ylQ! zf9YXy8a!eb{Kxk1Qu+pT30r~D%52l~F2TS|I}UYKX5XDiZnSx*%0Nei$SMdsH;1gu z4R@S8^W}cNYQ-K<_n@|oyeV z=r!2i0*l?V)_HIY7*m%dH{&@^wYO|Q&TCeC9$R43(ntA$$9&j1r$VOb-Q#oGuMP7{ z^ZBUgtJ=g#%+QnW?vT$FUpz4HBl*VV)Kb{z=bEpgp_8S1l1zk08N}wt>go&Pi_^3y zA@py`_m5z2x%s1KN}i1dM4#p>uIghsqNTz`R@`NEs!#RzZt!uxImQsBP2@R2=De+v z?G^xnX^dk+JwM4xU}3i}mj+kE9E&{X)JgwUMWY_8{qek(RoVwxCEz-|u_l zGP;OKJ03Wd&=SzuyefwmR`;^+mCSTBg~is`#|H|)&C~oIRoHhYn(#A6kFj|y%e|SE!z%$SkvIYno9JS>ymtNKaT{A|N}nI= zp&42kMR!)RH0_j|-gfl9J^FgXa@1@fw92`C1w2Y8(ZjKrF}9Ln5@h{c=udjsnJLO| zxnRBQ?N{*eZhg?S`u2U_(ggNon#UJ*ZYd1Ev>fVE#9>;*kuEIzvbc}TjCZ$>D@Xh? zbx8j&x*qM>f02bjbT9_s4v_?n#jAYd1t_qX{#PFCN}2EsKdLV z)swOs@>i|@o$pF}h_CyOZXL*9hErRelqtqlTa?OLGf2U3!C{p516L(6DnPez>56`L42QTMQ;vV&Izx=2cvX% zNF?!_dQ_q2E~gm)^ap>rSt+(y5Y7QdALf5etXhdTM1uxHVUrKqrpE6_Bg@$;%*vl1 z1m2^`4YIQ9832qky>b8j@sIL+VERuM##fjVtL=j&{h`W^uFWdJ7%x&?1vwF~TB9of%Z9c|PRW>B>6M4#i$t}B` zr_@1_FtEp-viA9_JSht~;(+h?7)`ItO{hR}6D;zq+s>N)F5_4J4{9p;3#fNwvfAd# z2g{Uwc5wNjL?>e_u0x*n>vG^Tv)=9aM^Z=2fiaRgikEENfvn0RdOI}YHhSuJuF=D> zV#g-KPlt?o_;Q2keU7UGGd5BjkZN_{y;AiZqMKfUvd^=M}3%`7T69!0A2u_L}awAP;8iTVnG9#mAHN)IuK7dG`5Gvv@WQLh<-*>#LeN8M<`KHRfQk=lEM1TM~^p+wmO=zOuCh;Y~Zf3-Ll zPcjHwO* zr8`OJmJX_VmZ~rJhbWUGe{(RDWYYb9Dkt$`El{3$6yBz)_8(PofeefK-xO(*rtpmt zGSa3FGUY|iTLlq@=5vAqO$PU<=S6W5sQByW9>a<)UZ1~6%N>jXnzja>pZs_%aru}n zXB*i!4pyCd#1<~5B=Ytk9sHl_Y(akp^SnAj*IBC{+q410{)TKo#l|UN<~U%Tm01g@ zEK8mB^fkQ+UT`|S2F-D-LYsi*J^iyWH`@2Mbf*EFUm#e2w`=^=0mlwN({tB{^Ha8~ zTL!{4fRe3o`7h09s$<#hii%MM8-DpWhxJt9OG~epv5MOI;>_uCBdj?L*CCsC^4SUy zBZ_));!zsc9sI%5oMbCIp^x=z;J81O)Y`LWO-9dGpClT%J^a3L;pKkm3sp@ulQrto z8gc3;niciYTVT7$?l_A@x{Pt15ia)K;p&Ky3v69Xgi^ zU24_GeZmlNlJX0p;p>6y;`g4zXkik5-;-W6#Ar;yl@VDZOA-cuezuKf#) zL_oRoZ8;N!VQTKLD??al;?hxC;@Ru)tSQ|RC)M@FWZ#sS>|9mSWBjGm+lTPfn!W z^rC-S554a~Q6S=-~?;>Rt-mJ+|^?31F?r-(8=0GzmekU(rsto|KaI4v9uO_$@&okqqA z-?%C*@(!Eelw8D=?Rn)IShDza4cHedZ^SkaH=L5Q{bw+-CJ!+oMvhk0*k#2zT5fqw zk6F~OFPV6~h*!XOp4xpprJY1uy>>j!y&)O&M+g2pI>f%$HTREeEDC#V{EjxOjDOC9 zL|nFrbG201{QjMHDk-M6YozcqtzF&yo!V_cE}^#CXlbZ4ziT)^c=gsxay){Q%ts>F z_MMe}ZDj>CQRwDb*ACn}>HBx|t5E;C({E@9l$gvjtAu|BfT>^q{YS3nCG@=G8f~4i zWZiuTC&xT2_ezN^UXM(aun`YnDV7vyrXVrRXA#ys7RgAND_hEab!(r8^Uf1NnQacc zt&f$Fw3eU03GLK=I;M_9YuL|pcwit3(#v1gRIQI=@?8yN?HW9H9l#;u-3*^Ps}(+& zmosuqfrDfJT8&TF>$_fw3L3o#rLsArpeCv6=9Mi*drj^thm@^~x|Nx!E(WnI*V;3; zCX#u4)mI<&6Bo84Js*5o%cWFf(g_sD1IF@0I*E;%RPg`pME%jdbGK!?d~&cXr>b%=nB+6h+ti=Wx=g>WBN?|lnRL&yTej@>B{VO5XVqM{~Owm+0e%8|tQ~rX{p> zF0=FruWsh8oToc;8U`uewbfK{{-l+x_iP`eQ(x){E?pQ!RZX&kl$&=CFpNWa>gHZN zCsdx9n13da>qQWE7|=abPP+=LfOH7#h9SRxyH zWwaq_j*(V5E&-ta(`p$3y74_db{=6eJ#M9eu&2&T+YR`p+F!_nHYNB3E|ooLq^K}L z4?hCd88mo>c;0)jX!zd|chkP_uWJS_WlqpnC`o8~NogLsyj$YjqAi_PBSQZ>WVh{8 z3sdM2N6Di-1fVM(2YOpe6zWgE?`ZoY(|w6&JRixkGEsAGzr&dpVtNVP%IRLHVgt?; zspM0t8gzpL1(X)w;N}fBgVr$y3Ph{b_b?ax)yMe5^O=ABxx@D};oy`Pz*FZnS>>ab zWN>l=tIhb6AxL1~vX_pB^|6pO~~p!Bpjh> z_LB}^E|uAqF3b;YSG{DVl~EX|5S=TntY`c*j=Ya`NdTc_25!-Yl8z62ckvneUPXU6 zzRf-n3R*{Mf+U?2Pox2GPG+a8iWHWd9LG zRKI-8(X7kprW=(kIzS)liFs8kTwV#5qMG8&s?dO-E;winj#TIRI37KCHjM#XPR(&$ zpp6vrY3PUhQyxfLzTr`D8eQjIvf59-ot@7?Sn+xHUGMmHK13qlr%U`B>akCr+Ydqo zXq|GT5*5TVx!B*o}a{YRGJLLs&DFZ(R#<3Y#uCmX!vAKLCG zga51l;V)53x>--c<$?!#Ye3>zg}8rozah!ynb)3FvKR{US{{MAo zj*LIpBER4vS!8ll#+r;mbGflMJoHt@rt*sF+ZPwKn5TzF2dCwX&J%z84JN9|b|Www z8dkzPSG79mFFqxn!**!>&OGUNfR_|wi1FN%Ql ztk4DmpSn&;dL4%Ci2>x-tyM&)m5HH>cJnHuE;IGzL@8s`COIOdc zp`i}P%m*u``QQ3tPWcQUxXD^gU^_NrlUADP_>h zlp{d^z2hX+Xz^nfabM0oH#G#d5%Y1Q>G7HcIuOLA_-kM^_NAF-RksVc3aCuFMrW<7 zu{7{C(M+0-sBTe3UY2bDT9F_oLd{b9-+x;q|Limt^tHOLe6V>#wTc%xi(!$?XmSBd zHi9}|3I*tOL@M@Ha0K0blFcR;JA5DNR*!KqSDHpio$A>FxM5#Q*%&Buol3a_W`{qX zPtcmz;aLu#{6JBZ%QPc-5YjOvrb=mcEz@Q)aq{+8G+p8CX>W=wI%SgU&hi^}G-4XT z;dg4$k4TyK*_gY70L?5xoqoJWMHJ7w+ZhueHNJ!cRT#oHmKI6u~!}e0Kw3TA^7u0f6_P7nZ%Cwl;4{EC}7+~v;Ooqo@+47C4?3&9` zwLz$04fB&?GdjJ@Zw-3)^Vc|#6E8ImU-~A=^XBwv(fIOF+hvZ)j41mn?+316yWMd} z;&}sKLa%OyE&qSp?f)mvSnhM3;9Ox6OK=;Vwh`C2h`T~&bmxkP3He3<7l}28wB8yU zv!>(+cVa`b3;syRs3;y9RaL%EvC#o0Gx?2YAGkg;$CO-q{Jx)pBvbAFgXoxbwsUHE5W_= zVJW!ITZMkgLV-zD!e&nc0$!Rve}s*6@Ekg-h5yWS7`Sxi6;zU-9=}lh;Jq(95k>tf zacY`5iOP08Q(EW533|7P1{##@aWfq;iQ#p@I89C;*gOoBEe)dj6zHqQ(YU}BjNRlY zr{3{g90+)#JWZbj6_Civ(<$as0vv{Apa9*OuE+K;n^jiDRy$nB1kMNte&70@cufp7 z-l$<0lqAZXTM~H)mpe`Z(3eWI+Ry}Mfc1GDNQD-=B1T^ZkBGsf1y z546QWn$(#Rj#d$&KIAbwUA{+;a5Z~D{$N7)4-gP%5Ec9vWAIajlaLq(TtXjOSP`ET zISC?XPoxtP#3Qo-9m?J%9Kj4e{3)p$qC8T7Ow?~IE)aK|KK3d2slPQs>!eeKm-RWA zAXInlR6J6u>9uvcdC5m60c3;*m z_iig2P&A_1*Cq+;yr99+;Fqtct4Aea3Lkw;V*KbI{_W;FZoA~EV+j94Qr^9h5R=L+ zILF|c?3i2_C_-NX0JqdrU_oM{F4ij7@<$W>Lh+}=EH}rIcAHI_5w)==NAY;?2KGDzg;pmie&_kg=hE>@u~9iNY{>Y|1P1Sp>;^L@gtCF1-hlt z*nOr758FPYAZS$A9IeW=exb!b+v#-2-Pi=FB@zyv1>hFF@hqIE9##D$7JvL^noz-tHaG2!!S=?9$ zF5qhMUl(QU?@diQ8PS=I+(|4SOK4cbvDWoIYq_NS5a3Ww{pqQ|eE&D90fCprmdw#>sxCtx;Ap6;R9yoHW>{#}kL%E$h`Gk4H zjPn8bfi+hXUjO87_+8{VCx^!mvV!~&m--tH;O&nSK@mIN$r#8RhkC3!4mub@TxPRd z+$!z}WgygfUvx86qLUQt@(rL1{jleh)ZzKYBC3MZ&KrONA?jcpNOkwTaF&0z@r2L$ z{n6?@`JP~!uAuj91TC(QR-?2Oi6B1S+EJ|#Mf=$}GYCOGBVjfkqy{GxAy91oCJYN` z7)tR6A!9SLbh|JxPdL5%XY(>r?dl75sqe^%a{!cGbc~HAfLGIS@k4royFtuqJs_wL zo!H6B)!_`eogN2$G6b&qz~Z6gUEEW&r`MJc8cIzBu+Xz?Zk@4yEr+fb0Yrr+(g7e2 z5ZX)3>!)zZT-g>-D>>{&^;54XLLIB#z)VSA6r7B&rnCCU2(SH^>6i$eT<;!s=48dT z0#QFg0T7m7wPg9zhvA3&1NCh+otp&$YK3)4X?o9b1Jpo$@dnp$(8EoXw_7v<>!pq*0*b!5#32!akoHNe z)iL_^5t%_|uXq0E?GVzp)4kX=70BKzJ?ZkW`%r@v*!6{`ao$Lyj*Nz&WOm-VgX9S^Jh!N%p7$_}e# zdJNZmmi0W3g5=FA{T=a+R9Zznlwj{Mq*ryBpkaqIU=ExUWadfSna_ z!(EjEGihJSDy=u2KDO{dYR>iXi`s1ke~kPk*UAr181T=Zm?7t!_Yq@O^H;1TpV=XA zK27d$v{$xZVsAM00mfY`)0-2SRq~Q{>|4ZlOJ@xIxkWZxr!@|h9akO7LU2~~g%jN5 zR>$_1@iYHt++EkxH3pNPlbRVKkfi1rQ6`d%1NQH%qjb(W4)eml9cVwh(kI_Q4i9Tz zO1(F!Eur&WSvQS?Cvm(yOdBz-#$+m6MGUs*-F^w;w>{*T&r!ME^kl92U=JtH;N4VK z5>_n7mU$n*7W&-yK=Vlu&nypT4%IRvNt~jt8k=pw7{!CTwrcr^5K9)#FC{1Bwq~lS zVRuxA!_@tU6ABx*?y{+Cx!dGm?G5>Xvvt}W)B07j@@sDlhbA_XLgj$p^KT6Ib1zeO zn&Vd7euVb(`E(+0NVf9&_kW-I19?fBnPY2RS^ zEhO0EbYW;LiYQ=*s{s&j!Uj_SjzIT!V4E1Cu}=&Nw)I9F-V2OOowO%0f_l~Q-C^YZ zb}y0%nw2Y^Wmtb%E5^v{l~73fRsWRxb;@mB@^_bCS9fxvoO8)ojNpXCv#?t%6WGie zQH1ENJ>`v%`j)5`9nv{KCclLuNWadVx$#fkz=S|x(EJZ8$0OCmpcw_IcPU+&3$gTa zXJ!J(7<-#o)Jwoc%EspULan<*g5=#zx-iQ`B$_ z>Gn5QxeXukzaM=6;h3AfpB76ADQT6j4m5LE4MSjR5@JysYAcwTyC!i2x2Ep7ZVNZ- zw$@b=8(^L8AMvp_OTVTgeisrYpc zA}vPw4L(#!(^uu(7_ZM+m>SBsM@YvAxz(3vT?$@P`n#fn#1k9X$2(nLwGPWa@tW~_ zmNSOvH{aEUuaPR&W4`vfJ`ko6@_-PQ@so01KQplulQvyo%@ZnTjvIXyu;TUTd1cD@ z%u;FhV^d%e?VtRwv_BsH>Wn+=cESO|&TNS$+fBCsoEwo8Kq~tX&xn6U56`-z|2%$U zkCT>v2Qkb&nbuDHMR6+FqvH~OP#PI0G1^gTS#?+bQ9Qn#Gp}RoNmvj++Z+8}4)J?- zmODL=??H(TVwy!e0@@>ei36#V0$|%G;I$nF(>)x*RhP?svHs;K%PT}UB0H0WjN(SI zzOE9Rp|NM4i52;0{K$bky$k#X6JS@v9aXnyZBr?op#p|vzN4=GBiZM-Fg|57w$+j# zXE?{hwCFajH1`Us>bb6TyY;>W7K+jmk3;US;(A?PVOmdlR~=*gQcmsAi2eLnf_eO! z%D+z4#PDGYP1x=Na&?Gmh@eUF7U^D{{JH4z0l(l+IdGo)_Dj%X$8cd?X*nly#e}+1 z{ZYvcc4infsPv)cudEqS_o}}WgGz#40OWsb%=S8+R0-&7bD0@ThwvY@uiG^fq@P3e zgQc7M1jYILIrvq;wCo0A{CD=gZrY2oHoV_zqpu%R$~}HKuP|$qCOLU>YRd19-BiBN zynORxcp>Pj>~4%lOqE7uT!2gP7<(bR_sXVWzF;@?v6tAR9^Ja-$l`&Ey#Wx(3Nb>6 z)`u9%jR&^mgH}V~Lpvnf){er`zMxUtJbhk04nno~(z`UJj(j_eQCQs^WMl z{pc=9285q$C5C9*4e>qVFyOs&sN3lT=;w1N!}^oOk?dQ);MVG!PMWju{!~MqZNKmE zKtq3D2XeYbkr?RAuTROIRjDp^tIjl}PZ|F4OFYsbe;XT>XlpUjNvwFhh zHJVyeaeKIXC<52Owi30JD1DVS zzeQYVMW83jZc)M}B_Yb1wm-~cL0*%8pk8`8@by)ZZ~cJZLNwIRrCtQeokST=$;5q6 zA)W?x)~1)QIvEX`!8H1G=5-N9LA}zTwC>y0n#XbFjyGz8)?Su;y-KNM`70hk{(X*% zBq3GG+LvT?4Yc-mAH62@B(VB%S^t32BDsU-O~09#>jZc~(o96?%-J?m5s0;^OAZ;A z>M;cq!Ef)}y0KDRv9UrSncF9qC>FkvfpXaymklYz(6{Bs6M6|s_>VYP@IMjh|M?F& zSuKO}AlvRKUe5Fa_OzCc$ye-#8@87`)ZAn}d}a@m(v@#-KK2(hWK@E`XwTxcN|gY0 z-t&E|(5!1IhWZ&`K7x-QV_H#HPM%zRS}>HzB4f!)mHpqk#2Rw$2~010dE1miv+`S- zVjyQ3`++pBZb4;r(63#j(YH5p3L#lFwNVec(iUC|ja19}{qYuF{dzjw(hr3@ta91wC4!O90PT%G^X^*U$MB9y zm*M~uv9CMd#iu3+efzdm+|f$Q`rGr&nDYrv0-lQSqm_$2YyjZ=7mKSbm2 z>6!_*R``TV_4WPGCP01dbqFC)`3Q}!TW@Keb~{-D5HRrA+fBk?ALmAl6i9^tF;>DE zcK@l{S`EsdPrup^GRMJ2e`MA(wuf!qD7%zWRGaSJft^6Zt|1`ol_>ngCq!Zfc+~Y0 zkY7o+FezD`x$k#fX?kVU@e~(hNsQFOrPH0{U3&a z0zkXfM)*bFWy{RN+e~Rd*&qndOxzG644~<`Cxu3wymHrwTI+{1x+FcGdi(a`#RUk5 z20q-Ci=hcY2?@rU4|G4RG0;j-Bi9ea`DJsUrW)!7g56+f#Uf#lMKbiY{#hzxe z*|h`SG`r-P#izS{O`7J?G%}HiNlDI%^kU5sL;(4LcgQ(qv+BoOhk&mHlxI8?jy(+-WD7fr_1Y@3PEUVw z-t=ZnSxHOFbkM-5b|{zb6EGMm^3Q2=ng=X&y>#$_n`}(t-zm9CF%DNXyniwB5%=Gm z_A{rL(#%!mQO&y@=`OyS(r;^5qgKo3e9BBo+{s-Sh_gar>26QPNLkT+F(A7u^rbVA zDNxdE%Coe3o&NbdiJf;6d+0f{hZk)+UakkkR_bcNA|s3h9#fgCha)#jfwA50Xxnez zZ~R0j$*Z>ij7`?JYjI7K7!C^nDYFm+GJ%SCH8x?T+w&gbDkql>f8#GWC@Z2dI+h`v-QvXD0HQ_K{&nMJgM2ZkE3Ovmnto{5zI{cWHnYITo{=Z1o)V|b(;H0 z$jAXwmH+S>=8M`yAuTSJKT4n^)R)Y+e+pB%fSwoSPP1>xI%OCr#p>#gS+0XyaB`xjnGQ6I`; zQd?6nA{|`d(T9Dpodn!0NGY_PU`a$Pl{xWPlp6X4?j#MUfG40pcq)^3UO(;1W>=%W zg95IIPybPi5TSA!57^1`9@c~ctO zwPDK&PNfozF)v#le|JH*H+_2jmNMkcT=?|CyPuD^5g3B@xCgpdgJVREwl7L~dgaoH zqv?as`PI@LY{>Nqg7EW3a}1MiptI_t992Di@{aexr4RJcRjA{MM~JVV`D&g%Z`r&x zzGmZqh-1L;d$7b=gx}mFv|8e<{J(8%DHWdQ7^OXw^WtG7f$;vyLRK?uCRSBWbDY&W z^Ie0X?_u~8Ou&NZOMB9|>;J+`==-9C-_{zgoisgyF+YBOB`?ckA(I=9Z*2(qx(+S3 zdMAN*;X=oYW#!(CrlkPgKkJ}cW)!!U--oxG?Q(L(Cp(Via8Ms zpS&miN&RO^rm@#Z0^p?R72yIzxOk28iMJyDGo9>-{dwgh$P=JT7^Zt0=CYU&Yetg0 zyll>4!%1!+u3dJbC)Hce@He@|`3DXJ8V<^NvT1mG5B`w>H^Q5=8}f!ffATw%+|3iXR5a{_~D_t)b_7GA~2SkT% zFFoi7eQzOzh~hmOY>4z`qshQ&&3jAY;=3zoWMB~J%KcDczBuqi85P3t7W^U3S^N&S z^xWHU`Dj$EaI^widHZTo1Q3LJDjD}p_OYgx)9Z5Xbf%HVBh0gQ+^aIW)51>3|l|jWwvP- zj3Zk=vRS=H>wYRx%w$>LrQKqZ0206=F~F;3G%zf*Hq zC-Wo^#!WqQkdyc&deOq)^OfUtr=G$An?jZN!^lwR13l@wuSA?7w;GMJ?(k?4<3=YB zOk#a_RX#O!{8I)>ibO$nBQxl+-`C)mD(t4cs!cAWf$KjMoyZIft!fH~>TZm%-u=4^b&7s!_i2RPV`HhHN$+w9y;WD}i8615pOXd81aRKfKVt)^8b zF77vc!oOF~5iYtSjI+R*B(D2X)}M`*&qEp|^M>A{t!~8;PPi;Xs3P6|0Pla?$>Ov* zpd}1B^T`QO)f@F{xbiDsZEI0+Z!`Hk<)+DD1qPhnbWDn>32=K4@hr7>F`Ik{RQAaHkF?*693Wd2}}Py#%R7 ze*d-?)`-NoU7gkJe$!Z4$p#E`$eICC@ZYW<4i&k-)jh|av|;K~7yHI?=eETMPz>|m55sSoZElQM zg3`NNBHND0xActn7t%;FusKl=ID9wm5{T=M@G1<@XLw@aZb2#23v|`uZVWgNT4H@^`y`th~gsH4*!|c21tsZA`hHEH7W*J8BF5P2PDBjPMBo z=P|AFYU+{yWl%~En66I>+tB~!{*8RdRC$vamQ!RqPwmorb20qggpT!f`z)`KED2ry zgcm2E@nt)=a^3IW>;*pY=eAkC`;9|CrzJM1u2qJ9UF$eBxART*OMH-A)9X7~nAoY$ z#f}~fvH4!de#``wttQf6Oj4xkh`CyxdfoTQL59KO&gOd_uf`@RneJz{O#~fcoMA9; z9Iyf_cz*C!9Qxsz_=-Yx^mSqp2Z7$}u@)jd@wWhNQ$fumg-BeM<3fL}BpMMy9NzUm z@7vGULT7_IyPzRIWzoNKKmTSVc)c32&;{<`wuUC?7#E8;!g|y4Wh;StHx9d_z9$l- z^3gEaJH#F8pOm$m$5MhJ?Qu>u7cbxQ5Z<9ZF?HMm_%e4oT znt-c*M_aldVm4h8Z^!`OU;alxR7e+TXz$+jC5iso-2Tuid_Z9UVVO3WJL2pu$xNUE z!imD|fnVuJz^vN^vR%z3S68}BQ=;a525F4IHT(3_K8Joc-?&J-&hHRif3uC>B2L9O zdFQ`P$hsj(*E!o0*xi;eOUP0 zamkXhoOoNzU%RCp#{N>8B!18AqRUS2uRV_W#-THxtZs%z)JuwvSXX<07RYt*6xt6v2 zOUL|-Y4WkVO*zIBWoE$FeT9L@uQID;>B^5JV?4UQvdPvL+qM}dsHQ$)$q>+s(>ULt z-Fwy|2wEtD2z@^xssyz5vU~0(lt}*J<8$_x@BVUk#+Oc6ee1Bt^PE%-wTLQOOvAvblPdJ->=ErR>Rd?;f zgi{qT8I!a`fxgK?TY5Oto%rbt|E6C>m(s;YIFy|>i+fMgE#3hAV1osRb&x4eVw|Bo zXh=BBJ=Bnc_e$Z?np&6ejb#-zSqKZ!u0io;*%9L*0E)zYkM(d9VrWrwz>gj1`}New zn77?6eQNV5NHu$#F#&Fa)>b1U-kQx=ofy@6O~TMwlW4?JI^BY)Yr}h~PHI`WN%b$t z7x@{8&WFNV!>KCx^uiK%^UpO3e2FSoDYamni!56ZlbYqe=5P|Nu4Wrjd@uSjNXWBB z;Xtm$-~LQ@3^ma4HY<7fVe|ANjg-8Z$aLgDf>82qJx0JR^5TzB_ryWHUrudYoX3iT3iOZ*2%)zz zS*vdUA4zB7*W~-QVH%NAP*56aDG6ytNtcR9NOyPFq@)=zx<-c}-HkLzcX#K=0b_gj z{k?y~^E{vDy6@{ekE6V@HFHFL-U*oEcP^~7^}7!vo#0TpBB1Y>JlWThnCk)+zK+_b zMj`{?oi?qIBlz0wNI=CMb^6J*F1qP@_o!h;Tpsgqqykn_msg`tLiV<3oZtoYwV52z zv^=8AMYKWoYv%sIm3C3w9S@MYFQgNH@E}O4yI6s(OO~%eV=$%Z%cbu&smL>A-H1#@ zPxG@&POn}4R5{4LZG6VJQn9my)|e~tFUwq2t0jGt(LJMJsew+xIGQsjSSi_KKP`X3Nb zJ}A=rcGK}CQp;xCZ|JO5pgN`zLtR5Kc`JHr>A~G|Gydsbx1TW4@+5N%gW>T0z?@Pi zXic77uHK8`LD*~u9v(q4z}tK)5j5UwaMrrj)F;sdoUoMqeQ(s!OE%P`pPvb#}uKVFf z?2tyuh@L_%wLb%0Cuu6Tun$m$JVFxNaUu|eI}F*M`% zQzV&!HJ96QUrNYRmZa|VYl=TAO+gw!#TYK88=Lq@jt*SocpZN{ESH5TBWlgL(rp?0 zxtqvpl}g9(8L{$eDU1mJF#+R_6HL1SJ$3~B5~3dY)6JZ}<@#+7Z=g(Sf3`&M=SlZ@Ziu zf^+xSup!&*>gvMQYI^Ir1)N7?8W08} z&)7mKAIvp&{)d+RpFm3NT zLme#7)RGIq80T1(5rXk$Z8l(?D*eMSg5^N`|B!xNNl-#vn%oL1@ zo^Zg3J{5j8`z$|XrgPCeIAK3)T}?Q>moreZ%(Iv233;~o7R?)+Ke9PWE5DhM5QuKM zP;h;kK_k_;9>dm32YOv@Vr>4NZxO6-;;%9rLG;yvbn%-y00KzIf4h7{cDVzU-7*|U z^?t4hhhuaICRX>n*)ls9#kU~vS#PTQj}N7n zT0!ArT4~;73s!#4+4xNpL)l}mA`xRza&YyeH0+^_7GB_8!t^&p67KH{KQY#5L7#B{ zMS++z7G&7oqrEz@U(imBeuu#I%_~XNybo0+SHH&BiMPcs92xK?GPm4~xbeU0yDn5@ z^V4yk82vegKEr@GS_t@eS<>Eqb8CL~J%jgLs6|ZwyEsJ?RdG2w6a2y6ePTXBFDAIb!oV3@$pU&^ zj)f!_R+Z5&j;_Z6Acg_pv2^PS1k9bvPBvVjd^^^qGAgn+q1m3 z*DR9NH7>g8_S|G1C1*_dBh>!F$X!ysse!6YyD6_8qWAi2wA;3SYHBIOc4BLvMrvKX zw%dC)&uCS8*dRAz-_+eJJR9G>g!N+?f-+wIx`G)%A(8r1_g?8UIxJQWcFlmRvx0jS z(tlgvQT43qh8CmJj=(>wuoi>dkL5@lC?p^Z6^i$SSDIzJj<)JI{a4st0pNcevTT*M z$(GPvHb*}1>cYZwLeil{1-Y2oNi2|plETE#n>!(k;Yr+BwJVnj|{$EMfDA<=&)EsS? z4spY#?p~O+Z5C(NDHKYF1o7_7j{0x1J`@oct>Phn#C>}+9#mLHtnPznGE}yke-Gjb zHs3KBQ8QZ<7?F5nUT7POuQtvAJzHmMb$D)i)tjGJxLd~QvMV+LH?5FADh2$@6fuvu z7jjj!@y5i8*Fe|F!y>9C;+Y%#zU5jV{XjN3gwEC*WIL&zO=JGS=}d#sAL^@6zIUfu ze_I2E1cks+p_c#ncB20;&P7*z6(bh`?#6H{0u~2BWF7OjGZ23BT|b$uKhXX>XARS% z<~WWqRZaXF{?G0y2O_SYph?*SSANe?_ZHiX;PCHuau8vH>pl~6$zzTG&YcJg zE^V#0*2O!%CZ+J)b)Bo~Qw>(MbS#=E!>}-UTMqpiMzpk_eKl<9-bO<6A#ITIWb}LV zzM%EK_72t4VLrpi8*vNY8sw}=?U42HH2Ky5>oNuZ8mjYBe-OZhXg~DbMU7mdH?6Iz z5*476zNfortg7Fs~ARK+TAf5@@5 z996*jyqm|Nyv*FdVwK79Z^37xR+lPQdV}Y2|0Y1`z21}LTw-4XSRJ!)F_;i3!*Ns< zUd@q2`3*ZScHP4>a~Cm5ed56PU8q6#7(m|q2NhoZUs)7hTX5FVo5ivq zMN0kt@W4Ur72ToVO=DhGa9t;(xZ&*b25 z*$RWV_|W7gjGc-IxARVIj4fIG#?%zlr|~#l3mxY{9lcP|E(xVt$7W~mHtTswC^0A5 z_R3`WgR+{(SYWcgCt$8t5h-ojdZL=3%ib$D)L+_$Ag0NqD~W?R!(E~dXb zz9F+*bCpf;?%01P+;0w-*ZrCE zDSrX+3&|KX`Lf_>7oNa=*fcf7V}KB;ie~Y>B|h;MN>3LyxMrZxV`Rw|O}DmITdy#8dnHZ&h81Oq0Vl zA$Dh6;)bn@s612%lal2mu8*$9MVjy})7v6=Ye*w{h+k=tM0ZG6w`bZAtiG$5rJ+vs zz?hkmAdN#&Zce9zf#CtxqQFX*|DGxxE-a;N$k6(d+ct^yxZC3ZEv_w>#^nr|yKngl56gmpfR$PsOQ`TkqgCs<y$c*XH`b8kk!56q$JyT4sw@~K(!4UYA}=)O?&MLo>1!yd460Yva7ql%Yrwd=p;-5i&TPbij9~bpN$IOzTr0}|;$5gX zY$10Ff7jgvni}at(>1irvAF;2sroPE+taJV7P^frJq`LRYyz9a5fMMEKP?+r;m=8| z^=9UCjIg9`nefT$bGMpp=4++fevoAFPFnqXFjn_ zkCaKm&5?8WZA2)h9^`A259lKPT|HR zw`1rMs6}UabPnJnuJFh6f3}h8ftHDJ2rbN9K?>SS4*IKNie7T4Jke;c8Z8cb%vn#qeYK) zSm|k5_=&}3yMNJY(?ws6(6Q*#8rtmsbt1)nn{ z#UIMr*CX}LhD{t_gH8SWfX_)wE$r>61Xp>LN?14j4Ar^f9Gpf?%YW>tA>q+n&(O@o zCZr*%BGxR9Ea}P=s2CNAF`wf-Xh6_UbV2Ny%AcW8N|Nd1z(t(;#)UPNIE)Q`GIct# zUqbg&F15LzRGXg#4l{5Li*ABodfPrB@5i+=-51}(1Sn{3dCh&^d(LZ|5g6Qu} z!Jn)5h@~B$KA7j9qY=K%M< z0+{v+Hf>OtdOJh_&4?0V#kLSo$`7)T3h&DJBWUNur@qPq+c_8O5!Wk}u}1&=?Dv?q z0JBfDM+Z+Ve*Z-KMQtBaYJ#kFc>tH}#5G&dGI<)H;5#VBh$yqS;p&ISelv?nIjXw? z{kx2>xWoyHf^ZhO{6#k3W8C&R087;QVz2bVV-or+B&ak>mI=a&g&ko@~eKe zSkmP%D$(pp3M9{>dOr~3jnjYxN;BHnXpgEpz;V;jf?FAT_0fQ{dI>pyhN#daq{nGF zjW!mCVQKtJl^$M$CmpXx8}^^~W|`5{^y=ERGw_7{l&I;MUj>?F&KCKQXYBZ>_~)_y zrRj>ecHx5c4SY&XQI{o`6hq&utE{DBZh6F@11H41n-P4+tKH>2jeSE+XRzdHC<2$d z4*F?*v49@=QM|s1X}LOf0)YK6?VO5voHzaT35#Fc|3d{d&x~Atbvu&i>K#4RKmAzX zBkWFdO%%moQ2R4*u>`N9J7_kgL`qmuU^Z+FIomB6ZUGtfkF59s*>);NKtkkc6b!cy z$sDj^>oqoOKl*SWrh4-`JK!Ms1vd~l1Y71Q@G)2FVYz&5Au$ryK-Vv{Jvo2FvO0Dmvxm>Ws zc*Tl8&5K6KIs^y(*5eb!?&z>M5K(&k>)27V=}3+Iv--amgHLYTi7GmUd%JU(Fee6c zvwOT3X&^S{$%)8v3#Z=vg6{to*=i_(Zy>$=1zRnuk97>@?33(GiTu8;zP�y$}B@_Q5zr3T>h4w37JlGHm# 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

    D#HZ$b2~H^Y~J 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 E0Mm+yv;Y7A literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/ai/instance-type/lists-for-1m--light.png b/apps/docs/public/img/ai/instance-type/lists-for-1m--light.png new file mode 100644 index 0000000000000000000000000000000000000000..2035617093395898f67fa083b0b0bc8a8a39f61f GIT binary patch literal 60653 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 a{OyP5p}EwgH!Hv&^OM#mN{(Oo^Zx;m4tXR1 literal 0 HcmV?d00001 From dbe7514244d76012a8f835b6c634d2e382b9a13d Mon Sep 17 00:00:00 2001 From: egor-romanov Date: Thu, 27 Jul 2023 00:45:25 +0300 Subject: [PATCH 56/61] add a link to going to prod guide --- apps/docs/pages/guides/ai/choosing-compute-addon.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/docs/pages/guides/ai/choosing-compute-addon.mdx b/apps/docs/pages/guides/ai/choosing-compute-addon.mdx index 0fa2dae726a..4ab4e13e808 100644 --- a/apps/docs/pages/guides/ai/choosing-compute-addon.mdx +++ b/apps/docs/pages/guides/ai/choosing-compute-addon.mdx @@ -184,6 +184,8 @@ You can increase the Requests per Second by increasing the number of `lists`. Th />

    +Check out more tips and the complete step-by-step guide in [Going to Production for AI applications](going-to-prod). + ## Benchmark Methodology We follow techniques outlined in the [ANN Benchmarks](https://github.com/erikbern/ann-benchmarks) methodology. A Python test runner is responsible for uploading the data, creating the index, and running the queries. The pgvector engine is implemented using [vecs](https://github.com/supabase/vecs), a Python client for pgvector. From f8d05e68271ec07a7c32ee6195a0abc321a55ac1 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Thu, 27 Jul 2023 15:40:26 +0800 Subject: [PATCH 57/61] Update studio/.gitignore --- studio/.gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/studio/.gitignore b/studio/.gitignore index fbcd3d36150..f9df00b939b 100644 --- a/studio/.gitignore +++ b/studio/.gitignore @@ -34,4 +34,3 @@ yarn-error.log* .vercel -/public/dashboard From 589b95c3d74bef1647433cf6f6bd744aeff5b19d Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Thu, 27 Jul 2023 15:40:44 +0800 Subject: [PATCH 58/61] Update studio/.gitignore --- studio/.gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/studio/.gitignore b/studio/.gitignore index f9df00b939b..9dd40bd86d1 100644 --- a/studio/.gitignore +++ b/studio/.gitignore @@ -33,4 +33,3 @@ yarn-error.log* .env.production.local .vercel - From f5a708d4f8d144d96302e0c23be2721577c98d13 Mon Sep 17 00:00:00 2001 From: Kang Ming Date: Fri, 28 Jul 2023 09:57:54 +0800 Subject: [PATCH 59/61] fix: add figma icon to providers menu --- studio/public/img/icons/figma-icon.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 studio/public/img/icons/figma-icon.svg diff --git a/studio/public/img/icons/figma-icon.svg b/studio/public/img/icons/figma-icon.svg new file mode 100644 index 00000000000..38539ba64cd --- /dev/null +++ b/studio/public/img/icons/figma-icon.svg @@ -0,0 +1 @@ + From b0c0961d462e117f5c7276c64cd2453832f1460c Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 28 Jul 2023 10:30:40 +0800 Subject: [PATCH 60/61] Use memo for localStorageSlug in useSelectedOrganization --- studio/hooks/misc/useSelectedOrganization.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/studio/hooks/misc/useSelectedOrganization.ts b/studio/hooks/misc/useSelectedOrganization.ts index e10acce43e6..6a0e204b968 100644 --- a/studio/hooks/misc/useSelectedOrganization.ts +++ b/studio/hooks/misc/useSelectedOrganization.ts @@ -9,10 +9,12 @@ export function useSelectedOrganization({ enabled = true } = {}) { const { slug } = useParams() const { data } = useOrganizationsQuery({ enabled }) const selectedProject = useSelectedProject() - const localStorageSlug = - typeof window !== 'undefined' + + const localStorageSlug = useMemo(() => { + return typeof window !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEYS.RECENTLY_VISITED_ORGANIZATION) : undefined + }, []) return useMemo(() => { return data?.find((org) => { From bb8fca19b3e511d0edf5b29e9a07cf6701c481b9 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 28 Jul 2023 10:36:47 +0800 Subject: [PATCH 61/61] Change defualt value to null --- studio/hooks/misc/useSelectedOrganization.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/hooks/misc/useSelectedOrganization.ts b/studio/hooks/misc/useSelectedOrganization.ts index 6a0e204b968..bc6be1b3710 100644 --- a/studio/hooks/misc/useSelectedOrganization.ts +++ b/studio/hooks/misc/useSelectedOrganization.ts @@ -13,7 +13,7 @@ export function useSelectedOrganization({ enabled = true } = {}) { const localStorageSlug = useMemo(() => { return typeof window !== 'undefined' ? localStorage.getItem(LOCAL_STORAGE_KEYS.RECENTLY_VISITED_ORGANIZATION) - : undefined + : null }, []) return useMemo(() => {