From 56d7bcd4a94b6e7a733ce1fadac9522c444821e9 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 26 Apr 2025 22:53:07 +0200 Subject: [PATCH] New article about hathoris --- content/en/post/hathoris-release/index.md | 152 ++++++++++++++++++++++ content/en/post/hathoris-release/og.webp | Bin 0 -> 60112 bytes content/fr/post/hathoris-release/index.md | 151 +++++++++++++++++++++ 3 files changed, 303 insertions(+) create mode 100644 content/en/post/hathoris-release/index.md create mode 100644 content/en/post/hathoris-release/og.webp create mode 100644 content/fr/post/hathoris-release/index.md diff --git a/content/en/post/hathoris-release/index.md b/content/en/post/hathoris-release/index.md new file mode 100644 index 0000000..10d457b --- /dev/null +++ b/content/en/post/hathoris-release/index.md @@ -0,0 +1,152 @@ +--- +title: "Hathoris: Bringing Back the Simplicity of HiFi Systems in the Digital Age" +date: !!timestamp '2025-04-26 14:12:03' +image: /post/hathoris-release/og.webp +tags: +- audio +- container +- hosting +--- + +Remember when listening to music was as simple as pressing a single button? +Those days when you'd walk into a room, flip a switch on your amplifier, and instantly be surrounded by your favorite tunes? +There was something magical about that simplicity—no computers to boot up, no apps to navigate, no complex digital interfaces to wrestle with. + + + +## The Problem with Modern Audio Systems + +As our music collections went digital and streaming services became the norm, we gained incredible access to virtually unlimited music libraries. But something was lost along the way: simplicity. + +Today's typical listening experience involves multiple steps: + +1. Turn on your computer or grab your phone +1. Launch a specific application or web browser +1. Navigate to your preferred streaming service +1. Need to remember your credentials +1. Search for a playlist or album +1. Connect to the right output device +1. Finally start listening + +For those of us who grew up with traditional HiFi systems, this complexity can be frustrating. +What used to be a seamless, one-button experience has turned into a multi-step technical process that creates friction between us and the music we love. + + +## The Birth of Hathoris + +This frustration, combined with my passion for DIY audio projects, led me to create Hathoris—an open-source solution designed to bring back that "one-button simplicity" while embracing modern technology. + +Hathoris is a web interface and an API for controlling audio amplifiers running on Linux. +It bridges the gap between modern digital audio sources and the intuitive control we've been missing from traditional HiFi systems. + +![The Hathoris web interface provides intuitive control over your audio system](og.webp) + +## Key Features + +### Multiple Audio Sources + +Hathoris supports both physical and virtual audio sources: + +- Physical inputs like S/PDIF and analog line-in +- Virtual sources including web radio, streaming services, and local or remote media files + +This flexibility means you can connect traditional components alongside digital sources, all controlled through a single interface. + +### Advanced Sound Control + +Take full control of your audio experience with: + +- Master volume adjustment +- Stereo balance control +- Treble, bass, and surround settings (on supported hardware) +- Per-input volume control for perfect mixing + +All Alsa controls are displayed in the interface. + +### Network-Wide Control + +Share your HiFi system with everyone in your household: + +- Control your system from any device with a web browser +- or allow another device to activate a source (e.g. when Kodi starts up, why not directly select the source linked to it) +- No need for special apps + +### Media Player Integration + +Hathoris integrates with various media applications to display current track information and provide playback controls for: + +- AirPlay devices (via shairport-sync) +- MPRIS2-compatible applications (like Firefox, VLC) +- `mpv` and other media players + + +## The Technology Behind Hathoris + +Hathoris is built for performance and efficiency: + +- **Backend:** Written in Golang for speed and reliability when talking with the sound subsystem +- **Frontend:** SvelteKit for a fast and responsive, modern interface +- **Audio Stack:** Integrates with PulseAudio/pipewire-pulse for sophisticated audio routing and control + +For my personal setup, I use: + +- A Raspberry Pi Zero with a DigiAMP+ HAT +- A Voltastream AMP1 + + +## Getting Started with Hathoris + +I've made it as easy as possible to deploy Hathoris in your own environment: + +### Prebuilt Binaries + +Download ready-to-use binaries for: + +- Raspberry Pi (all models from 1 to 5, including Zero) +- Voltastream +- Common computer architectures (x86_64, ARM) + +### Docker Deployment + +For containerized environments, use the Docker image: + +``` +docker run -p 8080:8080 --device /dev/snd \ + -e PULSE_SERVER=unix:/run/pulse/native \ + -v ${XDG_RUNTIME_DIR}/pulse/native:/run/pulse/native \ + -v ~/.config/pulse/cookie:/root/.config/pulse/cookie \ + -v ~/.config/hathoris:/var/lib/hathoris \ + nemunaire/hathoris:1 +``` + + +## Future Development + +While Hathoris already fulfills my original vision of bringing back the simplicity of traditional HiFi systems, there's always room for improvement: + +- Integration with Subsonic API to play already made playlists +- In-browser configuration editor +- Support for additional hardware configurations + + +## Open Source Project + +As an open-source project, Hathoris thrives on community input and contributions. +Whether you're a seasoned developer or an audio enthusiast with ideas, your participation is welcome. + +You can find the project on [GitHub](https://github.com/nemunaire/hathoris) where you can: + +- Report bugs and request features +- Contribute code or documentation +- Share your setup and configurations + + +## Simplicity Doesn't Have to Be Sacrificed + +The digital revolution brought us amazing capabilities but often at the cost of simplicity. +With Hathoris, I wanted to prove that we can have the best of both worlds—the vast libraries and flexibility of digital audio alongside the intuitive, frictionless experience of traditional HiFi systems. + +Now, whether I'm at my desk or relaxing on the couch, I can start or change my music with ease—just like in the good old days, but with all the benefits of modern technology—you don't even have to get up to return the cassette in the player! + +If you're tired of the complexity of today's audio solutions and long for that "just press play" experience, give Hathoris a try. +Your ears—and your patience—will thank you. diff --git a/content/en/post/hathoris-release/og.webp b/content/en/post/hathoris-release/og.webp new file mode 100644 index 0000000000000000000000000000000000000000..57dfc1cddf87c5fca386f08c0a386e6cbe6656be GIT binary patch literal 60112 zcmb@t1yEee+69U`!QI{6-66QUySo$I-5r7j*Wd(qcXxLPElr0Uaq;0(ARu)yVFfh>P7N3!ARxq_FF#12cu*iA8HJDLKi>f( zFanT}0%cakp9|%Cs}sWC_); zQ9co3%c}z>NN_{5H?1X3W#E;W*5&^>ZFm8frc_9yx7xk${CLhx`0(t=J8^i6)%;pY#CJBNL>f05X#883OWeoM(=;&$rXuf(t3kIk3m1>=t4qH7mW<7W-9KI_`m z=YK zs{I_^Lf&5h#%~;L0!Tkk+j|jvi+aR4hrRCF^PBT4_iY6j0}kFr)*m1AhjPyVFYV)Z zHP`z40weG3-XPEQHs>>D$oES?-#bC=<$2dCz|5~6aR0<}6L*}u1^DK>_H)da zKR{nao(LZN&T|jCCj1-$x9?})5$?D4yE>kt-rC+Ip8amOS_SUjySw831ORkzW3NMR z1Xub1z{5MW@7nvPm!YSc$K3s&i!%A6VaTeVBBv8fbw${nvXed5RM3TyPEyt z0a5R;0KnT+OWdnKE`S?gDRAxU_lEo40N8s4z`q2tA+$?IFp-n?rzasB$^3tBrg4hE zUnAC(#R%_2PgjHuNREUD&_!Ik@ZX@YRc|Iz?Gz3;lk}Ts+37=cc^NCT7_-taqfk1e zaSu@Qi6Y%C%I+Cia;@j252YuQ^QlS<^{ZOsxy=s~wBKRi?~lG#>cxdZ1~{y*CT`la z%N&!cL^1!~FSS?(bmo%1BpPvxv?%G3Q1<8HvHv-iaCQFE`+ykfJ0YRf7gu#$YJO`^ zgDwuk_&S2Y?BcIj;b>WP4IW=n56KWvA3pAjHH9)~9X1?DIF$<#k`jj6m#n8%&GOts z;QM7yt8eQ|>0bN8oJy5BHnCXEhlZG2gSYRNWUo_vv30>SN^yu`2b?7zGn#-C8wbm2 z;|8QAIIsL5mh2T4d>fu!wmwx2ZUJWyD7PUF4T+dNP7SMvQ$$X&;6GVwY4_9>6IP8kW_k>Z|EM1cP@AvK)H8`awn6NEp6a%oo4mj?5wGEuhhYO3$J;&IRPy*l#yH0`7_a<2T>TrFY=k}|9W})lx!W^MhaXEyhqbbF1{BP1AqkpSSx#4e zBTX>7q}$iMZ3;K7ef`HyR-nF&G21unM3&rFDcP-TB<9)~du}cZloz&3{wAh9*kPOh z!lZOzN&9@8_bdZb9R4Fvz8(YG!_?u@1pc8Ea%qpnn*}fzQ4v`7uH=gRox2xVTCLc- zv@YSLdfV#~uXr%Q67LFE&^xM*%K(|d3qId2n;Qi~m77;x)M2}CM|}6jfJ-kRxKzo; zJUUQ`?8bGYg8@eMqK8)Hd5_E98QJc329weU#n(&tm532g%@^uCD@wzqwnKqJ$QanG zWlB_)rS?LuKFh_L-*n7TvQI)o*2e0Yra#4;<13@X1R8 znc(|=1^?a-!_2EU*|GKy4hx*gSXQyUb5779Rhv@V7>yNJmtdL-tbp&wzIGL`Bu zWum3O=wt^6j_x_9*1TxOXH>b}B`DDjg@_A{G-}8iaC@X`o>-y%C$h$aN2?;#8$!Wr zIlW(uzh_Vtv%!Y42-g#_Xnj8+F8uxay*NH{Ikgy1-B@| zaKI`%E!LK&IsiF17Cgn9pWi?5!7yJ9LZAh5MJ!;k2e35L!>jyh`ufl7{?f(2n(?sE z3V_~fZjgFoPc)nOQh%oD8%eQ)8rdnMv{yQF8e#7kOTo6UveXTA6fkr4MJ6GPj;zeS zO{Lt&)^iA+VcgK@DxSpYgoANh$+pF94c%_B)%mKY3<+e04K}Nmj()`4#i-Fn%5v4w zW0M0fjtQhptlipY2Q!V=odGoj@Ssj7iZ@lJ471dx(MgIA2I;jdOYP1O9j$WY1_R*; zmd#;!g0~*!hy4xox*9*qhc2{`0J-{>q>B+n!G^4*cY)FJAji1~njDahTZ^+knVH}7 zc8(FV`BXtF+PZvTwkHl?xclY6&1znhGA#|c2tU`XPzC%QE&m%s{?V>R<4|Hh$-u?Q z@)L4nqTxa9d1sj1*S{g{e_v}uP@aM}Emktf^RR>jMLf5M_hKC$jAVHo`_|acCijFN4^C{@l!PXXIS;JB;v;Lh$5Mb-tEIGjZZEL~NL7&!HYLfh{!3KJ4 zObp{eEDNTQOAtsI)r>!V9%>v|?>S1N5OH?A@o#Gzx z8f6h4k7o3QSt?jqB9 z-J+;>Nkvo(QX*2YxdZq@{bKnlt5@-k3b{Y8P45Fm(Yn&wu@=fav^#3B8uS zFibW4V?KW>4Bp3VoXV5OLgnLjE_y#Sd$7uF#2|1MjDKp7-n-?#-*UnMTKNM4*{?Mf zLeIs#T+V)l=V|zVORt%`K>s$9n%bv9PC|XhIzw2 zZ5~!=JY}!B)qM2s)P!m%%khIu(cg%T;RcI{tPr-W?F~ssqfS zfA1(wf0)_5IcRP(`w)Txvf!jPY9tlM=Iqe(hQB=FAqe%*Q}TB6p7Ifxxfy5*il-Q> zTU3y#pw6M4x~nP%R^SXyQQ4`(F*8yC!(phw0i+u*=pF&&&s3c1kACStQUVQ_)vPWO ziTg6k%)A{Va)|SHg8~qfiI9mSWe-__x^#W7i;zQzNqf-rK zwGAde_73qu*U*9NdBx6D=rk_BB_!E5^$%0nP;yZ5 ziWG|*1YJGBouSVFVHp(B8eFgP)2sX1xplf*)CG2yF)zuAtWM}{ylFu*ierkQPnXk# zv1l8yg*bycNWbzB6ERAGK76D48+BI@Lihm+;Pn?XrK|j*O0>!R|D?KTB&>&-$<=@B z6_x@4TvkCDEEt*}HF~ZOzvwz>(AzvVAwsGZ3*8X6Z8yn@3BYxu?O@nTP1s~RbUG!i zolX||31Lii`M4hHU<)-XA;Ao3tdoiarh^{L{{;1mBr>_x>u*`}&ouX!kO<%zl=v!Y z`1{H+eK2b&Q5gQS7m(#-EjLp!!fOAE@o&yllCs19{p`1I;2drtr7-O*38QZHPy|1OiwCHf$-Qp5jp-(GyD z$A2LW{}A(H8AT(P7R8WpW9g52p+bsMNj1o|)waKo_g|Odfl<>o%V??Wcw`qS1hV2F z{u_|0LjRQHd`vlzM}MY^Dq%**>5mYI*xxr*1+5BpPG);Qkr>*QbgPPc6@M8&Ul3s4 z7cw95d|Rp`a8wU{I4>$iVvbMZaad#1rq`Bctoj zU9%OtgEfu%#hWsn< zOeaudmFd=k4$TLp?(~u&iTm9W_Xqd5oHgQ~;Fs*S_z2Vg)S!Yc023i_I$R!A0aBrh zk5yO6`2W-D#@PJfRdr6+4D-*npbNuju+yY6fLu$d3x#`;LlnnaLs* zbh-@YJ9Mr27(+Z3590qOX&JTKeHj>Od%4^P$oEY&gPkrT|3~PJlknO50Bg#t*UR>n z`h8dIj9nrCrD$(T?G##X5E`G^On+3+Rdv7{w`va>(iP*f5!VcIbpLu+g;1{Y#;mFG zT+H~Dg8W3=`9VSvBfy#tbE1?a34VFPvwe!U>~usa0~KZw*_b(vJ;+rz*l)F)5Tiv? z9R88b6+UC42|)5)^s)Vt4cypBvLT$02+uWdX@mwkkhmBJ-s3BC&$Wj%E_E3bjE|X- z<_OnSP#)ssAU??p52H|gZtbZX0oM@z0Gg%+(0xxFCqIJhf?ETkh4=gGB2U*M`Ll3i zzJ-WuXJFq2t7VrAnC>r?FC+Q~9skYY#b6ukxNKwLN9QrX2}t{j)bGGnBR9Ht;p`eY{g#%qo!|5EtGA zpP!gJZhripN65)B{#e7m+Y%XG>$gnc7LuSAs_45^@$n=y`_)IUT(7Um5r*Vm(j;b* zkG_e_( zBhumvd@JOLMW8hkIk^n!u0s*kPP7@BK7~wY5$VR zp~1`4rf)5j40=(FvAWli-~Pii%>Tq-ZCElAv51cJ%ScN@Lmpe^c4Yl84fY@5^``>( z<;%ii_AC?9z^n*7{#GXv?!)bY`(wgT!B?T0W`<+-2XG~bwMnaQ^4huc)W!|$_~Pg% z(KLj42*Pk0B^ik(%<-HQHrPv_ZaEoP;P@rF`-C7q7N{V*`b26YkNgp!I)wvHWiHa? zU=i_}s6BTW<9evxvTCzv-|UY{*8VLQe^#&TtACYYHtU5F1_fu28 z#|?2ppCk$dQ@Da{QBDrnn-+n>4KKWgf_n4KoGNhJ1<_Xpjn@&*`N~`$WbCg(N$Og; z*^&)`>`Y|2`gb1O-#0dgC<^RNomo3>p7lNqrGlc&CN1`oxc6b`$pZ-4djaN71bYrK zu^nBbGiD23>>WD*v)bmU@y4=(E-o&yv65bgYE-3x-;B=B0e;f}xF1|aN7D55B*p@5 zAisIX)6zi4Hk>H$DIj1Je$_AeTXy`L9U9rT>->Y_&WsoXj0RF8NY(xnFTb%;0=E%V zT?)|q`ah?MfUrqlHW-t8I^GThntl=FDt&`?NG8z_&doo1x&zgK%wZF)e-kp} zBx&ACcH&~`67)X`*Q5U)2zC-cxUJI)WLf>;;%2HWRt8#2B4dL1OiQe897J4dZqYW< zpO>F*7MFLpB5yR_&LL*yy&_KpT{7e>`_KR`s&bD#%F8_WD$(4{Cf&^y&_e z!k!0x6ch-FzrE-eQ+@v6S;`Fl+OpmcmA}1U_Cqy*DEm?2<>9VU<%%HFp`+pErj(g8 ztKJ;7YyzER$z&IlMSTDB&pM)w+NjNsTf}t1kx4&l=sS2H)ds4wrY!kP_ZoRS;O_~^ zY*gms5b~-Ewq46~=RweIK73gkX;mM2e^IbZcRh|y#uxhk;a}#K7XK_#;s&XH9j~SS z&2&3QiH;yL&z$1K7tUj9EM(j5&Hq+kEd}L=`vq0T4tB=>QCTtEGb@Ngy>i?IPA9Lt zOa60`kt3j_(qA9bvbi6VE~l`xzo18V=ssDs{RLJmI(R^K_jj{{Y#(JHWxYN+ z4M5#e;=k1sDwM_OHDcm4C%4>a2Wy|v{QB6U9*2K|`9&+7gHx4+vC8Bh)pUdKd#>0s zX3PKj*1r$b^4dSly@uQ4Kbe#y?^F%#qD5-CJ<7~Fchiaw!C z!~P+jR}-=QGeKCW`Y4j_={&9AtAIO0hZpXt`4{MkkE zSgAYLdLnx)$hF8wDI2@4$hXP;ga!wUNRnFHU4o3L|8v`-(|J|}7rAet)Zr7!0KYC- zlpGquHS9Mn2>;Pgbs&rZMx>n(m6j+mc}Bce`kKc{-?md6AEuM?>!AYAUXRaXF?JB6 z`UV?s&=6>BS8=ZM)aRoWMsBn~wAX%XYlRmkK9kkLQWlg!!WjJPwu!*(WETgIx&94H zm})OAQics{*<=K~t)vSm!;%gWqB9Ci!!fJn*PR8Ne=L(OJ5a6IF;O7; zziShJ-B#c**YV5qh6_5A!{Ec94Nf;hZweR8g?*rrM(zB)g=f(d*1 z&wTXP{S&X!{{y-|5h#0&Z`5o>cCe+49ny!D|7Qt%Sf>8Fc=$Bp_UdEtA0G90qTOWw zw+Z{J17OUrA`W{s5jctsREP5! zYovUJNK)qW>{hsvsY6E+sQGH;&oI$Z02g4JqiMsmIWd8ln?WfluqSQmCRQTHgx)ZY z`d5VZVEx5B{wJXRGSzG$RgRNG{vK>oMi{7xAog)Q%C6hp;{x8Vj@j+*W%mm))1*he z6S+UEuPWEnWgH-S4|>cPBBz3!r4f=_P^BvLcuN_220vB>#(R{v6j}6Q%e+ z9n(+ELH@rz*ncr%bk46;J@hyJX6hgU`j>x-*9g^p_3_D(GL$8lRniR>6y5^gt zZDPA2>R{j!hp; zd|dbJvM(a9CX+=AySwutP_WWl@0N4BOrA&@(@C;I{=RG`1N4iigntxq)Lq1L6ff5;ab8+NgVdv0_esxLTD4gyNrUQ_m?5pnzhY|E_l~c>>HwJ z#R~5Vwr*qa(f9OBI%A-YiI#U^%(}q6_UXwFb%nlr&lb?15M~CAmVo?$NFz!y?(JH4 zZ{gtLkpV7JDuKm3?1B|^t8X2nq2l8X)*qrK&SF4#!LfsNv5I}4rIup|uPMrvA2ijG z=E@>fOLkeI1rhE{0Q}o%JG70o`CH*8lnTd8mf3~D?)Cne-GZw?=g(U9&gGr$Ej`R;uWTF}b>L_0-p9aCQTARKPgpqq&vwEL0dwZO5`| z@N0aK@HP?mPwepX8X5%{KC3D~E%X`4v%th;2_!+{bZku6Vm z$=&Q3I7X33DI#0c-n?%SFJIJF(J>?;^3TUo7FDPWCm5uOS2Nt&%C2uI@sxxsmbhqM z0)_TcV&j5O)DUq=+QlJjs%GZlXJIS%pKjGO7?Bd9%zoe4D_lbuO7ubdG+p{CQ2b!W zqtPFNr0`t}k7)K^&zYS7>M)32G(oXtGZG~(W*o$3?&$K+#%FDc$nce&ox|gZJi9pG zrVoBWm$`J6MwmY#tYO~t1lm;*U!&Ehxx(=z4#X0Xs>OSoE^?#9)g8|Jj>y6=!Y&f2 zFg1pnL`EFdiWl!o{z3V4BH2@fs=-ZRf4>pJC(XG5II(|z$jzt|LA+Q*2fm)_d85R> z03&p}HVvpVrD=6QKfI4#D6&JJFa9p2{Bb3}+Ah1S`x)m=$aXy()z(!v&c>cb zdQHtZeEdvo?C=CUhLC@_%^uAc+(#Qn#K=786q&L)3t3_O&}6kK6J7MlQ`|MjL+O+fpt8XCp=BWgW|%-J1YS8Kh2GIZmKBWV@wihB0LUIkhon&yy0!vIgEA z6Fk=3xM%X}`_v+7@c|b*r53kaE4(of5+YQbNZ&>jD#IW6KvQbYrD9 z<$<8h>67nQPs!L5rUawsD98&G^+fgcK9gK}lW00yuly>)Io!35gM)7zkExPJnhxW2 z-{_gfU_9alC&~vu{1`1t`OGp#S%;X%CuL>9#D93^bDvw&HeqUlr0d96Ut(9;Ela9&qjYvH4=a>Oa%Hk| z>J?D+Hf$qbAzrOy;=s1=0du`xZGY+i7|hGeKtyTGUnoOG(D@j5ezFA^Gbu}5@*{uH z6(1CRsLE^N)h{k$n;NhrFNnv^UE|OwIaWx;4su_DK4->dDb>_`*hMG%k0GcW-c;5ycSw-Au|5y@0WY17aMTAfgr%;~f5PMrPVkb|S)sUCRawG% zImly%sugL*7*!vzMH>NxCfbmRvFp0vPz}QXb(3PqQ-cEv>`TNSX!o_NbpkFle8~D6 z4VOX2*T8Q>_wLz(EKm~Z!~vUDGp86-n7Qxk6+W1%yb|~vt1qo|B9?yChPkZXkmO|$ zJOm3C8huFq8ga6jk)Wd|h>v4ZbIm{mO~9sK8Mm%S>JgJ2;IBkI&|-<06{bwx+f4>3 zn-sn*vd`+0*6k)TFpffo*8!l&ZhZ9fI=R}FUol!wcA{Yw?xL#`JX=4#Z)->MK~QM}8wwy5BmrTM0pTo4c(*6~vC(&R^gjdTaVv z7DFPI`p%d69FB;-YI7`_egV*xu-nO9t{9!p-xY^I?HTTNw+q8p_FT(S#2Xq&Kv0az z$m$%-T@t;Su}swND`9Wz@@y7~V~s5%+DGq)amPV7{2`qDdLIq)5vD(9)?OyG$=1`){0?*dWqr?hce-8e>4b@AH^%|!FtCp8v>nw-o+1^;I z!oab$)XDVr+BSlWEN|vXad*)*Or$L8r9MBmN(poJeCyDHHf9J_h1bE6>2x3qU(%5i zUNi?~>;%tB2+Bk91BN4>Ng8DP`df3J`G zjhyfYl`8?T+Ki#K{0CoE)ho|?7o7-+2!?aKm}8?>{bMl`KGm)etP=(5P}q}>;`Z!% zj`C!f$(W&N6t_2n^ikajMosl!-8HkKZja}o82>UKh$`FS`y179?RPaA61 zMmpH0@r4KIL$PZ-q$JT!T%S-&9?HILF$ra0+1R5E3&6ssu4mW9JsS@VZ%RJ@cyDUZ z!fTzv=DmVcbm6ZR>GGmU9~jlOUo2)m!&+|)8RbV9?S|BIJeP?D#0G;4kD7T1-@R+? ze?d6!QOx-chbnR*S;9M;fO`&#I)O%rl53O6%F-34%iu@D%}O60+&o-Bt>K1nHQ(i? z!p=Xm85+zNx}qy5wrkMc^u_%REhn1E;xt}WE1Oi39^Zsm>nseoz?88J13^u`b8KlBXd5e|)9T)2c*j$4g$M+L7a_U>8X#287)K#L7Zm8)R)gUG z&LgKy>MZhpL0gTwobm`_niQrvwW)c^^x2OQ?h4i_|5-ltWb1VDvWieXVuXYcJ>GX$ zb}kf6i`auUgT-}j^zdyXYRM18$Vd*zkI?ng11xpp#PP*)?-D8dv;v)em^$nsa$?iQ zF3tAC+z%&s&Tp|Tn+1|Oq$gi3PI=z0sT0GH=m3;dTJgd&dxfp5A3I+Vj*%onpAeP0h9ezIvmirjcXfk;fa5?vT7a`3w}2R2)hv?$<@_Db~1a z0py+iPw>YcL|ypGY<(X!a|z!nCzI=b4A*udyhJ=J-LXH3cUmWdKFG1@R~0?mn~oJH zVuKehmkOU9ObIxE=c(lw46F_$_EM8t+fvr6PQX#iM{k_ogOeEp!PV_GIGD7knz@1l&*5Tdr2$^G8!mei2Qo(pY0Z$C8PZ1CCR$?*i!>;pYaf z;mtF0lBX5?E9EUVUr&9xp*35(W z{Z3<76#8IGOPA}53?05T;pT(5^JehxmJbzpOwiwa+L<~J@iwZ7$Jrb?tR2v1lr3KM zCD)VFDG`7QLWlTIlkv}q!?HJsx@lpkf7VQ)u5rDb_ zU91I@5u*T&0PCtaR7lnzA(B1#df7X7d?iR`A%k1&m64F+ZhfvIL`#cr#Z_ zI1Z`;O>g&vq#8!7096_MqKFP1#bGr%>oA~M33CriUm=n3P0m|(1UEPQlk%6O{gQZl zpd1d^Z+(|}iFaTzTSq8QDkSEz`)%W#Y2b{x9qNa?2kfZX)4*61%U3ZpUzv(ur4%!C z%8%8qH$M4)uzO^bOTJehKH={(A1=k0XUex>-Q`?9tzJE=L%XvR>?Ge;GQ?qC(=|5F z|1=AcY)LzINMb~sq%pfmSs|;v>mDUCgAgWU2>A-!JP)rQ8e~lf2uFn~;3SIRIkdQtJGO7oExpgA7(l1=nPji9||COYBH z)tPC#FFx`F=Jk3ZR@~ojKF7k$EYSPb6!^SqUKeFh}+Y#(t5`0P4twnpCIx*H4; zK>FzaQytyKNKO50KZ|1x!ahGO@A>j+eQF+9zf7-t2ql1sqi~a;{u8st)(Bh zh{zZU*d2pT7f-?M8&+_Sl1CITj0V_Nx9usJG$rIsKw@ljR$w7FVQu{DxK}~%r>24n z&$q>Rq2;U8ddVa3)T6C4M#pRG=v!_l>wIjP8iLQKWuC}#;LH|%kXeH^+!hOHQsZLc zA#Lxl)==ERCZphC;kxZH1TB49mH`;=J0ZNI;@<40=g+7Ds|s z7iy$>9lAo)fupJ*%cVW+^1=tF@JxP5(U^EB=zf80+``yhGotmlqPYo0ZW~Naa4hUR z6P(gTKXL+0Cwg^vB8$FbXC-*GrF&e6UAc^0DqleqACr`n*_4ie;%kA5y{vR=d;guZ zPYZ|2xZ~M~n5{1)LSjrl18F(LZrg}m436WagWpx%lf|HQZQdXl9C;$pJeFJx-ouKM z0Wjr7D4KI-ke}qfLzC?@DIqUJ5|bvhFpUm{zn;vjgn6Axz?Acj@`y_)+?Y*sj1aox z(MMrEjx4Hv4QaW=*3SE`0Zv)>UdgSUa)gDa3_}Q+HX4Lb&~?&$9@u(aJD<3NRGP=I z0M<7=qlD2cu^`c)%yV_OFR&44e1mziKO$DW!Jxfn%aP-1+tDH6b^{!APl5Go4mS_4 zH--yUa&I_HI2I>Idj*RVo=GOa^Fjw(PAtxwH!l{L0%sW75xc&Lf|wwEXw4e zCzj`@_`l?c8upSvROodEq+n<7n{YT9z%qd=S$l9Xz~nHCE2dW8OwY=|9;h9P)Xwjj zC2g4@;UvhaXbo;^-2@l4D?a$s)~Nc}JeI2U zBdR$RF6IgEs60)Dd|&61@LuMk{jj>P~q3@hE1_x1`CMVd6l`83QQr$d59 zN=Gu93|E+fd)25hd5<#Svkr`DVI{N<4Krs<6;(2ORRVmF&8A0a>SOxh`}$lazSOBn zr+TbmDv=a%Kt&goluJ~)rN)lj1l!osfwRu^qqF%30Zp&BElW~%bNUT|iM`eJs8iKo z@=V{1y$2NIZ4;DZF7e%N^0OE7$AY#&o zt{wvgtW;T4EV-c$%67)g3IEQb4Y9}%#UH=uCdd6__r_d;74TJ7*wPPXU&@n?JCIUP5<*COml#Hq%0~JAX0{Y4kjyCoHclQpR zdrXPfRn4>Q_27mSw&zd6R>!(*-u79bN^P~-{U!Oa(aE~{+q|Qc3S}h6OK-#4?w25k z%bU9hA09lrxSc*4E^*@>iQWI;OJ9EJni>v@c&M2LXdHGXXA6Z<5}#BMav7GC)gde4 zgWj=vEXu;unS&S-pyvv{8ST1B<7;Z@BZC`xVWweN)L`HIvHdp12tp}C!lqr!stfaLsbA}=Q!|B#XoO}=UGqBSh| zddJ}AWiy7#4C1of5O-hnHpYD7q-55i#xaH6Rb*?L*Q1aRKKhg{D{1Oz_erzPr2?^D z!|PH~aKsYMI9;o^U1XC$Ei?;Kyq21to!t}MeBji86pCm=I*T_(VZ}j^S}!Zhde!&} zaZlgl4W0I@RQ`9oPepAPEffuL2W$4~a^?_Q z0HHl}mNLZy$~nu2Ak*^rLp<-p3$FA!x5fIluFqV)Y#S3xmbSjrL@;aikGJk>OViAX zqL_u{G6_#tWkKyl*XJ!vF}alSrn4``Js}j+0c_AGZdccmxiN-AJRvJ4MmW3zJ{iKL zg&2;vSCj$HPb;myKA$YKzA_~eeIzd;L@GiNPeA$e75>EINRFV;#LtZYAjdm9(CNG_L&(H3i@=9 zeqm5nr=Hh^d#{CMr?$8AL?h5qQ?{9&!;y&N0g-cI*Ay+oSeZH>uD}{bSfyCKnGg*h$GqgZRjRu-wL_)!GpiAFP2Fv16Ka{N7 zwlP$SGTp~go~L4l#o^DQlm(_I}apiCBk8NrVq}`Mi4OywIOQ7`6zO~31lp` zMw7_eJCRt8D{Ko`!$t`Yd&;Qb&5|8?ImEQ0J=Z2YUOl38k1Rh2$rInPsEA)D`XtTd z?h_OF0kRvZeiPL+Mc~D^VsLhdji<>S$#Q^wi|!&>c#1q>$#PsnMTIQ$)|Dco1uaOs zR9%}i7_sD(zqCx~AZobtvea5SB^q-m)U^x^Vo- z+3gr+K0=(jiWci{FTFV<4FV>e`{l+u!xSJ+lvsERyHj{bbWN0WqT#m&PclUQbqn_P zeP@LA6+$&TVE!n@(rIvPq~Rx>WtEg@So`Zb7n5xq$7*KbTx{zc@cgvZ=Y4bbpD*s~ z`fX%sA!ExixlY}8yOe1mwpA5V3Bx7>gtC{AZOtR$9dmMAL9_6v!mrMwtcEr;+_P#E zY>bBYOLAnYOUaBv??iUAS&Si!Z_bV#x_tX8kp?+cGI@kk2q_X39$AXT*^vhLdUZo) zOK1b#rY%#$zj7Lj%W`)7$XxBDosf%Z@D%nW=Bf=tq5!gkvOEkB6L zWXK>3Pl$z{P$DTAM|%Rj2)UMZAf9_6r+xsHAZrZk+nu-+LjTdi?e+2iyU+pgj8}l9 zTWp&>7V+i4S;~6|WSSv^q(_QG-;*GXvSU?uV8^AI!bJW%H>ir}!Tb!$O<6ODpkj-d z2Y>Y=qwb{TLLiBzHZZl z2PyqOOWdGJkl>L%o-D9_rJrJM?#xBJnZT)a zsAjTaJE8tA@59#VpsX;^lLJLokM_*c3?dY=4Ljve(815nDpS#n6XRaKO0aX7A~oa# z93#OqZo%C@T$v*n>7iW=Hmhq&GP~DVnZ|vH&THTK4XXcmK+>5*eB*&Px3lq!h-b-z zK;{j0J_Nh(j2-Vsji(lz*Xur^+glRZJqOhv>#XGFW$|(w!iq^{Zpy*tMSOkM z%`fzMe#>WhCvu{^9B0Y-;w0!NLp(9>CJO&!ef^eV2PcnPuMJC~HiQ z6UAEeQOeX#6L9Omkq;HlDgVd(+q`Lu~*;IS_`!%|8&@`TJ5 z>w2cVSX^m_c8!>Nkjk2!Z1tm%Kf7^)gK)mEbM6KdQUp%RGG}W3dliyMuciynW{5Y5 z2uYE49&w=%9o+8c>p(9-!l6W!C4DAj=b)W1urX>2Y(}V0_#bsS_fe-Vbisk#Entn2 z!`Q%ZT$a+CqPAIQhh15CxfHdD)1kNUlqe88&K{E3U8d8juu>d36WkZw2UZKTH(5(+ z2$fYPlaiwzmnm_hdhs35RBa3CM9db?-sEzUC1)a5Hv4!Rx_?_?upUS3`BTZb#Lb-A zv2Hz~*aCfC%rZrJQ&445)l3Yg@h99c)*@8-tq@(tK>zzYM#K;$8eZMk1!UcKqH=bQ9|)-fWQEmV+3MNqQf7zNNZ zswS7z_O#G!fAH3X`*}jI)k1ie=@ZD2M{CXAV5!H^z;CrEmUsG}T4g2FGpyqT-5nq! zKyq{09*$aG~v99U3wPCF;2ILaIVsZ!$(pgdaY+G+}j-!s%dCuU|orhme|ER+L z5Q24Bmfen;jCR{f+=IBi|KrU;Awt^WYp z1VOk7)X-`9J1k2j!epBEH8}dZ$>S>~%xwcq;3ov@!&Q-q7}{`!M#15n>?1d7c3A`z zjE|ueaMqGn^?Lr<*d0ov~&wQx4shd{h&y1fFT56mo zQKm}~%IyA#p+)+HFX$qlOYj3+8GKBOqIUbj=e-O`qN}c2da%aVZrihx{8?@phlUa= zI|PC)2{Xs(C9XQJ^=ZMOWCFIKFxCy#nxdxPLU_ljoURRa5N|+2I(VV;v8O1v+T=J0 z0J8dK-bcV>;u%{AXRm84U_-l`nFFA;l_Rh_bH@#&x$no%^uJxWms9z!9eWHJm4V}~ zzp0-Y4DipiJrXID^jf%vO>H?c+E6d>8_M=JnWKfEoe~6YxiIu#rjJ}gbKAQCH2Itz z%IGhMt+V36e{Jpf055nldL^0|Qa?teC;p~+I}H)I%!08JW{q+i6 z^_kz!#Uc!W>ei9~$Q6yiY}|kr0l75le8}IMbKBT;A6y4%v_FP!56@v$7vLbk zeG^I2pVAn3W#XH1@D?g%9%*&WXz}hc_Om0A6O3hA$YhD@s`Yg2KRl!(8b6yB`Ig=DEJSjV;g4(xo#vM7q@P1(; z#P-kR!C!F5j`-!NG8jo~UA!#n9arNy@7EyIRwj)ED_EtRyHT)-UcW4Yw=r_pZ@>wI zn9T=#mwdpuuPN>v*9^6Gf^#-(Q(EpI$cD7FXeP^v1i)zCg+MDifySattX$?9(j)=V zn_quligC9QBe9sx>><3q5i1aUetcpyC!GDJ+M)0;lhRiatomawS-18B&nVbl=>nur zl|ka?Xa2=W7~ty=J?!Q7BQ7TrP`ny;-)-&#k-EM;Vr$%|iAh;+p2n@gkgX z5f_AW5F2JGDlkZ5IWw%D(=Ag>cas!ToOpyP?lac6SKkr(t4|d8$(6FGQ)+bexQF28 z8)Uc8^k9N@CL@vXpqRg8475oZW}HK$y*gId)mzklEj-2J+3?2`iVWDhqP8PNa6&A* z%;Rn20S{F*CUgz~AE6J%Ml~Hx5Z>?`iEwU{VZT=a>JmJ;Q-QIm= zQwY1ORhA#J$L|AKqirwtn3fKvu*-)RnA&dK6sV2rw%;7JP zpkN3I_En;QZKRTVS$Y`L()u~4ux(T?c&q=&=gYLstn`C})VazoCW%&4pm2ZXB*jrF zd{WQvXh|>bu`SM@MrDrDc+x9a1s5*6hP48gT}4`5U>CTGuq?91>MQiLz~~Z?Ab%(w zncSE|V?r&;^%y@Cm=7+jTY->b@FQF1S zs3&x>-fvFeIzXVgmoAN~q;u(!+OSpGHw0 zGtiHx=TXK|n-kq|`2%kl)Y^89YhJ8;`%qUvz8kqL}lHQ&qAlL_Z!aU zupx6j(n~Pg`P>}?It7HLDENRhiD63GqLA;;!2Q*T zYpgKdRQgiL4uFXvlik3HzriIOvwoooFS}V@~+S=?&;1(qzjOiA&I70m-X`w4>5!YiPeeS z4czIX{#o;5r_Ly=yk0kDum8z3-nKJEIHH=J}qZsiZ;jS zhkCzAK4%3Oh39PgoC%$HSPIlAY?^H<{XceMiorDBF7mLbqf#tztF0|%h^KFbrmmw4 zhp~=}j9l)temYY5#2JOi;O2Ie{onI*#Ip>M^&#afU zg@TLh^GIX+Y3dEqpxDi8zNK2wW+`j{i2a`@+0jk=2USi<+Q$cur=NSPBGw>=j-_W>? zoBC`#6UX||)4RYM6ed*(VS#izV}IA3mue#%^P(s%eoEGepn;;sM5UAXB_jfXI$?b)Mvr0{lkK}myyK;s=tv>O3^xKndF`)NDt?C zZVk&D-Yph?P!b31V{Y=%OC%eff`^4pDtT<&x3|mFIBZ$X4C3+~iw@+1?MfhsfSe~G zIE7zV?_=s@_A)S90yvfO?i}y3Qf^rxmLJ?Coa749bDpX2%IGqQ7Jw0jKS46RE7jWN)CthA-fi0d$ z@D4k04p8}DiYn95xCmD*|0I4Aat47Cz#Z`U1p0c_w)GXQbG_xEg>B%?*X8<^W?~({ z3Mo#BJ}YWs-e~7W&*DiYbB|piNTt~^o1Lq_suYIV6UhoVH(zn-3VrEJ6}Vb9Eq!g5 zE%SM!5778Uhq8yF_Y?b3Q**+c(nH__tQXJ6UsdHyB#l6|Ik!`I4rvG3e{W=5d(hiO z^dGSL>=O$fYHx7G3C(5u9sy5gHh_*NyUXWUis7f%w?3wW8u=y7JC6{bRek&e_C_;! zt{s72SqfRjKSnvg7>RRG2)4+FVa@s2?=kq$gNCn zNLHzeh78oMPOcX#b|Vt_tn=Nxpp|@}Y$LO6C#<&i;9Wx!6DlZ2F>wC&d&AFu!eh*l5W0Qyzf4fkOeLfuoSO~=cbgjK%~brWG@8fmq6qU7dpkcDr2# z!e#Sq;c`8rBZY4qqOnVGMI&XHk$|Dc1XGzAxhxHJEuYDn%`mcWi@w|TD}4u^+0-{k z6YOceMf2C~>gx!9UCPZGU*uq7=^0IFmSUq@7gUoGqTMSg`ZJR|`X;gt^C=j;0KY96 z7CEV9L(^@MAm^P|*!BKptXV~TIF3A(P|R((7~le&7ZsROh+3Eoa!DX_H>Kg7Q;^{& ze=V>r%|LKzn&CfpV*or8RDy}3t)(E($`f{&j8NRr^P$kAH~;D1r%T-3Gyu_fK!EQZ zQsQN5q#pnP-j2iSIcA{cSUcCLwXt&ex1WlMk)~>@XdgL90{{RT(5c<7C&ues=b$c; z|JVP&1~ha)#*CcJ4*-DLZV44*D%{PcDmOwkZ{Gf^AuxmNl9c*oqR5wz<>I|JZoV2d zD+I~FP>~%Lm#xpW3jmlK8z8G})IU&Qo9*xm(KoJ~MyHm^25s1LU{DQH-9wq$FXC5! zgM?Z=>we>rvq1AFoTO7{y8(pVd#A0E7<@YKRG{PbuZ>Uy@w}-qAl{Ye0nq_t2 z&C$Qg>Us&5a$I2$U4Iwec1ELT)BF7!v*#hC;ZE6}$BYcEgoZM!-1Y-Zc`>I7mpbRUsC>Em2YR=0)i4?YSva+0Z2CHCEBPCLIc_w_1x(X??3~1$LFGI;XwAK5+FKKnh6KjB$-9T)0cNL>M%9nGp-f69Gt(M zr)FRM_7{WTL%NP#iVi>OO=Z^y)v=ncoJ58~>!INOgm^bv>!=N4nXDa7X(2@!oQADN ziCfoOV*dmo!r@5i<4<2Rj4oLOg^k)dK#yh=duC^Q=P=~Fj@xx1(dw`Od!CmP7(Jqc z)Z7_4JiUdv2sKBU{7A{a%leJCZ@m0`QY~-{xxR!1Jf4++WBeIndwPcc`6SFAiwLkk zJw{zVHQJxkxh!kkz`yM5b}_8~juV>VDWCnUA73N!7MpdZNf0AKVM!Qcc(-{-oPc=K zW#r*ORFPvLHG$DjfLUsU5Es`fMn!imlciUiz~8t*(#m%7bBIsU?OBh=3m zbG?0~*lA>MI9+B4X4*74yrVi~sqAawhm{6UCe72CU2z5nbby-<@E#M zL{E2)twxkqm$`0Ji;8A*SkaM68$inKcJ@v#uQ99aX`-;dN1xYVVEo8`#_4`2Z>vz# zYuH)R@cL_ef-_!h6m9J{0Lx6!V||oNuXr>(Ef6i zaDsd(iCVfMevE30#cB>HM74@kt{cSoPx*{o{~eOY^V z0u*t;Bbj;4>HV21*Q*@q8^c&gL||L6-8)=!xx7=Fsb5AsVT$FNO?~ zkt(_^vN7YSE=Drnt=O;A3Y2gU#;q}N@Sy$%Bz1}X-W#(K)CGUIl{VOoIIOTFps!^u zfghyl&#-&kMW4!6T=W)_!#{r)C#nQs6v!_VnW?n5U5MQoh`uJYgyLvZxXiReY|1`O zNd2*J-lVOD;wF;n7{;gzUC~={6X9JWO2}jM!@+HO!+5L$oI=OZ?dx3m5Vq3k&>y6o zj_aCIdnT`LUPd5+YPftXoSNx(5jAqtc$UTULQ?0d^UQD_y7Fe)02KW_?l!krD+mq z?(`?AUJdLFVE%)uYa}>?Yz?7P!W{~$DJxMCPsT!gMg7-**0!jR!pVRXq6uPGJE$e_ zWTu&5kieUBJy$H(WMqR^%|h$SVpT4Cj39CAOUp{hry&hnK_e1d4tIh_TIiRa^S2u z!Z&-oay#Uk6pet2(dH=>41K-ep#5B-GhzCD4ygX=a7GQ^vWD{*@?e&4@Pr0#+u6g_ zj(cw(7wqPf&6v58MT#tJVz#4Iz`lh4)R7pm=Cd)Dbu_YwXGs@I!KAl<4T9g*_~yug z!@&Z-Y`o!NvNV%pNi*SJpqj(Av$DvVC8Dcl&wAjykUuac;22SBslYHn=L5zB05U<8 zfY7rqTJ5w?$+c^9D5h1BbiO}>jiJ{O1X9f8c;)kV#{i&?FTPs#VtO$4vNxvKPdbsbXR?k>bvG+npJ1Re& z9`G7qCzhHw&>V4z?Xj93do^l9@z5M8y}E-NtuHW_$E2C9g|87_`#$pzLHcruzMtSu zu(?rG*SmVJ7EMW>GRR6eBn-CBxk2J2VyaWvnir@r{2*fV6eWau)@D9kAw?&*v{2I? zQJzrJytMAiY`e=3@h^jZ8$XqQzWR1{}tw9No>?HgY0WPtQ;W89#7vV*Md2L67TOk_r!hO@NMH6F_y4(J( zcBF$YT`|Bi)!|8H_n#b>@gb<7ReF`oMLAz1$;=;4ev`}u(AYkJ75Lsff7bZJvybyJ zA}%z>k0&#*7w)Yb8*#N&r`hKOZ1t-Pp%!~W0$Dq?f_}Fzuc-k0X0lbN(QBpsfrblLiY~H0{Azf z&c0HJ90&No_b(>C@+VM~gCs}F`+KYB`{8-liD|ZrhdFkZmJdFz#6z@Kea09cd_np# zC!2_Y&XPf zNeclXBEYTw9eb#GG_?W+@<-%{J(KBy5wg5M7;G+ZER_}vj>1^}_KubTls1wXYPNtT z;7XWmk8N%kniTf?y9||QbI49ET9*w&JXFc-3~IDu3Z(YIr>R{AfzPr;#M?IN4TtBk zB1s4P_@>E);7tLu96}_+TrN4Dl6=B76!NmIV*Cw*=?VeYcm%KZa0ohjH?B^u z!Jz_pc9%Xa-5$OxS`}}WdjvQgKZ=u!*V&!?_J@pG?ud=|^rgp=tF_>gwJC7XQ^ry> zKQLk9I-3!AhKarr9>wBU3osH1HM|OFerz^ds`ZoKu6Nixw0IEpvEe93X><%ntr5*;rRiQ5$2+7oT++~1}(z=47RUP({AUNywWFiqcd#^;z z5mH*VF*KW!z7Yggf1;HuG=425OuIv=n=NN8Nc(5e?$ zAEkhgZ!0nLuM^qpZE`%uL57Kv&Cy(~G`YMV#!{naA-1HuD*vONa&&KtxRED99X#^? z8z6$Odkv^!ge#hIs0tEvRSN#99bS(5&+i^1LISJgIADqBEk$X|4;N^Cbqw^pKMv%w z?I#fR;qdThR2>Zvkqaj=$az>w2hvbpD%?C-JflTDJ7|n*V#vhu006LTZV??>#Hwdd zz<01XZE~Wp&ScehtY5j0B*@O6Mn2L6K}J&X*O@@nOSh8Fg1cG;(vp;0APJY*;9-lO zWQnF(m_x5>N-fCecL0=(=VdS%}2zTFnj&Wj{_bIO1+wvFUh%)wIcdj3;5Ps&ouDYkbr}rj+ zDC-A(2G4J;saH_58ZkpW;|JSNdsHuqWZ+rhDx z*Zaa{T+Df(eMjAl0oLFpSja=q=pr$?N>b@oX{_>V`fCulZ=uH=(m6Y+58Rhamt8ob2LF(R)jscN(f%4IT%hHBQI^*L!Rb#;$!5Y!`|No>i36s zzj)lzYQOqj;LLM$A8GoyzU ztr}SkaCDd=oD**>g#4>WbiXR|?kGc*a9-`TyF)k|4%R9e)*Nne0&N%v+hF|=CEj;5=EWZBFq=52j**h`ms%~WHy z49~=YhInm9v~O#qB6#o7K?-V@$-pSi7>+gU(Wufo(k&h6Cj+Cz-8Pk*?U!s78`0Kb zi922S8b(zb+UqAY8eKQskG<&HONk!kzYbuS{-mrNgTm#}G&-Z3>P5rmPZf`@dOiX9 z*MxEFd(Z(zCNuX>zb1x01XfzOGW#?NgXM;N^Vnl)&PH=QR{{&>6Q2)#%^{jcRqJ6{ z-%twcKb_>O|1FLZZ99$o50)6H zSmgntJa`So{JToug@g(Zq;A!P-dKM1Pt+4nDd4OD&%^lH`N8t6j%sIryM&T`n5j+- z0dYN5TflDn_(k|$4ywZ5d5GJc5am2R9M)5!Z@A7I~azQ(x1mkbn!yvoX;6U)t(I z`Jd`L#%)I*{lei!f)0m0lJ81vxQVdm@pa0xDk3fBU(Pxeo^~hWD7EJ+)Zk#x5g2g0 zDxSFvr)l!b@$$(R%RHqU_r3T9f>VMOBywx>zQssPa{HTh@C8Kx*+MuY(M;%Dexu}w zo_2{KFck@*kdeu_0zqyh!bDy(zJ)f$pqVQ1@Qp8UhP4ISv1%Tze~gwD(#LxKyJ?#j zSc#@`?E)Lmd;g|89My6xUT!J9@uEACZ{=t#I8Og4oekRI$XuOWo&#gKUoMv{ec_8n z!1PeU_Bh_m@Xyrrwv_f!l^i6>`M&_daM%$0Afla61=dI##qduBxhP6)4u|u44~Z+Q zM^d2PYHSl?9^(uUi42UOPnyKRU_ZHmAGC`?bAM{JF30luliwgsN_p4c-Ct&5$OIFa z6Y?~Ls@Y4InX4gUg%MnkC>USMd~4R|thRcDD?LsiurGMt_(p(uA@Twa45vHT$u`|_ z2U)X;lF!xv`Yz#Buj&0Snzu_f{<9WPPzfr{Ihy&C_g(OGt@b1v&G$D)oTF!j#WbPd zesqo*akAfUQ*~HqJDJwzTY}clYA+81$op}hnv@3vU~kJSZEu?D3<}kIyx3maG52+n z7t{#f&=%Hno?0SYRf)GlW@{Ca{niEA4VEK+3yGYead}!LKL_q&Q5M~VPpV}V76vbh zwP2_uK-H0U#6itfWDHc|Z{uRa08V#5Y`tOdw@O8kBOO-Xo(!Fb68AYWtBRYI)Cw{ zJ#~`;8}m-lLF`&-Toy*B$#lMepZ!l=1%ANX75|MYL%C}k3wWzP++~*Dd>%a>-7D#z zQ1@hBbzr+4@40P}ulx02e$@jxSTLyR<92eUS~G|TvhfV-bs7g^1$sXDfrO841xmW^ z3=B&)jZX`G)#92&7FIpZ$5t6|G+1L7Lr5pf&({ zN=NP#GZ$;jCw$^+#PP7^_7uQ8i+K{+6%@nQ_OtyGx6DXDB19*Dr@7Avssq>L?>7qv z*QVyT*nwdFrcKCzE0YJ9lg4Lz)t}_ey3a`KsLO*ZpiD;hjc(*zEK=R+-a z(O-B)HlrhO$vCzNsI4Lg)hX??V^a|A@k^j{J7CDW9Z$ogde{gQOS1KxNqu1Oh%vBZoZg<9JGc{k7r~ z-G-;DAtwJ0xIxI-NGOsTVC01NvS3SZEsBw_p@ZjF5gIT@-m(FfHyJlMbBk3o+9f$P z95`*@?Y`qmTQLXGTzTs0Wc(ry#RW8=2*#0u^pXiQDB~?wy~RE>Q0ZsBF?OUY7tJ~? zmh+PDeRddwDYDb3@)8ZDJZEcUuh?V2zwi@-2gp`tn z3pBRSdfMltXku4WVowY}H(vg!l=?rcK;*(Sjm%yVAht=D>EX;KsK{mbqbA>#!ujfL4nm!az1Nxj{E9z(2lv1)5~h`XhzSLs0 z&vT0MIhc86?Q?x?gQh%2K`yOcdH+qocB_x>;*Yg_HH-NGxX1JSjM-JDvCd88%QZ$4 zJo6oV$|BP7?gS7)>YYEPX!BSmQ^Y1qDX^ZeYLi~`ACj$@-ng`k6Oh-(2dGs{cQkdk z-ZzbvIil6}o*)7MwhGjxUdQ`a9ZHkKrJb|2VCDIz5=OCCp_)hMdmmfTGN!R&r;k-u zVv|vvH3n#$x0Ad{y;Un87Ifw*n7@#V_@vm~1$Km^#)8#8RRMlBL+zML$q9dSlQM9w_w+{kNEQp0k}@~r(4 zH%j};&!zrN?RA>`4!YgIC}^LI2^^U{n0|)^yxWFx1tLeJ(gyTfD!YUTcu7-C6_cUlgYPY9P#0I*q^K|MQZA4zkxFOLWOYN}1h#7_r#XVIr z`_xWXmCVFERF@{$dtkXZsT}mQ=aoeaIW0kF)Z8}-b@6yRMf+wZQh=c+4JV0|UO)eD zK770@G{=#fVe(eyqBR*aE%-yMabCo%6BOW{MzMZ2xrZYH&-bLPun283)a9?=~wrjsFT-7mw}(RW~wnwpYO#9+_M|f z@G>!lm|IEgZ&vastCc636Aaln+@%>nm%bP=raaoyrt#lvwIflso&>7l`*E^Hl$1xq zZYbvK%w~O@cy_^puID-k zAy4=6No~r1i9cDwO}uU*J7!>U5C!a^ z+1Rul%05LHkvjCw7IZ>yB>ExbEKnvomm0Y zPG$ZBkJPwNVL>m3A8^XWjkc9V75H}EjT$5nWfST7;?r}jMRe$tOIdy1wwr`1J1mI5 ztq$Ff*a7=wN9ZzbL5+k!k)P+vF9>nvX}{2r_4K7lRE3-a(HurVi=+B)TQ^)V+^UVz zp{*S;x5XJiM^M@iYtPN2-Z*=>Me4KsuMb_11S|KAeZX_|7tqxPZ4e~pk@!+b5%4Pw zL?q32yJNi|7xjlH_9W0hT^%0%)e0o?e46PB`cc7VXV5tqTFIZDio8)O6eHl^i_7UM zk1eKg9nPyJ4ww{w#XiJrfXE%UdhO#s=yEDSVAW{wXm^+-H|r)V9_P)ov4(uaM!AcW z2e(e%YuGVC0N9Y#v7v=TsL6A_^B1K=^V$7XvJx0)L@e4^)^yS9TiR8iS>L-lZOoC|jn`+_FC$8Xl*4~WH>vWzU9Xc~9DoJSQ< zz2K7KS@*uk;tHQnd!|GNHIID!c2>kYYqeWXzF*8sTeM+A6tj1H)bF^&*n$Kq@bx+(y zjBWOIrFvELTy#74_2D>d!rv#KuH5WAuSoH;w-^JJODc?m*n~O%X%;>`{`7V`+HK2~ zg959w9e!R}qBo-ZLj?0NCIYU~eUprnV;Z~swGM+sA2(e?WFg!nXl1=`A}c00Ud4Fw zBhoeT#(@1-u-w7&uX`C%ZNMlCFC{fcu>ZGpQW^q60U=!95BMMzT{uLA2;#rQ zMJ{E!zRw`r-F?Edq@__yWh%!FrPtd9^{gtre~coMZf<1MF>Pd(iqLpWa?} zX@EWogNogquZ|lfcX8#X##vmA+|ybLiBV*y#gQXbQvYevRP~DrMF)~505B{_&c}`s zIuz~vaul;1YEC$E@P(B9E@ID#1?~bieKJ+*K9GK);TEr0cHC$3Xk6Q<`N%vgTF{r( z!UPsfaNT>-9>1$fzt6-&9*GlHON zaGHQtFBJJ{+>fPNsWSNZqo6ryxhB>H!8Xs_3u7}NVe*zGfdX}q{L^nVNoa_87HyAd zPsKc50vfB|HK;$yzH^#Nf!$rPQUY{S84Ax>l3 z3MG0BOCM`OLT4)BjzD~wkX6p7hH2K|?CpVF(4~LvJ5eHUgcCVLfS~N?S zf64er=;Glj8t2HQzn<}-ZzInQMgy$W(dM3{aDurr6})R22CqLea^_;JRa7E1sljQduJVdKtKj;xmd_Dg zFtZ<5n+wISB~DfMcw1bc*!s}Qk9~ny-~rpwZQPSd*QjEsCO2KWVKe55B#W)M#$gw8idyYTf(yE!A)7`B~ng3`Jb10VaZw*Fv zx&Q6{Yp_D5%}}`oEr~cHO^)LCK24cABm^mc5A=PSDJipH{rUcp&D_~4F|s(X&cm)g zR^$~-QiXFvWJQi~(jlV3`chpVHbld=2x+D|7(P#*NQW+hddg$i&|k0*<@9D@wJrO# zIO0yMG(Q0QBoIcrpZPxH6>YB2!D>qXEvQV~$Z0ShSzd*Hww?N4X)pZt4yeE|T89>D zmBja95@Gk64}`sDa$JcZ+^9GgJg=l;Gv5hANL@LMvUgfst5c=d3;Ww+$qkc)oKBn4 z_^iBddRvYQ2yAD^@25c2jTjTb8H#{&{BUD2y*fe>UVg>0EZ4Gi#N{~5 z@f}lHd-j7|UXJ+BD5`_w((z1~E^Oc{ce44(eCh?_eSQ zIbKEkvrT%D83zk}Idhn!-LUL@Cb)hJ-1z~?dH`@@x&J(-0|2tcA2e039y<0v{?yzn zNLW2*Q?%C;fsZiPvK-D`W3LlXKBl+90{cE4V5INaF>ctOz^u0)jm6h<^dd2!=$=^D zuIj}NO(d#~7a!Zs=VEakm_OK9gpB-JK${dGWKTAv#p|ZFqADISYZpodD}28e(;aJG z#IMQ9p;=Fz1>r!(XaoDX*mi56{>S^Bb8CmAg1#T9g-CH*D)Cake;(U61>^Of6c6IP zmlxS+FVORsT^{EQ@{voiL^|NX6%eI7?%jvRyQ4iLy!U0IM}WX@QIa3|u52KURw`B3 zwU8&gTg6(D(iaNd%{@+PW2B}c)W)0N$%li(yQ!R{N8@N65UL#=L!8fZOgpG3C$5H& zp`9pxm;==h_FKPI-?k8Bz9{ATLEkq$y~ihAtcngQKGeKs{UGz*6$zz`bieX6mUdAjeoBXhqgYN-LMTWl79ct z1%1U#b^qBsvQvJbXEzVHvF9`j^$J74?+|t*Q2tCzfU4JAU0rk=wiB`A^cjMGYm(<; zks#Q%{EbXJ1h%_qH>VJR^%36V|JKCshRdQ3ji@!c>_ST#)t}L9oSSj7`e(Gc6HvzN z4M=MU<#_YH{}W93lH6a1YMK)LdkFpaWqK(Llw@S*KMAa;?3`6vW!lT>p@Z_52{z=` zM)gBsl#N@gbz_h_4Tibj+*fHu?##l3&hUPWR*8p=UYTo8l?EtXPj!$|Wc`7=^=-Q` z!0OPF{{jl?|0!c#wert-?f)kKU;BmK?eg~Pxm(bx0x^)0QwCN6o5(l@-aT6Z)fjt^ z`VGQQg%Z&Q0D#~yS2Z~&PX1+fSE<|uW zJq4m=f%c7jLBm#^ATkh$>V814_bz=(z6ADS3w2c*bptGvE)ISGxo7$pPs*lErhd6* zN&Yy;3l^F_8bY~Z!Pppqt2Swnh08YX^4PlU6LRaZQm?MkI@Vd==s}*H*T5*v#|t>> zKZYalBzSHxA1I~?R1i~D=Sn>9GrHs40r6@GkzxS-uYY@|zE5dCp<&@0JA{y+MPobp>)c+Ds|^j2y!dZ&R3>dch({YR#tD5PWQf(2PPks? z*_Z}&AQzt>Qhmhhlb32iF^QMBWZiq(zG}=KOIP{W2h27RBT;k83lY7j%L@&a%=}lK z;z@0^H%n6~m1Xt)yE+m+Q7D=m4op%^v_mG7ndtmLAj@8|Ldzb3`Q7Q??2`;QBkM2H zVw&Gh*aA6*A!114=1HnNX{F&ERtmOby^hvM)3Bq{^hoYH3=YXW-I9$4EVh)f1pP4_ zuFd4e-EQAMTrz4YX;!FKq{J_0Qb{jzcbQZOWM<1cWw*~DV)%Ytna_Jj2A5Qr)W==P zsuv1KFf%2hI#R7HxTt0XnJQPA0T5d0)UILUrP>wA6FS@p=(FP~mooYmM>rZt z?b8R1~*p0OvztN~8haN{;JlWOa>5(;TYV z&!oEh)&7?7dr$CMNgg9wl5v`7C-5=0O5H(_MZaeGZh3s2<> z>Y;6RaraYPAJ!S=x2guxq>e2F-Cs}mHuoLcMTy!QQLN#z_aP_yqQZ?~e9KQ$1zU;Y&>$PMm2%q)z$zK#ygDC{F1=FsmEFJPzU^!G>+WPphZQ zCr}or&HX(H05LnIH6JSxc*7pUx-T!4o8xIsH?pAhy`h zc`8RPD;a04utYdkE#BpkLrfYJ)`Hnh!$-IlTp3}L@^-^E=BWZWl3J~8Z4y-(qS*2f zSPKy;f=AScj#{$Hdl?Uy|8hVdzrUH&lgTs9Cmzn8ijeKpOw-3ywSu$HtW-y&%7#gZUSydWhX0E z=Xdu@P@{S3;$yWLyC0RY7&#!AQe_l2v#qKwcETAx_S9V`Dt>wF`0QtG?XB<~tRDV{1i;J&&=UUPxU2hJApwZC>frX*L$Pw#MgHtvA9qG5 z{GfWE!ntdO_Eg*mB-0FR&1(earE5z*DXC0wR>qGA$l8(?4f2I(CxR z0^fZU`tTXP(`wQK#c-g-S4kubdlgXjX~5aaPgraE#aDh86c1I_%CpCh*_fU|MKGu3?mx%?9k)gc76x&{bk6tB0u;IT zt;!szNPo47+tunf8(UCG9of3X%+y4%4}n%?M=*x+?2!uCYQp78wlCQ#cS8Ph+?T6R z8KK&qNUM(-yk!9!hY;BMlHbVp(5$wNPBh%V6;pWecSb`H% zQ)OZ_V6vDqny*onW>u>Jz?t=Vo^B9gzdLuX`85r4P55Ejt{)tC3!xv}0T`5vS#>#ccA0~V zgi>^Qx+V4MzVS5LS-z6o(UZG=jD&5!md7K|fo8#rG2aBu{R>6?X-j0yZ#&LZ^VIer z18zq(7~}PrgdJ##s+1t`-1DtbgDzPBe| zGE${(K{TQp?9 zNMoY2i1U&E$)gQ09-!p{u?HE=KVw+zO$3NRbx6neKC+*i8if*a3rh5y9JvV239>Xs`_F!R1 z39fwjhGk+uzad+RTN{C!*INm*7?%$(IufQ?Ea|YoHO@cKMS6E?pkQFx^nI*kr18x) zH50M*PM7RAeKt9M@vJI+-(rjTF=Nk3R4ctTsl_%$Jj+^lTxR32y{qkckK$sV>nFll zi;P5|S|qjY>4X2^j~;`lHEb9K40xE2mPUetQixM`Qe23lof6iMal6;}44B@WO$IIEz{lv{wgh zAMj0j=Eo8i=q!`)lPz-|b|gC;>~RwTZ1amjB~F+86}YfdHujDnONZm7so{JYCk%IA z&(nECo~kM#BW(C*Npax9L4=h1I7wNIBDYQ>w=~pij~Z%gbyD6;4BLy~>WNaAY{gud zdN{x{cFfaK3Mj$C301+4nE{M4RgRbRt!>n1v|gLU{2q=O`1fk^y~F^rCk)b)09Sf7 zqyFk6=@Oe};g9aqsD*HvLYq zi;+*AK6OF8*Pv@d%H!ZOL?_fHC`yQp5JZ6PHcrJZVZuW9asOt*5@}TuO8FS z-w_Q4SGu70W{M`kO);FN%cFXw{S2?&1Tt%?-$nzrN9DPb6`cyIgrkIRgKHKgHq*-e zrF1X1-!tE_Ejss|w@H|P%}Qr!(A4mak?S@x&d=Am4hW|Vo5Gwv2vocd4TMEgv3qvS z53%}4nP#Au8Do_p*$2TC{2coGMHlVWVV-5cWnha zK1X*QRfvcvfFi%=cu}W^t>{J&qqdr(rrWvu46UMgxPcXkNnA(5zhi2-M+xMUUK}Km zu|sW>>9fkcH<8yA3uqT?8?nh-?$$%6#P5HR8=g3HI7Q(q;zVv2H(qSEXlih^ zCk{|hze`o8Rf!S@K_RZRDOpwpOC~At)I*qU} z36G5U{z~_a@4USAgqz{;j7`SkV6KSZ+>Y5#z%(kD-t+6) z>8B;&?ZbSC+H`bQrq5MP_Fg7)1ZlFZgqo%qGA2|Aml8vxbJUyHEZWx#0X-wX1{q5Tu- zw0oeywM;x)e|r&v3Mr!4i@}1FgDp&iHlBb!nuQAoM#z`{@0YrV(UTUT47eMjLCc!q z_IqGT=~P4WY4}Cmnl#yM*WPNkp<7DK&#vDe~mhB$sAGCkn+@#eDO z4x2vf)ZQT*v!Y1MeWw<-Zzd~ItsLK|-d{L{6Xd4MD1rWZM~qa*D||AZlx7}vocW0F zV*kBmLWc0w1E)@B9{|AD<)G{Ndwr=QaQG*>)|_RL01h_zj%4DZ5}z6u7fe-easYKr z{eTa4WyHTF(tbiJ3QZ{VmNfwORT#{Kc^+MOFg7ka@WuFxpN-au1G4NTn`>@k@eq|l zt}fX_!>K%2Ao}rY9QyZP5lF5j3>emJOY>t|Ix(M*yBv#s(|rLzmfrPe6%LoHHK4}3 zOcdW~7U1Go;KmJxsF3m=Gn)9}#RIDrfHx^r^cHP+Q2>0FXPRE}#OrStF6;oM(Di?? z;lnd*O@yr#6KqJ9fpi&ZdT9eNRoB|v*|f&mj@xyS+m?a6(jQl&bQqb|rt4A^99aRy zegWUKryw9cz4L?8jIvNTTb8ZjwCC~LC1=_vA?BvU>JlY~X{0~BF3I+$S@;VLa0zy=^~F+qO)Px9sS~$>3)+w* z3CxzZ)abonK*pP+0=~6MqQPxUvT?1f?z<2$XPmP3kOt8Si?s87C)I9%f}CeQ4Hd^F z4v%QeeFE#Sy;&bOEMy6aA|Rqq-5W0DVTsZ=qL~4R;6~56@Si4Xnp>L(;`tN0f6v9VJ<}=t&C^2}_zQU;+BNy%WEg@z6zrW^ zF59)8M;N;7#JbmVp0i-4fuH#UMlZK_@yEAp=5SwR2^TAd4rO|lz;~dyc7m6K7d7Qe z@%O#y8qoEj6&Si;B_-4}jn_zftnz{_=~)kIQq9>E)$_AxMR(;zW|TUg?LBy=8B|mo z`RY?RYv!4etx16QR-(F#imQtFip&C9HSt;oxQR60ogSy*+2rvK!pH`@-#Z(%UW=-v z0cbZ51U**n(yjxuRI9EFxEgV4`Ncys&U6bJ?57IfB?uTD4=hcx%^_TvSV=ea4x)qL z@w`-+xBV~i{4ZH^qhrIX;WDo0pCpp;Mo|J^#|9(-tq@pbPc)0keiuIh(~^5|4g!f8 zZJ0x+;pW-tRT>JUr^&~$sN7_hm3xhthWtH+)M9UGKEy89SP97JQ^Z#P%B(BMp?9=w zxg8M?^!dxyj^%p*fFx{?O5oWEQWwC7?5pT9+iN;!ohIsio1`8|`bVpy_HnEPn=@e@ zU4tYsSH<*+ep^s(jFW7rq71I4VvZyZKBoHn{cy`O-#Y|j`3XRkW8K%rAL!=cZT7^R z77#YdE*n}pa-sJjC!23w=0=Bq-^u?fS+aXqcolv^0raA(Uub`n?g`OWvV~X!8XAEN z?7XIC;NH~Xa01E#BFkmO6f_?D9)l$?C~_p+(pvnc`r+F-8?%6M7cK(G2=8D8;cSkY zB?Zj0`L zYQywtwW9k)_!1H~{km2i1`0mGZp#lD1!GZigdF}zL$E$^^4{`@fXfgIoaSaF=I^`z zNtwRQ6%Sn!U3A3@uDU(_8+RvKU5GRa3GOq@dilpK5Q_~EJ zOgQ}uo}v~MGP(BK{7+n~;f73VK?VmDy~M~G0)WshG4-l46~s_UQ!6Ri&41S-dUDC{ zw}j05jvcTvVqlM8l0`^>I6V=$ScLAd_|zvOpy_o~D|DHhYu| zJWj`9G+Y>_nRj>(Qu3ofyTv`DJc6`Q7g}D*8r7TEWe_>w5vZu~<)C4LfPA(!hpuvI zWz$`*#s)&A35JBI(OB@*%8X3C4+yp=GF-Rhyd9GmJS8j_3kIvKX{L#Tj7l}d-1DE& zC(&-UW~;N=7My=;GWS#evrAF*J=fMO5b45-DRC%%{cC~w9sT)EpyeWiak`Q&%YN9x%ztUR|-IO(+;c1 zK0=2{;Teo_TH`C_tH2E8`)@O)<;?1n%#y-f9!LJhEOJ9dD32XzTZ;h7-hn6mznjOx zs9gO#zq~moP@SRK+Fp}v_8y7npK62lCrV$hBLvxY;xKxL)|zaFY?3N}-#yAl2Pu-V zKFNrE@e0LltkBGwtm^eU2wwbI@}Z#Zn^AvQ-&>HZA_i| z39A+LuskED#4;dg-*u6bywamPA{^EouO%j6LEyFF$tcK7w`RFXp#i)V&n$KDn6Gj}(>FuKlCB2DNgr}=v64(>ZEzMm!32~d ze@?42z9FVliO!C2m*W@CWridMu#hSh5&Q~NT|r1bwT-TMXn}1GxB{?km5Ehb06C~!@<~3;)9E+9>=AY0K~~G>0mVowaXJ+T1+30OD1Zp6Df=)6^YX(@zE_I zad}WUp+D6{Qet0ac_1lOugI{`ZQTda+bdvinfGv?^Yhj~&^iH&DO zSy4h7n1qXlv6nAAhX~~zf^hb*0M9#4IPwpEMH;CR?*@iw^o(B4vZDJTNqy&g|2_d( z?K~JrCYQ&CYr%8urRRQ82)sIZzI8pMiJ3&QV=0X~5o{-v&64^9%O<3| zvzod><0Z=VZ&PKVj%Cm`Gi~QV?kQl>yC5UoZ|MUjJYQ8cDf|w0mS7t%uM&JAny(DO zEiOjjPR(_ZBX`h|gY}#k9;-YBWEuFuhw|Wq)j=9V@t=E5iVCL9xbYjIHm%OIx^t27 zdL~n)01$k^x}bcF9fYkaJ3d7dfPDe~Zdw-v`eB+InSh8|iZB2ExPZd0M(z1HXNH42 zN8rk4RSe;0fGWnrKoWO#4Ones=c&s{bUCKiHN4S1zHKE}fIUrzG=BhQ%Y!am9DDI-DzrBG)3vJKG+Fvf>GI(^sDwtwGZEeml|`9IThG zjS~yo+$&KAxgPNK9!d37n^PJ1ti$Em(#stbfnWY^2G+iPkc}z%!L$Dbi{5}7dOZ3; zS1i#Mbp%Z&KR%Cb)l}~%Sqf5gro1!+p4b!&gLed!`XCqDs(TEg*Ej~Q?_iC6dCPO} z4>EOV z0oCFJ6NG@@dI&Cge?<`Q#&A+^lbLCYL?*<^ur}V2|G1;>Sz;&|ifH-f!{kQ)I0~JW z9A@e5Xh<_l0*7JrqtGslj6pOuxB1Cr+vx)YKmei*9s;VjTc@3?f5Q~6gV_y5CWYmt z8li7USI&c|yxy)-d$rQyoS51X#B4PP$XSC!jKl7StphveF@4Jza`D0APQs7d%n+5d zfIH~*3G)9m1zq|{QC_(}^r;o@P$%IBxm>Nz*Mw^Et7K4U3B*Bl9D2c~$z#ncfkLuh z+ehO=6=(+K#5u&bYLf+1t^I09wlEU93z7i59o#N5Xzmf>lPI1!sWwB#BRw@<86QE- zM{x0A1e4M(9IIU7G}ga5>+mXbM$Zmm07VlwE8xa}PU ztr^$H_r=HSZvW2J^5>CK^(fwhIECsA4i9fNHL&0)bmhE%URIB{fJ_vmjla6v(<4pj z<>+Q|l?^XlDlI{x(79g@W<0uS3f}uCaso(c7NuI6m?}JM8VCY>9bN?c3sGjjbIkFk zMYb(kDvjni$Hb~5Kbr29tt{|X@z?<_qzH*4T8FhX){EnZk5L0VO{=!^t`BqrxGY=7 zE^lw1o4+1`x#uxbUmG0N7P^R(I8$ww2-(_%X%vQs&%_nHoR-;X4CBv)2gHfMngR5K zc0!Elj^#Q0-$XGRw(mMxWbMvCPJ$kdvL`g0Cm>P1y}uV7pn;PIA5mkO*M*TMcODF@ z3>uPB7OCC|lh#SV#J_{hZ@t(R+3(~y_*rn#L#B<0Djw0c6luuOU)6K6eXK*ULQf9a zO5GASk|WlEfCJdx3={-q?&w;Z*zJJ zsI6AxutL-yE24zwj*GP@Zv9!D%B_N~xg!usv@hvDDc)RH0&&olO&Vnwjm#JI`YL@3 zVqL1kZqf>Q95u_h1BtLS+!(J4@5-niF6rUQ7pnFv6`9-KNw@icVcffj-32(BM3gC0 zQe8f`$c`Micz7S+Vu_M$i-b&isNppz**OjVg1=l=k6qjEjPheM{8J=ACRM^%^XZ19 zD0twXf`COm15JS;vJnW2a8<>y=li|DW=j85N-56fE?+@sSgFLs zGC6pPG^UQDI)tbK`yLj)Z+fkQH^ruk+rE)caPgLO(2XVZs z!e6A*ks3-&o}&=eB&ic8X8=L;+Hf8-P?&VRaWE`wKDofz{E?$XFKl5;S0s~uZO=S6 z%AKSV&rcWoy$`0Fkmokgm5&o>(;LWT5!Jd;ydLKZ^Vm3w9tNqulCq4)z$~g4lUzYS z2W4m)u|qb~l)(;*MQ8*;{r%r|f+Qp(x^hnX>$2^rCzo z%axTA3;Kydoo2A=#_2WFy$*4JF|8xlh#QZBATX0Qf;AsUKG4Qzc-R=z?!9&(iyEU* zJr*Lf|MFClQo}Wmd~Z;X1Ej8v7ilLqQgcxihOPix;diq5hjis*}#yxG1HjUtrT0t77$PFd0U;w zLHL<@QPwV2_{y{37VEiXvHpBl`Q#13iOP_msI(yO$ zwllu1K1Z@o>4%bFgFpI!Ba91fz0mHl!+s$ZTBeC9)s8q5)5>@vfC!QSs??!Rjw{Y}o@mKwQYG^><(M||~#x5!OwEPdv_&E-N| zlm$<!EyR8gXT6KX+72ClLriNrwe{$uUdWetKIU;s0&6`m7HsF4W zmBULO7vXJs8F3W9SPkHZLbz@=uL@0kwGiCW<=-?PZF8@D2f@ZU@+-!~DYC*U{*Fnw z1t3sznavOU6446b0R=%qG|eHF=vk{-*^Dib4QL#p4Ev1U|FyATzNZ|sqhSVw62v}D ze`e3YvhjOEWZus89TO;&?L;aeogBY>D5d#?-}hT8qMCkpWqho5B=iN1eQRA5iI`H$ zgQt%ms!pvdPzH=t(-$e056f?#Ok!@i{$T5mOH2WikZ7-t9-c?pnmwQo#X;#ovp0?b zN3-V-_Z4VZ2#otj(2ZoD?q1ptdT_PWQB~f&7P#N6C|_ZBiab<^Z#yNY14VZIiBOM= z0b+44go`cUnCeS7g%Flbp%kJtKFUu1vm zfv~Z65Z81$9T;Y~9Pu~))cRGgP_)z`0)rqZ_R90q!gL>V9mKIL$&`M(*pf`~jgzt& z$5rQJXvezGkSPMbeAr$(yldoxpmHx0let1WZx4*#92&(lW9aWU3phY7#&E46bWO&T z0Z$v<$NvU0{<{T4ahy9%lEf$`FY-^JVh&78zf#<84!sY(c~Un0#wltovx-)5o%-k| z1pK9!TW4iq&Lz~RPHeWtf+V`}K4{c{{uw)22MlA+R~iO$=TL&oNxv+P9gqVw=qJ=@ z$Qy>UlIs;4DnJ`lD$#J*V3p|e9zg8jrcm-_7ty8hHhrTxCeuPW=SRa@_`-=+4<>IsJmob@ zjNj}^7%`CyywROUFsWO-`5laAQO89%07sOgH@8EZTdrB!-A8h33}9Yhc`c>)!xZ!m z>v^iDPo}mh+>8k3O|3q;2&ehyx0O;r3RTnAkq9oVP)mA|JD(eQa(pFi?Slw{A1%sS zo)xxLjNS{FT*nk%SPyN{$L0<9pqB^y75j58i0LA@uZVWn4X?K2W_GMt<~H}OYMb8^ z`yh}#*|j5^NgQeTj>pJt`Xkt~m)x(&*-h0#97IMjgIq}vsDOV5mwIANx0nDQe zFoX&2#HH~U+FO&E`{D|g=t%LFQsFJksCjd1E`Nsq9^p7V8~y|5H>x_|8ycQL=}V$w z$WloKRAP>Cg?(|PzBQgwBZUsX8FJK$`5eWe-F4CMM#5`xvcX#ZLQ=Y1lh zWdi6zTV**G>YrMSRoo!eW8x|s_w zI<*&gRXc=#Wk;64Y=rO>Ej8hD4}Zn*9G=YO^C^@Tm5w7(uw#K!j#i+Sn7s12yo$B< zm$?AR=SDwuJV1a$VaK>1FC~#g3x=o@E-!|J+;0Xgk`jDCJhXt=e8EDIiO_+UCRWK^ z)xW>?!0qIzL;h1>nfwCf={(^>^4QFK9Gq~c)hUY$GP#HOw%E`u@9&+hdF3Q_Y$(&K z#-h0%n*g!QY673#YV6_%9tj@(Dnm;GX-h3vVW=?6n}wz+O&Y{HcH@E@RV(#D;6gV~X_T zNP7-kHeV~=1anb>tBBZ|WLRgFy|0uaQ*#XQZ^Sg+Glsp#$OwIIEsg0>{ZByOg0j>( z^B^iK)vH$#_>8HZOUrl+77qx%IHnt#f;)=(qz!1gn6Zuo5Wi^#1PyD9{a_{z_M4On zDTK-6uga51YsD6YB0emxrU9anU%ro#>3*ek&?VR0VNybAg>U7KkIj+Hpuu@K97!|; zSaP*V3P#*|ys+=U3TSH^S#}20>Ne&FYdsV}MlSq->Sm+u91VK7?hQ$5!g(TbM+5oR z6!F`dBB2GZXWFl+4oTdKXr&awV{4*=>qLZX9j`b7X(`A$YNM}oHKwGOEd-u4>#txT z@PCx)q4a}9V303s_?)5BBHlL6y4r@b_kVa(Z|Lw8WuK*!3C8l8#Pjo0Wd}W%g_=Rct#Xx5!=@} zEqXS|9q%ht;2QBvM%(~3$bnB|vN7W`pdr7vbC7=y| za^-nGR6!u-0(N02B_gEWwd$e!ftE6PgKJmDlKmP4-Gm8bewDHZK>j%?d3LRD1nt&3e=OSz?cR$GIAmZu2$xyX>DVh<%D}{L=aVIiCOSK-`Yz zp{^SUr=jb@)xkLIJ=euEUQ*r@y6$NZg+S-Z*D*^-{mIDSyG?eM+DchQ;o3)t5YeB^ zch57L)u_+P3Ar||wT*U*)!ddrW$^LX_^ebS6!ZMc<3PE2N&Gb*np{D*c65kO7;vXp z>^3-zqa?~LMf-a7177UlJB$FP#dQ0ENQt)Hz2`3)A`xq?Bq+>vbvDX?jlOibfCy7* zHI)x+!N^AneVTlY-(xQnwzIK^4#_bV(DV$tOQv36HV%alC853dy%LPNt!BQ|z1B?-`$2f!yPkfow!0ID?Uw|KZPHGI@@Js>F6hh<#xCo3gI zP6p_t%phCV)EYSKGjk+ffHhac)g0mZU&|-!Ok4q~PAb?!)-GDvWUaE$&SFoFMvb{^B5GbNX zn&LS9BuovEUFqja0Y>73Mn3dP^^@(bWL-*H8dFKPQ7QcuwEOATpogj*Hpn-XSHvnjuw_jY=eRx)zWV40A3(B>K zS08zcp$Cyq>k5n;|`X4b|JfhxD|I z_E+v)jS!EG`ZF)xH>l1X;#Ae%xM0P#+>otQH!U2)#ZEM;`lR7#@u^omLL=0&1Q

