From 742a00ae8cc14084b37dd0779af80a8fa960b700 Mon Sep 17 00:00:00 2001 From: Ludovic Poujol Date: Fri, 3 Mar 2017 17:03:13 +0100 Subject: [PATCH] =?UTF-8?q?HowtoIcinga2=20:=20Ajout=20de=20d=C3=A9tails=20?= =?UTF-8?q?sur=20la=20structure=20du=20clustering?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoIcinga2.md | 36 ++++++++++++++++++----------- howtoicinga2_distributed_roles.png | Bin 0 -> 19711 bytes 2 files changed, 23 insertions(+), 13 deletions(-) create mode 100644 howtoicinga2_distributed_roles.png diff --git a/HowtoIcinga2.md b/HowtoIcinga2.md index d3ac862f..5e0cdf02 100644 --- a/HowtoIcinga2.md +++ b/HowtoIcinga2.md @@ -1,7 +1,5 @@ **Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.** -# Icinga2 - ## Introduction Icinga2 est un logiciel de monitoring réseau qui vise à surveiller des services en place sur des serveurs. @@ -10,11 +8,21 @@ Icinga2 se veut un remplacement pour Icinga, un fork bien établit de Nagios. Co ## Structure -Il existe plusieurs manières de déployer Icinga2 pour surveiller un ensemble de machines. Il est important avant de commencer la mise en place d'Icinga2 de bien réfléchir à la manière dont on souhaite monter notre système. Trois architectures différentes sont possibles, toutes les trois s'appuyant sur l'agent icinga2 qui sera présent sur le serveur de surveillance (master) que sur les machines surveillées (clients). +Il existe plusieurs manières de déployer Icinga2 pour surveiller un ensemble de machines. Icinga est assez flexible et permet de contruire des architectures distribuées ou centralisées en fonction des besoins. Pour mieux s'y retrouver, on peut donner des noms au noeuds en fonction de leur fonction : -A noter qu'il est aussi possible de controller des services sans la présence de l'agent icinga2. Pour cela on pourra s'appuier SNMP, SSH, NRPE... +* Noeud master : Il est en haut de la hierarchie. C'est la machine centrale du cluster. +* Noeud satellite : C'est un fils d'un master ou d'un autre satellite. Il sert à +* Noeud client : Il est en bas de la hierarchie, connecté a un satellite ou un master. Il agit comme un agent. -### Configuration locale (Déprécié) +![Nom de rôles icinga](howtoicinga2_distributed_roles.png) + +A noter que cette hierarchie s'applique en premier lieux a des zones, les noeuds étant des éléments d'une zone. Habituellement une zone contient un seul noeud et porte le même nom que celui-ci. Mais pour un master ou des satellites, on peut être amené à placer plusieurs noeuds dans une même zone pour les faire travailler ensemble en mode haute disponibilité et répartition de charge. + +Pour configurer le cluster il existe 3 méthodes différentes, toutes les trois s'appuyant sur la présence de l'agent icinga2 sur les machines du cluster. + +A noter qu'il est aussi possible de surveiller des services sans la présence de l'agent icinga2. Pour cela on pourra s'appuier sur d'autres protocoles SNMP, SSH, NRPE... + +### Configuration locale (bottom up config sync) **Attention, cette méthode est dépréciée depuis la sortie de la versions 2.6** @@ -24,7 +32,7 @@ L'avantage de cette méthode est que les clients locaux peuvent écrire leurs co Plus [d'infos ici](https://docs.icinga.com/icinga2/latest/doc/module/icinga2/chapter/distributed-monitoring#distributed-monitoring-bottom-up). -### Configuration en cluster +### Configuration centrale (top down config sync) Le principe de la configuration en cluster est semblable à celui de la configuration locale. La seule différence est que la configuration des machines locales est faite sur le serveur central. Lorsque l'on redémarre le daemon, le serveur central s'assure que les machines locales ont la bonne configuration. Plutôt d'aller « du bas vers le haut » on va donc « du haut vers le bas ». @@ -32,9 +40,9 @@ Cette méthode est idéale si l'on souhaite centraliser l'ensemble de notre conf Plus [d'infos ici](https://docs.icinga.com/icinga2/latest/doc/module/icinga2/chapter/distributed-monitoring#distributed-monitoring-top-down-config-sync). -### Pont d'exécution de commandes +### Pont d'exécution de commandes (top down command endpoint) -Avec la méthode du pont d'exécution de commandes, l'ensemble des configurations sont sur le serveur central et y restent. Il n'y a pas de synchronisation de configuration avec les machines locales. Quand le serveur central souhaite effectuer une test sur une machine locale, il la lance directement sur cette dernière au travers de l'agent local icinga2. Le seul pré-requis est que les objets de type `CheckCommand` définissant les commandes à exécuter doivent être présent localemement. +Avec la méthode du pont d'exécution de commandes, l'ensemble des configurations sont sur le serveur central et y restent. Il n'y a pas de synchronisation de configuration avec les machines locales. Quand le serveur central souhaite effectuer une test sur une machine locale, il la lance directement sur cette dernière au travers de l'agent local icinga2. Le seul pré-requis est que les objets de type `CheckCommand` définissant les commandes à exécuter doivent être présent localemement (là où la commande est exécutée). Cela implique cependant que les machines locales doivent accepter des commandes directement du serveur central @@ -260,7 +268,7 @@ Si tout s'est passé correctement, vous devriez voir apparaître une nouvelle ma * `/etc/icinga2` Dossier des fichiers de configuration * `/usr/share/icinga2/include` Dossier des templates & commandes par défaut -* `/var/lib/icinga2` Dossier de "travail" d'`icinga2`, contient la CA, les logs cluster, la configuration chargée, un fichier dump de l'état du cluster +* `/var/lib/icinga2` Dossier de "travail" d'`icinga2`, contient la CA, les logs cluster, la configuration chargée et/ou reçue, un fichier dump de l'état du cluster ### Fichiers de configuration @@ -270,7 +278,7 @@ Les fichiers de configuration se trouvent dans `/etc/icinga2`. Tous les fichiers # apt -t jessie-backports install vim-icinga2 ~~~ -La configuration d'icinga2 se base principalement sur des objets de types différents. Par exemple, l'objet `Service` sert à définir un service à vérifier sur une machine, alors que l'objet `Host` définit un nouveau client. On peut retrouver une description détaillée de tous les objets [ici](http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/object-types). +La configuration d'icinga2 se base principalement sur des objets de types différents. Par exemple, l'objet `Host` définit une machine (indépendament de la présence de l'agent icinga2) alors que l'objet `Service` sert à définir un service et il est rataché à une machine. On peut retrouver une description détaillée de tous les objets [ici](http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/object-types). En général, l'emplacement des objets n'est pas réellement important. Dans l'exemple plus haut, on aurait ainsi pu ajouter l'objet `Host` dans le fichier `/etc/icinga2/zones.d/icinga2-client1/foo_bar.conf` au lieu de `/etc/icinga2/zones.d/icinga2-client1/hosts.conf`. C'est cependant un bonne pratique de séparer clairement ses différents objets en fichiers nommés de manière claire. @@ -279,12 +287,14 @@ En général, l'emplacement des objets n'est pas réellement important. Dans l'e Le premier fichier à être lu au démarrage du daemon. Il sert à définir sous quel groupe et quel user le daemon est lancé. -*Note* : Sous Debian, icinga2 fonctionne sous l'utilisateur et le groupe `nagios` +*Note* : Sous Debian 8, icinga2 fonctionne sous l'utilisateur et le groupe `nagios` #### icinga2.conf Le fichier de configuration principal. Il sert surtout à définir les fichiers de configuration qui seront lus, comme `/features-enabled/*` par exemple. Ce fichier est le second à être lu au démarrage du daemon. +*Note* : En configuration en cluster, une bonne pratique est de commenter l'inclusion du dossier `conf.d` + #### constants.conf Ce fichier regroupe les constantes globales d'Icinga2. On y trouve entre autres le Salt pour la génération de tokens et le nom de domaine du master (`NodeName`). @@ -324,13 +334,13 @@ Ce dossier regroupe les configurations de services sur le master et les configur Lors de la bascule de `nagios` vers `icinga2`, il peut être intéréssant de supporter tout les checks fait par NRPE pour fluidifier la transition vers la nouvelle plateforme. -Premièrement, il faut récupérer le client `NRPE` : +Pour cela, il faut d'abord récupérer le client `NRPE` : ~~~ # apt install nagios-nrpe-plugin ~~~ -En suite, il suffit juste de créer les services dans la configuration du master pour paramettrer les checks voulu. L'exemple suivant crée un service `swap` pour la machine `remote-nrpe-host` qui exécutera la commande `check_swap` par NRPE +En suite, il suffit juste de créer les services dans la configuration du master pour paramettrer les checks voulu. L'exemple suivant crée un service `swap` pour la machine `remote-nrpe-host` qui exécutera la commande `check_swap` par NRPE. ~~~ object Service "nrpe-swap" { diff --git a/howtoicinga2_distributed_roles.png b/howtoicinga2_distributed_roles.png new file mode 100644 index 0000000000000000000000000000000000000000..e581aa5c7501adf2090f86c1849c494767ff9809 GIT binary patch literal 19711 zcmcG0WmJ`25H27nAtK#fN;lHoAxJj}NOyM$s7OmmH`3iH-5}lF-QXea=2LI}zH1#9 z>)`wDJu`dynayVfc?o1hJVYocC}b%~(RWZ#(3jv}1pHI*8*Oo62>1c*@J>P)s(6TC z2MS6MN=j5n*%kUA8NpL!qUynil#^VlhX9`RO?|&aba=~tS z5fW&$|2{~lX@)fsEHfB?zM`cW<|0QxAv}J31K~%?v?LQO5&!!Ng)mY!_Vn)}t-`R| z)AU)g9D#qA-JUjk@^42{7{`6AcT|bOe`#>sul&0kTIow@ZfB&|(Q>4Jf5YuO`)4;O z1ocl)gbjh;dUO8n4@Jmh^@n6%SUOSPum#~hBc;Fl`-UZR{NYa!28&Fv+nUt4{Po}c z0ekrWi@j2fJbKG7z3{M>1MCSMT^Kb^quPdu;y=Jbp2EI-&Z+uaGE#rGX=R0-HoSVS zHn|H6efcKYcVb5|%+=AqO$m*}?*+_$nM>L-!e3Furvh4UoO-bS(kl22n)~tv2Jb(% z&d}2gIa^-L!2A{KHi=;OqMtwYKM{EY5p7P9YW?GZ5QvjU;rQcUX%4&v?A~%4A^l}H zEdYwp;~8SgzmvHEXOXBEYzh6B9LJYwhDU;J=zn)(5&%*@+l!$8D+WNl<38al*MA4H zNev|CO;`^1mz)tH->{}9aBu$|?k%8ZutcQ#pY*wbBK#lB`wrg9=_5(%AH(kM(_h~d zuk{QvN(c%L+b=LW`A|VEqzZP&Xnc-Te;7Q0uQ-9&zb$VBdoR-iG8V}OuW zkDv*VYqHt#{3+}ruiJ~y25q%eT$)!zkn~f{+k*kPaJuY@#`n{LfZqjhl6yf>mRJy^9N!qg6+wM1Nx%8 znDNS8Q%h?xgSqdQ+b{9)Gzq2_+@X=89~}lhU~j>aTXQyNk;Q7I?W|NU@j@4~6P|E#~NxfbkXq zQm|1T4B8bVF*cQyP+?sqPxGD)xAy3$)Z5g1RP|##=og(H$n1JXurO;ufh&X2TYO}F zbGZzH6Gv0QO+?NuPg}d9eUA`IyAM4G6<`?At|taYYZo9_klC9rW=^ z^Rs>Gf?GDdMlZ(0R0qb>h|i`UrmZ+R?rK+VDXVwY>1(4c>4drjSH}sPINM zs*S*#y5!sCTWVfXt247=#!-uMs}!HLLu(Gzt5!aQXWr)%F1p02uGFNacBvs1@88yT z4?)({nzqbDb(>8Uj)pu}NbZl<-V~QhHo0~buq#4v-v z(@FaQos*~EMHj6KHuJ;t3cpoP@4ZZ|gOQ0VZg0z1-M8WnRIwW77J`JiL~QU zz5T$)&s+7xV$!mspg*_OI=txk0<|uMFNjZTihrf3 z-!!KDuvYm{M=4i z0e=H@__<20caCWJOcWF8An8)Fi_SClXK@h`_KNyiG>6{jsGbkAuNu!QZs6hZLSqhe zoZV=wE_u5vxM=Mrw$(erym7kw@grGoSSTco)5}IpOX#^do^n7G_s#c0P52-b-Z%Yv zs{+-YBdXmD1P2&jN+LB@M5H6?HVzH)7)x$CUdHYeP z58pkK(U27*{>MfajSuk!9=bYx5v?xPRRC2#wDaMjVBzMwrI3}* z>fze)I~Cgq!)=~dl~#hh>I_sq=vr#Vt3fd{J-SWrey*~Xv7OOPe%M-_C~7#lMo&Bu z-)MP%e@bUmq&#|JpJk#iGbuhWuFH;qG-X8M;WpP%KhAY>Xi}ERLg0X9OsbVs&%Mbo z{|S4_xQC!6Gp?k#sy}nc4dg4eZ$TiLH|fFCrWjeWr^hZJD4hNFdf9gqI)>rz1D5A#m5f6_pT^;(3(T$WQ z-Q90wLPC+BKI!XaJX6voflfx)o;DfPU{RHTAtJFYEmW0}U;C_Hqt)FdGGVjXj)fW! z-<(u$9#5})cy;%co-9McO)JlxKS+LIAV_FNP7H(^<=u=@aq2X~Sj|k%nA1oo1e|X` zyh4~FW&hG5Ob}*^6%29zWm&I4@(@51^d3C>n3(y}g7Bx4-o+A2o;I1@;#gaosgsC; ziR@aOqSim}`rjjwz`*gP@V|AMz%Ft*KqC**&q7=O9evh^e)Cueds418`9&1Nf}3H|~EbwG3jV-9eA($GM>8 zy9(oSwT8mZ7i9)&c9g#|ex{xFAMxo0^ynv6-}IM#;g+%=^Y3L&u3^Dl@4v=*WY#qv z$R-%N!rc&EL1X*=bb@Q%O^R%s7eXA4LGIw6S#$4yKIy|UYInF@#N&Rbk?elhWlfk( z4q~WhNi#m5niPx1VmbBlGSZyG%qZicS7Q$6Gqnm;{e zUr(icMNR@>JG%>o1P|J*)uMNZ-Y7S5P=#DUX{btpaPl1baymJ^(?ss=GF8G`y}KJT zI-Jz3!GgVsGf{iO1B->$Z^@G$`3Gux4;HnyjSEHA zXeNDnx$@ztS?2LFhQxX!kyH7LN7b?o1hS!S?b0wu7Oz zrXhaqTK@_O4#3ZcF`SM6vRP24cmoBydJE(;xc5aAf<>~w^;rdQww#GwuNePU8s{J@Ya)KrDE4=~51^W~<_J~P z{c99}Ktc}zTi1}k>kWtlm9xalZ2VVhpnyWjd-)ja?|Si%K5T|f-0g1-mPQO1x@%pb z|7T?QK<6vWzMj7LA}FWCs`>09Yl}F)q6SACYq%!X<}nFmhfXYkTZTx1goJ_g(aN9@ zwnaf@mn>M0_iq&#KVMa@uO#rsB+z{D`!vNJE#CG7!To!-4;`qkj^c>#h5cWqNo>eZ zDlY1Ge;O?vBzMI^N)i6~aUh#K;&3;hQdS16J(eHl??P=WnsgK7b#q;q zg?RSvz3tSssOYmf&(-l5%TZE}+v8spo-#%^xjpCmZNdaac_K(HGA?R_0w7i1mh=tN zk%%wsbAgrK#ft=WfDexYG%GsU$yjf1EgKbqi03>{3I;0%ikw{6d2PC@nvutbI>OKd zCv*IeOU_TuXx|M`0&3}YPTJ^;IM6QgQ_7#YBCLu89FM*3osFm&?3QmzzEx=tUV*;J zV3rj}(Z%X6ZuVrWs;pf4lRJ;Z0Kpf((MVu~zirBcNqm8krWsqiz{ig;75+tR8C$})OE4v&h@P}W=bq0S#X~P*OIjz#OO@26&on0mr(N2 zc%Yz=+!GFBhOX*cmVsE)GYEBPD`opnPyUicwY9DgOY>$g=l2-Z$@JZzOiIhEM*W(- z7lKm)Bv~sA^b6CRZp{IvDr%5^Yu)X3qu^cEbL6&+*W`AAu!Fc>uV?7&c0(whlDy`H zFOiaMoy#50OiwsF;OBgW_&>V`zm=4nF}|(chygF;WiT2IXA~usQH89ohK!{^K>aA0-mnkJ(L3cN^-;Wc!J62-L5I!NY zEH=99CB3J7x;!LM)VB5cM8kx1 z!q(ng%?xL|0?m$ZxKM%QJ2<<}?9bMKjfVUxrgY^O;wD>?8foaq)2@`e$8hB$WGcl^`KMh2^Q2k+X? z{uHHzfP%vjLyZ!&YeDxNpNN#AJ}Q^gb-xxWu33e>2^~KWCvZNa;uO<+C^0`Vrx5N$ zJ_dG20<8vAut7R(qfuHvyzp+Zv;``+0N++dlb2v%kXG)BO_SLBLQD!KyS zq|5L(si5ljxX#4>&*n0E21|7pFkQ{rRu@0FSJnE(Wla^c>@ue|(o$#y!QLiDtg`bZAWP4+DqP!da8o=Pg#s~?u%Hqyj6c~n0xfcsoFI!jHpVl zNVdAd7D7t0PSlmisNo6BkSHLPwP)RD{43()E94o8io!Xe~4RX((o zPg7%+4M2n^K*yq&)m}8fYW6( zacw=`)~eY{Qycc)`8SL%pYE44#(gsqjP1 zhX&eM?FI3NFTBU@WG&L=yL==K6Jk%{%=PRSV;H%#mx`$kCdFVTDS_wLS@>RV-0+3w zc;8Q0SyJ?Rf#vpIXU34P$MWXA6A3Ze8`1ZO@9l!uzX_-x1k1`yb5WE$(NPtG znWO>>SlxZkcY4-uUgcZHXdE4P)bqmBMY2^p>3mi$_NgxCCTM1;r!~*Rhw!0^UR7FR zIjG~gZM|;C`M#b^Di}Dq>`ouyv?F01oowT;;%foMi^@;D+N{@t*K_5X6GB==K-yCtmjc`p5 zOs7Sq=?LFj+}YeizM5u%K`X}F%N4_$3_tzr=jT-en+)#gMEICg7QZEy6QkTO+x-!Z zh+m5f$&qu0jN-F_^N)UPQr5u?(s-*Fvfh(9>^?ZG5_CyLBq6>`B<(dFFJ%pHMi}@u z9T5C6W)}6($smqg!0B?c8R_^1$aa@NW^lz5gP++pht!wG!L6uxWWI)8W&A^+Sj|NY ze+r>M_On=NO|>aGQU2A?I(u=15iVLO6`ry5JellKnIUbeT_7zpagKx7l_mZg`;dHLO}&k)ndR<CM&mkfYSdRL=9MJ1 zDUDDi3e}bLAHDH3KA3xI;c=_}9c)ao@+KpNVX(4-;B{DOmV!^_R#o;aK2g4PI2sw* zH3)EYmf3EnD}|7!Bc`MNj97x29*$~PSZ2YgMwO)P6QJGgQq zGp)LF0v{5$p^4^IArVvilwbK@G-}N%4T&M|W@c67eDc!Wc+Pq~5V`g!p+(S^Tgro! zLv8}Ol~rjI8!(n-q{JPX-kkGvly&!4XUgL2X)I6$!Wp)GqzJtsLda0!dh#NKL34Ya z4=JT8+Sl)~%96xYMa?d)R{Yh8wdSR<=q&c0f+!-}3O%E}^1MvdEHiS>?nkNW*+HC) z?u}JOz(eeh2(+Cx5Sw~5Gc767h=I1;sh3lcDwx=eMrAi%s(i+}DduoVNXF^Z=VH|A zo{Gw#$T6T8cP=R*U~JQ)oJ{{w*V+H>*a>91&7j?Xh_s94z11B>bLpmGt->h3PK1kg zuPXgKV8b)brb=efMZ9yFApu5_XNQme?11KiE_&)(5Z99u!8HNsd7Pitjg#A!MWx$? z$VOGIBHGA2HwW}68uGB4(~_yq#iS1j*OPAymoy9ejIHe&Sj9!T&JZGsP!=&zcr$rtjtreK3p}d3J-bbu|O?CAJ~t%U>Rv_3&$R+PnR5y z**+ER`wX0$$IIdtWu1xfLMy@3AWPvWs)jH=Hm9uEuj0th&W`z@F-5ORw<#!jVSR3P zlR5;GM06Y~j^Hw30p~=I?IF~{dlfTlZ(Lno?JO~!C0f1<3rZ`?mz*xl-%tn8la2bY z>O$%1rzx0U@*uuhvVH}ph=Vo~3Ahepx+}|PG)k`j-oQs%*E{inVktT`y;{&m)L@$f z1*vQWgz}!3cLb61clbskDU8Ev;JijOGi@oB@t_keI@Q0x`l72`Xnx?DfGCX~349Bc zd`Bkyro>ud4TpY=0!0=t-3tMtPPVT1P5Vh1sgS}HSL=I)Y(+XWTR$j|eFi~8R8zC} zdeIl7HYwcUpP3CCR~x~^%>Oh<}k z0wDG+*OMI%n4|ti_sdAMkJ8?!fzeTR7oSXv)i^&p4WR1$u+n`(S#4KwJ}c0}xb@pP zdOPfWRI5HvR+J#L)E(jF)TjXM!BMP94pWN>8zS^vu4@LAlK=yRyoDuYx(<3Xgg2C9 zukpp=8pLu3wV#-%Co3|c*#-f*u~uHwg-I>P*u#QYY-eT9hV}LBuXo+{#))-b4cA9r z=3zcRdzW$Yc^~TPHl56q5;_79uI-*xNihQItINf_W6cs+P+hES71 zaxo&0eBf98Vh}}jnHx2@zZYdN)MdN-Li_`-BJR#%wB(JgMn>(1DZ*m(!t!^`?b*RR znLb&V1K=g+q>gP`V8?BXX6GRO=d(T}_#yKVcp)SRNoxkyFf`XERK1iwppA~v@7#cY zg}JOWTJ@W(8=w`fNwC+96)F5zbn*1e*xu;&BKW5<9^SV#s!qOR_m4=|D$g0>!QK*>>Mv z6bD<)YEg7pT0X_j1bq|*TZOT1vXp6KF=9!h!a?6vnx~!8T+{uIIzn|{TwTs4R!L(b z<6}oJTo8b_zg4#M*cVO?y=6Gnxh|Wc-ZqN5TLXOKeW4{Z-oBrHomz3~d$X_<^Cas1 zw>#P(E$_#Zc#bUYZV4-_Oofj`Tq%G=JM}iPOZ&w7)xC-a(K@5V;tgINF;N%kvKfR& zQG?NKV=r_}UmAdNOs@dr0YAqdL~gs51X7z1-7~sprWy)8lP|ZvJDd3w+Zn!I1Bt?v zkc9btSUL0U>nI?=zqfi4P=;K?>A(EP2! zZ69$wnQ8U^+AN^g@bxi)i+4{~{@WW^Mg!uDD=mBZcRieF@I3Q{@FQ0H_-UmCq%s&7 zlK!jeACn2g-N1MMni(=ci*$Z=3IAOW5a_tyHI9`1ubB}COs(N#XyCu~;=%KwKd`0$ zH8U6xdY43W@gULHxkK5bhafxR( zeoQi?jt3X3X*PI|ryP3keCEq7wHty3eS{T0^EEg$1z1y`$|q<{{DAAVy}Xc*Z}<5F zANbheT(qM`HtLCpb-8rEu&1V`8%{mR5!*|<(@-w6jLn9(4O=kUEwr(2t2IcsmMRL` z=DC{0Pb5t35(~_jT-;Y(ptH1sL8h-1u&{_Ps(=Bj)0&Rm1C28ImGZ83W>OBe>dK2>!GS_>gK(#`DeT`Y{8dNp zWz#6Wn3{t_$WcwT_?avE(GjDO<~8DO@G}J05U7J;t*jd&AIetm@4alP7(`zevQ>y8 z-QSwAE8p=x)@7d!DqEVTkGTBHM+@m%zx{7pi;vsN}m zLF0Yqgbu0g@27woxi^KQ(D!^i`YAt%0qi#nAx9IZE=%(+T4=_TW=+>{Epnz=RcjsVFO?$3SNv8QK7YYP!qkIr&)4) zFXvUP>>{_^2bt%hzLzE>#tIlRk5yZiCd6jEBi@!C>Mb9;06o!zg)Fb*i_#-KsKpBl za6m1p0{BO8Fa%$&V2t?mP;m)9dE!dDY$=Q$C5MB)XON`IowwU`f9X~x%JHa#+pCHv zm*s2M+fQz8d+mCyz5zY&*aTvLS)a3-H=~x zxcj+=*<=xoanqoJlygO6Hh9STjN3bzq{NfMhg}%l1ad zvdxx`P@VJlMCxBT24zZE<$(QI>9PNbvac_;e>22R63m zS$D``=&7fVo%Uhd3-zJ`exATRiOywCJ$xjuvmqgT1og8UGi@H0S;JG5=J!0O_8iM) z-5jLUj3_%hJMsKS-gH`ZI6InGwRpt5cd++f?OHv9(P2*R1jY4t(6_tTE}1(E)Mffo z#h3X>Vq;7X=LOTJ9aix43jw)A5ZqXkA09jE^@mc0+P4e$9&<68?1DodNgG{4uD2^eHzuX`Z^Oy?DxV(}>IE9hObYXHxvb#bZj}&s4#4i++K59k@64Qs z^@6Bcxtv7`a&v8i`z@+qS=@P?E^>~fNRsoH;3Y0nkmEUgKEH9=!7%v%vpQcf#n4uH zBoNAidOWfz7GGmp^~Pyq;%wcSp^N# z^);AUYFQS;1zx)!7`)MWCXGx} zw~A+iXcEW;AaM`RaNopPpX05|9P94|5{{&(LvZfhH3Pem??1^tygqd)w8N0p3p7;G zV$M7*akVU(eA|tm`+a0qGgvK-CZYU9cIc!{&H9-7LcLoa2pD&MK#noRsS94N1o4P{ zS+cJEN3K}V$_0A1>ya$3HLE(_Oy$fOtYp}24VqeSI3BlN?W*@cf+sGTWx8ao2Qyk% zb3o0K2h5aim8$ znr9Fmnps7GUuY2+sECkA|7t~lZQiRyz2)dP%k+bzPb7v^o>yzOxQ1OyK+cdvt_;X` zroG^o)Jjx;7~&^tRp$NPh|6AW{!ISTxYXF1S&gCV2jR(e$V$Ij3^i%Osys+smzfoeco}|Byg}v0+fX5RCXR6Wpy=d;m<+NPR+>wm$ zoRVJ3DB0>0r?50gNt21~)is6TORgJk)#BK;(+P_*p9$`-4W$)w#m@(b1PDT{npr$9 z)><*QNk+UuGkjl!TyY5RVepBI&ATTwzpsBn&>;1Z9M67A5e}y4&$?1&$1$HsArV; z{ngbf+1?Yx>6vdR{D$J_aP?#SgIZSdN+ zQ$70rib;zIuX3A>G!cIp24CL$;;TJS^1|KJo_RI>nSU1qpP(zvBXCyU2>J( z{E>gxLDLhT?0uyrmyYzMb5Z{js(X+fWHss@SfoL~4j)~2NnyG^eLGcHD^xGi;gCm} z7UwaS zO@Ai+Z}77o0DV(%nani34GLqVl6qSZZa#;!!bw}MRUW)n^fA=!{!MPZ+`9z%B8=&e z;AOeI%0*FriiYwg&r0t5}=3qe;2d1r{r4Ut0Y*25uJfG zfp@HF39J+_IX=-q8+q(G9!fT8t)%=irwD?x;He~xb#qQMb-XQQ%5%Fcf69~7Ehacv zL0pj6J{2q>G+6Oak%hQKG{I{4-Gy>%u23+I6Ot$hsqib=kA|E0q`gMwBvnqI8)8s!J?tdWbMQlNe&K8m z`yFGuuF$Q!yPKYM9FiE`?L7O9g67T3T?xXKU)jX84kx^lf+!#dypXlg5Pctf_gxxj~EFW(~HOAWBa{A)a`Ezv)Th2$jL&@<%?Z66QX)i|CE%v5B{uT z*M+I5X?HgXKWDU+K(fl2Fsu9xlHTxPtyZ*d&KOCq=|$q#ws7=rqMkC>rU=b)qS;i+ zi9T_SuRzuanE6RZAGdAMrR5`w1VPFRM_-PtO4Yi|MQagf1?C4H5nmplBHp?79Pxk3 z!aksPMTI)mp?|&}fy^6{+&82Dr%a>;La!-zp5gfOwFLmyhb}ZG0e=AJ!bb$9Z`OG3 zj~(5H0UDNmBq4)w3$Rlu%VRb4|8L{8*{YiDnyGrBM9IHXCcJ{akg`3fi!hg~J%#>G z8cj_t#fkB+Bdw(Hk;Ft4BgD{62PG{oCq$qFe*((Ly|hfwwB1!eDjWSBjzqxo3_AyS=*6k(K92!8v{E?k%1qI5009UNID zA{d^q1JSL6M#GcztAv*MP#>Rxk2skSgf)ueRY<~P?VMf&&|R>k$>^y#kN4foYfpx- z^S+K(x2YP2#}_N@`uM9nZ{5ut-w;90X>T*tjnFij1vrQh4BGf_GDf50ee_1>?!QV# zUz&&(DNtpi!`}+n{eJ=kK{aj(No#nf|F1 zZZ$dz(bKzFTpYzR9s|92@D6gg7bKt#J0}UrM2_&afW=AJz~j`BVP~sZJ{a37+YwAx zJp$3N2M7JgA$M`HhlfF`^NUIbb!-5rWAVS; zyeN1a`7EP)tH%B*ldd%vjm|~MJn7Bl$|rcl^D<>VJz`?4j~>)7x-VGxN-OfvK-|bE z%|Sgs;L|wyau3YwH>+{zBqd1IiFZ}u`uQ$4Z~R$Dg8hgd~*# zJNUy#A0>8T6^!l78nUjEqcZ4;J|fcWx>KO2e#;nD*u4uZ!Yj)FlP-6&K&4dso$Jfk zLCFdC_U0F{`0&AqIrubTo@$D4&AfU6I0!k3J^J;2r6fAxz*v>WtvR;BnRHI%9qXyN**e=IgUxBYy4W|_sM%nyv`bLP4c0! zh}i%t=An@dK;%*(f)#-;w04H(g;;dhxR#Cjb$+E3J=zVw-(~pk@W&e5T(D%f0;=;) znsouy?vX}(suVzYjOJCsNU=O20+OZk8&MjETTf8{$DvpQ7YR*xvQzW_nnk8$}DN;7Hc@aw_5J@ZDp43Z`F{)heB*ri`gg=Tjf@P1u<4Ov}MO zjAo=?BEk#^N1}|kW@H_!>;Ja#?5*!5r>m;xuivn5x(|g2E!yl?mvy7+E)t?N-Sk4jA9+IgAqTxOW3(*kXgRWA8B>$ zHWN0iiM-8zSW1phH#s3gEhe4f^F)}b({I1Or?M>~2Fnx{N z1@)6-J1sLGepM*FBPE#o4XZ|9O|j;J0sGXR$(*Gar`@a1O5srh_V?8}T1X$Fnl@Tu z&;kepH_E*qo+Db+4HjU_MwGk+5%s&D0QxdPL)ffZoBhMZhDPHw5goOZDMPfCTxdOV zL73c86^#T_v{6p<;%^R(IigpzUg z3z^$tp;s@~@ZTVcrL$bR$^-`TGJil{=A)FMOb8QAYw+_Ne0bcWJxSloTyj}eW5maZ zkl%|+rv?YSg0nSbG`s!8@aCjOzwVwX|Jr{*CfYU*OID3BVF%G@4d?0DMfcaMb8sMS8zHmjx=v@Ja%%zsY0sed)Z2 zQk31E`a>_>7EC#Vm@?DYdxRVdQ|r#0fIt>Dy|w{I9r%*~>c^lU73YNS2TUwlQ=!d1 zwV$JqM*UD(<%#zzA%o|!4lgqL3KL(?HJZ0MV$!hc@V{V*AL9DtIcp4bC2q7VO$t~x z&yPHRO@!EJj2}L6MN$*o7ZBruU*O_IaAflO8|}?GA2N-b;%NPP?F1XWZhdZQgi|{g zK=yokceyw<@MzR*S^gW7U!J%NZB9-&XPM)xRuLAoe28^`(J2WxZ+k%;s!4@6!4`q!v$f-N3tQK$qWi~o{kJ2$+jHD5;cj5ezbTj*d0!>9nxn1M9|^%^5qNxl~VZyh-=|eObbsx8@%ZNl6ZY;2PTZ} zwJE#p#lfrzzwd`})l8a-`6c7LYcN$&>vIaZ@(Z{-ZQ{$Bo7b60hw*l4$l{ySIvNpFQ6dl@*^&c3*uyI)#M zDSA)mUOpY$fr*WI{srp5Mj`$>0s$Q1RXPPG-Br|nLGz&uCLQ%$sq}|Bd~sIwVifIq z9U@M;=PT8unoP-GVog49FN~CD2)#_ZLxw>kX66Nbj;o9e;3H{hH8WxR>A$m})r1+A zYBT2X+V4DDLpx~!SLp@$;10N)P=9}Ii@|Xd|%o) zmgjYwy?`ZBEK;QQCU2vN;09c+g#V86?r@89(h4X>uxqQSx90M7{1Omx~rjj z|K^xYO{H0c8O$-XQOW=wDgd^>XqYEtTOU7mm>?7%mu|}eotS#Akw&7qA`iyRs?8BS zC@>&l$Fmr(@@Mk>W;b1@h2qEZ_(54+`cpI0l-{uxU9yeJwIqUw-Y(WN?nN= zXtn!nT(Of`n=EPDtaig}JD+4M2~87oyu8{#VIe5ZTKHR!%U9s9iwxDys%9jlOLZ^R z!r!&ogPt7K(|+6`!3Lx(mViL158N>gdRAw6jEZN^bN1vvr}BvbLA@?7RC^2K&4p0{ z*Pje*`bl73Tx*>e@M-w0{X1rAL`5edU>4%_U*H zx27pY3Ma?-6LqTN5`czk=)xC$s?H|*i1oaw+n_HBUEj3gq&8j3`*DWO18EG zS3vZ1V0VFP*(FQ|n9zVdF{Wgxw)FGE#5|UMIKMV~>$xa3T1le(YBxf^x~POhFI+E0 zC7S0sXZeV?zl|R;iIx@oBQ=Npm{8}!XjrykX&bNamMy=}b~2f0ncr1E%huv-%)TT` zlZO1Lb{lL^2t_eg36R!|9@4MZl{|@hJTYD&5Uzz4%)NZ28-rg-QXRU)652yVxQpa%d!1_cQkN71~}E zhWL|nfOR5TLcw1RUDT@vy|QZLw1galj_VZqObbvWu3DVH7#9@E$&%sK7t0E4Y1owu zstx$4w0uA057bsG9x?+8Fj^WcV z9XMs6(Zo{1(QdCtHA}S#0ybn#^Y21S1cAUt;U8fzo!4|GE`SvdlsthkK|0gZT7$8!^_MQ5?=ZRQ&6|9Put$^ zxFT>6(+JBcRg`_qVvD5&1%9Eq+*B!)<@AtzXrj4=4%^fq-fe|zYnS$eW$jQ=&RyNp zZ%FoloQ%SSTC}@@^?_aXR^a4h@mr_+^WBqobPI0J zhqYPLO@wqwp&ucBt@5*1<;8X13Z>H2fZ6Mo9cK)|HXcqd@hJrv$A$ikky7O5gp))> z={jnDlj+e^IKmC~njFo>)e?rVW=;-JS4?#m2KPw1NBrLCQXHNBx;iUf6cklYb(>lH zjt3>yeW73mIbD4m1D4my$NGEqYn*qIQwXqqEw#5-!%p6GTyJ1>UG@Xe3m$Tvu~hZ1 z>dX()mkzlCg9W(1yt6w74h0`VD6gIA|4fXOx`t>Dt!9QzRjX0@)tEFO>L7&w}T7zyB5m!lCK$I{fTW6uI4EBoIkvaNET(73E=V z6fN(6Z*+4dVq0z>Cj8oQ2a z!*7UDjE`Hy^P?wCu+cUT{(&kJ2H@eGFe#NSdHVP%0_u{GJ!IYzGaw5#Seuu}zwK-O zUeQ&Z+y8&B=>A31Qz`|FrvS_kAoVkDHpuaKi%-7pJw$?5=}{aPtsp9+J<$F5c&c3I}zDME*4brfuq8-n`y!hpoP%YMv**%dHcUyc;I*f~7hH4tk)st9VOz!DC{K{%+~`_JkP1#~rnnG#UmhQf=b6(g8yR=Hh9t5Ee~ z6JzX;*Z{!UUt8-|MZLxx*+18$_Gmo2`F8;0S`g)oU>6coH%<`e0Abo)l^uZAyO-;m z0s)Y-_W_OQX4|Rz9^!SQo|NJb+HKp5X|*FHyiF}oDDv`?P1bQVg#w|21>S+VswU(p zJMoEbtg#Qf*w=?0@^^OKVHN-3#l6u}vZ791qM~X4;9+SE{llN^*TZ@OUlI_cjVD|W z;zEugcPFm;qgB&2C(MOIk(>iMpQt(Ss5d#90(h`{OntfSQ+^_!4eQ^f5=s2-{PsJ{ z!}~h%5mL;a83TCDVyQq0&*kY;o-XmaEdzpv;u_)XNR{B<1(ybD7x}+K?UK4$hKWLB z`e-dAi0msShQ0UekDumL>sdoAO6Xf>Eq4rt@1CmiTT2X)PwC&!hW+dr)C}vdI4y11 zMTvi1=D&4mLeBZ@w4ypQr*WQc-nRdZXB8#l>ek!~HxqdR^ZoD|z2m)>lv&1v9x_!Exb4ur*XH2IyxJ5^7UeN=?=Wt7Cg1Sqmi#QsFRJxNdPczOcr6Ec0$OP}Q6VZ|8pY>HLKslQ zCkSlukaR!j@}Py2WD4nWddk3OGT}NGGocPi*N%xI@m~v=Xf+Iof>oTH)G_h$DYr`w zw-v9x)ivh{;(N#4ze#}%G9F729II*_-SyNVzK$4I+`fNi<1o-0-a?RIuk!m=q2fw$ zR58p1;KCFq&vTS3GvR_Dasbl2`Sr@or?SOwfB4(OBDITV_v4k_H1FpwY`Wj_3~eWM zgY(Vt-;+IU^|otpQzp8BX~@doNkFp0{PGf;*t_igLE(=B2gs6j&5fc9h$lmma|gwD zHd`LNSFq5tdM5b?&Qtd_XM7KQSHBf*|6R&mZICHQ-{t(tY`%;6g4w>gdyUZ;o z!COhY!xci}Ggi24^Le;F(tF!Ka@7Z=BjKf&WA5Sj`_=r#A~c(H#uZ5nx@xY-MySt; zEvoK!PQ_fjg#xOTy`|{%lNc7ZW~?!?8UyQk*s`jbvxBL(FhfWCu7387$=o~eNv`OV zgK)8uj`K;=H|q5m>J6%78|&&-nXps6OZQk8W&v<=Rw7UTVX}*@PQMvNM~qm;7-xwE zA!o^*j~M1+DL=3YaL0yzguW$5k)Xj_PC4>~#<$p^UhK}?B|T@vk=Mf<|EEn#aABi! zEA` zZ-v-o^1vjWXc!*v$)_sWxL|(JFZ$v#`3F|_5Ii?9gyF!4L?_xuD0}CF?42@(FY=t0 z7WUx57OI!c!u6#to79#2MU0^niVI{zKwk0}{&ESY8#P25>#`V6IK-f?wXq~)6VJVD)c zU+TM@s>=TD{i|%4_f6Z2*a`Dqvvd59E!T^GF5^~`3lq41MUvO4%4{mM@Se$u;mlCF ziU|V?MdtqR3#DF8#dPZnxGj{Ss50?Oz{YXH}eT@nc6O z*f{Q8=wxP@dV<99f9Ga$XJq7Ed~!Q5pz+hT*iB{A!xZ-~bKJd7$*VuaV$nVSllxxJ zpTGK2?a7#Ohd*!Rffe$S)QD%mT{XZd7thy?t9gp-ca`jL zE5W``_td`E&#u@m%>xd)E!O-o3D`QA{$=gYJZFnXNBELy@wj>n!eCG{Zvr=W-sm(w)&3k(K)^By- z)bo7)_g4M~p7+J3F0B501iEGSGVU$A=geoSdOT2KymjAI%;vKla0K@I%-@HlYv0|l z*IRSIcV!_5uS^r}ox7sQJ9nS)|4Nj$1rA$3Pdu<@Up%lBsr&e0SvSj^b9V0@RsYf{ zL)pc z58JzBUg_UoPucx=KYwFs3hT=~_mcN#mdJ$F*GX|7Q_uYTs>*TAbkh&fePWNdZOqzV z1e}+%29|^GV=As%1H=2?!#D5qKkiEYfA;#N3Bc1rataT9EpvC0vYjHJ<^5D{t{E4< zU!lvn*MaJ1!^R*;vnb^gDXO`%GKJ}{fxLh9h5#`IlTjW0{Eq(&*OZ+xo{cMe* zIk>S{rM<`QcwULZlzv!e3N(Lt=GNjju+9{4KW(+S!XFRV{#?)|tF*U)Ww5>oa6j%| zX@NQw@cgC%aL*~QFSGfZhBdS=Qv#d|xyQ?44?0%{h=99KfPJCJ>M6jTa^SwuF5nW` z_iQcl(7xG$GoZfI8rxHTQ2Rg!%#<@9>W5{yG*Dmcnp`Syvm|KGU}GLo{cgsG?y$a` zF|aRZoZY_()|WE}s=wRtK^f{C;6Rk@?wMQNZ^HV5(u}iz$!sv(emfQDh4;W|=E{E4 z`&TA2yj>64{b&x{ntgVyy_Y}KHL)BlTTWek%4H8-HNn6+V;XQid|9Y0E6hRjK%GaU zhoUeCfi_lwcK5;@mdKI;Vst00>h_o&W#< literal 0 HcmV?d00001