From 3fba95db7a88adcf56674fa7b3e7f829971c7697 Mon Sep 17 00:00:00 2001 From: Johan Poirier Date: Wed, 28 Nov 2012 16:37:38 +0100 Subject: [PATCH 1/4] New article on Square libs for Android --- _posts/2012-11-28-square-libs.markdown | 364 +++++++++++++++++++ public/img/2012-11-28-square-libs/square.png | Bin 0 -> 50860 bytes 2 files changed, 364 insertions(+) create mode 100644 _posts/2012-11-28-square-libs.markdown create mode 100644 public/img/2012-11-28-square-libs/square.png diff --git a/_posts/2012-11-28-square-libs.markdown b/_posts/2012-11-28-square-libs.markdown new file mode 100644 index 0000000..94f2096 --- /dev/null +++ b/_posts/2012-11-28-square-libs.markdown @@ -0,0 +1,364 @@ +--- +layout: post +title: Les libs Android de Square +author: johanpoirier +tags: [android, square, libraries, bus, injection, rest, http] +published: false +--- + +Ayant eu la chance d'aller au [Devoxx](http://devoxx.com) encore une fois cette année, j'ai pu assister à la conférence de [Jake Wharton](https://github.com/JakeWharton) (créateur de [ActionBarSherlock](http://actionbarsherlock.com/)) intitulée [Bootstrapping Android Apps with Open Source](http://devoxx.com/display/DV12/Bootstrapping+Android+Apps+with+Open+Source). Il s'agissait en fait d'une présentation de toutes les librairies développées et utilisées par [Square](https://github.com/square) pour développer leur [application de paiement par mobile](https://squareup.com/). +Le principal message que Jake a voulu faire passer était de nous inciter à partager nos projets ou nos divers développements en Open Source si cela peut avoir un intérêt pour la communauté. Square s'appuyant très largement sur des projets Open Source, ils se doivent de partager à leur tour leur travail. +Nous allons donc voir quelque unes de ces librairies illustrées dans une petite applicaton Android : Dagger, Otto et Retrofit. + +

+ +

+ + +## [Dagger](http://square.github.com/dagger/) : l'injection de dépendance + +Dagger se veut comme un successeur de Guice dont le créateur [Bob Lee](https://twitter.com/crazybob) est justement le CTO de Square. Il a voulu créer un framework d'injection de dépendances rapide et moderne qui fonctionne aussi bien en java "classique" que sur Android avec sa JVM Dalvik adapté au mobile. + +A l'instar d'[AndroidAnnotations](http://androidannotations.org/), Dagger s'appuie sur la génération de code à la compilation (JSR 269 : Annotation Processing). Pour chaque classe gérée par Dagger, une classe est créee contenant toute la logique d'injection en se basant sur le graph d'objet. C'est cette classe qui s'occupera d'invoquer les constructeurse t injecter les variables annotées en @Inject (JSR 330). + +Dagger se passe donc de tout usage de réflexion contrairement à Guice (et sa version pour Android : RoboGuice). Et ceci est une bonne chose pour nos applications Android car le principal défaut de Guice était bien le temps de construire le graph au démarrage de l'application. + +Place à l'illustration de la librairie par un peu de code : + +### Les principes + +{% highlight java %} +// Main activity of the app +public class MainActivity extends Activity { + + @Inject + UserService userService; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + DaggerModule.getObjectGraph().inject(this); + } + + ... +} +{% endhighlight %} + +Cet exemple nous montre 2 choses : + - l'annotation @Inject de mon service gérant mes utilisateurs + - l'injection de la classe à la création de l'activité + +Pour satisfaire les dépendances, Dagger construit les objets via leurs constructeurs sans argument annotés par @Inject ou bien via des @Provides si la première solution n'est pas possible. Les méthodes annotées en @Provides doivent appartenir à un @Module : + +{% highlight java %} +// Dagger module for the app +@Module(entryPoints = { MainActivity.class }) +public class DaggerModule { + + private static ObjectGraph graph; + + @Provides + public UserService provideUserService() { + return new UserService(); + } +} +{% endhighlight %} + +Ce module est indispensable pour construire le graph d'objet : + +{% highlight java %} +// graph construction from the module and its entry points +ObjectGraph objectGraph = ObjectGraph.create(new DaggerModule()); +{% endhighlight %} + +Grâce à ce graph d'objet, nous pouvons injecter les classes gérées par Dagger : + +{% highlight java %} +// self inject +objectGraph.inject(this); +{% endhighlight %} + +Il y a plein d'autres concepts intéressants dans Dagger comme la surcharge de Module à des fins de tests, ou encore les @Singleton et l'injection statique. + +### En pratique sur Android + +Pour éviter d'appeler l'ObjectGraph pour injecter mes activités dans le onCreate, j'ai créé une DaggerActivity dont toutes mes activités héritent : + +{% highlight java %} +// Parent of all activities +public abstract class DaggerActivity extends Activity { + + protected void onCreate(android.os.Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + DaggerModule.getObjectGraph().inject(this); + } +} +{% endhighlight %} + +Le module de mon application s'occupe de fournir les instances via des @Provides et sert de point d'entrée à toute mon application pour fournir le graph d'objet : + +{% highlight java %} +// the entry point is where the graph begins +@Module(entryPoints = { MainActivity.class }) +public class DaggerModule { + + private static ObjectGraph graph; + + @Provides + @Singleton + public MyService provideUserService() { + return new UserService(); + } + + @Provides + @Singleton + public Bus provideBus() { + // our event bus running on any thread + return new Bus(ThreadEnforcer.ANY); + } + + // give access to the graph in the entire app + public static ObjectGraph getObjectGraph() { + if(graph == null) { + graph = ObjectGraph.create(new DaggerModule()); + } + return graph; + } +} +{% endhighlight %} + +J'ai réalisé une petit application de test disponible sur Github : [squarelibs-android-demo](https://github.com/johanpoirier/squarelibs-android-demo). Au lancement de l'application, c'est immédiat, pas de temps de création du graph décelable par l'utilisateur. + + +## [Otto](http://square.github.com/otto/) : le bus d'évènements + +Otto est un bus d'évènements permettant de découpler les différentes parties de nos applications Android. Ce projet est un fork de [Guava](http://code.google.com/p/guava-libraries/) modifié et spécialisé pour Android. + +### Le principe + +Le principe est simple. + +Pour publier un évènement, il faut poster un évènement sur le bus : + +{% highlight java %} +// AwesomeEvent could be anything +bus.publish(new AwesomeEvent()); +{% endhighlight %} + +Pour s'abonner à un évènement, il faut s'enregistrer auprès du bus : + +{% highlight java %} +// the bus need to know that you're listening +bus.register(this); +{% endhighlight %} + +et être prêt à recevoir l'évènement : + +{% highlight java %} +// subscription to the AwesomeEvent(s) +@Subscribe +public void awesomeEventOccured(AwesomeEvent event) { + Log.d("AwesomeApp", event.getAwesomeMessage()); +} +{% endhighlight %} + +Pour ne plus recevoir les évènements, il suffit de se désenregistrer : + +{% highlight java %} +// tell the bus we don't care anymore +bus.unregister(this); +{% endhighlight %} + +Enfin, il est possible de fournir une valeur dès l'enregistrement sur le bus via des @Produce. Cela peut permettre ainsi de fournir le dernier évènement publié sur le bus au client qui vient de s'enregistrer. + +{% highlight java %} +// useful when you need to know what was going on before you listened +@Produce +public AwesomeEvent produceAwesomeEvent() { + // lastAwesomeEvent must exist + return new AwesomeEvent(this.lastAwesomeEvent); +} +{% endhighlight %} + +Les producteurs comme les clients souscripteurs doivent s'enregistrer sur le bus. + + +### En pratique sur Android + +On a vu avec Dagger que le module de l'application peut produire des instances à injecter dans les classes gérées par celui-ci : c'est exactement ce qu'il nous faut pour fournir une intance du bus à tous ceux qui en ont besoin : + +{% highlight java %} +// take the bus ! +@Module(entryPoints = { MainActivity.class }) +public class DaggerModule { + + ... + + @Provides + @Singleton + public Bus provideBus() { + // our event bus running on any thread + return new Bus(ThreadEnforcer.ANY); + } + + ... +} +{% endhighlight %} + +Nous allons également modifier notre DaggerActivity : + +{% highlight java %} +// bus injection and registration +public abstract class DaggerActivity extends Activity { + + @Inject + protected Bus bus; + + protected void onCreate(android.os.Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Dagger will inject instances + DaggerModule.getObjectGraph().inject(this); + + // The activity will register itself to the Otto bus + bus.register(this); + } +} +{% endhighlight %} + +Ainsi, chaque activité a accès au bus. +Pour l'exemple, mon activité va écouter les évènements liés à l'activité WiFi du téléphone : +{% highlight java %} +// event subscription +public class MainActivity extends Activity { + + ... + + @Subscribe + public void displayNetworks(final NetworksAvailableEvent event) { + // event is coming from the background, requestiing UI thread + runOnUiThread(new Runnable() { + @Override + public void run() { + networkListAdapter.changeData(event.getNetworks()); + } + }); + } + + ... +} +{% endhighlight %} + +L'évènement NetworksAvailableEvent est produit par un BroadcastReceiver qui tourne en background : + +{% highlight java %} +// event post on the bus +public class WifiInfoReceiver extends DaggerBroadcastReceiver { + + private List scanResults; + private WifiManager wifiManager; + + @Inject + protected Bus bus; + + @Override + public void onReceive(Context context, Intent intent) { + super.onReceive(context, intent); + wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + + DaggerModule.getObjectGraph().inject(this); + + // scan results available : post event to the bus to display on the main activity + if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) { + scanResults = wifiManager.getScanResults(); + bus.post(new NetworksAvailableEvent(scanResults)); + } + // the wifi state changed : display it on the main activity + else if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { + bus.post(new WifiStateChangeEvent(wifiManager.getWifiState())); + } + } +} +{% endhighlight %} + + +## [Retrofit](https://github.com/square/retrofit) : une interface REST + +Retrofit est un client REST pour Android, dans le même esprit que Spring Android [RestTemplate](http://static.springsource.org/spring-android/docs/1.0.x/reference/html/rest-template.html). + +Retrofit est très léger : 52 Ko contre 252 Ko pour RestTemplate. + +### Le principe + +Encore une fois très simple, il suffit d'écrire nos interfaces via les annotations @GET, @POST, @DELETE, @PUT : + +{% highlight java %} +// our rest client for the github api +public interface Github { + + @GET("orgs/square/repos") + List getSquareRepos(); + + @GET("orgs/square") + Org getSquare(); +} +{% endhighlight %} + +Les classes Repo et Org sont de simples POJOs qui ont les mêmes attributs (même partiellement) que ceux de l'API appelée. + +Pour utliser mon interface, il nous faut utiliser un RestAdapater : + +{% highlight java %} +// the RestAdapter builder is nice +restAdapter = new RestAdapter.Builder() + .setServer(new Server("https://api.github.com")) + .setClient(new DefaultHttpClient()) + .setConverter(new GsonConverter(new Gson())) + .build(); +{% endhighlight %} + +et de l'appeler avec notre interface : + +{% highlight java %} +// rest client instanciation +Github githubApi = restAdapter.create(Github.class); +List repos = githubApi.getSquareRepos(); +{% endhighlight %} + +Et voilà ! + + +### En pratique sur Android + +Nous allons encore une fois utiliser notre module Dagger comme point d'entrée de l'application pour avoir accès à notre RestAdapter dans toute l'application : + +{% highlight java %} +// Dagger + Retrofit : awesome +@Module(entryPoints = { Main.class }) +public class DaggerModule { + + private static ObjectGraph graph; + + ... + + @Provides + @Singleton + public RestAdapter getRestAdapter() { + // give access to the rest api to the entire app + return new RestAdapter.Builder() + .setServer(new Server("https://api.github.com")) + .setClient(new DefaultHttpClient()) + .setConverter(new GsonConverter(new Gson())) + .build(); + } +} +{% endhighlight %} + +Nous utilisons Gson comme librairie de sérialisation/désérialisation et le client HTTP par défaut d'Android. A ce propos, Square propose une autre librairie nommée [OkHttp](https://github.com/square/okhttp) qui est un client HTTP+SPDY pour Android. OkHttp permet de pouvoir compter sur le même client http sur toutes les versions d'Android et ne pas dépendre de la version d'Android. Il faudrait le tester et surtout attendre une version plus finalisée. + + +## Conclusion + +Dagger, Otto et Retrofit sont de petites librairies, encore jeunes mais très prometteuses. Elles sont parfaitement adpatées à un contexte d'utilisation mobile car elles ont été pensé pour. Si vous ne devez en retenir qu'une, je vous conseille Otto qui est un merveilleux petit outil pour découpler les composants de votre application. + +Par ailleurs, [Pierre-Yves Ricau](https://github.com/pyricau), le créateur du projet AndroidAnnotations, a fourni un exemple d'intégration de Dagger, Otto et AndroidAnnotations sur Github : [CleanAndroidCode](https://github.com/pyricau/CleanAndroidCode). diff --git a/public/img/2012-11-28-square-libs/square.png b/public/img/2012-11-28-square-libs/square.png new file mode 100644 index 0000000000000000000000000000000000000000..708e8640b0ad4f7e88736a3bb4a65129a7349626 GIT binary patch literal 50860 zcmd>l<9B7x^Yx8w-k1|x6Z^)tZQGa$CX?LQp4fIKw(ZG86Whj<&v&igU-7&+=d9Il z>U7ucUERB?ekv61IS2-s(Y`UcD{{Q zE&F`&G+<%baYh$|HzCS{H3Pe>gYCqe#o=u-pp}M5hOd7ltpH8M_=S`5l2pUzNT1=5 zi;`5ufMbnj9CgD9OnNDEo?`HW9A@FH^5S3c|Aj9>|0DQEKn_OVajt%^eP~#EYsxwB znRaP>;PtCQKk2ym{cuxv-gI8$vAGO0!8T0f_W#+d1em3Exy;e^I!9`V5&BDL5gWf) zAJRIIx->{ExYa-N42fdh1NGtSD+p7%ag$M4&jkq*CSv%aF?Z4{*g3a9arTWtpykyI z_2K*@+$WWrMeKQE`vMT<)uiO=Ew%U1x1Dj+8NR%rf_l0vB=kEnx?bNaePz!e;`!iq zJq(OWde`7UZ8R3~qZ=T=TzJQHwtw~&4bVqKH(Hv-KU$Nkp;0d_YvZ8KuG=-AyZx9W z4qQB`%b50ySIIJhe0+2YJUm};ohQro?|5wbSY+~&(Sojl*8kQH=`Fb>JIB>41#JM; z3hQm*xv@gQ3)6p@zURafpVfJA?d0}Na9MS3#0191f;Wui#8C6EpuY@1$?##j5RIR? zx&hCK^<6lRfA@B7zi;V=nF5F}Fonk_E51_d!a(rfSU`E3V++yf$T}25eY+NrxY`e{ zhZxg~ssmvM_1kas3&eJ$o%5>-FPrtk*pK}m#dBG(M>PChw~JcOq482sA;W-m*vqfM zEfC%WJ!*i!KX6Qnm( z&k4W~=29H633vGc`A8Cc0r`j#ybO4Kd|c&EI48M-6}p;5Q?lSgnd>CT6Sl{42fLDl zTymo;#rvm*=8|73qAQ7e|Nb>BvkvLKIH$BVt8=2FByYpyMV3DA#eRh3dU`niZmCN4uq&b2{hBXPniDgMPe4@yK+cZox@G-4R24 z;N>~VJjMiHV0b6@5CSeBduVdf!)-XL53nm^{(Rqn*g62b`jKrQZ4m=D6c5>gmp3XO zI9Ku;4ZdW$BmS}6B@1n!v@^d>2d|<#m~mSO&7iXTJiW`m7i{2Pl_uiuZC+TQm@iKr z>yV|EnQ(li>T6q?m1aRyk&i6P_JV)oUE9U+A*;`&=KW_qy>mP~}>1a?#zl zQ8j=kByRm&X$!n@UBBw-2pNrAtCVx!6c2`?Sq${A)t~gNhB8uG{n}bKe%YigNHImq zJyET)a9_uFj9zma5(7C;TRkYH-Q?DSV@~ccWMbp|iF$rRykQRT#9}OXA@~#abi-U) z0p7)aY;LBPdw`^W52YGC_cH*LARht2Mo^bG!5eg2F7PcPhFoY$0eMTq{Kq7x`N%t) zvE3zC$7=~nKAl-F&F@_kxfRI5`FM^UMk}|^S8$oGS}uRj>GEk;O2;8!Q?7sMA0}(P zDr$B7)hBzJ+u+w!o;Y{w<-d?5d~0Uh9FWj6b)I@LA1o-9Y{s9k@IYI6q!@!A?!&HG ze9NG5r;oF)$>?rDMUd>XZSzh{g|gDnH*4wmYFYlYb=A%BDY77O8D6FdyBkJNsA zo`2PsdJ8LtI6y#}9!X-?s@onSllNlF5$2|A#ADuEqOeXR;7w7ef2>Av!BP>#U%%XsyWXpbFJO%a6 z>Wp9<{!1r9N?99KL4nGp<^E$;F@6X*rD-om!3X6J1Bt~N1sUvtNEkTf6c7+O&5I2M z9IedbOXf{cVH9xR-bS!+&l=|c(Lf!5*3%8Rv_KD%-Qt39!o11)nQ9MqE)Dm??D0c* zXF?}Ux+O`71++#UG3W9rt85TmU*OxP5tlU{2TBv>J)+t_Rf_qRfT`tkNQxJ5B%j(M zU2mxQ&D1EH9<-NIoBT)wbuxX}5WD#v%9LWkbB%81bFqI7pBtc7lal3tqsfx7vOoU% z_f*2&(o5-05L;m9cI#7;Bi7pR;7JmOIapvPw+09!QzW00_0nG2R%!6gyb8Pv)`MS{ z&9M37RD3mYufLK4kCgKsC;>(^ckIDV@UP6F%fddrR`Pf@ab2&ATGap{)UD27A=oV~ z(JrJp2M8^}>@Bysult=h6X{S-gHgJ2;%S}b>b1&J5MaWNsjV<<2^_pZ5)v{h?fNHY zLb~DzO;s1De`-ezyMTGRbYJG>Ik{Qyp)u>5;;<6uMB4_&f@IF=NN|24R+OnM5J%%! zTcI^f$949y85}OTDGoHTE(~W!)QPCV-XSr`E&!+G!vln=o@%JxH~>NNTffORI|i(e z@{#9K4Sj(CCoFHY0W^r`Ovnwm9hF1l2>r+j?^8sZXq6wN99qKbtBsNRZu50}+{F^10fL}q-J>M{}P$cyF!x?kSN{*X9m|LX_> zcly?}+GBvu1l)l|hsJWf!`!6ljm{CcV`y#11;^qu3V>5+BVwh-Iy3KzaHU0 z(I^!z3#H>oDY$W%JyOb7jQjljRQNtI!)iwvw0M=bDn$vbf>#p%_0UKf=#^s9XCc<|4I>~i z;4+f=-UTG+Eg17qz0rk+b=i~w(q#oR#Ux@^c2Zn6${3;%VP{2qE2TW-@&IxU`JMm= z23U)0Qe={rm0Xo#-EumpzK4avg?Q0y=b|C$E$o1pI104`kwybixbp3B^1h5XhMxN$ z51QXvxHQJ4!7~Du@1El$HD)R7d_pxkKcsQ&4MEk%927WtQVsA@ptvVlm1@oLkrEY) zoNOqdj?xdd5aZ1!h`9JQ@@hl4ONH-2fUSz}UBgJy|E^59K>!knOH_DL=u5_k+#+3}2U@qd+5?3Opg zOrKBII`!-Vrf*CR1ROetHv(F61hkD>4j2pixz2+hg+jFe{=lAYh^u27;pfYgNF%{Y zmM@1XztG^H{V3km(7R`%<1?h}<)Z8ondWcFQuQ2jtUAK)cDHVZzoViwR3B(enyKTY zH-3jKI;m(8Bgs8_^tm5v%~|7^Mt)+Q+87Uvz5nZxhNjg?&Cg-UWAo3-sJY6N<15^x2V-sr2MbCMK<1qcE?gX%;p5s^*yQ;I&nSL(lzi@M*@^u0&1q!p0@+ zeJ?6X990z;O9Wvn&LctHQA^U$+1B7nE?V31~y?XqtJ7pqpyg4`usY|G9|?ImfMcHosPe0 zY;2GOkH4gs2yWcbBK8h77)!aknJF*!>R-V=tmxs?(b%@8TAReS1kOvR^INoX{osin zxCarpPdB}8jUIXcf)KXsf`#NR`Ey?nrAYV&e*73B3pgs$B0EBaGoD9-ctnoKg>&|6 z>FqVXs-$B$dqwpuhIBMVcS_)XmGOTMtntFKsIAD~ffcqZ$sa&TUVHoQvpLSOu^agC zeLqk*_xBOUnM~ffg2{yoK8Zc>FT^Dj{Ac9u7I}2Ta1wZ!kg^;*e^qsFg}rnHe6aO? zWc9G9wgy-?oA*QM)w4FX+7FAnBn*G-JYMWI3~w_1SVa^jHEdl#L;EqIbWUHtvs$&IOrpY)^eo_YN4j~l~B=NqX_J@1==aShU= zS5t1&4a?UF?ib#N3HBfk_U}G1)HTcIg+jTCpm%1b$$I~i5p@Fj-w_a2=ML3Q%euZs zl$2=?wi-ct?51fpxi$o2@Foh4ooopzx&?uPn(Sh_^ZPdg${^O0bLG|<;qEV#EM|>d zuW_S?8Cz=5frMK@2-nL9LV*G-L9|2S5Y^8`sfKOgmn0C~P+R{fHe@b+AtKxtHS(aD zQ%&fpA}5_z@!*Iya0DR?Ui9Ij+_%!Q-=^N?HW$CE_+p2`Q;oj1p8NdCjr2OhQ6Cy% z6P|C);o%&c>l;doR!TB4iZ(qr0DYwM4K$LvaPV$%T?6vo^=ONn_WLQM2wQ<@W2-p1 zxjDTV^=_uvhT?dt>PezU(2b|Xy#NE!7pu5VK9;Gx*HkDCoHBsn*Q?pe)XVY zcq(gdQRuTll~rMPb_x=j%L+(GHE--5(ru9dHZ@NgVUFkH@nyh<2{7uDCt(PzKo~B%}m-C7&sYmszYoM<{!W4)N$c2aCV}+`VSEcmMpM?lvg5tK=(dPv_+YLOj6yLTUqeT%j zb%iZyLdBM0(z8;WTuRuYvk@#j$4&j4+?%Fei(mBEKM=}Kc!X7kfEmzqXBIf_i>c?O zESS3ggHrtPKmr0n01OjvYam`JA#41v(_=fhQRaS9Qp#LFUIGC@a6M{d)!s%6t}v%c zqZ=6yqXf!U?~bR)VGt&j$_Vt<2|JYVAe_8hb7w!lycN;}BR@F9Ns-(L7~FNC)677W z)6=+3K1xKC9wd(!bh#3q{NyZ|HiQxpI)EI|#KOl!0W?C3&1HN%BV0C%K)>Ekh>dQJ zefDh{y}P}4z;Kk7Jg^d1L_nV%^Oi3(NPO$_Tug)3uHs9EGKT~QyKD!zfVlJv&Vjnb zPUT>eqt)zXl~{Qh+H>0l=_mv2InC&(Qj#VyE%38=8sSG9{}%h*9n|V|bERsQA&EEd zdsa`2!-~~qeL3tVG_r&LiCMr;W`kD2%7;KU=0ilEZt3oCi@C4sAhh$MH4WK%;Ax{Y zzi^_)jI)(q3;T+jE3=>e@`7S+o{NE#V@yq%+9;dmpA5d%uc*2UpE4L3$@Ai|h$MJa zlvY^H&wGWxmbNhg+D6C8;Ezdnl@SkilIQ|uoQ?rpw`dUW7XZV6`}A%>lsP@FoS>^c zhPVrgE5G1C!X724R$Ue^!Zs_vIsJn6quHi!ckC1n`Zr&4A?{PLtJ>mLu3EV8P#-SW zSJH+v$E@WX`;~1hNS5|-39pw?mZ7nS{{aN3_692VQi8t{1JDz1pIgX(4c;|9astGo{O}vfB5$2Ktzh%Dr zDH%FUw`*sfaKUsQ=&n5p`B^l2Z3->0`(pRNp~i{(qs%P3h+qc&8iLZgf9umS3dA0O zgLuUa_7ZFLv`@yRMPkdwUP`p?noo`qyYWtLBRKHac&&%Z(u}Ivk<0@pFzn%GG+np3m1qNRPZdcR@I6uFAlUeP&T>Ok4OD26+Mi7rh;-M|W|5`Vhn=}2LoV+#^Bx~U! zjcf3lY4*H?r&}$d?+ZQdyKa^Qg9BJ09}pRO{Jeus{bMo(E)>k0S~8!CZMHMJ_-j$R zzY(5}=Sp~8^pjCS^q>J=r=f#L2fRoNZwlf1$UaS`LR@0V2*Yi41FpycEnZiJJzDL- zv@*S*%}VJWdmTF%7o%m`!Q)PfNZO4e(mr;Via5Ii3hCu0>-Cu5LvMc0mdHts5Jyf> zU8T=&uDqH%3&65>eKM{j6>2>tHSM~Od+pc}BJt+yN*v<|{?miVIh^OWJ|qox0-puy z6NV+3yJsJNg;jJq{?^2qTD5F-34c5G$cOR+)4K-{2_9|12jRd6U@I5>bvwi~i6kOU zaVt5r1VKn{E7f`{*c9sz?HlF1D6z}eWn3zaN1kGgnOP%Jl<#}9b%i2rYgOEeLQT>= zGi)a#AiaQ=BALG5e-Mk71f5#PQpf116(E;&0v}JEbDQred62ew{RzHDJ4uPqw;V)* z?fH?QWHztA$=W=VBy3=i`iU%{)6fI!ME{Nz`%(g|#xP81DTy z>r(r=Mxy7Nz`wpx);7ly1zz+(Fq&f@l$G=iv5(nF;jvJnD?xeV_OOVze}dF7{ZsY9 z9}<+^2_Xv<-%8XZXUH;{Nx|cQgdd^Pz{v@WWS8BkYbwXL3w~8>8tDQC^u(2>WAlbk zAI^a8!mU|Z!H8Me5@2b!;jX3|9T|Tf%YPyRjvw|tyBV^b+XeCQ%>b<^4tp3*7gWqA zqFs3W{m>9JZXsH=FB9LI6utgwg9?I%X-dr{s)*4IzQyIsXjC#ruN2^wu}3M`zXd8a2lhy4&cn#(3329yOaN&so2uFb zyYpefH48GD>(65$6)lgcp17@Y<<=6G8&y(Hp5al-f}93)YYNJ;h*cwk@|w*qZ8;sc z?A0k^&US+3mgR9*E9ljEc2aI7qDjcT`Z=8|!iiEgBzUghf}HY2vg(m-jZexM>z67a zvz@$gmmztk_ z+24oNSq8upbm%73B?LqZDksf`hRUUwKF%5l#`-kxW)?3a?`N`ui<`zU@2+p)YmVul zvtgoQOy8HJpVz*+^X(c-clm5{w?{m%VSVM-mCwDw33*xuqgFlZ)4Lg9#0>Y@qfpv{ z98=SJJH}*cWwQ>GKa#LN&cl|>&7+OssNA`8GiQF4mt@W`VjBF_sI|;E28f`vMITRR$m8Oy78JcKmlz?rd+Ra1{@X z$?F_dmm3t|s#T)rUUc|Ldx{Ddsq1xcW8fKAEMryMT_cg_yCRSG2ML|s*deQ<=rfEA zDWtPs@#*;_QXux66X4NDWO?#X`;m)ghNxg(bFuYSrA9kSN`Zb3ASan&|F2|EoBW1J zcdA-@MOW#iwr3+Mi@DBLN{Gi|&h{E^EWACPkY8r*5(~Awo4z*Uz+CQ$UK|4?n^DV; z`OS3gP7tZ$ASB_KJ5B^E|1enkH%^}1C;^b^0+t)e`W-{m8UL!=9WY7i-mZVH5+VF%cY8sAGduk z8v)j+uxD=;=7n3Mnglalamgw#4RgMq5;QM9;z2GYut{$`psVIU3{;82plN}fDsMEL zAI`3d(`;-28s#3$&kzIM=S>bB+o~k%sM33y*?USy%f|7M$J5kU zKAaa_(r;`BIQQh zBJwYFsbg#U<}BOI4io#FdK(CJN0LCzY}$f7uJ(yWRpmrA{b;m{)<6*Zas9E|Sx5|H zL0Zb3t2j@SAxL$TgHF)?K`|~qxq`9%ITCDqPE#78-2gt_)E&QJ_fi8bwF}E!QUW$= zI8Z=S=Xvl3qP}RsMsSzfhI^`K0~Od&!}c(%|0kSU7l0K}iuaLvaGe_fI;;(gKsCu-j&A(;^IDeml_MSjIrp1A%B+d33H+lnfO) z&){3?CUDj(7McLmZ%1Js^EEwMi$>a`f#$XQA#IRcMpZ*S{e)y(e4Cb$6Ef;a62>Lu{ zXWiZ{Rc{vQ2D72$ZJ@89am05_7qKvK{cuHp(em-J&x#uIUA$dkZ@k=om@qCX@S)Io z#!z+n5Y-XX`PkZ@kf^m$u$K=nvV=ndR%Llqjz)mKHGPjIhQUKQXJ6@Au_zTg|CJtFFFZh?Ab z4VL1Hr^!|-*F&1XR_}xtbv#CVD2|A{brE=*;s#7 zWVpHEt6Z-$zpKXL82as*7qcyTo38Af*Ok ztO-Eb>I4J=2Po&ss3_>9GgTAFHuoS58w4)cFrtSqX|oUYw)9qLVlKTePk> zz^@+a5wR^d8H($v+hhDm!u~Ru*ri5GGx#b58X#GdOfP5}8jr{8pr9P2h>8av#(w3M zsFpOiu5o$t2aDjWvEo+?7ZR{h&oT!SkCeK9VX&^FE1*{O2M(T|Zm)0vQ z){EQI!hKCYL=n`497bAH@5t$1@%H~>pF1UE>-?2dw9&SZv^=E9m5UVw@-C~T;KNa- zsMZgXx2wtLaklt8i-NjNn?pxv&DBNavFVCcu(u%~qLMVFuW;>{OCs0_zUd7!uuPu$T`}pGgYhG$tx0rhn|=R;p6fx$|-j zv}fIXeaTB2GX|E$-Jg!D^Nr%>&x}ixOCBqaoIL1|1%DNbsuoaUfLmO#Lq%f|X^ewX z=obSuhou^5M{S2=v$taDT-a-PJH{f-UQ`*NgH{ljy>lJlvKg}$Lm!$6sJJ`toeXu3~ ztLN{5P@pgPcVfxu=M~fr-CgqV4X_ac7g}Hw!@HmM4}!D>;uS6-XC)b;H5C5HyUST` zXByJ``#I;^iU_^u4xbw2zZjx{=Q#J7V4qgUizUb2`YqbTck7go|EmSCYv0zt$IOc` zo+5b$hOfUdHhC9|$IjF>!`Z;SUAdUf6aAVe`y;`RlBHTm8tZ-#@7SNOFM;Utr-x@p ztbVd8d18(qjnK}H=<@n0ZaX`rc&zoyDc|8o75$<{E*|RAKV^_j7h8&o@5a@d(sbic z1Mz_qFD3PG&~UrF@5ih*$cC7+7>TmKSE$^a?fETfR`lZpAa;og5Eg(7alf|SZ57D{ zT=D?^Dq?pHf8_l`Q7KI@wL>;2LR7?IspD)kbzu_Wk3!k|6|seZdit$Ik~zX)LqBiJ zUJwn1fU3hzKe(*DI9SaVoD)ETW1P%siwxa&@io*?ryQl?0CdVhc&lZ-LdEsPb$t5Z zV0@aCAB)CTm6IozF#}i6NLEX|f_BjZMxA#v8N7h}hB&L01{EEr^!It{rBvcYJ28Hh z;axd*?`hT=`woTE^x8ko#513*iF&EJMXFiiZ+FHC0bW8~ z^w5`kKVRBc?SU;n+2eOqWF7~t9jKbd(sey-rKEWCq@O462Wj^^t&SAB;o{=4+2^8m z+Q8Xg^in`B{7iJ5p%)7v`Co=@r_cuvyO9a0Xkzw=YRUu;=sgr`=%NIv>MxVnf0_~x zEOuvam#Y~bFTUD~@7ABvQR1SU`)6%+`&G98whwW4&#H##gql%{EXtC5lp#s}i7|2o z*=e4pST?%T**5LFuUg?wK;MK+;Pib{SyrwM)59aV^A?BGzC-%J_&bv&X81ia>PO^Y z>f(!#sUDezBqn>!&O8b7teHIB{YzLWRgxh0z2OZHs;mL9>ww`I+n|FepuA_jB1udx zFHJf=XR4nr3jW(+V!cD66mXVB>_MP{yqWX(wh*wq+&&Cu$dpwU^`>;>W`?zqJqsk-X-KKy~p$gMcQXvrf{b`H9`+Xf_eC zJ-ls3zzU~n?rE+L?Pu@TwZ=k+4Ww_nkmlyJ56om|{5102xr486r9+IaZy2<5BN5du z>=Si@O2#Si0Xe(TzZ+o;NX>6IJnZAOWbr)D%OWI~I_wB+qikP8`lShgY2?`T&xrk_WTu#P>DK(Wjsx z>Ju{L;^)__D$uHHMNxGWHExlsHkPN2|8_S~Af1}&8D#$Bn{A0DZVdbgAWN;NS47M2 zTefUeUo9!f%x6p^3v}k&_(wf=ZHSB+E0HuF3P`;`m?!J^{0x{x6KakMr*Bc2J$LwC^s^-*x z^oy>a{!+5bc_zaw?|8?M4OJIpgAJ}3WMX35Tr)qij34$)`UwfG`iGt1yG1E@sobl& zmqx?8Dj5t*az?Nd=KAetBNHWW%^NKGzTY-v_=$%@wWmbS8tI8`L}OhnUssX}hDTw0 z7F_`s@NdfH1)$aAxIJ9$f!yGmH-9kADa+fcs3>%^mGkSkdLJ-w=dy&jW$$u7lgdXz z!MEAt?K;H+r+N57HTjfP89pyu&9pQCSwYhLT4#tX4p z|7BL5Ft34~&Xn+fX9^~IHVVSC-vvt?`^p%VY(QoH9!%3P*Z*LrJqD zpuRs4>+Lq6Lle1G1BgdDtr>J+wTE^sKCApvS=H>$k&D+u9H*-|q+s*GL4s(y4{W@Z|5B1M6fbzu>=8)Cgh8S$4_R{p^UgEGG>0Vq#N zFXH7!`x_=r)M42X%#OuQi(gTWkZP8BRfV zxq_5(%>(R>A-RF_5W+mladlLsj9qYud+8^)hrEyD<{Zy9OGwnKv@l zE{!pYT;B#YQqQwP8w+$LUd&9rk$~==C#~_3(flGMQP-B}eIp|zna{dW>BG-;s_s$* z?iwBlj~D_ac0nFr5}R(znkrbIh!jCT(MCCO$LqThsH-|t}3g9{IZZK_K2bf$Vkm4mM52gjLtX64biSd zjEX<`onnNz@dA=4QKwUUbH%)ARu$=Br8sWc+8$V^2j~^!kyMBSWP$gY!hDbl{e8z1 zzS3NtayH1upmaBOO#fW`d5GAhnzI8xN2CZJwpOF^gRA92vdiCI5RCGk1qCIR@0+HU;@mf%sI1^ytnDqHJ{0 zK|x^;_7X+_s!1GooI1-__OQz;gqZz{@!xbHAz4|0V)6>kTrUM+R ze>(s%c0@siparNVU%%!KfpO8-muI~GSo9IulU(7T@Y7V?YvTPXA$jG+3sqDboWRiJ z0&R;#@5-pg+T6U5ibBcw+`1ZJ>?7=8`aIa7{R-ZERGkRV%7uP1F}?QhU#Bp0pnt zHZGi?LX5J&ZYr1g^u}Y+Xawqjb=IR18shysxp@9DlJK1#fjpYWkldldXM=O*S|xbk zD>ekIY+^!EzcA{}}I{gLw%f-3-48 zyINFhOttBr2QgC8s1@L=6Z}i-V?eIKzwE=!lGyiQNJf(TDo<0O>SJR7av{-UZKp0c zK6P9u;n3~>7eF2xgq4MHA3-%{okT)-P6>pue+j58U`vQc1kxqr{TC9YTfbkzEBZ&c z2dMhFM4 zZt8_~V|KQ~0WI7UYd21B2K++Zi+7!O0_&~AnrI>CHwJC(qeH?sLQBz}>la@xnid0U zve_f-fP=n&eOb;rK2T;L=W-kDSf+CQ=HzBgpiTx^&f8JWn3m3e<$4XyV3>iU?w z<8Zmch;{CvR`a^7C$&znt4-7;r3~?wui^Idy6Whp`Xmljogew^i6rVlH7Yo?f~>Z* z>jq8FDuul?baQfF(!%L||Ea55tspj{0C5tIM&(l2b@%ge5bHTI*ZRn#iWR*Eg=+S0 z`my%*iWT)Di7b)`MVMYrYkw|LYV(_Y?iDRi$&ZBJeA#Taqq^N+73P>pl=?8*B%9!! zz~KYB>qqGfG{oOEso#2w3({&8n!s;(I^+pN!E<-r{2+yBf3p6jokNP0Kse9u!e+Ij zeK)$#rS^f{TMqTYdx3EKW|o;QzclA~%w|jJUt`>1dkYy%Q8&GE| z2-`7Nm*)K6-;5j7V8rG zT!vd74$$PT(o*oMJ2@eTonW-|j?jp+mEIv4S*$iB$V-mb@skLB)QsW)a=IX$B_+%u=lw|@FjjUqJ%4S@EeJIYsWV8XTAv2(+SVFviIW(8XSKPu*i>e2 zI-5Jcf)_9D9yx5*WSn)+=F-&l;9)sHw!yF%LE!IEWmfMU-}JxvqPEH!h!l;VJ|6|U6DwEvmnmTORB%#rYW4sYzp6e za>k_^uYf9uXfdf$D(sNX2rHRndO2lN&hrfC$jFk#E57NaLtw?iDdmCPbvNg5df|oP z6D^bre!S7*xS#oSKQ=z%7Zr%?{w#0CWnKaayjd-F3bkRqpnH)(8}mkygRjnX2kPEH zVwwj6xS`--7(s*`1ccaxR$S-g7481j>cR3TnjA1KO(SwGJdNS$Q9ou2OW5j{DJ!py z(}jGYkn>t|@@tA~9ZzS(-(K+oH;EsDx{skwy-t=3F-(Cl&BhZz>msLb>-)Ev-%ebgOtsxUjU^R0e7 z{GJ>L6*7ab?eX|KDPQKF%%F}oCjqZju57RkY9$ZV>-$->$z%}(dyMeqp*qa7Fsi4TRwS@q%5DoTCB4?-VBsWE&CNJw|n;?G=w zZtq`*OI-aM<@cA~oAmgBgl{yP6}e*L{>%A8a^G?wM+Py;=|dBQZih!PP`c-2+A`(l zzV>_be&(M!GIZH8>lNHQchJ9Up@G8Q1SRvb+O`a?4^*3>-AF&CQD6d7XJVlRlrE8i zyL{xQ|E7biV|YKWvnERG5SIlk{zpZm5Rcr2HFD1uai6915Yn-?5lSb3vE;cgnDv2C z*7lrjQYcN0+pu`p)hgb|_0QL8wE!!c5F z&CEvWNJH)3CO^*0K*w6e+@=$Z%7ZT*qFa9e?^54$;jZ|C`EvvB)60B5^*A&C<3!Ry zysq216F`^37JqOT`F1z#rKof)R%>}=x@L5O_=DztN|#NpAXC`bqhE6M_%k(ji~11l zH~wYfj8q``6Y3=3TJFLp6xd+JQ@vJ+zNWiNq36@EpRJywE;=ZHd434=U99lm{(i~# z%}M0(0`PiO5_po%QxchO7L!R>^v@fshe!Bhu;w)YeUtps3m^bQl#;l@S(sfN41zNp@} ztDEbDtD?l&6#8>ZxMmv~*Vbag-%(s@GUS3BQ>p~0IX0lLP~tvNsvl``pQ~aO%s7XM zgb}jE1Mzw;kRFFAx-WF`)Mw|7?bW5l7YD#O!vr>iZ<%?=9Bd}zCj@eEW_m<@Tn=mz zVxc8F_WE-=*qm7lWYmq2dWs7789pVADCv5p(VRHEa!N(62qh&*_jbb+;Ff((_PPQo zb(gg;i-`Bq@3?|<5if`BXia_3fq>6uj3DSONeE#@ zeY+u(X2OOcl>Ok4CeHA@T!%rrWT)$rZC+FFjj5fi>GX2HCo0utBl}l5Jfv!ZF=T}h z-QpWf%yamu{$}Yo3>=;V4ZRujtti~~v-<1M%k3-HP>@f3`qcOe1~z;L;#LskrPMtB z|bctWbT*oERn@m%%k>!ZDU5za}q zfD63N2#bwGn#)fQhkpl4m~B6En^TeLooLFvJ9^gSAtqm*N=pmS7{lq}DqIHrWU9p< zm>E$uN{sHOlcLH0+WxF8ILjzLirda||V@d;Dgr5w3E zo^w;c^C!YJDxA_!J_aRbjTX}tlwvUH9K4fc$8!~@L_HLkYN1t6UXDm8tz>Tp3+*HQ z-%VSW4_(CK4W|hij3vkZovn7`EPv~37+OT_fIa#^zr>@ukk|NZBXbf>3HLXc`S>h= z2XvqfcvP%=EGlgy%SgAwArDNTl2K`4jx^R=FBFnuK%RF0EIe5UDlcSeAjZA(YO=yI zlZmMg*PkUKw7{!INQ9y<;FD?k3hlbgTkSqN_oe>rrVI$3;E)q^KOd@LvCq>^d&~8L z3Bc>=#=bo+vCN$%a_i6#x*~?(481G?Y-ry%BCec_AkRN|@qnm3NE@ccVRX2}y61UO z8gYTj!oPO-DeNn}Dys{WkWfc+Scb?}(baOO{NoGx@dadQi+a@iYco#`b}(FVnE`Rl z?s~zc7e3}urpQ0Yn?hHK_2= zf*mn;3g3_Wh|^~m_g?ku;$y0TG!xM@hIb?Xs_Y;KVt@w_coMPi>@^F~tWEv^2lKX- zWzgQutAW#Fo64~ds;MJe9J4yp_hq@`n3b~6V_(5_*D;{+fkc7Q3P^{gE3U?lSk|SY z&rQ+G$JTl@rXcg%!guPE77X4Yn=8JCd?~OCc9=s=+EaFLPc0o)jVFEokOI6XY@Mh{ zezJrfztG$IFklCc>>aTuyGSginRZkXD-01!6@e@2B0~1GiR35v%Vcg8VLsc~AkH@$ zEZTD`9e96H7!O~_$aw-PGkbd+8M6qBYIf(!+Sy++cjo<+ygkKJTLlEaS=lvl0;uKv zQ?TzqO3i}7(KC)}?RlFRI)1|AO@ z@C;A1jFOV@hDy!qDXIHh=rw`9#V4QJPNH4f3I6#5x&tHmff+mK8Pj2tBUG0MnRbKg z_HS~wi-O;ZZ1Utd;UVJ@Z@}5%{&0ZPj0str?)tQ@m!)H-TH z?DhS0abK2vXYyx~Xpl0$TnG#usd^UcX_)M<@nS$$hD!?2QpOV0E&1SbVyOKZ(k)Fk z>-~wAXBR?ybBb}=6i|JR)Cy($zxlYgA2RpwL!Q%P^g_d$K{fm%o+(92BmY*I7jum> z7%sK6<@C(%h!rpTzRGCE;!}-3jig+K zfhm0_s!XZa`?Jt_>O9#eg^wo1YjG3cN7)PHD~`95-LaLMI%t?Ay#@>iA#FB-svjIV5F~Gg4#_0;%ossn;iH4ID#1ss4X`vIiLC5J<~YY3gpT7&rmBi8L{V^E54)R;hsX^4k_7+z*~M!`5!8te-q z8+rQu+OVk37_L*xJ8o>Yx@^MaG}a7Co4Xv<+v3fX7m%`xd1nQOh?XFos1cd)MC9s@ zB<~%mtp){!7po$nwYII&?^ z%g)aPPa)*B{AkTML)Rajh_54(wdSh-INLpW&3L%`mYq~ZaY}>bYc;*1h;9EWHVQ0? zBl`?iS(si}iRe2>6TTp!kF!8XZQ)h71lOvzmHdR=(VEBn1c(o`bi5Z+tsKjuTRh*o z*8SKlNIQF`dm4L1`~J|9Criluq}P4&ahG)^vA()NJFiaLY;-5CV=F1!Kh6e0eLJIl z#&@2N&i+9c_v^z@GMC6vG+Ww_$M`7U_Sw_m5T-Tyn1C!ei3hpvW`{$euY{SOdEX7w zgH|AAvHfs998r-(>6o1~hpXNu`3$G&(#&hnSEYP2ptW`C^|J+={`hK3{{j|re)Qb} z6gLUqSC4$N?p>k6r3)-n7{V=MtRysTz4m3*ABiXyJ~YF z;Zcv4wVu9NwSEGtWMbv+P%=hSj3FJjdM5c{q;zOd?-l_`-O+B~^X?CZ!&v8{OAE&j zk!T~iGw1k0b01fu)Q!8_CM>@zK}e99q%H5Yn*T$Bl@KMAH?!XJJ9AUB#AO@9m=Pr- zw?tnxkzzx=@I1-qnj*M)3c;n`b4TWv_9z$Z_}xDv`t~{cX$Dqko|ObSmTWE=s^Q%D z_&IKWpY8hABZwVQWX%X0E9_RaNhw^heWd>&5L793TBCpVbG+)mKLtDw7dA_`+|_Ic#ZLsdR)#*VwVd<$`X8*NQPCdiz}fgiiZ~`sVIUY)L`hIjQ5MnnU=xX zu^aP6Cl}e~|7rmcJzwvdgMxR#F`ouczf)zHt`4@Q9a4GER@+Y1jxjgw*1?Yvt7&7= zDhXqtXhXlOYZRTVG-80$Ey@O&*SmiFAq&G2B{Yoj-jRB}kLn?~g*l3r1`ysZvTbnG z+Hfrg6|xOV+{wyK2AR4cpPq0iW|+lr)Jut!hl)pvwg1q!REs0L;LzjBF5qidd_|VA z`dT;S?=UK-uA(5f*T=3XuuO5!N8U>Ox!=JB}KR8wcuPn zk^!_gu;h%(epYSBHA}(b|33hpKw-Z#ozIwzN$f4Mx&TIJREDA#6D!e-H(g}-l4yT# zaXC$N6@T^y#yn4aZifh=YyeL*PTGgG=7r?;Qkuy#c(@_=s+8MZE@&ZpR9qLu&(;(% z<#}CGtO|&s)G)hT&m)D;2x*QvPHU3nEEBW-Kz4dlp|soYmCnkWJ?S2oU5TFyROZz= zR?|x?u8S3}rXs4kvPHzl#BSoH(BVd5$^euw9G_d)YguMb-tjkCKIhtMPSI7)Gt!O9;AWxkjaz&@(dV zxOrvH&K)*fYL#7;GE**-OlLso;i#Wj8C~Dga_)MGVpxt=!e;bP6gR9fFUGLGJsaUU zo~X$XJI5U787MWZxW2FJsKGOZ`~E`PQsUcD;<*k2{yzf(chTrSXk|f>D)d**x~?|K zryVD*vQt?f-vJIn%1iwmNKPKdG?0A<7gW&c_UnR4OJ zf`3WodE^>*Bb`LJaME?Do#qVG&}j`)o5>Je3=nV;kAa*Wp(*qBO1?MSRuNNC_b-+MKUn^VG^+isXS$(5WfK}CIV9yTwGWhNGmp`9k1s?>*z`u^m6+hc6!;>1I9V# znByeDQ8GG$BWvqhoOHeLBEqKT z9Jl~%gMN3W7ob;SpzBO7QoLlwSewFX7RVGP0Kw|Z6bp1(U)tQ?N*b(!8*0~v%8oG& za=x~UyNr-v0b@y0SQU#%cuDUdX#HfrN?@$kutug9rA`pn zk~x#whgs#km;y(&Dzs>8dxl4I%yIgZow{G^DrQ%F$Ff2%8mE&~KK~yp#mDjR_%BeI_3Qfx{_p1Bvu^-&|_qERoGeVkUj&m?bqy0G2 z8!5!v*y9}Rd#>o9>V6|#w)WY*-#vpPgsYRUhCRY8`j5)VR`Gjo+-r2L`1kvLKTTsa z#~f#DmDY7Y_1~=o$Cd%(4V~OQI%F+r!@?MD>EKI=kPguzeTnwY1>nmn%`6Aw)0@;* zK6fmM^yFI%cMGRKTvi8zTQOu-nyPOee?U*poSO6OW4) z=!z(|TngFej>UTfY^U|Pc_(wsaq&^oVv+)BA2Dh;ttlPcxlA;ESW$gJRk6~WRKUaZ zfB_9Lv(i6e*#pHhQAQ_C*(qZM**_-cSc|+%1<3UQ_3xSyv;eJ4;aGrY*Ju%XBWf#L zEcxJ?9iCQcjycZ27_r``3#h3zDq7pq$`!VSs&KGkBZ$1Ra7y*TdAwD4?4;{bMIA31 z?YlQ?)!1$}ofY7F9Mpxsre$&+8YU<7QQB;bHRXB$oUtMXz~wIL6V}NI=a^%Tx7Zrd zJF}JEu-r#1noLGb_N|qKs?|$#ycO=>L8PNm$^A$^@5l08qOLPE6*>>jfzw7vl4(c| zJwL5(Km2Vq3aU8lO;>Z7N{c{>^3hLWVPdB=ExK=@1@`?`>|hS`l*V(+F~_Nf=Y_C3 z#PXZ9$cToB@5p(i<`5g_*!K3&w#=e7b_fU#_N>T}0QTbuAAwnjG`Y`Jx-ME!UNZfJ z!hxGdys(q*jRFlu9gq1`7jh38%oqq2jSWelt1kM1#(@)S+0wv=*hV`Qm&)GF9COU^ zRtHGk9(fKkYK+p-bP7BAfp4m1X?<$O3QI{t(;G!NFV-5TLa_13q^Ihu+kG zTIcw5jj>CJI6|?FzpNm6BM-dRt}%R!U6I_{T3-9ys4!#4OV2UK9B+v|Qn@)JDIYfX zy0(?X4Rq3W5^aq#Lc5>ioQ@Ap+Za2?9COTZYJ)U&(bx zD()i<^i{lGp`6Zym+$luQU@Fb5)xqli~mmX8BcaM06I+fHh&qg<<+c=49}j+Cs|ja zuRPB@Kbm8X(~lJf*YeXNf=>*u{WUH#LOMLs)gJ zxRc>hI(Qmc{U7ed5~XNCF^a~fFh`xg$r!CfEzwHXD+DA>#Gswyb6&AK=q8e&-_H|)q-*0sf1?C7jZG*i$$C1q6JU+CA5;K=SE<`40 z*j5N1b={z17?uLVI_`uc)V9%?F1E@pgt<{!lmHAuz-VHQwru$%mQBjWp2z?&Sb>Zy z5Lk5$W~6%bcG`1CqspkfvXW>EpYt3kj(`057eMGrz%3BB0X#4D&p%G@~{&7tXpdya#REGmQP{uj-8Hdz*?u**3|-hns$kRke# zAsHkIv1^`#UZl};a(4DI4N^gVmk}1&qYnmFMH41l##y+D20YoHrC96=yBKvGmz_Jbq!bGhTQUw8oot|UAL@M%Erh442(JO$uUL09yeKgYuA z5wUd|GPtgsHkXNR#fHx1V_ir>7zRsCQ{bX-9T@;M#<(FXjEtB6 zCcz&8_9NnF@{G-A_3qOcNtl-|=a^c=b7O_wFMgpCa%}0{$k1_W^ne!fgPL_>{^h zny}L`?g~S z`yFL{>U3k$M_Q$Ox*&r@T# zzZXR^_PHA^b#YypeG$)1*}eNm06YrdZ2;a2;QatTE8vem`}r@v`k7B(xKWDE2#b9^ zkP%fMgjX_Bb+#QMuy~F=ikMkE12==fOs!+nexy#`Bzt|zMF7ep;|A+rMN^V8vYje# z$9gncja16-1d(ld55p*^_&rym#fwbSeg2Dpa4q0n0RA4NPXl=lz6SJ!`CFWT5zI5Bt?y0!G(K6;DNlWVMJR+Hx!JHTREIRW|+H5${=F+x!>Bvsdqw z95eH7=Dn^UydS_P0Q{8>=Sz1k)e<>HO`MC2e7df!DY&AR4mKT3osib2eGc0DR z5fM@^h&8!Vp#OK&FP)RJGRpBwU9ul(fGHfyEk~6N{C==Gt zqay&gBKUR*zlKA~?#k9)%WU$_C8ZAU&+f={_+_)X?P_C`ku961lhLwa8??$=F$`ps zlJPo=YqlJLC00!acg7t^ zE1W5YX1}&Ek1}eM~RZS#|{;?q!)&~`+!_kI9HAx@x|4r|Dl4R^(q4z~;9Ng?*L zsOiu+Uzt)HZx{IQ6M7ub)n%^4Sl@VFGK$`9W4)ly*x1h{hkdkee1hmmVq!0B-?&kEEw@ zXoU6Y4|5Q_L`I}frSyKWs%*igRea@L@6|AJE094NM~!?WBx5+2>p5kztfe(vme`(P z8IL7%?O2(G^f$%NN(ofcD$k>*bsNCX3Va&ig&L%+Zq7dL@upEgjY|+#g0| zm#6^<2)6+I6v5jKf54mpI^aoqW<`hKG$`HIC_fsnzx=KUS6v2$y?dTyot}x`b=iP{ z1~iHxt<&P!nJ#t;sNs#I(HeZe>SbfF)GQfYhO}? zMCMKn-9&jTP#cQBM{BM{@=%bft6Zg(_IIVIc@%zOYS^ie-?Mon7u}2`=SWCVCdl%V zPqp;94~haFe#%or2eQSLrbTuTN+mj2^KBmq7jKZ1 z9glO7kz2EaJ+LT575k;$N9tFU&cZi79b+ua!ElA?=FSOxPHm~s7u67W+wYfj8^Zo? z6;s5Z4?odPz@*%k4Qm%1k9{(9@GS%i$astrLd3;mtJ-`#8D-*smZe{?;Hhmr`AEmM z1JIo&hJKNdN6(HB1Jy)k^psr9w=Y^TKdV@8Zq+TNy$k58p%#!k#I78v0U&6x=3~{^ z#jd|1<#ui|TGs5MFJ*L{tsY%;kkgqQ?IU*DjZ{8YzfOXNH51ERuY*%|VS3eM)_zdeFYu>~{XhwELMjg4`=iup^ z|I&F9TCY>2r?(rlR8GaZAnB;4N9>{FN+xfJ`?+;-=D>04hSnIaIK7Ev^5P@)bt82S zGJ zGtoN1XN>sXSk{^~qhcHM9|;pbD9lUa$Fk9ia$iM4y0AdKg^ZRnf)-uT^os8b&Lj8oofnV6giCyv;V%F(x?nx zypN4Etubxh{aO|1g|0t>XDuW9y&nD0K>>}{Uei zdK)>X>#>@8II8R^3>H`SKGqL;M~C3nyJGN&G^%d7+q~KChc3l^rw~R=iT5(WVq4~Db zaa+FwPmis6T0W%ZP|r*(u~MVo@~&Q)GvrY@sPm6$pfdC|QI$V3;2;cM@j6nTx6Bb- zu0bl;;hp>olhg2t6B(NLXmrAsAv;1Jd5RvPlw+j zb=Gshy@JIf|JYJtpL$#>yB5zVo_CF+fXQ@&+&e<6`Zp%4aeD>q-Iu5N;L^{X$$;ig+EWD?P z^xX@?R2xb69H@CIF3upu?t6==nl=j@cxn^4^(asmwvfR{45FfiF_Ex`hfY2AM>U=O zOX;~aaviB5C@L0S%%$rAhpQWVBIG?yD}VY*CyNut0_G(_q>w4CVr8U_wj%(8OdQO$HcZl=@T5ET|hKXm_+#qKXpK-93 zmDY1~pIKqYx~ad|FkQv`otum};5_DtS2joK@ti(g_fjd$GvKzu%3%I`j4JjZDJNh; z*4IlYwxxwB7uoc~Vdk}JJyW-S zg92ODR-gqN^`4|ulVSx{NIwmb33#a~yXxJ~OhyVJ41>c~7Ef3J*nwZ1(9171Wye|* z^{l7O-I6`uTJ?xjKd|sbWUd<(4-AoUBOT?~tH65CNmppB&yAd7yKIBRB5ZPW@I~4y z&8O#fE-RiE$D;mT2xy~+Y++uKkz|??=UK}-U||r&axEr$>KNh0YSAhyVfPa+ zc>OUqjh>T?7$dci?O}@W(GF(05>+vN{!$~PD(X4<3a#>LF;7)g67EQ53 zksRzHe-XC3RC4HXxfhs{hbmQ~K*fxV7dT3_S2%1nW}zn!_h}R%Q`;AH`Jt@b_Z3C= z3MIXLd=E0-H@}B_&SD-oh#Z&o82hBG2iyZd;^K*m{fbNTdk!*6&b*6m>nw~4Xfswp z!AgJ9TRqOA?Ay~fcxO$9uG)RRMIe!SLbLt@>rPDjd zr!`2-$g^=V95lV}L0JndNeRlJlz42Zf(Oa zyblTe_=u^&{!C<)Agx$nByxZzG2TZlMX2+Ll26JQJ1Tsa5xVnQ2D(hrmUvoIx^13{^a>UGqNgh8{j%~^ zRjt2d08!I=QUZ`>aqrl}P`+oVyt_DabgY!5LtF_m3Vkx}Gf+a-;Gq8_v}Gh2ZF`ee zp8jWlt;6$pnhM`hZ?CgPnC9mq7sm9yJmd|6-s`qBn9DTmx*inrqOt54V18_2%(=*@ zqQuzhsjmn^t9{gdcgbkq3?ygE1TF$vC>_Y0)N4(OM-9*zVw3q$N%_l#XUC#12awbR zs3Adyag?UlB$trabix__ZgO;18^%(TyUMjNrwq8r&QP(-sBK?^>13;Awa>ylOuiD0z!001BW zNklZ6y@!Rb>OZM3!G)`;cH>dk}o z(Vj}2vgXjZ#UhhZJTy|vp>4{4pC}PW{GmiVk5X`ZiSk)UvH#SC-Q^o@Q3ejM|`(mq=RGuGZC&H#>S*2v0H_W^) zOv9^_qiAsVOll;g>_9rYwDAO}SPq`#F=EbDX9SC5Clf*X#&b^;n1E(4cnR8Q`jWXYurYY&N=NLFF37OD!zuWU77$?Fbti*y6TS=!B`PM}?LEa5uESy1Vhpnw> zX>vX3w$*NFZU1ahu~p}oEHTe6+c)CMPiG?|A)w5AB2x~|fGWqCj{0T=N#X?Kq(}`k zSrU&61&5f-gy@hDV5iI0OqEEaR(OZq;|d#8#LO zOJRR#)wD8K|6=>&h!;0mAx>YE88tZl9CE!D^qW_JDbBRr7?J zOZ1}Mqqv84zB1wpDvc1&yz()E2J)`Hds!(vjtvToULQeCTlb1QGIs9z;g2<2u9mBmlp)vRx3{178i)I+| z!73D9`+7nVH;3TH`lfXK4i2A(+!XcqXJ)96>5s#Im$Mr$Z!-1*<#VQvkr)o5RWunU zAk{$bCsWmFi|mnmL63$#Ov7S^_0GjAg z-g3QGEyw~*TiN?&$$Z?;9xQURf|B&c-JsRWC{~5*FADY2+YdCTc|9i?!57zf*dR8C z$ErS&H4CiaZZoE{Fsc`3kQ_4&Z3j^3@v(hFE$Ru8(jXmJ^3ue=SG2?<^y!swI9@;g zHyxVK2&w;frMPJkN7m&EXCx!H&O$_QGXiVUt@n|ybUrnr-PK8zQ9B=^C5mk4VG)-dYA&lk|FEBzti^hYnE@E7nI8I}j=9({RndRU*S8Tx7q-boo;M)iZPn2x#^V#|jzK$4Ic z!p}@by-`0n%<>ML%?Kehy~ce+7Hr)Y8zC`QuC;nzw>Sd-do1^LB@ni=InVD1S$xe~ zN&v71DrAib2`s>4F~?TQqykSJm9ctnutLa4Xo+b(*fsIzzfVkCwmD!)=YyKNj-p;@zQ?E;}z7S$!uUQI-3=A46dd%6*jh znRt3Fb=or|D5&|PcgvB+ViLUKxld7C&_nGi`dQLA9at4Bxpk)`Ltl|%{+25qy?gU% zkF1Q+v>O@8HK7_HN&0T~_Suj|Q%so{xmbjd)ZS#$ygdV#4Ou^^_8_d0;@+ndO(%a? z&!Gjcr3?=~ot*#1YA$W@Pu1W#m!I30JX0C;B_;T{?(ZHIEuQFe%j(4MPaMH84tLlx$0Y zRmsOAlt)7|{@(Z*QaO0}Jq+HtMoh2gQssRoVR1cSXDOqiQP(Vd&uD-etpy6gA3kc;2cm}2 z1{}3-VaQoDgPC@DPd$*0Vfzj|fBjgI zHLz;TA!FrXAr^v+A`e%(COm40B~GjUc9ZAb`kpMTR$B9>|IW-|wV$f{UYBZR8LrFRCY2Nc$MsHrjilR3Hpq08EUMU z{#_TGXF`EoOqfYfJZ_m+kSx4;PXH%RE*RgnRf6%tbH@x|$LA-bxPE1fOufE+V^z72 zf|EyFG?raXZN==}(yX;?n1i?+GMgvM+g47m<^a=@;-_=pkrfqaK4y2!V?f{Z>Hp`KiBXjXbd4& za>1>!*P>3$lT3%%@gT^EUe~4dS)kCUpqoh1^5rtd(&cS3&zkiv17a=YC?qseavFr- z0p+2rRZ(>@t}bLHnCY7SU{;xy!AOxNVec|uvt*80RtdFX%p1&rG;Z#<+C-{h{I;I* zslLaJYp%UGH!OUfi{ZUA*P(`IN9Q1;5wCR*t7<&DHC<<+h|eQ!dwuFfu)ZTAVK76u zJX$~_VqljW> zSWb)p@geA85wXw{`~^kU`vK_wKfa4iMf&$;NK0OD#3ZB$#m%|cp?J#A#Q9%9Z6mIi z#hkMU@Jkex?#^KaoU{+AQ%o!eYzB>aR8~DKXjrZZILx~ul8U@| z9u$-5XMdlyf(nJghtYNY-!JwEsU);C(MUjRUyDW^fO@$$;Bxx*_q~6lDwyHm8FOBr z^pP(a2`DjG8*uBRX7KcDh#XzFSnuJ$-M2%H*h(*I8UFw6z5nlR*;yX;JeRA{bYzW2 z6U%a3L=m!(n_3A%X(}O9RS-~8AXN#K+D0S-h$50g ziDO(EfrVT`5JC=dEJR0^gWQpsjz-hz)$P^o)#vFC=j^rLZ)@%Sx%bYTbMINNHNN+r zbN1eAuXnBY+j`&U9qj3I;t{>9ak5V7d%Hr*qzm&NAfun zwIAHms973InbwDrf-x7UbN}uEH|ufq)}d*ivaau=aWz=aYd=xcyFx%dHEs97Hs23cgL)D5@M3ap@?rlNbv+7(5X*Vuh*b&qsQN>Yb%+ z%hvXeg7(F%E^R%^8;57bqb3_!*3RYdB3w7-em%KGjnT@o z-Y^EnNwa@;csYfYV~aHv!)~ZrPK3Vq-Oijd|2z8-(J1J*0_edzDb{5Ki2kTZ2ow#T zP17>NKPCf(K4jOAxMW0+Weu@j6Ah8XDonBzRm>S8CJK3BwFt~+)NRWNMQ7O?nYRruMizfPn8ww-$QJdEo0E@d4uE2VSgQT5DH&L|sM>=|9# zNn?+_hm;J~rXYglS=H{DL#Bw9kS4nl8thNJfP|el6sB7O3BK=rdEj}$9#OJB**WJy z|2KXrePTl9z2AImi9ztJdPp9NlF``TP3M(Wh>Y9os!TRGD!Df1ZWN-o{?A7MomtTC zk>b%%*0m@SyS9c3IjBo*KhbKA%C^0uj;}fVq5-Js{Z6p7Ln&RWH%@WQrFZJQqW6?L z^SL$8J#gE-JkkazZf|V6mC|r5+xJz!&GF`YUTghdXm*WXKYI$GPspRewe@=3|NS}8 z30s)Y^OLEVG>_3Hor6Z2oAJ^W5@Vm4P$tqmC+9`yK0?bObIhe*(#0dq< zO7?o!RO@#=6z}yRanI@Kp-T>!u$TqM(_@Vm3m$c?MdmC#vVW#06NlddmUMk<%o)S* zx`N5QvH&vANPjJw)+fZqdX>xaOwVm$p^H64N+7sr$0KuYl4BnV8 zhHf=6MV1+Kbx&8{w(iWKwCF$Up(ct|n;j0ct3g|lrvG_cbg4rX|73;)vI#{s&I8^@(+@DN8ChU9+Ja7drD$w?+VDM!I`ckQ*V?SGnliaEo1B zK0Iqu9S)1xw%%hMXD8VTb&Z;g6^I!$n@|x1)8LL-!z8ybU!Tn=+>}9BZF)JYHtkC_ zeprjPCA&M{kcWZsC?ex>`MvCP(S*A|9_`ncb1w!p9C##wTJ|cb1Q>=N37QVd)?Lm9! zvV2(~kYvvVmNA_08i0E*Cl|>lU_dpDDwIW9+gO{zXoArNjv4m~rxk zZ2RgW$A4U(v?|HvY^)3RX_mkx6RSABogo#_{D3QH&5A6vknaKIHVe4+bTft`%V))F zopqh8QI?+b$n);EuE-f#@!jonI4Xh^E*I_FzI%`f=fWd<2Gy3d4508}a~+;lKVv=D zD%IXQPA6<(9zt{W|CY7{t}QjzKJq>t&*R!Lct13lWU%;T7{tuw?;W1w{*1MB_W4y~ zScYP?p)LKmJ4WhzvRvm=BTa^|PQq`}dJ)RrM(#U?b%KCQ9-mdL4ZD8V-z@GRhWB#V zR>R++esAP;*0Y^7>uy$=(dOmMc@)!)cXr0nE}49>3aJC?xTmXk)#bPMCpwJV!^~bc z>Y!kTU7>sLGv&a#2CAIt+VM=r#;&g7@pELpwSKyx;kFX)@dcW_7e;OT%RCx`u!VYq$ND zwUr#_p%ZH^y=&=3C@s5cC&ETp7QM!I6#SIL?yUH56K&>bbqd}J|=rgK{(Jj zQ#uH#cD+19XcWoeH(4+&nO0O-kd2wgPma%V!bR~tOyQ*R0;hA~c(IvwwC`TjgV6@Q z7l3!c&8xeY z--G5e`uBtVyZLYZP1skL+%Z-R*=lFVBjmN^{wrlEv+?WpQ5YY1F!nCfLs|+`b3s|< zbue}jb=gsC(b`&&7O?3|-w+G8;Vs`4UvKSSkF`Bg>@aIQARSv>$7Su?0y7k+P46gM zYFew)3(v$sofNV9KhCY|&a59;A~*IwN3H1sp~;;P70BGmjOwC zHdnRnu#piLCog^Cl|k`(-I4b_ zm079CY~XEGN{JoIR;X%T>T2t*@>7oO&d5DeY+Y`?D#M}X5mBMMt1L*a;GV2krck3) z3o(x@QKESiJ#kieqBUHWYP$!}F$*-zmi~wakWy$ze*aylhm_lgpC6Cp^oM-%P4`}F zYxJ#sgfl^uIUTsFN$(*SPsn;hX5+^O@s86f4A`98twDn|l4E8?!PA6VALYC26qdMQ zmyX*4SLEs-ebg^X-P0s(;ZaI@*yNG-qDDp1>ypgIkRa#HIpG#?TbmFG9v~TzOWeMJ z3sI-m1Yq7DF(ZhDguOh=C>V`r#-r3)!XVEZPu!htkv@`8>?5vL+#0?-A>BNs9CF35 zgvH=<#sdBG$+YxZRwc|YZ4MEtukD_(lv5GF%PhM zB|mm<+~YFo4uC%gaGS)_Zf3%?l|{0-Kj+}z9MvLvo^|;?PL3IU?%s*pyzkyWtkqFk za(~^m@2>#7N$_<*7pstbDahIJs0#pG?+cden&leazjhyMh17d-d+5*N^H>P&E1`4d zRMlrbe(wJsZqYtSsW_WiNxkA{)8YiU;AWl2M1wm3z9Q&NkniQd676mlEeW!Lr`3+T z4=0`tb$o3q323-^-SX(H6&Wz$wRHvnDkBA4bD>p0=V}M-E{W$Zfj<-RHGuanTNzc& z9#7AshwBN}at~&WUuMWoMF_)L#om=|zy}MAzcK;7-+-D)Ok@>nuF#qK8cko47*vx?rg36Pd2o(EZc5$Cf)2IbL}Wz#l;P0|2+4`=KAa z*mbCmp?n5Bat2cjyQOyI#>iq&TyY;o8FxTXy4VJN>?R}lN_jK!Hjc`k%N6<~g$|5% z5p2bXZD++`p7{81`wboNVz2Y)x_)O`!%+y{0`PeNzXjq}YrcnEMQ=S@#jt~`HB#nL zyU?Hg5lApBPUA58wIQvyXjRTdfrXS}$(GyOLu*@*849RVEtIc$vF4FQrC6YtR^tn% z5vBm?%Ygnd$X6~kTvr(u=f$H?aBcf@DMowDv*bOwavw!>8(ew|bFKwui-v}?VrwC= zy1PuFmDp5m)a9{uvG=WBbrSwtk#Auc19e8urTa;e?g97;#9t!#Ig)otH4CrieHJ1S z>ZxCm?oDA|G$_BxOZL-wL(L`XbToFl%@{Zi1CP0Aa=9pW3$>v`=b52^l!?z zDc}1F5x3G<2iK*pzN71lSmEw5_>|-O*+1^N8h0QSbQi#v3H*|%|B2w&c){6qR_ToR z^$znW|4xNxUdX-S9?(`X`UMxpR_zMg;aaa7V-ZeU&w=)5ys2{@;DbE0sj)f-vsb}NKb=&0>F*PZ@F-pG61R&vhDiq zKFg5Z($YGt)8@rHA6M(o4N|<8;A52qdR&X`UIvq8*Bw-RiA@j zuhG%P)*(qqP^vsAD$|UtlY*WfL-J)m@WTx&z`%5MG1y`vU$dfWHFi zy#U??;AX||(yDaxyzR|)H>CQ%D~qk2H5^8$ei5arg%YjWWaX-xC3yVij(|4-d>PQc zAo&FVUlDMNoCq1cNQbn&=gZdTBUz?#=G^{obWLUQ=t!88DkMVAk}Q>Z=(xD{HbT)C zWIYJ)c|m=4t-o(pt2FN3xZ#JvSec z{*H8S0GHbkZD08A3c#IDeCikOfOrFk1e_aei8w^kNgah^11)yFXa~O)?qce9y4Tq3 zE79aR4NyURw65xFQy__$GW@ked#c*MIwCM!0l0epN2VegZrl6V|62$m<=W`{yMMp! z=W<6IbZ!dTi$!XHPwgeTR;F4<#=;UXQlqwLqNlRB#?vzgt$m`MZr@Q?hxMLEsz(xkUZ7Wq1(#kc{MQj>UI1mEzn$tSt6+#1O--f=^D zSY%L;Pm5=>-XxrbA{|EA+9o;UN9);@Y^T}fLat|=qA%pXG=&7|Xg$&#CaO(b56UMU zI0k5+?CvtVyTP@!A;5Mp*$%GPLvgtXBM~ESwtR9K$JpwgG-=W~I!q?(I?E8Qa>pCf z%#dfM&c}JcLNJ115+9gsXd2~2hL9aik41NCumJ5q62FW`N2OHAI)$#*7h8v9!x2j? zzDPqMd{r?!sJII^>^V@g9%4oxBkTuSQhsXMSCp2-K+A#25fHSWp~tXTCrz4kF4S+( z*>-Jor#8H=hV)@dQXKS;Yjqyv(js4)acpydP1j;9%F$~v2MfgF*xDhM=;T>;C&aSL zZNOD#F@-}w4%UslB3l&;2MRzg7T?_J;gZcM>j&3+1PPzRcf_tWJ!#UUcUT=&i3UA` z))wM-+m0Y0&Fna*B6~_P7cOMXBd@@ctXm+8%xej!NBcf)3-e{-iWF*>q@cim;2CauykR#O_N>jLC2h+dWtbbq-G1ik{mr`V}<6h(JCRDx|DgMG-=Xl<j12>6t*Tz-l9QFIth2veB@{!a0=ef4Ihi8+UKga0 zB=2)XAEb6pxhSN#Cta4)HRQw|`GMm8 zBZbh*9JaD(&poPlI4>D=!jK(IsLQnHRYdzXI84eOj78U7@6m&H$X1NxTN>EsyTOV{ z!TD?Kn1~2%6YpKU%cMz@P9%%$zBc=N-P<`rvxM+eMn?`28o^(0(Pf7CbL0Nk@Mz-9 zvMb#`%Q`E^c64ihygek3=pPUGiXKI@i3&pRP>^KbQ!&W9wg*WrHVoDTYYT@(OXB$N z+;W1$YbQ;bbOKpa#Z=hya+G9K`@SleF62Q(6Nz$bPx^J1eO}htWOcId4YlviKo*@C zsi9}F5Pk3$GwDn0mo$?fp;cHo&9)GZX|d(&U^VYa;3WZ6N zPAZF9alQX{lpCuTWk7LTxk`p*c7HeZiuLh9QN~|DVL{nQHn6biI@y}3@D%rMXCR19 z7qTncMA!yX7Bam`bF^-jJpeSBBDRfm06w%R4c0}L`O;>wxP?L{pvBZD<+uP`)(m25 z<@Ay!O*#kC(LkiB)e-u#hYnd`{id0&$&M%~nxOy)$XjnR-bM=-IZf4`}S6_f|44t$YK#F)DI&$uPIO_t|JslK@n4l0ALFpBy zs)AXAG-=YAsHEi_CFjD?$rr>(N0CUSkaX>3KsJmkfzZ#DJNP(sX!YnTIfSmWopI_6 z1k#DyPt+5T62IlL?aSW`pM`#+b{s=)m_nv1+lO~;z%3fL7 zi|G}9Fd3XkK&4RzD8_{34c&bOB1Io342ny-edBaC5uDQ{H7K{i8)eAvtq`gd5O@6E zyXdvz8uf6j#;w6~w;NSVnl$O1(MMx}Jdzjc>|+gNL-p^GjEVB3s-hfy$Bs-IRb-xu zZk)|RFp2%Lo=0U2R03Tpt(3|ViXIH%A&T1HBMd{gSH05xmKrMdl-Tior*|}I(rKw` zd>8lWVnnxn9b`#mz_K!k70zm+jIiN972|VB3_;c%uce7BRWgz0`k}nMBo7Hd%1Uz! zB&2H>EtBHS(tUc*Q~3M(OkJlSS%<+BE3ncmT)NoV3Ip=e+ix)RjczT9>1 zC__pxQ}?_gs=}Q3Ro%5pAmd26X_V|oW*FX;LyPhLWwKQqc2`%HIse_4tgjV%dcGy<-&JZn-{Vi;zy)OSw zE@1-fcaW{d;-WO2@wDHV4sPdAi*&lQZ{&VRvTzt-F(jvwD{Mvs=@64^yNZ5wy|b8s z!cd1)sf^ezV^OH(Sc4+l^Vy_Hliqo$RPD!@O-nLBf~hsRi=VIZWl7~;vW9(!g6jV9 zxmA0fc7N4K3zed5|I=FByEq1?u0uL8+V@dMn_3;)>euD;2MxcrAeX6&H7S**c$Ga= z1>^S8v_S`KW38I8)@@oBFH&i5}7-h;1(Y$~@cn(BW;YXM(8(Im>u# z&l91kO16JTQ;x9-5|d>F77I8$BQDsw#%XG#Ns~_O7!~q~o0p7g5v`Zwjp?ipdtO>A zXzh4sR?hT{>8Koiw_B~Pe~>$JUz9?!@Ibc7lwSvC@)ku!e=yh7zJuFPcTw$GXby?H zmrzmkP1=)G;i{izv~JR*vv88^pEPJMW1~7K0%PRTMSg17vhr+)+}*jgJzssf7Q1dI ziFZc!@M#s2RVGow>-x@vHa_p+FR1H9jjbk|V8LEL`iKD^RoHZnCQUjUjZ~J3#KZ%7 zAw+mASyCc)YdkKZ=%OBAi6YcmCF^3^)!RbH)yRrf&!5k}%NJtRfu5-oGiWrEnw^UBq+!iti+cw0^>xU(mwDFy-t7M_MOchjMNL;cz z26z>=zekl!K${`bxlfsd5IxqxZz{v2<@m2nNCve5{eO)$@}x@PstVQETA({D5C<{RigXKD?{*KW6{$^{H0e~b$ZCWj4;VZt(@tDMAwz7@K00+s z9yX|yZT33$<?sBRwvA|LrbU3o{L59KB(`i$9&W59s9s3h8{x3m2!0_Ye|!^)0YurKBO>z;0LoA5IxNFusa@>uNJ zt3!&{BNW?aTmTDaW7AT93vH;kPc&&gAEEpQxUG^0k z$nLenqFb^R@!I!|$PM%KXwsxJP)ewJpw-<7tWitUAgC5;p^TngQwjM(+XAGSm3$2H zjWwFh;l4VH!pIYXt0I94`olNlA(?QPRa^;tF!n_1^iXQZ;=3)V>!}TY7+S-NtiA3h zO`3F4!hAU2wvpmPa_9XsYG@<%wbax_lO~;BBdv$dsP}l1Q5qP+^16NMTquzK#!VIx-pmI zq)C$|O}c0giJ_3EDiT}1UjOVDlEuQ*DltD_cdQhW?@^MP1V(FugFY!mvPP>_Kq%r3 z%?Bq01iD6{Hh{qaB22HawJWO@Sz_v*Y8liifQ_JPE0)Sf;72&K+yxnNiD_!60p%Yu|eNu7`|3->QAm zq)BI^mYS?#Xg1_g7jif(re=FZz<@;;l^~AUczsj{XAA>PIJJ8eA-$#aWtDGmvTg+( z$TIXI6_Tn`L=?~%3Khy&d%!n1cQcnVCP4G5P%k97PKrfm$6!U-Sg}yWU)OOmcvL`W zsx`f$Nt4cln&HZ0#6(>sB8)r|IECV)Iw(8CD)hOD#%zuntp%@5))iQGOG%7Xq*2x- ziaza0(xw!Hr6@5*HRnGn2s8hO}Gx$)9tDotYmD0?zn>6X94wB7~RlSFM znRZ(!3YF*@Re|)LwWpq_D`WO%-JQWX!f89kju`7)*U%57v>oK(Jv4UD_l+?szd;kP z;Uek$u6cS>BTbrg2AXN7$na_0Ra$qv&ekKvV3578$qN%IY*kE~MsFCKYPl6e=2_9r zQ!;;BDdk3ZN#l_huUY* zmLjQ8TK8RuI+8~flFS}k*CNH}`o{WW?+zpq9bujK&F zeZ4=QBJkvt36mzBR3SYD;EBGV8h=*Fi>)rP*A|JYtVvi929n5`~3>g3K&b7sNh@Tx3?0VN+%P zOT(59tt47pEgTqzu8k^UvG#&q`{1?H;`-yYM^k-G=@oafUyk2DL*m_-VY^9_P8F?r z7p1>Q@=2&49kEC&UNIfRV8dxGgl+s^CGOvNw|JvjjW? z;Ty|v!K6u(-d1|)lb?c!cZ2)}NjGD`y9UuZkDh?60N7U+t*k{pyw{qG8W}X|RviEz z+@r0$swyD4KnApD>T*MNvJ(!U)Iig4$|VT6>ZGV(_Ei~I1!3AK3S+Up_B7y27LMSG zcaJHa&j9%M06aUz!=y>?INb#BjgY>9z|B}R+7MT?ElZ*@>B}IPLR6pOXG4Ca7DP^# zSP>z->Pf}^LDnsQTjZ^Z27(u(kkH_FR%RXnE>f!Es`+UmbSsj>A$w(YIrD!i{TD%;b8vU1n_r@4(%UYBo&@pNA^askPaI@}-?R4oI4g;)U-~T^7=Qqb zB2uBe5T6&HDJSddV+Z;%C0Q4Za;0Rg%L&=Rqvo{m7ChWe6!2>(EZ-~QbZ7UIslcp@ zO&63@Tp&y9it0Ym-S6M~cpvZy0N(=O`v5&PCB>vk??AYY`~blJ^k@*eJ?g^uWhd&f zZ0UEFMpAAX;OAA(&fXZBp3dD=h0##*n(1fP-knFA_6$GUsW{Y zQ_Ia?e-rM*3TZe0o>ZCSu>2;bhWcmu&yF8I3*ZL;{M9KgCQW*qjbY(wKtBZNgNI0w z;CiodO+NA{;OclQFuju$s^RLcx3(0r zUh$IJesr;yXKKx0hj4@BH$(cbUi!qR-T?W<7oPv&8M>P^>0x_D;M0PhgYaLHe9BcD zszO+yYh~m1wiG(B622jHG@hCICi$=Z**J|Hvb93Q+BMe7r1U%6JUhrbCpO92@w*fc zse}hwYK>Y(nsV5aHg(!$#2v4_HiWhkf(vaT8I%*w49z07VR<2&<0&yajKL*w;2Si6{~kF|i- z2>P{IUUWOXz#k1HS2V*ZkbW4@e-{%XT82Ma)Jd@j;qfVu-%H^q1bp!0Qz=cF^pIo@ zpON$f0AGaoeu6h#(>m)3+2VCspgjBK;9G-=Z_sn4Ss!fxh!fA+AxLM6B4&kinD zA(8aik8Y0G9Hgc!LOhlUi%D+j*fS@~FvtHjzzW+Eo!PV*hWdQoON2PGzq4m#I>wk; zefJE3?*;J9f_@snXJ2~x=Ux|Zj{shH{)eZenKWsvgl>?03c?2u2@LptQqMxXfkGKI zsIQKfQdzZ0p#?b+!)pE(MEG%PXKn?IMR~C@heR@_t*l&<@)%{E|Kp&*F5N@23}u@k z`?j}Fq0ufC4KLt33Ndqzd{WGPRMWp_e_ zq>v(Ms*TO(G6B%)_kLj%-y09Cea`UvaD8^=it*V3w-qUNO~Me$aWENKN?vnNOE(0( zhs5_n`W66R5b)0ld=bQ}FTMP!HvruRa2Md!S}S!Evl9KtpUMRQ_%3C zittG*GA_cc>6cAG)4aiYU*|oV3G`1h_dUL|T_p?$$Cd?4@=CHly*usR7Rdmq_jE2< z%sg5XeEm4KcvSB!bT|^ei57B~N9!(O5Y~rCM&^+%m0>x?nn&mubqe!j?sJ0&CG;eq zrvbc2!Z(5V_XT|0Av}ktrGu=CQIZz=Pi}`Ft2ZkBK30+);cR(HtPM-b;?E`7!?;(g z_C?{kpgZ0B9y!Dy)6#P}BRw&)vx4WpOl7{l0MCP$$-1>=}|w+%|vS4&{=iC9`wFX4*NSjuEUz8Gat&MHd<*hi6M5Rfwy4bWeAbyMo!73-P zEpC}T@3od^9Jds_y5oE;!nFBCvPG6g$a0-uaGi@Dk6PH+n%{;e3lxs$k@Izok>UY3 zJ&$}1-m3VHb64`b4_U$jZi0A%hZZi!R^+dz1&`- z=N-8Reol+u$9wed8I^_oU1e8VfY&Hvpjy_oZ80#;FGeA?tiwY7D_S4Hl#7WeF1b$i zZ%RwHv-ntqUV5&xu#r-}cR^|mD=zRN(Q9gg;PCI8$2offz*8=iA+ysKdBtPM$|Q@p z!%{D%R;5*0YsK!?Q7E~V8(e!xx$qcp2-m=PBZ~)Om12my!$l`lHoISnmAxkwYsr}1 z7%{vbL-Au(5a|m%*pgzbM?e$DH**?zf*hSA}XJc0{sQDck%qK}2N6Op;k+On9#;nq!C-LNmG&OdvrZn@Vg-6{fX4EUw!0Wl&+2dv ztK^!19@6G4hD!<_t)5yPukG>3jiHy;3j}W&4QrF`FlE4_C|zUEpn^w5q0Aau@9-!- zcC~F}LX^zG!6H`Z_E%?qoT87}-HLnI{JM(j7|lioq2Lk@)U7)z^s`H*vf;n(G$Xr8 zRRtD%g`Ygs?s#iOO#zAOz;=ek1jSRPqVVx6betgd)eDIe`PGmYo~$p|WV z#KQA%drqlLN zrF@9I`&|OSYOB`n?9b}&!}Z|2p4i%$4)VOs0oRJ~sxTKWMAwri%u1tLyJlyw6Cz#W zwB2y3(H2#w-X5ZcTCB53-moFEGEScpPaq|G#kZU0a6xzZ*x^wx{4?ZHxp+-4oQg-R zyB#~>Hsp~(D*)@WQCsj%mbPD?M+RxTIGe3_)YDJh4$_lHC69OpF4Ae+Pq2uKE%;7k z2<>?*JAtaU7$^%2DKAl67E{2j;wX)(&?Fi@Cod*)oZV6i-#wZup0kxxAUEE_!MA(} zw2ZO@AJ3e3bnvfJ-Ula8wR~pJ8 zcTn2pkqUu?E{_zmj7g7}U-3v97*pECBbsd1#;?R9drk;{M%)VzakbW)G1W097!P%N zie>U>FORMS+yhVBi|q^=^cB^?%Jz*00>I+orH-*1Aq4GFFb|-V(0PaYlEF0{*UF~` z?;6HtUzGZF_cV7(c5pGKJ%dzM0@9BA+*w4cvj6}f07*naRL?rp_13Ef>ucA&v@rzj zoBy7`dnoU`cRg?M2;JtI!y)KCc&i6kx06S}p(*IyQ#Xx0b;#}>fV(|~k{V>Wq->Q| z|40GEdoRrZ_X*^BF*q44e{U4`&wtmZlIWeexZglN+|ikj<$IeZD&60{SnuWE)u9+) zL-8#)F-1B0#r+!=W}`;-!PDW#DI^{|x^)c5f6 zB7V3^Y5YDR&Eo-;Qa5%k+?P^HUY54sb#VzGaeaZey_Vlzfw#TR zRg7bsM|+eKst(fEQA(3XkhI9+lZNb0=^Dw=qtEP|@8Pe1Pd$|PnmkJT^Dcl}7u&-8?|N z)|_Q#NKDDTpR5tO>@E&}w|%qrX6JklfBk#%p}g1RQQDuk z4+@DFn$&RE(pMl}+gnr6%F;r6@KFJ51r&w`H*+P6ofiaHZlb-K7itJ#5(5+6PaYcK$Rj*3CeyjAasYy6g5 zW8ZicyRNp@PvVgUm9>b{p>Vna$L$SHJsxfHp!a?KMU8>ipF@vXiIg=P+srJrM-E9q zIi;M%x}7}Q&7-#jy+xfi_4~AG-@p~bKi4s_!N+y;p?0eyqWmK1#)*}X652vDX9UZ0 z?4}r7F3Le@W~-%irCrP6Jm#flDE2-fic$#4dyUA4yfO8BL1$D3wc{IZ6B+2-0=z7TD7BXv^}gc+@Z*O;lgS&l-HntKx^Te?0qGKe`l*LZ4{`hs8Z+7o`N!pl#K6`3lpu8 zqau@$9WTz#XE)f~@f@qBjMY1hctiw#Vw`#gPShwJ&o9 zt?d>q^un&ydeWwMKY4`MdG<=ctB`J=8mr;7A-jV+{yKnHU4N8-r6$uoHhT;-?k`it z^e{UuL3DJi`;Oomc7J703D~nHY+98~uooVR{Y~s4Q-%qWvQaqHN4XK#d*#Y>cP+XR zx^(~c9Ac~xrQ+H>3MG!MKzQh6=Fy;(M`NVoTjY`T6p?t>;gOjW*>_N%M|K`#-As>1 zF@)J$*FB-!v+^tcR$-$!_QWGM4<=L}_O6}hw)PcZa5Q9ZT?&!pYNHwbGYtI{>Xc5ROTzB*UAPCBYK!+hm; zqZHsByxB^#-8;9}zhAv3hu8P&ly=tB?D@QY_BHEht~u{}=WO%edw6t>YZHiQ1*tW8 zwDs?|0Q?z_HK7-)kd6~_3&58F+{K}{&!kC{CQW+h=yd?E;!uWjxgoow!EhVU{{iTh zicFAA55UBqm;Y53(%ARvStZzv-CqBdw|v3Qf$(NE_>KZT>@rAmwquI%-v{>H4zH}b z^B4xnAWd9z48wc(0N8d~|GkjOKI97R=26T{#V&5|^ayZ&McbptXpdE2c;OX{&-OmT zue+uowu@%XM$7&%xQ`!g|l z4IXiGb8Sq(eevk}^Xx}7EKW_$D(f}3y^kuBp%*h#EDbx~EN`h*j(Ecd$_P z=Cky>I(fj(VXR?_bDQ3w?Cstg>zeG)t5DCC_VL<^M<{tj)|)kD*~P6-^qMf0!TpAz6ZK%u*aKSyz1V?Z)S6MVV3Q)y+#o8dFbgRm6-zzA$sa_k9nFZWRyZz?N!bZ*z7=;;Z z;i@%QlVCCRDQa*UHbmnKn0*&vBPgO#0)qA$=FX)#jh0<2)mq(EHdJc-NAyuVDrAF@ zc^Y|S$4ibZX2T=*e!1SO$0N%tS4e(r^PTolGBEPo^>~!$fL$y^|D4Rn$)i4xj(2+< zz@Lb`cW@9cT_GJhpxu)6F9E!HfWcYSgCd+pSV$W5TUpXZF{+kMalN(kszV?T^$iJ0 zAqlp^wPy6>kZ|FA2i&Y2mnD_!d}0fA6Dw!O)fZCQs!ergEEtvcg&menupk<6A9mTA zj!#qXkwZ3CsW`zC&I?u4k0FGBli*<(C;RX(8Wj8X)#lq`E#X(;!#ZPM&QSgN5whGkVn@zf|)#Wq5mrYuLyVr&=t;rPOgw%{K#|1b0mCG z(pP1g^TlFGS45VS%_=-vt%z!iwyOEDXP!EGX+(taSZffLg=>5FtlrCNIJNJrl9Pw= ziT@tePFZv=*W)DI%kH#wtho-$LW=lzEcyUhn5GVzu~jP0qAPx16#`ZTkd8-^=X2QT z>$sWTyWMZ$TTx>KMWp6c*{waA+Dw)2A@k0*W=sPf*@Jt!cjtgd*%NScTh4jib4VTj zRJ>Z}(ZeS>9tHk6!%lr3Ep_n87Oy+z&@_)+>Npi~8qMAZSc2P>uGVQa8tT43?Wa2r=P<4R#NFolNd zLtg|7=jc_cZr7baDOnt9GQWc#GFOZ(S3GN@X+`is8*>W_QmGIw@t~3mzxoHt=K5&i z+E|DtI(Vg6Qxld+KU)Q}T#GNE(POqF1c!4VnrOy5fUQ&y4U##F?V8WIV&uzq{99&^2371>$PAgPKj9j&keNW&68) z-7@T6;_@;#62d&0?|LCO^ctAaoq?6tD&C}+*YMtnr{z6*^A`CUcxObBeTK?;J}7#j z_e>Pmso+uX&n+IISc7}QQCaBsfoO|)P`;mv=da=97;4%xUvvWAc^8RCGz}h${hoM) z&hsaa20Xd~^o8Tu{n^lsa~ce&KM?e%N-^Xr^^=g0Dn`_8VcbvU_3h1jzZZ$P*J}J? z^R~GS$|#MMiHAzUg(Y%wEi_opk)89{X}IE19oniFNw4XfgMIAq$gM-y-WpvVWdRz) z-UW|PpeVq%D(~@V4XgPCmmZInbu2N3%_fh!Jh}tmH-GFSA9`ylr2Zy<4dDL@=&p~& z2JH{uAE+nndrBgH7ICk70w|}OZleSzH@-x!4nT^ji$Yj@#W{;8Cv3?&)R~?&NciX; zHdA%dg*kw>V7E3IBks-$0F&|j3H}@hC8l8??x+mO?B-D)XRtz#&gX9NP`l=l?`7pN z4|_cF_bmWz3m&=U!yIZ=$Hb4VT&iqR$0Ov1d=>Uu&YYY-Ccm61@P5#Q%Gm!Asx<=_zJ+!0K8L&Nc!g`8}Y0llrZ#ia{To=*Pt^VZTu$2 z!}q+y)}JwCF@iy7KQ^XCGDPJiT?)o8#Wu5C-c^JND(J@<>-WAT#_XfZNkU+7d0q9UUg? zy9sQchGHij|J$O`^DYrPe<1XCnEUxT&ukFd#Oqw-RLBz5it}P>dc34`sb<)K; z4~L>pSHr{XUHSSgl{Fc0E@N{;8-DN;m!D#ci2bZ3<qn*hE7;3^i+5x$bY(*-efXZ6hPCNB`f z4wpSa$gUT)9X;5GAZ|Ru0eV0>8&M5v*;gl(&}Rqami=UjYTm)_rmH^Z;Os66hF(Wp ze@_m1SWg4%%uS6!H#K;_5szfNh|M(-8btQmgZB!;OF@c3^2ap+g|`fzibp94hvR_# z$iS-i$VKz$Hh|v)_=h;O`G{)9%;0%mAou z#NYKmdn=yK+~gj81=&L>aN!}NgdJ){wGRTWRh$fhePw7;!n+xGMa$=Eli6I?x|%-o zsOr=?n#+cb=0Y?aG$qR@5q;0o^Qh--yVlf(_bi~VB9CCO3fVE9uGO%SHIIfcJp&%q zVX?5D0_I%0HX?|0c;tUO@YH)YL?^}nl6j;<-O-fWQ%o?cmReHzt?=ncLn`sKnJjF;WW z`1bqsPS&n7=H78|g^MB*2`!w_vZAHc?979A@Dzd`1Kb*`rQ9}rjE$jdPsQjqt9J|`eOjU2IvjC zkX<$btU)CQVUY0%7OR{an`OaY;K16ki-$QV-W>xwpSy5l=aH^}Fn(_4NDV-5gOE{5!!vI1a6LxIA8`NgEkCW;$>8PH1lQN zBZU#ex{&>QC&4VP2aBH;c@&Gf?QvO;M^&r!bzW8Sh?W=Xti6Iqc3dl-V|Z7)J{GV1 z8V%-p3d9NDiboply~!g1_jov$|8;ojhe-(hr@TgKQ6^}2GM>r&jy(-{W zN&d-;Kl-7oa~AnG&UtVze)L0E0R9ZXF9>*rz`aoeiIJ=Jy?&VSMyRCQUj`gln;-(?o{**?%Xc|Mq8Iem8&*LwugV z`#{`~tzF@k$ldLd6}1gTrMW>HuAh>Tg;PHjn=uHVX3T4C0SmK(VWv@;I8lV75Neuo zEmnb?oM-BRmskG|1HV>+xMHxoUxYZ5eTPv}Nvc_TfS2e!ha9YxjoDv9)KwNGuf>DT zYTnG~+;L|uEnTdyQSqoh(R=3ZKDYg2$s-AO0R1k3{~F}yU;OBE_s(6`-@v0l!W$HS z1JLILy|vUUxa_W2Q=oo^mF6|0@epGu<8Z7AK^6#bn$C`<#7+&SV zA*FY4X}9LHTmzNYQ{<83L1?18#UszB;9&$Ft`v}rtC8|qo5BBPX{sAzI$ z&iD+MR1wmdbE7`GxW6{xe3tjj>AP;GMc3jwgPz9X#1K$#%^BJ5m%%-q$>DhvcE06N z19D}NI-Cv!6`DDQdbv<&I}%1d6x`=gD&jRlo2cu|S~vUj+34hyh2X7Ck%dPLU0oTZ zW{*cs`J4Tm4J+T~yG|XyTpmGs9nz->{T7M0Ui|2Dmg142kJD^N5jl3cb<#J0>aRN_62 zQngUNjdxJkn;Vt%IfO@uppgDq2 zwt(LS@GBs{`r=2QzrrIzHy)LNzWBoP0Qd%g{~3oQhgU&dX%TA1OQ@hw-G3$p86gZ{ z+fEa!OV%+($U>~Ftn@KJ5^xc9)wg~ zbcoWjBVCGa3u78#!(mxtJ^yV?8yN$UM=eZaJwH3A9G%5wOSS&J93W;~H}O3x9{Jz< z#Eaqk?o1+Z2jz|znemoK?jYU5-~`3ecmzA|KBSzId*VKV#kt$L=Bi`|^m!CPT5G;s z0FMq$_x=#X&k*>H7eD&^?MF?%f8C=t;Lm>MpWttN&-cA0@c)AFEP#I-z`ykJihubzPop{6-pGI~tgF;jYE| zbon^qkyN5jT;s7r3%_jhEp;DhKsFwj%K6ZqK0uelBLMd#{VAYd2JmTsufO=w=O0PQ z{&kPyppRbC{|DgDA-x9RF97%k08dOqY0{)g7ex1P=!)F97%-A-wjnAN%kl{X&n$xyw&~ z{N*PEeH+0a0`c7d-UHx9uBNsJg-A&V)!%a^csq%2RhSD_oXv$5RCL5F+<4~BvI%+M zm@MER@-4E%G7gI(VR8)GSc(pwxlOK_Cl=i(kIxfBg?VwWG~a2(t#epj({Ak#(|NoM zVu{vayNkN}E95JWQu+Qa)V2^4EhmRx%c6`!T`fMWu0!K1bofs{Z{g>h{1PQuMF zSz#rQhM6CI9*xG7c;q@IcaRUZc(lPN-vzpQm6#at`0z;7ZGv9}@XG-H5rD7$_zTZJ z^0NG~Nd)+*mtKAfz_$|kI{^M;0Pn*9Jl1WNHWSBOvIrk^grn(W<0%wz*3hf&cSW{L zTabfIHWnWC^9m-mHEc&w((X1{_tpalm8iT9^9H}Mu~wWny?z{B?i9*n>M#l(0WJe> z^ls+;(ZoX4GiMP*d24tc)$==KRe;VJ-opXlnza~s{9 zQp8ebLI2yJj4djJ>(W`hZ^!y`3JfT)@~pSXEEJSeu~#9&b=+aoQyz)J&e=L9CJ!ND z1g14p^T;llhRm_SBd5eWEVjka*8flU0TPeOHCCiM=d^gD3mI4ODC{#H=QbI7hzg2p zDL{J=hdk<(b0r(MtAAt1K zCa9~1(%^{aJcA4Jo6Fl z{@iSND*M1({d%JdtI>zGAAKI(1MnK4-xlyPgg+vA`*8@i5n~6VH1_O)(ZcJ{Jw~7E`Z~F9}I^rd7nHHwtKd{2z4~ zt_iPDkbI2SC!sBCP+I{fU*HOJ{zVzjMyoCoa>ytsc2qnHp+go0pAMs0K5T_{ezk^S zn5uDDvnS^VC-2gl}u?xUls7%6kY{+?{O8{k2Si%Pk;Pn0C+;s`$&F=q`w2=TLnE09nO~Oem~i28fAZN z^-4*ft5#IJP9K@CJ>MeA= z-|u~&M}|it1lKipmYCr z&g=Q{=nBG{Aiejojrj2 zxZk73BN;_R+=B2$0RIb!-vIDs0C#`lg^yf}jJ`NP(w}d-~Y(frOD@uMacfCmp%bWPk{Jl0N)1Sy9oX@0q=$I#O?$-doU}O z>ENS`A$zbp+LW#_8FwhWVIpc)U?WS;_PgO;rPcYo7q=fOf{t>%ZZt9r)nj%T*37}- zS>cYe4JQciBZDjo*;E>IC&yh2)(5`Y_mo`mpT0^cg|KLPX~f_yIz zp45$KrS*~lxY18(GudJ1zst`8@&lSBTnJ&~AuZWad4tLz4Rzp!cs-bnViCxCB; z_zb8gB#-(~Dj`&uZfkg>+ZQ(g z?BPCT2&?y52*a(RJecmS+Zj>ba<}jA&mGu-Wm>^1SX<%d`gCm@b!PB?_s|tMGc{oh6_3(q zMma>~{7&=eI2ZRI+!6Uz3V#UVHv#>ggx3h(0daNdifAgNZSUy@pmziK7J=Ud=r0ra zMu5)(dK$nJQei!riOrj_fT7ulo7+t>dX~rg@&X}-MT<#phm3*9zaQ-x|cCM)J#{%oTB2RPHZx8R0Y|FN)r z&o6#hqso<^$-8o5ZNCs}zt)DkPk_5jq>lC-w)DxZc+$7}y+%KuaY3uI_DA5+9K1*7 z3;cM_P!Bxn#Qxi%_I!U%Ytc)!m;LMhq|aCR7{~CQ{RgAxf4z?H%r)|j>5MkIFFl#e z*H8X=vwLCr>-QVx?%Dh`y>!3I0`|u%CvmPfc1y6n{Kv|(F8cFI*~e_#HqYCBue9X+ zUYl2E1N+?^~+~-nq;G9?`d`xUSr?_*{@#>p9zkPq?kh!F= zyyD99r`tp&D_8fGB{3CzVgF?N)Ye4E>Qzopr0PRlkiU0rr literal 0 HcmV?d00001 From e6fff54ce32e520a76597a14f7519755a87f7546 Mon Sep 17 00:00:00 2001 From: Johan Poirier Date: Thu, 29 Nov 2012 10:25:51 +0100 Subject: [PATCH 2/4] Square picture was resized --- _posts/2012-11-28-square-libs.markdown | 4 +++- public/img/2012-11-28-square-libs/square.png | Bin 50860 -> 18269 bytes 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/_posts/2012-11-28-square-libs.markdown b/_posts/2012-11-28-square-libs.markdown index 94f2096..32bd6b4 100644 --- a/_posts/2012-11-28-square-libs.markdown +++ b/_posts/2012-11-28-square-libs.markdown @@ -7,7 +7,9 @@ published: false --- Ayant eu la chance d'aller au [Devoxx](http://devoxx.com) encore une fois cette année, j'ai pu assister à la conférence de [Jake Wharton](https://github.com/JakeWharton) (créateur de [ActionBarSherlock](http://actionbarsherlock.com/)) intitulée [Bootstrapping Android Apps with Open Source](http://devoxx.com/display/DV12/Bootstrapping+Android+Apps+with+Open+Source). Il s'agissait en fait d'une présentation de toutes les librairies développées et utilisées par [Square](https://github.com/square) pour développer leur [application de paiement par mobile](https://squareup.com/). + Le principal message que Jake a voulu faire passer était de nous inciter à partager nos projets ou nos divers développements en Open Source si cela peut avoir un intérêt pour la communauté. Square s'appuyant très largement sur des projets Open Source, ils se doivent de partager à leur tour leur travail. + Nous allons donc voir quelque unes de ces librairies illustrées dans une petite applicaton Android : Dagger, Otto et Retrofit.

@@ -359,6 +361,6 @@ Nous utilisons Gson comme librairie de sérialisation/désérialisation et le cl ## Conclusion -Dagger, Otto et Retrofit sont de petites librairies, encore jeunes mais très prometteuses. Elles sont parfaitement adpatées à un contexte d'utilisation mobile car elles ont été pensé pour. Si vous ne devez en retenir qu'une, je vous conseille Otto qui est un merveilleux petit outil pour découpler les composants de votre application. +Dagger, Otto et Retrofit sont de petites librairies, encore jeunes mais très prometteuses. Elles sont parfaitement adpatées à un contexte d'utilisation mobile car elles ont été pensé pour. ELles fonctionnent parfaitement ensemble mais si vous ne devez en retenir qu'une, je vous conseille Otto qui est un merveilleux petit outil pour découpler les composants de votre application Android. Par ailleurs, [Pierre-Yves Ricau](https://github.com/pyricau), le créateur du projet AndroidAnnotations, a fourni un exemple d'intégration de Dagger, Otto et AndroidAnnotations sur Github : [CleanAndroidCode](https://github.com/pyricau/CleanAndroidCode). diff --git a/public/img/2012-11-28-square-libs/square.png b/public/img/2012-11-28-square-libs/square.png index 708e8640b0ad4f7e88736a3bb4a65129a7349626..dab366a33fccae6d1f054c45997c14ac166fbe1f 100644 GIT binary patch literal 18269 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 From eb216dac18ebf571881d1eecffa10f827b3c9fff Mon Sep 17 00:00:00 2001 From: Johan Poirier Date: Thu, 29 Nov 2012 15:08:22 +0100 Subject: [PATCH 3/4] Typos on square libs article --- ...rkdown => 2012-11-29-square-libs.markdown} | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) rename _posts/{2012-11-28-square-libs.markdown => 2012-11-29-square-libs.markdown} (89%) diff --git a/_posts/2012-11-28-square-libs.markdown b/_posts/2012-11-29-square-libs.markdown similarity index 89% rename from _posts/2012-11-28-square-libs.markdown rename to _posts/2012-11-29-square-libs.markdown index 32bd6b4..0cc86a9 100644 --- a/_posts/2012-11-28-square-libs.markdown +++ b/_posts/2012-11-29-square-libs.markdown @@ -1,4 +1,4 @@ ---- +--- layout: post title: Les libs Android de Square author: johanpoirier @@ -21,7 +21,7 @@ Nous allons donc voir quelque unes de ces librairies illustrées dans une petite Dagger se veut comme un successeur de Guice dont le créateur [Bob Lee](https://twitter.com/crazybob) est justement le CTO de Square. Il a voulu créer un framework d'injection de dépendances rapide et moderne qui fonctionne aussi bien en java "classique" que sur Android avec sa JVM Dalvik adapté au mobile. -A l'instar d'[AndroidAnnotations](http://androidannotations.org/), Dagger s'appuie sur la génération de code à la compilation (JSR 269 : Annotation Processing). Pour chaque classe gérée par Dagger, une classe est créee contenant toute la logique d'injection en se basant sur le graph d'objet. C'est cette classe qui s'occupera d'invoquer les constructeurse t injecter les variables annotées en @Inject (JSR 330). +A l'instar d'[AndroidAnnotations](http://androidannotations.org/), Dagger s'appuie sur la génération de code à la compilation (JSR 269 : Annotation Processing). Pour chaque classe gérée par Dagger, une classe est créee contenant toute la logique d'injection en se basant sur le graph d'objets. C'est cette classe qui s'occupera d'invoquer les constructeurs et injecter les variables annotées en @Inject (JSR 330). Dagger se passe donc de tout usage de réflexion contrairement à Guice (et sa version pour Android : RoboGuice). Et ceci est une bonne chose pour nos applications Android car le principal défaut de Guice était bien le temps de construire le graph au démarrage de l'application. @@ -66,14 +66,14 @@ public class DaggerModule { } {% endhighlight %} -Ce module est indispensable pour construire le graph d'objet : +Ce module est indispensable pour construire le graph d'objets : {% highlight java %} // graph construction from the module and its entry points ObjectGraph objectGraph = ObjectGraph.create(new DaggerModule()); {% endhighlight %} -Grâce à ce graph d'objet, nous pouvons injecter les classes gérées par Dagger : +Grâce à ce graph d'objets, nous pouvons injecter les classes gérées par Dagger : {% highlight java %} // self inject @@ -97,7 +97,7 @@ public abstract class DaggerActivity extends Activity { } {% endhighlight %} -Le module de mon application s'occupe de fournir les instances via des @Provides et sert de point d'entrée à toute mon application pour fournir le graph d'objet : +Le module de mon application s'occupe de fournir les instances via des @Provides et sert de point d'entrée à toute mon application pour fournir le graph d'objets : {% highlight java %} // the entry point is where the graph begins @@ -138,7 +138,7 @@ Otto est un bus d'évènements permettant de découpler les différentes parties ### Le principe -Le principe est simple. +Il est extrêmement simple. Pour publier un évènement, il faut poster un évènement sur le bus : @@ -171,7 +171,7 @@ Pour ne plus recevoir les évènements, il suffit de se désenregistrer : bus.unregister(this); {% endhighlight %} -Enfin, il est possible de fournir une valeur dès l'enregistrement sur le bus via des @Produce. Cela peut permettre ainsi de fournir le dernier évènement publié sur le bus au client qui vient de s'enregistrer. +Enfin, il est possible de fournir une valeur dès l'enregistrement sur le bus via des @Produce. Cela peut permettre ainsi de fournir le dernier évènement publié sur le bus au client qui vient juste de s'enregistrer. {% highlight java %} // useful when you need to know what was going on before you listened @@ -182,7 +182,7 @@ public AwesomeEvent produceAwesomeEvent() { } {% endhighlight %} -Les producteurs comme les clients souscripteurs doivent s'enregistrer sur le bus. +Les producteurs comme les clients souscripteurs doivent s'enregistrer auprès du bus. ### En pratique sur Android @@ -238,7 +238,7 @@ public class MainActivity extends Activity { @Subscribe public void displayNetworks(final NetworksAvailableEvent event) { - // event is coming from the background, requestiing UI thread + // event is coming from the background, requesting UI thread runOnUiThread(new Runnable() { @Override public void run() { @@ -251,7 +251,7 @@ public class MainActivity extends Activity { } {% endhighlight %} -L'évènement NetworksAvailableEvent est produit par un BroadcastReceiver qui tourne en background : +L'évènement NetworksAvailableEvent est produit par un BroadcastReceiver qui tourne en background. C'est lui qui va poster des évènements sur le bus. {% highlight java %} // event post on the bus @@ -284,7 +284,7 @@ public class WifiInfoReceiver extends DaggerBroadcastReceiver { {% endhighlight %} -## [Retrofit](https://github.com/square/retrofit) : une interface REST +## [Retrofit](https://github.com/square/retrofit) : un client REST Retrofit est un client REST pour Android, dans le même esprit que Spring Android [RestTemplate](http://static.springsource.org/spring-android/docs/1.0.x/reference/html/rest-template.html). @@ -301,14 +301,14 @@ public interface Github { @GET("orgs/square/repos") List getSquareRepos(); - @GET("orgs/square") - Org getSquare(); + @GET("orgs/square/repos/{id}") + Repo getSquareRepo(@Named("id") String id); } {% endhighlight %} Les classes Repo et Org sont de simples POJOs qui ont les mêmes attributs (même partiellement) que ceux de l'API appelée. -Pour utliser mon interface, il nous faut utiliser un RestAdapater : +Pour utliser notre interface, il nous faut utiliser un RestAdapater : {% highlight java %} // the RestAdapter builder is nice @@ -356,11 +356,11 @@ public class DaggerModule { } {% endhighlight %} -Nous utilisons Gson comme librairie de sérialisation/désérialisation et le client HTTP par défaut d'Android. A ce propos, Square propose une autre librairie nommée [OkHttp](https://github.com/square/okhttp) qui est un client HTTP+SPDY pour Android. OkHttp permet de pouvoir compter sur le même client http sur toutes les versions d'Android et ne pas dépendre de la version d'Android. Il faudrait le tester et surtout attendre une version plus finalisée. +Nous utilisons Gson comme librairie de sérialisation/désérialisation et le client HTTP par défaut d'Android. A ce propos, Square propose une autre librairie nommée [OkHttp](https://github.com/square/okhttp) qui est un client HTTP+SPDY pour Android. OkHttp permet de pouvoir compter sur le même client http sur toutes les versions d'Android et ne pas dépendre de la version de celui-ci. Il faudrait le tester et surtout attendre une version plus finalisée. ## Conclusion -Dagger, Otto et Retrofit sont de petites librairies, encore jeunes mais très prometteuses. Elles sont parfaitement adpatées à un contexte d'utilisation mobile car elles ont été pensé pour. ELles fonctionnent parfaitement ensemble mais si vous ne devez en retenir qu'une, je vous conseille Otto qui est un merveilleux petit outil pour découpler les composants de votre application Android. +Dagger, Otto et Retrofit sont de petites librairies, encore jeunes mais très prometteuses. Elles sont parfaitement adpatées à un contexte d'utilisation mobile car elles ont été pensé pour. Elles fonctionnent parfaitement ensemble mais si vous ne devez en retenir qu'une, je vous conseille Otto qui est un merveilleux petit outil pour découpler les composants de votre application Android. -Par ailleurs, [Pierre-Yves Ricau](https://github.com/pyricau), le créateur du projet AndroidAnnotations, a fourni un exemple d'intégration de Dagger, Otto et AndroidAnnotations sur Github : [CleanAndroidCode](https://github.com/pyricau/CleanAndroidCode). +Pour rappel, ces 3 librairies sont illustrées dans une application Android sur Github : [squarelibs-android-demo](https://github.com/johanpoirier/squarelibs-android-demo). Dans le même registre, [Pierre-Yves Ricau](https://github.com/pyricau) a fourni un exemple d'intégration de Dagger, Otto et AndroidAnnotations sur Github : [CleanAndroidCode](https://github.com/pyricau/CleanAndroidCode). From ec9c42be4b1e2779f2a23eaced8fcbea2ddff144 Mon Sep 17 00:00:00 2001 From: Johan Poirier Date: Thu, 29 Nov 2012 16:32:42 +0100 Subject: [PATCH 4/4] Encoding to UTF-8 without BOM --- _posts/2012-11-29-square-libs.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2012-11-29-square-libs.markdown b/_posts/2012-11-29-square-libs.markdown index 0cc86a9..840e0fd 100644 --- a/_posts/2012-11-29-square-libs.markdown +++ b/_posts/2012-11-29-square-libs.markdown @@ -1,4 +1,4 @@ ---- +--- layout: post title: Les libs Android de Square author: johanpoirier