From 335c8310409618262c123ff9555c2ca27533e832 Mon Sep 17 00:00:00 2001 From: Romain de Laage <romaindelaage@orange.fr> Date: Sat, 7 Dec 2019 08:52:18 +0100 Subject: [PATCH] Prise en compte des commentaires de Quentin --- Dockerfile | 21 ++++++++++----------- docker-compose.yml | 14 ++------------ lufi.conf | 2 +- lufi.secrets | 2 ++ tini | Bin 24064 -> 0 bytes 5 files changed, 15 insertions(+), 24 deletions(-) create mode 100644 lufi.secrets delete mode 100644 tini diff --git a/Dockerfile b/Dockerfile index 4a115569..c63b8c93 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,22 @@ FROM debian:buster +ARG LUFI_BUILD_VERSION=0.04.6 + +ARG TINI_BUILD_VERSION=v0.18.0 + RUN apt-get update \ -&& apt-get -yq install build-essential libssl-dev libio-socket-ssl-perl liblwp-protocol-https-perl libpq-dev git \ -&& cpan -a && cpan Carton \ -&& git clone https://framagit.org/fiat-tux/hat-softwares/lufi.git /lufi +&& apt-get -yq install build-essential libssl-dev libio-socket-ssl-perl liblwp-protocol-https-perl libpq-dev wget unzip \ +&& apt-get clean && cpan Carton \ +&& wget https://github.com/ldidry/lufi/archive/${LUFI_BUILD_VERSION}.zip && unzip ${LUFI_BUILD_VERSION}.zip \ +&& wget https://github.com/krallin/tini/releases/download/${TINI_BUILD_VERSION}/tini-amd64 && mv tini-amd64 tini \ +&& rm ${LUFI_BUILD_VERSION}.zip && mv lufi-${LUFI_BUILD_VERSION} lufi COPY lufi.conf /lufi/lufi.conf WORKDIR /lufi -RUN carton install --deployment --without=test --without=sqlite --without=mysql - -VOLUME /lufi/data /lufi/files +RUN carton install --deployment --without=test --without=sqlite --without=mysql && chmod +x /tini -ADD tini /tini - -RUN chmod +x /tini ENTRYPOINT ["/tini", "--"] -EXPOSE 8081 - CMD ["carton", "exec", "hypnotoad", "-f", "/lufi/script/lufi"] diff --git a/docker-compose.yml b/docker-compose.yml index 67a98203..de40219a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,10 @@ version: '3' services: lufidb: - image: postgres + image: postgres:12 container_name: lufidb restart: always - networks: - - lufi - environment: - - POSTGRES_PASSWORD=passwd - - POSTGRES_USER=lufidb + env_file: lufi.secrets volumes: - /var/lib/postgresql/data lufi: @@ -18,12 +14,6 @@ services: - lufidb ports: - 8081:8081 - networks: - - lufi volumes: - /lufi/data - /lufi/files - -networks: - lufi: - external: true diff --git a/lufi.conf b/lufi.conf index 8bde43b2..01ce1c0a 100644 --- a/lufi.conf +++ b/lufi.conf @@ -10,7 +10,7 @@ listen => ['http://0.0.0.0:8081'], # if you use Lufi behind a reverse proxy like Nginx, you want to set proxy to 1 # if you use Lufi directly, let it commented - #proxy => 1, + proxy => 1, # Please read http://mojolicious.org/perldoc/Mojo/Server/Hypnotoad#workers # to adjust this to your server diff --git a/lufi.secrets b/lufi.secrets new file mode 100644 index 00000000..972dcbf6 --- /dev/null +++ b/lufi.secrets @@ -0,0 +1,2 @@ +POSTGRES_PASSWORD = passwd, + diff --git a/tini b/tini deleted file mode 100644 index 03af82f09e6484df819313cf9fec158d6b4a879d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24064 zcmb<-^>JfjWMqH=CI&kO5HCT*0W1U|85j<Pfw^G9fx&`-lfi*OmO+Mrje&uIm4Sf) zrp^J%g3&)fhA}WOz-SJz2@DL(3=9k`3=9kwOb`JJCWr|zS_UG_0HdMCfZYbN4=Rmf zGf2$E9z-%Qz-R^r1+V}}Kgg{Deqb(xfL{Wb0i&zg!CVFbm;<5uK+Xf{(}3#Jfa-(M z7eEFxFfhPqn0AogKsW?s00RR<2-JTt+67`A1B?c#1qlT_ElB~f7g&LK3=9jbAmIX| zmq3IWU^GZANGR}WNealFAT}{r0IDbmY9Fp}`2h7FjD~U<^m8(k%uMuiQgm}N^GYjp zD=f@(%}n%)^Yx6t@d`2@q}JUp6l@bH7(ng=#RkaDA`Fl;0Ft*jlvGh6a>sRA#feYu z0=w@`@vaLKWME)Wf~FBrm<mh~Q1E5!VbfriU}9onXkgG{P~cHukyJ3`U>9;>QUIw{ zWnf^?U|?X-Vqjp<Wnf@11l!EOU<yiS3=9mQAhl&+V6cOVBU7McGiQhB%Nu`t!qxd( zm0w+c&*yR3v^TqcR*lh-??O9!Kk{wb9dXrcv2OFt!U&lYg`FqXct1X{>+z(TqnG=a zchnf)$>Mar7Q)KuYq_B6i<9fsH)lGw-n9JGEyE-7Xx_smE{oMPO!#k|eLT-N>Gs>r zi@po-T21HHknNF)NEDj!ULqb8WXMiJVXtIhU=TtPfp8RYh-)xnSD%7IeJCR=r$Eew zk=Jmjx4<F(0*ClS9OA4v-06)&{Z|~~5je!fahQJ-hkrr&5nDKe(i1lEARP9B(i1lI z+&I)fz#*=H!~N57sNaV}Jedi5{FdTSe*%a2LLB1fafsL85TAg<J%4bh2h{`E!gC8a zeE1j?R3YW0F{q$nU|=v}0;PXGh6GWFI4B%JX}Sd}{y-8UehXAcF)%QggU#V*n4%34 z2dM>NP9_EhK?X?%hd@Yu;SDOhKyC!9=VO>41W|tqYK|xaNWB!picpApsB#8ru)W+2 z6#@|TAhSWZ0&30&d5AbDAA-cEL&X!6AmY2A{!(LNU=U!CV(5mN4^j)l-ca=upyot_ z1Q{3@elddFBfzi#>Mxjk6rtuQghAX1RnFi9b|)W0f;z<BJ)nx3fq}smYW@Rhh&ZSm z0qHrz2y%}k0|PXCKw=>54>jiiRJ{a9kb!|=6;!-I3}ViFXt)(Z%|Z9qN~paXWFYD< zL&IS^G@K7W!vR!BfUMAks-FP$FH|{0In>?&MTj|EP<y+<;Umdl0(Czud<3ED6`<y% zf(&P1V7LS|AJ#qs)iofg4N&)NKy%MIa5;k+K3!1t3((ZRfSMlw^=~-Ha0Uj3SeSbx zAnxA?bw5K+W>PY!+BIV+E-5O`OwUWqVaP8i$;?Y(NXswEW+=`~FDS}S&P^-^v(qwj za*9(+7}8Tq3Nlj|vNLmXKpIQ(a~P5nb8_;N848M$OL9QkQgaJRDnV-F<5P=@^77+z z@{<!wGV}95n)3@v7~<p83W_rGO48z!GqM?qOH%SnOBm7$N=uR%N|K9HOA6A93K+n2 zW(r78YF-)0X^BPYAjPRgMIc*JQo-&?tw>ESD_}?~FUl-Q1&JpngRLr0%mh2MI5WK@ zGdDE_#0NPzIkx~rr4|+C7cs=ggF+#`xFoTtBtADWGmjxDu{bp^F*g-tE!Y`pMX9MU zb;-r0@oAZPnIN~t7o?;nmShxXrZW^I78R$)gB%&}8R8qCl3J9So>^RyS`^~zoRgoI z8j_fllgbdEnvz(O$N-azFD^|gN=+<CEn@KTbawR%c8$+T&0|Q;&r8cpFD*)qheSy+ z)bzxn^kN2(AL0}9QsUF{i^>y=QlM%W;^RR^L%hKdAD^C^p9kT@$1^0Rq{OFI6r?7X zfP_j)iy7iQ{o{*EQZn=6ON&!eV74RsF*7f-gdsjPFNGmKKB>4Eq_L=kp(wSuBp=CP zAlJuN<>w}4rWP}R<1;=dGdVS{IF+HeAhA4;A>OMjJ_s5V&N+$2#i_*%AWf-7@yQvf z$=Og%rNxQqsSMztg9Q#sz-1Qa=OmV-#wTZF=A<yV`*=Dz#~bMx>zTmWMtY!@8WRHq zGC*kv4?^M>0~J*ub&L!M$b`g3h{9ONvLH4HLoya41BeYO+aMXRL^6{T)MDKME;kt% zN~J)2CWa%>0_KN5q#Omcarq%yz$7exgZeC>HUU_WfdO7WfW$#<R+u=f`~ZoA+Nv;d zSUCq0H-`x_Ffd32K<ou|Umz}rNGc$SL!Ahg&_EIgg%?<mfq}sQNgP%Ng5)fa#6f-o ziGi>Kk~qk2kQfMiAc@1uWRQ3Ok~k+w0E#1!#JQkiASwY#9Mon4iGgqik~j}Y0E!Ec z#Cf4&AgTgMoDU=b#SKW}$PMofBymt51ge~20+Kj#J7fluxG+pH0|UbXBymt*2PU-w zNgUKxfQfHF5*LFBGB7agKoS>65<h?>4y#*1(kGC_r9c8ud;v*Z8Y%{&ZXk(++E^el z5PpCpE(;QX;ulEba!@f4^#Ms7)W-vff$$F`aZq0cBnHAB&2Kn7x>-x@6&O5P50tRJ z_{_+_;L&`9<1k1Tf&ZH(*()&oS52{3VBnW`VEC^J;%9&qynOKg|NsB0QT7T98K9*9 z@&cG21mc5|{L2Giz88oOO6o5+fcZ`!J}8O5Tma@<f%u?o^>PB3Zv^6llKRUAFkcJA z2PN^B1z^4sh!0BIFB8CgDG(o&q+bSr`9dH*C@H^m0Q0#(d{7d8X#nOkf%u@L`%(eS z|7EAZkO4}vF9pE-Par-hslH?Y^Iw7Zpd#hvhkqddJ_7MUN%rLfF#i^a4@#;pFM#=% zKzvXVeR%-PKLz50lIF_|VE!QxACx3tE&%g)f%u@L_;Lc6zX`+#CBc^sVE!r)AC&Z7 z7J&JSKzvY=dzk>{&jRr!85kH|27vjKKzvZrd+7k?cY*kzB=^z)%x?nmK}qeU0+?T9 ztH6*p0TiJi?9uq9gNcE`qt{18#G^MvMdG-N3OHPjyQqkOV)?}{P6me710_7&E-E4( zjYmML4;vnMahL}z%)SGp==C#?-YqH)pd{5hMdbk_1H(==1_lO?&hH+bB`O*oy(KCN zpI3WyUWW>Ys2F@+?a|w!asZ^Nw?@Umqtiu2;e{PP$k5W&-KKk-6c}2+mBj4_8UG^f z-~a!u2TB57?EU-yzel%inUexT=fPb|v>h1sffN`Xc=7okNQO7YNr7RP3IhW~e1C_j z1H+3GU@22aCk2N6poH>b`rrTmUpoK)|KISyi)gSv_*+f>|NsAD9WMieM|X*e1SlwY zJbG(X6kcSpfZW923Q8Rw-8Cu_FF5}G|KDAr0+x4p;Ux%>2RWd-1|(XdBJiR_7$SQ2 z-~a#3H7WxCOU^di>e(tVFqd<7yQm1f-1zVR{}=E6fE;bx?g;jdkS@YIDquJB<~k}c z>;gqL*qi%J^c)yo`~-)AX^<n#J1749|NnYb8o#^?1B2mP&(4c+9-WUonxA|K2=P3A z0Ms(~IDQb+u=Y599Mpe$vHZ{f|6d^LcT5jWU<mcloe-M9;L-ep&!h8cne+~D%4j`M zA{e_LB=P@28ozuCNRT1+FsM{W(}VH%f#gFy8sC9vkAwf1JvyIybbjzS_`=?U@tDWO ze<h-D)3{-#@yj#B9){T8V7t*lfq|h^Fw~>->5IJo|NqAxW1Z)qz`*z!Y}0-PKaj)h z8A@4SPv)0rfE)G^q~ZUC*q2rR|Nlq0C)lIg-0+e|=kNWXBI$+iZ&1SFZ=DKCXWhjd zhL`q>GB7Z_NCk_RDtdGm3m9J756XTo0>NVZt)MP<^kIJa29Sqec>e}R5sL#jijY%W z<DdWkU-10?|G(SfMeCpc|93g)J1}^39`xw8y=JcfNq~k2UPOW8*z~YHEV?9r|Np-O zlxm|7r%ibA`WM*zCH5HRD}u~l^9yXgD#&~Ri21MQ@yj#3*bLE^gQ@T3@BjZ_ltA>o z{r&&{t_+C2m&yPC{|`3&X88ZbGKg0@-hslx^Y{P%hW|T{y$Aq{b{;Ote_;wTz4LH4 zL-P+w{uXvd28QMzY$ZuAY(e7Pw%_b9Tw4qZ2<sO$APetm!vf;09Xud*gS`C02OONH zTkT+>!Tsz1|IQom@HV{NY|Cz?z`#`Y>cxeh;GoHbSau32v$KIs;q|vuVAy2<&+G^E z9T;BR2D{MI1a85qpa1{Ao(oH_FRCGig5=Rkkd43o|9@fg6CB=KfBpZzYdgdnFF{2E zOh3qd>6Qu%O#E$bpb|p|V%$+%aDX7YF$wGt-qp4W47)%rPDl=(0CJ-_Sju#QEi4e& ze*XXe^4q`v|0g(xI)-?5{tXTG?EK=<c@<P`zp(fPPQ)Dsj0_AVdCj)ZEfg3SI}exn zzgYJJ97668+eLK{<;N3<yL4?87(BaqRKS)ycHY?aL*IeH@W6|sU};l6xC>f-{Qut> z%V2l_)Fz0Ib&PR@<aEOWFHZgiSzjUwl7XaKn6wK6gHPxC7ae~<3QF&LcH5}<bUxc% z4@y<WKSAZ&_y7MrI*)>q5mSjk^ABEdBG^&Kz`(%oa^uB&kaV~03L9|XA?GbsP&Cvs zywLsm|3Aq69^JN0HVO=$od<R?A^Gwj*#D;KHn4!)`yG^;UYdi-1aNuyq8nm|3#J_h zfBgUd!sk0UzK?<pvX!$@0OjCapODhpEU=U*Gu)2I@6h}UZUBI7L6kqC!5*ETJv#q_ zBd-4Y|No9VGz`GGVV4HX;U1m$4G+9<0-4+S{zcUH|NnOdK-7Sv2_mfwm9_@Czw^FF z=fPba28j4&0ZZT91!^dOb?rCQabS3H7p(f`E<_D@!N7sx#WAR`Iy|rZ012;$3WGXI z5JMCU9T;BBfC@XpRVRRi8==CWVSR||6(Hd(sIVnm^$U=2FjN>cDF9KeVdTK@!UigA z23MT`5>|x@gPOh&)t(^l@PUQzL2B)XUqOlK<}OfM2%;t(q~_H(knsJT4LS}CyJi?6 zg6JVc!V#QiclLv%Zy-q@f=Gi++Bpv-%V7-88!JH)%||#qIw2NE$G%Ma`u{(qzUmgu zGX<rQpJ09aLBo_UGrs-*4=W!)@&DKG_Wo@;4h*0)@LCR{&!hP;qet^^nG!RP&Kn*F zAFz0I?|5JVN*M26SbPQNpF180AG35%eqrIj&?&mdQUTmNj|OE!7f4eb?2+i$!)X%` z>CL10jl?ccqXyK*;_x``q5^6vGrSN11y*;73db%`vFp+LtwgoKj-gb+!}dP|14Frl zN9VET2l5^V|FL>>9=!aBQ)DYcSOSCLrOpc;%||3al{2KiZ~o8Z80Oh|4N@+h3H9jw z8r=EYr(2J|1vDhKi(MD&htB&ijK2Q=-~8i0f6GHqZSlgs`G-Zh!he;c2TUCpJdT6v zQU-o`29IvjofZn<V&mc;Xg-1zH;!?K`Q;g!SwYf_ua`mV-)7dI#tICKucyKJOF^aI z>ozFgquVypLV@8$3%G^I-;xa~l&60N7mEQF80E^@FCZCSH46oXU8i*%7+!7$6-Dw6 z4BevBj1?F>x_N(_Lu)K>+`j1f^8bId<8c;HhGGCm0J!jTi~|J`C|<fvPntvg!}tf6 zQn0_Cnkz6czC8U8lvW%VJi2Wcnkz88uz|XJGpIRu{}ae{wlmBz+${=mcb>Td!>*U0 zq}6R(1aqk2ffwJv9yX0Phn0g{KmGp?ay2OO!LEKe9c(d!M|T~^PEdN;w^zr3;qx;7 zR!eY8)0Wv>fdQlg6j3`tMb@t4u=2|Az>BG$p>g%nA7W1DeQnztW(o}ZK*_E7IHO1M z{}%}$=eHj4>|`sk@<<llX{NxSdD)}4<SK*VrPka0ec!+hSDtGgojeyjnh!BrUatS( zk$l_ZILi%?t%e6)e){|W|BIU+!J#n83?mfyKmY&#V%A4+i7gEFvTcqTC^sJ5<zS4+ z_%A^2=r#>BgN4TOk1*Fy{0j<x29*56u^&`)ybuCe+j^jcy_wa?Oo4%MKd4N2@#n+; z|DX;tdo!yFSQJ!_ym$r`6$NKK!*3p)$6qY^`2T+=tB;`qv=TiGt{J*nznLm91h*b2 z<u$yG+|D@wDL_E!>P7oUPyx_+xTNsKo)7>3H(Q8#bROn!0d<aEoCaCdZQEjs5gLr2 z{{Qc`2G^)BSixSljRTiW2X~!73XNMJe|4KWo5Dh4<_Az632Je<FfcUR&NNV9VCHX& z17(~zh-KeRz?LERN2Y*H;k|33z_1HZNUQ2PFuceFOPL-rfmvYj;s1Yd=Ni;b<%Sq} z1Y#so9S?E14OlbpQjod9@H(Nu*n#1NAXv(@3vTX%_y7OD+yQDOp~N4k%L?k>GrXAp z9#jM|mZ*RVLmtBe`$03*FEl@ZLbpV;n{~au0z>l;rt+fJ1Eu2Na&AI%jS3HA$>(m? z$@&VQZtlw$QSZUYPZ;80XQV#a1h7|lK?Tw-O-5K3bAh=7!;4g~l<7TVSQwaqOaYao z&~oYpGf1G@c8)PPXptL=mLLBAe{tj;I91z%&9N;5l|`Kgcl|($M<KA3X*Ar5iy$qm zxAhblUh2TxJC0$Fp`M-J9794qJO2iIG`_jOz`*cA>^&$5_*><e7#NPTfUAh(E-Eab zQ5lck7!?*!wE-G3Iqssu0~&hq=}l2l0gVK(F)%QIMgl<NHG4r>{kV&Yggiu02Go-} z?xLaq>OH;Yfz)%|+8)h^Svuc=+Jyp8TRj*V7<?=rmp=CF7W3(R2kDt@ehYEZZcxvx zH%7(4@W4*csEJ4C{m&k&J$kFbl^LkX%kV<|9jFx;2Ck7omcCd9)!fI(z~I>(CIG6c zL9Tew3z29!2=euWx8RucGy(@XQqp^I>>WskSKmm10jW8$9h919gQZMGj9@XD1u~`a z2q+xEB`H#E<-)-5LK`IAZTrL!!;-{z|Np;u^9CHRsqg;(-_;7PD?$CkZHCZF#_+%k zD~N@Q4Ph4kd;=}5JRr6rS?Iv<V)q-6(``#I?fVFENfb!t<*q!WgnJz<W9k66Vj9R0 zi0P<)n(!hTB-L#z0x|`4gk|E}|NmdeK>RcH?f?I~!XW;6sr?^Rs6yHcFQg&*uNYv2 zM<Cc0yt@og0)3vY1H;R<f3Wsd@GgbG1cuJf9?eG@JUXAfxbqs6rT_D{bTcq8bepI& z{}U|9Znk}*4eElmFJok2=oak(*>(T>{nktTF27%Ry#XbxlHeDGAgvb6;G*;>C_Oa1 z1_zxbNI9z4wt;+Q{bK){|NnPYn1EU|2Vcj7%kO5}N{CgDK?__Ccr?Fh0F|5!FN8sc zL3+q6CC{3FaF;xMArBJkw!NW`;rCF81#ut?G$0mublZZ;BXBifc;JOGINVI<=);o1 zr&s^~gRFx@5Ntf6oAs3zsG#C+$p;nKYe9;-ZPOq&A{SPV!EWL8(N|#D1u6!?_UsQZ zabS3{11x1~2)C;J6=*2zr98;QXo!hl^uT^VE~h4fwejB4Q()Ky8V`k-cmb4Y(!f%t z`}JUsHwBr}{HDS104TIT`GgrH(rr5j(_G8f|NnQ}sJvJRQBkD_snH)IC15d#`SEb` zufF{MzuQFR<$v`099-~y2?lq-1i;k*xB<K$G_?D|{}nhff$CP!dal+3{4JpM63w<# zHNnXVG}vhQn!g3K2%%flP)~uO^-{^MZq{;5P>`2wcwzSvoPxgVf&&LRxJw|8zYCJN zxhugG(He;Y%a|V4g@uje%m4phCW7;f0|RJ0L0l751Ghf}m4wYl1Uhekay+zs`C|18 zP=kQWqw{cSG)VC)4Fv|~vg<E4zW_VM2V~*FUC34SORyt(jdW4s=^H4X_JO5L#o=!0 zeewVQ>n>0|oeVKg24Ws^VL1~N*3fpwT(AMQ-*g~xw88}8&mypt>1`dDKMg@9V)*Cx zbFjOo=zxO|+1-X<19+=+P~6Q98uDZVOPR*Q&AtjU1<7pqc;t)OAenAk6Nvf9>GvYY zJ>9laAeo!HB=itY-wu{BWq=!B_Wb{U%h&v^-$5h2Au2qb7n&c`^SAahfEr90>Iw{u zWq~gYAvT@T2Kxkg@Fo4l|Ns2kd{lTnx@}i$D=_T3fD}$%5X&ZO!@`O4`TzgjAu2rl z+m3Y}a_nSLIrxj!Bl%Ld$W&05jDPVV{$}I9kmfw7nfy}iFSxLTl()SBj19jS>++jz zFRFo@758G+GjISKV>;^s$f6n*p62KEFH9hg=hcQpBm+`{T?v*l{iFqRV8*lm|GQmO zc$y#7H@|3j84fBYOdz(r)dG7SDY-zJb*W%8c+Y8}jK*7lM&qr(Ql^{X#&bUV|NkX3 zI3qhSIEFihId=XBbvJ!_RqrV&Fob&a>VoKC&(3e2omYJ{pMv_;9tZz2zfgY)YMj3< zQ82s>>wo)nzVhk(=F<7!@xRC&aHreyb?Gb6&=n|CImSB1ImRDG>OX%z4C-6I;Q*-s zO@)Exp`+a#LmYh+N;2~@6*N>cHDeV(D;EmVGgB1O5;JpBQ>+wJiy5L_T%AJQQB=WK zVIZpmtqMWrgH~QBs1_p&MSJ?W`759prCO|@p<1lT#o(Nuo12)IqL7oBm#P3-Xp)~- zY{kXJprD|eW2F$BkzcL=T|S@yQkGhgS)#|q;F?#KS(Klbo0?amP?lJf30g`4))wOF z=NTUy>J;Sa7~mSj0Op3d208f$dxk_pxZa*VKJfuT{?4w!!SU`v{-FU3!Jh6Op#coK zx@D<F#h?`_s>NIke)%N|i3(+jIhiR?hbg4x7b)l#fP)8@Y${l`z$&AxJUu7Xs+b`< zB*@X(6~*(g)eosD3W>!E-~|i{h;<*);f_ImsG(JynGRiO0}obp)nawfx)#WK7bM|K zurO?m4w6K%I)fWHdKF6Y6*ANF@{3Xxf<4_sLOlI&Nce{`1f?dYW|pO<fK)nr__#0x zBo-HE=A|n@)}dG_fZgGj5A{V!z5-}93InnLXl(~W5NJ(H3RG2jW=V!ZL1qd_ccwan zYei;BW?s4#R5l~ASOFBxsVSg%@$?G;QGubJVA|8i2gD5tas<bkqf-!A*eNs^B<vR8 z3Zg(U45CAWgA74*u&a9*hz<=7G6K;7o)C48K0&@9euyiCcJ_x@798RaHa#Rb1Wbnp zxr3BNI0uA+X}91g5FHi*Gaw+y-wh-Z?&;_30b&G4f;xK)3=Bcw)iIy|gGMuWMU?_* z`4no@fQmj8_0XtM$Vkjf$w@6jQ;jeetj<3ahdRtGo0qRpQc|g)k)I7p2cUG4nwp{s zwH~q13T|IszCv+na)v@mYFTD-DlUD&prt*jum}d5T3ifH915`5R!~>X1P#!FtpXQ5 z(A=hApl4{IXP}^~ke*qhmzJ7rY-V8$R>i;&3R(pO%2Eo^{sAGL{(ix+3IRd>?m>>e z3c9)q(T+jx!LbT83h=DU1seQeU~sKSO)f1-RY+7QD9TSSO3YO#%}YrwQYgttRVXek zNG&SM1Z8xE{4{tT2Q6;`sZLHUh89j-44`5NRwzJABbcL+N+Slax(uj-l8nq^g^bjk z0)^bvVvzHZ3oZo(-C`>RSOEaa{$Lk^?SvNr3K~VJg{7HAsl^IDpw;jScD4$}dM28B z;9{`=lo$OReXJBhiZavFQ;VQ{h4PHlJcWY9B2b~2l9^hpqmZhXuBV`+3)TV36iRxK z&;h%*%u2yMH7~U&u_RR?7gQLOr4}XS7pE%ZmzETimgp%2r52<nmMD}KfD($a0%*Nl zG0Xr31>JHhg#gfUJ%vPt^2DM%P#TB0peP^Yoz!B5#G+J%^wbhi=2ife0;wr5?VxZ? zw^9gB%}arnB*h?0K(PbPC+fxUm`E?mFD*dUm#W|z;TaO|?C;_V3d!8W0)&8qMp{vR zu7Ux`Fe6h_O%QDW(yXAMN@2Kz^arPwfKw18q%un?6>?I`QgakEQc}|rOLI!B6jW0{ zu>=ZVh<Z}}hbW=Jt0%#6lbV}fR0*zoz+s~RTJ#4hI*ZjA7y^RggIz=7ojp8#ToCo1 zLT0f-X<lMkVrCAgW>m<}Qvj#Rf}F&XwEUu6Jq5?2RE5g?QiW1*VUC>2K$9g5NEHHX z@f|3wLhOg9Q&7Hy=2L{bi&7I|#Q<EPLSjitQD#zU38Z#pU|<N%gRDMGO;G@^xm3u^ z10@7d8UwG%g!#`Iw7O5BJh50I1!OKbfkBr!f)X607Q$v8c9k$=8C*dNJr&9`GILVF zH5SM)Q0-ojnNkc_#K6Gdo0ypgt(PEml0sg7QEp;RPNjkdxL_+TNh~P^m2{cvph6T= zJwz3x*oSI?a6mODNDDXwG4+95Q<|5ZmtUR-$~?vSc_4+*dK9w05}rrEb`)f$*s5lN z6fq#jUvVlp3&Y9<(CSoBNQ2h(Le-*BvXJ$_{G&8DSO|p!ha75n{eXts1t^V6{|o~1 z0XXCxaEKc~#TB45*zs715KyB(vsfW7zeJ&^G!I;ACl)INc)BPUg6pZw;ym>d1z4ts zv``bFIRKuY^|+$I3w&V-Ftu2rJToT;Y-&=fLQ$$NB)O%gfC^xcojMA|`3lff3#tl0 z`K>%3WL0^7QMMjeNWMZ^W(Bx#Ehx%Q%1O=DQ7A1=1q<jF!`k2ZMGBzg45}tlvGf2G zz|DPl>mOt{%p(dQM}Uej48Q0o<QIX00<Hoa7J6914kQGc_XN?Pi6;>4rw56DCJ+Zy z4ng^#1%e=<SSTMf6b<61K>45nXAnOJ$_EWZgZL#-K4_F0#IJ_(L1WV(eiM`rS|AAG zcR~5EdVLa<4;t+T$<KoF!4n7!3=E5)e9!_xko+nrAGAOa#NPzvgBA#a_&0SS{sS!t z1o3x4<v|MqLHt8dK4@qg#6Jb)gBApW`0JtiLBrZ0{s|}_G@1?KUxKO!&GUo!H=%sc zBshrw5XuLw5d-mGLiwNtfgt{8C?B*S5XAot<%1Rkg7_@@5ch+|^g(<^X=ZEC*cjNo z*Z%+iz`(%p;rjpo3M>o^2X6lV51NxYaO?kn2}TBn2e<$K2d(*QxcmQq0wV*1!~OsN zH-PqEJpBJ3v<A@O;s5`jeW)8A{{L?PTF3q9|9=lA28It${{P>=#J~{n^#A`8ObiSg zp8fy-fr)|P!1MqAC72l)8eaYXKY^Kn;lP{!|4)GUAO8P$U}0eR@Ztae4roGwg&$*8 z5Cda{0HZVyJI4e@b^(w$$ZtPx{QnQzD+2NtNE}3?s%KyT&A)-vb6kbEnSoEhjZeah zpSzr+fx%wNTFY1kwAB%;4zyQo!Oj2w!F!t=`2?DonB2MeI6SzSV!8M@oWV&7WL6FX z1H+74|Nn#c+CbDz2diUXVDMpJVCVs@Bfs<iKWGA-!HG|xm&u7wqKDaqPoa&)kx!$U z)r-%7sfdeD!;w$Hkx#;jPr!+f!<E~gi%-K1NyH6gp$-EB!yN_&hK{@c|AY5dIr0g# zF*)){G&6hgDKPJ6<dg8^6L92%<quFe@GvqkSls{rAC`td;bOwTz@P$+L-1ZBggJhE z3QP`Md=idebKJOH_$1uGOprd1c`=L(3>EkP{|E1#ap6;73gY7cnNh;Xz;NLH|Nr1U zM6P@SeN3)=61~h$d<s1*E_@notS)>8&1_785T821eCoo@G?j}_!;en^F67P~fF|Ms z@;n0r1IYe6Apbo2{~x>u%Y{#XDU6Q;6t7<x85kNK{r?Z%<K+&DFHdkZFg0=UaezY) z8vjfT3_BkG{}0}y<ie*=#l^?r#LbidRt)ka0|P?|0|SE#69dD7C;$J0_l7xv{Nn`j zk1NPOj&T3D^EEIrdoXhG8MuLC5bg;#Zl+`|J_AQoQCDtI0HCXNf_jeu6fb+27#LnW z`~Tk<REUDplQ-W4MyBap;8<|sX3F9MrCLxzT+hWP;0*Fy2m=Gd7f@b%@&7+~Pni>+ zKo2Ngw1LuDGm9Ia0n;`vJ_ToRygKo5xN|cdM&tV<^SvQ10;O*sW(I~6m;e6<@4<8D zo4}gK#mC_Ykq70G9A*Xvi#PxOgZFSb@d@;U(sv)TE1yCyixZzl532{CK^vO~pG7mf zFP}pZpM@hhRGg3^92~D(m>C!n-u(X$@-{RYMyb&d7!85Z5Eu=C(GVC7fzc2c4S~@R z7!85Z5Eu=C(GVDtAz%PKFGm1M!#n{SKZVh-@k!WuHn8zY*!elI@jux4YOwJ>*tidD zJWv99o*Jkh53&m;|MlPhd=P&I^xQPq`0D{q$oL>^{B;5|gby1}y#Vc;Lwf%V46rdJ z*mx$$Ob~{R_cB2Dr$e<d?0_;r<2WF7uyI}3c;^9Lh<z||4=5kz?h2451_lP$crVQU zfBzx=k$|fI59Pzc^8=JWfd^tf)EJsmuygFtE!qY>r|1}zz6PbALFsQ$noSVmUNI=G z2BpoQv>TKTgVJeGx(rIULFs8wdKr}72BnWd>1$B>8I=A8rP-k8FNr~EH7IQcrQM)( z7?e(f(q&K@-QVbZSp2}mL44R5P$038j8p|*&kzM4$dM@u8or((np|AY`303lnduoN z3L43p3PuKorV1e$`MHV33jRg;Rmu4ZHYH%LLq3?RmsVuQ#TAfRl$%)$UgiK^kx-PH zRH=|&l$ckNnxdlsI>83C{2@6bu_!%N2Q*odm{+M#kXlrnpQn(YRFaqpnH^F{&M&Cs z%1?t#As6STm6U@f_Cf0(5{rxTlQR=bQd1OC@{>zJ%dx;G`Y5Dj=A;%YXn-bal!Bo; zlr+JXq@*V1aAkrfq*E1OQs6Zr`K6$Fr{a>LOz=@XItrP2$vLGd;F+S#k_?b^PG)Xq z3B(4F(clm%<|@etO%>^Y-KnFHo1c=IR;i<qn+o<;L1|J>W^sm&LP{pcXwV$A4rs9z zbWxcOXwpj`Jg=0K!<C$0keONx3Kfv?FxP?AfWoH$6rd&0AObH~D9^~x1<z5z)GA~a zbETCQ<z*IUKqkLZ@)e5n!8T^4CYOLr0U4c^pOcec4)R)ZeqKr@=x8F)@-<NGCnn{W zrGote_8w?X4YckC6x=1Cl_g+DKw>p7zXT*zoROH5qmYye4Y1S{h0HuIkPyr}MIa9s zmn7zuWG3b)6yz6y?L+sb9v4@LhpR%czgtMSW00$YXE11`O_-;PtBZn?W3Yl}u#%2K zxMzrme`tt8xMNU|qhCm*g1?)BqhF+gx2K<rj)H4MK#*&2u!4UOm#1%lkEg4Pj)JG3 zvrnjtr=PomQ)q~SpMQvgkEgF^h^vc2h`$2JLa0%muE8L~d|iW_JskZ)9GyIUJVPRN zxZFHL{6J>9`3EUDDg-zNg?KuL`ZxwD1cU|!_y@ZxIQqFL`1$*J`nd&p`nkLMy84Ca zDR}xR`1vcihPnEMC<J>r`uKpX;&KcP@$e4<xlh5_KOi#5)7>LP!NcFj#Wg5c!O2y@ z$J5ct$5jDrm0zTSvyY>vua1I?qpzbo$aO&q{vjT&L0lkZ5Z5V$d$@vxK=wKMDL6WV zmMDR|0a{8H<meotqY&aB6r$h{)f(;@?5d;S7~~lY3J|v-e_tIgP;mOYfs}aqDLDK4 z`ME+&0R=V4)rc7J4+8T;gIz(Y!ERA-adq_Z^m7kZ@bp88K0PjXXJ;z~jnJghypmD{ zQ#}(s16{LHFwd~g&`i(3M9)$aA`U80%nZy7EEyQ|iZhB!ib@ib81yppN>Ymo81(Y; zOH%b5oji3*64Rl)^t@8Nq|(fs6y3}e20aijBe6JxK`*5;uedT7LYEXlWT5M%P&n~L z40=VWIf)<*P*y=s3CPOK5(d43oD#kC{1OJelGKV420if6T6#tKpu?;f^inh8(~1&v zQ{yvIiV!@A*7(GtqQpvw4j4Ntxd`l@#N5ne29U8J;~DfIh9wmjGw3Df=Yk3@Q0YrK z2DKAFWjeIlXMmkQ3p<w<)-HkB1X2rQgJ{saB&aO_(+@k}6?X0`@>w___0Z`;5EG0+ zXW}61FM+mqN}vXU=8eD#p#-{q(0t6d|Nrx$${Aqor5R9xFHn83_7kj~0u=_Ig$fD- zsB#8adkQq)2~uMKZD@fgkl$hYVeJ|>=sB)1{jm1g0cZmV)*b_y1;QXRKr{@4j@1RV zg<$$&?VkzI1}0=xIRp5NVUQk}Iv5R_V*|CVV0>8nN&?y-H2`U1U;v*}46+;MeyA`* z7W9l+n0{D$&I78y0;&)_{9yhE&BKA>#0jbn);>G{)emb=g7ky*!0ZRHL0UjZ4}jbS z3SST()}F2a?Py_OV1TugL2@7rvI|7Ra3uo+_)KJ&{squ>*#fA3(7ZQHEr^B+Gr(w2 z_#)fi0BsjFKo<<a+zZkR!sz^7H2Xp4xq#G7fa+(0bp$|y42bj8pj?K@X!>FOhbh_+ z70_e^;XvaG&S79+m<iPni$B;omkXf!8DI+|pqkM0Bj|7ykpJQO;pZ(wG=SC~Kv)nG zJ^a_B+3#TuX%Bl?L)8C)cQhb;^zhrsz`y`n%K=jc>n{m_G6n+!1G;*2K4>Eu$cr%j zu>O<;k@_z}-4D|bI^G84QUxOQgU$yAr9GH_SbqX`UN-DpY>*m|xiI&`(q9Lf{jhWN ze)xk_<Muzyocn0{Vf{IV0Em8Y=72Im6igqC2Ax+7ihr2<;pdnJf>bjwbfZN$dinvK zSOYQ(rXP0RUpM5~YX<P4JrJY7B)b03Q1`>iDX=2Y)<UR$Q27oM1JNM2qSG+DLE<pH TAF3a8o-RxbM8ouh*dPo5nwVrk -- GitLab