From 2f616500c95daabe85e351932af6fd8647171869 Mon Sep 17 00:00:00 2001 From: TWRoman Date: Wed, 8 Apr 2026 15:12:58 +0300 Subject: [PATCH] Minor changes in README and README.ru --- README.md | 12 +++++++--- README.ru.md | 41 +++++++++++--------------------- docs/assets/telegram_button.png | Bin 16376 -> 0 bytes docs/assets/telegram_button.svg | 11 +++++++++ 4 files changed, 34 insertions(+), 30 deletions(-) delete mode 100644 docs/assets/telegram_button.png create mode 100755 docs/assets/telegram_button.svg diff --git a/README.md b/README.md index 55c9eec..2b3c8ec 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@

- Join us in Telegram +

@@ -26,9 +26,9 @@ ![telemt_scheme](docs/assets/telemt.png) -⚓ Our implementation of **TLS-fronting** is one of the most deeply debugged, focused, advanced and *almost* **"behaviorally consistent to real"**: we are confident we have it right - [see evidence on our validation and traces](#recognizability-for-dpi-and-crawler) +Our implementation of **TLS-fronting** is one of the most deeply debugged, focused, advanced and *almost* **"behaviorally consistent to real"**: we are confident we have it right - [see evidence on our validation and traces](#recognizability-for-dpi-and-crawler) -⚓ Our ***Middle-End Pool*** is fastest by design in standard scenarios, compared to other implementations of connecting to the Middle-End Proxy: non dramatically, but usual +Our ***Middle-End Pool*** is fastest by design in standard scenarios, compared to other implementations of connecting to the Middle-End Proxy: non dramatically, but usual - Full support for all official MTProto proxy modes: - Classic; @@ -40,6 +40,12 @@ - Graceful shutdown on Ctrl+C; - Extensive logging via `trace` and `debug` with `RUST_LOG` method. +## One-command installation (update on re-ru) +```bash +curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh +``` +See more in the [Quick Start Guide](docs/Quick_start/QUICK_START_GUIDE.en.md). + # GOTO - [FAQ](#faq) - [Architecture](docs/Architecture) diff --git a/README.ru.md b/README.ru.md index aaf4aee..7a805de 100644 --- a/README.ru.md +++ b/README.ru.md @@ -2,7 +2,7 @@ ***Решает проблемы раньше, чем другие узнают об их существовании*** -> [!Примечание] +> [!NOTE] > > Исправленный TLS ClientHello доступен в **Telegram Desktop** начиная с версии **6.7.2**: для работы с EE-MTProxy обновите клиент. > @@ -10,14 +10,14 @@

- Мы в Telegram +

**Telemt** — это быстрый, безопасный и функциональный сервер, написанный на Rust. Он полностью реализует официальный алгоритм прокси Telegram и добавляет множество улучшений для продакшена: -- [ME Pool + Reader/Writer + Registry + Refill + Adaptive Floor + Trio-State + жизненный цикл генераций](https://github.com/telemt/telemt/blob/main/docs/model/MODEL.en.md); -- [Полноценный API с управлением](https://github.com/telemt/telemt/blob/main/docs/API.md); +- [ME Pool + Reader/Writer + Registry + Refill + Adaptive Floor + Trio-State + жизненный цикл генераций](https://github.com/telemt/telemt/blob/main/docs/Architecture/Model/MODEL.en.md); +- [Полноценный API с управлением](https://github.com/telemt/telemt/blob/main/docs/Architecture/API/API.md); - Защита от повторных атак (Anti-Replay on Sliding Window); - Метрики в формате Prometheus; - TLS-fronting и TCP-splicing для маскировки от DPI. @@ -26,9 +26,9 @@ ## Особенности -⚓ Реализация **TLS-fronting** максимально приближена к поведению реального HTTPS-трафика. +Реализация **TLS-fronting** максимально приближена к поведению реального HTTPS-трафика (подробнее - [FAQ](docs/FAQ.ru.md#распознаваемость-для-dpi-и-сканеров)). -⚓ ***Middle-End Pool*** оптимизирован для высокой производительности. +***Middle-End Pool*** оптимизирован для высокой производительности. - Поддержка всех режимов MTProto proxy: - Classic; @@ -40,6 +40,14 @@ - Корректное завершение работы (Ctrl+C); - Подробное логирование через `trace` и `debug`. + +## Быстрая установка (обновление при повторном запуске) +```bash +curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh +``` + +Подробнее об установке в [Quick Start Guide](docs/Quick_start/QUICK_START_GUIDE.ru.md). + # Навигация - [FAQ](#faq) - [Архитектура](docs/Architecture) @@ -100,24 +108,3 @@ telemt config.toml - Безопасность памяти; - Асинхронная архитектура Tokio. -## Известные проблемы - -- ✅ [Поддержка SOCKS5 как upstream](https://github.com/telemt/telemt/issues/1) -> добавлен Upstream Management; -- ✅ [Проблема зависания загрузки медиа на iOS](https://github.com/telemt/telemt/issues/2). - -## Планы - -- Публичный IP в ссылках; -- Перезагрузка конфигурации на лету; -- Привязка к устройству или IP для входящих и исходящих соединений; -- Поддержка рекламных тегов по SNI / секретному ключу; -- Улучшенная обработка ошибок; -- Zero-copy оптимизации; -- Проверка состояния дата-центров; -- Отсутствие глобального изменяемого состояния; -- Изоляция клиентов и справедливое распределение трафика; -- «Политика секретов» — маршрутизация по SNI / секрету; -- Балансировщик с несколькими источниками и отработка отказов; -- Строгие FSM для handshake; -- Улучшенная защита от replay-атак; -- Веб-интерфейс: статистика, состояние работоспособности, задержка, пользовательский опыт... diff --git a/docs/assets/telegram_button.png b/docs/assets/telegram_button.png deleted file mode 100644 index eb649d3355513187f95619e76ec1362ea3f05e21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16376 zcma*OWk6g@mp0nCyGw9)cXtR5!QGw4-QC^YLvVL!2pSxM2X}|y61bdm-g#%{oB8g& zKX&)7dY)Rf)>CV*UA?>CbITctG zfa2y>)-vAC=4#%G>Zabdro3ik!b0!@o_rq$?9E+`Nj&ZC99;N31qP9{z!7BV4t5&>s33qDl|secXrXbF;8xw-=Rn3+91JeWM# znH-%hnOS*xd6`+*nAzAEKNyTIUJkCto{SDIb3U(AC<}f#ffn#wLz# zu7YG_A2`XsjGKE}|EF~amw$!-Aq4YZ2s0}a3-f=a1Falg9bK#(f&cdCzm54f{67Y| zT3h^I=J^ZxAM_9T{`VO?je-9gSwZ3doo;Xc-@s7i~G$V!THvGQ_pF|slJ zsuh7S`@hN=dx0$i4v4pYfhpTKXY+Q^i9E>d7>a5&+tgL(-9P}*g zeE*W=Z@#0MwT0LJ7yGZACK34HD=6^ESi877I(z-y^-rR!nLGW{`lo4U{db1{mE(W$ zjZOcGPLK@f>}cj@YHs#-fPY^Bf1xgp7Ooz~&gP<)A4@DqCTd|}{h@;w2|E)D(?5&w zZ>oot`QK~$pCNJaadPucl_j|1T&0q5e-N{=2UKazcRluPgpP zgb`r=AJY9p_%9{m!})*uK1$C=4P*Xy5&LNTy9}B;eAGVYk0Q7Gj`&eX!Gf$m^74P= zBLF~?V&|J_+-M854&~am)2-> zfT^VCEd5V;`N%2@LKk0IcNG$}tDZXoYMgj$>6O)(1&Y7w70)6vp1cE?H)eq8!ZWN-{M zHL;`f5An~yVNe9-$PVLuR}vOydpYixuB-lmGvdssydNElBn)0R3%YH zCaNG4xx(z(`)2P+6j;HR9$J8#Quy^ER6HY%J^t`vk#TA~=nWQU#o7M?0KF->$zYrB z2dw$NVy+!?4tj!a7W}Hh_)NYsWFH0Doge5zq*GgDJbSWoDKzqcs-05T8N4odlzvlN z=IE?$dFu8O>hN*5f&LLKVr*>16U{ zf`>{14lVM#OuZ-=6l6>cY-tg*$mY>$M?ud+Tc5|DgM`D@-jGW5Nnth4rY^-x$AHV1 z+HsdZg45oM-cj!p)8m^hzkDChT(7^iNm8>A1LA`DNMT8MJt8q_z%iEru!WI}BCb}@ zBEc>&_@rpcFcg8P{H2poA~+Pq7)Omr1tX!rn2W+t$8(gO3seCZ@BsC-h;Oh#dYd9-Jm80Ahw8WYO#hptMDx-~qz`X`>Q=w9g7f3hP3x z!KsSfWU^_89;u9GXE@Z>9i+K`2Py_4qX(DEmWD=c1ufS&88raPq1|PBR1j|c&2$e7 zT+g-$VY^SiMBEl62fS4<{kjccC}>X@GSsr$p=9^M;%_yPM?F%S^I`@)9@yhAK#}*d zql=`BBLD`x6!7z?Z6O3}>CH86sk84kGzTyd?ZL%-{mfElDCf;NGMLqvUQ&*35R;56gAUBx>+D{azP4&6YYGI%FO~$(_8p z%O@R#A>Kzy`+^b4^&@jyg-JJbW!B8Vmm8&Z6wY*yTEciJTpDMN8}`qA`9Z>Ke@)J~ z<3g~oxTwMJS}#8CHev&`OH?OXu-0%QibObRR$71F`N}O_xR6jO@>;d=b1#@#66$o$ zOF62-6ei!<^63pm+Zjkg+{9I@2X_}`5`ATT(uJxH3JLUV+Mlis@NmiOS(CB!M(JF* z`q`*rdD%(PmI~Yjr6i51%#ej)fu={~!?U6fbLFtZuI(YR*+INqVFT_Wj7Nj21GmUR zy$A>BH}TU4g)vO`e%!0-m%|RclRX{4M8u@vS;bp_zP_^ecJ?&3P&;Ki@Qc@V<dDLVtC;utEaUohXpNtU{`-AIJiJVVwJ@`1TP;t?{pTvUKIok}Y==b- zA3r1VUB7IH7Sesr+uvMIf@xwngNl=IPaa^W&l>xv#_;sK5U)NsM&`C`q);Sx{p!$n zkh1RfM(I0!nV+>jgbSvZh7Et{Zx>t{%heGercn09OV<~*4Dc5*@*kO@JH2dVT#?c_ z!+b3ak-r|mj8M0JEZkCxZK_VZv#Jj-(yk<=9CbI8N&k`fN$};x(N?(G}wBVW*@@vS{E3UN8oH6o(Wo$)p zsENPFSJibWNXC8UqfAzX_JK&_;kV?v{;r)Wju+Q`<&{gNDj{4-N45T{qe}YYa#6)p zXwV~(lgv(-GGA)-;F4=e1}Z-+dbkUxX*NF<0Ee-S+kcn7f~(i`_kv^~g! z(}bGJh%raRqV$u1_Plu)=e4&MIt6CrVcA3;;seEtl!VHkxTX2KPRT1|`u6)rktA9I z{B5J-`EbM(cw-{tNnBX=YSa`iQj$BFi4a>CS|tHQ7yw)2{OZHqx=hI(mDDtM`^)xQ z(vMRCq<(9!O+MyH0#=op$$+h{dA;3Vf>aE3IzZ+`d++TzMTwv1TQE?&^vHTSy;Arn zF36#g{YO<>Uun+@+|8Q3m+{!HHU^LrjY?G5kGs(8cJPMJ_vRGcgcs`cuHx z@hmIlh_#diVaM0<#uSXLlSJKpnT!?EQ4pDyt~hlM_{4m6uqK`Do_Nd_DWnFG%6j1q}ss8Ta|jrfTs z>Q~RkI_x-5m7aK;{AbqI$Z6uCo5YJv2gk6^N3*N&`0o$9 zTzHcC$pZ0`Mx%N$WL;Bst@`!_#SMYqxx^Nbt<38$pP{Zf04S~Ohn|Q7Erd?aW=>Le z{DVkfJ*c=W6)}U2K`*{0_ioxf&A9Q_CH59?j-at`D9M3Qi5go`BZ2E7Y)V3Jpz?k` zN~#Mt=5OnWW-zqsI1o!zSLTqy4~ ze7aSS-o@epSVW(z1x7~U5861Fb3+A zPeT$cL`NLj56Ve0a5gwp*Mg(NFH)5B}rNjjMgm5ue z5T42QsB@E|1}n+i#yPlk zu|i+7A85!cETj?D$a7i_KLnolo&(@~^d~rRR}jzGncE#F$kHmBjoJF$ z5K)e9?u^SIp?6&-Wfr8jI7vwzV5705K-LG-4Z$J70rDm01~j8ZA}vQqosa1ufgzOj9{8U7Dg8^n zT~~X%KRHLfPL4%3^idm!NPa~-+S0{j9I4pu+-X1vrN(na&>TzXH>v7?wQ(=SJon;7 z5{P$_8vG+u#Qc~+el_&HIaJn?q9tum6RsKT7&A9Aa531rz~%Skb$iPh5m%K)G*QVM z-C86C;!Ff3fIxQ$dsf6!+YbQ+J|Bsz!U7+!X8Sa`#LerZ^5c`RtICfKR`fB4TjzLW zOInc>dRg7A<*K*y!2&zBaZHRu-27q)r!S0gp&mQA;S%+liE00b1pvAo4L5ozzBG zh8^np)T-`4ax89_jwvie`wLlUZnL&nJo<_j44G=rAUEmwqHS<-HnTmcpkM?Gs1urf zRMpIs1fh&95tk@ga$LkRBSgGGKP!Idv+FC8l8d;KSeg`wx7-BkI3;3d7C0>4_6e=D zX-+4@@Op~RX1bOSa$GpIvkY4nEy^@BSRLbjfQAL1k%8!2hW48vUBOsx@u27d?5aty zA3B4<)7i{$2N63+h$uToxTphaMsUA;p{|1IgANU6pI)ia=P_F_#;WuL|D4EP&6Kk$ zk{S&cse@CrI1{36QRPl757JCIuuA0Mv%CoSn5FLEwfP%M>`9qxp(>n2TovguYRwqs z*W}e88M&)v;58@z*)Eywfe3-pZ7Q|R9}MGE=ZqC;G0v){4fakO$iPiA0>i%@N}FtO zvsff4jQG{AiWJQn&Q;?D@ku!*ume@)zqAqRYbq~x-wr>r8Db{A z@io72cMVk3LCSd})PUaGbYMjztNs8a_}K-I+~?B_49(hW@$6a#P7*Gl7qUPAviH2g zK+QBnf}^-DMvW)@QzC15suBrs1Onu$Qf?s4VjeHb88-?qDTq1XuV<9BK6kXo4I_gEuf74cqD&K&5N9w@o~_2_ zmkpw}hX}Y@>H<-LKNfk2dt3xJC01<%v(rn#O1-of@#ASCAnxUN(H{p5!D@R(3D*Li zKApTTyburzTonspbXIG9f+7p0@&YdqS1MB42=n+H)Nrz|PEtR&FV3i5?Gl@WAj|y4 z&~ZL>LGE1_+FD$Lt^lSGx#w8w*l|OiYrN<>;S$QhPnh*QHNs;K?};ub@p@0$WiV9^ zso6r2d2yQ}kg?IiSVWwQGZcCB^c8g4+LEaWD*fS76`6QS2Pfyk_)i_GVA z80D*|4Hk_V>t?GX2acpnzU~i4vM`(RVsz8#ihfq*%e4Jdr?XudMGub+JMs*fj|akg zm32G2#H=Lfoj%@O=s5Cf3r_0KLgczFCvq0PQg#?XLLf!ir8F>E32nmp+^2j<(HJ4~ zTadeCFS=sdA0k1{aN9Kf)2&4b2aXW+rY19kj^C}tl&Zr^hl!;|@IE_?LAv* z`>Lb4@fgS~`UQJkzxsMTd|lfwu{>J79Rs6T##+C^mq$R{X*_(FAgK^{i)Ly^@y!Q@ zZMSJ?Zff@f2ncleUvfqr;1_(9y?@kx+ByIXy%}{UmkwNPh|f0D0QJ$E$@Sk= zk7dqO+u90l(x#44@!;OJb-Kp;H-kiD83DWv`cLj~@UOVaB< zoH?&2Qz(Y6m_Z~pvImeDx7%4wHHxkM5h_tZYsR`>E$u>M>TD$onesMWImq|)? zioi?%Ln0glXSDu(T;-LxuyeUld0CUNxqD4lU63x5C}HHL->0i&YH)5Lu;_^FWLJ zm^0HL*4S(#+&L==?hA=_B2A-AR+v~UtqDaCePZ1o#v{p$7y^Woc(uWvuEAk4#%25@ zJ*$yyi1{>LBr!Vl0nE7(JaD86iH?p@E=hQ9lc`Y=?R&@34X8g6LJ&HZ&<<8UNK>9K zd>zEDO?%^?63i(@-IHT%SP%MLkl20-T`k z8N@)sM{^*BY?Jzwop;1&<6^dk=P@m2A9cUkC;yy8u+mmuSUAlOrO>RTysQD1N$Gn; zbZ_{|ur`FSRq*b0eDb}uVj2fchkDtp;V27Y%eHG~F}b{SSHH1vCxvO%w88b=*1n!!ziWEQR$x*m zLJ*Wd!r4wa84bXw1F{wD7m(2No)YAt&)j=9mS~DzW!QYYFwl~SkCEMjdG!<#isGC1 zcw&9^?fVQt0jYr-MPuY*_)(4@VYXl=!o=r7$K_y?c;+nyqj94>mbwi;vkO7yX6HDF zMfV{K&)Mj-W<78vLHO$~-5HrwR*uAvF-mC2oZn<$e{zpSOo?wg!2##fj+A@^Ru{27F9>hLUWO6^QXY4# zMRLAMjBhz$w2WdpL=40*Q=>2<9{ApqZe8f#3?|9tff3n*7&U{{U|^3^9#T*yBQsTA zy0+pHAPjy(ZsTbtj>Lmwg#Dqso{`;}-wf?_!hgLbH`3+lBLKRukbL>_aNP9qm_^v- z*Bz}r~pDwSQXLocod%qYJt-$eZWg>jzO}h#-D(G)TSbvU< z*Da9M^G|KxLuF|J0}I`?@UGWUYv3sE;0=C1bD7apLhEApvNCVIBjFk&Qy&tHOo2d)sE8^)OXRbCj3>LnYKfdDz&mbnv zk&S0`#~U8%NAx}3t}XC3++BiV#OAsT@!KK}Kxqa7uCiXj-mj2~xq)thZwEO;woGi4 zZ!pAX-Dkk>r;fq#cG+R>#aAzVpFGceN0fTnwlOSc%elV6(y^COkT9=-y{%=)XntZ3 zy+a^Ac|JKGJSc|UfYJ}pd+o?TkKm5o2zY5L+k7iGFF3%uS}LII-hP_7{scr@QSxSS zX1ofS22(tT7k+cNrhh?dn$gSv*%ec&@3@WwFO7SczMOxf z&H?k5wy6GMkY^W%1W%(i6hgwl5z>euBoE5{8eg&gNY(q(Eoa8@E%UZryatjDtGyZR zyN$V3$0leUqIp_?;m-+9rFhQ$z9hnJ-@V<|w-PEFhlcHMR3!6{M~N4nfNbp6$VzK1 z5feIqtjpy#lwSLo+$Rfjr(ukGS1Oh*4dQ?Y5kKs!=L&d7f4COjFZU;Vy`FD?kA%%$e=+lo8dd}m&`Fi@?@3RIx!&rW2)!CaoHzrqmr-@?3LUpcB)6!bH#0;X~!Er@*!{ znQ6^@SE_gsH)EJ+TI+sBb;K_|Io`&{eC(W2f}&D9G2RVuzmTz9V7WtP(i_1qx$Uh! z=^R%n8&J%JU|wG=Y_t`2;!{`+G7j$i19{ck74$NNj$^;_u?q^g)81(#u7D8Cp;{vF z@RNp#O8AB3AjAY?eY~H9S}q$G5-i0ZB@_%Y|FS3k1;GU^zS8}0`x|oi)3j(#ioTyK z&T|<`RDgFfPak@%0OW=@`R#9l>OVEmZ+W_f1#hVJr-C)wIFH52gm01~p$?ti!I0gD zE(0%)Fz%LHzrTZ&Ho^5gq8ObV9214TQ?BR@0aO^nt5wD5nZPKb!Va{pKyi4n`=EPc zkv*xMGEImNuW{dxh_((LLKGwQ+N8<5bO&pO2CBi#G;E2NO|fUCS`Dj4n}zb-{I-(KGt&O??L@Jb}j#Jg4~- zO^Qc`5GI+z+oG0b3=tyy3WA-IM$cKOB&?kI9ZA!5Cg=gCB($;5ODqE_5P;0rRf$0& zwxp#~R03rXVLJ4#s&9vnm;GTbf0Wuxe?lJmLdF6HdINKMA)i~6G!G*P9C2?dh@I4- z$2~eXl?ed{N9v|-CwJ|?)>q6C(sCt6BmK&GCGHVY=TqzI8pGEJ)_czjLJ^Ev&SUKA z;0_`F(|McVKtAPA*zo1*&rCkA7hEoXXH?QArsV3EU%s$m6Pue!Fy}I5jSos=u zR(8q*%={8FI2uEA3izqip7?Htc>tWIQXPHgNH$bDC%ukefvnDz=h+PUU3}oaS09Bh zU^;=_w{`@Afh1TA^Qc)fi@*sY=hJQ}-wS>PT-8Iw{p4J|Ue= zn^rq9a(YX>RgKEy~4;ymg6g5_=hb8@H#`#^{!yL;V(7wS#<5N9vJwDJ_dbO7Rj zg+Z+j4RL{TNhCK_;b9!WKEsCxe0*6Ts_|RinvowAGp+m@dvHEEJeis9&CF~;i&&+z~p;t zWWDZ}hU6++2wVmpG8sc+W09W?gTveCzN8*3!MAJ}Lz~C=#SXQ)R*isVJ^a(=uKwS} z8fN6!vQR%N1=D{`F~;2T%2$KksTG6^;<&#{#WPJ9G` zDKDT(!Eelqm$M|#|P}tY^-FYw5WQ#G7fF&E1VOfLp7z;St;^(-@m;RNTl2cO3(c-bZ~%S!7^Yj(*N zIJ%3=DK?9{Ex+Ko)_C}5?x0C*dsKac3o4@qxSj`xostIxO^1)IQIdfxme(JQP#ir; zqIEVI@AcilzMJ3ieb;M9YdARo$MZnpCoroDuow0Qzd=Ugn3vP9Ft}Ul@yzFy^QJ7N zA#36^hL+x^cExiEZ_IH`Xg0xCQ%YYO5!2qX_#W7ZX0-+|xi!W6)%pXW{ojPP=JL8h zQd?OW@S22FBXeiDs7-m!1VXPfD?UUaiWQTes5Db1ewaMY=!vTG{-XajJ_T`cv&9Qm zoxT-Q_idjTtTiGVq)#2?@_7)>-}|@I@5&M7g(_n|O^}D-yw~KAYd@rrFLis%b^{9Z z{-;A*LqzG{EQ(gN7;JlYF#ROkD{VSgl;E9DylPCAa2fAAZD4=8Yt9B3EOlkPx3LE9 z$--&45~Br-+kW4suwU;B{(c}P4|rn-CG;YA_OI~^yx4WbD27&|H%D9?5}PQ4|+pye^H^Aw1(uup3$#}3b-~unnziDG9A#0jMQ4jXY;4* zPRIwl*JTsBuUpFW4Vq3{qgq!2t}!uGnaNF2<42@js)Z*N!{9T~0$HONg9*F!W*_n(G+2ILDfo?Wi8;OGt} z4?dN7S-|o16hH;`OwY_SW52asMr`~s9jNP;Yri(J;?ymN2Y)_;XJRpGOc0KioR{H0 z7BhfS8%Ubo1#`9Km%ZT~Uo0<%imMTI7X3OlFvVmnC!nzb_<9y-4;>xUfo2E&oh&&L z?!M+zbHXd_mEkXNMie`iNg%(lD~j7o2`E8eJ>J^G!}?1V4MLPEzB@QdE|${yT=1=t z-XN)vyAncrLK=d^O_(cAEmCluKmP5ns-S(adPn&3JOyXlBwCBt23-0Sargb& z3t)xgC(!t@XYG8)paE79?!UWl^M3R)+C%xAK?EJ}@Of+HW@r2RnXos8(>bdXS^Wu! zUzpX_$*j23TqNKMdJ9VlOc%nHcNTlb@L2)qL^CP&`SX;-6_}G9vvPmUsGe+f&1Q)4 z0txvx=hB&CwO_lY>W|oWgRh6zW_VrNSFH|319If5PC`7JxP;N9L&d3wx0k+{%lxC) zkhhBm;IGfTTb%Fko;NWd-F)zti6X2WTp$M@s7tA|EhQnLhoBi4V*(e=(hb2{!onDm zs=c}a&PDaoR-!&Squ_gvb{z1G>t)bdNDIixXzY3V^HbOh>$aF$du45k>V*?QdGIG; zJHpJ^%|P87+Eu&~-Ubmz0q;~~RHCTBA1zY8FJy@v#Xqr^X{?prBww=L)XWztnyoQB zPht8G^-1--CT^Wr!EhK~c~M{Jw+sVRz0Yr=$k%`Z->F2$u~yaM5n`kWSD+1nSWm%K zg}AWREVT%)k4rx{-=c=&zFSyv;R9DlHT^f8+gq+Uo7w7|H1t&I_7=P}Rne*Id8!ZE z`wY^LZ3t5-2<>h3@n?bUwsMrPaYsl8J2_n)Jf~wpooK?Wj@xT9b3ntynSm6Egyp~s zzva*>FDlE``ugi7VL0Ds(%*e=4$mz&rxIO+OY_gOt&jFu35 zof>|_qK4ar(~*J$J|wgtIP{SV!{CczY`)SN|jtz+px`dxwc2pc8cA+K9kmS5gFoR$~W|PL}ILBr>wir z(d;8^k#2rU_tK)lk`@XXvfdHdkUJtx;b-|`dc0sf%W1J7wzuxQDBAw z_5ftaGa)j82i2{$I>0J8U)N{yu{_@oaxR~RCctL)bp0 z4ocWmve!et6})==9;s8->xb9wM}q;Rxjwq zXbLr{M#?`?ktnggKq~OaSY3RF?$yx1VQdn$tzDL#-af*cxEc_Crls_E+0r93jnHyV z#o(Bo4HLb>$MUlU-h!@PutjqTRRVV_9^LOBKHeQ)pY#@T+6(Rwj{?F)Sf zO&gTXZOcwMuu2gnP%4N}rWPLbW@70{;C(8-J|}Zn#$?lSje=-RDIttEKH}8qi(Gce z*@gAzBZQxGgR{yOc3qg-cxd4Y;ULC~V8byBrk68s2-b8;Eq7tmHyo8TE1!Y&J2&3G zmY#`s5bwKox<0L7kTDHa%#yg?3CZ2M;1LN<74lgZ;vRO^bh@iX@4Ux;B*;EJ<` z8|c9f(P$;KI>7KdvVHO5hRf`f9&Ktg3%~)Qy5PGB^nT4)E z+%*oc`OsbxK1;P|>#H|XIp9jP)WOC1HTZWuDRu-)`bjggA``0>hX`wZT7*0JDALck zwOS#B)EqGrD|V-&2(~0A!cB2Ts;`2|>zaiyG1cfL%^bH;;#(#;o+I`%MNp43LVnhB zRQx1gQAc~d2wx3_mac|i!V3P}fSL-dyq|mm8bPkG7VJ7iU!g&Zw9XT=R!X9^wpT$#&wll?-y(RBIS>+7}*--7ePV@h2_tu-SrO^x5Znu5|dL+Z(xP&o#HFl%TqP zlp#eCYp!K!!F#`;dut_-eOdvGHW8n+qjVIxL`VG^Laar3_Ua z>d**_a?_Ia@T-(v&VwX2^~mKkot4@yJf~Frnstf_iF5p-n$rHXv^Vj=s68c#JsOKnh|M6Hk zD?Dr@G~|xxFuBLOMU+8hm}jo&;i?+(C3?RX9M?_3bmMjaG@$?V(^iN04rNGrbeakI#=r z5GfgPjlDXM8(G6r_jvWrgyKmQR@|w@p-FC{Ro~ui97~aWb7L(6RhM%^2!b+AaZMe` z%;6y7j>=xFw_wbjH);teDR&4I?zQ>}JP@G3pgc{!S*?l~>3sS{34We@zF+J8t|w57 z`zVuIA1FR-M3Knuz~bt1ZU7)a%loM#OdlPbJHA#()dv621bw_V3|MuRa#e; z&j29$t)x1nVIvwOx+g;BbbuK+8$D7NcxX#-*3)+}fjElB_diy(qs`3Lm@onK|`y@miW3#oB=5(tU?-tB{RQe2*5xT+dqFQA;rJ?1DiHLv-c|o zRH70SC@kGpE>kNYZb2WKk)J$m4-RjIZI5^}@v^T=(+(XbmcBFl>(8;TY#7`C4dQgC z9?Psulp#JHvGR;xJx7RWluKpI8F-MCuMsVW zp^X+URWO@o6@ILIHr&jB(4iaFz^j&Ax-i;=5@Vuk=x^xRjh)+1VrX=p(~pxMUljkq zf=@57H2_Q7xmzbSvc4^yP>&;G_cGXXp)epa2^B2DlQTtCV=qFo%5}kAjSnjn*e2da zQ-^l7C!v#+id`EMm`GAK*Q|Vd`#$e%h^`aD0(O36^3*o!e;D@3NQ(k|k^A9sLSFd= zm}@FfXo4+gBv(>mQT~k2>chIeSt4C^C#Qw62uTI${-gcdxzVUq*ssquqL|3L@}x}0 z(FJ-UZguPf$osxK>mCrb(s$g>db{s>aLz$f*4g>p5l*xr0PyP*@RAXd)O~CtD59^8hM!{!#;pU(r!4%%m3N zbBS9y*_^a)Ku6Cb1xZ`-nVbgGI9k>d`+D`mA{2H%T2)10#%D{yz%m{twk0yY8lwP`wq^YVA4aY>T$P*4#hK$`z zXUg*}r!3voF=LXnB3uF9^S+0y7jHAz8Wm7Auy@DLns2eh>GD)mM8 zzL}k^D~_uk(8MT^rWSfhnb%~}8RMaAge9j%;M?D`JOvKr_f0`D7342@gyqt-1VQhv?} z#mo?c6FC3|g(o&}-)Y!qxL3+F*)^(5YUMG#fCW|}cO=;z3S?EjXf@yjtwrzBaEdec z9^BH>;AY4jEha5v6!KiU@Y2@&?h;Y)2Ltjx`?(+T6GJ4PS_VFFrlFzT&h~EByr2*0 z-EtS+p%5TW(*9d2N*hF01b13ft-Y#@Ef?7LtDN))I-NT!8PxrxD8dni4)G3Y2X4b5 z0TN%BZ1vKy7kc3?IP?%122^F)T>`6`#PkC^yow4z@!H&vL7Q4#cdr_w0TQ2}*n!^( z4&4Ypmh2i3#c&-)N6@4e55D215KuwgbTRLQQ%W%Pm&ejXlZUh-8N}~$8X^-nd9os^ znb$7~=t<{^E&DM^L74komx>YQRd&SX_%rF|Gmsq;{KkUB59P;^;f#&o;x4bcF$-e8 z`Vy5ujXw7%rMt}tC8A(wgU&5Lj9CK ztBy-Cj5%NpGQXF-RBW(LW^-v~W9zR9WO{w|u>0(1Yj7v7x|v$va57)MR-x4opa?Je z48~cLwp&+-LE&RhT4h3ZnrL-D=oSLEKA`;UCFAcxR5@y4F|jkH0;m4z#IzBCc2s`_7n16l!57?-a9w#W{v0;cxMiNfCDV(vU+>BK#nd9W-E+2$Cu}{N3t#A*}bkk0!nRG2r#bi z)W)OI5P6C+!=8q-RDswzT%Ru@NEEY#z){sO2BlWPPFh%Ob8OC@u98Go1>k4{2!tFO zS0fIF$DrkhANA`}8#I@FTRmMUbW1z1_>gp!F|mkP{-9cGqJC+!F8TTkBF;O-5Mk{b zSB!?L`R`C6PImx3cvWRfM-q(Ps$==Y_+oP|3FqyXo1xIKBuO$3C6SDFvKF1@*4(ap zNjrHAj|EmZJB+n~JiOCXn<14@2j(hl=0CCosYO{dNK*Zb@ymJ%p)A=Q?S_S!N0_>> zySSVo%DsGa`&9mPX$R>-UoZy-;2iDli`QsZgR^F^*s|H+Qa6;Bh0{+O) zKGCX9JOy`|l+99yL#IFs?JjL{vYO4U)ru2!ap4O=tOm;;ay)F@AqMM($eBxWD9Pa% zBrMz}P>o7)Rg2GHE8eCBa1#_3BR9dsE)7&7n=kQQkHj0UJqFh?5B1}hnJq^qr`Z0j z@s)SAf&CgIbK>c#!JlB0t;K`=jm@1+Ecj!!^HkNSn3v26YP`YL&g4zRGC01%`@_Rl zL-Osg$IFIjV4w~7?2OsSXg64#q@6Mtr^mmAUvj)(DEMMX6Pghj*hfpkk6a)p5FU)x zAP*>#F{p?LS!r3Ace76D4eq_sgIPdp3f+pHswQOHH*95Zu(NGC2VopIeh~~%Z z>F3IzXbq+!;pTgkSlH2sKmtvKBUPqb1#nhz2Ba1=C`dQyEiQ-9L2x=*!LTCZfAU;^ z9n%SO@6P;X#j;t(NV`@O)`b5_@8gV`Cs`-<`5 zCd{#;VAJ_e&BM}Rn?PbgpUdML|E7DL;KSm}W1eHvrQz$xiRIV| + + + + + +