From 51753f2837cb3aa6653cc750e05692668ab762be Mon Sep 17 00:00:00 2001
From: "Yangkai.Shen" <237497819@qq.com>
Date: Mon, 7 Jan 2019 10:48:54 +0800
Subject: [PATCH] =?UTF-8?q?:sparkles:=20spring-boot-demo-mq-rabbitmq=20?=
=?UTF-8?q?=E5=AE=8C=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
spring-boot-demo-mq-rabbitmq/README.md | 420 ++++++++++++++++++
.../image-20190107103229408-6828349.png | Bin 0 -> 35906 bytes
.../image-20190107103258291-6828378.png | Bin 0 -> 63642 bytes
.../image-20190107103358744-6828438.png | Bin 0 -> 63578 bytes
.../image-20190107103429430-6828469.png | Bin 0 -> 31356 bytes
.../image-20190107103451240-6828491.png | Bin 0 -> 58016 bytes
.../image-20190107103509943-6828509.png | Bin 0 -> 118056 bytes
7 files changed, 420 insertions(+)
create mode 100644 spring-boot-demo-mq-rabbitmq/assets/image-20190107103229408-6828349.png
create mode 100644 spring-boot-demo-mq-rabbitmq/assets/image-20190107103258291-6828378.png
create mode 100644 spring-boot-demo-mq-rabbitmq/assets/image-20190107103358744-6828438.png
create mode 100644 spring-boot-demo-mq-rabbitmq/assets/image-20190107103429430-6828469.png
create mode 100644 spring-boot-demo-mq-rabbitmq/assets/image-20190107103451240-6828491.png
create mode 100644 spring-boot-demo-mq-rabbitmq/assets/image-20190107103509943-6828509.png
diff --git a/spring-boot-demo-mq-rabbitmq/README.md b/spring-boot-demo-mq-rabbitmq/README.md
index 50ee33a..7abc695 100644
--- a/spring-boot-demo-mq-rabbitmq/README.md
+++ b/spring-boot-demo-mq-rabbitmq/README.md
@@ -52,3 +52,423 @@
11. 启动容器:`docker start rabbitmq:3.7.7-management`
+## pom.xml
+
+```xml
+
+
+ * RabbitMQ常量池 + *
+ * + * @package: com.xkcoding.mq.rabbitmq.constants + * @description: RabbitMQ常量池 + * @author: yangkai.shen + * @date: Created in 2018-12-29 17:08 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +public interface RabbitConsts { + /** + * 直接模式1 + */ + String DIRECT_MODE_QUEUE_ONE = "queue.direct.1"; + + /** + * 队列2 + */ + String QUEUE_TWO = "queue.2"; + + /** + * 队列3 + */ + String QUEUE_THREE = "3.queue"; + + /** + * 分列模式 + */ + String FANOUT_MODE_QUEUE = "fanout.mode"; + + /** + * 主题模式 + */ + String TOPIC_MODE_QUEUE = "topic.mode"; + + /** + * 路由1 + */ + String TOPIC_ROUTING_KEY_ONE = "queue.#"; + + /** + * 路由2 + */ + String TOPIC_ROUTING_KEY_TWO = "*.queue"; + + /** + * 路由3 + */ + String TOPIC_ROUTING_KEY_THREE = "3.queue"; + + /** + * 延迟队列 + */ + String DELAY_QUEUE = "delay.queue"; + + /** + * 延迟队列交换器 + */ + String DELAY_MODE_QUEUE = "delay.mode"; +} +``` + +## RabbitMqConfig.java + +> RoutingKey规则 +> +> - 路由格式必须以 `.` 分隔,比如 `user.email` 或者 `user.aaa.email` +> - 通配符 `*` ,代表一个占位符,或者说一个单词,比如路由为 `user.*`,那么 **`user.email`** 可以匹配,但是 *`user.aaa.email`* 就匹配不了 +> - 通配符 `#` ,代表一个或多个占位符,或者说一个或多个单词,比如路由为 `user.#`,那么 **`user.email`** 可以匹配,**`user.aaa.email `** 也可以匹配 + +```java +/** + *+ * RabbitMQ配置,主要是配置队列,如果提前存在该队列,可以省略本配置类 + *
+ * + * @package: com.xkcoding.mq.rabbitmq.config + * @description: RabbitMQ配置,主要是配置队列,如果提前存在该队列,可以省略本配置类 + * @author: yangkai.shen + * @date: Created in 2018-12-29 17:03 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Slf4j +@Configuration +public class RabbitMqConfig { + + @Bean + public RabbitTemplate rabbitTemplate(CachingConnectionFactory connectionFactory) { + connectionFactory.setPublisherConfirms(true); + connectionFactory.setPublisherReturns(true); + RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); + rabbitTemplate.setMandatory(true); + rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> log.info("消息发送成功:correlationData({}),ack({}),cause({})", correlationData, ack, cause)); + rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> log.info("消息丢失:exchange({}),route({}),replyCode({}),replyText({}),message:{}", exchange, routingKey, replyCode, replyText, message)); + return rabbitTemplate; + } + + /** + * 直接模式队列1 + */ + @Bean + public Queue directOneQueue() { + return new Queue(RabbitConsts.DIRECT_MODE_QUEUE_ONE); + } + + /** + * 队列2 + */ + @Bean + public Queue queueTwo() { + return new Queue(RabbitConsts.QUEUE_TWO); + } + + /** + * 队列3 + */ + @Bean + public Queue queueThree() { + return new Queue(RabbitConsts.QUEUE_THREE); + } + + /** + * 分列模式队列 + */ + @Bean + public FanoutExchange fanoutExchange() { + return new FanoutExchange(RabbitConsts.FANOUT_MODE_QUEUE); + } + + /** + * 分列模式绑定队列1 + * + * @param directOneQueue 绑定队列1 + * @param fanoutExchange 分列模式交换器 + */ + @Bean + public Binding fanoutBinding1(Queue directOneQueue, FanoutExchange fanoutExchange) { + return BindingBuilder.bind(directOneQueue).to(fanoutExchange); + } + + /** + * 分列模式绑定队列2 + * + * @param queueTwo 绑定队列2 + * @param fanoutExchange 分列模式交换器 + */ + @Bean + public Binding fanoutBinding2(Queue queueTwo, FanoutExchange fanoutExchange) { + return BindingBuilder.bind(queueTwo).to(fanoutExchange); + } + + /** + * 主题模式队列 + *+ * 直接队列1 处理器 + *
+ * + * @package: com.xkcoding.mq.rabbitmq.handler + * @description: 直接队列1 处理器 + * @author: yangkai.shen + * @date: Created in 2019-01-04 15:42 + * @copyright: Copyright (c) 2019 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Slf4j +@RabbitListener(queues = RabbitConsts.DIRECT_MODE_QUEUE_ONE) +@Component +public class DirectQueueOneHandler { + + /** + * 如果 spring.rabbitmq.listener.direct.acknowledge-mode: auto,则可以用这个方式,会自动ack + */ + // @RabbitHandler + public void directHandlerAutoAck(MessageStruct message) { + log.info("直接队列处理器,接收消息:{}", JSONUtil.toJsonStr(message)); + } + + @RabbitHandler + public void directHandlerManualAck(MessageStruct messageStruct, Message message, Channel channel) { + // 如果手动ACK,消息会被监听消费,但是消息在队列中依旧存在,如果 未配置 acknowledge-mode 默认是会在消费完毕后自动ACK掉 + final long deliveryTag = message.getMessageProperties().getDeliveryTag(); + try { + log.info("直接队列1,手动ACK,接收消息:{}", JSONUtil.toJsonStr(messageStruct)); + // 通知 MQ 消息已被成功消费,可以ACK了 + channel.basicAck(deliveryTag, false); + } catch (IOException e) { + try { + // 处理失败,重新压入MQ + channel.basicRecover(); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } +} +``` + +## 运行效果 + +### 直接模式 + +![image-20190107103229408](assets/image-20190107103229408-6828349.png) + +### 分列模式 + +![image-20190107103258291](assets/image-20190107103258291-6828378.png) + +### 主题模式 + +#### RoutingKey:`queue.#` + +![image-20190107103358744](assets/image-20190107103358744-6828438.png) + +#### RoutingKey:`*.queue` + +![image-20190107103429430](assets/image-20190107103429430-6828469.png) + +#### RoutingKey:`3.queue` + +![image-20190107103451240](assets/image-20190107103451240-6828491.png) + +### 延迟队列 + +![image-20190107103509943](assets/image-20190107103509943-6828509.png) + +## 参考 + +1. Spring AMQP 官方文档:https://docs.spring.io/spring-amqp/docs/2.1.0.RELEASE/reference/html/ +2. RabbitMQ延迟队列:https://www.cnblogs.com/vipstone/p/9967649.html \ No newline at end of file diff --git a/spring-boot-demo-mq-rabbitmq/assets/image-20190107103229408-6828349.png b/spring-boot-demo-mq-rabbitmq/assets/image-20190107103229408-6828349.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c03c0da809db42ef5417a32e3aa241eb1ea793 GIT binary patch literal 35906 zcmbrlQ*frw7d86E#>AS~wmGpToY=N)+qP}nb|&^4+jjEJ?_7L!>Rg?wf351S=kDp< z)q8iZwYtOQe~Tl);=lp`00c=15k&w1+V0=CA~fW`o?X121pt5-Hy0L`mlPHzly|T- zF}E@X03^bbRiV_B#xZg<6(!C5p(S9tVHAs`Ve&%!Y5R&-x|V3J@%U9__&lBg zQM>R=O@?y^2<~Uy4;Q!E!$(H?YT1sSSOTuhk}qTKki>9Jpi_<_`L0qE^OMr^PI)4e zXIo%q`($FR0J|8-sMW-I-0Gh6`PfRNiS$n_b;sp8U%8J=m9IeKdQEkBM4m8_m$;(6 zM}X`VAv-DHyb=B8CoL*Ta}db4!oKEFk^#{obLVBbWJIT2=KfQ;TsH;NHUurMCZJ9> z6f83ym3Lw4f^?2SVr-mkQa7rkakKTzJJOI3+cYQALd!N+|AQcABlOeJ7S_2c|E0c-|SpT1>N#mbm=C1ts^8Q$mebchX^rnp)FfCcbmR4i#-MzdZ zzx&;brILqPz=P|OX}(Z0hgMlz46< %B2jo=TZbef=nyx@q`8l>8 zkW>!LPE;W-C;&xDwK^pE%G4luaV%2mMc{;|s4m9*h}a(85`iw$-`-EyP_}tK^={u) zW61ItMl*yQV3`?phj<@TCp-C{KJ+QT?;Ql3p`8eRD|0ldAy?olV>JFJcC %D+%2 zX7$jCzE=W~A6{Jy$lw8jg1w*YBvr(aNq&Hbx?gdxdQtP5S@j7ujQf4w@X-4kp;q3M zIvCe*jk46X!~O{q{t2|EwB_C^SeJL((UA%;C_Mh-IOOK &99HBt^TQqbA7mJdJMWPX)!F!t)lnr24Gl(F}s7d`4qW5+qEsRe0SGz5)!>* zJ#c9r=iXPr1`g3M^V~I)iu6dhec9YDg&|Qf5MlcfG$Et#eLrTO(wo;T(y~2ljDspE zhQM(W$xq>a+8YYFy!|{}H_zRATlXfI8M=od<(2u`?dEfMiL2`Z=}l_3SVAv3V0;DV zw7gA#@JZ~NbZemHAbGypq63}>LOm-?VptD*hI`U!wiNncA{9w0`7}&Q(fyp#Gq5L_ z-0bEFWLDdM{hJ>MuH+@yH|eQCyftplzKcHv`nTm$(}@X=)_NU#_JcWMQ1q?;E-B%n zd3DFW<5X? x^H=w3o_Hcm&3o*1L+B%mivBOO{vN z?%FPM3&)LwtP?GHZ7|^LLWEnJDKSQ6UA#S9-6`*tU21C~1CPrAj!^lu|5}offY!!} zvp&2fcOoxay%WN%&~(^FnXH|;xbaWSJIA zk19QLKtqWdu#RVzIwkr~vI-t0DdNFreb7y!@)=!AfbuT@UV|*>QT4q>HCpDX@nplF zWL5{|D#7x>5JmP*z&JLC5CPu~@Ar%S#Kz9ng~K)Qr``88N*wP8H9{9i&H=ryBqw(! zYst_^G^KwvDY@=)?p?~q@b0ev23fFe1cPWH#W(%F`rMAoT-k7!d*cbI<|>@1^}0(D zxAPfXI|D6YC`nZ=sStbWz&?(Ijl(YtxYu3VDo*g!*fKEMEq(8QnWwh <;zb5r=Zo3Jn ztgI3a>ICL!)Ga?JnG2i;e$0H|#zLv}Ttcwx3;XhQl5M5e%Tn?#8rg|6-uUa1_rSF^ zwRx;gXQ1B>NBWk|em(oEFQ$bKUw$^q-{Y`ZMydf!9?u0h%_6{{p58z>k?l8Mu1_d6 zZAQNkHnW;+mSXt7_k=S>4JC5npyZ)|`=@;>?o+h6S`&uINl2}>+cJhe@ZV7dwE`a} z(|L~z+t4M*WwEH&ju)f;j6GC0VqNXE6Ew7leS0$@2$mvGoo=xb@q2=j|6~&YCt%D^ zw^yB|^lw7%*Ui2v#B!AHUU=$D;Mt?=a B*IgqHVI&$Z*mtYm-LJ+U{Fh zy7dR_#1qLH3i-xAs|30AymSUZ6t`BoL4WQeZAx O4my(ddsPdt3;yJc-IhxHpN$&ZxAv6xzl8Pp0s&t3}Gc&Zr2?7SkzD;R3kH k)D6y26^pg=5D%|8*P?ixrysC8k@u6i zvfh X8_)B1>8IuP0XF z?VbVIX#K!yM1S`_xr84pwLy}zTTvDqG@gD{+4}0`jVRJdt`9!fPiBOGx6(>_zso;8 z8#a5AeTv)`7d_Wm=qeln4uloOl+%UK<4$qPe@>bTtrqDvngrjrv_X#TGSa|dmvaQ- zOW_)EXm>my&;29gmE+kvkRZ1jcP8(e-`
wlM r58`!PD=R-E2wP;n?Y#O#|7uqJjw)2a9 z`p;=YapXy1>^=u3H|ljRww&Hvk%4IK1(H
41L@VBn$=#vwA<~M2HD%rZ%}7 zr}kioEVvt(eb48Yv_; VaYy^@Ox#wY8QCN|#PYLTR)$5FZJuaS6; zU7bzp?1g*Y0Zyn4UUw~k#IObb?j9K_rwH0bCzT=|B^4e(@cvLWhn{L$;Zh#&X8*rz z-O;2?^JS7L;jmJZ&UOy~2bI!PG!#=`Dccp*!Z%1%L+SE=?_L#G?U;S$CRZ_SwB_V; zxFdZJ(r$L3l1+b0Oyfl8JQGW|{%d$R@u%5SI%R5Q<`Cv12c%D5B_|4XoC$atS!DCp zHn*sh8~cTqsJPbZxmvq^)=cx*YMr}r`mEN3lo#CN&9HFhoj}L!^*JqZso`tz>>W0I zk1ffkVA{^OvZ9+~Yd{AB;1qmwdY2G%zL5+=yR?V*WWr3fcz};2dQJ1J_hCtr2d; zSkD1wyHf&ekYhDozw9-eh;m&QaZR8^xl)c<*|LS}({G-k!1-Bnaga#tv3}ct<0f3f z(AeDo$;+jFXtoH5QF!+u{+KdTo#B7GKVj||gQ_#rsVK*ow&A7&+aBL~v?)e2g|+6b zPmejkM}XPkOi7izN2JS($JSj4*!P`NLb&2EDXrO`@^7JaI$bQM`D3I{HkC7wML}y? zrMDZ4?}cOC%s6U3tU-K;wV9DI@(Ub;SCA1T|FCG>P&mf)FJa*6`h4-Lw*dkx;PiLB z ?r@K~6Pz{d5&*Xa;6MZteRj(PToV3VfeFQ9M< c<~)!Ph> zkn&aZ%9K~*t*9-1XH!A?o^azd0W;jHj(ls&mFl}l%dW7Z?+{&<00_?VCevA)490Od z{N-b)?~&g*z5{4?42>lbnv6>t%^8@SsRJf)WJ}eWxjV;da=vx7wk)n*e-{JmS`CJ! zE_gOY|AGgRRo25tAds>4oQCjFhEE1 U-%Zvk&D;2V8D(4r_Gbp5A%xF6vY1Cj#m&UqUSh&)Z0pm$#u~>b3M-tHk1W zY*yj>nb$^W_D )p^=N$6Dfnku{H$dlQ
IG#{-Ik^5X;!iqn;2 zmh-v%1l^ZI#HMKEc=zTzpY)mQ53(Caq`QmFLnxr2+DzAL(gXkzS*!7cDjkHyZew?? zQLd}@&688k9~ZMUa8t8I;p##V;Z@=lW%jOMPde$^v&f6-jxWKIEeC!2mNtPu%5_uX zkZ*3emcW+&>A+c HecfI|r6 zW#jAadt<@*ZTD)HvyEA>fk6ng(O0)N_Te*r0B$&cUo^iQ!084I9j_aA<;{(=cC@BI z2msYrJfnUw|8tfUZDne+$MteqX=rpC4QQr2ih&&!^a=Z!6MV~GLzLMQzmhgz{MSMU zDicIzYJP;87I>{&=YeGMym}&D^_XigN%Q7>lYOz?14c7uWy+XtAJ{^1jeyYhAT{uX zP-WM*)e1a(Mh^^~BhP*OTSBYaH+$--b9V0|=L`8-byyE3H8!m_17EpUxjHOIInYQn zS|xu=+`ZDRX`ABic1X+_8d #-ZhktGOvxSWU}fKJzY^Os)E(uSeHZuGFZdDX5!Q z?J%_J{1`?cZG!q@!uMig_@XFM%*XZdFD`V-%w&US9Z8i}kM#z*e*Gy*i`q sUvFDPb=AslH+z?6odJB06)edlcdIHv#de;(VB&IpmYollrJl>7 z`P@U`pI0N=gD4Og1(4wkuwc*~=+PfYg}7v=KYTA&t +@h55QyoU1wPLOoTCON_(C@k{OZkP(oVY zPYIJ5DppYhCS@$z24Fu5KDW{KRIET6jtYNDFVXvSEjdS*d_{~6oR3K z~DFC!8CGO<=+u`9{ zni8(&JX{s-=Vd851Y-HuZppM2KIiq;!f$9&qoLh(x1t!JY7P-TZQx`4d<{sN^`;pB z3qY@T(f#VM+Q9Uo;B#tZS}|{)H^+r(Uuc%~=JP85lZRli6G;6 8WDs#%^1uxG5<-3 8b1nLjhJaY*330H-D+!P)0+?;mkuDG<{_&_aN>a?M)*6ApKz(e wAx02(H0`cA1iip`Js86JKXCQsR$Z8LY;d1i**p=XFozQm zYVda1o`__+PX2Y=J6uzF!%X|c6F{uBCI9NQ;?np^RLk2}@VS_?r7?v@NHRNZ6sc4U zNfE3-mEZiYwuTrjwGhZ59J%*cc<}?cvo%jZS(NmARKm!LKPQWgbFsn1ayGhWm#tyE z#@I0yOF V1d~Z 8eHN@jPa z-%d-4hr7RJEaE#~ K1y;Ua-es5>_jUmu z($WJ!3r)4`m~b1p+yu>!r701k&zuq>m7KA0k+-)XV~Y z*gH9dSlu;^QE$LbU0A`lDP8i&SN1*(;o2^hss8vcQroK(gW;b1uDQnS{xg8vK2FfI zD_~B@uA0a2$jIL2qcduYOm7CMwcjMdI2wmlKd#9YA7-V?1ovfx*Iql2PE@r@O?@*U zAkj%FFBUff>CJ8AzJQm&_wewUDqWi#iljXS^6$qbhX7kNWa?3__md4EZkx4%2pQIh z#0I+{xaW0*0u-6)tJJpHc`xu;fNELQ4%dqGA+xEZ-gTB ZeaM`YPsNF zp{!5Hg1THg&s+~3wu6*eNFug5n7IbDeT9TX?&@ET+Lyic`JP&b!eoxC_1m%0Mgj_A zX%+b8^_dpIt?|JEdDJxhH;Uy}aUyc)J5HFD)M57e9#MTfD*D`m!R$VUQ;tg2oDhIH z#%yBJjBj@j$L~* wi?X<_^}bNpP=5Bs(v2wK zr~}k06*95k=Q_O>tI6N1$&qW4rm8+r#*4n2w|)dW0DMS*lm7*@O(yuQn;E#>>R}{- zBS}}-$_J=tPiy_1k~cvd;u5%S2Agehy9kVmv)X~h><&E%NCzfjpT2kwhOB@Hac-2# zjM+hG2mKeG1TU&=+0lZE$eJLRR00@R4U>HWYm^Y$>QqQOEr7qyoyMDVf-~4VD2`Wy zdg5}SwVLs4t*l;E7#jMioah7k>|8 4N&jl;-V5P2s%f1x2(?Q4e2G5M{1WdF6v{mRr_Xd D zvfG{O+k-jx2=p=poG)Cs3jJt`pw8E 8_ejC_K=O~+cViCK z{HX}2@yoG7!^dZF_?;WlLj@H!$3D?LNlY>mk7_SBEq4t^t@NY)3K|M^0O#h6)`Z-H z{I8t$lAsg?G>XT0*r1chm@i|lQoB=)Vz&H#{=Sh9VL0=T{!@Jryc9UqA8^@V9F62M z&sW`|TxqTsCIk_GQTo*2KtO!zl77HB)VuINgG#n(a`{}OwT1kFwdym}>h`autMdJ@ z5zrSC5Id2sgE$fgEc9D3ZA$lNfPqUZZb%qm9bE%E36{XI(gMA2c5zEee1BRwG$I7T z1 h6MLHtDPg7D98ICr5Zb}VAg(Z^jJs!MHKPWlBB<-8{h(`f2lcv`D%L% zg2-Y;%Fav_=4tch@)F72_tXe}_g!V jESM<=WjqUx5+HK&7F~nvs4o+|$g6 zo23rQ1`-~HdOqXphx;q21x@=x1>)*C6KMoMfKY&eXCdH1>j~W@2U5O=+7oMvUuGmt z;a+{{De*s>KE>|0BYw^PVm<6sCm~3I&&$82)YUOMTx$&FcwV6NAN={J0-1fNu>M6~ zML_M-&d&2y$S@LBoa%c>vK|J$=PuABWk@9rT+9s-PY(_?v|ZMCOg%98z>2MJshH(Z zCgaRjVX&1bX*LCm&+3-wpU$UHQ|Mp}G9lQlREztYBG)bD&OOGgNMcgD-6ahYI5x{G zbP@~h^Zc{fQpq4u@RGpLJzi( E^wkvS81R!M&xq-eZdAM6UfF zBZzEz)9Y{y9jt^@RegJ D =UG;Wr z+;cTvc2~Uj#^tm5H3Thh&&L^yO2P=+Z~ZP`69hn?Pyp-%ZeMvAl5|-f*!y#M;n%;5 z#ocloz!xO_+fK_?NAQ=k?q}Tv@gK)^;D~whi~)+^eo!i9TJ5ll=^(Hw(3T#R53iU6 z^EutXZpJne2KWGYv57^Zz Y#Lz@z&BxCt*(h&=RE80+gXX2L#M?r?5Sr_^bK8|Z zT#A?X^!{1d1RBYx-jVCBdipvoxWAathR{iA#AKCsO=fRIimyhj4kHp9wR@OIh(ka7 z=8iui)zft4?2cFKNqowfWj;vt8NvGTFq)8s7zLso0i2`}s+)DMP?azVI4pgDuY`xi zkoabYy&8__>R8lq_pS|0$*l)_L+x1*UhG8j-Im)v9GVr3H*RqU{PQPK#TF);vS%XT zY-x|p3Zq$t(BOyx3G%Y(0r(+nXN145LSYH$l>WddDY@}V!#JxJ~g{ydYeu8#&M8O6-@_Y42PNqLH5f3ZSahi2# J@4krzSrVQw=)B ztv`Sz;0Jlvb3PLaE&;Z`_|Mn>+lSN^$|OCbU^1Qc%Wx#-SDhFm1k7##y2nlr1#2~C z+kxBhRw~%0{ +lyX? z-Y=0#B}|OHO_%r2J&&!9rHA2E0`uo63Nzi%7# 8SE +xmm zvimn-{;EgV=p5Lrsn% kbnuU^swtJe-?H6S{Vq{KFEDom zp0PQ-T|PI{DiU<5`jOQ6pL3T&9m-@CY=Oz$tp-cb`~3`&y-4D*`GFw}aFIOQRs~x# z3-_i_nRH~gk(d#KH_!(S+j|(zjrZI)vA^W*#Vpq14~y42y2trJH6UO$wZFFKFAo4| z@XZhe2unC dzHF;jchoRE V z{vrpPHl|6M$+PTC8s2uPk|ieVPFC~QFng26gy@%PJV$r3s7q->? )s*r^2+NmTvyx2GTMl*20Q@IrlaWhY%-KXKw^_6tws!dy|6R7J7f=JuuTZF+@ zCrFp=2* <}87O%)+sao(o;uzDotEQqLM|Ab*D?G~Hr% zi&Jy*Jg?oO@;G5tX-I5({)qu^HM)!OB-=1l$Df#iReFaDupp}ey880^ARI>8yP(n< z-$@a|cR9B&x!=4(;WHu=hOR{(9=RaQ=H)
x>BZPJV+`w)KjQ67?18 gK{ZOpR~a{2C6_aq1PMhjeD2oASl3T$ }Dc6*e{XJ?-%SuoA1ci$4c8VXI3>6W*Gdj9CIUgkooE1eQRB>Et&C6 zBsT5hR-F3zBp@hbuFF+a583^!Jw06#Gt%!eMh1pRCRiYd{_XuT_$<^aRm9|5f;ujj z%aK9bEP>aYc~ML`fHjyV8f2gv9pyo|;UpK(WQ{m@Jsz0X#{wu3m;z zax|wl j}yFRJQ2lW_CLPaBt>>bH&n_uhtQhI6jZl67D#UKQb`- z&Gv=}f+NwQ NyVU}v1kV}8a*+o2-oWV-5{Q<`Srl+*H5ij)|@1pbk>g>#t}^C{-|e7m8SA9 z&`&Q$;Ad%V>yo1xw3Obt$};kYu?mPAd{^js#*fxbnjUG;Aw1ANe`a69+#Qb_$N@c< z1v3xSU9x1Y TO5O(Y}2jV!)1&wpc|YqUf%j?R_%=Ndb-Oa42(I{$Vl1Zl;{ z>q5Y#dVjB1NG+Tt{2u#Zf2z}-QSEsEd+CXNwAPaCPou5_N78|y=ly0j>v%K+w_^z; zkcRG6Q{cCKz}22PpwlQ&Z tUocfvjI|jEj%+lU zu1mq%oAd3@fa3>~NbJKX1+Wj?<5OYmzkcrZiSw~b!9}h&ol2}8;0t{5 z2%N)GA|0JuE?1DC1@Rxru1P>&!9U*}@v?`%BVk!toYwpbp3q3K3j_r~F5~w@<6Oo$ zO2+|MryfbsV_fQ0>?MnOQ|J-bsvO-MQNTH--eh0n!e5RKB==b>;g1`MDG%CwzuNtt zE`W!rtPHbI76 R*` zQ(Y9J2p5SO$9Rm1AE{c*aU&mCUcW6%qs->fmj6{d3IHeJIp8}V99k8HZ-!saQ)TAV z9lw)A%CIt(3;cZ6B*;5IRmUd*-}l13LaDRIF4hQxK}EkV3qX^n0=+D}v;HKbK$nu- z#~qir4M!QVxMPW&RN@P>XCk%ij5`@JC843o)=4p_*NxE>rHzt*4fq{LZwKh;cLN+= zDCgonnH>nY92&SRti^9X8c83{2QM>!Axhpry0L~Db8U6x6t>R_r4^aIpvZoY-;r>w zQ_0Py9!`Eg;9Ba7!r8 B}Dq?GO-BF%@xhPs0_ A` !M3lQY4?Si0~K?hz$+L+RCt=-QV$|aXD zyA(ltw_0C#mlS`x0;@lKeea84!6h77#dEshnpdY0MA#PY-@a{kU!l~s3e`u5CE1w! z_WrM)6nRvc``2Ut$^i1Cj;3LHeYyLWbjuWSuxTW3U4a-S5Mu8|k~UW|+T=Q`AjuY9 z$~@*)btW5 @kvmw^a&2_*U?F>=F&1Ccrnxv`$2^ke*(x*<}kebdB0$!oD>aGW0H7G zbG~Z+4`*K$6<4!$+gNZ3?hu^d?(Pl=(zsjD;O>y%?(PJ4YutkbcXxO9+uynWIpe;Z zKV#gteyFi~?W)?VR;{(>oG!#wZ_^0uSv#Kd=WvSBi1j^&5yXcLiT_--o1>U`Q=!U> zf+(|#zAw0mkcsyulWK+_HR|ett4hBlD9%Br9!JAtsRBRvsTk|yJTAGQ&WZzK@W;a* z+^`GQ|EN~$x+~S+_Dinh35|C0477oqk4=9&82-4+ S-h>V$wCOoOb=x;>u9 z4X<^2oo=?X?EC52C&^L{qhw%J>k$CbMOzUv4y^J1!T1S+aGqIO_q+(t@gb>PP4L@| zx#*cHNKqhGpMC{CJmQVY7Xzq=8W6&X$!GX!dp~;+E(T_26bOa4>oK(}V{03=p2q3# zk4qYDD;Qv9NEG~x3w;cT!)8T$^HM+Rax7{>@qdnqm7N0pjx|(|2Ez7gQ3;c^FJA2o zW68a8GF9whl(}7cyhq&Xf;$>wNZya?6a!r`Y^e+s&}&!DRy`0khq}d{BW0i}*FBCU z8Yfnwu%z~3S3vJ?)WN}hegqwUCL}SW3*O!j#7W7%50~0cIXU}KPsoD#fT%F*$vTDQ zD6Lmg?WOwfMBTR$m#>p#{TtBdITXMPdzHBA^3S~&f`Jt4`LX{>WGYZEqlLaymY;(H z>H&zjme+f?MSv)a2P1m&sbjZMrs{bLOU4nT$okO7FAD$^x_@rZx!gn4kzN|}646jF zY|)~X%R-ALaW^Dz^;^^nFPvypLvemTKTIJ&V>nIKH?DMb4Q? tMLZzVjmp2Pa`n7{qZygTVpGQ*NT?qR@e2J0nJaBdY zD;WEF`{FTE{A68nE&+v$<-=n~k(hUOGG{@MzgS2a<%D*hgW%OS4QeZw QGwj}cO$d_=}W#93pF_Vv3mlqMFT6z=qM{|uM@4goHJJYKPTsol_+R>$W z!N~0l(E*Nj6NhsP%7sOII`W0t$Wqc14IZ`O-wSq+XBx|KU^+MZs66an!MT;#L? x*fC|g<0II@ zD>&;dCMEqeH+jEx6>1=CV#}l2F4aeI%ypoGXry>$fWR)y5 t`;`LcC_-7Keeg!P+SldgAEpr}HQTiB22NI((@(72 z667Q~M1EM2CO~K_Oa_}245htLW)>qyzIWAbE#*BL0FfZ6WWY3?U-CUV$T`= R~2warij87)(8!uTw8pxG$B^bX0bmNX09pkj&`EbjL?WFZ{666H@8ESE=}23Qlq z67IGRRhl^TX{Yvdr{N*lmxTHTl%jF@lFkn4k>;(g{6fR7Z1^2R9+D3A+IoFnJV|)U z71C?2pxYUoBQrTRcSP*Nz`m9;t7JcB=#tBFKL!bRe!3FVN$xtj^U%gSYE46GLO)>A zWb7)^2l5o`AK}QO_nW+EInHSEqwoFd52f=Z66ft-tBYJN_=SgYejv4EU9geU1g$tX zJqk4IS%XXjozK_OTQ8MRH@c`?u-2a}sI1=gye>&0ZY&ntoc#z4H5tnx0@N$ChL?6M zjq2b52~vw+hSD17f^-nBc2cbq8!0|^p@xQ5Rx8A5opBqn@nJ%s8S0q3?0G{B9o(HR zGjtJftv{e1trWsmm{=j5*U-TVaNMPC3AtYt2m+x#xbwp}P>Eaov9gr0!jmS2Kbu7* z;w8nDEmNxy!E#fe+Jzj9#-ULeYW(e_9&LXKRhB%j>shw2^20gylUP;0uh4tSEWHu> zxjZ-nh~>LGYhJ&hw||psHl_{#cwMQBC+d&JmHdYFATW#msK`t#DwsKny}bV>xP0z{ z9@s5P8}_?qkVz#b{O%Mq!Dr`7yi@7Rj2SdeL1dJJHb8~bS+?sQ(J#raGsb^);m96$ zzZ-EjX{@F}BPJ6Uw(w@C2lzoa{%;3mF6Beb5ZWuiOdo?QqeaaUBGrpytQV^{XzT-l zC{7CWiVk9mZKPE7`j2lCyOdg`!zZkc68)J6uD{?N%$?jL1ceU6l5}kT2uak;=2asl zJehqKHS8fQnPGC;>!*a|lcHXUIXorwCFIhQhh{qROa(G`mBMmjp%5-e`M$6u|2g}f zHKg8Y+2(P}Du {_?V{Tt1rRKWmsZ<2LmCc! z%!#_ RH1xHrTkDHRl@5gM^V{Dk~b)*rNW zQ=dL-v}(zh9gosIoHTzmIGcj*+PqQR12@a?nvFsJoR#fZyy4+3Hgf$auzjQ0>N>XV zG^%@X3ZE1`>twER@VS;d!!f8eSxD~1Bx^RVZ1`(y^DxXzohX- Yog)0l-( Zqx4j z+SPkbV5$TQVI`h0K)El|OW4M)g&x-h2T1VKMwi=8X6cs;**WH)Nob%74b0;us}p?G z5(lm6g|MtanFJ{+DCP2Gb)1y=ga5-**K97)Wf!hRi>Miqh&w#v`HO^5)NgD1dJ_hb zY|@pM`huQq14fWCyi^tuUUz<9*?Yij*F5$lSNE1UhHas@$^~2HHe%oe1?7Xz!H|`^ z{DkJ}PyA|Z7=06OGTtSIXkBp`gb^H{DuHF!p#zvfxHVV3W{>Iqtyj7dkqI`AtjD?{ z>1gvewbx}m5t04rSRwJ%x1$rXFT(}}TLi3`+}|UVOIkv?jyDJTA_9WRD+QVA>g&vv zFjyIyUxSyC579SP)^I|{e1L?6gN&rw^%itp`}_L#G82)165DtX=ArFs?}RKaa>{;j zjno+)K9<*cgfTZ0gk+RbsQ9|L!#}pD1&9`_9w8-tkWG*TNP$}u#cv{rmis=|x&t4B z$pSmh?Y{ P3m&UrBFs_5|Yex*Gee2 z;%UDQz)OUy !5Aod6WK>Nd7lr3b|O*WJW>UQEGXaWF2iT`i`l#h?kJmZuSRf|Uo z!nz&reRM^fCs_Cz`+}N?jSy7bgQN`b!?0KQbSQLUM41u}+xIwc%oH?xGk6VOD1oLE z2c#^BJ?ts;AHj%m+Q(q@X?`A(ic %?2#mY zuc5=Ki~m#kqA18TzyenekO`+)D+_qHc=!?{Hz@#B4QEmxMPX$vF-N(*B%no0{;!*! z45;nv;npC;u|8qCa{wO{shLR1f!DAgLSU+8z%q=?f>-c{4}SV#5{9nDr=myseX~cw zG*%yWsfW UThqDx{B@7uD?7;@$i=2uL7Q`7 zOS>GSA4GC<8@=Nlb4cbbXxa)Sp;jQKeu*)vDVQg&%$fGm>ol|xt`Sz*TCEx|y9nmP z_Nlt?IfOrN^tpt+ryJmA?I2c&hOfu_9m!Oa`b%siy+6_LqJ@T52I17i@7$vJ9Z3^2 ze1w&+bRtw;iiV3NJ&J>ILyrFQ`4Gdy$xhLJN*5Qd_wki&7tboAL)Pb?BsPys>>de> zl^*^>X1;e29ww)C^^|mdAwR0Rq^BsUE+ju KQ7wvYkc%xKDgY zwlW!G9D_+50$^N(1Af$bp@pa2m?V=q@aql(nqAjDXPLC=H~4}lv;xNsUzqg|hap8% zj)PM*{N@2e2mO0M^A}dlY22%k45kgKhga0K9P=!X;BWK4n4l?})?G-vA12cWN>udq zN9Iy)MEL-U21ahvd&m&C@#~g=57c#<#ug%)l*_NwFbFzDvG^Pod6v-l=Zh^#r(#RP z S0)qD68b}oPNfn W0`L&_! zb{KUPHA%d-aK=>Xcw2bgvEW{87usR~kwK)8+EOjGoQ|AINxnU>jJqtf=2z@jCMT@X z7N2h9@AQp|?+PGD%bTHVCWwtO{}lvHMllUMg|voXeUgciP2BnQuF{&j`F%LPrfwrk z1Xs^Ka21=g#2mpSEQCpN)6*~s2VQ?eYq;*+uY>nvwp4%ePdQ^IrEmOoqa1YSpxseb z@nu3kLP;he_{5LG=qdN @<;0+|M{V17jdJg5+l6KpWh%<;VR92ysc2&Cu6tYE@sH`f3n_tSyl`pnIl+j& z7*=IP3fc%`K6S_j+pX{fV{(gOH)CAu3?>FKR>os$QwOAU0#t{>huurCq|kGP)b5dy z`ZQA@UE#KG*2pk(Eh2znKS}RrAr~vhqyrGdYgJCPpu2X^c9juj)pN^g$6GvCh9IIX zG0{*f9cW|5N^P45SyCabe!}+DRE{*x#QkdNNaZt&f#a*j2aIlf>bZ6SduE)wj>} z3eLu_Td!}MM1gW@ZRUxe)i~6pbd0}xW6_QE3 VD2s$YjkLQ2I$sVNQ>+!2yH| zP$M{8>c-ud*O7btN%V+%WTnA~Z3!-V^6}hlYQrsNe(!|x6JiTXVls2bE@W<*#~)4m z>h8j(wqPRhPwU7+k`lH{ui9IG7*uGm=5m>4d>yQIbr%2$!|mOeL_3%Bk_B%d0O?ZX zc&_rs(Rc!+L1MGztNOzu(v)EC@P+1XUnW6^|HM>Ts$Lay$-EG`rj&XGD6M7ry@zre zXO9K@G>~LKB%(aoY0Jc{YaqRiIy$xkl{NDX_wd@XIP0HYnnZUIC}C)6Chk~6xa7TY z`%3CZ#ceqIr0=y? #UR+FPl!>&)XSGm>;>y_h*M+~tQmGbd zKIJ!160xxa5{19TKjPdPKg~HLs8`Wv(mN-xmJ#ltpsq~RFNYMw!}O$|H~_nz5sMu^ zXBM59RJq80aq&-TUA;1Cr9OU-XRHzw2D11$M}SvS*f$GEX$LDHnRbS@pSg39_cJoJ zh`LCnws-k$yCt<}Y`CUvd%)u83CR&~jRp9#5seXkDItfTw4pxR qIB~^U z;l4e>MUBw>3$ZJO*JeQcQtU#Gse^pfxQF+P)gST{091#INWSLtekBOJ%TX=5A^h;< zA4t)~ALiqA?PS8u05>+k&agj5hO|1KD^AmyH%rIkkGnMcZWf-7oVob$e!aHu-5f~L zdB?X{rTU$@Z&Nob cum7)D>C} {Q$N`SFn zY@3r5J0GJgd7+nRnJmn(Z4>&g2-Vs|J%GzYZ+puCMsDqz>eZeHyclL_z>3pPP3F#Z zduIcuNVK`ga6$d-+fQQ*;cr>z{O={>;#^JLi{+N80F?L>u@C)M?%f0RC$RTf0-r`0 zM$;!R*p@DXo#u*zBvR0jZwWWto1!yrkB7gW9#~IC5b~C>`3SSEyUN!Q=N4|Ae`)V( zv**L_P$nD+4`O;ef#lK(3uEF$(AZ8zF8W0g09BK4FWxit`g}JrJuYZM`+MZwJ(|lZ z&@SrzIMlPj3$QVPF~?1(&VW(Ll@psiHs=N|)`s0UumIcqUSJ)~=(L_#eQ5{dWCIpn z`uFfnbkXfu;&s*a>_voXD)D=|t~K;L)u~Y3gCzPKc89~c%Ua&5EwrbGzP$^*EnJJv z!Qy1c1`HdX;t*T``Np1KH6nwnlaTK@E8NJnTDdHH_jkS0y{(+ilw*btFNRqhuiL^z z;jGpx*-!#FZFHol6`_6j(m1UsvnudkPGqzit>Fj9FxA;gYhY4ctj7%S0vS)xS9rMW zCbcf$o>4VWTB6joy_!yveko}zoRjFB8Yo1sZ@+ucmW%@Ri))OfRLYW0gKm)lIc9${ z@;YriP^{?3nmdI@lHc*r_CpBHF5-;|$W<$?QD|Z>b1odxbU!I%Fo#s!-xRpKyqK6+ zV;DoOuyiZXC)knBcQ@x2n`iqZVwrvmuc1qbfEo9P1~pjEHYx)MM;33<$~#0+$Qdk; zk3EY1fUjl;$JQE*W*nKikGe&6wqf@h);@Yvb+xTo-!85VC2O|AHP<$KwpcocZX!Vd z%x;cI)yib&z>(}cVQ{ri_p!j*mBK+XRgy@K7* YG)tbE0<;ptK~+4qJ^%%0t6i}TppCY0Uw zn&`?+JC|
j7-{n>j&G$TiXaw n ziLfUC54s?q0-!9aqOm5Q0F5K-5$61Uc+FV4Z|dT~CF!7}nGo;9Yc@;Y&_G7n+Fo>~ zlsHD=>d{SxADmI*opMR0cYSU7V-$inR(;Q(w`o$X;X{02gJaY#aq&K9o2+Bh>qkxk zzC#a&)`(Vyw!WLD7a)Ye&SPX%D0j52*C%TM)u0ClQsaG271BMXi2^uD+~qvVA4)0E z5M)6B$)lwT10B{iL}%nk8W|Klije%<@?V^R5Ts}^IgGCh42Um-0|BJ+ctZhdaO(y{ zmM=={Q-ju#$dIUL& zZBB%@&DL@y1G;m(=;cP6xuyA)9T2=oJtoyie;x~}^XWK*0%GR+a)IFfoovwKG#NvGvw=pHUOeyBQ`h;s$3m380A z-SO{I&K)0Pm2*Xv%UI4L)BRJh-CJ5+;8V>-3&TF0OL 5A*O&4m zEhbswWapujusJQS5BcNTPcq65?7P|1$B;D;NOIun<|_S40;y25yq}~HToO;u$CXXN z?)0Imjw}D_4!?%q;KBqJK^4P7+$W3qKd0 lac<5NOEFp(-xZ_UZ71HOzkMfD^%b+xJNr9P!Lk_YNk1Jfj&fe95xXu?-0ee{F z;Sq)yf!WIn=bBByZ!^U=DB3;jZ~t@xOyy<>?(5V4G5qA!j{wHA?%o>Hk(xm-9zC{E z8wL9qBp2J~B9xA)e-5eJm1X1o`ieXDtO3rcU!DzvONN;uhzkh3Ymo-*K^3Q6&d6~5 z9cNF=ffBPl&-WmmHpdtqCFU9(h>khK@ceF{FYwAE%B}(T#B;L8b?ND^^yUy35aU5k z+c$H*`smxJ1H~h-$oY!pXi#xiw>my&K@o-P1_7qy2K7-D(WHz%$8*?2D1rS=1W_;H z_!8vr@UuzMyGE>428SoZ=bY8G%?WnSM<;54SW`o#e3tXU6cxkE{&IR_ApahYhm}kw zU$#v- K~NuP>Z@=sfxI`B9Y7P-~j<5zE1$$X (Y6k7oXY0iW|)V&?k8d-=@WOI;QV{>jLbql-jBE;E?jNd8=cXE~*_rB?3hzjPui z3B4kl2X?IK?TDoV)V*InL|Po`hc8epv-WI3;#aM@^$Mpk_k`oqy&HqU6V~PhgBC}j zwK?r{)H>P={2qpJnLg2t-m&%6Y4@M9#`jIzE`I5jG1~0CX$>w-YByQuA?dX>Zc2RN zS`)WkTcLaCEr5zgl_7X|J(y_$x!r4BiXxa@bv~IDG_U4*o40O-Sv8m&l60Qekdp4G zP^}QIc%B>I^uG&Y;xE~>ywFwRRz^ZuIS)M>YOIUj0>km0^#`{{CI3LZ?Ju!1m&2xi zE+5{*6T#IlQec{h`C0UCG&v`I#XTAG+DW||N@2VH5yxGo#i`BRpLTObz;wu&oyTOZ zkW0P5*!gbqSG}-8Pz-$UN|0Q_P5$ly7#(kIxlM6;-W>V4yh rn<4L)UXaMv z4aJv3n@KzA6`(iVDsUfPR{p~0Y>!Aw_;k1)UC3CiDRWIE|K2@z!etuoI^yQ3yR|8P zdOxJl_8SBO$mN@YN5NVq8HitrxV>XLU%F2HlEGmkT_qbn7p Vh;uVo55qbO1>Exd{CS({nIMFyYRv|#^O3XqKJ0GH>QEPe^?Io_1)-6iC %?SzaX#Hc9L)=AY z-|{8AQ|?0Md3(W*-G(nkKR9$zy<%Af#qNOr_6CYf>1FX$2tWxYpZiq*>&(oG;=JuS z46Rk?_c~_#qD}>AFMPQ`_Yp=APb2|HF&!hxKoLKV<#?pv6PRs9MSo5*fD~>{ZzCML zNB80c68mOT69A!neOxttBQrkq4 0#r7A;nOV7(GyFA*TS#d~Y{tB{M?{G%&HRr1dXQ~#(2bMB?UBrx z4Iho&_Z)2C43;up%>KrwNJN=-ypw@59s_rnw3FZS$mHf@_)D+AjGY&De}+mYtk LX5};EU3*Zhg?z{VC4x)$|22O3?Z5 zOtxsiian>b@WPOi=MBU#F<%x#yIZFOI1l)HHlL5OwlMZ3Lx=bFBwRh5sopKG()k$8 zk2Y!;>$hg$a~CY p-RWX}ofEhqnr+g}44*a{t`(kKNn4>v*j3i%tz?-j}vt z7tz|Z$FI>a!f@l?jN&DqjOwq!EeGRQT{z=WNDy!cV>n#9qi+gU*{kv3`dqO*xE-YZ za#T_1Epw`iqjD|4(y-|jbl!2%s<+VqF(>r^(Ht9}PCmy#4Fo+tpLZf@BM;H!LPG~w zyNw;~iiTcv!)9Y!0nS%ETlEEn-d~_b`gjrCCxda2bA<2+(ME^q=8V873 |!E8#HImHvw4@jZ9uEg05-EhiwmlDt#{~r<&;E=CY}Usxe$mgd1)Rf z*Kv0wWuyR)>>?nN^`jwo1)$sS;7v{mX+H+NE02~iU!ayE_5%gF;jTFm;>kgGHI6}4 z+F-o-`}!A9V`g6~>Qz8-mRG9JKF1lPx@<)^qdpi*)i+1w$vVKt)rB8e; 4yC&H zCtU*PDM6~Wj*9nArNA_rZ8dtb&9`$roxv?qVaVN!@m^ieYtse_r!5&wO9t0)2N4Ch z@^jE@_dq_}1QQ)<=y?yYBm1E FP1 z*yU}NQ2R!{G=0oBJaMnBcSeZ}{t)=Q|66|j2S>sMM&ulgu~vO6Ur}vh6dHdSOC2=+ zU}B~0lYGTWE| t(#9#VaB`plw_*s`a Vg% z+g)TVJSE>w_i#?@xKYrfHMD&}ogWkd^aJvqKV(5R+S%xWq|nPngCMBn&-SVyC^51q ziw2`;PxyfEAu=N2%hZ%a96bpFkE#dXE3wV9= i;XV%AK;Frzn!JfG3h zvv}*nP?o9wIT_-QkutN@em;h=UiS!vbR8tjGI9?uZ9y0QE!D1soD=r=ih`KLQQjwO z1LiAddY#;4B5ZcKKCTYB!6w26tdAR~NUaa|AerY<{iRR*mBkaP`w?y2{*q!V`K{~p z;f%cZm+wA#;I?X|FOeBkV9dx*Z8KL>-dUPPaMDKG_AAG*qL73pEj3Nu$*18Hho6Lx zidPiP-_ys5R6pgbFYsz@n%8| 9~UC)+EwgjMn4v{n^z1+WMZsPli zWj9*|{|O?YVG?5Z>qXGNamQ)8cB{90s?T=c^p3>s-N?WF{z0ybo~c|~x-Kc5t13Fp znawAap5D%Y1=YX1qG?qMoS>wKg2Ud^+;ou@Qv59%-^|#+jXb403dv}3+I5O}L}Q8f ztRE#VeZOdaKG_MRL%wE$ dR@FqDV$F2lk zgxejNZ@rNCaK2vG2FSa;sFF1!lxq*>K9CC WN!eyFpD=j07qI9s{0oeuFgTCkH zAF$rc!GKT6Nf$3iefM3lVN>6&jVcO@O=;zDBt8r&zUy+}EL+^YfcX ~ zRqZB~4ixJg33Y0f@1(9&i0uod!lH*?cFJ|bzu2{hUMXc=Y1JE)5k68Y!jU4Q=BOm* zD`kurWbO#=Uw3U3?1V2gPzO4p=gb~%k-U^XdzBwgr(~KdWl2^q#Kxoz3&*GJ5UPF+ zPrBXa9?slTvmJVKM=xA+BBEplN(17FH=J3ZAcWz6(c*LWwDWNSEGy7CmE!&!evCn% zqi}c!iZANp&?pZ{|DH!GET{vG$W;iy0o?j$3%gho`N#tm+i$c)bO_A S zKBHLSr_}fQxJeBUJ|D%t{F%YqF(HjRaOGciUD;~b*!-$0(zdcoH`Hz&EKe5Ia*gBW zk54#0TZv5BabILl^m8A>HW%HiQsV{vGFZ2x57c&I$wq_awdwNHb!`YouW66|C6Hgc z5ii~1c!^Q}1hZ(Mu7_ltELG{?xw^SvdY&iF5p)_Den|V(w^nt=G#Po8zCcUX0NwI; zHX^)`-^%7ufp(Lg5u2)HaCoHCDxp>gLG*(BKpIMyP4kVPCpK`$?**?uV_vatfAm5w zq+#a1?a}kN;y%>nWjhM?0F3*%4-Z64@$F1l4s*t|_y~HO0KKC5w|362Jv5zte)*O8 z=w|K$`?&%!FLM9t!&U+9+!KRWBm$S@x#ROUD+BnvE)N_liSqZPI;;pQcQ7;g&Cieb zKW{a#p&F>G!x04_RKJEnNRb{602rAIG92eCiJlI8_5mgtgL635jDxM(=$tbfd&Z>N z#8QvWi)pYvVj((ATf+^{Z?Ag06se3emwX>cIc%1`?8Jj9cLQNj=K+M~tt9#G@9K3g zxSjUUXn!WkY|;3IbxyEe_Y;c`{GYQ6u-mes*7)t$F>apH$6-yJdFT{#q8;5B1UP=) z-XLd?to(w_C#LV^BnLjm4i9-qNE+)52};&c;ta)@)keUM6ZzS?3FZuOTV4TM;~2s> zc<_ejq$bzRFi|%?n4siPtUoQ36PuHb{$B`;VynfDYv&7V=(<%B%T*JCr tPMdeld#g&gW_$MViW zX^74dWt;)8Ja0krU({W)0D*()Ay-uA0ZB5>3_UJQ3m?|2PWEJmL+Lu-32VPc*EXdg zREy(rcVqkMB;=wouEu3I8+mAjhkvMhEUb+)gaugO<8~{|5ee)%Ppd-RE+%~ZeUjV{ z*IoHZ_!gIjidUk3O;ZoktQljz?q{p0v|iboQS6K;AiLjG8K*WR(o&Ws_~yLH-dj)~ z{JB*b{S$v*tkNJvpz;)Y1=;M+joucUkS?3ZHJ^V)SDH#0$xXjfx07usLVi+oJwE;} zn_bMej;MYaZFpLmlQg$g28?wCz#Y4;d#4VjC>SC2x 0aRlFtqi&rUUFTmE!}a8S=z)M=^K*`oI0-omM1^8N zKIr`M`1rQY3P {YK3HNWh%5~Ov4xPW zX=E{vL?S2}4kdzG-&YNcy%veMeyZ^y8ONKiyj|}S{owM1dN%80?9VU^>7T5qCr-TS zPF5Z~WS3t &Re4|Rcf?~jFlO}JyHA~|(UXghrOI3m7rkwh$0Om2)0UNK?V*B8 z@A(U5qn(`0Dk!Y%1%sN_$_XMz%`9Uiy{d(-EkG7ln@k#yQ+(|+H~ux39!}p5+dApi zBq~*hqc^WRWAqb$gyDddw@#;Hyu-^GYzy 0-l=TA!zuE_B!@ z5N4+sN|q $6Xs%m)C8lFFMLbb(;bQXz* z)(p*?0=*xu563&u7+tU2>$; kR<+4dvS=YZSd0pXA&>-Qlwj zJ-1_TPkh6V-Vj3RQf=dfmDvq@4~i>v8f@!= l>vzcCPtS*p4-Xgfj Mkgp&$GdPQIpsRziz;}!#x1w!F8UDoUuZxX6DL6fpa5{8b zKU!FZ#**Y+&sGc%srP@T91nZN6vrBv0@69V;j9p?Q=lv&+k_p~qQ-8Y-5l?;KqT;o z9~@|__yo5fxyo6g+AjZLGxyGxKxuYyyZ3g?A*KH$9E)c2YaAO#IV#K6bmFmLewA@2 zN0~Q6!0NO2@UFP1jaCDBvjJfDLaR$UE_%TJwSfg?rT1W!L@p;xP{A;}xH`a}h_~+w z^tBwi(fipfP3T?Y>1NvXpwiPe$2{9JMR4<4B7A>(i}HH$OaGU~E?qIq8kbdB1w7#- zcRcOu5F@-fjcQJ$xU;YJC~`F2aOsC7uyFWW9yq0dr?%%cx_aY5^$(l-Ke^o)YqDTP z{B5qOGGD&l$Fg)ZkwLseV3N(hfx8EbtQNwUX^3BOqwkg22X;`gr%4RLp#heD6mC%a zKvc0TqyV{0^K5qopw35#4xtEmQs6ffn5hd1E`frgLib+h*C0PRSREO_jDgU%FbKl9 zovV&2R Lpj9eqaURf4X4cT9fb8xgKo#r zjZ5^v_fqCPoDu?hTX{3T_?7g2E~pLU3$s!b`vaD?bbIqa7LB(XVbnHHRvkixa^2r| zL&n^K64R(IJMm9X;$-GC#b5U+e?Y-2@H!&CMoM$8T{a5j-3-;|@|MMgC72e)fjc_-`-9rtyL}744 zZaH9=6QO-o&`Op6% m*yJ1?scQe_5rC~}` zJuLUOzkFI@IN{{7S_*&(s8~d@<2_yIP)jk3>T{4aoFBJ+8|Qy5Et;gknW@&fHcF`c zQ9eVR>%}8$-OH% PBM+M&OfGae18ks-uZIZXP~gn9$P6}ngfpMV4V>M=+UI~xSv0fV zc)T`1_%C2_``c1oeU|R6UUwy2j<^1=FKQ4)$&Y|$e;!J9qx36&e8%sE=y-Eh_AHN+ z)OO(qfc*7dTUW!(%|D>3c+H8Q>1TPi)*MjK%&*emQc7@_GBlWGP<)_hyD48NUmv&R z`@Rry0SXc$#HZ} LPuEmTOUEwz@WfCSfQ@H?_Z!=lAEj~>_Zv~@*vQmM z_;Spe`ao#CUI}O&tbE O*?mmsWxKLP2ca?4mv+3?2Lu+z7D z2?gh~y?$vEzu)~6(^`1!d8Is}CO{{H^AdtTM;=N7=j3B|!vy6kBhKq91XML(YHFIA z#Fsj&)3 n<`E;;8E=2VQLdP@3^o#xSwa^E*{@$e!nuQCli>XiS8&h-=G@OUs z B0D-ZhXr=1fSQ( zRP6Xpy%YQjPLT2+gNd((5xF%+V(hPIzr0x0oz)*P?NHndM 5ops@2^8;3RXiYuz|rfHF%|Vh8<`YW@RR(EH)fWSWF%$ z+)Aw_GeroK<^>MQgmAqOa7z?DB%%~C b(uSC-(2+Xw zb{l*@?ZPw9 qOfD`FRTc7J@{3ByP&gU9e(89dgH&8YW;R_ z>olh+01a0_Pe&e{ADK~!0mAh!oI@4zVk lX2=I)_(iWZ zi+Wc`(r@a_loCafqBgq-h6+A3A(DOsW)lh=v2}YE1TN!RK0;}&g6>Z+895oStl7|4 zb~iMDs=!ybqBS8OdT59f$QWb*_x7N#6yiIaPNxX=#Z}oj8vUx%*;F7{d;$sm>gNqW z03xHo{Jip~37OlEvPb%+Awej>NHgp$JXH6eeOHUo6gw04wC+mg4af#CPhAf}sf(B^ zq${HZM){?5z-`F=nzsbOx`|s`w0$T_f65+%7UBg0eQv<;rRP`Gp{W0`3Gn?khF|M) zj;9)vV9q)odqGB$ba_Chugb#}+;7qkGirc5!UR*Ye9lIq(Sdnk;88AMuzz9j6z9 T-Bi`t@IuFaF>*L5olGm0y)q35#}a zbIdHtQ3<&d8XX_bulLb71w}vB8!?$jzUVKiwmStQBi6k>qf(_5k~|)Qe13b@>_#P8 zw=nB;Jc-+bL5~#nBlPe|r0O-xgVKj!JqLuZm(u%Yeh5oHBXfZ&o#C)krY9~R*yFh} zJD)epfTl$3Bmm?u8%BSmf=|_-SM ~Uj(t{>F{es=0OA4qzPXjfp`FSfSt5LIaZ5nPg`0IMeDi@TJ4 zOZZ GOy3;G(5Lv9&_iWgIi2rHA+Cy~_Ma|GO`DsT2;pdj4cx5HK4wkeNB9|34y9 z%B _=(kdOELd6mf99>=w&Yv%|1xj?k=gk#V}xtA{kGpvSKVXOW;0 rcto_E*i7RpmmDX)FTg>^sWq-}_tR=fQd!4uV zz|6V_8V-$A*be{!`Cotdt5cD7O%7wv?Eh^f1Y|!oX_tzZmD#|5ecHeONSF=-ZNtJ8 z@yPM-25f zQg6%={P9- 5t)`IP~$Nhmcn)30jzbJgco$2CjXm-gNnj_+Y5`0 zN3lY0HRF<&mYReMolG6R%S~77Pj6*{n5&*Q! 2#pP}N8@1Y`|N+GniwsxV@*Eb(97zBSl42gGG zHdm?X4D{RfwS69^uV-<)h)H4D-YQ?KTK7xgHTB?6gcij7+g6&uhJof@+A1X(wDWPk zE|T`eX7FL*Rd)_cP1cJYD{5_h|DKVk@wZ9#-= uP;4Zzp_nE<__MHxg&x-)+o2)tJ@pF_@8FX$5_?rm4{%jH8zpM8?bcjfB_QB!a|O zi~pj_ZY%3~kFzyd&ued*tFJHATwLb&CP7jJz5t^lF)RPuDS^Jb)YIxizi;R!xg-ha zoF7DBUE^13#V|f!56`yh3-I>6Iap&8eEoH7JT&p~@$SgywJv95qr2DWWC0#_`S=J0 z(H`?C&Ucbe`EVllg$TDF?QgC!hZ`pBbJt{y+gO@LEzxIQ%G}5^8MjXi$MY33kiuDUcd k)MLhZigxC zrvx7xKmF(-cq~R$LvZF{7v0v -M~s^ZM<{7`>>WM^tEP%5ptLhY!OYf=rTlD@Wq9v$;ONwD(4_&Qwt# zRp4|ym#?Djp<>ZFTc+L@N6FMLaQ~90B1}$nU6=jng-s Fwe4()!3dbq!+#F{MFOUQ7I=tL{(_( zjm#N#XJ eo+&o^12K Lx~-;)crV}7qb@0FIK>*Rj#QoT3Yz# znH(Ho^{4I=kLAYsy3WHYx~dmtBz$g)ET6p^H?XVs@^nlTecl~ty$DEU;pSN?bWCPc zQOSZ ->NXEEJ(7E;)lPh!}yp zAopj}XD}i6u+Y^Id1rWyF}1h^`iH~iCjHUYm(r7zM4RQtfm+k>?K6-sHUVelxKMT( z<`R=Y-0swf8MR@EPfKpv>vClQ#rj%{PjU=j9xatpGhiPm2{K_9xf4Yf)tptG+!!O@B3crSL2t5 z>FwVp^Wh*LAE^!{E!u+h4S(vvlSK`w {iLmUKPOu }I~HXm&l0@x9v1i`GhN@h4pRylAkrO1QMH_F zHXKb ZqoEMlSNAIU 30ZrZgGu0dL$$!_V>Vy_d}tsVSrrDhofjyd2e5E1-+c^Ryw?& zw@|OM|J=*a1>Y>U@gN5gu6!~Xh`8@N)8#XMa~zj+UiZ0-jeZfkQHoNwtQ_@xc;h~A z3(srSf5+u_1A1+SFb#fH62dnvG-cU-3D4JVIvaByiK3^SDO`lmUI2cXqPh}eP`%{- z%L~>^_;Y^TkjA+?(_hCTd46b^Y_Ph=1xGq7_PrWLO6UX9auTL$Z#2=)RvP9uE&4=p z7XyA28!XI^Ehc- _Hz)Ad{F2BV0U^Nj};A6q!R*2Pd)aq7(9byd}!BUJJSO@&&XwHvLYhy^@$8No-$ zOyMLcjGois6vMh>G!gd|_UFIsnTb2-uy2S#txvbViGIZCajv^mH*7jGF+4f0IE;*4 zPRSvXud?LpI_${cyGZ*^J^d5&Y!BSlSWIT)zcK+qw$9eR#@gWTi)PARqLo}q%Y_;u z=J7f^?A+@ pY7YB5Vw{;T4rVP!oTO{meqZ+&kQJ9;_a&w^P@iBYWuT$ zwO&Gf9)~3}EALm|m!E!im(l9`KQG?~R`yGG26cEBKi(60TYXY&0I-3pWTkd+rU}pF zX~5S15#8 mB6w4*Ti(v6%PK05 zZc?_Xd^7v`ogeEBfjR9@_qN>IQvP-y3;w)%xBF8rG2t_1+gAR(wfCz*ZMT=tV +7*|~$jB*Erlbhp-&-Ai zr~dw($NvQTZN5DyoZrkzsF%_x> cL*Vr%!Ks zRDXNZ2OPgUq7SU>wrRUJ9)9gcsAl4jac(SA_Mab9&U4)SOQC>-aaGKhmv_z0@}lIs zr~i3sapr(FVRudA0FKwVoZd_z3j(|UjmZiDMLfq$R0tG2prCNz1`XIWJPjli+71l| zHVOzlun=2yOoh-818{7`0od(ljgV6%tW*YgMs{EF!Ym)cE&w|ApZuw5iZ%;AU6{-O N1fH&bF6*2UngB%v69xbP literal 0 HcmV?d00001 diff --git a/spring-boot-demo-mq-rabbitmq/assets/image-20190107103258291-6828378.png b/spring-boot-demo-mq-rabbitmq/assets/image-20190107103258291-6828378.png new file mode 100644 index 0000000000000000000000000000000000000000..522f805d3eb4c06b7904d2b1d8db8667755e48d7 GIT binary patch literal 63642 zcmbTdQ*>oP+qN5a)N#kQZQJailXTdzZ9AQgZQHhO+vZBLVy)oM`;PA)WAC&5?Sol0 zPij=vtWgi{=bGWlic*O1xbR?LV2Co(;woTZu-0Gi-mu@kT27}%bTF{*QWj!j$}(bN z#LA9#rWV#FU|`bWNg6Pks$-bh+A1>U0kG0=U2rOea&UPPD6zDwurkDXgRv;$7mO3M zt*)rxE)p6NI?fFKl^9-HP+or25#!_Snzebil+epAJx|+DirsBbGigpAs;p0@-@vkd zXRD=$okPSj(Iircht^Y;6g5b1fdvpz+Cy^3Fs0NV92kKm?tylWrVz~$j>;qA0XcV{ z>i1BhJVapRg!}RVnK{Te;9%D(-D wP@xU%IOU*ED8c1Ru8UAjOL)1Zm5wH%5c%v$TIs6zjy1g@_Wod*& zO4GkK{)}RC3QicAAnZH;ttN_uK2hY+x%O$s_tA2ALKAAV+9!fOmXDUmG0?p=o`q92 z$o>~Zo>u380uXysq*q=Oi&T;LS8CiOU^$-RWH7S}{I1Le&P0!EsQQ K*T*!O zI}m|Ihs3 g$;8C8Y-3Rs${XW^06IcU5_#vPWkajvDp|Y8vA3t z_ltekDq37BUPa$hNPZzT;*71JQc@4 (sUQc2|`-0b+8a X0&DXX1 $`(jOl2-uWb5N z>_t>tT~OQpNM!woChG9KuDT(!VHGT~w!p+!IL+ZySd$r-R&(IgecA}NUC`4!m}~&5 zYgmQ5;CIEg`bK|&y&S09A5DETO8ctN^e?o4qV#qwgn!>}@W8^5mXF5G${yeXD$S<* zfl0R$ VUE@B&4F3FRJF+LK?A!`+>nfcNcIGq zAr&Ps{E+Xvh}hyN!NIer-wY!)iJSkj?FT%Qib!*#1(6e5NPmlul171M#d`TxCj5(R zX%w@N@CAn_I8%6 AbY8{Mv7X;0%O%w6asO_(YbEfekoit!ICNd|L- zvScZ_H5ER2W~h=X@*ZNGv@zOcxZt&gJlQeI2}%ko7upj_3_4%<)*v`qxUsw=C3O70 zG`|W-S!82CV}^62bI78Yr_?g3cC5fC>Y;OeaA&HH%(jG}Y`3VdC}H8LiZ#tgBKJRk z){OeV`lxx?Hu ? VXdGefe}7BZ6lNE17j)0h&)3i2E~FPyEdMT5FKW^N zWG;(UJ+b?wqeqEl$g0jJFSyP|FW4^V&7C>(dBO^0=}GG=)|BKF3gz}Jn3{K3IyFJB zBQ#nyW;E8A3$5gxuAbMr6ax}Z)y^+g+A0@H y oDyod6azA0il7ufxM8M!wkY8!g#~1qQ#~3M|4J_ zq6rjB6H*dJ%ZAVD+0HL6>0P%^H+e#thwUPb<+oBZ7}>F!<>KUmCd4#~ts()2E2b+a zMmEF6F}fU&7ppV2dbS?68=F_{fDR>l{fq7MkNJVIAmGmfhpB`soV~W*hM~J5?h}W8 zhm7H^TSIq+``77;DL_I?Ov_})T*u1DFx5cG@=0+`fL$k$b;rpUsz 7#~<4co;|+s2Cs;*OV}pVi&)c@|2hk z=O>i-`!D)8hD(Cg@R1Xs?H%2lax%l7HXSnyTbJOSdYDEMbAcB%i~G-hdiax}jS)rN zlml@zUJK=wZ>Nv9$Qx6_--LatC3(-x-E3yAJ!?`j2g&{FK`xm*8M^o@N FgIo+&v4v&jNj|8UTw8HR(-}5qOG-n$NFvY=2T3khD $ZO+$M`cw*KiUv{&}7aM%2yrlxvt`)j=NeaLet zeqXL3%akeWy^uWraD?X>|0A=xE!hcc%7;5fz;43Z*!TFY8G0E(7VDlqQm54k)#c|^ zzCKn5gI?G316SEjV{&>DBmLzE=j}!)>m{q!+7u9?d!rLdpHy$Yd(r7Ev?yl+`Us15 zla`iFknw=2 TMAo-^;dW8@#Y4h*ALB}En}~tM %beVoI06f*~u665rAa(Olp;0>H$Fq)k}OW9V)?^z(dfzCdh5HX0E>g%HRW z=ab)IBe}7akf5Z;$8n|xIy+rBnHJCF@ksW0Ty5)h3Y!7t2s!sXiQY*7BNS3P842E& z04qV4+m{L{K8!8S&n}Iw(LjDris$k0ia#1NItO|k?gEdVCsBuZEw+kXYc6v3fV0ca z4W_FfTR5E^*Mxg|FFsqKBxHG_#rKIDeXsV;j%fbxUhZc<_X|3<-mc7g#{595s;{XZ zt+(Mr39luDO2|)=_pWb(M^D*i^JYOlCVr>yKS7&&F9AYgADxRrZ9OL;7eliXCN+`z zm+k^rE*rvcy+K?rcHefAd)Rzi?z(`W1|k(9ew@sQxcj>EgoBdhnYkPw;t?{Uj0bDB zC7pj?fT;=iwIdAJJ$tL$DVRU6gwM1pT)tpNIm)w=rVplCI2Rb7D44V!tnl~E0_(s5 zOhepGx|VYp60nDRd>q_3GY`+wHuLL2F?TNZ`|lrK^%JvMHCb$C~y(s|7AyFJu2|O z-tm722xp?A^h;)fryT!(n6{rRHZB`gFyZiPkpU_q!r48Bniapwet8pn{oj2HN1{qc zJNT$%{Xb8@B)V5!<1Hwi-3E0wMwicR_Ot8WSU4U3>!gIOQCeS$JIa1l@q#DWX!e9| zd!8Kmv-AAFKLd9=s{7Si3pEW(9Hqi*eDO@`z9sXgj59f NN_ zzwG|Y+m_SHfLfO%!|U0I-5DTUAJ<&K{xd 7?eq2YH8mUhL8txE!(G0x-_# zkt?}kx9bCf4-xqs@|0`Vp(z}?nt5|AajyVcyTv6W*v+nHB-0bJyskVFX*H@v?~dPP z?YbZG6G%<6Pl5wVRDj#>OAYbEz)j cF$8BK)` zc+2x2kRV8HXZzsWuo!&TShiRCsf^~sW~8~~s*Hk~$v=oU_&EcNYo>g^UoAE~V8U;3 ziPjxJ{E0*FXJGAUTG7eA$)~MB!Q)A^st1x&<_E KleQZEW#qZ*T69u}67lG(764%mPV`N~yREgJGKF*8%1 zhli(HN~g}yL{?6& (m+kzb|CG{jq1yW sj>*+TGr8U9am6%_o-EqAs|8$m$iI z_nH@CLZN` x-ATRQuyFI43F@fL0*V&I#!Ds;J zpc(Frp7KCBkw4%HS)3%qVnwp*r7A`AwjGATp8QDbjkZc&T2iexpk;S AFy$_9KNSVe!nq^G5LA#0X#VJ}kogR#8Fo=+fi$rq1AGb}-u1$eB-Xst7~^<|EV; zE?2Er5DD^Uf}Vgy1RE`LDMmtYT1Xh#-uuMoTV}bhu!A?5`o4uX=-s{5RreR$8Q+iv zrJ9n4h2|wDOZj^T<8}F37O?ca#VeL8YZ 0;w;$my;R1OtUNYTW(;mjO;b%8 z1|Dg?K8Wsg$i;51^MZn++(ElqTq2V>{}`pc?uH{Y`!o(iX(6(!FAbEk!V@!H>GDne z_L(vcy;-3Mi>up8qp48huduJLpbwW(J*~@bZ#S%5$|MpKL=-Lug9oWNd^ek(`(9mZ zyqJsIIhVP-&APL4SkLs!SlvDtroM80NW#TM(ET-;TgZg#WL8*wiT29DV(WEQhwnkV zk!@t$o2}us(DYk!m1{XI{ zKKxtohf=LdHhY>teLG()EC#3l+o-gRE^nEG2bV25P|_@v#DYslOa>94N{R^+k5+a% zOLBX)Cg;J{T@t8&%-esjIjNTIz#@dqQ_z#!|AHW=6L`O2TRgbV5l)rhe7YSbo5_R> z=eP2t< V~*`FHgaX)5N(-xA> z_4M9-&hG6dmR{GlwV>2hoUnv>M}O+z_h}T(`wg5t3l5@hFd9Gp;wFlMiHl2 dv`TvLJf 4v&}XcXE8e`vxj8|>H;hJZg@K*g1YOaKY{Z(cfNE#g`8`|o;?O$;m%*; zyQ0O HTTgmF0g_+$TNS`>#(Xm(zgi0zq)5>zfF%!epMocc;=^%WmR<_o;wePL zakQ;fZA@56`EUU$h|G-KiGO}j;YI8cS5Cb@P<89K)Z1FB3Ujr)0mTUQV(1R-yx9H} z7>(FkRw1Wx*{vIN2%;#*;U~iV*GyRgAt=!i4Um~zpC m=ovw=ga$-3$sN63H}LEnhuH{J?yLHf5R{_31M;mGd>di%go zysKQdZQt vXorSUwA{y M`Sm3+!_hao;M%4(ogc}uap4X zGX|{a*#Zn_mClW_TK5Z=E-{VxzW97DSGEN8>D+;FTmNKa6?%IK-vy`MEF{CdZ{)$W z4y0fEY85;Mx=(=8Awg=fhep*@#+1sY3ABlA&4(aXt~->YV*FxqyIm#mKb8RnkFz9O z#p_Bmg#-dCa{;t`kgxwZuTvISGAt>%iYFf^KxoRneSHcKHMtoXdfKFBDxzrWH^x7K z mDYW{EpHZ{2!g*JD8COXk{Rz%~sb3p=JTCdQ(b z2LEf1V=X7nQ<0FZRH3MSIA4+h)!aG*WZM!-RQi+}An)FyqT|<_i|;3xevwUs959c3 z-z-MwAQ$fOY6=P|qabf7)JlbA-cnrqV8@SMG(X%P5#Yf?qVs|Zz_IS`Vq>#SBYZ`V zWV_9dsVS@pCV*@k2$bQL)v6W0bVsC#2PL@s-p0y^ndnz9p@w~2PnhlMWEH1TDc$(Z z$#=Xby8dZ)&P%pbGECK76Dkfz6HMiy{KML*>Aa;Z($5z3A+6GCs29I^x9 aIFc4)5uG{Mgfr*L7Wm_F7&GDxI z&5K~})lq?)73*S%I~v;~jW)<(>f;5(N@bPnSLgnbd5SWN>0A*jO3B(}Jj4Cmkf7V) z1{EytdHHa1W=*M@*`F=`hu!-i%5C9v4mgKRX}je;(eq4LS$6+vIv>!seP!(o-Vbv) zLR1pQ(dj>j{FguxikGOfV3N=zGm&nJ9~K6(4|Iw6$oPXP=CO!}vJA8;oQsN=@^Cql zP4m)1FevCwzusZig1c$@SpDFZXrwjs?ADoWJA&Veds2@%mDD?eBRK9_%U7%0;YvLr z-?|stM6lV}x3#F!EX(Cripb{_EVA4S^APybGY4+E-E6ZEcfMp-iW$w+{fz6mo3{b! z=>`<|gd21IK6)YK4`>dcde+o_CjLF_lQwc0Fty&LZD%=rp%KeDE%3CTipsgqBiO;h zr{J_O({#Zygts4rLnOnS%yT;|`k&hjF!i M=gsVB?eF!Hzipw*8 mutKK72=1C$rO>0BRpA7}?1M+E3*w7@?9euj|q}QZI}uq0TtYBkP~WQNBx_ zs#A-&iDP>&(Qzn?L_UsJ0aI`;J>T_3uz%j)SdR_V0So3BtDN+_F0kE7fAam9@H$(BF| zsEFq7uI#}1{ib~*^5Wr@gvIleU&W-q^C(h_SWcpASV{aYTlp(#o(W&34S$}@PA7N6 z(Mjt9i-21gn$9~yJ4Cx#Q|Z$tT9rv~hu8`%;SD Z{lJ^$d|@3e`9H>->4*a?eMg2cLmtr`d-upozUKM! zB~HC~4;y{2UciQ#|NH}?0fKi|ZZ%+llV+?0S1N1Im c+?FvKj)qTL@w^RyfqeK_zN_OM4oqE>Mto?t* NON~orW&wE;QiRJ_ %Uc6rPCCNLR9Gn1aJSnak v+al1^JMMlWbLH|* z8S|;6Z6_;LXDKL0X>_~G>&M) LTF3RjqB(d9K;<4)N1jKB6RG1tdr8u<#hp6 zxWVmX_&yDAfu9_BD7$pq_5bB`Iwxd@#VZSAEgi0j>UX8+*cas8+yyhSzVA{Rz+^TV z-JGryP2szPa40<&RG(Mv{iBJ=QQTN1$SNaIt|;O2Pp#*UpU1g&&9=O=ag{EljAx{y z (x^#5mb>Q543yNIdafu%mo+ZE*rmL zFFlr_^^m$!lt8IFo*PkD^-h-b*yc}f@gun$-I5TqLY^-%(N;vQjj)5KLsVE@ZL;DM znAuZ`#^@XT(8QgobJUf!!ngJ1lB-}+srgco678UF{nCtr&!r6lCD%j9sM{E{rRrIN zOO$GAgAs$_d2TNvj=W+WPIVpGa++*WJN9Q@?hz 3}ZOesueX%ay% zng^S8-DIu!01eGy4LwwULUDkoC383guWp62={r4C#I4_Z)2!!jf}q9PurGa_HC6@* zLu Ia>f!K0v_NjPr^S%pojDfBLo~r-Zv!)A9JLNq>;{Fei2O&q`?AS`XyP bCo-V2Gr1e0=TWk=_(@11x!0VwGKJ_ZX)d*F#`x-H*7YscR+Rq( Q^?v@?xl+!&ewGkv0pj-CcgY|){_j@x-)?(AR}&Qdk%owQkN~v-89pR+&oh%1 zoII(MnG89*Zj2tgyn6SK3+8~4c*`a4b|K9rqb*@M$}o0OO)~dj?$K{u>-%~+D;q#9 zEWnZDRC<$|F=C r2>TVhl+L^pHzA)CY_mRmisJ_|#Zl&2Y%0fAK`4^;#&Q@3n;w zwqwTd17Fg|g%%i)XY_FFKsHt-a~YjcUsN=IJkW&;RV0_6#NaVC#Ki>lOT4@$K|$~T zW*7t=fgBohf HcWOe+0L~$f+@dkfmYBG|4 zkVO}ZDP2mn*tbY9k&*usUe{*UCJMJH(y8ZDaAS3a@2~c^{!m>nUM2Dk_ZX)5?zB6} z1tlkeV;}F}bE}S|gM0?9_EGQkhwcmjVZ=?J!a}Zy8P2<)^D~Oi+Zf+)oyW-K9ZCd< zE#5aB6zSt0>3;${SU52)h>}=~8sYnU1Ig{;xV=EJ<)|^RzgoXyl@}@)@$ZX|X-Z3H zF$Gp}X*CJ|cz`6I4k~A6G(*P=;kbf8VZ9lCsdX%e^NTFN3R^rujN?f{VHLaSovuG8 z%X)f4(eENdspJI?!-lqzwZ4tPOl^0kt?i~MF*#9^u0dmA`^|?04iAKYG+(*ZGs}l3 zRIHEmCWFk`we>p-e*^~{W#uaqkyz5?f#WK+pMjgfM$lR_qRf!oVDLU@G^2~9r)(%T ztDX19KvWhNmf^9uT?JDzUT!uZ`KHl`L3evMh-rH5?~tnNTz#O~TPwRUtT#;>cPFJI ztK};}-K>x43qkl%deHN+*~~OB)9r8hEWp$E0O%jOgDkh*Drb231HtHP zMav?Hjn~=y$NEb%MH;md_ pizrSu0agrQI?cEF)N7+a@?jrMM4NYUTWR>?k|` zp;NP5en~c7RHtpk@Rj+K4AO8;)ZkZaFm@8s-{fvqeM!F~ACD;X?_bVG)F=%KPgchJ z=!i=hz9oFe{2mKF+x3$7uH~1H%O|no71xfufrN7%bU~Yt;?vfLEpJs1`z?iwxg6|3 zY;W>=xcn)jA=Xr_D3fL@Hzf&_iWE`_6v|LUXX4X?@$J>BmLWFHK&Xl#B2hSt-y=S) zj$se6a(=FY=s5)zb;N6b6M(u+fll_&9({YOgU0SyDKR#E9AU3(t;-kF