_hLhpBz#dssm0m0-L*qE0YFQW;!)h{g^LkI1&EsZ zM;lOt-lW20+=~DH@Uz$J^?vHLCfYq>+jC7RA;VuqZBqQMBd}6K?qKHf^%gmxlC6%S z<8>_>jjLlyshNeQgtx$}Jp&V)ocv7e0|)$ue6x^GJL?j4hb++2&gf5v^Ck~*8`>5~hLM9b^)Kq@4oYK|BK z=(5PB&}*TTx4~h31&=C3Yn^WQ`0FVJp2MtNILK{9LXQ!jTT?9q*%Q)jCnN~w&U8r; zX%W+)vk#^x4Mo_`s_-vAymOj2cke_I27D1lZ&d7Gi^QvYvajzteWi+#cIFV7f>h;j zSc52LE#rSWn@5&62^hA2y}aDn1yH1F)f4QEfPV}4QI6+I6BV2I) zm&vN47k!0!?)Ohh{UE}(q}3Dfcc)4x$M@TifO7P=|2g0)lHoQ-PYPsWl`-;)w->{a zCC4AB$T(O;F;x$0U@n(g=~pfUEXjKPT(pIh-P@UKL-j^w5dR^`?^99}>q&q#sLSZ0 zka>^|M-{XuH;I)`m@?HHK-rbk!g;-bD$Nohp!o+al}Iq*r?G5DGTX5=5uH$+WSAi_o}HNYVvP#sgSKBas^-IZ4rV@F2^ z0(oabY{Xwym$*$5iJB+;U5YuujDeY){-Ao8^L8PuR44mM*k=LXas)}42eWcPGLfZc z$1WPD6(}3UG)Q3ypsFsW#Qns2mZstm^qg6cj_%G(CzUe(noyUH!OR^i#Yh*`NperT zMeNcWHqYdPc5iK>bWo-DTGOZoZ%f3w3DHucqBiys=`EhxiegYyz~V%Fm7#48aioG4 zFkwh0UGv!lL6i3muXzWD4C`9_8Q<&eyAd*1#`L?>R-sA8>er28F0fD+2H+{(1ssxB zVde!wcY?POtl3ve6-}6GRQt0qJA^ePFCA29n2d=gmF%o8`>FJ)4_uPcM2)_}Ot)3u zlLIuEKL#S!9Kii>&_=gq^3&N)FCPA)DBb7zZkPeTO2eampN+3r4mlm34k^5hM&Mpq zc(Kvjj=~?s5HXO}a$Z@zh)_pWe?6f$S5 zK@;KxsA`4UN%6G#2w-oO>4OfW3#Q3&yny)OP9nt8V8{oJ_;Q;qbcEG2STg`ciw672 zV!s`V8~Ok_y-u)0FSH!PC%w<{@g2|B*hDhHoYXf8moI>f$@eWrb+!ZbcP>!?wWs`? zc#%O5KziVh?}@DWSLTJmueAUZDU`vJ2HA3anO%lZ#5cQtKty6leIVGL$lrnGK9OVN z`!Zo-;twU0rgU1mQ^h2hB*_lY{Z)7^;{jMdt7ZY5t3rpL3clwgyqLgMiLZxJD8r9P z<^(g`^K16nH6(q|bp!8lwT6#Dy(5SI&cvr;+)k%xZOSHvolo%YUxVbM411@!`nsy+ z_!`X08d==n-WzHvy)y_d)R9o%_LUgZ%2E&72x7Y2(-a)J+L3( zEYpuf0{9;^za}VA)TAL{I9|?O2)(p8UBkyz;i~*d46#)H+{@8g>r=yLQeuFYoPS(* zc^}VkNQnC9izB%YnzKp^lTQ`pgou*a8vPTAu(Qmd$?^o=X7ydSAFz)pNQgjAyLCu` znF}9f%w;0wndrD0jQYpXx#x9N7_-xaASMEIZ_nWQbJ3UB!pMiR1-IMd*5HS1^sn(7 zM&aRtsT09?qqbe&xVwY(e?mHKp>T4zPnsGaa=-nO_jLS$6g2q#`1~-*aom4P%$$Bm z63{ImFP{r`6IYxzF=BoJ;o|c?_{7xym~Ot>0@+5C)&99D$S?~tZ9@%DAt}0}q#^p>+SKR?(QC$ibnX1r% zHPuII<1#3Nxqal=F~jFth&cZQDX}LODgGO!OVxEnZwC*7)zcpuUP7`*PCu<)?`aSk z!XouMO0-G}FCTD7q587H-giYXce1)yH}}0mmiy%$Pk@#l`Yv`iq|jX*;T8GJI9~`O zrCV~-S2K2qX`pWrsoonw6q;a)Lc=u#=NL93>)P$CT!Zb8wc-WIkHzr~F1r!}Cztc6 zxfU$%*C*vb#~(;R32rtgSUME1im?>+R8s3)u-2DH5rv$3U5;a-mJ zKqCd~Quj5JG!|-g1Vf+UwvJ6#-1GGiqH4C8WjHlIGY#^AFx2su2;izukxLbc<;5_!`mAY?#ziXz?@t@H5MvO--|ueV=GP`JT>YzQG}Y3@Qu zi1L|wM;;|pX>;$Jn!b}@NWDA02vM~c_ciG!vRl=4tFnx%OthA+;>DokyE15Ye^1gM zDF}LfrFi42(qLQROL-t9xv0B#>aqul9 zg7^&jYXzN0ZdnI@?8@6WTThT#ER}1SgRajhtKks28_4v#%0D z`Vmsp7M~OZRw$xF;uK_j4Fs~Ofs1EX3R#5UwD3L z6Vj%oO3Jo$IwQ3dcujH1{@F{bmq^@x#eP~la}0tH(7ScPLdxzqRsgqpAN7_sOTAY$ zb&awX+Ep+ZP0slhdor^(3&89aPMl6CK7Y|5Q-#yEAf=Txp>DyFitZYY9hAzk^xZ3_ z{p(4U0pKUz;>R-pB^7#+e;}>jo;YleJz?k$dwl;5_Q>H2?194%*b|2zusaq%U`HJO z|DN#q+q!YjWnh8%;3@?Z4|cUWLuXogqU7dylZeMt#0v9xYu%0Dg+$qd$X~U6)Sz%MkpH#g&CE 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 literal 0 HcmV?d00001 diff --git a/content/fr/post/hathoris-release/index.md b/content/fr/post/hathoris-release/index.md new file mode 100644 index 0000000..c18d800 --- /dev/null +++ b/content/fr/post/hathoris-release/index.md @@ -0,0 +1,151 @@ +--- +title: "Hathoris: Retrouver la simplicité des systèmes HiFi à l'ère numérique" +date: !!timestamp '2025-04-26 14:12:03' +image: /post/hathoris-release/og.webp +tags: +- audio +- container +- hosting +--- + +Vous souvenez-vous de l'époque où écouter de la musique était aussi simple que d'appuyer sur un seul bouton ? +Ces jours où vous entriez dans une pièce, activiez un interrupteur sur votre amplificateur, et vous vous retrouviez instantanément entouré de vos morceaux préférés ? +Il y avait quelque chose de magique dans cette simplicité — pas d'ordinateur à démarrer, pas d'applications à naviguer, pas d'interfaces numériques complexes avec lesquelles se débattre. + + + +## Le problème des systèmes audio modernes + +Alors que nos collections musicales sont devenues numériques et que les services de streaming sont devenus la norme, nous avons gagné un accès incroyable à des bibliothèques musicales pratiquement illimitées. Mais quelque chose s'est perdu en chemin : la simplicité. + +L'expérience d'écoute typique d'aujourd'hui implique plusieurs étapes : + +1. Allumer votre ordinateur ou prendre votre téléphone +1. Lancer une application spécifique ou un navigateur web +1. Naviguer vers votre service de streaming préféré +1. Devoir vous souvenir de vos identifiants +1. Rechercher une playlist ou un album +1. Se connecter au bon périphérique de sortie +1. Enfin commencer à écouter + +Pour ceux d'entre nous qui ont grandi avec des systèmes HiFi traditionnels, cette complexité peut être frustrante. +Ce qui était autrefois une expérience fluide, à un seul bouton, s'est transformé en un processus technique à plusieurs étapes qui crée une friction entre nous et la musique que nous aimons. + + +## La naissance de Hathoris + +Cette frustration, combinée à ma passion pour les projets audio DIY, m'a conduit à créer Hathoris — une solution open-source conçue pour ramener cette "simplicité à un bouton" tout en embrassant la technologie moderne. + +Hathoris est une interface web et une API pour contrôler les amplificateurs audio fonctionnant sous Linux. +Il comble le fossé entre les sources audio numériques modernes et le contrôle intuitif qui nous manque des systèmes HiFi traditionnels. + +![L'interface web Hathoris offre un contrôle intuitif sur votre système audio](og.webp) + +## Principales fonctionnalités + +### Sources audio multiples + +Hathoris prend en charge à la fois les sources audio physiques et virtuelles : + +- Entrées physiques comme S/PDIF et ligne analogique +- Sources virtuelles incluant la radio web, services de streaming, et fichiers média locaux ou distants + +Cette flexibilité signifie que vous pouvez connecter des composants traditionnels aux côtés de sources numériques, tous contrôlés via une interface unique. + +### Contrôle audio avancé + +Prenez le contrôle total de votre expérience audio avec : + +- Réglage du volume principal +- Contrôle de la balance stéréo +- Réglages des aigus, des graves et du surround (sur le matériel compatible) +- Contrôle du volume par entrée pour un mixage parfait + +Tous les contrôles exposés par Alsa sont présentés dans l'interface. + +### Contrôle depuis le réseau local + +Partagez votre système HiFi avec tous les membres de votre foyer : + +- N'importe quel appareil muni d'un navigateur web peut contrôler la musique joué +- ou permettez à un autre équipement d'activer une source (par exemple lorsque Kodi démarre, pourquoi ne pas sélectionner directement la source qui lui est lié) +- Pas besoin d'application spécifique + +### Intégration avec les lecteurs multimédias + +Hathoris s'intègre à diverses applications multimédias pour afficher les informations sur les pistes en cours et fournir des contrôles de lecture pour : + +- Les appareils AirPlay (via shairport-sync) +- Les applications compatibles MPRIS2 (comme Firefox, VLC) +- `mpv` et autres lecteurs multimédias + +## La technologie derrière Hathoris + +Hathoris est construit pour fournir performance et efficacité : + +- **Backend :** Écrit en Go pour la rapidité +- **Frontend :** SvelteKit pour une interface moderne, rapide et *responsive* +- **Audio :** S'intègre avec PulseAudio/pipewire-pulse pour un routage et un contrôle audio avancé + +Personnellement, j'utilise les cartes électroniques suivantes : + +- Un Raspberry Pi Zero avec un HAT DigiAMP+ +- Un Voltastream AMP1 + + +## Premiers pas avec Hathoris + +J'ai rendu aussi facile que possible le déploiement de Hathoris dans un maximum d'environnements : + +### Binaires + +Des binaires prêts à l'emploi [sont disponibles](https://git.nemunai.re/nemunaire/hathoris/releases/latest) pour : + +- Raspberry Pi (tous les modèles de 1 à 5, y compris Zero) +- Voltastream +- Architectures d'ordinateurs courants (x86_64, ARM) + +### Conteneurs Docker + +Si vous préférez les conteneurs, utilisez l'image Docker : + +``` +docker run -p 8080:8080 --device /dev/snd \ + -e PULSE_SERVER=unix:/run/pulse/native \ + -v ${XDG_RUNTIME_DIR}/pulse/native:/run/pulse/native \ + -v ~/.config/pulse/cookie:/root/.config/pulse/cookie \ + -v ~/.config/hathoris:/var/lib/hathoris \ + nemunaire/hathoris:1 +``` + + +## Développements futurs + +Bien que Hathoris remplisse déjà ma vision originale de ramener la simplicité des systèmes HiFi traditionnels, il y a toujours place à l'amélioration : + +- Intégration avec l'API Subsonic pour une lecture de playlists déjà conçues +- Éditeur de configuration dans le navigateur +- Support pour des configurations matérielles supplémentaires + + +## Un projet Open Source + +En tant que projet libre, Hathoris dépend des contributions et des idées que vous pourriez lui apporter. +Que vous soyez un développeur chevronné ou un passionné d'audio avec des idées, votre participation est la bienvenue. + +Vous pouvez trouver le projet sur [GitHub](https://github.com/nemunaire/hathoris) où vous pouvez : + +- Signaler des bugs et demander des fonctionnalités +- Contribuer au code ou à la documentation +- Partager votre configuration et vos réglages + + +## La simplicité ne doit plus être sacrifiée + +La révolution de la musique numérique nous a apporté des capacités incroyables mais souvent au prix de la simplicité. +Avec Hathoris, je voulais prouver que nous pouvons avoir le meilleur des deux mondes — les vastes bibliothèques et la flexibilité de l'audio numérique aux côtés de l'expérience intuitive et sans friction des systèmes HiFi traditionnels. + +Maintenant, que je sois à mon bureau ou en train de me détendre sur le canapé, je peux démarrer ou changer ma musique très simplement — comme au bon vieux temps, mais avec tous les avantages de la technologie moderne — on n'a même plus besoin de se lever pour retourner la cassette dans le lecteur ! + +Si vous êtes fatigué de la complexité des solutions audio d'aujourd'hui et que vous aspirez à cette expérience "appuyer simplement sur lecture", essayez Hathoris. +Vos oreilles — et votre patience — vous remercieront.