From fea5774fe5ac00cdccd782502671735329d74073 Mon Sep 17 00:00:00 2001 From: Ilker Manap Date: Sat, 24 Oct 2026 01:30:04 +0200 Subject: [PATCH] The install guide shows every screen of a real install /install takes a reader from three bare Ubuntu machines to a first answer: what each machine needs and the commands that check it, the release fetched and its checksum checked, the eight setup screens, the system's state and the console, and a first request with a key from the account page. Every screen is from an install of v0.14.9 on three fresh VMs, recorded with tmux and kept as terminal frames: the page shows them as text, and plays a session back when asked, fetching it compressed from /install/cast/. The administrator's password and the API key were masked before the recording was kept, and a test fails if either shape reaches the page. /about gains what llmgw now does beyond routing, and its install steps are today's: the setup screens and node add, not onboard-node.sh and a model file, with a link into the guide. Co-Authored-By: Claude Opus 5.5 --- .gitignore | 2 + CHANGELOG.md | 10 + internal/router/handlers.go | 5 +- internal/web/about.go | 15 ++ internal/web/guide/guide.json.gz | Bin 0 -> 27528 bytes internal/web/install.go | 249 ++++++++++++++++++ internal/web/install_test.go | 106 ++++++++ internal/web/locales/en/about.json | 42 +-- internal/web/locales/en/install.json | 113 +++++++++ internal/web/locales/tr/about.json | 42 +-- internal/web/locales/tr/install.json | 113 +++++++++ internal/web/static/guide/admin.png | Bin 0 -> 207260 bytes internal/web/static/guide/chat.png | Bin 0 -> 144768 bytes internal/web/static/guide/login.png | Bin 0 -> 78415 bytes internal/web/static/guide/newkey.png | Bin 0 -> 229700 bytes internal/web/templates/about.html | 204 ++------------- internal/web/templates/install.html | 367 +++++++++++++++++++++++++++ internal/web/templates/site.html | 176 +++++++++++++ 18 files changed, 1225 insertions(+), 219 deletions(-) create mode 100644 internal/web/guide/guide.json.gz create mode 100644 internal/web/install.go create mode 100644 internal/web/install_test.go create mode 100644 internal/web/locales/en/install.json create mode 100644 internal/web/locales/tr/install.json create mode 100644 internal/web/static/guide/admin.png create mode 100644 internal/web/static/guide/chat.png create mode 100644 internal/web/static/guide/login.png create mode 100644 internal/web/static/guide/newkey.png create mode 100644 internal/web/templates/install.html create mode 100644 internal/web/templates/site.html diff --git a/.gitignore b/.gitignore index d3819d0..6993ba5 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ coverage.out /terraform-provider-llmgw/terraform-provider-llmgw /terraform-provider-llmgw/examples/.terraform* /terraform-provider-llmgw/examples/terraform.tfstate* +# What a development server run from the checkout writes beside it. +/secrets/ diff --git a/CHANGELOG.md b/CHANGELOG.md index f3cda0c..240adf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,16 @@ APIs change between minors without a deprecation period. ### Added +- **An install guide with every screen, at `/install`.** From three bare + Ubuntu machines to a first answer: what each machine needs and how to + check it, the release fetched and checked, the setup screens one by one, + the system's state, and a first request with a key from the account page. + The screens are a real three-machine install, recorded and kept as + terminal frames — sharp at any size and a few kilobytes — with each + session played back on request; the administrator's password and every + key were masked before it was kept. `/about` says more of what llmgw does + (documents, guardrails, sign-in, high availability, pictures and 3D), and + its install steps are the ones of today, leading to the guide. - **The company's MCP tools under the guardrails, a rate and a breaker.** - **The answer:** the caller's policies read a tool's answer as the prompt it becomes. An instruction planted in a ticket is withheld as a pasted one would be, and personal data is redacted. diff --git a/internal/router/handlers.go b/internal/router/handlers.go index ef2ba52..0188ddf 100644 --- a/internal/router/handlers.go +++ b/internal/router/handlers.go @@ -204,6 +204,9 @@ func (r *Router) Handler() http.Handler { // What llmgw is and how to install it: about the software, not this // installation, so it needs no key either. mux.HandleFunc("GET /about", web.About(version.Version)) + // The install guide, recorded on a real install: as public as /about. + mux.HandleFunc("GET /install", web.Install(version.Version)) + mux.HandleFunc("GET /install/cast/{file}", web.InstallCast) mux.Handle("GET /_static/", web.Static()) // The language switcher at the foot of every page, which has to work // before anyone has signed in. @@ -366,7 +369,7 @@ func (r *Router) Handler() http.Handler { r.selfHandler.Store(&h) return h } - exempt := []string{"/health", "/ready", "/leader", "/v1/openapi.json", "/", "/about", "/_static/", "/_lang/", "/claim/", + exempt := []string{"/health", "/ready", "/leader", "/v1/openapi.json", "/", "/about", "/install", "/install/", "/_static/", "/_lang/", "/claim/", "/signup", "/login", "/login/", "/logout", "/profile", "/profile/", "/scim/", "/admin", "/admin/", "/chat", "/chat/", "/images", "/images/", "/3d", "/3d/", "/org", "/org/", "/setup/"} // The docs are public unless the site said otherwise, and then guarded by diff --git a/internal/web/about.go b/internal/web/about.go index aaaa759..d7f5164 100644 --- a/internal/web/about.go +++ b/internal/web/about.go @@ -2,6 +2,7 @@ package web import ( "embed" + "html/template" "io" "net/http" "regexp" @@ -40,6 +41,20 @@ type AboutData struct { Site bool } +// InstallURL is the install guide: on a gateway its /install, on the website +// the page beside this one. +func (d AboutData) InstallURL() string { + if d.Site { + return "install.html" + } + return "/install" +} + +// Still is a screen of the install guide's recording, for the steps here. +func (d AboutData) Still(name string) template.HTML { + return InstallData{Site: d.Site}.Still(name) +} + // releaseTag is a version the releases page has files for. var releaseTag = regexp.MustCompile(`^v\d+\.\d+\.\d+$`) diff --git a/internal/web/guide/guide.json.gz b/internal/web/guide/guide.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..6da202884ae535cdc733ded268eb1337cc0ad62c GIT binary patch literal 27528 zcmZs?W0WRM&^Fk{v~AnAZQIkfHEr9r@3t{*+xE1kZJXQk?0&oNdC&f+>qKQlMPx?h z$%=@~B8Y;5qT2am1p;dBYH4ChZ{=)n2Xx-$6}LBbU{DM()(`cwbA@Hs;#%TqwXsc>&r3VMi;iu z|3mIH$tIhSiizbxmJhR!^TZ_$02tjd9Q1gfzRG^S;hQia>R9=_>5_Itob~qwucg~Q z$Wx1v{;R(e_dKE9b)Vk+o=qQ?F$6!OCPMx>?CNt6n=!3L#M@6svDuy-qn0TCIVJ%-POu;gL{_||T z-KEjma<|RktBly9Lxr`}&nE+Qs?XEmMZVqkgmMxpia#Gqpy(kXKK!Y8Id@Z=B~;dr zDFe{9Yg)phg7#9aoar9Q`}Hwo50CrGi1g?Jdx%E_`{EuSM7Oz?7zR)0`NEfq){;BjtU4X zmlUX}n`ZOVKrE_RH!YgnYxWT(6_`J&;c<`+eb&zhQEc%lsMPCllIQr(Z)`wOJ&tbg zpVGJG3c$FwN-Q`^IjZlcP2f~dheO49a7fe0Ra#DA znpx@I_`jrW>B4q7NJe{>D>JZ--rY6M0GHI>H2Q5?b=xk#WO4g}ez7lillEkZ0!SZJ zs`*`a(_+@=qV^w@%Gq8zwJSQ)yY1xpF}4qkEpO|SZ9Ub@nziIU)vfu+1}T?v`_IVV zpRO4sGYEVrb)LN`4aQ0Kh>(ooq38!%!JLf8__$YE=nn{p95D^|?m6KiMozT4dY@Di ztXQ?flsfWv;(=Xp;^(Ul_EIf& z<{Z>-OUSaGGEV#@kMGOrPUJ*BcXA7T^VRu2+9E3G#)o&YV}WgoO^k(Tq6`OcB*x#r6wq^ z%ya}(r;*{VdZ{wEgc$iEpk(Z)^v(qbn&6bjKV(re`C%Nx2>l=~>m7%zQmmDL-*RN2 z0q=SMK`=>*hck~=CMzMz-JKltL(-4E(jYd$1E5WXH_qQZpj@n~W)vUFeao7RTK!9l zhrGFVKYy(Eru{TF8@2kB%`Po*@2g3=`_IgfT>O>mfN{R|x7)_IW?lbH7cVnE2ii}O zvXnQR^OyZQukEFM_O}fkbMDQvaES9euM<&?u96YDI~2ewXL&kodRw{m@HP-eZ%J@)O5K_fm&`8HuMHZxpw9Z}vqi6uBj+zbMJ#t&ms1l^Wxys^(#6_JDX z*pP~t6&Jmfk^z&+;JKagdb4#twov)CK3U0nDm*~?Nq8_J86G;7zLy6#O!QsiZeO+fH zC#vg8!{mib&PL|^)Qq~S@&OSAdUHQ%U#@py3$cp;0CVPu(%q>7Hqs3ay_R7LdNV-N>` zfKEeTr4`XtEOaAp6HBVSJ<>)(6f?<5kxy`K9}i2w;5V}~-ULf04vpu}?C(Tp39 zdP}mNeIkNWd+MO7Sa*6IB&|_hYwX~C4&m!{&adN__rrkF!vg|=jzaqkL676K@AF@j zmHJ9^f_4HwR(#+4^F4+hPuqw_^%WN`>tT4^X;CvBo|o(z<`nPd4u;9Ay`GfENAdP9 zA38gGgS4_PALHuB$0=P_`Kea9uhc9#G|{svz57(^@EWxh9VxZN6P85Ry-L26OSHlt zLut&%xrWt6@f$TTXh1fv(($=7obh=z~RJkZdY`;;M%ekJ1h65y$@V-B8owxU8^q zH;YiTF3wQX@iAMnYB5*0C12I2Vmq4%Y^WZjUvfD&8myO*D_kw^RzIH~l{%lFR6BQS zZCovOWpU$DrgkYmMrv0*3Z)<3m@O_*JyzBrb+M#{)5~lTP8;Y9p{D~EPOI9hgcD91 zPZdc!l^4b^-kdFNKA0`;j+!m57e1a>Wq0A)a5|n}7du9#XkLcWqt=1ftLT8zi#9Eg z!QGmaq*=0RxCv>%Ln<&ZI4joV*vCR|W7M*jw{k$HP~YR6i>H*Ysz#$&c1EUPcS56J zcSond--<@jp&p8m@C=SfX)`o(wM)04L?d5Dg+@7(85kU{W~|R>VZ2ccVXQBlS*%;|C(TI#wA~NLn2?+fI`6;4~>|j3yTQjfkx3eo31MQrc?BSBbLzmMMV-R zOY4Ms!Cy5hdR<^ZBU4iW1G^JDn!5#bWx$En!Ol?uq_~Ig6@-?MFz_-8T}U$*3`MHpmC+8rp(HU@f(@sufUrQf(pV44FJ%wPi`N*Hu1_14zD}){7bu@EE)u(O zXJhdEJ{*#lkPeYY6B8~you3_RMdMz&Mdw~pgUZ1k50(G+p!~N7bC!z@R9j?w7^yp; zaw=$oStP``Z3oy=N->+X9(Psboq zBM2$6X$U3MH|CeQu~1f2qN1`jK}BZX1r`o?2r0=F=O0TZq?a|Yl2>d+MnrcGiL#*? z6}C4pDH%^NDLGRx&HZg>QnK#ItqiYk#z#?8509uA9~K=>H7;D2H!7TTyOcC4Jft@& z9Qb}Lm6d63bAYAIs8E`lTpRd0eLpYSqYGNyW{g~l@%IHGpuLfBuoWwKQT2!LsWuo< zjE9huHB3PF0Vbe63DZPxSIKo^u*k|9 zl1cKxA_NmqXalRf=>%(ZP70w^s^x0iXtu=GmZ@eCC8XUJE+k6H79pe#gh?KOYdoND zm6F4Cwv;v9UXa+RztFE$JL9~JbC>;4B0c?DfIaPLozdv)GNDnsKc!Jyu~UgN{(AbG z?(Os;=lS%ES+7FJtX&ns{cmMUYL@d$J4@|(rAG7j<-S{4xscP=tmS@~sk@m``*Irg za=oNOWw5D9gqTN)8SRR#O$I}Ima1%kdI{&vxbU=|cR{J#icUs}LUcSU=&F9TsHGIZ zj1&Me*V`|-qm3G03MA;ZZ6MX+7lr?|ob%z@Sx?7p^yl$1ZPk~|=asJgPUmUgG?)E1 zk3v=^>jL>jUFB6J#k$uRwcPzdVrgPk++^nsgKz&w?QY0kMjvLc*QcCYtsWb7h*y9> zVA@iDmpss2p4XX_N;5VA7w1(5T!(}G+!cn-zKE^ytxs6CZA#JaVx|xm!3x{&z#d}Y zJFrJW!YpGH$G39YE0~s~YPkq78aOb^fTWj($1bc+Y$u`E=u!2$A7m4`JU-kdmlV{? z%;RCgqWg}v!K{oPoIF$(+f4@Ex3mm8(|@xVhQ zh(zeIfzNirzx-RF4S!51;J({bCt-IzFzs-Zf|7+Slu7MeWtEp8g zyz)~#j|c7d!O5TMgD*F!If^HNp3*gu*eh<<4tw*}$|LJ`MOBV#Vs{F^|wq+=ROsD#KGpI_Zz`vfplUm}0ONHw`cHuMl;DNHJzXGJl zG?rZZFpiu}UmIsCu|Quw>#9jFd7e;SJT;9~#&K9C|1NrFTaYJe#2Ujw7<-J^8{?** zvlKe*OEBtjT2=fR4%auLZkA7+schY}!o=$uid$}L3Q2z+vtCr2bQ^!LgC5v$rekJj zH%Moo%Myb^9NO-#(yd>?>w2i2$Yqt$Y><25Y{E-QSwf9ojJJvgm(D^%MKN>yp5c3` zgghMoOo$xD(kMMcjr=epv zMtE2*Gn%;QuLEPFgi5td^jVX74jhkE_a?nMhad1*(adVD8*ac=jq62WP?qsQI{Ek{73JyR9KuU= zyk{Fz4ua`yFiooOsUYJ5eQts@qK1w5zK22I5%p2qLc@IE7oI`-vMI-PSnlShe39|( z*Ho)IuXSNt!zKX{@NKDIo?S5E*3ivQ@3@;97nZ9cSE!)FAn&gUKaa1Aj%OSegd9J= zI!{ck`^^*6Zl9K|D~2!EmvnagZmeLF-xF0l@4O%K_(O$ya4HI~U+oKfzrHU0#1u$B zAFH`~LMHTiV$ZM5mzZeRJspRut6ke-MDLiJ1AHl#jo`D^MS7QN^G+Z4WY3Q0?Z`CK zlmnGzYeJI?Js6J^-x#^?H|_UC5Jo+@_ft65hArM^4B_fIigOa8W~iI9B-vY`LpRpY zytbg!X3^gy!MbH2YEI@rPTtsErM96#1SqQrFWL6pDGT1w^BCGoPSz4MTN{G;0tU&2 z0%^cTXFD25lpeAKLe~oT})!*q&RQK$PS2l!vBg0>{!v}gRay+BR%qxHOB%~{;;OU z)@E%GSMk6I92n@pJ^8aJ!4nH|by$RbIe;$6c;OP3ie7mT$mozVx5V}LeteSbD&J8{J=ZqQ^iCc$K95T9ZP!y~bwS04HqtTmgx}?`97OBp zpp{UeI@Bc1Y;gMI>~56_wrhFsms@)}n?o`?HA5g)(R zOgCnuae6b}3WrGFbJK-CbE<**>-eo#LS%&Xjt6zX?`xm6sdcu?}1io+Q7No=|b`o1HfP5p(sR& z@;gr{?g- zM+;6!k;$O^T@J;0JU-zFLU8)?H?BnNG~Po#YyevR-m+eVJhL>_;2d6Mtk8ST*TOSh zB_~xPb`95;okf_J?5wnY-AGBC?4LE+ft-)bJU@eC_*ay4>DETPsa+{g94cpzNBn|o z3a>vl>Q4<{x=vkmuXpHwjudPu64r-W%g+uL5DQwJ+9Ada<-1G|HU7k4K@Hc<)<$!rd}?dO z=-Uf$&?Tn0gz{g8{wjo{>d!`OXxnB50VbtQQYN>SmLK_x)haW_`4Y;s6=AdNg)Wtu#oStP?A5yos7vAneVfK$ zqLx%EC2+L!SHe(k-Bd1Pl;B>=Qii#g3^4t~t?%1snm~t6>JztBr;+lDIraOe=Z%pP zkwV)!*SmLz{Cq{44sBF*G1ZeOr>@>;7PrBlUnRH29vVFb8PiAO`hPOhRLC#d+uxUO zbdI>aEA{0w0F?k~{?W4~wMkM(l|UG3ePpYIP(J+E(ga!ynY zRcBI;H^1dadrfTiA=!~ahhpcM`zO;=4-mQ-jf5ZHkr<_D$MHrGOXjsLL&wqqqYZXt zKs9I_iZff{NCVC1$)e?&QWwdj5v#6%J848FzST22az}8~SErI3At$D-P#1vYfZe97 z14er?GYYtos+Ey_n0C3gmIt<-WrQ7_-k-#Y#8z+Rbz>-W70vvY>ja(pRMDP&su$ z9r0_}V$}K3{mk}H%#2o03+LoL^-ohFF5G+ehlt+hy2myrq1ew$|BGi6j9L|FyAD-< z(tZ^-+XA8;iZDsvCG%WA@_S1Vr(Q&Rm^+9ss&e<)>Fi3AU3r$-&5R`Rec1^G*tOU_ zBgZQ{C{YXv=@7ME7aVtJPuutXx0OO4aloW~uysGgk4wB8N~+8m+Xdn9d5!Hqm`Uq- zK-QRI=M5s84Sk>PVwz%SpPz9Te8Fg%4o8P#FAym3nzqeXn@07;>~Tw3l+2~V2CvDe ztA!6LvREcr4#S(R8`<56(vzH5psx=(=6KVs(PkT+ZlvR~T#}g^mg|3$CoIONP6Hc# zLs{;mAT!#3Q*3opY&H=KU2$<#J|q@8*YsQhChVpSNqB97OU=H~GA0JB*n;#|SJV!j z4r5F0&iXK%4zv-CkPTUQHCTNLVKefedf=)w;{R%#G^7#Qs7C!mds&xa@YGzowwZMooryKivUN=-0W25q0|sA?Upwb{3V)cvmAyqRua zz~5#ns0qdfnp7peh=z}ST!tVNSmZMdw#amq_~z%K_MsE{Vo3U-4&Ie5yL`~2en|k? z1;A#k6)zmSCx&F!J&8u{$TuXg%pRSErZVSoxVj*t!rTkE_UlgqB8^qi-L2)R&a&3q zdiOd5Xl6;@+R5!vN|Uk#2`)VlIel0#g9LTy5pT36*+~jKpa)^_uY~vQ^`AwaJ5Yj+ zYs_i48?`DL2;EF>k&h+dwMN|a{05~#f^sGaB=a)Pk(tdC2w*_2d(+T-w3>gHm_2ul zk}svod72xzn?6pElb*4fx>guG_UTTEY*{xyGhT@ep*FO=c^Nh&gLLN?!bGQ}5-B#c z{zbooE5U3rD9YWNhst}b6a;^ z2*R`Wr#ml(DoowWM)06Qrd}H?d!^bk0?*T?sA$r|`v(c;~9$#mgAbIK^N&jT`&=lC7; z8tqf7`us=WflYL3as~X5(g>rDsRWq(cXGj-SK}aE;!*IEXJ^n>Jm4oyG;swT&|wbN zYohB+<}-r%FW!hdVab)zlqdvr1pkoQIxi`p2NTAQnibbyl#d~wusaD*%c4xgeBJn3 zl51IK`b>zyI?$QRh1!g!OmYgT^KN(Wj5(qRzC+co+j2VJ7|Uj?3mY+n2%&kvliSEo z6Kr7%jTb_gdLfnpx<(!`izn?JnvIehX86s=)dc`1(YEkr>H>o(B_bk(+oC`X*Ez)R zMu`D+_Qn{pxL8n$2zPHT%mjDyhyDySL_d7(^)a7Lk$`_72=j(L0F?@y4R{F<-wWb! zBs@F}=i|qb(jI zoamRX?nZC7is;DDm38#KCW46%@JOPCb!rl-6}Pr^mR#j-;Q3n z58LOW?d~Utq4<|l)Zr%>Aa0pSm}v8I7iF^&2lr*3fv`GEWF2mi*LmM5t;pJ}Qx`ZJsmM(@6bf2>EqsJ<$)XcALI+(1fB z^%z%c$jtNm&Xz|8=z!X6js9lpC>dB;bry_SZ>cYk#4O|}M6lfMx#@Z*anmTBoQxw<)a{N}Z5AGeo83sCQ5Y5Tj+-i8$Cm6!$M#0_y)HKenpkV?+nX&eW%P83#s(( zZ>`u|RV&sZ*3sqyWwXIK(aBUOKjq z=zhG%sICBXu8alL#JW$ck_usspM^(y>4vIZosM2YQa0Hyidk?}f^#eyiWmD$6W9+(8G4-SzK?~lGD(|{Z zZmd+?vpnteBZVgo5sRyhyY1IY#A8&V`LR58@zzH+mQECfz%B0g1VFZL*7+OO@7Xh{ z_|I*V+oz)dA?!9Td_fo!o@U60fsGrngQMB;;)5gb;D=Hham6DHnIuu;p;99n=oiqy zo6TCX7_l4+H)6H&LJ0g1i;=BmQf;mX@_IviTyB99Rj3XuNFN`K1189yYzN(o{R0- zX$_O*e^r06+?Xo8%c;p%=%9DO^TgI>odff^IQe|_?#phUg^tJ!Yg8xi_$^Ue=)Dzc zOOKY_aBY2^Ub)})ceImjF7k(B>|9$eG;sFH1uCdE^PG7c`E@G?(P8P2 ztK@E;l(uC<^OdQ|k(ZjO9RK!p(z0WG^r#TC9k(P;k|F3vQH<%TD5Mk<UD7Yf^UG1c}>Umjvv;R!Ee@D6&+!+0F zHAAfOeJgrZU7;e&d;aNI>k$Xx5`L>U!;ag|6yam`vAfGqrn_i_29C$<3RPvEx&uJ z$sUvooEt_PT{!??Dm+TP%2f%J*GZ4HBmzLQ*(|pwt_9KnzWs5DYmRG`;yV6AbwPFG z4=G0eD#vuS-7OS*V4~9dA5T=Ai?!f5B9Ty`adSS=K%q}namOI2-qx zUB2_oqa_gyO0irdK{m4wDsY-9BJ8an!{RwU1`o>8|fKE~DLPFPm?;z70`(5U&3m0lMf@PfMqtU7g3u#XWn~tAR))_^iRP zb&G>qS09=jrUiVMP>yw1*BM)v3+3kJS;90`(+aWdoDu@mIro2Lc>i}?3@J`WB5?U< zI&-z_?eRSv2?DRQt#~wOj$ucN7^eLy;+JZr#1ys14I`3KwNg3mxn{81l9&b0xf6G? zb`r0TB=?TRkZ={d8=bJoOUU`_vTCSeMIT(V6y|U58FJq+zz0RO!(xgU=XH=n1?I$b^c57@&d54!)ZR zyR1LxL2K2HM=tMPy^8di2#KqbgIHJ5X`SQo%UqSQ`;Thyc*k#mTItEbOHz3U!wmQAxyU=QV)^qOipxfm~G@m z)?L9ALWNy%9*no2n=N3RNFDKesbhF^`jgS~k|V7pKY!Uo+yyz}|t z7`^!I;ch@LEdAH+JaEDZEEGT|b7#E5p93CQd(U4wCBg~zlcdU#eHAN-ed`jS%xz5~ zJH~R;zRV3ojNPqTF^sY;+`it{W~(@eMgJ_0B|Y^rG)TJQ$ZN#Ky&_%IGX32(VSj z{WY;Xs6=kA8|XMlS+q5*-h@_!XpVZqMzO~(Ek~lV)CC(XkKu%rwjM%PX|U`vvw{9u zeD+LSw@7{v0auZi4Xij53ma5t^g+umC7bTNVIcunuR`~ips&Bz2wIy=UVP>nSI*ku z&-!EzUAlH1fD(v{*qOW3bKA{{G(TlOk$l+(aY_L^H!_q@BJlui^~sOW3(-SiQ@r!hu+p3?6H$|0An% zX}!b!Uul)pv4L{jg(Q2Jl|pT)2umI4g5#Rc?ZNEjJZwo?XYL1ux93uD_-LM=t^Y2F zlVAXAxM^t986^C{RcP)>J(7m4TNYRoi-}8AztTp_*DUlg)ceahh=hp#Hvc$Urd_r> zoDUMc_GSFd%vB>P((n}ED3*;_u$s3km&eC};FpUi{YknhbJzaEMHX63TsO8ddemrH zuYwVR96pN2Ks>%gp>qz6bS(8Cd)laykJ-X$cb5lrfEy<)FS$Q-&C}I*`2I;NjOT?QB>SS)xr(P+*#)a04A4O=1h5bPaA`09Dm&AVXUODC;@CT*CW z%`z+*{_~F@I&SKxt|65W5ai^Yf_d712t0N=O4$sQNn2lCCL#aOI?qTzH?P^YoOVhW zi`z`H8n2;QOOCValtW%co;oPgwq9hW>)r#C?6k^Z{Q(zz17kJ}1?+**^2V-NAss!Y z&(1cq&}Nad*N;;;+Ya9&pS!0UVC?OI51~((WxOV{rdVZ@ZP~Eioscn+(7g>dWN!&@ z{**=SyLo2L2gL}yZ<1huHR#`o(w@deDMexXgv##5ivC+kpJ(7vlo`PjOPwrfp%3!u zOx6%O*y(R)!b^|P??{WPj(DR4`vo}d=I%awB~c&8SdxupQ`109M5LKMU$BVCh&OhF zFci9XC60a|UM9{n@qX28>gpa`qR5Om^cyPd)d-@|25c=MOi%NBdfgtr7qytz;`_k5 zerzhK27|)PLysNhS@*LB}ZpdJJGs4NUC(7efnS^ZvKF4O&oz^US-WJs1_)YOygOe{7*8l;4U%&YmYM zjdK~ALA6Yw@9RxR92fPknit!(lCtH6N z2o5Lz!ol;KZ{y!Qa1!#L0R7Sb5=vIkiZWSY0lguVxP9jomw~+4%(!o7j-gpA^C)hxS%V zJ9aXP4xO$MAMozd#FP1rI)})%M6>z&0?m_RDnrbSXdPvy3^+FNCD=G}@N0`o>_6OS zCiL0ml4AmGM;p@M+J~qgF(&vqB7Ezuf*H6>f_$02?=i$+EG0(^lvLP{w|~BscE)R) zBuxF_!5_xKEK$yBl%#JvBzsrbCp*tDoB0kje3(soF)`?P61wY9gmhTLEyI%22kMR> z&2AE7Wk5ew^UZ&d+($wfE3IwBvJ1KjGvne~i2u~|5tpDd zU$_lzhng#^U{s@2+vl>OJYF1(G114)@^P=NC@RK{Q74yPaB<%sFM!_~x+1%!cM{vz z(lY%%R4nfMvyol(4jlfsA(_8b%}Et=YR-+qS8nPC8D4O|Bb2v5G^&H+Y{(0)$B$;L zObqfYo7LZuiAp)Ig@Ae6lYEyidF2H!t$Pql5@0UN{8j4diehV^$9&iVTL;QBtow z5vaz$6E&tZWh{r+1MDgd(5Ec&%|v%Jg`NdJa&8W-hpnVp)Dc{CJ{l~Bv8}`b?fXBr z7KZ%3NI)tzyQnH1bruB568J9+X8jZX<_mh4S@Zb$mNdd84+)eN`T5^d00f9WpvmI? z5r3%_vpxY-&_^7YG{pRcSkNzVWq$FWfG)JpyyGY%+UR=5R{=~IYx|ITR48LZU2seo zW7_CWI1_}Q|9Hdw-}mmC-_3Z&`j{HP;v_)!d7xyTWPq4(*F@FVmzS1Xd&vK;{H)h)=!S^S16O#c!*d{F06e#Z@DYZ zy4V~5$^z>>V>wbY;1Dka8cfa}mQIr;a*u#$)+>K~47Zc5;efzu^C#pLax6FfcATHQ zc7?GoC1(F&6?9*~Byuc^D{{ehN?ypO zf3DAMb{#Mq0~Tu?9pXZxl;E4Mq!gnI6^WUkR2;!XddIG;hR@AJA!eK+lO37Ec;m>g zKbunKJ5z?Mcc2uwC?h1M*xII-pso`CbF!~fOrCf~&(dH=M;!fWlB1VBOXMVaN`+s} zYx}JS^{O=EPFoWPKw>QdZu-b=Q;{^ZO0D2gMSA$=g;+k|UX=h?P+hEc#hDpmrn);c z^fp$fqDz*^lBku9{%vAj|C%IpD1)ou{gL%ZdVEL^=5u*LfPwpFgiXRF*F64`a%6~IGT-a~HM)`#W6V_X}aQ#u$L04aE{M&s7FuO8aN zeNE*OC2xpUAlXS?WIB2r^X<<4#|@F-`@BBe|Q^~F%ErjfWVxB+AcE5N-|g* z5>8-Lq6O-U2KJ7~GKG81f_VMSaPF;*_0QXKy>tTdmHXzfb<9B9 zKT_TtAD2ib_}4NHCJW4}%7;rKOsax>V{SQEeBx#P$yPi?j?jWEa3%V#nrBc6bFUg& za3w3GoT+~$Y;fiMu`^WxTWld1ksnSG$ z1@4*|?L`p2T>fPDTEh|e@ea~WQ_)P6jAa>vKYgb;Q!5d)#I;vZs zt>+rNG1Pm2g`dT(hzK+D8gO6+92gXP%m+kRg>_>iOh>hWTkZHynP_sOTluR1-X@nfwSUiiTk#F39% zgDt-|`k9`d_Z2P>gS|d%veM0xG^E!=+E{G%3~7d@`J z)jy!Ds=oeF4BpFk68P>PM^z6oEU}~EWMwC=$Nk53L$WOMLuYclH@UD)%R53dA*!MvsY?R|wmA2I-Dcj8l zc#^h~NkSen^wF7fE5^Myqn-%xjRyiok&P00iuR3QoTEI^A*7PEtA1K3-I+-<1JL1Q z>FlWcu}jd|>;a@AR`mhpVpAv^KHDYqCp<#EWKcW=4LcRI{3hT`V!+r(o(-Gd#r;(& z%Qa#AXI%`ZJ*3FrI8m+!>6XQdRcA1n%ZRK~OsS<3O7Wt@dLy#7y~Q*eGO=7S%#>(ql-Za=1x}HdkFx|h|CeWP@jvV@W($^aj#@u~PLl?D z{Ec|NfJ2`Gd{#-gT*{?O4Z3XpO(5w~Q!Q&qR4LqvmmvT2ksExC*B_6OV#R2&khug& zQ`gp>lOgN9xd)Q{hhVbSQ0a&0BMYF6DL^d?DBpN#O|((U@sk>KT|=lz!MRrzqG?93 zNkO4gmAI)k)*|oFzZ}-W0A-H98ff8PxEoduHPvki2eDtM&Ba~O+-6TFOv%Vno>t>L z_wW{ErAlN6-*1!_$^#;6E?5>R{lbAPqotPd2|4a^#{5y_!d#tv`a5eq-^wCIF#+gk zg{44wAXwVY(U%XI8hPj4lT?+o_knE_o&L>55M}|`lS0*G6hf5|CtpceY~IE{U=3&r z2UjK@uFRNS@GdwKcFn&e@p*e&D(I^`MX}9J&IY@ZcaEyRX~ey;Q%6KG#wt*{l8eTV znq=Ou3=M(~*r*ipf8ZFs*BXh-Yr-oF$nE`LK3VUVHq_TikdRE|ryAnNLe@M3=&L#5 zYbh559q6luL~4aNW>fTW-fQ+}aLh`q`n?Y@&s;Cd=9z4#Rj~`@drpH=+_O7^vNkK1 z%-C5lWTwL_#o6kkMDAG@JMD6<_+q7NnAuMZn&QJD)PW8WhgKw(_E;NdJ{h@BkzGqJ zxzr~3rQ9;V!H9M?q{2_p52^yF%9tL)j^{QJE3DsSRx&3g#joqP9GrA5We^JI6FAg#y4@i!ckZBWUr&7&UE5E>uH5E7O zz)A{IE!Scbkx19$FF_$IhCh^v$NO7m_gH~(L65yKh{q=lZwRBaJPwRy4(bXaH>xi| zIgx|Hk}{p?MH7NXXx#wx4|}6t;T-LpFtn#$G$4c0w;piuZ#gM8T8JqffoUAxN9xI{F&$P}T37FT?ve8^jS{stO zfXxyvE7EnAovXi)R$iyAjAkQ?&?IPbA!+PJMtFOu)#CAev3(IGb(7F|(&lLk% z`~K}roIaPP{}-1;$i>FrP(l9KKS=Z+Q$|RUgy6WRvhATwj0lD1aG9ze@!W?(tO{fW zc9Ueam64tFQ{|3jI2`B&tnEx{WrZbn?+S}CIw(Y^!!csv?T*Gs(f}Md5gPbJFjWvf zY+PwUve}}(0s^f3&bXz>FP(U`P;8KH;J-FYG`QBA-; zxCxP|yndN+pgak>@;Xi)%iF36PB>&x?-eI~US!bUzV%p7J1NN)3d8MA)BvJ58(2Fh zI($?x{-<(}4KbmU)5GRKtLGrXSY{uyv7;HFWCPC&YHMnm2JvBulQ_$BRCb2 zA;&n_mm2A`0J87flE^=M$s{ZOCkkXBBKN?uEW@(*;Ib^@+KXVae$+^_PQjc}sbC9v zyhW1`<>bl*R*VmoMM{oh%(cqgmg zBCf3jO+_Zmph@Eq6|yWw)a(z7(Q(ium?`H-VAH>!)VGzzR&tQNswFuo|BQ?C{fAsm zaOt1o#Ehidbg~D1vP~7EUooPRGB5$?UC<@WJG5wnTCCsW9@2vSCPrjTd$mr(8!h0| zrxA%@KK#*b4=-rk7gZNBp}2mla3dID#LrmFRp@=GcvSMhMI{i*to73tZ+YlrB_^ZEDxd0MkccGC_mYwwdax)cFEdG%E9Gj;lbWI=C1)Oa z6xqHLi-6ej^Wqbt1MOYgK%p@VuS!z>Uu~UbP+ZTp_HlQ24-(vcaLC{i++BjZTOhax zcXtU8+}+(JxVt;Nlk-2P?tSZ?s;RD-{b7ITS-pGpTF>*_oh*7JS2OU(SEv}>?oYik zdqG!@nL4kqVFm(%&u~DnRm+HEvnbFWdNx}Z6Dw|@58VwIzf#8U0zh^H`efK)UykAK zk92V;A(s}#YZRQ?oafi~phCGFECmRnUpM0=UdG7v$}Cu_U^~ACZfeH>L^1jfpZ1eS zFh@=TlBLluPr^WZG-f^8r>S)P&yZgfMPh~R+P=cXb_vG{JGF5*#R~iQT9#SNApx0@ zV9y*q^2o~1)Cx`ej7*%|a%KowGQm^q>)5_CJNmf9cy`U9+ft^GC8u$LHfmiBIlWOU z8mv3`A|2ORO^sD<>tbkw&orQL)%y(o&o~k%6x5djJfu6|7`>1~D&73z$_XdXm}qST9^nZ8=eC@>X#Lw*~0P!{Cw3HEm+fGAqt zbYFoedKtL7ZdWQ4Xv)ljQi0#>!0GYvge(HBYHaZr4$ystUywdccWjIX-Or<)iFI)} z)mH~tWJ~&&7U=#!xmh$VNeVo(YW;D>v0SP=lB1X({%UP3^*8GhmHj(HDA{PIob&6< zTTzZ=OJnUeunb6qTP~2>LW}7{p{W4HbRflatPRsVDA)NKhNg*F5_6^G*+~T*t(NbG zc>885ZNQ5{SPjZlBOg&``a)Hz?CPp^5+0+R6+~O90-=@~NPtlAH8z6ra2N)wo>b^m zT@5!W;<52Hg=YW@O|ebJpsqW4iXnf0bu{qBbQeZQ2wO6UXkgG7`XwL5Cc!6kDv7T2 zP=90X4QtQ@t$zIi#%$T!GC`m>LTSJkko+!B;SMD2;xOg`5-zwblq6(<{sIG4#9yB) zLE)8Ch9Ih%2AVBlRTxoK0`Q`E(Z5fqno7INjO0`Z*M4E&1?Pg5z@U^XxEnd`@>Dpujo0|Q>mM&dXVgB z)^>Mu#uD*kkS!wFS%+W>U?{(69OSslfpZPDZl%J!8(<)kLzso?+AafO_4G=6|Gs_^ zk6uC9lk^$W%@L4NId(eBqr(MX2Vste6I3jQcY@9&RwK@m%(&9=ox3?2%rvsJUyA_; z*1IymOXdGonu(a_mYy60Y&8HM-moTiy!oa*rp7C4*wovdq*K-7?_GtTA{2@f`)iu* z%SIRlMgRESAkG|!5P_UO+Kwwer#5gOHVl1x4n!Uh0J<%d1sa3hYTB*1L(7Np9HbrC zvn_?C5_YysdV#`!i%G&zWhO-V3`{<4-F&Nfcp3H6J=?Nld4($U{TQDd4rf2h)ay(L z0c#LVFYp-Pm5gd|9pV}+ky_9RBr<-l-FMu_yZe$R6B|CJKch1fX^M!Ml)^d5r?1)V zUHAv+gnyj~vro@CnKl|*U18jT5fNTHp)Q@qxv?H|d~}&Q*ga<@ORmFcFegW1Ez=Im zPdo`pr5rXSp-}?Qq5qrx|aKI zMxp4kKO98xZIF3#OK)2`BT%3@m;d0j}{-^xGb3Lk%j3~_&r82^m8 zF~t+F#^WFv!*l)#8IaPjx}?bWWKcGNE^ialQz}hQ1RkpwsVND=I1g+ixRE%JFX)YS zapsATz!%gI4lcj)SY=n3Dlm&sGt1bt+o|?R_Lf4E4x8RDavwOyh8D1gF~PkLZ=@ityDkv)!}GiN3LynoVX9iMW7Msu1_;S|p= zhv5&zp$GO;Jq1BwDS&N4G0RR>Kw$y%uBhB)AQJmr@Twz{Vx%u|;+ zo6o*aKBjbk3nwKaKY`(i2o>{6Nq)`sR%+tDBxiN6e$!-HXeRoW@nI(P`{@G5>^{@X z#f)8R?QX%h^ATQMUjos+Fz44J3*MrEWT8FtrPQlwrC!q_ygN(3zF(3xsV@DRQ=N{S zc2c)M_s|~gm*bY9W2O0(zGI*uPseU3=4X~Z4BiVR)d8TS;D)MI&01fKX31tO9rqQn z>L6pRNFnS+RM>{n2TD*K&i)?2b4`xs&3iqnU+!AwxIi8S;5*hj++oVY3aQ(4JjO3En)g8m!XKq5)Ir^oyAywkg& zLprPKy@+V0AZ=e%yUOW`=-7yy50C+4k~#r!Hk$j)Ip(=*pS^oM?nKp zhO(9si{-`wM6NnwbPvH>Gk$BfNJPcLz`5@c0sK!PaP{emi4F)E4oPXrt~C%?nR^dJ zz#_01HqM{dQD0KdHC4{O#J6pn(Q$GEO6oWL262mAmXTj`&6%w6=p0|ek%Jp_cz(4~3s+ZJ*zZlDyMnD~Vdf}|PaTibeBJ#?q_KL`Q8&zy=`p#Q ze7Kflo{ga!GxpN+Ks3~D#k#yedDMZmyt!W8tDS3)lcyPz|8jeayc!a&MTk7)S&gfq z$mQ}dWnjtgKd47I-X@>594+Al`$&C)!e)mzmwu#d(@t`ApO8zMCX2gVG1%(E#{tRD zl6gWvQ(dcB?RaiHN!mQu@vG|kbNb!q13&>6^4QdsAhAhZkqpsqzG?A|iUZ7#i}!v# zA|YOrx-6B~wF@h%bTJ0^wTh!5x;xnOSFU1@#BopGE8tvofF*f4C%=701|VWY@ptUs ztK~W0JSSp;LV6vU)9+rl*^5uGiBb8b$Fx+$R^eTy`{VC@V#T=VpZZCa+-eNgmZn7d zREoGcbag@9s;eKB1QQl`e0s^1vzBzQwVIR6@-9h>WKufaoWC`*e;iTkc~+LKAY@(P zq%X*=^fFTZc@>e896R3Dc1UOhDZPk_e$U_dP`kQ&eT)lDP`%U2YtsT#?Cu%fL=+9cnyJr4Jzty-h@VAtj zz)VTC_hGJFQG=lasgjZd=W*(mNiR|N>S=0ZwQ5I6>W-$;q*_N`Y5NLS5~!O3?lk-Trs9$sG|I8&R%dF<`{Z02Zv#=L+#e8%39vnEEUAa6zV-k$`` zNHZ)G&Pxj#5vGTL*YTnpBMEJ0S#zgLAxdHw9|s@f#}6yxC6kQlt70uKv|$;^QI{X1 z#}5s*&aT0R=Zn)5-5D9LSe- zWa~*Ai3jwdeqJ_nU+0-&7QYH{oKBO|SElPIhwuI#BgM&jx0+rr6I!#>cNG6CC<0>kU7{Nv{SqV^4oBHQ?^dc1kFEXl^v*r|XGe^IEK0~>c3 znWE(r$zt{UMe7?=x7vQ!4t+ocJIlQG(1{F2&qSMIDtjL8>yAuPj~=dYd6SWu!e(nl zB0m$B4l7~(`-HA7S>PfId+hA1u=4;uDv4Dx{MqXYkcGSs!`m~qhP&qHk9&k48!>ei!tyXkNc<9;!RJ-oF5Ob!x1W? z^7=l{yPV{tf*$WF0eZO3O!iOrT&bHsF>aD9_Ov zHs$Y|&H8SJDLXgtJ3S;x6szgEjO#YP=Q`OVy)Z}U{t~lrT-#~6957OC_t|v>FytE+ z+_S@m6pWcNVj8r0HnKnU^)4B}jHFy@0U+JDpB8X(GITv~vak9YN|D(^C%XXo=h)n& z`6S4+tYOfsUkBl#NAG`T_mHj`{xYWc4Ba9}zcfMVUOBk2J)Xp2znG;N{EH$RXS{Qd4jySsTo3I(&SwV1IbRwh!% zXcvPr8Sg=;`%NL%JWAjsgIpTps_r@xTY?E6LgJWGa#9WlBVXS0oy7oJSUZ`Vgq-uG zTyzsPrxmf9&$C}Y`J+GCZqS;$}ZQ&Ohh(p$X*H-5|PLJ_gg zHW)VE&gg1mem+nPZSW+qp=ncG0Ko<>=I*hVfX}wXa2bxTxXhfEX1QMB--R zb(xM03kde|lbt$?H45yEhhDoA8;@AhG=WW-)%Mh~F;Ny>;v0J9Qk632CeE)pXwx?c z+bQlJ81JO3sqTb^a7+oR74GSN9@!Sh(ZKPiBLxuOq#Ie8NI*EGxSHuqkN^cRU z;?Hg|uQx-YFO->gCoXgvy^i=Vf z-lMX3j<@{Z&k|hQ*pWN2;s} zPbp?igrpj3ir`K@>Zo=q9x>F8H4_I7t#cL~?8{tPMBFTmf?l!&b8aEJ&xBhA&jl|7 z`kId5p`OY_C$K+VG9EHJWrM0pG*O+rQ09W3N?W6Z(ZC>p{?>rp-RpJ*vK)?XCKjt`fV#;Y0ld z_lcTIuT)NGb9Xn#A4x4tZzPRd=HV0I+kXE;WA86~6`@cH3oFRrGvlcpwg)MMiBHUh zDift4=`l1rjvoCe-nJ5BU*oWrbPegY#PQ|Pg>PQ-kL$t#wHPW0`nkn0%=`BMho)=0 zGuvREl>;2dsT||!-Wbq-VR}O0MLhDKTT#L$bm;ke(D1K!C;FF+S#&ot^^dz~D0ZvR zgIqaHgP^}h{GMD*?%ALrfE%zCdj&26hO#;;$$$Sf!L}Rqk@zdB(Fc#~%{KL>c}->= z55v7fPz+gzT~`!g0c^Tq?;C7b;I7?3pNYerzV$Ha-;;utGfd2Voa+-Wz6Tn_?Vi_d z4jF(uFLTO2%AGYDP*x}uF1ND$RK6JJgzf{(u=eC3wIhx8QzS)@#q@{4EhJsA0;;7W4$)sSSrC`uyzr#suM}AF`-nc3aRbGu+wl_SwByYJ z{bKU`qNHE#yaAMeZ1n8O&`I;Y1NQA3{Hv$PM{h~*4y}KG07^6ycT2dzUXY~rYhGuQ zbLs}lbk!2!5g!xE8g5Ez+A3e&RFoa*X?cID{P46y?9_h^(q1x>MS;-|(a(0+7%ag$ zhkl3CyH?NaI#qdpt}8X(H7iv~T2spC<|>PSv@5M>;V_0s)Ug}oXVW+Zfo7aD{HyVy z2k_!PKnPVtM3aIg`&^TruMT61q(HvoXrk8v#jC9wG1<|Pez`|6=8XA47kghb*#y~c;?EnQ9VCw;v_~~VHwVmFBLWQy8(A3uFZvHSA>V6tA%k$Fo7y3T zsu_*e{B2N;A<9>k_#tW|W9S=c+MR~i_bye> z%dgIGBi)R#+fpEUW^;2~0!Y8}J!3ukhLYX++FhYzks8&>%XkjSBKD${aw9Xu_TY@< zAb2$CvW*kC5Oah zdnhA`)_*p{Ko0IPuZLk-;*SUA&V;lT% zDf|v1NhL7*I{HP44R6GD^XR-F3T~9IAITJ0#J$M-C0tBU23FqqK-}bl7Elc0$lrcZ}7&X0g>P6tho*jh+F`T&uJfr$%a% zZWV9(=(k6>*{W=6H|jZ-7!O!&y&_cwW}Z}a6GpL9L3T$#OWVRT16 zPFzB!u=MM#$Wb2~QMWzyV7yEeC)@lH^sVl7nHb*heEkml0czm)O1sx4@;Z_iF8P8U zhMmYaJqj&gS^<-tR{VMTG%VLU=wa~&B_Z!uZ*+4vT(``ngXfLFN-eU7{7iyk(gph0 z-YHZ$x98=pO2~~Bjv&{w*O=F}qWOGRkXTpf2{`cksutUI<9At}|82R)ZFwNqWf{jW z^?femq9P`f(!`6rIQHp*RLgDVrcdpIqJzO{Pox{h97HJLd97)*h1|IX?^#M%*&7j~ zht11^(pD$mri^{G>{0oH>zY5eLm<|;cpGXZult`Uc`5NvH0eU?xR3h$%#+0Odv;?} zMZP=_?<`40rS;ux+j7lD$iP&4 zpz;sU?kX;Z;)d&Gzk#{c~AidmT@R>+^;Tg*;UuVIOQ2jpSShEql;)D1j zV5Lk$<3cd%5V*&loTpkTW2?&I?S0$LIKrwjRUYyWfzupy4m`xDDHu|oU2w3+JQ7B6 zLZ8?U3tdeOLq~J6P4l?zm6&rK?~cQ?&7(oW0v_V+AQ0UZCyZg-xM$^L$GpPo<7?O}QS zG5Z86-WWS@gH%LMyYVvtk3WNbg%N?IJ+UjnE)_)twc4t%GgGz0iKNPhHD8*-qYE_1 z#%QW0yTGw+KC2{U`HjWgQ#{nytFZ*|q4ftEiTujZP-LLR!9om&{_j5>KPTzG8+rw$ z`f10t-ojRTNXYaz-sZ-EDhsb~+?`}fT_P~9omEuj<|+_4lTtP+al@}FU^$=Yrh{R z)e^C3soY_9fAZEH&Y2r>gUU_g)Q9nO(lA1h*DQxVpNL~a ztQuh*kGEiI{q|E2GqQdV8WTBUdNaH>D0XC#1zU#T^cDmRKpNxumx)4Q89pTOTSMrP z_Zuw2rzmByIcXg7Ah;iDUq~(+caM6%LzJpVr%{#VjwYTC;qK1;YU-7uB(1u4kD_;+ z=K_(AXmCHyrx1y81*G25qYxx)2wlzOM^YI#c9PsZvpvV!{^hh#iU)QOt*qBuz6VXV zrSbT`J}ts9Xmki`25`XDNVocKD!$turjig|eX?l;3iFFe{zm^3A}=guplANdgBIgX z-Pr4k7Ot$zI=n`X^}J!;m%oMwn=CBjGWev`!2C9K)c0w~x{`jNKwBg8KY*j@hU11| zPh3EDWW>_8735lvi0}DrH%{P4Yr)RR^*6QnB&2C@NoZe;Gdsu0e!~C7Ho8ZFjC>2< zUuz3mMh^hnTy~V`OH{$~aq03W@TrPvLa2>-f;v{5*&6Abj`@Hqe7k&WOC46vL;)M# z4TP0r(me>DJArtOt-@jRa5j6PL=8&hiirc{bBBLp&HX79<9DOeC-Zz)Kt<9YQHS#1 z)&W@vI&b9aKFj?ZeYZj65?hCQ$3QfYhZVXz{VI>gN7Tu?hXLa1&2c1ulZ$~ufIyB) zfMN?BK1LIRBw6r}-NwhYxtmwpB0e?!L{WC><;zL`4=q=<{aW+Oo3m%~ay{E$3|}cs ztC%)#EZvGqe(T0JeMcGp2~Ivr>gp9-lEAm5@*k9vwnvs@9GiM4{!mIfll!MU32q)} zr4y?-kz$by-F?T1mY*RzB`#cwpO;&bRf6N1TORX{V0O!2B6+y(M456icpap=0<-Eh zY{b-sLnM4=6HqD&U6_lZNL7^EQ(XL8pLw#uH^?-tz16w_XgVuKd~s~Zm9;6tAkD8+ z0*xjGDtXaRp~fQw0m=%noTqAwk;E5T(NA%u6?=U*sWvuKoCNOo!+C%;b?aT`K!URk zgnn1O9p8CoR==w_6Y`T|JN!$#t-E(??ao{EyDtsJSekZomNkz4NzgwMcT7XV)6n!! z3=*|*u_bfIPn1i`{dsG9h=#Tm5SEZ*{ z=wPe_g7`VwoOmF)$2}edQjS=0&$}x^@_}Kc4Q7IXuLpGzD>uRJ-mu3p-%|u%5@BRP z3hIcWUE(8lABmw^+;jlGu-oN~CuffID9X+Y?+#QO+ravge_Aq9KL&C8KnEPqrE!Vh zZ1|nV?|pLfda|?lo5GkXtRJDU>LOOgi%yiTFaWX-kpt>E7`R`6)R#A#v!q)^FDK7|Y-Jdc7ifc$FdC#hfMO*k31NIa(~u3-f3Lo}Ik zmJvkU`fYnu02K#RGtQ`=dQfTI`NhXl@@t%6Ihoh}S{v<#!4w4H!hJjb>7vPOiv-kC zFARnOCv_KqOYEk{WEL5Pv$)HsandKbzJj4WMZU%92)qkU{MT?en()M(ApPp@IP}BC z{}{ppxj$0$cwX65^Qjo=-6k^yiZd|~feC#_uE}V`x~srU#3ua_Tc(kPVU@}mj#5u| zJ)!G+$GZaN>{`U zdL7$Y{oh~kSLzVjLhuS{9r)Rf+?2`f~Nkw+Pa0kNDM9BzReD%ziIQrXh^L501m0ZN zZLIYgyE8q_tkK%%xGV42b7!ZTd8yp)ALpZYqK*u1hfPA<4mz*4$tzTM@bMztIIM(q zvGNEFm=uDFhcd|5udlMBV6LV|so?71daZf+=|}7UG_rWxa-KhU8q0%*eE0ONyaq(n#o%eS(~A z;b{GNn@M&F`C}%XT#$*!!cnG5hS}=yd?d5f%R1%>wS^sRsX2z ztNwau&k!ZZ`q%MESaK~GE{?IBQ=2QVi%ptx^)M|E?yaR6F-Cr4v!LZnB^5j;TGYLyv}p0kN?b61j#f=NDuTkg7X823J+}&4SWB}| z#=B5t2TdP_lf_zP9F!%@-+~m%(qd7bZmN+LmAi62$HD}>o&Qf7;=pP4Pa5K&c18Iw z*5UaQnoFfrlsc~jvS~s7n}2TOGK@m!r(Zs=Eh}06M79dS;6V-?|jv* z9IB`jm%;UC51lXvE7N>rQ`(9=S$7GF(NsQF}9o(PF`PuruxE%b2AR~1=#pWRQ9KM%`(^l;kS+A>BjZKM zhp-wb3-^LdczC9gem9qJ5nYFNb813zkk4t7SB}O0_HZLFrnaWKm{~e)Rpx6xj^|IX zg{eRuGTyvQK}@T>3DZ$g8_H8AzcGklYMRzo>==n{$IxSugyRcE%lhY#5Q3P_pXA0t~ zd!5hE_lN&2+fgvnYVgXeu4j6wpj-iWXgK`JmG>%vPC@Ri6>a;xxAiY06;noQVL1{* z2W=%Z&1V05pN{D7xia~c7GAF!18dk@eu71Mb9M}Rjc1m}Ow2?alOTpJ1C2veR|?>Nd2;`A zjOvq<3rlB3Wyf|bwn%BXn3f=t&Hp2gLhZ;B_dSeg%w)EB^+>J6B7h?4D{Sf11ESIf zRf$m>UV_r3gXP@ak8&b|;8j_QeXSovW6nLrq={paz*>B^^(k#(g#D z?M0y%bsQ0rfJ6pE6c6eXT2kN=>=hsLnF9u>idtA2$0G1T%|kXc+Ri*^WcqTKibRBri_n8ev?pAhIoPF zqP;a4g>)bao$4;SGb|5Po3~^F6{yz>aTB-t`n|iSZrlw#1gQpt`Sm?Bn?O+HcuMXv z?v+uAcKAhG)?)bCwq$FwFJrO)RDp}ptXowr@qa<#f8E|*(}s{83a>Hrlm)bWk}Vm) zdRT<;SUgCTA9SiUDNh{7>8hZ&qTMYR@$jJUc)0LwP29NSAOW;KHMTwWm<#&tI>=Z~ zV|eVM4s3?FzaN5Lt1x?_>`rJ$XsneabSnzLeH>KslD7bL7#FXk5vz;t5{3j_j758d zDdLl|7Ao5MJ?17^_e%H`_jI@SSE3(2TQdLtWNq={a4c(WYjl0#JBb`aK79j9abLmP z!X8KiK`O8~t7xxV>bwb*H3n_+4F@2A=X#2YD%-CL)~QhgYilu*%-R&*qG6%NoKZRZVZLqw fb%;iZa7DAy>f?iaL40um0<8YIb8np#0qp+)LG;yl literal 0 HcmV?d00001 diff --git a/internal/web/install.go b/internal/web/install.go new file mode 100644 index 0000000..cdbedbf --- /dev/null +++ b/internal/web/install.go @@ -0,0 +1,249 @@ +package web + +import ( + "bytes" + "compress/gzip" + "crypto/sha256" + _ "embed" + "encoding/hex" + "encoding/json" + "html/template" + "io" + "net/http" + "regexp" + "strings" +) + +// The install guide: every step from bare machines to a first answer, each +// shown as the screen it was on. The screens are a real install, recorded on +// three fresh Ubuntu machines, kept as terminal frames rather than pictures: +// crisp at any size, a few kilobytes, text a reader can select — and played +// back, where the reader asks for it, as the session it was. +// +// The recording is guide/guide.json.gz, made by the scripts that drove the +// install; the administrator's password and every key in it were masked +// before it was written. Like /about, the page says nothing about this +// installation, only about the software, and is served without a key. + +//go:embed guide/guide.json.gz +var guideGz []byte + +// guideCast is one recorded session: its frames, and its last screen to show +// before anyone presses play. +type guideCast struct { + Cols int `json:"cols"` + Rows int `json:"rows"` + Frames []json.RawMessage `json:"frames"` + Poster []string `json:"poster"` +} + +// guideStill is one screen of a session, picked for the step it shows. +type guideStill struct { + Cast string `json:"cast"` + Frame int `json:"frame"` + Lines []string `json:"lines"` +} + +type guideFile struct { + Casts map[string]guideCast `json:"casts"` + Stills map[string]guideStill `json:"stills"` +} + +// guide is read once, when the binary starts: a recording that does not +// parse is a build that should not ship, and the tests say so first. +var guide = func() guideFile { + zr, err := gzip.NewReader(bytes.NewReader(guideGz)) + if err != nil { + panic("web: the install guide's recording is damaged: " + err.Error()) + } + b, err := io.ReadAll(zr) + if err != nil { + panic("web: the install guide's recording is damaged: " + err.Error()) + } + var g guideFile + if err := json.Unmarshal(b, &g); err != nil { + panic("web: the install guide's recording does not parse: " + err.Error()) + } + return g +}() + +// castFiles are the recordings as the player fetches them, compressed once: +// the page itself carries only each one's last screen, and a session is +// downloaded when someone presses play. +var castFiles = func() map[string][]byte { + out := map[string][]byte{} + for name, c := range guide.Casts { + b, err := json.Marshal(struct { + Rows int `json:"rows"` + Frames []json.RawMessage `json:"frames"` + }{c.Rows, c.Frames}) + if err != nil { + panic(err) + } + var z bytes.Buffer + zw, _ := gzip.NewWriterLevel(&z, gzip.BestCompression) + _, _ = zw.Write(b) + _ = zw.Close() + out[name] = z.Bytes() + } + return out +}() + +// CastView is what the page needs of a recording: the screen it opens on, +// and where the player fetches the whole session. +type CastView struct { + Name string + Cols, Rows int + Poster template.HTML + Src string +} + +// InstallData is what the guide is rendered with. +type InstallData struct { + Version, Release string + Site bool +} + +// recorded is when the guide's install was made, and with which release: the +// screens are that release's, whatever version serves the page. +const recorded = "v0.14.9 · 2026-10-23" + +// Recorded says which release the screens are of, and when they were taken. +func (InstallData) Recorded() string { return recorded } + +// AboutURL is the page about llmgw: on a gateway its /about, on the website +// the site's front page beside this one. +func (d InstallData) AboutURL() string { + if d.Site { + return "./" + } + return "/about" +} + +// Img is a picture of the portal, served by the gateway or, on the website, +// beside the page. +func (d InstallData) Img(name string) string { + if d.Site { + return "guide/" + name + } + return assetURL("guide/" + name) +} + +// ShotView is one setup screen and the label over it. +type ShotView struct { + Label string + Screen template.HTML +} + +// Shot is the setup screen called name, labelled for its step. +func (d InstallData) Shot(name, label string) ShotView { + return ShotView{Label: label, Screen: d.Still(name)} +} + +// Cast is the recording called name, ready for the page. On a gateway it is +// fetched from /install/cast/, named by its content so a cache never plays an +// old one; on the website, from beside the page. +func (d InstallData) Cast(name string) CastView { + c, ok := guide.Casts[name] + if !ok { + panic("web: the install guide has no recording " + name) + } + v := CastView{Name: name, Cols: c.Cols, Rows: c.Rows, Poster: screen(c.Poster)} + if d.Site { + v.Src = "guide/" + name + ".json" + } else { + sum := sha256.Sum256(castFiles[name]) + v.Src = "/install/cast/" + name + ".json?v=" + hex.EncodeToString(sum[:4]) + } + return v +} + +// CastFile is a recording as the website serves it beside the page: JSON, +// compressed, for the website's build to write out under guide/. +func CastFile(name string) ([]byte, bool) { + b, ok := castFiles[name] + return b, ok +} + +// CastNames are the recordings the guide plays. +func CastNames() []string { + var names []string + for n := range guide.Casts { + names = append(names, n) + } + return names +} + +// InstallCast serves one recording at /install/cast/{name}.json, compressed +// when the browser takes it so, as nearly every one does. +func InstallCast(w http.ResponseWriter, r *http.Request) { + name := strings.TrimSuffix(r.PathValue("file"), ".json") + b, ok := castFiles[name] + if !ok || !strings.HasSuffix(r.PathValue("file"), ".json") { + http.NotFound(w, r) + return + } + w.Header().Set("Content-Type", "application/json") + w.Header().Set("Cache-Control", "public, max-age=86400") + w.Header().Set("Vary", "Accept-Encoding") + if strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") { + w.Header().Set("Content-Encoding", "gzip") + _, _ = w.Write(b) + return + } + zr, err := gzip.NewReader(bytes.NewReader(b)) + if err != nil { + http.Error(w, "the recording is damaged", http.StatusInternalServerError) + return + } + _, _ = io.Copy(w, zr) +} + +// Still is the screen of a step, as the recording showed it. +func (InstallData) Still(name string) template.HTML { + s, ok := guide.Stills[name] + if !ok { + panic("web: the install guide has no screen " + name) + } + return screen(s.Lines) +} + +// screen joins a frame's lines. They are HTML the recording's builder made +// from the terminal's own colours — spans and escaped text, nothing a visitor +// supplied — which is why they are trusted here. +// +// Blank rows at the foot are left off: a shell session that filled a third +// of the terminal would otherwise sit above a block of black. The player +// gives the screen its full height once it plays. +func screen(lines []string) template.HTML { + n := len(lines) + for n > 0 && strings.TrimSpace(tagText.ReplaceAllString(lines[n-1], "")) == "" { + n-- + } + return template.HTML(strings.Join(lines[:n], "\n")) +} + +// tagText matches the markup in a screen's line, to see whether any text is left. +var tagText = regexp.MustCompile(`<[^>]*>`) + +// NewInstallData fills the guide's data for a version. +func NewInstallData(version string) InstallData { + d := InstallData{Version: version} + if releaseTag.MatchString(version) { + d.Release = version + } + return d +} + +// RenderInstall writes the guide, for the website's build as much as for Install. +func RenderInstall(w io.Writer, d InstallData) error { + return tmpl.ExecuteTemplate(w, "install", d) +} + +// Install serves the guide at /install. +func Install(version string) http.HandlerFunc { + d := NewInstallData(version) + return func(w http.ResponseWriter, r *http.Request) { + render(w, r, "install", d) + } +} diff --git a/internal/web/install_test.go b/internal/web/install_test.go new file mode 100644 index 0000000..a4366bb --- /dev/null +++ b/internal/web/install_test.go @@ -0,0 +1,106 @@ +package web + +import ( + "bytes" + "net/http" + "net/http/httptest" + "regexp" + "strings" + "testing" +) + +func TestInstallGuideShowsEveryStepAndRecording(t *testing.T) { + code, body := get(t, Install("v1.2.3"), "http://llmgw.example/install", nil) + if code != http.StatusOK { + t.Fatalf("status %d", code) + } + for _, want := range []string{ + "", + `id="before"`, `id="binary"`, `id="setup"`, `id="check"`, `id="use"`, `id="trouble"`, + "sha256sum -c --ignore-missing", + "sudo llmgw server init", + `href="/about"`, + "/_static/guide/admin.png?v=", + // The recording's own screens, not a description of them. + "High availability", "All three are ready.", "The control plane is up", + } { + if !strings.Contains(body, want) { + t.Errorf("the guide does not have %q", want) + } + } + if n := strings.Count(body, `class="tty" data-src="/install/cast/`); n != len(guide.Casts) { + t.Errorf("%d players on the page, %d recordings", n, len(guide.Casts)) + } +} + +// The recording was of a real install, with a real administrator's password +// and a real key on screen. Neither may reach the page. +func TestInstallGuideCarriesNoSecret(t *testing.T) { + _, body := get(t, Install("v1.2.3"), "http://llmgw.example/install", nil) + for _, rx := range []*regexp.Regexp{ + regexp.MustCompile(`sk-llmgw-[A-Za-z0-9_-]{8,}`), + regexp.MustCompile(`password(\s|<[^>]*>)+[a-z0-9]{16,}`), + } { + if m := rx.FindString(body); m != "" { + t.Errorf("the guide shows %q", m) + } + } +} + +func TestEveryGuideStepHasItsScreen(t *testing.T) { + for _, name := range []string{"setup-start", "setup-choices", "setup-admin", "setup-machines", + "setup-checks", "setup-plan", "setup-install", "setup-done"} { + s, ok := guide.Stills[name] + if !ok || len(s.Lines) == 0 { + t.Errorf("no screen %s", name) + continue + } + if _, ok := guide.Casts[s.Cast]; !ok { + t.Errorf("screen %s is of a recording, %s, the guide does not have", name, s.Cast) + } + } +} + +func TestInstallGuideAsTheWebsite(t *testing.T) { + d := NewInstallData("v1.2.3") + d.Site = true + var b bytes.Buffer + if err := RenderInstall(&b, d); err != nil { + t.Fatal(err) + } + body := b.String() + for _, not := range []string{"", "/_static/", `href="/about"`} { + if strings.Contains(body, not) { + t.Errorf("the website's guide has %q", not) + } + } + if !strings.Contains(body, `src="guide/admin.png"`) { + t.Error("the website's guide does not take its pictures from beside it") + } +} + +func TestTheRecordingsAreServedCompressed(t *testing.T) { + r := httptest.NewRequest("GET", "http://llmgw.example/install/cast/2-setup.json", nil) + r.SetPathValue("file", "2-setup.json") + r.Header.Set("Accept-Encoding", "gzip, br") + w := httptest.NewRecorder() + InstallCast(w, r) + if w.Code != http.StatusOK || w.Header().Get("Content-Encoding") != "gzip" { + t.Fatalf("%d %v", w.Code, w.Header()) + } + // And plain to a client that does not take gzip. + r = httptest.NewRequest("GET", "http://llmgw.example/install/cast/2-setup.json", nil) + r.SetPathValue("file", "2-setup.json") + w = httptest.NewRecorder() + InstallCast(w, r) + if !strings.HasPrefix(w.Body.String(), `{"rows":`) { + t.Errorf("plain body starts %.20q", w.Body.String()) + } + r = httptest.NewRequest("GET", "http://llmgw.example/install/cast/nothing.json", nil) + r.SetPathValue("file", "nothing.json") + w = httptest.NewRecorder() + InstallCast(w, r) + if w.Code != http.StatusNotFound { + t.Errorf("an unknown recording answered %d", w.Code) + } +} diff --git a/internal/web/locales/en/about.json b/internal/web/locales/en/about.json index c5c375b..4901f99 100644 --- a/internal/web/locales/en/about.json +++ b/internal/web/locales/en/about.json @@ -9,7 +9,6 @@ "about.nav.download": "Download", "about.nav.source": "Source", "about.nav.gateway": "This gateway", - "about.hero.eyebrow": "Self-hosted LLM gateway · %s", "about.hero.title": "One endpoint in front of your own GPUs.", "about.hero.lede": "llmgw runs vLLM, SGLang and llama.cpp across your servers and serves them behind one OpenAI-compatible API. It knows which GPUs share an NVLink domain or an InfiniBand fabric, and a model split across machines never straddles two.", @@ -22,7 +21,6 @@ "about.schem.title": "Clients reach one llmgw address. llmgw places a model's shards on GPUs inside one fabric at a time.", "about.schem.editor": "editor agent", "about.schem.caption": "A replica spanning nodes goes into one NVLink domain if one has room, otherwise onto one InfiniBand fabric. Two fabrics that cannot see each other are never bridged: the all-reduce would hang.", - "about.what.title": "What it does", "about.what.intro": "One static binary. It runs as the control plane, as the agent on every GPU node, and as the weights mirror.", "about.what.api.title": "OpenAI API, your hardware", @@ -34,7 +32,7 @@ "about.what.keys.title": "Keys, budgets, rate limits", "about.what.keys.text": "Organisations, teams and projects, each with limits. Priority bands decide who waits when the cluster is full. Managers see their organisation's spend; people see their own.", "about.what.editors.title": "Editors connect from the account page", - "about.what.editors.text": "Pick Continue, Codex or Cline and a model. The page makes a key and hands over the config, filled in, or a one-line command that writes it.", + "about.what.editors.text": "Continue, Codex or Cline from the account page: a key, and the configuration filled in or a one-line command that writes it. Claude Code and OpenCode work with the same key, over the Anthropic and OpenAI APIs.", "about.what.chat.title": "A chat page for quick questions", "about.what.chat.text": "Markdown and maths rendered, stop mid-reply, tokens per second and time to first token, a system prompt and a temperature. The gateway keeps no conversations.", "about.what.mirror.title": "A mirror you browse", @@ -45,7 +43,6 @@ "about.what.upgrades.text": "Upgrade the control plane, then the agents. A restarted agent adopts the engines it was running instead of reloading them, so replicas stay up throughout.", "about.what.dashboard.title": "A dashboard with nothing to set up", "about.what.dashboard.text": "/admin shows capacity per GPU class, CPU and memory per node, who is using what, each node's page and logs. It fits a phone. Prometheus is optional.", - "about.fabrics.title": "InfiniBand and NVLink, several of each", "about.fabrics.intro": "A site may have independent InfiniBand fabrics, eight-GPU HGX boards and NVL72 racks side by side. llmgw tells them apart by what the adapters report, not by what a config file calls them.", "about.fabrics.guide": "Fabrics and NVLink guide", @@ -66,20 +63,18 @@ "about.fabrics.racks.text": "/admin/nvlink shows which trays are joined, whose IMEX is down, which link runs degraded.", "about.fabrics.ports.title": "Ports re-read every heartbeat", "about.fabrics.ports.text": "A port that goes down takes its fabric off the node within seconds. Counters and rates are exported to Prometheus.", - "about.install.title": "From nothing to a first request", - "about.install.intro": "Debian, Ubuntu or RHEL 10. NVIDIA drivers and the InfiniBand stack are yours to install; llmgw does the rest.", - "about.install.guide": "The full guide covers the mirror, GPUs and what to do when something does not work.", + "about.install.intro": "Three machines for high availability, or one. Ubuntu, Debian or RHEL 10; llmgw installs its engines, Python and CUDA itself.", + "about.install.guide": "The install guide shows every step on the screens of a real install, recorded.", "about.install.binary.title": "Put the binary on every machine", "about.install.binary.text": "Static, no dependencies, the same file everywhere.", - "about.install.server.title": "Set up the control plane", - "about.install.server.text": "Creates the user, the certificate authority, the certificate, server.yaml and your administrator account, then starts the service. Safe to run again. Add --host for any name nodes use that the machine cannot see itself.", - "about.install.node.title": "Add a node", - "about.install.node.text": "From the control plane, which holds the authority. The node gets its certificate, the binary and the agent, and installs its engine by itself.", + "about.install.server.title": "Run the setup screens", + "about.install.server.text": "With nothing installed, sudo llmgw opens the setup: one machine or three, what to install, the other machines' logins. It checks every machine first, shows the plan, and installs. From a script, llmgw server init does the same.", + "about.install.node.title": "Add GPU nodes", + "about.install.node.text": "From the control plane, over SSH. The node gets llmgw, is checked by llmgw doctor, receives its certificate and starts its agent; it installs its engines by itself.", "about.install.node.output_label": "Example output of llmgw ctl nodes", "about.install.model.title": "Add a model and send a request", - "about.install.model.text": "No restart. If it does not place, llmgw ctl explain-placement names every node and why it was turned down.", - + "about.install.model.text": "From /admin/mirror, what your nodes can run, downloaded once for the cluster; or by name. If it does not place, llmgw ctl explain-placement says why.", "about.proxy.title": "Behind a reverse proxy", "about.proxy.intro": "Port 8080 is plain HTTP. Put it behind Caddy or nginx with a public certificate. Only 8080 goes through the proxy: agents reach 7443 directly, because it is mutual TLS with the cluster's own authority.", "about.proxy.loopback": "Bind llmgw to loopback when the proxy is on the same machine: listen: \"127.0.0.1:8080\".", @@ -93,7 +88,6 @@ "about.proxy.headers.text": "llmgw marks session cookies Secure from X-Forwarded-Proto and shows X-Forwarded-Host as the base URL.", "about.proxy.body.title": "Body limit matches the router", "about.proxy.body.text": "32 MiB, so an oversized request is refused before it is uploaded.", - "about.download.title": "Download", "about.download.intro": "Built by CI from the tag and checked against checksums.txt. Every release is on the releases page with its changelog.", "about.download.released": "Released %s", @@ -109,7 +103,6 @@ "about.download.checksums": "Checksums", "about.download.checksums_note": "SHA-256 of every file above.", "about.download.dev": "This is a development build (%s). Take a release from the releases page, where every file is listed with its checksum.", - "about.status.title": "Where it stands", "about.status.intro": "Pre-1.0: configuration formats may change between minor versions. This is what has run on real hardware, and what has not yet.", "about.status.proven": "Run on real clusters", @@ -122,8 +115,21 @@ "about.status.open": "Not yet proven", "about.status.open.fabrics": "InfiniBand and NVLink on a real site: written and tested against the real output of sminfo, ibnetdiscover and nvidia-smi, but not yet run on the hardware. Run llmgw doctor --json on a few nodes first.", "about.status.open.planes": "Two control planes over long periods", - "about.status.open.weights": "Nodes do not share downloaded weights; the mirror keeps each download local", - + "about.status.open.weights": "The model mirror on one machine: the last single point in a high-availability install", "about.footer.changelog": "Changelog", - "about.footer.reference": "Configuration reference" + "about.footer.reference": "Configuration reference", + "about.what.knowledge.title": "Answers from your documents", + "about.what.knowledge.text": "People add PDF, Office and mail from their own machines with llmgw-kb; only text and vectors are sent. Each organisation, team and project sees only its own collections, down to the database row.", + "about.what.guard.title": "Guardrails on every request", + "about.what.guard.text": "Personal data, secrets, prompt injection and deny patterns, with a judge model on CPUs. Policies observe or enforce, per organisation, team or project; an answer nobody could check is refused.", + "about.what.signin.title": "Sign-in your company already has", + "about.what.signin.text": "Entra ID, Active Directory or any OIDC provider; users and groups by SCIM; staff roles, and an audit log of every change.", + "about.what.ha.title": "High availability from the first install", + "about.what.ha.text": "Three machines: each can run the gateway, PostgreSQL under Patroni keeps the store on two, etcd votes on all three. Setup builds it; losing any one machine loses nothing.", + "about.what.media.title": "Pictures and 3D models too", + "about.what.media.text": "ComfyUI on the same cards: pictures and meshes as jobs, queued, followed and returned as files, each carrying the licence it was made under.", + "about.install.cta": "Every step, with its screens", + "about.status.proven.ha": "Three-machine high availability built by the setup screens; a lost store primary cost no requests", + "about.status.proven.signin": "Sign-in with Active Directory, tried against a Samba domain controller, and with OIDC", + "about.status.proven.kb": "Knowledge bases of over 100,000 passages, answered from with their sources" } diff --git a/internal/web/locales/en/install.json b/internal/web/locales/en/install.json new file mode 100644 index 0000000..ba91672 --- /dev/null +++ b/internal/web/locales/en/install.json @@ -0,0 +1,113 @@ +{ + "install.meta.description": "Installing llmgw, step by step: what each machine needs, then every screen of a real three-machine install, recorded.", + "install.title": "Install guide", + "install.nav.label": "Install guide", + "install.nav.before": "Before you start", + "install.nav.binary": "Get llmgw", + "install.nav.setup": "Set up", + "install.nav.check": "Check it", + "install.nav.use": "First request", + "install.nav.next": "What next", + "install.nav.trouble": "If it goes wrong", + "install.nav.about": "About llmgw", + "install.step": "Step %s", + "install.hero.eyebrow": "Install guide · recorded with %s", + "install.hero.title": "From three bare machines to a first answer.", + "install.hero.lede": "Every screen on this page is from a real install: three fresh Ubuntu 24.04 machines and the release anyone can download. The only change made beforehand was turning SSH password login on, as a stock Ubuntu server has it. Read the step, see the screen, or press play and watch the session as it ran.", + "install.hero.machines": "machines, high availability", + "install.hero.steps": "steps, after the checks", + "install.hero.time": "of installing, once the questions are answered", + "install.hero.hidden": "screens left out", + "install.before.title": "Before you start", + "install.before.intro": "One machine, or three for high availability. Check each one first; the setup screens check them again before they install anything.", + "install.before.commands": "The same checks by hand, on each machine:", + "install.req.machines": "Machines", + "install.req.machines.text": "One, or three for high availability: each of the three can run the gateway, two keep the store replicated, and losing any one loses nothing.", + "install.req.system": "System", + "install.req.system.text": "Ubuntu 22.04 or 24.04, Debian 12 or RHEL 10; x86-64 or ARM64.", + "install.req.size": "Size", + "install.req.size.text": "At least 2 CPUs and 3.5 GB of memory on each; 15 GB of free disk on the first machine and 30 GB on the two that keep the store.", + "install.req.clock": "Clock", + "install.req.clock.text": "Synchronised: the machines must agree within a second.", + "install.req.network": "Network", + "install.req.network.text": "The machines reach one another. Users reach the gateway on 8080; nodes reach 7443 and 8081. Internet access to download engines and models, or an offline bundle.", + "install.req.access": "Access", + "install.req.access.text": "sudo on every machine. SSH from the first machine to the other two, with a password, a key or the ssh agent; a machine nothing may log into joins with a code instead.", + "install.req.names": "Names", + "install.req.names.text": "A hostname of its own on each machine. It becomes the machine's name in the cluster.", + "install.req.gpus": "GPU nodes", + "install.req.gpus.text": "Added later, with the NVIDIA driver installed. llmgw installs llama.cpp, vLLM, Python and CUDA itself.", + "install.req.memory_note": "Memory, when the first machine also serves models. In this recording it runs the starter model and both guardrail judges. With 8 GB there was no room left for the starter model; with 12 GB everything fits.", + "install.binary.title": "Get llmgw", + "install.binary.intro": "One static file, the same on every machine. Only the first needs it: setup copies it to the others.", + "install.binary.text": "The latest release, its checksum checked. sha256sum must say OK; if it does not, the download is damaged.", + "install.setup.title": "Set up", + "install.setup.intro": "With nothing installed, llmgw opens its setup screens. They ask, check every machine, show the plan, and install.", + "install.setup.text": "On the first machine:", + "install.setup.keys": "Keyboard only: arrows to move, Space to turn a part on or off, Enter to open its settings or go on, Esc to go back. It works over a serial console too.", + "install.sc1.tab": "One or three", + "install.sc1.text": "One machine or three. Nothing of llmgw is installed yet, so the setup starts here. One machine runs everything; three are high availability.", + "install.sc2.tab": "What to install", + "install.sc2.text": "Every part, on or off. Enter on a part opens its settings and says what it does. Here this machine is also a node, with the small starter model, so there is something to ask the moment the install ends.", + "install.sc3.tab": "Administrator", + "install.sc3.text": "The control plane's settings. The administrator's email (a password is made for it and shown once, at the end), other names nodes reach this machine by, the portal's language, and whether people may sign up.", + "install.sc4.tab": "The other two", + "install.sc4.text": "The machines that keep the store. Address, user, and how to log in: the ssh agent, a key file, a password or a join code. Passwords are kept in memory only, for this setup.", + "install.sc5.tab": "Checks", + "install.sc5.text": "Every machine, checked before anything is installed: login, system, processor, CPUs, memory, disk, clock, ports, internet and whether the machines reach one another. Fix what fails and press R.", + "install.sc6.tab": "Plan", + "install.sc6.text": "What will be installed, and what is left out. Esc goes back to change it; Enter installs.", + "install.sc7.tab": "Install", + "install.sc7.text": "Installed while you watch: the certificate authority and certificates, etcd on all three, PostgreSQL under Patroni on the other two, the control plane on all three, the mirror, the guardrails' judges and the starter model.", + "install.sc8.tab": "Done", + "install.sc8.text": "The administrator's password, shown once. Copy it now. Below it, the same install as one command, for a script.", + "install.setup.whole": "The whole setup, as it ran", + "install.setup.script.title": "The same, from a script", + "install.setup.script.intro": "What the last screen prints. Safe to run again: it keeps what exists and finishes what is missing.", + "install.check.title": "Check it", + "install.check.intro": "From any of the three machines.", + "install.check.text": "llmgw status is the whole system in a few lines: nodes, replicas, models, which control plane leads, and the store. Run again, sudo llmgw is the console. In a browser, http://<first machine>:8080 is the portal; sign in with the password from the last setup screen.", + "install.use.title": "The first request", + "install.use.intro": "With a key from the account page.", + "install.use.text": "On the account page, Create a key: it is shown once. Any OpenAI client works with it; only the base URL changes, to http://<first machine>:8080/v1. The chat page answers too, with the same models.", + "install.cast.0-prereq": "The checks on the first machine, then a name for each of the three.", + "install.cast.1-binary": "The latest release, its checksum checked, installed.", + "install.cast.2-setup": "Every screen of the setup, from the first question to the administrator's password. Long waits are shortened; nothing is left out.", + "install.cast.3-check": "The system's state, then the console.", + "install.cast.4-request": "A key from the account page, and the starter model answering.", + "install.shot.login": "The portal's sign-in, at port 8080 of the first machine.", + "install.shot.admin": "The cluster page: the node, its memory and disk, and the models with what each holds.", + "install.shot.newkey": "A key made on the account page, shown once, with a request to copy.", + "install.shot.chat": "The chat page, with the starter model.", + "install.next.title": "What next", + "install.next.intro": "Each is in the console, under Do, as well as on the command line.", + "install.next.nodes.title": "GPU nodes", + "install.next.nodes.text": "sudo llmgw node add <user>@<address> logs in, installs llmgw, checks the node with llmgw doctor, and starts its agent. The node installs its engines itself.", + "install.next.models.title": "Models", + "install.next.models.text": "/admin/mirror → Explore models: what your nodes can run, downloaded once into the mirror, then served always on or on demand.", + "install.next.people.title": "People", + "install.next.people.text": "Accounts, organisations and projects, budgets and limits; single sign-on with Entra ID, Active Directory or OIDC.", + "install.next.https.title": "HTTPS", + "install.next.https.text": "Put Caddy or nginx in front of port 8080 before anyone outside a trusted network uses it. The configurations are on the about page.", + "install.trouble.title": "If it goes wrong", + "install.trouble.intro": "What this install met, and what else is common.", + "install.trouble.see": "What you see", + "install.trouble.do": "What to do", + "install.trouble.starter.see": "starter model … has nowhere to run at the end of the install", + "install.trouble.starter.do": "The first machine has no room left after the judges. llmgw ctl explain-placement <model> says what it lacks. Give it more memory, or add a node, then run sudo llmgw again: it finishes what is missing.", + "install.trouble.judge.see": "An answer comes back empty, with \"finish_reason\": \"content_filter\"", + "install.trouble.judge.do": "The guardrails' judge gave no verdict in time, and an unchecked answer is refused, not let through. The judge needs free cores; on a machine shared with a model it can miss its budget. Give the judges more cores, or a machine of their own.", + "install.trouble.ssh.see": "The checks cannot log in to another machine", + "install.trouble.ssh.do": "Many cloud images turn SSH password login off. Use a key file or the ssh agent instead, or a join code: llmgw join <code> on that machine.", + "install.trouble.check.see": "A check fails: ports, clock, disk", + "install.trouble.check.do": "Each says what it found. Fix it on that machine and press R on the checks screen.", + "install.trouble.node.see": "Anything else about a machine", + "install.trouble.node.do": "sudo llmgw doctor on it. --json writes everything it read, to send to whoever helps you.", + "install.footer.recorded": "screens recorded with %s", + "install.footer.full": "The full install guide", + "install.play": "Play", + "install.pause": "Pause", + "install.again": "Play again", + "install.tty_label": "A terminal screen, recorded", + "install.hero.time_value": "~3 min" +} diff --git a/internal/web/locales/tr/about.json b/internal/web/locales/tr/about.json index 3ba065e..7999c1e 100644 --- a/internal/web/locales/tr/about.json +++ b/internal/web/locales/tr/about.json @@ -9,7 +9,6 @@ "about.nav.download": "İndir", "about.nav.source": "Kaynak kod", "about.nav.gateway": "Bu ağ geçidi", - "about.hero.eyebrow": "Kendi sunucunuzda çalışan LLM ağ geçidi · %s", "about.hero.title": "Kendi GPU'larınızın önünde tek bir uç nokta.", "about.hero.lede": "llmgw; vLLM, SGLang ve llama.cpp'yi sunucularınızda çalıştırır ve hepsini OpenAI uyumlu tek bir API'nin arkasından sunar. Hangi GPU'ların aynı NVLink alanını ya da aynı InfiniBand fabric'ini paylaştığını bilir; makinelere bölünmüş bir model hiçbir zaman iki fabric'e birden yayılmaz.", @@ -22,7 +21,6 @@ "about.schem.title": "İstemciler tek bir llmgw adresine ulaşır. llmgw bir modelin parçalarını her seferinde tek bir fabric içindeki GPU'lara yerleştirir.", "about.schem.editor": "editör ajanı", "about.schem.caption": "Birden çok düğüme yayılan bir replika, yeri varsa tek bir NVLink alanına, yoksa tek bir InfiniBand fabric'ine yerleşir. Birbirini göremeyen iki fabric arasında asla köprü kurulmaz: all-reduce takılıp kalırdı.", - "about.what.title": "Ne yapar", "about.what.intro": "Tek bir statik ikili dosya. Kontrol düzlemi olarak, her GPU düğümünde ajan olarak ve ağırlık aynası olarak çalışır.", "about.what.api.title": "OpenAI API'si, sizin donanımınız", @@ -34,7 +32,7 @@ "about.what.keys.title": "Anahtarlar, bütçeler, hız sınırları", "about.what.keys.text": "Kuruluşlar, ekipler ve projeler; her birinin kendi sınırları var. Küme dolduğunda kimin bekleyeceğine öncelik bantları karar verir. Yöneticiler kuruluşlarının harcamasını, kişiler kendi harcamalarını görür.", "about.what.editors.title": "Editörler hesap sayfasından bağlanır", - "about.what.editors.text": "Continue, Codex ya da Cline'ı ve bir model seçin. Sayfa bir anahtar oluşturur ve yapılandırmayı doldurulmuş olarak ya da onu yazan tek satırlık bir komut olarak verir.", + "about.what.editors.text": "Hesap sayfasından Continue, Codex ya da Cline: bir anahtar ve doldurulmuş yapılandırma ya da onu yazan tek satırlık bir komut. Claude Code ve OpenCode aynı anahtarla, Anthropic ve OpenAI API'leri üzerinden çalışır.", "about.what.chat.title": "Hızlı sorular için bir sohbet sayfası", "about.what.chat.text": "Markdown ve matematik biçimlenmiş gösterilir, yanıt yarıda durdurulabilir; saniyede token ve ilk token süresi görünür, bir sistem istemi ve sıcaklık ayarlanabilir. Ağ geçidi hiçbir sohbeti saklamaz.", "about.what.mirror.title": "Göz atabileceğiniz bir ayna", @@ -45,7 +43,6 @@ "about.what.upgrades.text": "Önce kontrol düzlemini, sonra ajanları yükseltin. Yeniden başlatılan bir ajan, çalıştırdığı motorları yeniden yüklemek yerine devralır; böylece replikalar baştan sona ayakta kalır.", "about.what.dashboard.title": "Hiçbir kurulum gerektirmeyen bir pano", "about.what.dashboard.text": "/admin; GPU sınıfı başına kapasiteyi, düğüm başına CPU ve belleği, kimin neyi kullandığını, her düğümün sayfasını ve günlüklerini gösterir. Telefona sığar. Prometheus isteğe bağlıdır.", - "about.fabrics.title": "InfiniBand ve NVLink, her birinden birkaç tane", "about.fabrics.intro": "Bir sahada bağımsız InfiniBand fabric'leri, sekiz GPU'lu HGX kartları ve NVL72 kabinleri yan yana bulunabilir. llmgw bunları bir yapılandırma dosyasındaki adlarına göre değil, adaptörlerin bildirdiklerine göre ayırt eder.", "about.fabrics.guide": "Fabric ve NVLink kılavuzu", @@ -66,20 +63,18 @@ "about.fabrics.racks.text": "/admin/nvlink hangi tepsilerin katıldığını, hangisinin IMEX'inin çöktüğünü, hangi bağlantının düşük hızda çalıştığını gösterir.", "about.fabrics.ports.title": "Portlar her yaşam sinyalinde yeniden okunur", "about.fabrics.ports.text": "Kapanan bir port, saniyeler içinde fabric'ini düğümden düşürür. Sayaçlar ve hızlar Prometheus'a aktarılır.", - "about.install.title": "Sıfırdan ilk isteğe", - "about.install.intro": "Debian, Ubuntu ya da RHEL 10. NVIDIA sürücülerini ve InfiniBand yığınını siz kurarsınız; gerisini llmgw yapar.", - "about.install.guide": "Ayrıntılı kılavuz aynayı, GPU'ları ve bir şey çalışmadığında ne yapılacağını anlatır.", + "about.install.intro": "Yüksek erişilebilirlik için üç makine ya da tek makine. Ubuntu, Debian ya da RHEL 10; motorları, Python'u ve CUDA'yı llmgw kendisi kurar.", + "about.install.guide": "Kurulum rehberi her adımı gerçek bir kurulumun kaydedilmiş ekranlarıyla gösterir.", "about.install.binary.title": "İkili dosyayı her makineye koyun", "about.install.binary.text": "Statik, bağımlılıksız; her yerde aynı dosya.", - "about.install.server.title": "Kontrol düzlemini kurun", - "about.install.server.text": "Kullanıcıyı, sertifika yetkilisini, sertifikayı, server.yaml dosyasını ve yönetici hesabınızı oluşturur, ardından hizmeti başlatır. Yeniden çalıştırmak güvenlidir. Düğümlerin kullandığı ama makinenin kendi adı olarak göremediği her ad için --host ekleyin.", - "about.install.node.title": "Bir düğüm ekleyin", - "about.install.node.text": "Sertifika yetkilisini barındıran kontrol düzleminden. Düğüm sertifikasını, ikili dosyayı ve ajanı alır, motorunu da kendisi kurar.", + "about.install.server.title": "Kurulum ekranlarını çalıştırın", + "about.install.server.text": "Hiçbir şey kurulu değilken sudo llmgw kurulumu açar: tek makine ya da üç, ne kurulacağı, diğer makinelerin girişleri. Önce her makineyi denetler, planı gösterir ve kurar. Bir betikten llmgw server init aynısını yapar.", + "about.install.node.title": "GPU düğümleri ekleyin", + "about.install.node.text": "Kontrol düzleminden, SSH ile. Düğüm llmgw'yi alır, llmgw doctor ile denetlenir, sertifikasını alır ve ajanını başlatır; motorlarını kendisi kurar.", "about.install.node.output_label": "llmgw ctl nodes çıktısından bir örnek", "about.install.model.title": "Bir model ekleyin ve istek gönderin", - "about.install.model.text": "Yeniden başlatma gerekmez. Model yerleşmezse llmgw ctl explain-placement her düğümü ve neden geri çevrildiğini tek tek söyler.", - + "about.install.model.text": "/admin/mirror sayfasından düğümlerinizin çalıştırabildikleri, küme için bir kez indirilir; ya da adıyla. Model yerleşmezse nedenini llmgw ctl explain-placement söyler.", "about.proxy.title": "Ters proxy arkasında", "about.proxy.intro": "8080 portu düz HTTP'dir. Onu genel geçer bir sertifikayla Caddy ya da nginx arkasına koyun. Proxy'den yalnızca 8080 geçer: ajanlar 7443'e doğrudan ulaşır, çünkü orası kümenin kendi sertifika yetkilisiyle karşılıklı TLS'dir.", "about.proxy.loopback": "Proxy aynı makinedeyse llmgw'yi loopback adresine bağlayın: listen: \"127.0.0.1:8080\".", @@ -93,7 +88,6 @@ "about.proxy.headers.text": "llmgw oturum çerezlerini X-Forwarded-Proto başlığına göre Secure olarak işaretler ve X-Forwarded-Host değerini temel URL olarak gösterir.", "about.proxy.body.title": "Gövde sınırı yönlendiricininkiyle aynıdır", "about.proxy.body.text": "32 MiB; böylece fazla büyük bir istek daha yüklenmeden reddedilir.", - "about.download.title": "İndir", "about.download.intro": "CI tarafından etiketten derlenir ve checksums.txt ile doğrulanır. Her sürüm, değişiklik günlüğüyle birlikte sürümler sayfasında yer alır.", "about.download.released": "Yayın tarihi: %s", @@ -109,7 +103,6 @@ "about.download.checksums": "Sağlama toplamları", "about.download.checksums_note": "Yukarıdaki her dosyanın SHA-256 özeti.", "about.download.dev": "Bu bir geliştirme derlemesidir (%s). Her dosyanın sağlama toplamıyla listelendiği sürümler sayfasından bir sürüm edinin.", - "about.status.title": "Proje ne durumda", "about.status.intro": "1.0 öncesi: yapılandırma biçimleri ara sürümler arasında değişebilir. Aşağıda gerçek donanımda çalışmış olanlar ve henüz çalışmamış olanlar var.", "about.status.proven": "Gerçek kümelerde çalıştı", @@ -122,8 +115,21 @@ "about.status.open": "Henüz kanıtlanmadı", "about.status.open.fabrics": "Gerçek bir sahada InfiniBand ve NVLink: sminfo, ibnetdiscover ve nvidia-smi komutlarının gerçek çıktısına göre yazıldı ve sınandı, ama henüz o donanımda çalıştırılmadı. Önce birkaç düğümde llmgw doctor --json çalıştırın.", "about.status.open.planes": "Uzun süre boyunca iki kontrol düzlemi", - "about.status.open.weights": "Düğümler indirilen ağırlıkları paylaşmaz; ayna her indirmeyi yerel tutar", - + "about.status.open.weights": "Model aynası tek makinede: yüksek erişilebilir bir kurulumdaki son tek nokta", "about.footer.changelog": "Değişiklik günlüğü", - "about.footer.reference": "Yapılandırma başvurusu" + "about.footer.reference": "Yapılandırma başvurusu", + "about.what.knowledge.title": "Belgelerinizden yanıtlar", + "about.what.knowledge.text": "Kişiler PDF, Office ve e-postaları kendi makinelerinden llmgw-kb ile ekler; yalnızca metin ve vektörler gönderilir. Her kuruluş, ekip ve proje veritabanı satırına kadar yalnızca kendi koleksiyonlarını görür.", + "about.what.guard.title": "Her istekte koruma", + "about.what.guard.text": "Kişisel veriler, gizli bilgiler, istem enjeksiyonu ve yasaklı kalıplar; işlemcilerde çalışan bir hakem modeliyle. Politikalar kuruluş, ekip ya da proje başına izler ya da uygular; kimsenin denetleyemediği bir yanıt reddedilir.", + "about.what.signin.title": "Şirketinizin zaten kullandığı oturum açma", + "about.what.signin.text": "Entra ID, Active Directory ya da herhangi bir OIDC sağlayıcısı; kullanıcılar ve gruplar SCIM ile; yönetici rolleri ve her değişikliğin denetim kaydı.", + "about.what.ha.title": "İlk kurulumdan yüksek erişilebilirlik", + "about.what.ha.text": "Üç makine: her biri ağ geçidini çalıştırabilir, veritabanını ikisinde Patroni altında PostgreSQL tutar, etcd üçünde de oy verir. Kurulum bunu kendisi kurar; herhangi bir makinenin kaybı hiçbir şey kaybettirmez.", + "about.what.media.title": "Görseller ve 3D modeller de", + "about.what.media.text": "Aynı kartlarda ComfyUI: görseller ve 3D modeller iş olarak kuyruğa alınır, izlenir ve dosya olarak döner; her biri üretildiği lisansı taşır.", + "about.install.cta": "Her adım, ekranlarıyla", + "about.status.proven.ha": "Kurulum ekranlarının kurduğu üç makineli yüksek erişilebilirlik; veritabanının birincil makinesinin kaybı hiçbir isteğe mal olmadı", + "about.status.proven.signin": "Bir Samba etki alanı denetleyicisine karşı denenmiş Active Directory ile ve OIDC ile oturum açma", + "about.status.proven.kb": "100.000'den fazla parçalık, kaynaklarıyla yanıt veren bilgi tabanları" } diff --git a/internal/web/locales/tr/install.json b/internal/web/locales/tr/install.json new file mode 100644 index 0000000..22cff1d --- /dev/null +++ b/internal/web/locales/tr/install.json @@ -0,0 +1,113 @@ +{ + "install.meta.description": "llmgw kurulumu adım adım: her makinenin neye ihtiyacı olduğu, ardından gerçek bir üç makineli kurulumun her ekranı, kayıt olarak.", + "install.title": "Kurulum rehberi", + "install.nav.label": "Kurulum rehberi", + "install.nav.before": "Başlamadan önce", + "install.nav.binary": "llmgw'yi edinin", + "install.nav.setup": "Kurun", + "install.nav.check": "Kontrol edin", + "install.nav.use": "İlk istek", + "install.nav.next": "Sonrası", + "install.nav.trouble": "Bir şey ters giderse", + "install.nav.about": "llmgw hakkında", + "install.step": "Adım %s", + "install.hero.eyebrow": "Kurulum rehberi · %s ile kaydedildi", + "install.hero.title": "Üç boş makineden ilk yanıta.", + "install.hero.lede": "Bu sayfadaki her ekran gerçek bir kurulumdan: üç yeni Ubuntu 24.04 makinesi ve herkesin indirebildiği sürüm. Önceden yapılan tek değişiklik, standart bir Ubuntu sunucusundaki gibi SSH'ta parolayla girişi açmaktı. Adımı okuyun, ekranı görün ya da oynatıp oturumu olduğu gibi izleyin.", + "install.hero.machines": "makine, yüksek erişilebilirlik", + "install.hero.steps": "adım, kontrollerden sonra", + "install.hero.time": "kurulum, sorular yanıtlandıktan sonra", + "install.hero.hidden": "atlanan ekran", + "install.before.title": "Başlamadan önce", + "install.before.intro": "Tek makine ya da yüksek erişilebilirlik için üç makine. Önce her birini kontrol edin; kurulum ekranları da bir şey kurmadan önce hepsini yeniden denetler.", + "install.before.commands": "Aynı kontroller elle, her makinede:", + "install.req.machines": "Makineler", + "install.req.machines.text": "Bir, ya da yüksek erişilebilirlik için üç: üçünün her biri ağ geçidini çalıştırabilir, ikisi veritabanını eşlenmiş tutar ve herhangi birinin kaybı hiçbir şey kaybettirmez.", + "install.req.system": "Sistem", + "install.req.system.text": "Ubuntu 22.04 ya da 24.04, Debian 12 ya da RHEL 10; x86-64 ya da ARM64.", + "install.req.size": "Boyut", + "install.req.size.text": "Her birinde en az 2 işlemci çekirdeği ve 3,5 GB bellek; ilk makinede 15 GB, veritabanını tutan iki makinede 30 GB boş disk.", + "install.req.clock": "Saat", + "install.req.clock.text": "Eşzamanlı: makineler arasındaki fark bir saniyeyi geçmemeli.", + "install.req.network": "Ağ", + "install.req.network.text": "Makineler birbirine ulaşır. Kullanıcılar ağ geçidine 8080 üzerinden, düğümler 7443 ve 8081 üzerinden ulaşır. Motorları ve modelleri indirmek için internet erişimi ya da çevrimdışı bir paket.", + "install.req.access": "Erişim", + "install.req.access.text": "Her makinede sudo. İlk makineden diğer ikisine parola, anahtar ya da ssh ajanı ile SSH; kimsenin giriş yapamadığı bir makine bunun yerine bir kodla katılır.", + "install.req.names": "Adlar", + "install.req.names.text": "Her makinenin kendine ait bir adı (hostname). Kümede makinenin adı bu olur.", + "install.req.gpus": "GPU düğümleri", + "install.req.gpus.text": "Sonradan, NVIDIA sürücüsü kurulu olarak eklenir. llama.cpp, vLLM, Python ve CUDA'yı llmgw kendisi kurar.", + "install.req.memory_note": "İlk makine model de çalıştırıyorsa bellek. Bu kayıtta ilk makine başlangıç modelini ve iki koruma hakemini birlikte çalıştırıyor. 8 GB ile başlangıç modeline yer kalmadı; 12 GB ile hepsi sığıyor.", + "install.binary.title": "llmgw'yi edinin", + "install.binary.intro": "Tek bir statik dosya, her makinede aynı. Yalnızca ilk makinede gerekir: kurulum onu diğerlerine kendisi kopyalar.", + "install.binary.text": "Son sürüm, sağlama toplamı denetlenerek. sha256sum OK demelidir; demiyorsa indirme bozuktur.", + "install.setup.title": "Kurun", + "install.setup.intro": "Hiçbir şey kurulu değilken llmgw kurulum ekranlarını açar. Sorar, her makineyi denetler, planı gösterir ve kurar.", + "install.setup.text": "İlk makinede:", + "install.setup.keys": "Yalnızca klavye: ok tuşlarıyla gezinin, boşluk tuşuyla bir parçayı açıp kapatın, Enter ile ayarlarını açın ya da ilerleyin, Esc ile geri dönün. Seri konsoldan da çalışır.", + "install.sc1.tab": "Bir ya da üç", + "install.sc1.text": "Bir makine ya da üç. Henüz llmgw'nin hiçbir parçası kurulu olmadığı için kurulum buradan başlar. Tek makine her şeyi çalıştırır; üç makine yüksek erişilebilirliktir.", + "install.sc2.tab": "Ne kurulacak", + "install.sc2.text": "Her parça, açık ya da kapalı. Bir parçanın üzerinde Enter, ayarlarını açar ve ne işe yaradığını anlatır. Burada bu makine aynı zamanda küçük başlangıç modeliyle bir düğüm; böylece kurulum biter bitmez soracak bir şey olur.", + "install.sc3.tab": "Yönetici", + "install.sc3.text": "Kontrol düzleminin ayarları. Yöneticinin e-postası (onun için bir parola üretilir ve en sonda bir kez gösterilir), düğümlerin bu makineye ulaştığı diğer adlar, portalın dili ve kişilerin kendi kendine kaydolup olamayacağı.", + "install.sc4.tab": "Diğer ikisi", + "install.sc4.text": "Veritabanını tutan makineler. Adres, kullanıcı ve giriş yolu: ssh ajanı, anahtar dosyası, parola ya da katılım kodu. Parolalar yalnızca bu kurulum için, bellekte tutulur.", + "install.sc5.tab": "Kontroller", + "install.sc5.text": "Bir şey kurulmadan önce her makine denetlenir: giriş, sistem, işlemci mimarisi, çekirdekler, bellek, disk, saat, portlar, internet ve makinelerin birbirine ulaşıp ulaşmadığı. Başarısız olanı düzeltip R'ye basın.", + "install.sc6.tab": "Plan", + "install.sc6.text": "Nelerin kurulacağı ve nelerin dışarıda kalacağı. Değiştirmek için Esc ile geri dönün; Enter kurar.", + "install.sc7.tab": "Kurulum", + "install.sc7.text": "Siz izlerken kurulanlar: sertifika yetkilisi ve sertifikalar, üçünde de etcd, diğer ikisinde Patroni altında PostgreSQL, üçünde de kontrol düzlemi, model aynası, koruma hakemleri ve başlangıç modeli.", + "install.sc8.tab": "Bitti", + "install.sc8.text": "Yöneticinin parolası, bir kez gösterilir. Hemen kopyalayın. Altında aynı kurulum, bir betik için tek komut olarak.", + "install.setup.whole": "Kurulumun tamamı, olduğu gibi", + "install.setup.script.title": "Aynısı, bir betikten", + "install.setup.script.intro": "Son ekranın yazdığı komut. Yeniden çalıştırmak güvenlidir: var olanı korur, eksik olanı tamamlar.", + "install.check.title": "Kontrol edin", + "install.check.intro": "Üç makinenin herhangi birinden.", + "install.check.text": "llmgw status tüm sistemi birkaç satırda gösterir: düğümler, kopyalar, modeller, hangi kontrol düzleminin önde olduğu ve veritabanı. Yeniden çalıştırıldığında sudo llmgw konsoldur. Tarayıcıda http://<ilk makine>:8080 portaldır; son kurulum ekranındaki parolayla giriş yapın.", + "install.use.title": "İlk istek", + "install.use.intro": "Hesap sayfasından alınan bir anahtarla.", + "install.use.text": "Hesap sayfasında Anahtar oluştur: anahtar bir kez gösterilir. Her OpenAI istemcisi onunla çalışır; yalnızca temel adres http://<ilk makine>:8080/v1 olarak değişir. Sohbet sayfası da aynı modellerle yanıt verir.", + "install.cast.0-prereq": "İlk makinedeki kontroller, ardından üç makinenin her birine bir ad.", + "install.cast.1-binary": "Son sürüm, sağlama toplamı denetlenmiş ve kurulmuş.", + "install.cast.2-setup": "Kurulumun ilk sorudan yöneticinin parolasına kadar her ekranı. Uzun beklemeler kısaltıldı; hiçbir şey atlanmadı.", + "install.cast.3-check": "Sistemin durumu, ardından konsol.", + "install.cast.4-request": "Hesap sayfasından bir anahtar ve yanıt veren başlangıç modeli.", + "install.shot.login": "Portalın giriş sayfası, ilk makinenin 8080 portunda.", + "install.shot.admin": "Küme sayfası: düğüm, belleği ve diski, ve her birinin ne tuttuğuyla modeller.", + "install.shot.newkey": "Hesap sayfasında üretilen, bir kez gösterilen anahtar ve kopyalanacak bir istek.", + "install.shot.chat": "Başlangıç modeliyle sohbet sayfası.", + "install.next.title": "Sonrası", + "install.next.intro": "Hepsi komut satırında olduğu gibi konsolda da, Do altında var.", + "install.next.nodes.title": "GPU düğümleri", + "install.next.nodes.text": "sudo llmgw node add <kullanıcı>@<adres> giriş yapar, llmgw'yi kurar, düğümü llmgw doctor ile denetler ve ajanını başlatır. Düğüm motorlarını kendisi kurar.", + "install.next.models.title": "Modeller", + "install.next.models.text": "/admin/mirror → Modelleri keşfet: düğümlerinızın çalıştırabildikleri, aynaya bir kez indirilir, sonra sürekli açık ya da istek geldikçe sunulur.", + "install.next.people.title": "Kişiler", + "install.next.people.text": "Hesaplar, kuruluşlar ve projeler, bütçeler ve sınırlar; Entra ID, Active Directory ya da OIDC ile tek oturum açma.", + "install.next.https.title": "HTTPS", + "install.next.https.text": "Güvenilir bir ağın dışından biri kullanmadan önce 8080 portunun önüne Caddy ya da nginx koyun. Yapılandırmalar tanıtım sayfasında.", + "install.trouble.title": "Bir şey ters giderse", + "install.trouble.intro": "Bu kurulumun karşılaştıkları ve sık görülen diğerleri.", + "install.trouble.see": "Gördüğünüz", + "install.trouble.do": "Yapılacak", + "install.trouble.starter.see": "Kurulumun sonunda starter model … has nowhere to run", + "install.trouble.starter.do": "İlk makinede hakemlerden sonra yer kalmamış. Neyin eksik olduğunu llmgw ctl explain-placement <model> söyler. Belleğini artırın ya da bir düğüm ekleyin, sonra sudo llmgw komutunu yeniden çalıştırın: eksik olanı tamamlar.", + "install.trouble.judge.see": "Yanıt boş geliyor, \"finish_reason\": \"content_filter\" ile", + "install.trouble.judge.do": "Koruma hakemi zamanında karar vermedi; denetlenemeyen bir yanıt geçirilmez, reddedilir. Hakemin boş çekirdeğe ihtiyacı var; bir modelle paylaşılan makinede süresini aşabilir. Hakemlere daha çok çekirdek ya da kendilerine ait bir makine verin.", + "install.trouble.ssh.see": "Kontroller diğer bir makineye giriş yapamıyor", + "install.trouble.ssh.do": "Birçok bulut imajı SSH'ta parolayla girişi kapatır. Bunun yerine anahtar dosyası ya da ssh ajanı kullanın, ya da o makinede bir katılım koduyla: llmgw join <kod>.", + "install.trouble.check.see": "Bir kontrol başarısız: portlar, saat, disk", + "install.trouble.check.do": "Her biri ne bulduğunu söyler. O makinede düzeltin ve kontroller ekranında R'ye basın.", + "install.trouble.node.see": "Bir makineyle ilgili başka her şey", + "install.trouble.node.do": "O makinede sudo llmgw doctor. --json okuduğu her şeyi, size yardım edecek kişiye göndermek için yazar.", + "install.footer.recorded": "ekranlar %s ile kaydedildi", + "install.footer.full": "Ayrıntılı kurulum rehberi", + "install.play": "Oynat", + "install.pause": "Duraklat", + "install.again": "Yeniden oynat", + "install.tty_label": "Kaydedilmiş bir terminal ekranı", + "install.hero.time_value": "~3 dk" +} diff --git a/internal/web/static/guide/admin.png b/internal/web/static/guide/admin.png new file mode 100644 index 0000000000000000000000000000000000000000..040d9762efb914f18ab1038c8d59dac01b30de93 GIT binary patch literal 207260 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

x9(pw zi8Rjl%w8R}csg%zV>JvP7Hw*~%%4tfXgSa2G&A=T=(ud3wFO1gxlekYvVuYaGtI^R z%54x7_F_Csi7S|xc^R`cQRO+$RmGij@Wt!mUBv_8wumU(P0c`;R+G-l)E&g+b=F~FF zE9!`aOkZ{?*}ZNDtnsVM^#o>atdV9uw`Mx#ld9wNEjd6{K2y~=gD%T3)g@;$^PLQM z=)R%^b(Evi=@)C^>IwDPy?}mnJaodquy<-R&r6N`p*8bfh#fCNE*9UgfL5Hwlb{wY?}nv<>qE)z@H9N`{Kj@o_pgGr z+|BJw@1M)=`#j4J>3G?Er~As+qh4K^&(yEk8ulCDsx(a5_&cdGlXe|zdPh)$jLt*DGPX_VT2)G|W-H1~7Yy>TD!{batz z>J6ds;EmPil)OrPD4sfJwxolilFf_qMV;F7oa?Q!)j=MrqhVK>rJ86dC&K0yj{C@MWO`lr1AP$tW=CG&NkK74KH< z3(ZHKJRypd@C|&r<7BzW1@Q{vhS;Aq9@n9g!@xcBv*C}Scslp}`Vqf(QY~ke-;1FZ z9iF^VPyz1s@L?oRF;_3>yy!z-51j%;KHx>$qD zElgL8o~-wnS{73>KgAk77m5yiDygHCy|<9()i`s#b{Phr)Hb;^aB~0=(rJ`sWhodP zYOMhco><48j%M9v@1cps!0TK~{G>hOX?wiw8yC`OaaLaqNNlIlYP1@fOLiwqimt&J z9UZtvmfPUXDlL3S$FW+q3Zjl6gEC~>#xo8j>GPmzK-?Um0IoOp*7^NTTJ?GxrChD; zXD{~o$hixx$>%&zOH^GrSUAQG?rcq&t@!`j-nnLa!eTM=%4FaNLWbYfWTS@Ypban2 zvBOe}z##St{Fy}pRZKLWi^IFjW5d=;eHk!#u zqN<@TDP@(t=;oH#&qkScwD@khQ^zZvXOLb*{)_4Gcic1VwHMTg^tqrLf2VAh*M;pnWc9^W9cXhppf@8`>5a zm^-6yro@Z5tLAOB67+>bT$mWnSI7_0YNvwik9Q`MKtcX&d%v315MEl!`_@qcX^Aygny{R)32uAqvX|2pX1wt1 zlu{$+aY)&V=*choPg4X*KaZL>yrqud$~w4HJP7H3A$ADkMbRR481(k$#S@}T9pm|8 ztB3m_P?2Y#yzT5Hy=nIL4ui|}B*+aTOs!x$4yU#j5c(@#W zN!MZciAug!7c^%8O&IkicNiEK5m@?W_TQj3rCi0(ZHvD=zK|z;m-H~W;OZmn=-@d= z?*x}speu}CIOTpwPC-#kmb@U%+Sov4v*5AK_>sKh8zZj4B=|oqxfhDC0{pPBZ_7L$ z9OLyG+?}VjW)L4d&wW9Ei=MmvgSjM5`+=iqSTTMf&^VUs#3V$>(4;S!((_PP!}LMQ z!b{50)_i!n;zbv)$$_AwDDy;x;h@j-VYCs=IQ4T<2DuO0O){1Y!da=zqHo_0q*w48 z3qYNBj+E`h7rhx5inCRZrl$HH(Db!s4@R`K7ca;n2i#CW8LXFE9mi&mt}i}#mWl=V zc1>8-JEE*k*B>q|w^0%Wl6LNlpCVblBx1kNy`Yyt9^rUM7-!^%A&aE*RjYV_q;Fr8 zcm&w-E@)3-hifYuA|qN>y7g0x3Knh?OWWr$Zb4@mNU0)Y4}`9Tz>4|6iV+baOz{jV z%?6KptgqLdX{^2QQw=A)xO@WHSg4I^PE?T8lZJZqJvZZ}pOPa^gfELo;K>N%qp45V zgCDXtW&%fD`^kyDbRQNL17+&`gyQI$N(-t~28-ok-KP`o>d&|2+FGy~Uea-!|9HKf zhPS(|QGGB$dx0e0>;0L-H(;(+NR%$bOdg9)JIRU8;yf!yTUsV60dhtj1&2B9Q)EEt z!M-+!GjzVs*I>La^1kkIA7N)G0X_S+z9>w5*U`0-x%G@9gfIwL? zR+ex&T#!q(Co?cyYH4jFrX1{&WVK~pP2Wc{m#@})GXYypcY2R8Rqc7vE!DO1$b3GZ zbF6G7{OE~3)txhKX?RaMNkbaW185RfhXV@?dOAQ;$e4w=`i z9Z{RMNYGf-*Gtk%SaxXCTKsh?2`+(r6TiN6s3o1c6yVb&Hw35P$mA*W3Nfpow zV8nkFPEX&T94V@ObQGTvbD)Qjjp;2SltHjbs1YJyDUO60nz&^- zuEAq3AMkG(V!OA4f&U>0k2ZF`|G|+m`!#*6<1&ux*3mJk=(|vYv&^pGBy(L|pH!c2 z+!tcv;uzPItkHU?M82udef*e`@Y$f{Z$i5K9!E@+sNh-q20&H&1QQaWf6AA6ArqMe z!$GWe&yrXssG0H9m_9nle=!&Q?(|ltPJ4)E~)H^tff{{-pTx-JRoz zgR42ifKIb5vH2~{pcpi*`f{I~E7haK@*Xd2F2|qaHVx+usVy#UF5eyxcWWX?LLsOM z5m8XcSeyHD56E_!Zbk(K1vg-C#?otXk&+52#Io{aQH0d~=&4fuaeQKz0JES?Kq8;h zLk9m#!hK**f_>&sHK)@-Z*j4>{VI#?dZ)t#@!C|z-Hc-fK5~89!xP`|({4%;mBPgJ zEhImlc?g7dQ2?gKdU3$1(xy01AAv*z&BW9@+Y3%uI*siOJ-v4PM>JLM`?H8i9ZzK` z{-f7VO{bQ+hF9fVuE8lMno9jF!# z2!kylW-Z~Y(4&Hg(o%wg6Q9Vf5l<~>)tioI?Db8W#@cdju`}%{N;PKRG(tZx+XuN80tM#KZi)PQx^stm_Bv%%L*6-`30tsGScem!t z#mDZ$=-5+J->Q^W^~j(~h7k}t+@r*`)76+`feiPomVMsUYA{qv6!PlcJu|7415P>D{uOz+9WH}eVwd3oiM=~p5fs^y&( zLeg=|z}w?ybTVXZNBN<(e<(vG8~h0WO(mlvM;1iqtOX9+s$fQk_~X@!y{Ru>zO>i- zH(L11GPkjQ%Q;Wg+2~0i+w89`ku0^@ThpMC#PcumvU^BZ8G1hA}i5a z_cT6jhtgsorPz8QRdi!EnSUTforv5g;prGJjT7-}MbB(2AwuH$X zmj`&qY+ouFrr9O~o%-scw+LG_OX{LZ{4BDJ>8=+@T7CtkxC1~s(}vA$PG@dfi$ zp*7E25WoI>^@LID@D8(_`6H}Y3llWs1S-=OlysOc*!G16N2G!CfFu>G=48ruI4>Vf z^f-`VyAn%`L#tX-Dv1A~PVCZrSWh+8s6?DOUdmk(26B##zT-v2C*yKz2>6)D=_jZL z1M^jcTeZ<`BKXA(-14m&hV7ayuwwe8uMAdKlo;ObX!!>Qw(TJ>Vn1plvlw2%Fwe&g z43Se3LMD}ARSNt(%dB+Rt=Q}PBg;^c*m6d_+O*tYlh^cs&Lk@DDejo0=MnZ=-@A(_H=GKWU9=s#q=LPBN(sh{gKZ1(pnv$F^IRfm%}Tvjp&h}W8r5- zU%sI;?4!%Mx}K1dtT$F4D4MO2$#}*dR>MTGI00K|8S(YwvJV+$dzzQ(rP@5^Mo;b| zB(16=O%*nk66;D?Q92MZV!p#QP}>M$@P3XL8u{s&s1?fhB6XuHZ(c`gT9&=S)NK~? zwPy1(_%IKLpX87Ld{NUHv-#TtAv*Mhd7_UCcsA0Qk0A}V#PZd!gGMfaEv*{F#3q7+ z{;iacV;85nQu&=M+#JB-TSv;MiQ7Nx>pL+DjAqLP& z8)WEE%#UD;!w3iQt4^tz-efgBm&B0%fV=z@W=K9YBACnND7eF^pO=HZ8YSB z)fKcXKiaHh4euyOAu{?w`1kpKX*+%uOBn?VdhHFRN46{TjTZ4i-eg*}wsIJ{i9og} zU<3r9agt07b<0}X+KPP3W9`*#!bpR7*4jgc^{c+g;PZWkil2DUTi$$M9w@z^`x*h< zb&>q^sHMi~1`TYlhKHpWFCo;R7q?|{k%sfK1GScTSO%WGew}Mk=nr{>KK^zs-E5fmTS<}->T>8e9WvGjYQ=H-t9{ndGE!1~@=)$|XvpYdHJ7$#v`1Tu?ne^_-EP9gcpWx{FNvfN z;u6WtFjhNWP{q)^`?ICtkd#ig@qx6N?o~n-4r-O+R|dMKByGw3g5NQ4{BlX1y4BLt zB=p8Z^2UU_6@M8QC&B#YJ5`WV%-+%ZaR7nOdx;+GEF@*8T%=t>;QHm08d~5!!!w7d z=*Q1q3SV9xN7ARwhID1Nh(NNT;;Ybmpf)m2njDJx>0!x(ni0sZ_&Ly$iq`e!K2$FfR!^5Uu1!5Q}Y(MnE~$rQ)H zVfkg$*ZjJpw94%82i~g$d3+&vQ5`!v?x1?;w1N`HZi7pX}E{|rj=XE4sb>;>OuMb_));hBpoo1uHlh1 zsmafJ&t`(IM{o0N_0&X~C@8G2X3sb5?s%f;08jxv(5mL77&@;hybHyIXXDrtufY6N z@nxTWLQ^C)jy`737NVJ3U6N>&`F!ZPa)TU}!5V^3(T5Z>^p;ZTAR)N2J=y{hC@uqz zf|h!%S=~ZDUGI1L`te$k)M`GkeI`@x17A?RctGO?gd4JHM)gQXW8Dv7V0bv zW}KH|qT1TRz$=I~iDhm*_vuhMK(idJ3*hb*5aLgd{%{$cEnzOdZe(U8721VL-Y3yR zOR}`5snoGn7lWq8^vjIMfwgtJ7&G(Me`YygIo6&%6D&#~n;wj6TE!Gex!i zU_&SLK3;{#7h z;MJm;PeGs^oUNlKEw5MSf1{aNOMCD{RB@tcH`m>nJlja8Odq$zcnUM`1~rIwE8dvc zZa5l)$?<5Zi78dXckV8FO}XIUs~ySS4o`O z2fvEjx>mIEF1TiNruvS6s$iXFz1>^5UMUpK1jvvXAER~bMx<7fx(~Fe66HP9{!!HG zkkc;PBay+Wn~*Ap`7w|1N;_A+42||3u@*)IL#u7OzVk9AvdDVa*ZHat^R~!(dsJi& z_@BFZ8u#s{ZO6zfv_E#;Q?? zGolhf@71^*Ur~D9JJuOH#GVqM-mI6s`gk&|($*(N|MP1zxf6H>_+uZ)b^EzhMg{wZ z0Evzt`?GZ9Cr2d;_34j8paTYktDoJozeEirw!a|6oW7p;j zpO)X*zMY$_h?I~Iv5iiO@pImr3ptFlCT3?EBpjBmqF^eSge^4l^Xuj2x)!K?hlIjc zGCQDo>riUob#=lDDYg`;D4U}m6mWKO!lY=Zt1-a+xS+)I@_Ex%`}cvXzJB(u4_8lQ z4B2@mR9+fK?7w)rGg+XsIM_Lh^lWpCI#WEL`4fnw!yU_4 zY8!2nt_W)qy^ygrEUJ&S@+_gZnK<~vAu$q0j^vl4049dq{m+oCMnDRM+Qc7lfH_;m zQXC13J{}Bcx`0Z(z} zZkAe5Iq5s|)Ul5Zq|7X;)_WHX<}C)Y<%J%uAzz^A=kNn&9>>$D$XuZL7FB!uajh79 zU%`fR<<+Pa2R~^7G^39esvGN-18Y-3&XM`8a6nh~% zsN1$;C#%bUsI3JDt;uFFgKcq*DrS8aIfcLCI$30t#?`c-Es}7fw=B}DtA_teLxGsYWMkKGjDh|w~HLZ{iFzvPn+EFvU5TBV4W$1RnM z57DmpY_>N8_>Q#}3U8K8OdovPTIo`VvCb3O5KT>!wG2K4vOY)l3sCj&fO)z61Wj)* zp#5})rCyqmM!CoW^uQ|J*&QF{KrPi2)U<5aVV)~56{|Xw)R*oK(C(NhLmRk@LtIK` zZ3NvRzJz>JAE(`P!XjbV>Ddxd&WkpJ4)ybQG>VRn-oN+V!u*Dpgk=F!hrwwK$kZ&t zU-Hn;zy}zCrXjXjHMTIJ)6SjGiu$R1_HP^p(s?q{&9vP1)zvj`F;esKaB$*8ZKGpK zluNXg(GQlj@4hW8*wk8J-WZf}l)4XkncdFRmNlE_a9f&s&x=%>Pmd`=(~>PCY=cIb zE~}_C2#Mrpd&A#GGS_8d0z`(EP#O5@h_+RE``9x$AvrhGj_cA)M8da{`OE)mA~m7 zRrHjYQi1UXBUSsS(|>r8=~u417oXxS*$d5hK*SURlQ5!^D=>e(Jhph*CT z2vwkwA7(*FWYTb~5#2a|1c4XXK>uL6A?%_o+HzE@kV#2JBtHBVm~t1aD!&vj&}kv^Etggf8v4Q;?7Jq zk6m{FdWysl#y}jyN9%53x)C5<8v-Y$s(V`6+m*yTcXjaU6~?|NvjJIMU8Z3^kY3Dw zzcGgHV>GVw-HnqCZeGF(Si6NT7%FI_&%ioA-{T=l;3}X-yw@}v`J{wbtT{Y+u_!>%zN_X-hgrs!YyNdr-2)O#f3w3YE3$9QqyZ%9Gj z1r*I@W;0a9tkUK)KW6q%Tj`3D6l@6OAqJPWTpD z4;6y;B9(@U4W3>K( zSke0|dp<4a$Nl_Yi+&Vj65Cw~+spet=#KWT@g?*5#S)^n3MT<xBO1s*bid}gEmcG^ z)`Ma^_#9j_11V^6omis|gPA6N40KS(C5WM46)ODppV9Mzkm z1ExwUT8fqy74Au07hN~O(j6%Itx%*j(upD#a&lqbsM%Ks>{+Edr)r*DlD;qqsuc}7 zL{AN}$(Cec4-SjxKFgLfUSRpI(@ZqUcd9sUeKvcDHY(8ZTsK=zd-U$-@K=Jlip`ee zNCn&Ewbj+}Cauz)hpUx#Nn+yb6imIf$!z;K=;3vl1uf!~JGIkG4`g?NIp*&X5^#m! zFNUQB*8tAqrD1a%1d}Np_GKi$pN8ATW@@_7D6IOE60KhK8bPT$H^(&=sF}C5>4C>(MOEKUK=wkl!C}0%Q#4pZB zNUw(w4K1MvB}FJG0+blzb{-^KocAc6K?oWASmkDX8 z?l918E5oM-UV%(X_SkFqz=5q$EZK4PXPrJ{|IM z)eXzkMk~&bt95a|&LU)5IfB`WOH1t;%hRg&ZYC&CJ*rR>5oIcedbCMOVzkeJW7YR9 zXlaTNX-T!>yWApAy|ePgN>J*U4pdE!Npy)pka@kDt zLun{DAIwnVrz8rtDjH6oR0#$Bj1vdtVx1b=Jx~mrT z!(AC~2&phyWKFKwzZJMACQ&2=^a?J@X*OW{g)yBp;1n{oRHWL{=jyla5I3OaF`frF zA9DJ1r)vfms?@M8w9=R8qo)+ylQ+HJzG1V9Je9l=W0m*+YCtcp zvX+xKFfe|^7KX)`D-)DL?ZX(se34@3?2LuD)S!*_dUEN8oS+!aPysaTu+x4;D%=wO zPE_GTT*8D$4(2EIa)+~uL2e2-j|Lt>H`~mHSm;YJK9{Y;2E_SC)a~EPl zFljYDZU15;l}B~DprC!jLzrfE-Lr}-P(0HV_4RBVmh{VpT@qm^6Bs=Tv*q}R430c5 z?ij{-isRB$Wuy6vq2 zf8L)->Ec{3&1ugi*g6_NDkQ$Jk~ATJ7IIGxdJ`22sx-y6POa zk%L$6QK3N!?2enQzK?>8qLE*6x(Noph(t87MC%+tU=?RaUPM09Doj!IiDG`ZrJP-S zbG~%XGgt_xD8R}KEQ}B4*t_J=kBRx=O8q>ZTZ(AED77Ve8LbR@(I{K)e8TVw${9?w zXC;@^``Xh+zkfrRo62Q1zTHeh8i+4TU^&xp7nG6HA{nQS`(0Vaf)(N-4nwBP1KsED zoyyUlI!{+waf(F?@J$d1j1AR|9xGEKZtDQQ$iZw0^E>{XJOw@ZjY~t{o{15ypHmMi>F9a&Mq-n0P+oTbFu3*JJ;#?0jZ3iI=5w6M7=lfqkI}n3p1VSd zp?J_6aBPlKk`0ADaE6KZoNTkzSs>!3XR$F>bsZE(alNUgEtyK|3puLTG@?~5ZWmXq zvC)`mBwqiOVEUC~a)gQBgkW|UF@xIta)<0XVR@_BW3=4Ys}oYGblibQ9IE9Gaq2KK zctx_GQ*jka^+GB4O??75pGas_dsK1RvaUZO?G;xr))bdwD#Gp5zUMOIl1XHe?(tYN zSLka;g82LY_?mCNwlEzQaE4>W+EazEgG%l!hn$}wC(|MG{{8WyCtvs64@};DOgin4 zcQ`wf3>tG?aN}6ClevS5?yG_4{FSpcv3feyM)Mf8p1m8cI?sS-ZIQ4lp_We7R;<3C zQ|CO$wLKmF?lHQQdzR(!)OAw6j?3tGA)z+!OS63ANB+;-RIn(e?l_Lw9rFZuJfV*3 ziknNv5oqAci(5LNnHoGh2~=+qM-RV?eve%=Cg65Z?0F*tCDO-t%i%hEK2QC0n)|Kb z;PvQWv)RPgy{&Op@-AxH$Fz!u{U=T9-;*R@0#f+jJEN3*_Y7*NzX|78qojOn$t**B za`f$BefwZ-&Htl_x?*7x!{q-uF z^+Z?dU}a@*XGIfmdieX(U?&Q(n;nEskqA>@*;G4hkMQ!QvwAd?2_Yq`yPPOGVnbBr z2r$|i#0h-+t5skA@Jp)54N55}V2)*%wbql~yT3l!S|FW-btprh5c3E-#_w>0LG~ys zd9sVZ@l;D?I*A6BTKSa@elxa80%*NWNtvtLzAbO*At51AjGmqwfbDfyOkZ3)K6Hsn z{;9KFM_{!K|Lr_ZWbV`2MWp8Rbg$+`m|2~!C$i9*UA#lzZQq3FLD3@{x}yBgr2cT@ z|Meq88icgxD0)upBz)*I?Ij|w{>)hYnFjyeYl{H*x;-L7*c5?Z5rTi`hm#ycOJoq3 z`2I**fV{=u{ct=1fCcmHL4C>j5Kq=0@JE}+p7)7YfSfbOIzuSg??30h*^Guj20p2HUe*f;MfK(warJ@>o z{ja(Gc4KUxgF(INdfaOKx5Dv{2l!l&w`35k&ND$DMBT?%L{rHB?x?z` zfE@nkaQr)4^8eAp!B6$r>@m<(xG-@vD#Jg1!Sw!*gY@73{xXQ)&MtbDC6JC7THFV- z1r_ceUgh5(Fk5f5Ot_=FyDN;93HwPY;(J?Hi@*OZ5UqO)zQ+|dz8&Nd{+-2+R!e;ATh_)m5YY_a*^_u*MF~ z*J%pJF6nQT!~bYcUv3g`l@RzEmHj)*`sS8*35lRk+rb!K&X~K<-D4;O?rzRH!aPs+Q6@_kyK3I- z%|Q${W%lpzSdLCkXccm#L^}G%D#uEhmq$(dxB&f86KmVVr&|wC(NLEskZQ~MCac+J zu&)zccl%Y2FK(}br@im2EPP}C+1#{;{Z#Mnk|b%sje!2dw_HXBPTuBoVP#;1N&wG5Hoh-{%+JUQR5xW$69Is#0*vw`I3!X2<^ay1sN~_W*{i9lC!UqNXpM%H6huY+ zbi8jo-@eTXMfdF_#N#^QP8xHq1rhshDN8bKDAtIQd*b5U?n#|EVZBXB^7n# zI^WFjY|y+qp;9T4N#~NRv^vUca@@Vn+mBtwn=I+7^pEuI0%+XEeDuy^Ewn#|cwF`!^fYN&i(i;aJ`aFg*3pvoS8uCj;W!F`J|ztnf=`x?O;R;H+^E@JMiOJU|(zFG8@0u)iv1j zd2eS|_kOiw-JgasJjml@8*A=uwqCoW1_A(di>0s??SjH75X24z98(mOK|vWeCj~Yn zq+c!Rs2A6YTt94T7#xg#D$dPa%%wA_K%)7D;+%LFe-S54R4RJIgwbQ9g+){C-OY6- zA85g9wzacM$MAxq%27u`@C&XzVL%xai`$qVpbg`GVdu6?(iS`NQ>jRO{IlPUt1F~8 z3y+X{`KG%uqYd}jD6*J!TWR*4tFK-HKkCT<(8%Ilpd_`rH z_{7+T_p9ftlrrk3fsm~8ef1ivQPjMLo92(ILw%nUlkw^NpJ6isMlktR913WG%;XY{ z_q$GVk=O`pRM1oX9yk37F6MiDwnvan9mXOgnj)JfUIL^cKCF4^@k@?4#Ew9!%N)H!Uk zS*iCY@vH_UX!C&joKVr0(Kb^1BL(3ffGhy1ZcnH( zyxoWaG9K5^{5&fw>sdWvj_S7o2}ZRK(n4F7qV1QNgt%-igC+5_I#2mK*-UjyxE#&t z)f?o)L~AADdJ-vOUukQ0)YmD}Z8}8c=ui+7oSf}USkLEQ6;7WT=+k$T!JmZlhivqF zrC+Aa;PER2U-UBYuv_mXii+@J;^CPTpO-~MP^k>OhAY-?tmDMlJ4$47C5a`>hl(Y< z^u-#y)z>}ktjud}Iz0%&W4DrPH^hzxXw)_%0HOSR=eg5e<{}9Vdqme>c-nc`%!}`4 z{4?=ANq5_PW0dRD;^amrE55UG$K9oprd!R?g3M|2+|BjvGMC}SuN|Qw;o)+pOdtou z4?_*Dx&|mDHPno{{AEz^pDgUp)_C5`qc|PR74?8L(F9r|mn#Xkp_r>je@`8*Hqz!` zQnT){%ELvGlwGP%+&kM&v)3AeAmaGcm-g%<>qsoI?@bhc%tD&PVtu@x4D{Y2<5Yow z)fs_78v}YU%v5%cif)Zlb}BNB^Df0*He2_#ZODdz>O>ilPL;&ENjmOVwMiO<90vfV zco&M#={RG_7{spfVf{NR#1eI4ZCn$mf+E)nie$05-XUU7W^3bAUi=*Kau2n9#qJzw zT#a~v{5bvTc%eT`E?a&WRSM1($hPnC5b78N;JhQyKk{(J^jzwol|~{h!Lqg;csQLImnQWNsONuYHn@r z#e9Z;9&D6B-*vhC*al^5@m-C7JJRMeZ^KZyu&CtSM(0IbZd0FNUwJkP3N{uN^nCP0 z40smvt(}z*WTqd7I2$hRI|0H_{xlisYpP^|zL9y}NOlh=r@$ti{!F#mUGL!H?tws* z+TN3?d4rZ>teHhii%NMZI!Y|j_95TK%Uh0VJ{`$sFGgyv9et@hdGaG1Ju!wIbMz&Y zqUBJv(=lV!CpyyN(#=l&uVfqE0z~wZyqFYDPdpv-!LcaC{fWC>Iq8hDdTrhfeV*AU zkrM^smojQy6>c?vSIo1tjBz5zbv)%E# z+lmO5jfNZ}bNw;*A7S1%X9-&#{(WVulsWfoo`(x}fYS4=6hH{*xNUPfBt8*BWgAMX zKc9&0ko@JQJ%?S=U%ptR=x!vP68(@~DiKGm?~QQpbvKUXdGqwWln%`8bNtknF)BWT z9$MUwx!7#)0p|e1pu&qsop@9H5aXgID|vx=b#3leq#bQl1`q)SVHVvu__lzUma?!n z1+_TJd2_pCg|g$OA(`$4pWmS5}ua?oM!bcXti0gA+Ws zLvSD58Qdi}gFC_9b?$j@)%OpmI?UdC_3D1Q;B#r9GoHI(kiy0@$aDV6hP@)T&OKQQ zOlH@G+2~o0%-vWPQvfVudv-BJj!R zRA&X|`fE-FIh&6?+hI2={R$rg| z&C}iNF$HJksx5Oak0#V(W$-B9OU)BSA*ELZ9)zIsm? zg2&~o6|Wo7n3=G!yftml7WB_246Dym4$sWKw6b=X7~T?=-Jgo$YM!P$$lu^czoH$Y z@2}7Ngs4ZP;m7Ob8z=Hv3OP&(QljpS0oBRs<-M={e!gCB-x00s%$IDgPIi*tj!Om{ zfX3*Lf=yIhGuJD$8#ZSTSe2FEBD{ISWII3;qXGSUlKfq#5^KZk6x-u03rQ%NCHKMC z_Lx=p0U2^kSH-tp=uFes*3!}~BuDx=QfB|3PNO9j;X;XC8;6JT_LEf$zepIWsFkq! z(fo;nyobW-6N&4^R)zxv(f6<~r$dZYafwwSHtYNrvB*q-$p!QClnuRZJ#PH=fB>y2 zgKjg^&ugwtp$5;ZqO*<{_3`x32kqF?)nJ7C*@H<8f#=zJA*>*zgQqh&Om}#^D%_w~ zO-qo{_C%*_Huq6><@D1ng%HidF{?s^dDnYl8WpZ3owd+nTM-ZM{wZ~te?_idoDOd7rxqe?{D zIVTf|t;N`@AU!?3@Ap}}Ue|BeTIKp_yRRmQAl~C?Z6A2v{P&*6je~f*Vg=M$OiX0g zDF$PZ^B|iw=2UeX7~k2SSd5JgbmW@Lo&9+8q&miCh8dFj+MqnfMrm?NiO?^TTyng7 ztXlY7Xo6*3hh@-^T&|LYoHEh3(wuJfHecE_)alw%tceznzpRL+xUiqvtYCFWcIx3w zwLzHb%vz&|VO18Yz|wG`_D?G3AQN_`e3&P*$H$@c1?Fp>PEG{9zr}%t(MPJ{!dpqoUf#}Rm+|8 z*jvT;1BXwq2{AvRjODvtx=(RLs^cKs&_1_(9F`EjL9N&t;J>K&3STb6YW`RMe8NC; zw441mm=|5z*fqT`Lqg=D!}CiZYCpZtVO*FVP2-Xz}7)msRp z9rKbw{}@@-7Pt6P3P&|kzUeH%z+r3ZmFeZk8-)GD%epFa9&Bx)v0)3p4mLN7sF^d5 z-k!UF)yhM^y7iR|?%t~Jo2{pxzdn0{kj$))Hj1+>8^Ob=$pWZX)O9*Z$(jC{v%_IK#(-Yn6K`iZ*nd-;G#>T*~_S4M=8EA!`E7c*H zh!jD@D8G$d$XjhudAh#7KH)|6jv7lcu_+`Zb=#kuhe8SLc(Jha7Fi2Q-}Q8N(>qqM z_o0*W1s7+F3ps}`4|+}j3CE>c&kWzaMH}QDDkOh6j`0l(Dn(h3y*Gfj3zeFStG>ZN zFbD=W7gB}!&j5QUxobN%8k=P>HV1RbKzA$c{;ab+FONY!jSVY>f#L6BazYLQFt|6o zB7r$j1*xv5qY;RWTYb+rHn(YncV-OmfZ*zXV{0O9SF08~aMy+UPrk0T_&$wg_x=?i zXArm}9V)<@htva^({?*;P68_6NiWJjNcT^9rN)FNq*ADSgPKm=ezJ1t=g#l$myHA> zmgUAX0ryv7dn64Y4MAH8d$kDH{+`Gz?;`RSy{daEn%=13CY4*=YQvo~hQPyhaOh3f0;H?ybqcl7}HwsT-y-i%>n zVR@8Y(9%MA+v;|p*w*L(Or}m1I?B^?GBr-TZl@}O#@}?`zL_KOYVvmV*OcdJu?2Y< zOHU5PP|2k9#M)n|ydTHcPx8%NZl7!l)Jbmg&w#RS34gwOZhgERUltaBt~}hEe{5OX z)uSzqgT^cO&XXbOIVnbqa-GNB`soqpGGKvDq(^QYlC4eCV-Aj&hpW{?pmQ=(N9#G1 zJ@-1bwg>Qn(Kz&jw8O0!|BCdb<4aM0`;)z`n0n1y_&1)u#i;HYa!X+Jo$^({7a#p2 zFi-JdGk1HxG^7}Xyw6HdMOa)a0G=;yCo5|+Gji8g`yCAWQTlCuGTP}*i0=;%XGZre zutP*D4028npj8eFmPugC^RBfX#{S(=4PD)`#U;Lx1R;GKLcYm;2kvXx)Y;bvX#nH8 zH|!Lv2DT+^t+!kD+U)TT6|(O2@j<=y@sMqIs^URh$_HSv067S))RE^d2gjhSg>BQ% z*BfaSdkZLIS8*mr&^+6`BX`lbd-L+UKK5X?v=`vx|8^glU7yHAg5rX`k@yw0wbSoI zjCBj>^27UxRrciVtmi5=4-capt*y0fb)Wx@^A;-40N3_11)cg>2fTWO)spRaAuw72 zLu)t-&@gIR_L4MLsST0(>OW;mQ_OO3AfANb^Nu@-9>rb2`_>wfo~4Q!lL(Izx2uqa z?A-dTN1D#tKi-&Pn-6piowesP#UlN&v&ErJQT5->f%|WW3~0T+4-aW)wHWs^UNO1< zv3V|>`3wOh0yVau1SrPxCudh9R z8VmA2mhaXOwZ?;NygtEwUx%I7rHkQ&PMzPa`-VuCZcKexAxPQB6MUHnJ6URc4{GSH zsi_f^%d9Ay$nmo#)pZv(KV64)&Ad8K2v8jpV+GOl0PP%|&+D9%zd*1PjfL7E$%`IT zr!f-+%S;AMgVL{kgM;291vz~*8Cs4tJ3BjPeyJbS!hQu%=y}BaxKFb%Am;wbCA-jH z@SfRnExB^pP?w>TiBKP`WmZi+sPYd$zPw&WDloee?6$wmAAS4w&7u8O9ofxGCwz~FdrJpEY9uM@w(7_9-PV|tw zNbx%@bJLsryHnns^cL{R>8ZI<^z!IviJpKDG_qD(cc@e`7j7VR0sWohYO5bS8d?IZ z`94@K!@YzmBh(IifQUZt?N@eoTK(^2)YMcWm636X?YCsSek1h^L^!S&)8RN;2tbO2 zZ5!{CRblG)`A0bQm8Ax>7ysK-+!8RbZtY~Y3r$GJbKmV?#?NF+_Z((u+xORBcm(a?#JJR1FxQjxIBfB!DuHt)J>Es&mS^0 zxLpk|KI~GL*cP4<vtoLLc1t0gt=GxkP$*ex42Gq33lC14%ou z<(G75i^?DHgs% z;(M$7*|c(bd|U`f3P^H$XkjY!0*9*Qm(6gAz716L8~9?ZQJ4&G_J#_z0xs_l z_R4;Ia1xBcZ=*XdJUl%8%YR{W-2ZGTC~tY`Ae~4qe#Zgvg)$}wdiy5UY-I-JR&Y`7 zqsfe6B)x?)^b_MV1Pe|HppFLv-k+sfhQhRrI&2QpO|jjxz1M2F!rZndqI~!*vUVby zdRnI6G{6;B`lHOL)o5fZ8bbgKosS?yN%dqbC=KX~Fwy?m_b^oEj=}Bh_IIEjMS3PA zGP=$z@#^2v#OU_StZ^l-N}VRoDYPkrZ-7wR=6DLMU07BQ4Eo(hy*K&!VW7KS+|sG; z2WPnq!soKh5VM$_@^3xP?0<#v;||vc2T%#>cK_31#Rt3Yh)J)17)4n*PmpIB5jo%5 z2Gbh!^%gCy|75@m3MJtvKI$;USvlDb)97TEDR{*AtGt;p0<~0wEv%3oNLfjitv96s zkJOz)_UbWm-~E-!s0^01Vpqty>%dE{K=)0-LWo|mS@YMo(#hZ7N&HHm%gJ-xPCmmD zI%Nq!{xjBKW2N|BCz(_3$Qf#lKAyhBaZVAuN}EfSb|gZCQQQ+82FKrnk;Y>6#c{1f@TA-!?LlMHE{$zrNnRtM8n|{H}Ltp&j`ZQg!N=#h^@il4nw+gVCw0&GJ0g)R%_b|~zv;sHN^K;H?Nl!J;{_wVqKKX% zX{AfVGZKX|afy1nCpX;F?d_l|l@MQUw@;QG1Hw-vSXkjdD3@kxOuPjRdId<>NW>tp zZqQEj$B$8?7a@zCu&y=8lTN)Q`ATg|Gg)Rt=uqNG~lgqW%VHt;Ja)_oZLN z`YO5d2t!fqy{1tGYl_3{fO zyfU>PUE@$h?kegp>LtoZDIIbM90UfbFX{DY4ZF2pqrQlSL#NS}ZP^(Kp<5wI>^03r zQVl+fO$zSJbU`$&3k#zyU!(FiKC0q+>`K>K4TnofeXa!{okgYS*g-~$Gt>cj%)qta zeg4}?r87ZgaW98Vr^AOEH7OMJkdjo_B%ZOM(*|m{)^_%%`sdMVIo-3M&1s1^ngjDp zsPubU)3l{hlMDc!w}lOyY*hF}{#SeTbfwU(s?SBcGyH{8r_r<5IFYw~Sy2_sltWdK zN{AQ^6OK=r9vqGFO_3^Q`IX884M$<-b}h|<74aGkf6vep4t1I{I;!dFMN6^K-q-)0 z>&|c)isx^#U%5P5`JmpzqW?C6fDYexzg@wR%qiSo6|U{xTWYiVM#8Ll64CID;_GSp z>&?+YY3Vm6PuCqVyMbWLR=*LtUaoL|ty$JNCp-P_yj+HB*F2lY#a7{j;1jOPc~uOk z)M0%sTmw6U4GEV95yh8D7iPqbZJi49vCbUVR;i$UgICr3|2wEWkXby}3Ry}okcoO7 z9QNRNc|LNvP6kjye4q348OKx2G#iF*Lw@%COZB`;G4$or@kG|7{s>C?+o2x-;Z^-v zsy@$?18MD-_d2v&y?HJu68M*6cxY*&F!p)`3S>gRRq!aWePRSOYP28SriG zswyRrJ%O2~e#ZgNDxA)Bxs0Y^Np_~&3+5j`qHXSH9q$}*M);Wo3xT!ahwI}h->r!R zcJG-BH6rFqW+j%Gz=45~cULfM@5Vq3ps(pgQYgGjdV?-ohwCBRsBqpL^!}Il=@MkG66q}R z9C)zT=p8@}P<6Wdl+fS#QQH3J-vV4vV^#1-3sM`(9(@sKe(t3Q?EB-zO2N%8x3`4P zw{?^7ZL{a?q;b*jg0k@T#5r6m<(l}$w)(b+Z9`P>&Ny3pSg?BnqS0tljmzE}IJ4+; z8YWbK{ZW#PrJh1=y1C%~y{Ak@DDCiLfS+$`IQ;r1bK4p?$_O7Ot3~3 zNAkis*7d=v92@VBX~|)i=S_Mv(-S}{fPC`^#!snEP}y#>Tc4>FQ^Ebpv05&LIvA?E z@H+mpRMDk0Yxk?e1Y`NOyf{2oVq21ruI`Z+vhIx+=Q6LAt1GDL+BE;$+;HL3XLpk1 zp#(}C7VzqCCKBC`?Zd@q{_7GFxKUMERW8SmbO-s5g zF>Nb0bbdXo;zpUGGcF{_FmW`lVH>S0O$O*1M*XB(04%QJfZUEYtS8X_S#AD^lyo6K zOE;2+f-->b-l*f^k#2ezkU5v>@0EM^Ka5J4O_`WY|H8tEJU0Nn&{NI{b$0j$r95$-#5PtGfy<$_wYc~|2F_XnGgGekr#uaVdXKc(S7CrgWhV@5RVSPIKg4mUEtMBL zfgeY!R0?hhLWH*ccJ`TTuGib#71ZESWu!}KFr!6npp{xNa?{NzfXV|CSS@1c(Fszl9_(8IgAI;XTB>F2e^eLPP`7DOBy%x_?Fx2W0cNZVs2P z-JmdblsP%&7V!vkEz@{3l&OjFvNwgQ1=8y@a<_3AFmuNaV4X(VeGJHx+Q>#PvHZND zm*DUFcIz+EtnEdb_L_{*o|7jxt$3n3!;Jb|N6!@x0sf2_p0ZV0DVB;Hvl8GUs<=Tm zOhx&n)(>p`iVO8-5=&d^r8IZwRhAaa3JZu`9jw!~qR{$=@X*-je)MRj%ogKn0_xlT2rgTpMG!b7GCcFNra5#CT${Puf#`JxtY z^aJj1a+5D)jH#yWiFQv{DINB?hqoDh?Q`k19_ZlnF}~qsTUeD~1Sf*L+K4wt)#~-s z-y}$x8hDd-u3nfBMCaWybbeC~4ZhXrBTendeWHmSQpJ+|5FIMzbkMd2tx4*GIE~9l zOgz=IXbS(*=yR*=7crOq^lVTjOXTuR&39${mZWW7*du|vgX)@OVLhOOID@ZRGH(0Q z1-a|fpEvK(ykVb|PQH|U-n1{gWs%lDPVA(py0r{U#Ls0bIYF*RK`Jm( zudk(1nI2lqq`&u9Pf`JTn4yq`9)>_z3T6nkqqv(IjZv!MnjyHeEJG^SZTZZ$+uC$? zVz)9`ltD|mi7fe&y`dGABH2%{(Z4rXsns_8m=I)EgSsI1k)0ha=a-`7FJVW%!|8q) zA8hO1Hm9yAsZ2h5hX(LBX`2?<|IyRA2$o~nYkARbbraySKhBRP;q-cmMrvJsmr2sg zgY24%5@J_Ur0kp(i%I9Cp_4!S)4-soNPWid-l0UN>96wy9~Gyw&09wzB3GqtFg^q< z)MPTqKQmEanlD4&&{o}{%=P{^*?pOs4LkkAdA!Ck@al|N<8dL}t8mt&F1S8+! z8BhEGINx($g8LVzt#`JlMne!Z?>m$e06-Ecc31OJr-4r(Yoi#qCXV;rODqmfwBNs< znp|}RW(b7p!{{oGT?YU#_2uS@F@X$U2DnO124f@bvi7?Oo>{%up2cKRUg^k%009u( zyGB4Fjv$r**l@+JocHwh5CTZ74!*uyqHO*hvbI0K-pgU?snyty!*JASPrLxpYfJ(X z-n_d%JJ9Kj9B8%8?8{K?0x>0JW|SHZ*RY~wh}RnqyM#QilF3?GSf;6s(okLn#Ry{* z%nDEwomrR$>DYN!>oDnlclNLoB_D1yP1eKL)Li)ah2k7L-c#XrZK0ZvMIlXEWkvd^Crd>b!t<~x~zeBGzaKBQq zqt!4j^FrH7(!_7ww?h@>ZpO7a#;-lL^R;p~=6BQz$v@~fpcB)jZZ? z2R<>X@#O)Epq6F?W{#Rj25v!fI;nunXQm6A$E~Z_3(9!Hnhf#|2KJ+WENbrso}Nb; zvUr6!{mDL^b#lTxL{EQ+Pv%8FKL4%dV>36cNh7KkqZl7{`!UTS+Sw4<8g*9lCp1s zlU80*5;wX^chRFdvOQ&I2R9mtS?$Zr=1aFVAYQKQ?~NE06fUmTJ4~9WrSv02FsE`G?D6>QSMs;&q3YfA zYiZ~I24N4n5yNok8JI?-V^)u|0$$gtlKod?dST)rz1ll-4WxJ2eKLVaGT?6LHAM zuI|>a*yEb{yl>mBzL0vMysK6~qhQA?M=n}3tLBD_6?Vz^9W1CO!7Hj_C)j(31%GXB z;PV>Ja~jz4jKbJ%ZSOwn>tbVDMv1w<&_a_QuxDPSzbX;y^_G&8FO}TeWj0qtVuN)N zOWSfO)HY{B(GY`}OX#@2R4ISpsH!81v$6bit1d3(!r006ERiDbsz1`X zEoQLB#?P;Lc4g9dtEW_br&uH!^+q9wnYn9CT;p85O918GwH4C{k{T}%b&KEs= z6^>J!Ql&{5gPE)q;qj4jyctc{k%@h+p$jpzGix2BnDCCee<+W~XTWSRLfpnX*kR2k zORGJ&%>Qp0z3mBBDV&>)E^sYjCqbgiPc%%hXA&w_6XMjid`SYuaqQeL+&Uf3KIRbn zvG!JTi(CG?EFEc^yFQu0p^JCCra^y`eSH)w{DcBRE&W!?m5$D;)2xVsf})`}Wv#8* z5}~9Jl<*r=`{4_YM<|)47#CPG;x7`=MK6iVC$EFOh!F z|CwdA&$aA#B8Yhf`(Mw^5p?FOKLyc62`)|m*)qpak#&4UOCQ%&SAd8|4j0ztqfOOE znQd`+%evB2i9~fs>lC@R#!YIX3!aE#R70@&X!?7uz$o8*V^m_XZMj&V&{OsNj+5CM zx#Ac*=bv@w9e@lj!0fYxG7%jD`S`I3*}lX2CNwi~xV;g(s{qdX$N7N6!$I-DC*JIy z>}+zy#zk#aW##zlh7e@A1Ojq_-~)VZ)~we*7AU(faUsmz)CrD$}NMQPF}JvL!5NY zLVlDj_`)~dq#jKzNBs0KpJ?$(gzM{9I52|6M9bdWZ)tJxn3Ao(8(d$+tsi43Ug!FM zQuZ4@u3sKx1E#Rp@!WEBy#-eu`d8~nnpUVSRA@XEJ7Z^l$TDU_cTh#{Crb06>(OtJy!MId2{+KPgASV=I0j%$C$dS2ez*ynj5}RvHJv?f_7n162KM zW;IhZYxKFStzzd|{kmVj@knr!e$yYg#uesdNO`x|!?1>(pJJ;8G1~f^PdzggLQc5{ zr5_Lnzqrui_b>foBH6`&aQn;zd=SuOfkLX9k@L&Ww;9_qvSdxgnVtloNVJl8wkq}o z?OqL7B#D&;Z?jHBF=>29PdaboEehmy-?tqL|3n_@%RTj4Mm6zdv1wD)@x7iHjf7*e z#I2w})qBWa78{;95R%=(sFHB#pW+r9k4Bm0F zO1iqc&m|d|f-$@B%e5O&+l2Qf3{0){zuh|ja^SVyKT(A1O*i=Jzd7)bajboObYw$2 z-5^6FYTWtZ`EFzuu+m2#pyEcSC+LR2xzHx~JzyE>?LlzXeB^$0PiwfNuuw}V2B5f0 zi@e8RgUSpI{0WNRd}8pwilTYFuH;+zz#AY>iouP8kIn^*miiB8pGnipy;YiOnhnoJ zi=+#AwA{hgV5FZZEwmqRuG1$V!D-BS&#wTSwseTHZ!Xn4P;5kB`PXfq1ht-=B+&{K;;p1+5gzrn-E6b0LKXIYefoQhK2?m z2^Jtr9eNo+x%5ypZuQS>0Xu9`m}9XkykAj8`r9x6X_UzCB|qLFiIQ@MyPu|HY-1at zP<{Wxs@GnlcyePH={*Ao*+Vw+VqUAQDSTup!7cq0IB-&*k+3rmDa9 z&$ZAG%7vgfjRCmb>gI0~>WqEv>AgC1u6I7y%S{!lwF$k4qHd(yVIe(NdyKYg?Rd;& zJoWtswj|g~2Eo8wlEv(NtD+FopG@Wx)4E*n@jb!aTsg_H%jN@In{I* zMt%|#c{*j-i4x)eW~x<56JO0dfx1nm>t-gs$5h(m@=UeO(@&X;zEC=lpwV2 z)2PtQxBr5SYFkmm7#6i+#-J(ZpZEs#X;oNhyMQqxwAu z2(|fM?=5Z7B%W%Xe|biSL~lHRVk_bRSQb3up-sfGMHk5gC&ILhGnIzLXwq7{k*;{v zmbtEE?RSu1k#t)C;3&6RTBlto@#Mk!shwbYs+>9XYu5J(JuM;bf&*z(_X8=n@vPrm z={8+TPB5H2wX-X;Petk%2~n;R1j6xNW3*S}=-%E{xq98#{!mK?#(ZspauWBDDik9E zf_!65WN5jDM5vhIeNfOq=kplKL~H^F^W+f)kB`sN8Az|$@afcue}&8II*dWW}jkBTUiZdxU?=?6TY;3@YYs z@4nncd&RI{t+hZ}=qRhX{h#)|$0vbT_e0?xTj?dX zggoEfal$1_SOCxoKLS4%N4X^DSL?Wl_m+dj4V?uk;NLhZGJU)0;AaN1hpN?lV;}MT zzP`!^t5szvSiZpRWLkiLtdPS}Q3IERAZ267@a(Q}c*+|{^2naOYvbE>n+B318OWw2 ztX9*i_k@_n6dkabcMlGouhXiFv8={o$)12*=ec`T?|sK$-TtA;&Squy7rT>dy}xR+ zAs#Shaq zCXC}~6JSOW3WyG*uXd`Kt{kz zead|BqT;iy^VIAbq^;~kg3zK4snShV)y1pz#|;UQnd%DqK2!xSG{K^@AmySO=0C9q z7c*#8JuRs@9x(EuAG++5?;&cnN>m00$scyH@SAlBmh ze{Dg!ue?9|3^M|YrNYopOqa#i8o2uQEUn*vF%y<227Rp5X%H%=-^LO$pmDz?74(yq ztEG;5b(>fVDmweGndI1_=Wn=b^ym*8WX4*SOASxstJBXY-RUGv+hO6`wW7mqZYOCh zH+Qx+-4WQT)E-Ti_A5;QS{RWj**{X19s7cd8F%>{>sNGi^w?je5g@q;Y+!NGJa#t2 zfB`)8Lpcb-$8Yg`kx{BGnN%aN(r9p@QDW|*!5fth3V?s@*N8Q4tl>N+9a4l%U@!oSI`)ZgNa zmEP)g%Y^%jU_M4n=#KHPG~Z7^PVfTqIi2^`ZqJ(af7)Sy9K8BSZ`f%4GU zDU`V8K40I5LZ`E=U&H;K9BL64{?E;V9x%HGqUx7N(Cz7)j>yk27#DmX+X1HbJ|qaY z^s^c~R(ELjYMrEH ze4I1H!SiBB#KOYD-6H$x<@D}pb>eRn(VXYl!r6(MSB)OWF*dJ+@83*sEUyx?`3mk^ z+Cl@*-FM!3@DOPS$nN{%u}c-b-+CFd^9Apg&+2tnh(Z*+$Ls=y|B{ zZ<1I|VSFktl+gEO97Fb1OI9|O3j)~vu;(>>pnBf@7&t|ix+*W{`?EE6P2jA|2)Wcm zU#QwDl$g`nG0)MbQpdi-{B&gg{`GheAH_!My0pYu!#ZI!nzJ!b4ScW^UGu)-#>sH{Z_&DBdK)K*S;$ z=KXxeEoez2o9Q#L>i(7Zx{4qNwmBG1!eL9wVyYPQc%xeQaHYV$ zf9>f4CFAsC^=hZ4p7kT1;$TVb5N>y1o11#D=31 z1Ri9<3sKKeW#O?w1n}2;#>@r#@SG

6~Gy$BIXt6s6c^5TwcGie1?zs)nB(QNnd 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
diff --git a/internal/web/templates/install.html b/internal/web/templates/install.html new file mode 100644 index 0000000..e7b68a3 --- /dev/null +++ b/internal/web/templates/install.html @@ -0,0 +1,367 @@ +{{define "install"}}{{if not .Site}} + + + +{{end}}{{t "install.title"}} · llmgw +{{template "sitestyle" .}} + +{{if not .Site}}{{end}} + +
+
+ + + llmgw + + +
+ +
+
+

{{t "install.hero.eyebrow" .Recorded}}

+

{{th "install.hero.title"}}

+

{{t "install.hero.lede"}}

+
+ 3{{t "install.hero.machines"}} + 4{{t "install.hero.steps"}} + {{t "install.hero.time_value"}}{{t "install.hero.time"}} + 0{{t "install.hero.hidden"}} +
+
    +
  1. 0{{t "install.nav.before"}}
  2. +
  3. 1{{t "install.nav.binary"}}
  4. +
  5. 2{{t "install.nav.setup"}}
  6. +
  7. 3{{t "install.nav.check"}}
  8. +
  9. 4{{t "install.nav.use"}}
  10. +
  11. →{{t "install.nav.next"}}
  12. +
+
+
+ +
+
+
+

{{t "install.step" "0"}}

+

{{t "install.before.title"}}

+

{{t "install.before.intro"}}

+
+
+
+ + + + + + + + + + + +
{{t "install.req.machines"}}{{t "install.req.machines.text"}}
{{t "install.req.system"}}{{t "install.req.system.text"}}
{{t "install.req.size"}}{{t "install.req.size.text"}}
{{t "install.req.clock"}}{{t "install.req.clock.text"}}
{{t "install.req.network"}}{{th "install.req.network.text"}}
{{t "install.req.access"}}{{th "install.req.access.text"}}
{{t "install.req.names"}}{{t "install.req.names.text"}}
{{t "install.req.gpus"}}{{t "install.req.gpus.text"}}
+
+

{{th "install.req.memory_note"}}

+

{{t "install.before.commands"}}

+
grep PRETTY_NAME /etc/os-release; uname -m; nproc; free -h | grep Mem; df -h /
+timedatectl | grep synchronized; curl -sI https://gitea.mynodes.xyz | head -1
+ping -c1 <second machine>; ping -c1 <third machine>
+sudo -v && echo "sudo works"
+sudo hostnamectl set-hostname llm-1          # a name of its own, on each machine
+
+
+ {{template "tty" (.Cast "0-prereq")}} +
+ +
+
+
+

{{t "install.step" "1"}}

+

{{t "install.binary.title"}}

+

{{t "install.binary.intro"}}

+
+
+

{{th "install.binary.text"}}

+
VERSION=$(curl -fsSL https://gitea.mynodes.xyz/api/v1/repos/ilker/llmgw/releases/latest \
+  | grep -o '"tag_name":"[^"]*"' | cut -d'"' -f4)
+U=https://gitea.mynodes.xyz/ilker/llmgw/releases/download/$VERSION
+curl -fsSLO $U/llmgw-$VERSION-linux-amd64          # -linux-arm64 on ARM
+curl -fsSL $U/checksums.txt | sha256sum -c --ignore-missing
+sudo install -m0755 llmgw-$VERSION-linux-amd64 /usr/local/bin/llmgw
+llmgw --version
+
+
+ {{template "tty" (.Cast "1-binary")}} +
+ +
+
+
+

{{t "install.step" "2"}}

+

{{t "install.setup.title"}}

+

{{t "install.setup.intro"}}

+
+
+

{{t "install.setup.text"}}

+
sudo llmgw
+

{{t "install.setup.keys"}}

+
+
+ +
+ + + +
{{template "still" (.Shot "setup-start" "2.1")}}

{{th "install.sc1.text"}}

+
{{template "still" (.Shot "setup-choices" "2.2")}}

{{th "install.sc2.text"}}

+
{{template "still" (.Shot "setup-admin" "2.3")}}

{{th "install.sc3.text"}}

+
{{template "still" (.Shot "setup-machines" "2.4")}}

{{th "install.sc4.text"}}

+
{{template "still" (.Shot "setup-checks" "2.5")}}

{{th "install.sc5.text"}}

+
{{template "still" (.Shot "setup-plan" "2.6")}}

{{th "install.sc6.text"}}

+
{{template "still" (.Shot "setup-install" "2.7")}}

{{th "install.sc7.text"}}

+
{{template "still" (.Shot "setup-done" "2.8")}}

{{th "install.sc8.text"}}

+
+ +
+

{{t "install.setup.whole"}}

+ {{template "tty" (.Cast "2-setup")}} +
+ +
+

{{t "install.setup.script.title"}}

{{t "install.setup.script.intro"}}

+
sudo --preserve-env=SSH_AUTH_SOCK llmgw server init \
+    --admin you@example.com \
+    --patroni <user>@<second machine> \
+    --patroni <user>@<third machine> \
+    --standbys
+
+sudo llmgw server init --admin you@example.com       # one machine
+
+
+ +
+
+
+

{{t "install.step" "3"}}

+

{{t "install.check.title"}}

+

{{t "install.check.intro"}}

+
+
+

{{th "install.check.text"}}

+
sudo llmgw status
+sudo llmgw                                       # the console
+
+
+ {{template "tty" (.Cast "3-check")}} +
+
{{t
{{t "install.shot.login"}}
+
{{t
{{t "install.shot.admin"}}
+
+
+ +
+
+
+

{{t "install.step" "4"}}

+

{{t "install.use.title"}}

+

{{t "install.use.intro"}}

+
+
+

{{th "install.use.text"}}

+
export LLMGW_API_KEY=sk-llmgw-…                   # from the account page
+curl http://<first machine>:8080/v1/chat/completions \
+  -H "Authorization: Bearer $LLMGW_API_KEY" \
+  -H "Content-Type: application/json" \
+  -d '{"model": "qwen-0.5b", "messages": [{"role": "user", "content": "hello"}]}'
+
+
+
+
{{t
{{t "install.shot.newkey"}}
+
{{t
{{t "install.shot.chat"}}
+
+ {{template "tty" (.Cast "4-request")}} +
+ +
+
+
+

{{t "install.next.title"}}

+

{{t "install.next.intro"}}

+
+
+

{{t "install.next.nodes.title"}}

{{th "install.next.nodes.text"}}

+

{{t "install.next.models.title"}}

{{th "install.next.models.text"}}

+

{{t "install.next.people.title"}}

{{th "install.next.people.text"}}

+

{{t "install.next.https.title"}}

{{th "install.next.https.text" .AboutURL}}

+
+
+
+ +
+
+
+

{{t "install.trouble.title"}}

+

{{t "install.trouble.intro"}}

+
+
+ + + + + + + + + +
{{t "install.trouble.see"}}{{t "install.trouble.do"}}
{{th "install.trouble.starter.see"}}{{th "install.trouble.starter.do"}}
{{th "install.trouble.judge.see"}}{{th "install.trouble.judge.do"}}
{{th "install.trouble.ssh.see"}}{{th "install.trouble.ssh.do"}}
{{th "install.trouble.check.see"}}{{th "install.trouble.check.do"}}
{{th "install.trouble.node.see"}}{{th "install.trouble.node.do"}}
+
+
+
+ + +
+ + +{{if not .Site}}{{end}}{{end}} + +{{define "tty"}}
+
+ ilker@llm-1 · {{.Cols}}×{{.Rows}} +
+
{{.Poster}}
+
+
{{t (print "install.cast." .Name)}}
+
{{end}} + +{{define "still"}}
+
+ sudo llmgw · {{.Label}}
+
{{.Screen}}
+
{{end}} diff --git a/internal/web/templates/site.html b/internal/web/templates/site.html new file mode 100644 index 0000000..b245342 --- /dev/null +++ b/internal/web/templates/site.html @@ -0,0 +1,176 @@ +{{/* The look /about and /install share: their fonts, from this binary or, + for the published website, from Google; and one stylesheet. */}} +{{define "sitestyle"}}{{if .Site}} + + +{{end}} +{{end}}