From 3384c019706e62ff123dc0f48c89e7b3a0eb7af5 Mon Sep 17 00:00:00 2001 From: y1lm0z Date: Thu, 16 Jul 2026 11:10:04 +0300 Subject: [PATCH] =?UTF-8?q?Runtipi=20store=20d=C3=BCzenleem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/convertx/config.json | 38 ++++++++++++++++++++++++++ apps/convertx/docker-compose.yml | 24 ++++++++++++++++ apps/convertx/metadata/description.md | 25 +++++++++++++++++ apps/convertx/metadata/logo.jpg | Bin 0 -> 23386 bytes 4 files changed, 87 insertions(+) create mode 100644 apps/convertx/config.json create mode 100644 apps/convertx/docker-compose.yml create mode 100644 apps/convertx/metadata/description.md create mode 100644 apps/convertx/metadata/logo.jpg diff --git a/apps/convertx/config.json b/apps/convertx/config.json new file mode 100644 index 0000000..0b2333c --- /dev/null +++ b/apps/convertx/config.json @@ -0,0 +1,38 @@ +{ + "name": "ConvertX", + "id": "convertx", + "available": true, + "dynamic_config": true, + "tipi_version": 1, + "version": "latest", + "short_desc": "1000'den fazla format arasinda dosya donusturucu (video, resim, ses, belge).", + "author": "C4illin", + "port": 3000, + "categories": ["utilities", "media"], + "description": "ConvertX, FFmpeg, ImageMagick, Pandoc ve Calibre motorlarini birlestiren self-hosted bir dosya donusturucudur. mp4<->avi, png<->jpg, webp, mkv, docx, epub gibi 1000'den fazla format arasinda tarayicidan donusturme yapabilirsin. Toplu (batch) donusturme ve coklu kullanici hesabi destekler.", + "source": "https://github.com/C4illin/ConvertX", + "website": "https://github.com/C4illin/ConvertX", + "exposable": true, + "force_expose": false, + "https": true, + "supported_architectures": ["arm64", "amd64"], + "form_fields": [ + { + "type": "random", + "label": "JWT Secret (otomatik)", + "hint": "Oturum imzalama anahtari, kurulumda otomatik uretilir. Degistirmene gerek yok.", + "required": true, + "env_variable": "JWT_SECRET", + "encoding": "hex", + "min": 32 + }, + { + "type": "boolean", + "label": "Yeni hesap kaydina izin ver", + "hint": "GUVENLIK UYARISI: Public internete actiysan bunu SADECE ilk hesabini olusturana kadar acik tut, sonra tekrar kapat. Acik kalirsa herkes hesap acip sunucunun islem gucunu kullanabilir.", + "required": false, + "default": false, + "env_variable": "ACCOUNT_REGISTRATION" + } + ] +} diff --git a/apps/convertx/docker-compose.yml b/apps/convertx/docker-compose.yml new file mode 100644 index 0000000..3e3b228 --- /dev/null +++ b/apps/convertx/docker-compose.yml @@ -0,0 +1,24 @@ +services: + convertx: + image: ghcr.io/c4illin/convertx + restart: unless-stopped + environment: + # JWT oturum imzalama anahtari - config.json'daki "random" alaniyla + # kurulumda otomatik uretilir. + - JWT_SECRET=${JWT_SECRET} + # Public'e acacagin icin bunlar guvenlik amacli sabit tutuluyor: + # - Kimliksiz (login'siz) hic kimse dosya donusturemesin + # - HTTPS uzerinden geldigimiz icin HTTP_ALLOWED'a gerek yok + - ALLOW_UNAUTHENTICATED=false + - HTTP_ALLOWED=false + # Ilk kurulumda bir kez true yapip kendi hesabini olustur, sonra + # tekrar false'a cekmen onerilir (asagida config.json'da form alani var). + - ACCOUNT_REGISTRATION=${ACCOUNT_REGISTRATION:-false} + volumes: + - ${APP_DATA_DIR}/data:/app/data + x-runtipi: + is_main: true + internal_port: 3000 + +x-runtipi: + schema_version: 2 diff --git a/apps/convertx/metadata/description.md b/apps/convertx/metadata/description.md new file mode 100644 index 0000000..ecbffde --- /dev/null +++ b/apps/convertx/metadata/description.md @@ -0,0 +1,25 @@ +# ConvertX + +ConvertX, FFmpeg, ImageMagick, Pandoc ve Calibre motorlarini bir araya +getiren self-hosted bir dosya donusturucudur. 1000'den fazla format +arasinda donusum yapabilirsin: mp4 <-> avi <-> mkv, png <-> jpg <-> webp, +docx <-> pdf, epub ve daha fazlasi. + +## Public internete acarken ONEMLI guvenlik notlari + +Bu uygulama sunucunun CPU'sunu kullanarak dosya donusturuyor. Internete +acik ve korumasiz birakilirsa herkes hesap acip sunucunun kaynaklarini +tuketebilir. Bu yuzden: + +1. Kurulum tamamlandiktan sonra **"Yeni hesap kaydina izin ver"** ayarini + GECICI olarak ac, kendi hesabini olustur, sonra tekrar KAPAT. +2. `ALLOW_UNAUTHENTICATED` degeri kasitli olarak `false` sabitlenmis + durumda - boylece giris yapmayan kimse dosya donusturemiyor. +3. Hesabini olusturduktan sonra kayit kapaliyken bile sen giris yapmaya + devam edebilirsin, sadece yeni hesap acilamaz. + +## Kullanim + +Kurulumdan sonra siteye giris yap, "Create account" ile ilk hesabini +olustur (sadece kayit acikken gorunur), sonra dosyalarini surukle-birak +ile yukleyip cikti formatini secerek donustur. diff --git a/apps/convertx/metadata/logo.jpg b/apps/convertx/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8064ea59a2e7514cef71f39ae04200751372df63 GIT binary patch literal 23386 zcmeFZcU%+gx;7dFq=P8EMFm6!L_wOA*k~e#B1AxljV>a+g+xI>LK6^BS`<`JN~B8- zy$jNtl+Zf~B?MA9&33eZIB!`TjiP?-?dxW}K(o<+`qWI2<{g1|7SlYoH5a zU;u#_fPbLFanKFW5r#k8pZ$?P8x!N7Ju?#%BhyjlqeuVNSlC#PvaqonJ<7_#%Eta@ z1CBU3*g5}v_;Zv0xbz4!BO^0A%TboUo$_z(4(mX?tVcjcK#UBhK}UEQ7z3-A~mzzLWn~prHT5euZtCdj=^NZK zyK8O%yJunub+QF$g9w>@YfOO_=LBKNy+ctr(|Y*`urt3=j*qk z;*!#`@*fqI4UJ9BEv;?s9ew=+gG0k3qht7)*}3_J#iivH;@0-gE@_XvfAFVY3_w5s zzWvjF@dEui@@EcM{`8CCh%e9>d6}3`T{?RFnhDE8_Y(DmV|l8zrV`w1{#*C=X<9sch1J>6CPPM%Vfq(YSpU#T7T5AvWV z{NggP8SB?-T~Q^xZC`S+Uev?=)sr_^A+XOdJa>ILyr%uit)q9i6WB%aU(lvhEA&A`*FGxF%<2nRQ z$4ni9UgujJ&9;bDK{&jG{?3+JwL2)D4v^h}>i3q!@+=dVMYt1P?VPv~xz_puYW-4$ z4LP7E@yJhuDY%?NP$1zD6zox}0_zLI%p8K&q1{(xcRaGHi;D-I&iC(f+*>TqP>Jz7 z6Q!shb+Mzv?_}^bmVB@YeGh*KVls?Q-2He6N8=Y@lp%d5)$4?$xBeb!Hx%b)eA`uKPI%rX}Eb>FihE(P56!<@;_`r1M5r|!Zd zroCW6GuYAa+3;88ou1Q%sUsG1jbdYF@;&c|xsNM8VZGXI2@?iQr@=V<9sILx4YOAS zimtgcMT-%PgkjMG_{6tctS5tcZZ#Oc^|jDS5z14Mwv8I75qaWeqGRyGM28Rbf3_Jo zIQZvG>SQmIilFYAkz&Vg2s^}$;LY!P7)XIwtQblXN5%Qq;p~T?M?GSG*!DsC$@_<( zhxb&5DHj+gZ)HDz>^2d8{+``dM`xG!j%wrP%R>;Sws1WQRZ@blOz^pfvPMo*xel7i zep|>+m2=+AnffzSSa}f2W*Sh#yKNcHXE$k#6Qj{E%dAa;iH6Bx^F&U*H)#6!l5c#WI~amWX3uQxIvq%-)sN) zh&3&9tk=RJ>hZkOrJ5~s133e!Cv)4@UM4ndQhBjQyw95_UmkbsG0sGvd&6g<1NzU6 zKXrzO#ZRxf7D|=2U~us8e2x?6kKe(-*4DeQRmpzUeWlQ)}EU&ou!M;Ti0lQ)|nBZr`wso>KI#(jBN z!+Arx>|@6E>1NOG%Cm_UjTgU~D(6agnLyIv@6nVO-YNgM`GB0N+;BN9@FpbVd_ovo46xv2|XFidU7Xcb#qFDDo^$$9zO#WCSUK^A5)IH z-!3pZ$Y0KE3FFREpT5|wzjOzQB&Soj{K9Wd?&r#&m1yh*E{6W=^DH z3(WZqwbt_Wjs@{@Zb3m5oneZ>btpBsP;5UONV;D0iD7gA4`h>;DEXy0YS`Fmb$*qAsq zcf{mgCSIw{#72jIx$onhq)xN#v`)>|1rKMB5>%pNZ4ezL%gkqDEur>rI01%;SyZ?- z3pqBs;Qg!{m$ftR7sQvuTkQh35{h(A^-IGv^xK5g#bDhKA=IOuV`N*#eCmaYilKZ# z_f+V+la-<7N)`HbsZy#P-$WA`;PKjDGmCPsr<;Ep*!5Uj1Sc8pneL$yS8&q-x#0ip zQrl37gcnaW;v#)~Ppkyo^$Dnsi#uBCA~9-C_;~xpu`{641z@%Nq37?o%qv7e7^v<9 zH)F_n62`G_zQQq2+3)Js;_P$IiZiM$NQ)KovLuem>W&eozF{w9WTN{~4y6)p5lqLy zfi?~k*KDH0-yK-5!)MI!KWVnb1O?JvqF%F{%j8*?bU_`sd}fm2qcgP@V^ft}QKxRi zon!XUWu%S=!bkT=T8E%mumr*~eCVF0x*X(s^mBuQ1a3&B5N&C7X=U@{D_jla2RUsM z&3|U;LHd-Xmu))DXMH{u4`=m**BxAU)aLz_UqZQAzm=cGQ4<_G*_vCy{-OAIt5|~7 zT@zchfvn{Aez#e|+w}1bzzUc``An_?E8*X37K1ykl1(Cr6y2K7*0y6tu_{9w%<-!A zoQip@YA3-t{Pt*7k!KfHJ?GtG!G#-GJXEzA&hfBfU`?uGf5-8o(*=3{!svI>U#>RA zq`r0SrYgm9VtYG?JYy$F2F1kr`Kg#%iB9nhtdy(tP>Qh}Y->)uzKF?`w@NCwVBBEL zP=luEehMgKeuWZ>sj7#G=UQ0PH20M0CKg;IK z%YJi>=~%#B??sGXiu2OH>lOHSS=Op37Y;!UswB4v`0O1s&qB6_ zE59CsU;|V#FQ#a7t?CfOIyG7=jkwj1o3U$3u}HjvYQ?zAeK-Vl+OA~N;AY#?dYg$$ z`0qn|3rJMceVuiM&;~7)x5;qn`H9_e*N(H9RXySCXER^?e{GtPq(oXu9{s!}E|PkR z>A7DFE8R}&yz|*C2C)pL7o4&fyJspzh=~99G=e6CJx%+Jvd@K}liYwzjP;tBgk&(} zy#ad)`fQz^%*&IE?2Dt;(Rpe2(o`WhuAV~tDV=v&w92G4-}npKV+iM3jHgN3D!GRxVc8z)0QJ| z-k{HAhy_p63@V;T(x&7RR>+4Si@|1O2j<8j2=CSZIaAd@6h{=2;2;d%H1 zGdqakjfYQB6oQhxc4f1{7>84cBWjwYR~k&`Xu+E({tC9WRsn#W1jsCY{GS;Ae{&5B z8aae2-lWO|Tq6R>=w*nKZAt6+qZfFrYeQVaOG-P8qx{XSVB96vthp7M7#3LGPq8mi zBUZ0)LI^b_CzMA-u9cqKOE)D>wwER^V)VMKF_-E){omPg+VJfAgWvDnmrpMlVz267 z!_msAwHvK3dv*91!HEA|;N$P5%8*@hsg}g%?BJaU1V+Pi!lp!S)s;P}_&dB_SD*Pk zOj5nTqqdipL_elOD98VXjfLjLtzH>$|Lq(pdGXTAAI$k2t?unR)ydES z`6t0MY$EE@DT-LpuZ^nd-t_L1P};SB(sxhr z)&G7TO)Wy%EyzsYujh#mE!T(%sH;M58u6}?G0j_4#6|z$kwqU8TA4d1z>7vD-h}J)+ zGofV+xG(fS_1q-vNHHExl}4&1&m6@%R5o639YwTl6-{2;cdxiro>bu(EPSsia2O4& zB}O{<8leXtmVl4_zAyM_)PA6mPwrXT(FD(vjq8w;n$(;u8R3FFY3+dIK*@z4Sr`4} zsz#eBgO~Tc4?zm=hk(Ro6`b^Mhxh-^SpLcPU^V)09DwO&duAr19cbfP4jr*{YS%by zRoLEbf93+r#ZcY$^GUlKHyEP4l$@euTCbyg*P;rIUYr77a&R2O_|yVpqW)*DYry*KV# z8}%&wq|{^koRqD{Owg?5sb1aKxVGI;wQmJwCgoo1K4UGiAmILP+)VWW`Iq`8+; z88eq8Sn(q;WrPjqmA%QD%8VA+n+5-B+$eryH=$2=%@D7yjexS%`)KGL{H=&n~;yI=e?b!9$XxWj_8(9cH(c1I0QLBPu!Tzzi{#XvMPI7N}Ay?JKI)v z-9}y%lz}VYvXZ7U%wYou+17?APFF92(w0A)LM8y}jbUn|f?&gEVjHm~Q-PQ@}%Q+1LVKm>?%Sk*!l=$&IxtgTe@wndQf2!-M1J9;&$W6U56-loE$jWSBD1 zw5Bk}XAcb{{gd?PjCQM<**pC2y~-6EZx^=v=s1vNs93_m;4m( z-n(bJ(Ubkt3&MfI|2zZ{OnDAeA=IiJ6x}e3E(Y|9`Q#xe%M(bXae9ZKxk}nVW(A~_ zsFgfRcL3POV-)E_5GGL@NdLB207t8iqqAQ-1nDjwf|8N3hoE-vX$(J-k9wVaipXe6 zwkDc2o>&?q#a)av?qBqJEXvRMNl^f1nkS?fpT~OgjmrTP8xEN+fqeI+Dr|=02)%Hw z%W$O@3GSlDIpgE4@0E?@J-UB@1N1%m6gt(~!a+Bx!9zSPo`yJ~g4E^?<$?K#D2}M2)Srb15aagy8 zkiL^KS#E^IFa;Gq+o2gqvhhFy2Ewwb$HF8LX7dA5^$=d5Joni1oN;cuk&NpG@?~S1 zsG(AQkc03!9YefHkJPuHHhX3T7DEVcwF z>M`kmP9Ke4;J+ShpasHCj8O-G^XKT3@KGOmiXc^f$lcRh%#*yeHF@XpYy8ajwvEQ8 z@u=cLf6kfm#s#4+BXiczds?;IUEOMi;ado%Lgn*!`|bQz4irK*x2hl)UY~pu7$5?S zf8+MC|9kvF*aXxw9tHs3L5QcvTL`~5Vw(h}s-rP-30DhSMnrXweT)=Ks6t&sA9Pgr zlgbEpYZb}oatvI=V%@XaQr?~uLw|VPC>L7peMBbiJF8SqOMuv=i;J1mQmtBvmLNmr zY?+dp;U!@Cjba3WNHGg8_^-$t=0Z^?qv*%oVkAWRk;8NT0r3-?TYC;|X4=1>1Z^rj z3v^IZtIugoG4Q?AWDz6rYNgZh3w_>mttX7m4+J@IorvlyThS*8(Ef*EvulyBCm)1# zxz}|s{vJJf{9Z!4a=8xw#;5oq$g!{L<~fV<m@W* zXqjQ4sHoaack8AX=QGa}z5z0x?H$NP5~M1d=pBTc#`rf>%g{2D6a?}OGwE*h;cfNU zm+<1v`a{rYaorn)I{DIcq?X|ASBz(0D#;JLt50&``6(Ap=`v_#1c5ZJoW*9iwohyz ztL~&^HeDI|O#X|3q<4pY6zjtk)>UZEl_PO<{DEm7 zQ%Jq? zPjqAJ37z`Q{sEGQ++=~_JKbvUm_D1~{rutgwDTsm<`iM%pe;A85P4)7B2+CqU+;OI zmTKFVWb`u|{z2lYOoi=@QxJb~DAOA)i`rZ6Z>47Cdnvo@JB61YTO?FJDZnJKvobx1 z3K;;jhOcCR7-4=v3+Y)aCMM7Yu#GjM9R!)EjSTC1_*mX$-$e!aY_apIin?n1zB%Bk zcJc}?3p1uP4Sor6>In&$s)xTWOWmQ_4`lv69U}c{_FaKwkDeYw_~T&iYd|P~KuW-M zSaJGKl#p^y@F9pd50MYmsk$U=48E`;xvi)9WLNKcp2qa_bTCW5-4C1_G#-AOYCU2Ana`$>%DEmt%yF0)hE|s&1lhwAiG#$7 zv0jDODwE{TG*Zv0yWr}Lkf=HT=)}Z@&;H!$*;WQx%}u#t$F7HF=sgZKH))r80}}Uy zSHcN~*pX*FBt-E=APq946W_U4euZhiyBbL`$Bd=QebB8A>vH`a$ z9Plm^tg+M0@4=CeWF==eOPnH>M|krHk&9s%<3VNX_6xhBtH~2m+xpGvBYV;j%4-;c zF??LM2~vh#X9yx5u}GO}tn^t`U~}?F3(DwHJ!r8FwuE*srrE)yP7jB{1|M9+S$xJe z0Vqt8(0#tg)-$$Lm6GEG*52CR+1dx(r%h|;Kb+{l1mySeGd4%J8zvP*(tXU>m}|{skAj57;6>N&JDa;2 z#jTSqYVBLjgl~HB&$MF4p9^8~r@s!-pI~~hGk`# zvd6&M(m0{Ix-a)Dqfp&3ZU2pG3HRyUUFe$dCno|`eMosJpXlqEpX&d466rV_rlQmG z{G#2PInMOoi;Utz_qJhrFPjEyVvJ13s}yRmeTx+Uv$F+pt9J{71;v2@W*+y(WPU0)2A)51we5HFU5|!p63zwy9U+*apSZ@Jmj|)ymu8IA zxE{Ckm6pY9$^1N;%oJ)MJm+65duh!===JLTA6ZvspL8jIBYYXd;p7+C`LT`rnp&7# zux9JY=hwp|T|F@bQ|S11BkucNgWZq5_;F)mZ8cUf?6QB1`K88*E{2}B@5P?myf%4R zkxW>e0XIQKsrQIqvWO>UAQ1(n(Jtl{N`R}6f98Lmj{fj~S;+iP83ru-W#^>iR7M=N z2R(z7jWMR@hZW}zmjngYb}mpL*@qw}1+qNPdIYg!WA+X~^>sg<6ne%&gNIA|0-B`Y z*Z6Z{6Z{r3x(Po|PH483AtvP`3bJX6va~clSxLjuhON20puAsR&wUtD>x51aY*6H4eG@^ zJc%k$29F}}2CUz0kEaj!p8Wu@j?+L;siy|e-bs}bpiSeESTXXsOG1UX$}<$`o%dzw zTen{Jom2b)Iu|Q792e2?v?2$WK;!x4@l4A!{`0$*sVVq38tgX$0PV0!r0pMr2|5QP z5e>8-SU@2LL=cnverS>f0UBYY0pTAj&=2*v>5I-HXUZ8cO2?%=me!{Y0W`9>RRfoq zVGVj=Y=J*%Y=({TQ{i`Jn|sdzs$Y*ugl^}uYfWeM{u4%R@Vm6=+H)?}rCMhu<_TI8 zO=-VJbL6Fypcb#~etA-A8ebmkiB5T_p0%D;IYsU1^#f~@_)*2HI3GCU8U=CSe}Kul zYog=FvVw;T1OD+5#kOle zT_Iq56RY0bEBt)3m1@PD%$z+en#y(??Lj?RwoaI?Ab!#!RltP=0JJb)GSGhx3cet6 zo~+aY%Nu@f-THbb->7I)fQ3WshtrAgr*%Ng_sN258Wbrqmh_WM`%FFai#i^p3>~8y z=IXu|5MXWWLi$aPvcA~$6`nq>T_l7y`?&7*k$gt>Yzw|v^@V%&rrlyt%2wdMw{|fw zj}plGDMGs6XVg~Jf(hDYrdUHsDfsj7t7!$*nr_g z@PDRi5-vmwq-QOaT^e&5GUiD-8+SctS0*anUn<@}YN!TLCd(^l195NLN>NvV zi)ktcw(ljwlXd2R3HQwS0h=GD3d)eS=mWKoLR7(Yac*1+ zv;NeU{Rb8pmFZ81pt7Mv3O|D32a)@|J7>nl;a5qv#|jg;C^Vc_=ebp}Qy~(~=u<7! z*!p#cdxMA@xf3o28(GTpyStqL5%Rmu)?nU8ZllZJ9#G|X&(uU=*?JUQ<&!3}7t`D^ zLAJ4^AeK#oz|E4tfZAHy&(3EvYhO^`{pZr9eG2K|m)iwRb$ri>PjQif8l&rW*Y9j? zpRRm!DT;w{F=MrU5v&Ls#gv_i%U*#qcpG+(2W>g+sSFE5SI1tsp?K3eq^DgnN-Q>2 z>#F4Jl`Z$UQkOl5DgONA@L3bOrSc)D9QhG2jB`8nf915`Pw5>#zDZyZLW_Af?@g7S z`{_@GiP91aFx~pKj*hxLCf<5%MDAv62xd#a8bEK4CSvIcpM9obo1$CV8c_>FN7FPq z0AdEU;Pn=eG#nNg{&M@Ht&LMmt3YNHl!>@Pn6uvHLcz-V^NgbwoaXQKAA%$v!h1Ix z-54Cf>~x7G6qlwfOX3$Y%AmY|%}i|HxTWx`_NUNxt#)N{DqzQMWGBHU)cAIT;>37_ zD?)>LviSKYuZwk^Cy*!F*{HI6DzzxJuK{u4cBpFFe{)Sl(AVw3H-iK7v3(9YhZC`K z7O${okmCn8sNHg-x_zt9{L<1G`AEbi7&3ZJ@NLkSy?n=h?{6&}xoX8?Pdunxw{O=r zxDD>WRX^@SDE7$yj5D+Xl%s3ltm^ACiLM0&oFZIN;dD(e^2qB`j2|@aEVMFDjMw(V?Pn}y9;JW_?=>LHFf3$ok6S=<`%#DD5@!PAv z(lzFT&6?8l{W4`;CLx^lprf&H&P$WGzD+qp)GzhG;U6u2Lp^oz{! zg=*4AO?7=VC4fBJ_xRaUY@#lKVX^c1jgO1-Pft|b?1?1M(t*3+L~n)*D3i11^E-K$e*^S??bM4LsVF%bxjul0d{1d!h&lh*nY z>UeL?cv)`t#FHVvMfUF_`SIVD2{pJj+HmOh$l^VoAUa9Ju&1OJmEP%PqVpVc+XE$r z{Zijf92TF9I7xscowH<>p%pbiR&JKUCKP${3oVsP^?* zp#GPHE!6M~kO=8!De=6?v^%`1|TYzSbqBG6u1-;DKeGn`sEZwCamN= z_;f?P(Atd{)iT41jScrYW6c1x?CM9>{@^Gdy=kE+ou}sh7T-4iL&!3D{hzpEhL=RE z?rjsY&5R8MS{ff1vBS|e9W2zT8T0EO@=fg#KqsfpVl~7{Been7{bk|`VQq#^IRyRT zpX-9!{(4W?QbzPACpx%K-b?)SRC`GgfU@tECyk1nHNRgdH4RcUP~IPfXC*E@Kn{2A zYM+QsEoJTpnA`E|00z2B{_9d^+!3X7Ef7k4F(o{)nvT78C7Ud*_64Z$bwLvx9iaQo zkq=Sz6=jZlIKj;hYH#z0mh91(4^Vor><+2cTFJM?aDE^BgK(Em%_m`F4xp3laaVyk zd~xs{+X*47CAVzf_Z!Az8vW*)d;)Age!caAwveKqc^#Q?W0p1x|C&e!TmZ`vcumjx zd;F@x#kXZ-cl#rYFMb9g45)?su#br?uT7RL(oS;GoK0E7hIt29|QspOPN+(+k1=_i9F{5(R^eW%V2vS2vx~RjWYcU@esF5o(=NIhvrk< zevvkW@Yiw(7(U1%kjwCPRm@5QX_VB?)cgI3x8z4o29~k!P59Y}%xSu9c5Z@wX%Pb9 z&PTFRp74gxFFrnaoLSvUQX;p`y2T!Xig`ki3W%G8SCtov^OxC_*YnW)b|(`Bc?&!W zJNRzB*b=y^E+o^RJ0~s3rdAui!_WS!$t3!ot5nKP0Dycbx~LxMa_f1Y z?6%uax`oXV^x1;`MPUEGD5t+4;~=%tP9msqx}?hicbwbYn5B!a1*yD{TZb}H?eGACB^cKTS+SvenE8;B0mfdYtIoVL5YZ36m+t6PPf4}RWpEy0) z?HHV{+@{>Fs9GtP_KN!YV)T<>zbBmWlAO7++(4lu>#A)S%Q^yQHccMYcsNDIk@{`{ z3?bw6UvI?I4<@T#IZ)e$MpizAT>kE8nnTjXu^fVK@E@SyaX5mTL!=}SE1jSseisaU zfCIAZx;`5|WpabRb@)W#0VBM?d}}|YOwrbd8vEPtd?tpw&n7LIetT*KSdRXSgP}+* zRDIpSld`EYnXp}m0`CMuy@a90MgjX090%{lJ#^VR1kt(A5cs}+qbia=GTr=Cb`X>7 zMaJJMQMw5c-$qR-FWJSLv?yp`WLgH&??~hfkGiAK@UQzAAfp%nhyMdH{}nI({WwSm zFognI=mzR3DyBV$jJxAG4QDqHpNf!vaD7tSlOK(-WR)iNDL=br*VA(dVngzi$7g+; z(nax*#{5&*(tMwN`KPX}jP5IIs8IfEKF`qK45nc_%#_pgE^RhioHi4{Trg7waur5q zw@Y0OJI4;9w_h&aR~>l4cibm4b8a20ajBVRn=FTvA^T%&8q|46WvXL?@XBml>N0q6 z-)Uec)y2g{)^TlZz3=R!t8qHVneQ53F>ya`$^5Uj>1)) zY^Ovkn8A#G{5!(73K`lh*7-G%X>dHT<;Je_6#PR?JH+278D)S(X1@en_8K_jpUwz^ zix^A4wTZ^9J*hne^@U?=U8WV#!$|?L&EVrJB0&S5<2~3(113V7u#|3kN746bpae6f zv@wQkLaG+P3_0VZ_uu_lQ`t)o|B~e~z!3-lh{x;T;S_;2)K0qWbO0rgWIMRaT5SM1O z;PsQz{na*jN-;A%F^FqEYIR6G6VPcx&MMQy5ZvVaj|fk)79JBNA!=)OX#_BT^ElCedvUo9F8M zwT>~XZSxIzJ2ynDsy~gXKFVJEI5JEET@8RI{P>o2@mehTbnG9oh#ih^qvdFySsK?g zn;AcOS=8kZ{xyfvaj~w$Y-qSJ4=ux2c1)X!}?!ssB z-Y^*+J;CdDopW1m{RICMjG~IqxP{ls4^(r^8i}}SSoA48DH(YBOpu4Ex6s0D=j4`} zmX1AaC6+1({)6{lVQ#vOE8%^j({J2wk@Re~Wo)t2-<+7T6p=6uujW zbrO^?nn;T9c6Yf@H!h`bnfSdfB$%O|3AVWFKeCty`w9rtN52kZbZ2T;4?*w#NisPE z`Ce8`nhI4txH*PRmrg2|Np|kvaPhNM8+~4}&x`pf`9U66>oT{p*E0fc0^1XPaCmsp zGs?46{wd7DV~2z@Kdaok5!6LV(JNxa{?KH3F9bjd_IejNN4tqaTH*D@D}W=Z@!Wcz z`4{Yj9fXii!q;t%mQMrBtS-^^6Z1l(R7!cM1?&)H=_HBzREOKR)o}GnoJK|@JTY+) z!AowQbsGgr-D^XMvG|3Lq#*cJoOS9W&mxoFndeusK0bLkaSy%NY5L2qx429jb4EbBG|Ydvx=VPi?uMpwMN%;=<(7v(eK&$0w@ zVYbzl`SXooM{ADOUN?Cw)jt9L#pm3Qy`_Avs^!-5-fbWi(G8EL{{|N(H*Su*OanS5 z7u9O@@i!}_`(!t`{tbg{o5#YfqM6T+R5~mONpgN`Bw$IeXz56KWalC1I96K#@sLnm z>67K$RDXfvS|GQ+<#d8jyhvpCJv$nox>fF}-%{h%P4C7S8-e8VR;@|4LN4E`cBPwv1bSIa6+IP87BUJ_IrIs#J z7kc49foe%I^%!_o=GDfAGHx`XRmE1e-`}ys_1Tl+0kdAF@MA`F;w5iN&FUQdHKq`? z?m)<#U#A8EbaO+!nR=y&Sig0ecT=yd?o^1#0sFl?Er93(Cp`Ah99Kv%UuyRsTivvh zu+zC$-KT7G1ukjaf8it`r~N8QJ9vQZ{e={xUMJq28E=$e9P&QLqrY~!!u~P&bjswi z#G_YpYe`>}`8QBpsOc0`Ijq@IQbL55f-rF9`}AnhwoK&7LsU&_v4kE{DPt6yt9=9r z|Fsh80~@CXAx@B}q$}oFt}}7?vp<^~xmO(Co1b>eyd|6QMTyIBCZ5^@XK5Vm*7|(w zRsKY-Ld_^R-ReR_zF)FM`7ce4Pd3hid-1RHG!zQO`+ejQOA{w$p*MQ9wfRLCQR(Nxl%{v@6d z2m}a+;5if#&+}8 z&J1`*Ef@nME12!S0SteMr~QxRa~Ds$)yIk>f8qFdpdlEpovD(QgY}jAXWTy5YiylZ zDTSFweY6sxwu!VO^e#v-P)lm(791c`4-F@vGM9b!E32OzFVEiBxKPAH=FWBJBgU6yu|#IKVpwNSv`K(CnsTH@Vp4}oXPp>`B92T zt&3ta#W^jG44dg0{h@S<{<9&-xrjCoq?IpPGj{`V@k@VllJIe6f86?GiXmB&WIz_q zqdF6tUiLL8DBSLEdI>kKd45x6d86q`ns`pZNJGkw(_+||U`56I$1%$CQZaSsbA+W5 ze!=j=RDMs=N-C*=yfDTRysPVW#P61+JVHBX#Bjej!tM2Db@bPaxEwX+5tuy(JJCFk zWR1~ks`#yVyQUk`loV$hL=#-J8`$5RQoYIP`H1`E*l(#54z{%}siPI_p9qB? z=zKct=$gc<>-WcsWsjO(V>uZ!@D?`sDKjs&K3jbtH7$L75T``yq_go-{IGzxaG>*- zH_1ORnC&?_E@c(cbqJ~+lnWD(?e@19lM2VAx`_F|;KAnZx6x8@j$m;*VCcdn&}caK zM%mP|;Hl4LzNaaw9qs$IRd;TwiJOdYit&!WY}QnE!G&(p9extE^~6>|1A?2U z^56?K;6;0s7N5m%6A()k$k5puYdki##L0{1aI-eP-=z4hr`YS~&jS=QK8AC$N}fbF zW4{?Gdm&Gp?KtipUwlo6&rIsCtnGH}SdS&WmCTX9Z-pJTuiTQyk88K2dbQUo&k1xr zx}CG~vAD%$=G#FCiA-b}t(N@Y2U|<69sg?RySV>ubgs4d*>6t_M7^!0J6sciv$ar! z+qi%OF(7+S=JulJHY-QJOlp}vP=6s5aJDI!$Q2}hGn_d+Y3`P>|5V2 zo{MJWd||Br_z|~z@yX-N&y}Uq=NHob1wLj^7%(>-mwN-{47F7?OSF5~cJjqF@$(-q zSjvnv@?Td=yS!BMDTUH|a7o9WtkDD}B$4%Q5n-d+J+$mE^}cidsZ^Yza!}QGrKnjo z;nr(b=9@C!o?lxAGy*-wtf><3u4LRlz=V`0>r+iWWJOiR z2+WA3$t@>DO{;apD+;4LYWWcs#ULS(odZNLFEK#Xu1fyXRCS2i*#W3Pr;3a|K7w!wE>bL9}U!D&6 zb(Hg{Y**{FfaFwo^FGF@foiV#k!F3uSBFO2+1jXeDW=gfs{=^}vy4FK;Q`^txI(QxJxsb%T^z@$Zbj~^B$5602Cw-}X?tXIc$0CniMeC@Ed~2h zAhr1P=UuRWyor1cyaE0!FG*|M`M|RPI8p2m$h(GGz+8hh=zt#5KP3dgKd0*UR!=ed zDXvS!pPTIpD9F4>w0=Nn!^p*Rd#IcedNaF#9qpe6#{f_t7nLGY4-dBp+~u-glDvN< zLHrZr`)5+EH*Ye>dcHVn06GL+ohn|e!yG~WgtP2Gf&nvripW>eDdCN<)O+uJZvRup z^($2s_F5Hnbs!!kz>~5g;>eik*plhr;S{LwZc69g-6=Zrg~;A#bi=Qsy*hsipc!=d z=TT*_b(86-kR9_(o+%J(&s<>F(k6OX)$OpXJZ(=UpD2ZEIVWq6S}i zUEI3KH#`^gjA}$qm<3*|I_4dV1|Rc|P}t4)pc~d)UxCiV#a@MkUTydm!+)2djz1J` z{i?B*OXr%~@Bo!X>*va%<*VFI{dN9PRO-avBz&1Dev&Vhcbv2hB>s=dH2^Mgnb9tu z_Y-Y_y^g-T^+-$BL`{Fg!|&eIe9VnHkYvK^ZseuRqWoL@%Rdb5edb3F_U#pgQWPd5 zDZ_WEDUfV-*_l6aYaJ-~$O;c`tiGWEZ+ls|qleIhJDIW>G*Uqdoq+)Ae z(OQ!@v!7guF~YS`u`wQCJ2Q%Ia4*%Rcv&H%r+cC&8CcMy*q;r5N&b1_P_8(Blq>ZC zoTpK_CppWh@P?FP`9@Qpy@i*smdOm$^l>wBkn(J4{%nuHq~B&sKz5YdEA&D1T0)*_ zx80>vZt+@8oUd%YsfnGfV??)O+4Cw^)WN0mBW_=(oq7YCWe;|#fW72s0K5MOi^r3X zdju9~#v)`>8x-4xe*AK?v{0LUfQX2Q6ONdUUwGJhHAJ$4C-T_uML25ZYVes(_5 zRu-`HsQK-!aRHCIhIu~mR-eaAvubh@`Q4#p#i0H5jP6} z1lbS!gv`Id1mKwQMnkO}QST+hRg zBG~psNic+sHvq}*R7e&v10%#ntNQY^bRaIs=HjUzC*2Q0auF-{QmFLI!u;?o8!P9< ztmK8!Fmp2umq}~o63y%vjYQ@LLgQr`8s#YTF{A-5S~8(z@{Wg`;P)P2b_;HRrzPCk zWKqK^sQkbtB^~$UJxt%0R)obxPrY0MYG6@{%A*JsS|(B(A%0$)AK^&U3y-^lh?ca; zU`?eh4F-QFog7X!lZhNktKHtXh&(lfHssfVs8t~W*q8#zT9GA`H-HKEaOAVFSC6ed zi9fydjUVXbE(w^O*hQVyM+p?H-U1AJk3N17z+Ba<$%4E(Ur-|Y0!llmxHa#8=iJkN ztqw#`yis6pT97GC6k>lC+iHoLo`#NJzd3^8sTFBKRj0_)QPwlEEO6jXtH?=_hVT8Q zV76tc7;X%{ZXB6`h`*bcD?kZah@b63%iaO%0G}O#QuWq#9{H`#z#6fk2iJ%!O<0Mg zNpPX?&xO*j%`SrAb^SUKsw8od%C|`(k)!#N=qG7ks5)+97=JI_NTb?X5(wmYU^9tPCa%nYb1v2#PS8v6R(ll<@xQ{)tQFm3_a zi9iAmI}2z$Y_mW5k)qJAeup6QD1QANN28iI?xO|vjFPmRzH4v>lxc5C7@>; z$9yBq>b1q+@w-Yk^l6%Qg_jIV?PFW6v6~2a-`anK-f^@eJ997F>|?~=yW4xe&lZNp zD}3^zOm1#|H)fCl-lq4#s2~Rc$N|PZz*FQAK;9ghPduT!RqZ>gaW`p2eYPpZ=4E5E zQ_uPJrg&~`SG3;77P1+;pp7Q3+Ii-ibek(9;RNWfBD&hgq-lIu)~mfoI1F-~l3MM>I5((RhlLhGM$bg@*aX#1OX-u_@f9s%LNAqowtipO$VOMl$V!Be9rLy#2%L! zRjecd0v$J4Vnzy}>Wy*FG^WN?X9x1}xyyRNnisb$$yOtC953HU*E~R>O|yjSdB1To zRzZ|{ZTxOm3R!NK`z}AO?;+RL`i9=~>nFL_Ow|OEmP)J-#=isnz!FB{@9B;=oC&E& zUL^&Qb2AZ-$ZlU#Z605*v5vG?A3eY0m&Q{g`Zvryyu(4cfb5-QrsdYMF5yI|3>O8) z(nQ^!T3zkCXH&pb*7ukkS2g|2G*9gzygQV?Ija7KKtfH*N{|ANyF4PyELK5Nn&jr9 zy*#?pyIhbSyWD`LKVB-}S#vw^C!^}Mv+1WHwCjL4a0sG(q^ZGDki+0&a4^aR`_ihl z-c2O4mDEOEmoeGe(@qa~v9HRpBNYaUZtJcP&D|f%{HA{Mqx9K$M)Rz z%=ZyBtgmm?B}C<{{yGpxlv6yZHzHv~yYR+nZGRO<;`?3Z;zINdyLSw8)0{Ql`12lj=Yych zGu1USfOz4`ylFN}pIF^Hp!sO2NlqZ8^Ae2;x~5v?5{M0Zqx; zz}@>o!?>i5+|N*^G|(N;862bhq~0C({felO2WsMdstdH8_{z**O59;>1a#De$IhP6I4_7k zp0nmxgW(C~JQ9%99D-E$&j9w~4u0@=tNH6seh1ybT^^nlQY9(QeQsj({^#brD#oXA zLW*TV$DUtRI|(S^qHLd~9RLl9u-I~dYCr#b;%iX)EFjZ#I{ZO3&i;RJ1H=F6W?q^OhZ5*<-dN{738T-6CCP%O zYk<;c+BITqP{%ZV#Q7&;m*Pr&7(5PzhXg2Xq|A0y3`xUu??xT(t<#ee`@gC=_h_is zHI9!cw$h-4+^-cGl0-8|ti3xvAo+3n;pj(dw zSox|97KZsroqGX^gwbAOgzY$Dk1Wi&6WCZP(-Pa5u6xR=CT(D2Yxmwh*vXkHzO$RH z6!w6Mey~^(3pdx_TT+-(aroWnjvR*RR;u!#fyMgTWu4XmXxXP1ed_sH^Z>&*J+B|( zk9Dl}!j$YjntR=R3T}7#B6Z(Ex)N89>c~6R^=^9oxBRh9^S^jj(UxbPY-0&}s4ms- z9jEzmT(hDOVV!Q;9Tx;7cg4#*=X7Wm-J}pYr5xA9UWmx<-^Xne zUs+Z8#LUGRt`zkpmB$VWt6>=Dti=ow?_AFL)`Ym7YW&CC`rh;X)Y<#AF&3YRjrJb; z3+m))p0g9X^u6Y-PX}M+wiWR=Y&j;XxMSGGUE)&Dl$f_QLzdN+kb)=z_YudsY-7xe z!o<|49id4$Ud~%L!qgr@WT&v%M2_@=WtBMKlI25lS8YaZ6_cX6hht6M-}eP`Cxko(T+V)PM|FsiPDuOg0869n42aNDeBL~ z!Pik$v5`n{v9{_ZhNz&VU)bRTV6Dbj!3)+Wd20%Q1Uf1v%dxKXeB)9^gS3in^>7)-jw_FS4$~wa zu8;(s6SQS%@)>dyE8|I2m>iBh{gi_f|t1V@RG~!HdH{cq-R7s4i+m06q1v)v~ zF^3l5gy=M}08rgdSG?m_S$F&OpP4!52SFIF4Q%zV}+~$(xH873{Wqa23cm+Sp zU|4<@hclr52%n*AJ56nfvc9@#Z|mW)=bn3I*x9 zlXUFaV1~ha9!!;@*}I_L2=&K}z|L$T&3w<6>=&04N~baGbgxX(FAh(1GfMN^Q8O?3 zjkwI-Nke-1uT7kOMG1u8y}6U1jz*)Mjz&-K4I~3!zl;%L$q@MZHLqX)CetZ(9wmE! zbm?cDi3yytd_k{sSjL;r^m@8{?j}8C8svFYpvq|bLXI3zR?e3la&6o;z!dug3)S@>SCQ^Y8WVYQ`UovzODALG0G!wz|mS4J_u>DA@w@ zYR#FL2mY$GC|2Hy^qaH19{n%hxUQ7c42AnZ=x?(&@@o<^DRG0>JE%<=WaDQ%6YQc- z`w6Pi1Qp>%NiT^DmOo7Ha)(j-(m|@Dht;Q*Z)dsnbh!cjcBtYcK47SL@F_;4 zy-HPY^`W&>U9P2-pY$Q0Gws>j=MK#54Pw)tiEsQOSOf3?gb1|MUsYrwYaS zxu3-)I>)S0O}6Z^L|cdMyL^Q&t0UJ-UypE3zYLbOkj(*#VR~`E#otvwu0-_N&;2~&~}HljrSm~ z7}Vp+D!XB5)1N&-TA>AK zxKIQ%C-d!ynERAz#Tlr2--!yc3MTB>G5#0EuM}Jxk0j}-_1!(y%J&2XOla6o^MSY$ zU{VT-v?rG@8>TEk>YsA~7Ke6xxEvMF~+-a5sS*B}Q3_00E65TSdvQ$ZDqQocfd>i0T~uVdu(;kSDsGP^vo|sC`5o4vG72YO zo|59&I#Ak}k#^3L9qVscuPHniBp>#LLZ;8!L$8-AmR+2*8G8X*)=P%V+G|2xLIj(F}t+VKdk*Y{SI5RFVcQ0HzBTMtTmr)&V zqjU#_O4wRFd@OZ8pTBWYfL~`+syIEEfdxjdP!pYzRzLBG6x*$2Sg(C@q{{vi0=>eL zyw&Te_x-tu^&X*WYxV^JjaZa3Dz?vNB8};WlO<)Yc-tE;uu|po^PP&jk&$B`$}5s> z!&Og&74dE}VxQLYuzx>KNvQ2Z&cR2}_>F9p2IiSJT!V1eHE6R$v&@3cS+7c7u71TS z2>}m6ow!EV5Sr#*fqiaMWsroG!h~8B*NO45U6;DFRd|^DL!QE~#AZVW@1V;yLdHC% zyI^-I4&aiCiD)kw!#y0-pyQvzvc_Ea`=|Nky)xqb8}^(CC_KWpOUfL6oG7e`=$6}U zE`q5jnsMyRGUnzrk}I?V(%1ugzIU$tnK7F-uhXMC+tKPzN5Xy9OiDdkT(kl^Yi1w# zUn=A^Y~&QL?Ra~*7I+{M8hAunS?z>QH;|Tk;zRQr$?_7cyhLvfiNQR6xo# zRrL}uA>6J&7Z9fL?M;eHfZ7m86RG{;bx%KFY~v;||2O0(_bk}&0c__6udZZ3H$LCs6>R(aA*&p!{m`3`9HucH`wcBfV};n= z-HD)BzeNg-pYg3#XyIy<+~CS5O)H3NF5^etPWn4$&G%qD^@nn_ySj1CI=NWmtTR?nnpUrsBES1qEP>`1TCG*QMUqVt)#_XR@<7(&?ILAsaDo}_ex)#wEx z#(Cbu?1mH*&ZY++iDk%Z~grMbaFG%ae{j4Ymi0CiYaukoOaX@!u6 zgo3XIyU> literal 0 HcmV?d00001