From 710dc7bb2022e030b14c7ae03a25b64679275757 Mon Sep 17 00:00:00 2001 From: Bosanac Dejan Date: Tue, 24 Apr 2012 16:17:53 +0000 Subject: [PATCH 1/9] [maven-release-plugin] prepare for next development iteration git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1329823 13f79535-47bb-0310-9956-ffa450edef68 --- activemq-all/pom.xml | 2 +- activemq-blueprint/pom.xml | 2 +- activemq-camel/pom.xml | 2 +- activemq-console/pom.xml | 2 +- activemq-core/pom.xml | 2 +- activemq-fileserver/pom.xml | 2 +- activemq-jaas/pom.xml | 2 +- activemq-jmdns_1.0/pom.xml | 2 +- activemq-karaf/pom.xml | 2 +- activemq-openwire-generator/pom.xml | 2 +- activemq-optional/pom.xml | 2 +- activemq-pool/pom.xml | 2 +- activemq-ra/pom.xml | 2 +- activemq-rar/pom.xml | 2 +- activemq-run/pom.xml | 2 +- activemq-spring/pom.xml | 2 +- activemq-tooling/maven-activemq-memtest-plugin/pom.xml | 2 +- activemq-tooling/maven-activemq-perf-plugin/pom.xml | 2 +- activemq-tooling/maven-activemq-plugin/pom.xml | 2 +- activemq-tooling/pom.xml | 2 +- activemq-web-console/pom.xml | 2 +- activemq-web-demo/pom.xml | 2 +- activemq-web/pom.xml | 2 +- activemq-xmpp/pom.xml | 2 +- assembly/pom.xml | 2 +- kahadb/pom.xml | 2 +- pom.xml | 8 ++++---- 27 files changed, 30 insertions(+), 30 deletions(-) diff --git a/activemq-all/pom.xml b/activemq-all/pom.xml index 26efc22a68..e93fced865 100644 --- a/activemq-all/pom.xml +++ b/activemq-all/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-all diff --git a/activemq-blueprint/pom.xml b/activemq-blueprint/pom.xml index 25a6f7de47..66faac3544 100644 --- a/activemq-blueprint/pom.xml +++ b/activemq-blueprint/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-blueprint diff --git a/activemq-camel/pom.xml b/activemq-camel/pom.xml index 8413ca9e5e..51b6b100ee 100755 --- a/activemq-camel/pom.xml +++ b/activemq-camel/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-camel diff --git a/activemq-console/pom.xml b/activemq-console/pom.xml index 3089a45687..c0343ee215 100644 --- a/activemq-console/pom.xml +++ b/activemq-console/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-console diff --git a/activemq-core/pom.xml b/activemq-core/pom.xml index f5c3d576f2..f8d5641afa 100755 --- a/activemq-core/pom.xml +++ b/activemq-core/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-core diff --git a/activemq-fileserver/pom.xml b/activemq-fileserver/pom.xml index e90a804227..db943e13a6 100755 --- a/activemq-fileserver/pom.xml +++ b/activemq-fileserver/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-fileserver diff --git a/activemq-jaas/pom.xml b/activemq-jaas/pom.xml index b6b79be57d..44fea82ddf 100644 --- a/activemq-jaas/pom.xml +++ b/activemq-jaas/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-jaas diff --git a/activemq-jmdns_1.0/pom.xml b/activemq-jmdns_1.0/pom.xml index 1b94a59222..cff60795ed 100644 --- a/activemq-jmdns_1.0/pom.xml +++ b/activemq-jmdns_1.0/pom.xml @@ -19,7 +19,7 @@ activemq-parent org.apache.activemq - 5.6.0 + 5.7-SNAPSHOT 4.0.0 activemq-jmdns_1.0 diff --git a/activemq-karaf/pom.xml b/activemq-karaf/pom.xml index 19b0ce7980..b2fbaf3729 100644 --- a/activemq-karaf/pom.xml +++ b/activemq-karaf/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-karaf diff --git a/activemq-openwire-generator/pom.xml b/activemq-openwire-generator/pom.xml index 813ac5d7b2..32cd439b7b 100644 --- a/activemq-openwire-generator/pom.xml +++ b/activemq-openwire-generator/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT ../pom.xml diff --git a/activemq-optional/pom.xml b/activemq-optional/pom.xml index 105c84c7bf..61a780c8b7 100755 --- a/activemq-optional/pom.xml +++ b/activemq-optional/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-optional diff --git a/activemq-pool/pom.xml b/activemq-pool/pom.xml index 348d00fd3c..67745d8f76 100755 --- a/activemq-pool/pom.xml +++ b/activemq-pool/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-pool diff --git a/activemq-ra/pom.xml b/activemq-ra/pom.xml index fa8139b597..fad7daa8b4 100755 --- a/activemq-ra/pom.xml +++ b/activemq-ra/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-ra diff --git a/activemq-rar/pom.xml b/activemq-rar/pom.xml index c663b1e9e1..a6bcc1b52d 100644 --- a/activemq-rar/pom.xml +++ b/activemq-rar/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-rar diff --git a/activemq-run/pom.xml b/activemq-run/pom.xml index 48021ced57..b269ccbb8f 100644 --- a/activemq-run/pom.xml +++ b/activemq-run/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-run diff --git a/activemq-spring/pom.xml b/activemq-spring/pom.xml index d68e127d8e..c2e1d8cf57 100755 --- a/activemq-spring/pom.xml +++ b/activemq-spring/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-spring diff --git a/activemq-tooling/maven-activemq-memtest-plugin/pom.xml b/activemq-tooling/maven-activemq-memtest-plugin/pom.xml index df086e4eae..0942877e8f 100644 --- a/activemq-tooling/maven-activemq-memtest-plugin/pom.xml +++ b/activemq-tooling/maven-activemq-memtest-plugin/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq.tooling activemq-tooling - 5.6.0 + 5.7-SNAPSHOT maven-activemq-memtest-plugin diff --git a/activemq-tooling/maven-activemq-perf-plugin/pom.xml b/activemq-tooling/maven-activemq-perf-plugin/pom.xml index 0257f91407..6f72ab5eb8 100644 --- a/activemq-tooling/maven-activemq-perf-plugin/pom.xml +++ b/activemq-tooling/maven-activemq-perf-plugin/pom.xml @@ -21,7 +21,7 @@ org.apache.activemq.tooling activemq-tooling - 5.6.0 + 5.7-SNAPSHOT maven-activemq-perf-plugin diff --git a/activemq-tooling/maven-activemq-plugin/pom.xml b/activemq-tooling/maven-activemq-plugin/pom.xml index 61d9f8e2d3..54fd0cb8b5 100644 --- a/activemq-tooling/maven-activemq-plugin/pom.xml +++ b/activemq-tooling/maven-activemq-plugin/pom.xml @@ -21,7 +21,7 @@ org.apache.activemq.tooling activemq-tooling - 5.6.0 + 5.7-SNAPSHOT maven-activemq-plugin diff --git a/activemq-tooling/pom.xml b/activemq-tooling/pom.xml index 3a6fa163d7..4fcc8f050d 100644 --- a/activemq-tooling/pom.xml +++ b/activemq-tooling/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT org.apache.activemq.tooling diff --git a/activemq-web-console/pom.xml b/activemq-web-console/pom.xml index 668d639769..ec7b37f67c 100755 --- a/activemq-web-console/pom.xml +++ b/activemq-web-console/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-web-console diff --git a/activemq-web-demo/pom.xml b/activemq-web-demo/pom.xml index dcb8474a37..b6bb29c9f2 100755 --- a/activemq-web-demo/pom.xml +++ b/activemq-web-demo/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-web-demo diff --git a/activemq-web/pom.xml b/activemq-web/pom.xml index 127d8e8ddc..f5720cd615 100755 --- a/activemq-web/pom.xml +++ b/activemq-web/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-web diff --git a/activemq-xmpp/pom.xml b/activemq-xmpp/pom.xml index d0dd861960..f25bd19aad 100755 --- a/activemq-xmpp/pom.xml +++ b/activemq-xmpp/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT activemq-xmpp diff --git a/assembly/pom.xml b/assembly/pom.xml index 3e3de347cb..9bbf20c348 100755 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT apache-activemq diff --git a/kahadb/pom.xml b/kahadb/pom.xml index 998dba357c..867c8673f6 100755 --- a/kahadb/pom.xml +++ b/kahadb/pom.xml @@ -20,7 +20,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index e44af5c0ea..c7fce286c5 100755 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ org.apache.activemq activemq-parent - 5.6.0 + 5.7-SNAPSHOT pom ActiveMQ 2005 @@ -197,9 +197,9 @@ - scm:svn:https://svn.apache.org/repos/asf/activemq/tags/activemq-5.6.0 - scm:svn:https://svn.apache.org/repos/asf/activemq/tags/activemq-5.6.0 - http://svn.apache.org/viewvc/activemq/tags/activemq-5.6.0 + scm:svn:https://svn.apache.org/repos/asf/activemq/trunk + scm:svn:https://svn.apache.org/repos/asf/activemq/trunk + http://svn.apache.org/viewvc/activemq/trunk/ From 0b1b932ea73df2c584a4166c45ab7674d6109d5f Mon Sep 17 00:00:00 2001 From: "Timothy A. Bish" Date: Wed, 25 Apr 2012 18:30:16 +0000 Subject: [PATCH 2/9] Update the tag to the correct 5.7-SNAPSHOT value git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1330473 13f79535-47bb-0310-9956-ffa450edef68 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c7fce286c5..dc58234aec 100755 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ 2005 - 5.6.0 + 5.7-SNAPSHOT 3.1.4 activemq-${activemq-version} Apache ActiveMQ From e5c4ffd673aa76bfbeea46c2288b75dbb4f9c2e2 Mon Sep 17 00:00:00 2001 From: Bosanac Dejan Date: Fri, 27 Apr 2012 12:08:39 +0000 Subject: [PATCH 3/9] https://issues.apache.org/jira/browse/AMQ-3820 - statistics plugin - subscription statistics git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1331372 13f79535-47bb-0310-9956-ffa450edef68 --- .../activemq/plugin/StatisticsBroker.java | 53 ++++++++++++++++++- .../plugin/BrokerStatisticsPluginTest.java | 32 +++++++++-- 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/activemq-core/src/main/java/org/apache/activemq/plugin/StatisticsBroker.java b/activemq-core/src/main/java/org/apache/activemq/plugin/StatisticsBroker.java index c5df8d9ddf..2e2d4f0b77 100644 --- a/activemq-core/src/main/java/org/apache/activemq/plugin/StatisticsBroker.java +++ b/activemq-core/src/main/java/org/apache/activemq/plugin/StatisticsBroker.java @@ -22,6 +22,8 @@ import org.apache.activemq.broker.BrokerFilter; import org.apache.activemq.broker.BrokerService; import org.apache.activemq.broker.ConnectionContext; import org.apache.activemq.broker.ProducerBrokerExchange; +import org.apache.activemq.broker.jmx.BrokerViewMBean; +import org.apache.activemq.broker.jmx.SubscriptionViewMBean; import org.apache.activemq.broker.region.Destination; import org.apache.activemq.broker.region.DestinationStatistics; import org.apache.activemq.broker.region.RegionBroker; @@ -37,6 +39,9 @@ import org.apache.activemq.util.IdGenerator; import org.apache.activemq.util.LongSequenceGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import javax.jms.JMSException; +import javax.management.ObjectName; import java.io.File; import java.net.URI; import java.util.Set; @@ -50,9 +55,11 @@ public class StatisticsBroker extends BrokerFilter { private static Logger LOG = LoggerFactory.getLogger(StatisticsBroker.class); static final String STATS_DESTINATION_PREFIX = "ActiveMQ.Statistics.Destination"; static final String STATS_BROKER_PREFIX = "ActiveMQ.Statistics.Broker"; + static final String STATS_SUBSCRIPTION_PREFIX = "ActiveMQ.Statistics.Subscription"; private static final IdGenerator ID_GENERATOR = new IdGenerator(); private final LongSequenceGenerator messageIdGenerator = new LongSequenceGenerator(); protected final ProducerId advisoryProducerId = new ProducerId(); + protected BrokerViewMBean brokerView; /** * @@ -80,6 +87,10 @@ public class StatisticsBroker extends BrokerFilter { STATS_DESTINATION_PREFIX.length()); boolean brokerStats = physicalName.regionMatches(true, 0, STATS_BROKER_PREFIX, 0, STATS_BROKER_PREFIX .length()); + boolean subStats = physicalName.regionMatches(true, 0, STATS_SUBSCRIPTION_PREFIX, 0, STATS_SUBSCRIPTION_PREFIX + .length()); + BrokerService brokerService = getBrokerService(); + RegionBroker regionBroker = (RegionBroker) brokerService.getRegionBroker(); if (destStats) { String queueryName = physicalName.substring(STATS_DESTINATION_PREFIX.length(), physicalName.length()); ActiveMQDestination queryDest = ActiveMQDestination.createDestination(queueryName,msgDest.getDestinationType()); @@ -108,10 +119,11 @@ public class StatisticsBroker extends BrokerFilter { sendStats(producerExchange.getConnectionContext(), statsMessage, replyTo); } } + } else if (subStats) { + sendSubStats(producerExchange.getConnectionContext(), getBrokerView().getQueueSubscribers(), replyTo); + sendSubStats(producerExchange.getConnectionContext(), getBrokerView().getTopicSubscribers(), replyTo); } else if (brokerStats) { ActiveMQMapMessage statsMessage = new ActiveMQMapMessage(); - BrokerService brokerService = getBrokerService(); - RegionBroker regionBroker = (RegionBroker) brokerService.getRegionBroker(); SystemUsage systemUsage = brokerService.getSystemUsage(); DestinationStatistics stats = regionBroker.getDestinationStatistics(); statsMessage.setString("brokerName", regionBroker.getBrokerName()); @@ -165,6 +177,15 @@ public class StatisticsBroker extends BrokerFilter { } } + BrokerViewMBean getBrokerView() throws Exception { + if (this.brokerView == null) { + ObjectName brokerName = getBrokerService().getBrokerObjectName(); + this.brokerView = (BrokerViewMBean) getBrokerService().getManagementContext().newProxyInstance(brokerName, + BrokerViewMBean.class, true); + } + return this.brokerView; + } + public void start() throws Exception { super.start(); LOG.info("Starting StatisticsBroker"); @@ -174,6 +195,34 @@ public class StatisticsBroker extends BrokerFilter { super.stop(); } + protected void sendSubStats(ConnectionContext context, ObjectName[] subscribers, ActiveMQDestination replyTo) throws Exception { + for (int i = 0; i < subscribers.length; i++) { + ObjectName name = subscribers[i]; + SubscriptionViewMBean subscriber = (SubscriptionViewMBean)getBrokerService().getManagementContext().newProxyInstance(name, SubscriptionViewMBean.class, true); + ActiveMQMapMessage statsMessage = prepareSubscriptionMessage(subscriber); + sendStats(context, statsMessage, replyTo); + } + } + + protected ActiveMQMapMessage prepareSubscriptionMessage(SubscriptionViewMBean subscriber) throws JMSException { + ActiveMQMapMessage statsMessage = new ActiveMQMapMessage(); + statsMessage.setString("destinationName", subscriber.getDestinationName()); + statsMessage.setString("clientId", subscriber.getClientId()); + statsMessage.setString("connectionId", subscriber.getConnectionId()); + statsMessage.setLong("sessionId", subscriber.getSessionId()); + statsMessage.setString("selector", subscriber.getSelector()); + statsMessage.setLong("enqueueCounter", subscriber.getEnqueueCounter()); + statsMessage.setLong("dequeueCounter", subscriber.getDequeueCounter()); + statsMessage.setLong("dispatchedCounter", subscriber.getDispatchedCounter()); + statsMessage.setLong("dispatchedQueueSize", subscriber.getDispatchedQueueSize()); + statsMessage.setInt("prefetchSize", subscriber.getPrefetchSize()); + statsMessage.setInt("maximumPendingMessageLimit", subscriber.getMaximumPendingMessageLimit()); + statsMessage.setBoolean("exclusive", subscriber.isExclusive()); + statsMessage.setBoolean("retroactive", subscriber.isRetroactive()); + statsMessage.setBoolean("slowConsumer", subscriber.isSlowConsumer()); + return statsMessage; + } + protected void sendStats(ConnectionContext context, ActiveMQMapMessage msg, ActiveMQDestination replyTo) throws Exception { msg.setPersistent(false); diff --git a/activemq-core/src/test/java/org/apache/activemq/plugin/BrokerStatisticsPluginTest.java b/activemq-core/src/test/java/org/apache/activemq/plugin/BrokerStatisticsPluginTest.java index 79f07cc4cb..c6b415bd41 100644 --- a/activemq-core/src/test/java/org/apache/activemq/plugin/BrokerStatisticsPluginTest.java +++ b/activemq-core/src/test/java/org/apache/activemq/plugin/BrokerStatisticsPluginTest.java @@ -16,14 +16,14 @@ */ package org.apache.activemq.plugin; +import junit.framework.TestCase; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.broker.BrokerFactory; import org.apache.activemq.broker.BrokerPlugin; import org.apache.activemq.broker.BrokerService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.net.URI; -import java.util.Enumeration; + import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.MapMessage; @@ -32,7 +32,7 @@ import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; -import junit.framework.TestCase; +import java.net.URI; /** * A BrokerStatisticsPluginTest @@ -91,6 +91,32 @@ public class BrokerStatisticsPluginTest extends TestCase{ */ + } + + public void testSubscriptionStats() throws Exception{ + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Queue replyTo = session.createTemporaryQueue(); + MessageConsumer consumer = session.createConsumer(replyTo); + Queue testQueue = session.createQueue("Test.Queue"); + MessageConsumer testConsumer = session.createConsumer(testQueue); + MessageProducer producer = session.createProducer(null); + Queue query = session.createQueue(StatisticsBroker.STATS_SUBSCRIPTION_PREFIX); + Message msg = session.createMessage(); + + producer.send(testQueue,msg); + + msg.setJMSReplyTo(replyTo); + producer.send(query,msg); + MapMessage reply = (MapMessage) consumer.receive(); + assertNotNull(reply); + assertTrue(reply.getMapNames().hasMoreElements()); + + /*for (Enumeration e = reply.getMapNames();e.hasMoreElements();) { + String name = e.nextElement().toString(); + System.err.println(name+"="+reply.getObject(name)); + }*/ + + } protected void setUp() throws Exception { From ec87b17be013b1ddbf45c1ca91a24878f074dd2e Mon Sep 17 00:00:00 2001 From: "Timothy A. Bish" Date: Fri, 27 Apr 2012 16:01:20 +0000 Subject: [PATCH 4/9] test for: https://issues.apache.org/jira/browse/AMQ-3819 Creates a load test based on the user supplied ruby script. There are four variations, one for each of the transport types. Tests show that only the Stomp+NIO+SSL fails under this scenario. git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1331481 13f79535-47bb-0310-9956-ffa450edef68 --- .../transport/stomp/StompLoadTest.java | 237 ++++++++++++++++++ .../transport/stomp/StompNIOLoadTest.java | 38 +++ .../transport/stomp/StompNIOSSLLoadTest.java | 57 +++++ .../transport/stomp/StompSSLLoadTest.java | 57 +++++ 4 files changed, 389 insertions(+) create mode 100644 activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompLoadTest.java create mode 100644 activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompNIOLoadTest.java create mode 100644 activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompNIOSSLLoadTest.java create mode 100644 activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompSSLLoadTest.java diff --git a/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompLoadTest.java b/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompLoadTest.java new file mode 100644 index 0000000000..7bf22fbaeb --- /dev/null +++ b/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompLoadTest.java @@ -0,0 +1,237 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.transport.stomp; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.net.Socket; +import java.net.URI; +import java.util.HashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import javax.jms.Connection; +import javax.jms.Session; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.apache.activemq.broker.BrokerFactory; +import org.apache.activemq.broker.BrokerService; +import org.apache.activemq.command.ActiveMQQueue; +import org.apache.activemq.util.Wait; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class StompLoadTest { + + private static final Logger LOG = LoggerFactory.getLogger(StompLoadTest.class); + + protected String bindAddress = "stomp://localhost:61613"; + protected String confUri = "xbean:org/apache/activemq/transport/stomp/stomp-auth-broker.xml"; + protected String jmsUri = "vm://localhost"; + + private static final int TASK_COUNT = 100; + private static final int MSG_COUNT = 250; // AMQ-3819: Above 250 or so and the CPU goes bonkers with NOI+SSL. + + private BrokerService broker; + protected StompConnection stompConnection = new StompConnection(); + protected Connection connection; + protected Session session; + protected ActiveMQQueue queue; + + private ExecutorService executor; + private CountDownLatch started; + private CountDownLatch ready; + private AtomicInteger receiveCount; + + @Before + public void setUp() throws Exception { + + broker = BrokerFactory.createBroker(new URI(confUri)); + broker.setDeleteAllMessagesOnStartup(true); + broker.start(); + broker.waitUntilStarted(); + + stompConnect(); + + ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory(jmsUri); + connection = cf.createConnection("system", "manager"); + session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + queue = new ActiveMQQueue(getDestinationName()); + connection.start(); + + executor = Executors.newFixedThreadPool(TASK_COUNT, new ThreadFactory() { + + private long i = 0; + + public Thread newThread(Runnable runnable) { + this.i++; + final Thread t = new Thread(runnable, "Test Worker " + this.i); + return t; + } + }); + + started = new CountDownLatch(TASK_COUNT); + ready = new CountDownLatch(1); + receiveCount = new AtomicInteger(0); + } + + @After + public void tearDown() throws Exception { + try { + executor.shutdownNow(); + connection.close(); + stompDisconnect(); + } catch(Exception e) { + } finally { + broker.stop(); + broker.waitUntilStopped(); + } + } + + @Test(timeout=20*60*1000*1000) + public void testStompUnloadLoad() throws Exception { + + for (int i = 0; i < TASK_COUNT; ++i) { + executor.execute(new Runnable() { + + @Override + public void run() { + + LOG.debug("Receive Thread Connecting to Broker."); + + int numReceived = 0; + + StompConnection connection = new StompConnection(); + try { + stompConnect(connection); + } catch (Exception e) { + LOG.error("Caught Exception while connecting: " + e.getMessage()); + } + + try { + + for (int i = 0; i < 10; i++) { + connection.subscribe("/queue/test-" + i, "auto"); + connection.subscribe("/topic/test-" + i, "auto"); + } + + HashMap headers = new HashMap(); + headers.put("activemq.prefetchSize", "1"); + connection.subscribe("/topic/" + getDestinationName(), "auto", headers); + ready.await(); + + // Now that the main test thread is ready we wait a bit to let the tasks + // all subscribe and the CPU to settle a bit. + TimeUnit.SECONDS.sleep(3); + started.countDown(); + + while (true) { + // Read Timeout ends this task, we override the default here since there + // are so many threads running and we don't know how slow the test box is. + StompFrame frame = connection.receive(TimeUnit.SECONDS.toMillis(60)); + assertNotNull(frame); + numReceived++; + if (LOG.isDebugEnabled() && (numReceived % 50) == 0 || numReceived == MSG_COUNT) { + LOG.debug("Receiver thread got message: " + frame.getHeaders().get("message-id")); + } + receiveCount.incrementAndGet(); + } + + } catch (Exception e) { + if (numReceived != MSG_COUNT) { + LOG.warn("Receive task caught exception after receipt of ["+numReceived+ + "] messages: " + e.getMessage()); + } + } + } + }); + } + + ready.countDown(); + assertTrue("Timed out waiting for receivers to start.", started.await(5, TimeUnit.MINUTES)); + String frame; + + // Lets still wait a bit to make sure all subscribers get a fair shake at + // getting online before we send. Account for slow Hudson machines + TimeUnit.SECONDS.sleep(5); + + for( int ix = 0; ix < MSG_COUNT; ix++) { + frame = "SEND\n destination:/topic/" + getDestinationName() + + "\nid:" + ix + + "\ncontent-length:5" + " \n\n" + + "\u0001\u0002\u0000\u0004\u0005" + Stomp.NULL; + stompConnection.sendFrame(frame); + } + + LOG.info("All " + MSG_COUNT + " message have been sent, awaiting receipt."); + + assertTrue("Should get [" + TASK_COUNT * MSG_COUNT + "] message but was: " + receiveCount.get(), Wait.waitFor(new Wait.Condition() { + + @Override + public boolean isSatisified() throws Exception { + return receiveCount.get() == TASK_COUNT * MSG_COUNT; + } + }, TimeUnit.MINUTES.toMillis(10))); + + LOG.info("Test Completed and all messages received, shutting down."); + + executor.shutdown(); + executor.awaitTermination(2, TimeUnit.MINUTES); + frame = "DISCONNECT\n" + "\n\n" + Stomp.NULL; + stompConnection.sendFrame(frame); + LOG.info("Test Finished."); + } + + protected void stompConnect() throws Exception { + URI connectUri = new URI(bindAddress); + LOG.debug("Attempting connection to: " + bindAddress); + stompConnection.open(createSocket(connectUri)); + stompConnection.connect("system", "manager"); + } + + private void stompConnect(StompConnection connection) throws Exception { + URI connectUri = new URI(bindAddress); + LOG.debug("Attempting connection to: " + bindAddress); + connection.open(createSocket(connectUri)); + connection.connect("system", "manager"); + } + + protected Socket createSocket(URI connectUri) throws IOException { + return new Socket("127.0.0.1", connectUri.getPort()); + } + + protected String getDestinationName() { + return getClass().getName() + ".Tester"; + } + + protected void stompDisconnect() throws IOException { + if (stompConnection != null) { + stompConnection.close(); + stompConnection = null; + } + } +} diff --git a/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompNIOLoadTest.java b/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompNIOLoadTest.java new file mode 100644 index 0000000000..7ac0975715 --- /dev/null +++ b/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompNIOLoadTest.java @@ -0,0 +1,38 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.transport.stomp; + +import org.junit.After; +import org.junit.Before; + +public class StompNIOLoadTest extends StompLoadTest { + + @Before + @Override + public void setUp() throws Exception { + bindAddress = "stomp+nio://localhost:61612"; + confUri = "xbean:org/apache/activemq/transport/stomp/niostomp-auth-broker.xml"; + super.setUp(); + } + + @After + @Override + public void tearDown() throws Exception { + super.tearDown(); + } +} diff --git a/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompNIOSSLLoadTest.java b/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompNIOSSLLoadTest.java new file mode 100644 index 0000000000..d7555274cb --- /dev/null +++ b/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompNIOSSLLoadTest.java @@ -0,0 +1,57 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.transport.stomp; + +import java.io.IOException; +import java.net.Socket; +import java.net.URI; + +import javax.net.SocketFactory; +import javax.net.ssl.SSLSocketFactory; + +import org.junit.After; +import org.junit.Before; + +public class StompNIOSSLLoadTest extends StompLoadTest { + + @Before + @Override + public void setUp() throws Exception { + bindAddress = "stomp+nio+ssl://localhost:61613"; + confUri = "xbean:org/apache/activemq/transport/stomp/sslstomp-auth-broker.xml"; + System.setProperty("javax.net.ssl.trustStore", "src/test/resources/client.keystore"); + System.setProperty("javax.net.ssl.trustStorePassword", "password"); + System.setProperty("javax.net.ssl.trustStoreType", "jks"); + System.setProperty("javax.net.ssl.keyStore", "src/test/resources/server.keystore"); + System.setProperty("javax.net.ssl.keyStorePassword", "password"); + System.setProperty("javax.net.ssl.keyStoreType", "jks"); + super.setUp(); + } + + @After + @Override + public void tearDown() throws Exception { + super.tearDown(); + } + + @Override + protected Socket createSocket(URI connectUri) throws IOException { + SocketFactory factory = SSLSocketFactory.getDefault(); + return factory.createSocket("127.0.0.1", connectUri.getPort()); + } +} diff --git a/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompSSLLoadTest.java b/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompSSLLoadTest.java new file mode 100644 index 0000000000..f4f059b01c --- /dev/null +++ b/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompSSLLoadTest.java @@ -0,0 +1,57 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.transport.stomp; + +import java.io.IOException; +import java.net.Socket; +import java.net.URI; + +import javax.net.SocketFactory; +import javax.net.ssl.SSLSocketFactory; + +import org.junit.After; +import org.junit.Before; + +public class StompSSLLoadTest extends StompLoadTest { + + @Before + @Override + public void setUp() throws Exception { + bindAddress = "stomp+ssl://localhost:61612"; + confUri = "xbean:org/apache/activemq/transport/stomp/sslstomp-auth-broker.xml"; + System.setProperty("javax.net.ssl.trustStore", "src/test/resources/client.keystore"); + System.setProperty("javax.net.ssl.trustStorePassword", "password"); + System.setProperty("javax.net.ssl.trustStoreType", "jks"); + System.setProperty("javax.net.ssl.keyStore", "src/test/resources/server.keystore"); + System.setProperty("javax.net.ssl.keyStorePassword", "password"); + System.setProperty("javax.net.ssl.keyStoreType", "jks"); + super.setUp(); + } + + @After + @Override + public void tearDown() throws Exception { + super.tearDown(); + } + + @Override + protected Socket createSocket(URI connectUri) throws IOException { + SocketFactory factory = SSLSocketFactory.getDefault(); + return factory.createSocket("127.0.0.1", connectUri.getPort()); + } +} From e96eab52a1d8d33087b24b4ffd675bc050981987 Mon Sep 17 00:00:00 2001 From: Bosanac Dejan Date: Mon, 30 Apr 2012 14:56:09 +0000 Subject: [PATCH 5/9] https://issues.apache.org/jira/browse/AMQ-3819 - handle BUFFER_UNDERFLOW case git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1332230 13f79535-47bb-0310-9956-ffa450edef68 --- .../activemq/transport/nio/NIOSSLTransport.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/activemq-core/src/main/java/org/apache/activemq/transport/nio/NIOSSLTransport.java b/activemq-core/src/main/java/org/apache/activemq/transport/nio/NIOSSLTransport.java index 053403839a..b9baeb38b7 100644 --- a/activemq-core/src/main/java/org/apache/activemq/transport/nio/NIOSSLTransport.java +++ b/activemq-core/src/main/java/org/apache/activemq/transport/nio/NIOSSLTransport.java @@ -135,7 +135,11 @@ public class NIOSSLTransport extends NIOTransport { while(true) { if (!plain.hasRemaining()) { - plain.clear(); + if (status == SSLEngineResult.Status.OK && handshakeStatus != SSLEngineResult.HandshakeStatus.NEED_UNWRAP) { + plain.clear(); + } else { + plain.compact(); + } int readCount = secureRead(plain); @@ -150,7 +154,9 @@ public class NIOSSLTransport extends NIOTransport { } } - processCommand(plain); + if (status == SSLEngineResult.Status.OK && handshakeStatus != SSLEngineResult.HandshakeStatus.NEED_UNWRAP) { + processCommand(plain); + } } } catch (IOException e) { @@ -192,7 +198,7 @@ public class NIOSSLTransport extends NIOTransport { protected int secureRead(ByteBuffer plain) throws Exception { - if (!(inputBuffer.position() != 0 && inputBuffer.hasRemaining())) { + if (!(inputBuffer.position() != 0 && inputBuffer.hasRemaining()) || status == SSLEngineResult.Status.BUFFER_UNDERFLOW) { int bytesRead = channel.read(inputBuffer); if (bytesRead == -1) { From 956724e5cd4adf609950e1160bf997418a4561f4 Mon Sep 17 00:00:00 2001 From: "Timothy A. Bish" Date: Tue, 1 May 2012 20:54:13 +0000 Subject: [PATCH 6/9] fix for: https://issues.apache.org/jira/browse/AMQ-3823 Don't trim the whitespace from header values. Updates the tests to not add spaces in stomp headers. git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1332813 13f79535-47bb-0310-9956-ffa450edef68 --- .../transport/stomp/StompWireFormat.java | 16 ++- .../transport/SoWriteTimeoutTest.java | 5 +- .../activemq/transport/stomp/Stomp11Test.java | 119 ++++++++++------ .../activemq/transport/stomp/StompTest.java | 128 +++++++++--------- .../ThreeBrokerStompTemporaryQueueTest.java | 14 +- 5 files changed, 164 insertions(+), 118 deletions(-) diff --git a/activemq-core/src/main/java/org/apache/activemq/transport/stomp/StompWireFormat.java b/activemq-core/src/main/java/org/apache/activemq/transport/stomp/StompWireFormat.java index 282443eb96..d276f67388 100644 --- a/activemq-core/src/main/java/org/apache/activemq/transport/stomp/StompWireFormat.java +++ b/activemq-core/src/main/java/org/apache/activemq/transport/stomp/StompWireFormat.java @@ -16,15 +16,21 @@ */ package org.apache.activemq.transport.stomp; +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PushbackInputStream; +import java.util.HashMap; +import java.util.Map; + import org.apache.activemq.util.ByteArrayInputStream; import org.apache.activemq.util.ByteArrayOutputStream; import org.apache.activemq.util.ByteSequence; import org.apache.activemq.wireformat.WireFormat; -import java.io.*; -import java.util.HashMap; -import java.util.Map; - /** * Implements marshalling and unmarsalling the Stomp protocol. @@ -201,7 +207,7 @@ public class StompWireFormat implements WireFormat { ByteSequence nameSeq = stream.toByteSequence(); String name = new String(nameSeq.getData(), nameSeq.getOffset(), nameSeq.getLength(), "UTF-8").trim(); - String value = decodeHeader(headerLine).trim(); + String value = decodeHeader(headerLine); headers.put(name, value); } catch (Exception e) { throw new ProtocolException("Unable to parser header line [" + line + "]", true); diff --git a/activemq-core/src/test/java/org/apache/activemq/transport/SoWriteTimeoutTest.java b/activemq-core/src/test/java/org/apache/activemq/transport/SoWriteTimeoutTest.java index 28db485b9e..6f0565891e 100644 --- a/activemq-core/src/test/java/org/apache/activemq/transport/SoWriteTimeoutTest.java +++ b/activemq-core/src/test/java/org/apache/activemq/transport/SoWriteTimeoutTest.java @@ -20,12 +20,15 @@ import java.net.Socket; import java.net.SocketException; import java.net.URI; import java.util.concurrent.TimeUnit; + import javax.jms.Connection; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageConsumer; import javax.jms.Session; + import junit.framework.Test; + import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.JmsTestSupport; import org.apache.activemq.broker.BrokerService; @@ -110,7 +113,7 @@ public class SoWriteTimeoutTest extends JmsTestSupport { stompConnection.open(new Socket("localhost", proxy.getUrl().getPort())); stompConnection.getStompSocket().setTcpNoDelay(true); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); assertTrue(frame.startsWith("CONNECTED")); diff --git a/activemq-core/src/test/java/org/apache/activemq/transport/stomp/Stomp11Test.java b/activemq-core/src/test/java/org/apache/activemq/transport/stomp/Stomp11Test.java index 1ee49d3150..ef76f8a0e3 100644 --- a/activemq-core/src/test/java/org/apache/activemq/transport/stomp/Stomp11Test.java +++ b/activemq-core/src/test/java/org/apache/activemq/transport/stomp/Stomp11Test.java @@ -68,7 +68,6 @@ public class Stomp11Test extends CombinationTestSupport { session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); queue = new ActiveMQQueue(getQueueName()); connection.start(); - } private void stompConnect() throws IOException, URISyntaxException, UnknownHostException { @@ -106,11 +105,11 @@ public class Stomp11Test extends CombinationTestSupport { public void testConnect() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "host:localhost\n" + - "request-id: 1\n" + + "request-id:1\n" + "\n" + Stomp.NULL; stompConnection.sendFrame(connectFrame); @@ -129,8 +128,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testConnectWithVersionOptions() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.0,1.1\n" + "host:localhost\n" + "\n" + Stomp.NULL; @@ -150,8 +149,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testConnectWithValidFallback() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.0,10.1\n" + "host:localhost\n" + "\n" + Stomp.NULL; @@ -171,8 +170,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testConnectWithInvalidFallback() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:9.0,10.1\n" + "host:localhost\n" + "\n" + Stomp.NULL; @@ -189,8 +188,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testHeartbeats() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "heart-beat:0,1000\n" + "host:localhost\n" + @@ -231,8 +230,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testHeartbeatsDropsIdleConnection() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "heart-beat:1000,0\n" + "host:localhost\n" + @@ -261,8 +260,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testSendAfterMissingHeartbeat() throws Exception { - String connectFrame = "STOMP\n" + "login: system\n" + - "passcode: manager\n" + + String connectFrame = "STOMP\n" + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "heart-beat:1000,0\n" + "host:localhost\n" + @@ -290,8 +289,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testRejectInvalidHeartbeats1() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "heart-beat:0\n" + "host:localhost\n" + @@ -309,8 +308,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testRejectInvalidHeartbeats2() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "heart-beat:T,0\n" + "host:localhost\n" + @@ -328,8 +327,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testRejectInvalidHeartbeats3() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "heart-beat:100,10,50\n" + "host:localhost\n" + @@ -347,8 +346,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testSubscribeAndUnsubscribe() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "host:localhost\n" + "\n" + Stomp.NULL; @@ -392,8 +391,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testSubscribeWithNoId() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "host:localhost\n" + "\n" + Stomp.NULL; @@ -418,8 +417,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testUnsubscribeWithNoId() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "host:localhost\n" + "\n" + Stomp.NULL; @@ -449,8 +448,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testAckMessageWithId() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "host:localhost\n" + "\n" + Stomp.NULL; @@ -487,8 +486,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testAckMessageWithNoId() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "host:localhost\n" + "\n" + Stomp.NULL; @@ -530,8 +529,8 @@ public class Stomp11Test extends CombinationTestSupport { final int MSG_COUNT = 10; String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "host:localhost\n" + "\n" + Stomp.NULL; @@ -591,12 +590,11 @@ public class Stomp11Test extends CombinationTestSupport { stompConnection.sendFrame(frame); } - public void testSendMessageWithStandardHeadersEncoded() throws Exception { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n" + + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n" + "accept-version:1.1" + "\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); @@ -622,10 +620,9 @@ public class Stomp11Test extends CombinationTestSupport { assertEquals("GroupID", "abc", amqMessage.getGroupID()); } - public void testSubscribeWithMessageSentWithEncodedProperties() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n" + "accept-version:1.1" + "\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n" + "accept-version:1.1" + "\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -654,8 +651,8 @@ public class Stomp11Test extends CombinationTestSupport { public void testNackMessage() throws Exception { String connectFrame = "STOMP\n" + - "login: system\n" + - "passcode: manager\n" + + "login:system\n" + + "passcode:manager\n" + "accept-version:1.1\n" + "host:localhost\n" + "\n" + Stomp.NULL; @@ -702,9 +699,49 @@ public class Stomp11Test extends CombinationTestSupport { "id:12345\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); - frame = "DISCONNECT\n" + "\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); } + public void testHeaderValuesAreNotWSTrimmed() throws Exception { + + String connectFrame = "STOMP\n" + + "login:system\n" + + "passcode:manager\n" + + "accept-version:1.1\n" + + "host:localhost\n" + + "\n" + Stomp.NULL; + stompConnection.sendFrame(connectFrame); + + String f = stompConnection.receiveFrame(); + LOG.debug("Broker sent: " + f); + + assertTrue(f.startsWith("CONNECTED")); + + String message = "SEND\n" + "destination:/queue/" + getQueueName() + + "\ntest1: value" + + "\ntest2:value " + + "\ntest3: value " + + "\n\n" + "Hello World" + Stomp.NULL; + + stompConnection.sendFrame(message); + + String frame = "SUBSCRIBE\n" + "destination:/queue/" + getQueueName() + "\n" + + "id:12345\n" + "ack:auto\n\n" + Stomp.NULL; + stompConnection.sendFrame(frame); + + StompFrame received = stompConnection.receive(); + assertTrue(received.getAction().equals("MESSAGE")); + + assertEquals(" value", received.getHeaders().get("test1")); + assertEquals("value ", received.getHeaders().get("test2")); + assertEquals(" value ", received.getHeaders().get("test3")); + + frame = "UNSUBSCRIBE\n" + "destination:/queue/" + getQueueName() + "\n" + + "id:12345\n\n" + Stomp.NULL; + stompConnection.sendFrame(frame); + + frame = "DISCONNECT\n" + "\n\n" + Stomp.NULL; + stompConnection.sendFrame(frame); + } } diff --git a/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java b/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java index bc03c9a488..ff7c71bf5a 100644 --- a/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java +++ b/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java @@ -188,7 +188,7 @@ public class StompTest extends CombinationTestSupport { public void testConnect() throws Exception { - String connectFrame = "CONNECT\n" + "login: system\n" + "passcode: manager\n" + "request-id: 1\n" + "\n" + Stomp.NULL; + String connectFrame = "CONNECT\n" + "login:system\n" + "passcode:manager\n" + "request-id:1\n" + "\n" + Stomp.NULL; stompConnection.sendFrame(connectFrame); String f = stompConnection.receiveFrame(); @@ -201,7 +201,7 @@ public class StompTest extends CombinationTestSupport { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -226,13 +226,13 @@ public class StompTest extends CombinationTestSupport { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); assertTrue(frame.startsWith("CONNECTED")); - frame = "SEND\n" + "destination:/queue/" + getQueueName() + "\n" + "JMSXGroupID: TEST\n\n" + "Hello World" + Stomp.NULL; + frame = "SEND\n" + "destination:/queue/" + getQueueName() + "\n" + "JMSXGroupID:TEST\n\n" + "Hello World" + Stomp.NULL; stompConnection.sendFrame(frame); @@ -245,7 +245,7 @@ public class StompTest extends CombinationTestSupport { MessageConsumer consumer = session.createConsumer(queue, "foo = 'abc'"); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -266,7 +266,7 @@ public class StompTest extends CombinationTestSupport { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -286,7 +286,7 @@ public class StompTest extends CombinationTestSupport { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -315,7 +315,7 @@ public class StompTest extends CombinationTestSupport { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -337,7 +337,7 @@ public class StompTest extends CombinationTestSupport { StompConnection receiver = new StompConnection(); URI connectUri = new URI(bindAddress); receiver.open(createSocket(connectUri)); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; receiver.sendFrame(frame); frame = receiver.receiveFrame(); @@ -346,7 +346,7 @@ public class StompTest extends CombinationTestSupport { frame = "SUBSCRIBE\n" + "destination:/queue/" + getQueueName() + "\n" + "ack:auto\n\n" + Stomp.NULL; receiver.sendFrame(frame); - frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -395,7 +395,7 @@ public class StompTest extends CombinationTestSupport { StompConnection sender = new StompConnection(); sender.open(createSocket(connectUri)); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; sender.sendFrame(frame); frame = sender.receiveFrame(); @@ -411,7 +411,7 @@ public class StompTest extends CombinationTestSupport { StompConnection receiver = new StompConnection(); receiver.open(createSocket(connectUri)); - frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; receiver.sendFrame(frame); frame = receiver.receiveFrame(); @@ -439,7 +439,7 @@ public class StompTest extends CombinationTestSupport { public void testSubscribeWithAutoAck() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -459,7 +459,7 @@ public class StompTest extends CombinationTestSupport { public void testSubscribeWithAutoAckAndBytesMessage() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -488,7 +488,7 @@ public class StompTest extends CombinationTestSupport { public void testBytesMessageWithNulls() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -516,7 +516,7 @@ public class StompTest extends CombinationTestSupport { final int MSG_COUNT = 50; - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -546,7 +546,7 @@ public class StompTest extends CombinationTestSupport { public void testSubscribeWithMessageSentWithProperties() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -579,7 +579,7 @@ public class StompTest extends CombinationTestSupport { int ctr = 10; String[] data = new String[ctr]; - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -617,7 +617,7 @@ public class StompTest extends CombinationTestSupport { public void testSubscribeWithAutoAckAndSelector() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -639,7 +639,7 @@ public class StompTest extends CombinationTestSupport { public void testSubscribeWithAutoAckAndNumericSelector() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -666,7 +666,7 @@ public class StompTest extends CombinationTestSupport { public void testSubscribeWithAutoAckAndBooleanSelector() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -693,7 +693,7 @@ public class StompTest extends CombinationTestSupport { public void testSubscribeWithAutoAckAnFloatSelector() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -720,7 +720,7 @@ public class StompTest extends CombinationTestSupport { public void testSubscribeWithClientAck() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -744,7 +744,7 @@ public class StompTest extends CombinationTestSupport { public void testSubscribeWithClientAckedAndContentLength() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -788,7 +788,7 @@ public class StompTest extends CombinationTestSupport { public void testUnsubscribe() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); assertTrue(frame.startsWith("CONNECTED")); @@ -824,7 +824,7 @@ public class StompTest extends CombinationTestSupport { public void testTransactionCommit() throws Exception { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); String f = stompConnection.receiveFrame(); @@ -846,7 +846,7 @@ public class StompTest extends CombinationTestSupport { public void testTransactionRollback() throws Exception { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); String f = stompConnection.receiveFrame(); @@ -879,7 +879,7 @@ public class StompTest extends CombinationTestSupport { public void testDisconnectedClientsAreRemovedFromTheBroker() throws Exception { assertClients(1); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); @@ -892,7 +892,7 @@ public class StompTest extends CombinationTestSupport { } public void testConnectNotAuthenticatedWrongUser() throws Exception { - String frame = "CONNECT\n" + "login: dejanb\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login: dejanb\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); String f = stompConnection.receiveFrame(); @@ -903,7 +903,7 @@ public class StompTest extends CombinationTestSupport { public void testConnectNotAuthenticatedWrongPassword() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: dejanb\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode: dejanb\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); String f = stompConnection.receiveFrame(); @@ -914,7 +914,7 @@ public class StompTest extends CombinationTestSupport { public void testSendNotAuthorized() throws Exception { - String frame = "CONNECT\n" + "login: guest\n" + "passcode: password\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:guest\n" + "passcode:password\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -929,7 +929,7 @@ public class StompTest extends CombinationTestSupport { public void testSubscribeNotAuthorized() throws Exception { - String frame = "CONNECT\n" + "login: guest\n" + "passcode: password\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:guest\n" + "passcode:password\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -946,7 +946,7 @@ public class StompTest extends CombinationTestSupport { public void testTransformationUnknownTranslator() throws Exception { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -964,7 +964,7 @@ public class StompTest extends CombinationTestSupport { public void testTransformationFailed() throws Exception { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -983,7 +983,7 @@ public class StompTest extends CombinationTestSupport { public void testTransformationSendXMLObject() throws Exception { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1002,7 +1002,7 @@ public class StompTest extends CombinationTestSupport { public void testTransformationSendJSONObject() throws Exception { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1024,7 +1024,7 @@ public class StompTest extends CombinationTestSupport { ObjectMessage message = session.createObjectMessage(new SamplePojo("Dejan", "Belgrade")); producer.send(message); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1046,7 +1046,7 @@ public class StompTest extends CombinationTestSupport { ObjectMessage message = session.createObjectMessage(new SamplePojo("Dejan", "Belgrade")); producer.send(message); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1069,7 +1069,7 @@ public class StompTest extends CombinationTestSupport { ObjectMessage message = session.createObjectMessage(new SamplePojo("Dejan", "Belgrade")); producer.send(message); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1092,7 +1092,7 @@ public class StompTest extends CombinationTestSupport { ObjectMessage message = session.createObjectMessage(new SamplePojo("Dejan", "Belgrade")); producer.send(message); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1119,7 +1119,7 @@ public class StompTest extends CombinationTestSupport { mapMessage.setString("city", "Belgrade"); producer.send(mapMessage); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1150,7 +1150,7 @@ public class StompTest extends CombinationTestSupport { mapMessage.setString("city", "Belgrade"); producer.send(mapMessage); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1173,7 +1173,7 @@ public class StompTest extends CombinationTestSupport { public void testTransformationSendAndReceiveXmlMap() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1195,7 +1195,7 @@ public class StompTest extends CombinationTestSupport { public void testTransformationSendAndReceiveJsonMap() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1222,7 +1222,7 @@ public class StompTest extends CombinationTestSupport { message.writeBytes(new byte[]{1, 2, 3, 4, 5}); producer.send(message); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1251,7 +1251,7 @@ public class StompTest extends CombinationTestSupport { message.setStringProperty("transformation", Stomp.Transformations.JMS_OBJECT_XML.toString()); producer.send(message); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1274,7 +1274,7 @@ public class StompTest extends CombinationTestSupport { message.setStringProperty("transformation", Stomp.Transformations.JMS_OBJECT_XML.toString()); producer.send(message); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1294,7 +1294,7 @@ public class StompTest extends CombinationTestSupport { public void testTransformationSendXMLMap() throws Exception { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1312,7 +1312,7 @@ public class StompTest extends CombinationTestSupport { public void testTransformationSendJSONMap() throws Exception { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1335,7 +1335,7 @@ public class StompTest extends CombinationTestSupport { message.setString("city", "Belgrade"); producer.send(message); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1360,7 +1360,7 @@ public class StompTest extends CombinationTestSupport { message.setString("city", "Belgrade"); producer.send(message); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1386,7 +1386,7 @@ public class StompTest extends CombinationTestSupport { BrokerViewMBean view = (BrokerViewMBean)broker.getManagementContext().newProxyInstance(brokerName, BrokerViewMBean.class, true); // connect - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\nclient-id:test\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\nclient-id:test\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1412,7 +1412,7 @@ public class StompTest extends CombinationTestSupport { //reconnect stompConnect(); // connect - frame = "CONNECT\n" + "login: system\n" + "passcode: manager\nclient-id:test\n\n" + Stomp.NULL; + frame = "CONNECT\n" + "login:system\n" + "passcode:manager\nclient-id:test\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); assertTrue(frame.startsWith("CONNECTED")); @@ -1530,7 +1530,7 @@ public class StompTest extends CombinationTestSupport { public void testTempDestination() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1550,7 +1550,7 @@ public class StompTest extends CombinationTestSupport { MessageConsumer consumer = session.createConsumer(queue); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1567,7 +1567,7 @@ public class StompTest extends CombinationTestSupport { public void testJMSXUserIDIsSetInStompMessage() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1672,7 +1672,7 @@ public class StompTest extends CombinationTestSupport { public void testReceiptNewQueue() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1707,7 +1707,7 @@ public class StompTest extends CombinationTestSupport { } public void testTransactedClientAckBrokerStats() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1748,7 +1748,7 @@ public class StompTest extends CombinationTestSupport { public void testReplytoModification() throws Exception { String replyto = "some destination"; - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1769,7 +1769,7 @@ public class StompTest extends CombinationTestSupport { public void testReplyToDestinationNaming() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1780,7 +1780,7 @@ public class StompTest extends CombinationTestSupport { } public void testSendNullBodyTextMessage() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1841,7 +1841,7 @@ public class StompTest extends CombinationTestSupport { public void testReplyToAcrossConnections() throws Exception { - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); @@ -1856,7 +1856,7 @@ public class StompTest extends CombinationTestSupport { StompConnection responder = new StompConnection(); stompConnect(responder); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; responder.sendFrame(frame); frame = responder.receiveFrame(); @@ -1950,7 +1950,7 @@ public class StompTest extends CombinationTestSupport { private void doTestConnectionLeak() throws Exception { stompConnect(); - String frame = "CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL; + String frame = "CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL; stompConnection.sendFrame(frame); frame = stompConnection.receiveFrame(); diff --git a/activemq-core/src/test/java/org/apache/activemq/usecases/ThreeBrokerStompTemporaryQueueTest.java b/activemq-core/src/test/java/org/apache/activemq/usecases/ThreeBrokerStompTemporaryQueueTest.java index 89a76f3e62..cd8d651d6f 100644 --- a/activemq-core/src/test/java/org/apache/activemq/usecases/ThreeBrokerStompTemporaryQueueTest.java +++ b/activemq-core/src/test/java/org/apache/activemq/usecases/ThreeBrokerStompTemporaryQueueTest.java @@ -70,7 +70,7 @@ public class ThreeBrokerStompTemporaryQueueTest extends JmsMultipleBrokersTestSu stompConnection = new StompConnection(); stompConnection.open("localhost", 61614); // Creating a temp queue - stompConnection.sendFrame("CONNECT\n" + "login: system\n" + "passcode: manager\n\n" + Stomp.NULL); + stompConnection.sendFrame("CONNECT\n" + "login:system\n" + "passcode:manager\n\n" + Stomp.NULL); StompFrame frame = stompConnection.receive(); assertTrue(frame.toString().startsWith("CONNECTED")); @@ -98,29 +98,29 @@ public class ThreeBrokerStompTemporaryQueueTest extends JmsMultipleBrokersTestSu assertEquals("Advisory topic should be present", 1, advisoryTopicsForTempQueues); stompConnection.disconnect(); - + Thread.sleep(1000); - + advisoryTopicsForTempQueues = countTopicsByName("BrokerA", "ActiveMQ.Advisory.Consumer.Queue.ID"); assertEquals("Advisory topic should have been deleted", 0, advisoryTopicsForTempQueues); advisoryTopicsForTempQueues = countTopicsByName("BrokerB", "ActiveMQ.Advisory.Consumer.Queue.ID"); assertEquals("Advisory topic should have been deleted", 0, advisoryTopicsForTempQueues); advisoryTopicsForTempQueues = countTopicsByName("BrokerC", "ActiveMQ.Advisory.Consumer.Queue.ID"); - assertEquals("Advisory topic should have been deleted", 0, advisoryTopicsForTempQueues); - + assertEquals("Advisory topic should have been deleted", 0, advisoryTopicsForTempQueues); + LOG.info("Restarting brokerA"); BrokerItem brokerItem = brokers.remove("BrokerA"); if (brokerItem != null) { brokerItem.destroy(); } - + BrokerService restartedBroker = createAndConfigureBroker(new URI("broker:(tcp://localhost:61616,stomp://localhost:61613)/BrokerA")); bridgeAndConfigureBrokers("BrokerA", "BrokerB"); bridgeAndConfigureBrokers("BrokerA", "BrokerC"); restartedBroker.start(); waitForBridgeFormation(); - + Thread.sleep(3000); assertEquals("Destination", 0, brokers.get("BrokerA").broker.getAdminView().getTemporaryQueues().length); From 937c1e8cbc3dc95fdc35e17bc6e50b0e20b48c59 Mon Sep 17 00:00:00 2001 From: "Timothy A. Bish" Date: Tue, 1 May 2012 23:14:02 +0000 Subject: [PATCH 7/9] fix for: https://issues.apache.org/jira/browse/AMQ-3824 Adds a 64 bit Java service wrapper. git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1332880 13f79535-47bb-0310-9956-ffa450edef68 --- assembly/src/main/descriptors/windows-bin.xml | 20 ++- .../src/release/bin/win64/InstallService.bat | 52 +++++++ .../release/bin/win64/UninstallService.bat | 48 ++++++ assembly/src/release/bin/win64/activemq.bat | 50 ++++++ assembly/src/release/bin/win64/wrapper.conf | 143 ++++++++++++++++++ assembly/src/release/bin/win64/wrapper.dll | Bin 0 -> 76800 bytes assembly/src/release/bin/win64/wrapper.exe | Bin 0 -> 220672 bytes 7 files changed, 305 insertions(+), 8 deletions(-) create mode 100644 assembly/src/release/bin/win64/InstallService.bat create mode 100644 assembly/src/release/bin/win64/UninstallService.bat create mode 100644 assembly/src/release/bin/win64/activemq.bat create mode 100644 assembly/src/release/bin/win64/wrapper.conf create mode 100644 assembly/src/release/bin/win64/wrapper.dll create mode 100644 assembly/src/release/bin/win64/wrapper.exe diff --git a/assembly/src/main/descriptors/windows-bin.xml b/assembly/src/main/descriptors/windows-bin.xml index d8331ab622..6c7e7f1ea4 100644 --- a/assembly/src/main/descriptors/windows-bin.xml +++ b/assembly/src/main/descriptors/windows-bin.xml @@ -6,9 +6,9 @@ The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -34,20 +34,22 @@ dos - + src/release / bin/*.bat - bin/activemq - bin/activemq-admin + bin/activemq + bin/activemq-admin bin/win32/*.bat bin/win32/*.conf + bin/win64/*.bat + bin/win64/*.conf dos - + src/release @@ -55,13 +57,15 @@ bin/win32/*.exe bin/win32/*.dll + bin/win64/*.exe + bin/win64/*.dll - + src/main/descriptors/common-bin.xml - + diff --git a/assembly/src/release/bin/win64/InstallService.bat b/assembly/src/release/bin/win64/InstallService.bat new file mode 100644 index 0000000000..6b27259488 --- /dev/null +++ b/assembly/src/release/bin/win64/InstallService.bat @@ -0,0 +1,52 @@ +@echo off + +REM ------------------------------------------------------------------------ +REM Licensed to the Apache Software Foundation (ASF) under one or more +REM contributor license agreements. See the NOTICE file distributed with +REM this work for additional information regarding copyright ownership. +REM The ASF licenses this file to You under the Apache License, Version 2.0 +REM (the "License"); you may not use this file except in compliance with +REM the License. You may obtain a copy of the License at +REM +REM http://www.apache.org/licenses/LICENSE-2.0 +REM +REM Unless required by applicable law or agreed to in writing, software +REM distributed under the License is distributed on an "AS IS" BASIS, +REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +REM See the License for the specific language governing permissions and +REM limitations under the License. +REM ------------------------------------------------------------------------ + +setlocal + +rem Java Service Wrapper general NT service install script + + +if "%OS%"=="Windows_NT" goto nt +echo This script only works with NT-based versions of Windows. +goto :eof + +:nt +rem +rem Find the application home. +rem +rem %~dp0 is location of current script under NT +set _REALPATH=%~dp0 + +set ACTIVEMQ_HOME=%~dp0..\.. +set ACTIVEMQ_BASE=%~dp0..\.. + +:conf +set _WRAPPER_CONF="%ACTIVEMQ_HOME%\bin\win64\wrapper.conf" + +set _ACTIVEMQ_HOME="set.ACTIVEMQ_HOME=%ACTIVEMQ_HOME%" +set _ACTIVEMQ_BASE="set.ACTIVEMQ_BASE=%ACTIVEMQ_BASE%" + +rem +rem Install the Wrapper as an NT service. +rem +:startup +"wrapper.exe" -i %_WRAPPER_CONF% %_ACTIVEMQ_HOME% %_ACTIVEMQ_BASE% +if not errorlevel 1 goto :eof +pause + diff --git a/assembly/src/release/bin/win64/UninstallService.bat b/assembly/src/release/bin/win64/UninstallService.bat new file mode 100644 index 0000000000..72b2034d14 --- /dev/null +++ b/assembly/src/release/bin/win64/UninstallService.bat @@ -0,0 +1,48 @@ +@echo off + +REM ------------------------------------------------------------------------ +REM Licensed to the Apache Software Foundation (ASF) under one or more +REM contributor license agreements. See the NOTICE file distributed with +REM this work for additional information regarding copyright ownership. +REM The ASF licenses this file to You under the Apache License, Version 2.0 +REM (the "License"); you may not use this file except in compliance with +REM the License. You may obtain a copy of the License at +REM +REM http://www.apache.org/licenses/LICENSE-2.0 +REM +REM Unless required by applicable law or agreed to in writing, software +REM distributed under the License is distributed on an "AS IS" BASIS, +REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +REM See the License for the specific language governing permissions and +REM limitations under the License. +REM ------------------------------------------------------------------------ + +setlocal + +rem Java Service Wrapper general NT service uninstall script + +if "%OS%"=="Windows_NT" goto nt +echo This script only works with NT-based versions of Windows. +goto :eof + +:nt +rem +rem Find the application home. +rem +rem %~dp0 is location of current script under NT +set _REALPATH=%~dp0 + +set ACTIVEMQ_HOME=%~dp0\..\.. + +:conf +set _WRAPPER_CONF="%ACTIVEMQ_HOME%\bin\win64\wrapper.conf" + + +rem +rem Uninstall the Wrapper as an NT service. +rem +:startup +"%_APP_HOME%wrapper.exe" -r %_WRAPPER_CONF% +if not errorlevel 1 goto :eof +pause + diff --git a/assembly/src/release/bin/win64/activemq.bat b/assembly/src/release/bin/win64/activemq.bat new file mode 100644 index 0000000000..c49922f257 --- /dev/null +++ b/assembly/src/release/bin/win64/activemq.bat @@ -0,0 +1,50 @@ +@echo off + +REM ------------------------------------------------------------------------ +REM Licensed to the Apache Software Foundation (ASF) under one or more +REM contributor license agreements. See the NOTICE file distributed with +REM this work for additional information regarding copyright ownership. +REM The ASF licenses this file to You under the Apache License, Version 2.0 +REM (the "License"); you may not use this file except in compliance with +REM the License. You may obtain a copy of the License at +REM +REM http://www.apache.org/licenses/LICENSE-2.0 +REM +REM Unless required by applicable law or agreed to in writing, software +REM distributed under the License is distributed on an "AS IS" BASIS, +REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +REM See the License for the specific language governing permissions and +REM limitations under the License. +REM ------------------------------------------------------------------------ + +rem +rem Find the application home. +rem +if "%OS%"=="Windows_NT" goto nt + +echo This is not NT, so please edit this script and set _APP_HOME manually +set _APP_HOME=.. + +goto conf + +:nt +rem %~dp0 is name of current script under NT +set _APP_HOME=%~dp0 + +rem +rem Find the wrapper.conf +rem +:conf +set _WRAPPER_CONF=wrapper.conf + +rem +rem Run the application. +rem At runtime, the current directory will be that of Wrapper.exe +rem +"%_APP_HOME%wrapper.exe" -c %_WRAPPER_CONF% +if not errorlevel 1 goto end +pause + +:end +set _APP_HOME= +set _WRAPPER_CONF= diff --git a/assembly/src/release/bin/win64/wrapper.conf b/assembly/src/release/bin/win64/wrapper.conf new file mode 100644 index 0000000000..c4b612536b --- /dev/null +++ b/assembly/src/release/bin/win64/wrapper.conf @@ -0,0 +1,143 @@ +# ------------------------------------------------------------------------ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------ + +#******************************************************************** +# Wrapper Properties +#******************************************************************** + +# wrapper.debug=TRUE +set.default.ACTIVEMQ_HOME=../.. +set.default.ACTIVEMQ_BASE=../.. +set.default.ACTIVEMQ_CONF=%ACTIVEMQ_BASE%/conf +set.default.ACTIVEMQ_DATA=%ACTIVEMQ_BASE%/data +wrapper.working.dir=. + +# Java Application +wrapper.java.command=java + +# Java Main class. This class must implement the WrapperListener interface +# or guarantee that the WrapperManager class is initialized. Helper +# classes are provided to do this for you. See the Integration section +# of the documentation for details. +wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp + +# Java Classpath (include wrapper.jar) Add class path elements as +# needed starting from 1 +wrapper.java.classpath.1=%ACTIVEMQ_HOME%/bin/wrapper.jar +wrapper.java.classpath.2=%ACTIVEMQ_HOME%/bin/run.jar + +# Java Library Path (location of Wrapper.DLL or libwrapper.so) +wrapper.java.library.path.1=%ACTIVEMQ_HOME%/bin/win64 + +# Java Additional Parameters +# note that n is the parameter number starting from 1. +wrapper.java.additional.1=-Dactivemq.home="%ACTIVEMQ_HOME%" +wrapper.java.additional.2=-Dactivemq.base="%ACTIVEMQ_BASE%" +wrapper.java.additional.3=-Djavax.net.ssl.keyStorePassword=password +wrapper.java.additional.4=-Djavax.net.ssl.trustStorePassword=password +wrapper.java.additional.5=-Djavax.net.ssl.keyStore=%ACTIVEMQ_CONF%/broker.ks +wrapper.java.additional.6=-Djavax.net.ssl.trustStore=%ACTIVEMQ_CONF%/broker.ts +wrapper.java.additional.7=-Dcom.sun.management.jmxremote +wrapper.java.additional.8=-Dorg.apache.activemq.UseDedicatedTaskRunner=true +wrapper.java.additional.9=-Djava.util.logging.config.file=logging.properties +wrapper.java.additional.10=-Dactivemq.conf="%ACTIVEMQ_CONF%" +wrapper.java.additional.11=-Dactivemq.data="%ACTIVEMQ_DATA%" + +# Uncomment to enable remote jmx +#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.port=1616 +#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.authenticate=false +#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.ssl=false + +# Uncomment to enable YourKit profiling +#wrapper.java.additional.n=-Xrunyjpagent + +# Uncomment to enable remote debugging +#wrapper.java.additional.n=-Xdebug -Xnoagent -Djava.compiler=NONE +#wrapper.java.additional.n=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 + +# Initial Java Heap Size (in MB) +#wrapper.java.initmemory=3 + +# Maximum Java Heap Size (in MB) +wrapper.java.maxmemory=1024 + +# Application parameters. Add parameters as needed starting from 1 +wrapper.app.parameter.1=org.apache.activemq.console.Main +wrapper.app.parameter.2=start + +#******************************************************************** +# Wrapper Logging Properties +#******************************************************************** +# Format of output for the console. (See docs for formats) +wrapper.console.format=PM + +# Log Level for console output. (See docs for log levels) +wrapper.console.loglevel=INFO + +# Log file to use for wrapper output logging. +wrapper.logfile=%ACTIVEMQ_DATA%/wrapper.log + +# Format of output for the log file. (See docs for formats) +wrapper.logfile.format=LPTM + +# Log Level for log file output. (See docs for log levels) +wrapper.logfile.loglevel=INFO + +# Maximum size that the log file will be allowed to grow to before +# the log is rolled. Size is specified in bytes. The default value +# of 0, disables log rolling. May abbreviate with the 'k' (kb) or +# 'm' (mb) suffix. For example: 10m = 10 megabytes. +wrapper.logfile.maxsize=0 + +# Maximum number of rolled log files which will be allowed before old +# files are deleted. The default value of 0 implies no limit. +wrapper.logfile.maxfiles=0 + +# Log Level for sys/event log output. (See docs for log levels) +wrapper.syslog.loglevel=NONE + +#******************************************************************** +# Wrapper Windows Properties +#******************************************************************** +# Title to use when running as a console +wrapper.console.title=ActiveMQ + +#******************************************************************** +# Wrapper Windows NT/2000/XP Service Properties +#******************************************************************** +# WARNING - Do not modify any of these properties when an application +# using this configuration file has been installed as a service. +# Please uninstall the service before modifying this section. The +# service can then be reinstalled. + +# Name of the service +wrapper.ntservice.name=ActiveMQ + +# Display name of the service +wrapper.ntservice.displayname=ActiveMQ + +# Description of the service +wrapper.ntservice.description=ActiveMQ Broker + +# Service dependencies. Add dependencies as needed starting from 1 +wrapper.ntservice.dependency.1= + +# Mode in which the service is installed. AUTO_START or DEMAND_START +wrapper.ntservice.starttype=AUTO_START + +# Allow the service to interact with the desktop. +wrapper.ntservice.interactive=false diff --git a/assembly/src/release/bin/win64/wrapper.dll b/assembly/src/release/bin/win64/wrapper.dll new file mode 100644 index 0000000000000000000000000000000000000000..f07fc9e582b95dc8016fc8ebcd25eb7f326fbc88 GIT binary patch literal 76800 zcmeFadwf*Y)$l*bWXKQ_CMW|zKt>%jC8E((O&F+i$VAV`L{UL$#flA5tY{Ht6e^d* zNi@T8Dy_EF*0%Jn^{KsC4WO71APJxZyrDdA1+Qlu)Odq{$a%kOpP3|}K2JaI@86#v znX|8Juf6u#Yp=cb+B>!1TJ3N;9F9ExS(d}m!dLzas^9@4{*8-$3m1L=yNj;B*;jY{Ew_9>>if}!_i{^BdRy*z_3g=>s=f!* z_lg_q<_oN^!hCv-!!h?Rmt*52zmH_g^f*rS4aqHVI5v{@;31$>KDxIRZd5(cVE ze)uo@b*v^=h{u1qjvx`cQug!3xScX*Y>vZ#@C#4KaZIyiLSR7J ze-hm5aFolye#L)hMQ>OVC2v9-KZ3IKJ<|_D>OY^uG3TsBbFYtH?{K7pB<*JloM?J|Ns6!P#}1v9^W6V*rO+A`=?vpPrDrs36_V9Ry`T=Pp_%ys@S#GagM`5 zYN?(G`F)o6Whs>$>j>vKnp&e;ymjali*Z_cfo?S)>ae^Ikra`* zp7iR^I~*Z{>}_UvG^~}s#r3$((5l*cQ&)75vk99cA*Aw8i%^Yc2R(#4FRcaVz&Y+CB zLJG7|phd8^;nCm30>AGnZH6|JaV)3zwZ>lEcvm+*w5FFw3{!7v^)&ulDj0(z$)X2= z6iK>P@d+C*>c(@CMASdWS}ij*V)Ure4^cW|4ASFW7I+I^=!s?iSz+VIM~~?T!TEBF zikh{$9`Z(v5mHb$c2~5j5;fE@o~K+SG1u>lB*S*$AJ-4EaWJ;k8e8nPt<`%KV&4Fq zZgg8$&({qa(hZtqR7TSCKkRfkYK=|0@uIn6jP$=*ngnItSm2)z5z4h|wb|cpr|8uF zqE}M%*aE3$DhdPWi5dRlE3eY7hFo*P#%|sCC}JG4ytAKm2u}?L3P zOE+NY5cwoUjJ=jONZ9j4W#TFS1K^)5T$wCP(xRhk$l~FNA!~m?(DMF{LKUqkSrK6Q zpMacZ51dW&pyhpVhm3rW=6NE|-`E}` za`M{txt*^-G3Rc}dliiUy#naWH`qvbJ_mjPPTdU_3W$r}W&S*VqkgAu+~bE5%<=#7 z*V`o)_;YJKPt5h_L|`R7djE_0SYvG0op${iV>66XD$Hkj zyPtz=ZDQ!g;|hL+;n8)&ZY1RFso2wGMJIa3IgIC_qUCkbfX1jNy%z&GWH=P!cLT_3 zr+DDCMK8%P2QwstDv9YPxZk~dy(;GGky8Qx0=2ywp^g`A+ zdU4N5eZ7#?Q8x|=%6i2vy`v2gTVJuq@;-oUVSf0`3lCcsoG;_e{4r<5=d5`y&K(?vqs>1Op&aF_W9j+XaDa)oykCa^JNQ{9Jb z?)2%Rd?6A{1rN{F~d^*SePyn>MX5!{5x`++c(5^#d-EG6Pj zhLo&qiZ*(JW@RcQFV9uNYn#r@UQJ3QGfAW#Y(5Mekx$bh#S`EZGIp#JT~J4CQeciv zXk!b@TBgEYq`ipW+bLFIg^UlXzTvqmP9&1}y**13QU8(%lWd{PM^U{a$$9R1@}Fm1 zBTC5j}qSh!`i^;KGJ=EUf!vDH5iUCdrK$!|YY5 zr=nFse2MaiD9ILj`=kN2H0{tVwKPSHaW-t-_^iKd-*QJW)kee^sT(t(hrQCX<+ z#aHyD&qu(h*5+`0Q*kJ8mgmm@^SMQ5VIYx~OCpBNS0Z?Yo6@7qF$a{0s71_)h^X=+ zB9=8s+i0E=W~v`|NQUQI&zHf&nM=NR2fgl?#r`F17xhR7@_5i$0KjE(4smNm{H z(&Z)Wg->wGc+Wwo-r zKcN=g6frajtW`zoh=L>4nTxf?W?@L!@WxCF8<}ZgqZR}j{kwr80?(f6iHB5z`N2UZ z(>-?h4Jb3PG}Ow>?D=K~<)oci@VOGBSeyhEGp1UT`Vp2kegMmYBhgUA=#Yq-p(0o8Ui|`aB1}3Jm!P*j?yna}>kkQT z-a@2xnDv>$3&Td9Uul1~KKDavND{K}B}5pK(O}Aljh86jFBq4o0s9VRYbl$Z3r9sT zwbD-Ce4|oE^{W-RqUHgUS3hR*>IgQUOfXeCqx;!JuQkT>L6@0kE0n67nqmD=nY(H- z+7nm`ikLYb>N5YFevn@RPo^s+vZ%7)95-c^u6i7*=nINsOxPuAV3@6-2+amg*uBt2 zrkc=)rL6ube>WjV^u!3mJw0Ny+B7z2$q+HWWaMRT&yOG+>s91Av+P7k++m)kz7hW% zbCe3%oXQOT)<Dey??%0OnEA+-{&`Qy=zs5z?2RYNc; zTciE3vRNm{{L!wojRYj6<^8BlRSNW1D$Z8AS}L6-m2R~wou94rv|VXvf2BSCOiLT- zxp~OL&t$vOgNhWi)NEJUN68F&f6P{zD3vxzrF^^6CrC$y-j#Nx$NMYYnys{iGUmNf zY1bW;7LxQSJV@Q$xdOuVo#H-Cv6U3``__bOA~0$iTccM%n!%9I)CG(oV3PK_qqShC zV%uwZA88ed5*td<$AlnbDViRhEk|m-q~;5NOB8^J(&v2l!?~7sv8o*%AD_~4S`JJ< zF$5o;8DhqiGUJfwMW;yh&Y=J;B(_H=fvwPCe$EETe3ON%Vwa$CE`Z4YU5{n00}!Bn zq*&flRl4^Y_?qndzs~;L^=+Cmy_m;jt(RWwD2QEP2zLuv+PCZ0_|!84cKvMgO5;;ubgWAGl=Iie(hW}WNa<^#}QFhUMw;XO%&xqn?b8S_TpiqJIo5jUVQZ|QBdl3vu5daTg}@*IbsY|l1=TxjlG)n zqgKj940fJaF<5+h&2g~k)Gc|Zkvc+KOaBOT=!VolZE*||Tf(GMh58Iz(Ia3QHeN7i z3Z@S%mB@C>`_Bz3Ae(B;0}I#z$i7N8+PZL-HaqnQbm*J4sz0(h_Q6mHOSZ-j0)cHI zO8E{!OW;uPy3~iPiu8Yh^crzLU=!0()W@2l#aCFs>d}pqUNziKx|yS?Ne#Hb@rohtyWV>XzL}P<9#Rsw_q&w#64_E2v!% zB^E%QD=?>+haOR@Xj3z^l&Xx0Tst%NhUMMy zG)ygWx770PfnPu_S_Rk3?iv06S@R{)x{ThmA3FeLhwty1}MsVwzIQcO2&lITW9dUVwk*>x%b zxgKrEoGQheC@xEC|JLf>LO3e-k{3B81`6oKPx<#!UdEuFOkp_56FrnX+3cC1t~9c}ijU{2f=(2&^C*Ktc34f) z7i2JxF~!ZZ3&L7K)Z=R}V@wxV$$)^U8SFrw&mq zqqOP9O!7~Z{D|zn4@=*t!xplMQQNQZfXxfFGRoU>S{(glP%~SvndBb_b=Lm|)ut=X%!Q(Y`RD`EEo(CjgfdpdZ4q`AKU)Y%utvl; zmj{F@cYca>Azj8G+@qEcd;H8jG&ErF9#GR}o7uup%hpLoNvTXD*9w7cjuTx4DtJQoPjyfDUj##0#L00!r@}|7>iulo-*x*p| zw$qr_>4ov5d9fkdhDOOIJ|})OSLIHX*cI`kP8HK67HT+JPqF0{4M#1$D`XrNsBx&R zXV}acf^hp_dd*d_+ zd@_VNm$q1TWCOcZnZaT{v+Zrg2H)EVlw@r^e26i`6k|{7G5VlvVVdzG+jz_SOS{r_ zmiImym~uKKkDV)P%N&(`mz^CnZ?<8+-F6Jj(*)+XfN9p+`9D22-zoW%$d^7s)el+~ zRgpNdg_T_+3$n^YU@bV|mm6QhL!?J^2$m zc}KYH<$0?;Pvq!UTXU$u!i4?NfURTlX(`qxfgt!7wv8Ma=zYcP)qlXBBw|&R% z^%(L6EX;Gm#$>;U3BBR4NDfbEhJPWue_B9Xh?TaKehKsYte@?L|I`peW+myE4|F6w z8!Fu@vYUZ3H&H0Vk4?;c0GWS)&T3=|rSw_mi*Ks2K9H%B8Ed1zVkA>>fvUK}oPj`6 z2N{ZZTOOwc1d2>G*`&$TOP84|ZKw|;{cR3vH7ol;9%AAOE~8}3#U`4Rc`x$gWvU}T zL@vmFj^m1JMS`fa4P_9Gh`^kA<<+{eA5{*s`3>D*b67a|6%gw!Fy|7CcUtLbdeffh+mU1~YjbV4QdD2=sM(EPva+MboJvtWaqV9Ib(=4u zKU%fBjonKI>qc$&mK;ZVh@PC;UD2iV4ls{zntmN9%9x-gFY}kEv!R(bb_)@0KXqnA zTTO5LhE7NPhV2ekCU9-)0=>$9^fsRar(X!WN9ryguC=(KKsY&deIzlnH5_R5+&zjc zBV63nwZs)aG-O3}%cFn(^Mr$`orjH$ZRR*q|gr6Gn^6wT-DR}vJk-9MrVPm8IVElEb?%WvP z>(m1qW4^GlDSYtVuydE*c6g9Zew%rr?(EiY+BG*4*cF=)POg%30*dJeQ@V2}#oPmm z-MDMDG#J<#8yvr*IA?`3Y_(IRjKtdHR2Xto?Tx!`mLdmJL?X$;Vc~;j7(+wbA$OQ| zXf20YCBhD_pZd##yjIEMDYmu_8S%mer-rTUWJ?v}?CmVB5c}TdsFi2P3dfPsF z)JEkz{ifE*x)WMC^_#i~wdskP)+Wo-xJo!>YZ-VXYdcNt6eStHLu9)-*N$AM*VSx? z37Fuu-Fi+0bJ+`0^gdiW!vScxgbnKT$4SrN`&`ePW_lau-f2 zEn$=Lh13&NYNopR5X`~WtwfklG@cf};Q1;np&K==X^;5<#ce*<;c=L?S7uWJf<}_F z#pH8MN!YlVdwLSZ)XbYG6q{bIcADn*&T=?bn>}YrnqF>xMpV`;;t^wqns8`+Dl3Zi z&TeqCDmuL!b@R7pOWnsa2{yc+3xE#hTIqG@6S`5PIXK>KMQ6*=tBPg}XWw;yYrAca zsWH&CUX2)CTKtV(?SLaMV(g5bs2M?bZQb;|gS#WJW?g6Gw4LF)_DhW6#kx^lY|wM( zH1`3`>4_G4p3t1}y*>H^5oc$lVyiG+Tr4+Jpg6;{AFWNRg!972PBVefXo1GZ?VS5m z9s>R69eSWBfzl8grnj{f&pX&=S+U%Y+x51t;?!GoaJ#q%Tp&IRzKGFAC-;w{le;*- z{hJ#5k>-$*GTdweCy-)vn*T(sCD4a6MijNbmHle5+T@Cii67c~`?6;gf=ykzr{)k~ ze*#z$K0dSVe1~K0$-+p7DhP=}V_s7(Z4@n}5F2u7{;j`CimbJJt3JaRI zQk%_TQTkDH5r}jscNg=!eL>yWl0LzlMk(`(zC;Gi-mOR3tbq8y{g_R)etJddK-o^u zoxcMAaJ<*O==uX~`O)(awByjr6(+?I01F1G_t%nIb|D$^adx?(-y_}=_lI_VA@?d_g%K?iN9252buu_UU~ ztA6~5uIB%6!y$*y;aEIX07i@%1#U3#=?QIbByl+wl2Ad9r1sJXi9ICt#$KSYaj9G3 zo&o1!^H#I$JBl5SMgM96pu+T0u$QE9s`B+lX16lG-Dwy|F)s8%${-+|Vl@Ph61f zsW0?9Qft|G2nn+1cXt1w!RoNH^Y{VMt*-1CsR7dCsoVjBqy~tzyuLxo4$$=e0g9(s zL1dsITu%Q0<=X><7ffFh|Ka$A3fLgdDCnVK86d>m<;?$30fZZFH>0^DiD9u9)$lB~ zho`^4YJ9Ne-ENN$V@TdnIkRq;-Rr z8X+0J%NfXsjhQ__ZW4$6Pvf(W@lh(0k|8*N#1H4hmYXlKn8DWhcx+5yCYguMv*YG) zWNbQR{tI5h&hlT(@`P&%sS%pV6-U<3=; z5QIN146$50hvqoMM(HrENfh7Ov@2F?xYm=3rvAepKv4V&T#pj3@?P&{SLQNLLf)g0 z#fr`CR57ok8S@9Ayjl`(k573KQEx?WF)xz#zZ*ZC8@tLppYXa)7QeM3+RQR!402KJ z21d{XdnBXiS5nVg`KV-VLr#sT*kw+jp5+}wnuyJ5ZYw>)ybDKz)LuvzKkS4^UFL&d z|AHTqvV$U5m4c^CpygqsM^>4AO8V1HPnGutb|Q+*-5>?+qb|X=B4QLRLes8Ay60=w zPEr0r#~U%Wh{MQsGfdldqN;o!mHYB;)?|5<-1uiXvGXAEIpkIBl6seu*B8l?u{XvJ zRt@cm4#{R{*7GR4uJ~up*adx1UuMZaxO;ThX*-NVqD@D~pr<~E9uEbhu$_&V)or(o z(Jj{&+d;9f>ayoR?Z!Q6HfynMBhIclVWZc06{E0lp38hPC>VCI<6(z#tk_Te34{^& zO7EBjVdrCMUFbsv$*f&lS;WnsPow+OO7yy(18sN4Mw$gkqz(rb21k5ai4XN7h3VXJ zpe-0JGT-+|-l^oJU$3xakrQt@8itRnV42$RF{w!-}^zlGdEFP z@<<_2VrQEdqEzYe)^a_tJ37=n$BxY*78}Bm@?S1dT#iWEX4VouSY0BnWuC?);Egif zxU#tHCe-PvIW%Ha`{DFzchh?-Mum*cRG$=O%N5e$uP$+~$m#QWBpm z*AqFY8&%bA?9HNSHLGGpYoyp<^V*1l4Na?y4=4z^vEgx5CU;A9NlrT7Q=I#;XC;o0 zvemK=i)m)Y5Iw#E^z(88>C4OsWW;@r z^x3O8+LvwdOV$pvNF0d6T#IUzR8&i?y_=KBn3leO|$^SwgJ65_u>D3tIW zk7NJ2h&^vhW-4>sOif${G0Bw+8#V0jR+|dfzdvDUlu1sGbAbJhEa-{f~=H+0N*@gdmi1;V%2~}SE0G&5#R>#)} zOMEV~c?}!L_;c2Q>XIPVoXMMD)~4SIr!nPzcro9k_vOP5M_@~|G~RnOdRnBem2$%= z7dARIR4TpgkgN8l)>*aA#;!TnvRg+%+DMTP+bv5w5UgAoE2Z+uQhAhK*UkPk{(5Gz z?V1&K-rpvb4ot1AkCvIg1knu66TSjxV@v8i3~j2LR`l7>sxxYgjUh}mLHP-3#xC~Y zYib(b^fdlm8RV{Q(bg;brG+2F^1s!vDmMR&91Xku-pR9WKOyYduxYAi!#!@ten_#; zlXhzCaqBkfb$E0Q?HEi{|GQU2x|v7m(xAwxo6#bL&C<%p}vUDQh~B(dh2Ry}!bYpMz)Nn0XmT0N(a@n_lMUfZe}AJ<@5 zNSp;_wP&EXBQ;+U`3BEDF6zX4zq{i3c<+sfaq{B5x4}kvw z0n{7wG;USNOAzM(YB_^g`f{stUZ`qVRQ4XZs0lrK**1OWp|lS=NdJ8ws{W@7tjkbxs?Z9SV)HN@WpUzF>XQ`O_ri>~? z($*FLNQ~Ysj(Uc_$&3!JwV5V8Nw}nN5qmR+SD=g%r|yLWgVFq2&odYGrpGX5e7q`c zP;DLIyc**oP7tyMi`dmIb%zh`md?3>A1koII%|wp#%8HoQ(NTp5H0@J!J5ElHJ-~p z3$ZND!Th8re<_)|(wDYEEnPG4nA_3RwbBLLs85u!)-coa;D@-yB&U|gd#hGBHRqOQ zr*3Ua?-cK~g?h3{pp>=iRy%|Z)ik9UPf~y|xIR$sX+*5Cq1k4Uxy4zYN)wF@)#{IY zH#Q}M-FX?zvH!uV4Y^_? z0JsEzmiOIX3xt{V%q**0A$w9Lf4a)wIxxRJFfry#BQ-awiulr|EN&tEsAniIq)^#hfR?>O zk;2#sw$0zzq8Tsz-DkRbQI$EXWp?5kD%$SLW({eSbw^A1%{#V6x%s^K(k=6cDq1-> zpB}xj$y#xPZhVYCG!7;|X_YZZ);_GY$mF(m=dre}Q-1-z{Sj1Scn!br=SEzEPTBK`N z$A8mF=RVh%5JplI0X2w*x*1VWoW7G^Uur3WZdJaddnTVB8(zOM=j*ug#5=e% zKvL>kWKXV8>F4&Pf9gq1mGrru#!2!;o}MdTr04|sA~sKz?-EbrN%CdoI)Se&HnW6< zapTyoRvvTMG&LL$rdce`+ztDCSRdFSMBf#5lEdG<=nEQK$d8Oy;)krL%iI@X zNu29n$OMb{qZ|RZ+z%U?zojK**4C3X?6_*NSe-=ky5)tWFTq_1~_Qn_luApX`Epn4v@J%$?kh8Ie zK`4_aD-NP5ig>NZZu)b`(Pi{n-scHP1G?pHCCI{C%%m@je`ZDVnb${PIA)b}US`#c zoEMAdickl$J?8qwSR3A8PGPkd`?G!7X5GjH24ify!eCUn~S*!??fH{J__r|FdlVaFuWGBaK(gZ3D_I?kkfhG5{Jx}Zkug%H)7xw&hC&|G@C+i1a ziSNsg4vLg<`c%wmlvqCFdoRRJJt$UXNAig{qr=41x>`@*`QN6D)t`v!QP4aLHBPM4 z2b8_qw#O=aG{>Kd%cXqca`vJaIWhh6-Oazf%AAT}I&paq|9WG))AwWI4ADjGi~OU8 zSRYjt0=p%qD)GhV5+kPk^v1evtMCka%)iKEz6utHk1{8nCFZ4Y>3SJQ==v&>!)Q<4 z$uwSvqQLbrKfmTSis(%TqR-<$h*dp!wPh_IYI^%Crnl-XJ5JZ`6a6$2=v?`Rwtiew z`f|Nx?ZOkbeX5_+96p$;P38>?xAk(`)hb7n5hogWyB2S~NJ}=$X=6=tx^*yRY;8M~ zZ?wt5X{Y2Le7EheD|3*l85_&C%IT+bBS(qJNX`dZGPq8!lXD~e#;*GWOO6|F?5e+< zLlS4#()rW~W23Lwm&5*VJgZ^7rViJZ57x>y#ygK_&W*5WiE7A{hPJk)#yNL#bQ+SQ zRWOsIQ?d`H+79Pu(6CQTIWWCmVAE83Cd;o4Shew$(Czc!{}4JG%)|QASAXsD=hk%A zl!Ox1!||Xv=N;GqzXMKk+YVz;={xPM+nBg=4EtLB#@71Bj#?a%G4BGDZn7etP^(cr zCY;ps()k+a#PPPgs+?t?YGu3d3r$>Etd-?8C#nm9s~K^*Hos!TcfDrGzjg7F*5Ikm6kpJ1Flx*u&WXA#RX z^kBluLKPHefPp-HP?kC_2zKl73mtIt#r?I?&+0AK_k)U?^{V`pZSk%Rs!r= zW@=RpdyU^KacE7~yYVaPUp0Q2;T1}5xmZ?-qrH*PJB^;>*s-DtC3p3e+ zZJ5!q($Eg9JjkVCMvX61#R<>{5Xpj6-H>qKsDPc!&#a@sfUyx~U~u%ZjR_~)w!v}E z>Eo%%38!6N`2}F)3EMm)LtR&$$453{M%R~(wheA;Vp<-~5C!qJ$zg#vEl+A>#Kl@% zDdfKi2o6AJ1&8Owu zD%hR?nA;B!slDPHjL%xK(4lz!SVmXu9m=ULgunTW;l$<ZeXi-#~`%r-4qFJ2Wuv!)GC|K$to@}uk*Sh0^=t$*^RsVgN_t?#9B zfIQOt0o$gG@|RCgEz{`&!*%}aw4H;^P?lk(v)JV?=`a5>u=>gud`0<_`pf@mVEJA9 zj)9+aZ6<+>(p)FDzkknss{o9GvdMNlv@M-D4b@Z}s4?Exj02&>LO1`4`NyDKnr}W{ zBi;ua;cBi!XFVXz?-7?7G(=Ri<%T) z`ysYeExrSddP)bF@%bAc%=)7qqFCr6!g7I%tp;j_r}0NX3RN;uQ9Q{hx>8KB93OE< z4F9oCvkoMsoSZ$8{q;axhk%cLLw&P-7#mIL^*YuB2Zo>8Ba48GI2Z zqdFQD!39{E6y~DY8p3Ht&Av$_UrEuEjeez$L&-|%L-~daNhW|2o#z(<`)Z6GtZy?x ziGvjU%Wns38W|p{dR*0w6-d!g^TG?$oHI+P{EJ|1h#|Qh(FgLXK9GJJq_+EleTz%xQ9sng_B})Gqu~HB(x8Kq@Wyf!q;{%?WV%Y!IWE- zKdF8BM^fvoOsyof{(~wtP47jAXb1OXL3%diGsr>=hUTnV)ys83qG2QAcbnBfC1dRI zZ2B5EzqrU|6F7sY`92G7KW)2JEd4F;OATVK9uMLnK&(DK@oo~2Ph0#YY1c_*WZv|C zD~Py1%l?bgpauRCId5TCQjWNtj=HxyWbEUl)YBxk_mHtiYj{I+$K?f@wM~m}JEB?b z8$`dY;S9xVY&n?j*HKaK0atW zEg(&^I+KQ|##qR#jRz^aRYN=0lzJR;c9MKhX|1+ii4uzH)TbY_mgS;AJG*Xdm4zmh zY;=!*2yKXahH9yzuIB9S*XE2i)~cIY^Fw7D*;y{p%37Tp(Sldz*Cc1;9!fhy>;n(E zJWab8?qfRMr!&*>Gm?gA%wN&(!A9d>AC}JM6Ie(f6zKN+umONt{N4QY9Y(vYKj&MW zDCbtIA~Fj4|0|8}dqim52959Tqw&iAG@)_GdB49N1dK*?>sLgcebK@W39H}OYBKsH zuOXtvkL1L7o55=^5fiS2{EoeYU(r@)$rgMLjK&fCb@D(6w^KdkD=6v_cM$a%@S%D-hb}~L&NnBALFtyTA+LRse!GYdz5`K(CN9?fyxxvy5ck~ z(7F6%FiU;N;znfI$APUYKOnHeE#+S!)wtL#Q{&=1`OUYvm%VUtz_lFco?o_OKlmr* zGVzDn)9?2yEYd}v+0DfzG0BJ>h{z(G^M-t`9s(lKaqN})j7hL8@uhqdP=L!AJ(9V@!#RZHSTcYrjl@Cu`kTFSIrG| z#?EV0wZ>9+t#OW_vHe(DSzC6n*4P)3H;qyc&+|0FwT^Jzt$H{yt+O^!jlFG4-~vy) z0gl(5t$K2HN1;*O8wvDy?i4-8s6Ha$I7*}=en%d2BheU7c8DB=SyvG@CH5Q{+oG%F#2m-^;nYML=d0_!u2Tv&7ALH zh!d_?aElRZraw6ypO|flvAZR6nw|MnCNsa~Br2wFtH33|d+%!9r9e1O68sPz%6OJFYqC@yS8s%(r zS8Py6E)&)YTWsVumWz|@(`ru#pDWv{hh0Sdl>3EivDN>Exxpr3gkZ_sNlkp7>DM=Z zV6upy8hB;VHy~0slNiUU+s~EzFmjVYZNG8%)epYQPTQIB>`z996`Q_FCj7daN<4s- zrjyg?DIqM}U2!bj**0E{9~!>=MA*c9|AOOcT+&zLXHrAP$@}yRg2L8Cu$xO$=ycxx zHP5EYLR3nY0w&9k!cHQ#7eo$ zU!1)?{fgO&!IPcbH~Gj;?q`tDY(<=5ycYMfSYAbI`b6_FJ4Lym-L4qWa$WJZay?Tn zYju(2_=||^b-m&EQhP&Mxp=zGYYN;Xo^IRj8L~0LM|z z-M~tps%Nw?CfwhIdP!R;gZ2!QYlWFv7J?ip3CaZ+W;F#hXUj75ehs)BtGR-3OQm0 zcDc9Dk&JFK)=5+B`z`M}snf7Yh$s6B)-_1APUv6J1yRanMYp^!NU4PDFPT$|ui5n` z4_bT@(^Jksw3zri5i;L%*ssNOc%qP4bhlmj**V>t_$x&MNRZGwJCXQ0>05H_HLA#z z*?iJm!T4ea;#2OG=Az@Mc$dKLI!`s`flbiUlGAf7?=7TDpZYOY_^Nv&qKlRsqp#E$ zdyQ8^#vwH(=1<{W)TTc(QFA9-}}I;`H7 zcfP8>+bogHM81WqaZyx3zSPbkK3m1VK|B)pIOd83%;-}Q<74S|DQ+C{E$?g7w!`_- zKW9h+!ota-F?`G?MHDB!m3GqCB;HRr2C)e>GD?;Ww|!wNY4*5;yl-234>-#m&u7YBJs4RhC4+jxeC!mt5Sj=muh)9#Yqo}BnW|?>3o&cMs`P5#>CT~)w#+~H_Y*> zXiQVjo~V=)?Ua+?qty(K)>7<4SEA@gEN7`dsG-c>3RFX3775tn`_TK^fJD38TavW) z69&fe${RFdPNw^8$$PEnWyVX&jb+skt=T=VsvpM7;Jvr zU%?QY|11?!s5iUVJ7YV|xUgRO`l%lBl z5d?roq9g6-8#X=0#;5%4zu}PB@U=&vfw_QrWnV`7j?#bB8A77y29}_VUM+{pM$rtl zK+Ri9cj;>}i-2r&qWS%bi_#ajqbFPAZ>Jcz!2AjyqiDr*qPbboBFp;*dGVqJB%ptx zxt?*RDmy@q+bclQ^~k+6mS|W5n(^z49Ua;j$mi&2=;T*ITN78r4rWEk=>KRgvE zc8y%>4wU8t*B{I4Si+1b`th^;;)wDQF?-&|S_EMgc3sc-&r)mm9oCN%>7%W@HE|y{o9VsvSZzLY`z`aXvY@XvB&M$5x#|>lA5e%1i8mqKE+3&1(PA8y(8QFzzdqnASh4 zX97#K8gsMIK<;YTdWlU}_}?gcdYjF_esQs9DfBW3M$w;0h2o;uO}@>BaX(|H)S*7z z&HMunTIN$sbLPt&mbhEh@V-HXgzE-@i`dWy+_35rIw*l3J;x}jR&Br|uf`OFlX3G0 z*X=BC=(VI}c*LHF`KCcecH=1WpwD*5sx$D8gfS(Fn6E$)`%sH-r{B++rKC!WxuKi>}@m$S|hbynJQ* z8HbgWG|r-GJ3*PtFUa;iHlfOue$(N&?Nnjt*lxb|MPzorp-2KUe~t=CvdFZOj`usre5wUL zjjb1C7!7e8!(0Ya2Zbwb%de8P89aDIK~xa!D)xyild=%Y+m|;3eBCVK$?tVSmGfa) z&T-{E6qv&;*GJ^?0vn&XAMkNGhQKAyCW5Gw8I z#3FUR^$xczob&T)oo`i@cp@c%ZJy-ass~eErn16bM)U`=t}*rI8{S`#t|yxXTl81w ziwSQ+QUYy@HBM)3gzLX^cKtC(mlq5`IRA^tb{XDkffDa<2cBQnoE~J1tst%$N1OJn zSca*vdff*Ihv8IRx5fiJV{`ni%ypUf zxSMunn|-WWY!O68 z)e05iDUvU;aSrfSpq@B05bw>6_&&*Kpg7GU@+w!HTMU3Pczj#*j$>sg7mFGduta~z};>N^)UN^enyZ{j4e3Y?i8te5tcoU0r)o92p8&5}CZygi-anExL0zfMQPq zbTvQ)p1DDKJieYNy*`8e=AAGO1CrUp1_ub0_@;8aQIB_J+4=&iG1}sW-RMmZ+Ti|9 z*pYI`D1X^nq-2kJhJj-?Zn+@}wfGH8ZR2%TUadnmzI1$V znCutyG;5F=h>EVX6tmju1GA&RI5l>Dc`9Ix-RU9nAQXNE_qQ57 zJ5%Xl+`p&&L0j@?(+5Er!+ToTBYIiWftY);FM9Fh!O?06a)D<n0{YVmPU0OLo6wx?TCfKXFe^0yiPQYwO}g$jne}kE}pH|aq!6N8`k2> zxwiMA9@x1EDYezi!HX%gH>->!^LqN>slPN1y zV7f(B-(mW%)~SM)xAtZ+5xi+P>uG$1{xZlo+W2q~h_~kwIxTjfFSK7CFsjtccFVV1 z-}xDvKY0XkS`L;7l1kMBN0#>+La{oNfxKLnv@?*?_A4P#O+irAr5d_}STXQ_C{;wW zyiTez?eV;P&dgsgmp4B_{k6QmP=m0ACzd3ZBqmCj>gobH^yWsEXms-#@F1F;l65l7 zK1AyoNMgp<$LGs!W57{|0Eh^9Bx4Fpjb+b8#N|oXjxA*bQAl&4{77aTN44))2u{ z+!ZT|B*JcdkdLVA?j+^d`i`g_y7B140y*(d`NWszxjjt>2(2rZR3pAdKJks*kci~= z^1etb@n!EcRQ=H5Xf@XVjaban5tnbAf655aPz4cNv&jvTOle0$6}FAmSfO3Ik(Bfg z8mjIakS1$)dR{|SazNUhl6FNy74+?^dzYkrqoL}@1JYJW+JuIxf93X<1CAp-qM_<> z(u|IEf`liuF`=+E?h~AqeT`$fgz5>meIb+)&Lc%nD7vIxU@f<~sCiI$1aXm$L`Zm#0 z%PsH08-?uf8vC#LXv4LUr|s5TDl*MQ z0h9kxY;kM6Rk>q*xB*ottr{A<^)-)sUeb0tSi95b8Co0?MDE(b6 zsRu&5&=5UAJ*W8s8G9IHS>HyQZO>-uV7^3jsFAd&8|W7XsjhiiZnGM z<5r=N)E_E9A0a$*IBIwgrg+@l2BmV0(b;8*!SC`{+$x_cyrnyw# zW!}j_3X9d(!^Rf9jMw2dGbM67Kl}^uWikfssvJj~yWs)&-_!UH$wRFgquIw}992t6 z^T}+1A4vfO1J}uvc)%va>x;B*UmH{hc@?`jnJaY(WpGOnt%3KJQ6@viULo$K0z%Fy zZN-(&{b8@96mnG0>1XC0%|cI&u?c%O^`z3NRKnI!_PG7R;kRLCtgjCQ%!8!_)P5o=HBA6&R8w0Bp%@=dK1y=Mo?7EA#c`rOD;^x{#MW?S zQ3#bIq$mI7W5$WI)20kMXK1T<#?{(1xga*Ad4$I931<x$`2*r#^-!WXgM*WW%F6rBhZF{Hku9t9hQJU-3=3 zGQcs`N%w$2k4EqwW-e?jt9&5(=a=G<*)r^#>Af7BwN8LV-7f)$!V+G$!5nr#QR8dlh@qzh_<81ccNQ>Sy`*<2}-eyf(Em1o7mqU+y@G z`_~jPuU0LO0UL7x!MM+nnnHRR94|J-q%4DSko4MP0uLuq)=OL*WZCRH66G%Wf1*Pa z+VIUcu^HQ)O`&y)4zV~er2-rm-*k))F`1+<(;@JxH_OK#qeBeq(;-g8vlfbtFjw@o zV%|rPj@cT-uc(Ov!Tm5h)tuR1@O56Q`Evciw(DE2=td#sE4CZY^YR$Cyu1V(6!GGf zJL9gCK9NYC`1O#GOBYokdElzfO&H6Ox|oWZRT@8ZG*)EpqFtLJ>8X(8tU!_fRmgF= zdR4~zb;6u;iYAwRb_$KovmxZ>iL4-RINsM+-SiPeo#vFR|6Y&RT%-yp{RH!ZbTRET zv@v$EtQ~CN{bS_eH*ptAZ4grmIwj<-*kx`53{L~;$>qgba@ruKZF?wjZDAyFZQi_( zA7ytp>7SG?`+Qa2IC)%y$26XceXJ*wV*#>Gj6$pOs?>{(y0w)IrG)mI;gynX+k5)X z9cJpuhnL8iRKxyymtf+0=TSaNL0gz72_LeZkVSYp`uw*Yj`h-v%!$c-A%w`9<{ZwE zt+qh>qEA3^Nu%|WWF&8)9O?hVXTA!t zTT zLX_=tDNrg?c_Du{k*zlikU6RJONuv%*gUpI_K&EjN-ipKD{vtXW=l!EjFaSF3MP8; z(y@`UE!qKR4iA_N=IOD5H_}6i=0=O_2a7`HextcTh{c~kRbSK}u0yxyV!w)YrZ2>Z z0to2vYc{sNc<-p&-GE6>^`#3ni46rxa_ZjWVBiJ{p`TwQl0%ITlH(8DW)M@X3?Qah zF8<Q?BpjnhvQlQmR2T^LwqJ5Xd#eZV4u@I>QN_v zzm_xs!dc(gG?vonR51*V?y-jO4ocGXFuTycqd=Eg1uihrMhfbQyH#Do^|*>Lo}Bk8 zrnFlK52X+`Sa))o&-DLWDymbFtSQ&_^$2p*%|QB?9&`S|)Ed8B^pp5!M`PnVT(=O0 z#Ha~>y9Qez9(s=Gl?t8AdmZVT_-CKTPUvuj`bw^#Wcr2pXGdbgMSlA_T&0;jBbb+7 zZv!cmtn$puT%Z+~KUFJa$i5kdYzflQwGYz=nJsG5_mLT9QQ=6K#V=MQ)}0(yj?@VF z1s9H|nY^-lO!F55w5J5^s!IFlM00KrJNJw0BR4-5r5Y@g<<-;3!`b+Y$WrTRJVmF4iI?G1&KJUE+hd=CSZ-xW4CVi#lh+;v zK)st6sW+)S^O$wP#sPi#3sK7}oLZa%J- zVZ;&_6^0V?+-Yax+ipF%q8Lf1e8~}WDU?(0I{d7Q4mY)+6UlB5!=FsK{*JAAMwoua z%@B6%Z1nVS+v|Bx1K4p{GBlw$%xh?sCDC&#znK#~)APhIo;1!0bl*M-k#O!JLJFXdnqbO1g&*Yc#@7c$(IM83 z*h%Z{uC2Gbw%+dAdg)rE>?Ozzvc=Pq%O-rX4poPd%R`S;N>{k-g;Ny2SWTi@Q7~w)SjoET8k>u^e1>Gz($abiRo6RSgf3$ zrUF&?hf)}~+rR#o_-_p6F=s<1g#+91A*hmGBoqogmh-?}ofJm(Re6TWu%* z4Wg<;gqk5p8KXKc;acB8LbW^LdO`&X6Ry8Y;AMP@z8(W1I6Z#YwcN{9de4)gX~pxj zM58_jd!e;4{krk8#^L@r6LDmyG!%_AYB^!!CxiQ3C=&le3UK|1JUWw;ZKiB!T;vr zF*L(Tlr?X7N|X&z2GTC|r$M>sAz}}CfhH>kTzqobvNFp2g=4X`iJmfL^Yhfe1qgy$ zrra3maQ&4e(3Evn6pkK?%c>2<)aU? zJmQd}54CJOi(59HMb3^7#O^MLt*`?Zg`E^Bu+c-V+URA{Z2WjG)y6NB(<}(0&nbD0 z17+X&qtPHYL&bLr@-1caF@z#Fk^&gzbush*$Asxq031Wa1bC z!E8TWz!-La`btb0P~tqhga9?i4@e)S!trd+FP6rp0;*CFYe#`6$=mQr*9>?w66i*p zOkx^{HB#Q+wRQT8U)3*Pm5kk4UFM3vumF|x=`usjLIW$2Jws@0vr^GEM2m2&}r`Ze})7w_1`h??eL_I{s?AE2QR{}UR8{PXXCEubr0wB zK6s0DRQ!sf1oWx$Nx4m0TxQg)E zneZuuN7~5+jR#_Du@U638R7S+`u$w}9#Oxaso%ru_mKMSwdZB_-0B^s`ZEP;OomwA zozocu*}%#9{*GAM<}S5!$@mjsyg(bo(ro{Q5iCZ%*;jUU#ZHuGfrbjV<(|T6bZV8r zCFYC|w!#hUT&K(&TK*R*-d9tQb z`D4xtwB2@zJkWE3oYNMmgFRWwPsEwuyah-d4)!DtvyNc>@?MAG5b;{ulVyVb<$aF4 z4=0eyffW0ic@8y_*PY7KK+pWkvVxV%dp(UeDCX>|otjA;%NpAEpbk+DxhUO>X6RML zYI-utYRW}CenTndqG@d0YSft{D)n4WZ}>wvm0HFq%Zf-A=fwP7q{~F5jGh=@UP_NE z1Rjn21|P>?THa?aMceNEfv0J-O8-LNM}oPz2&C7a3QBa~=;LwlZEtA~oa?Fg7OCoMWCS;AKGt{I3D86mo7t@kcId%R04H zj_T&T96WkCkmr1VYwSI$$A&f!Ghd~!!YjR*`$SurFLIJQwIJ2x$HUc@C1UvO=5cad zP3@muv6Cr0QTWCycoa)!Uh}AQN)Q^|Jj#p<*bF|NWAJ%Jo;=~$J62L#_Nulj7sO5s zTN^=af~=zNrB92L?W|svcaqjDe*lJb`7;h2?{l}zly;n2^JqEzY+4Gr6{LdZ*~2XM zh||+Qr)hUzkK$Ro!ZGi%`%p>VL^Z28P_ZX$9Eq=VbB!9;65Hp87q$!Qk+9#{z`RHn zcIpX_<#jQ_4FBm&;dn=J{4@Wut`=dh0g@e^B`Bg$4xQ`Tb$sXJ{!OSQ={>S1VvRk< zw($(a1^n3A;9(rpc^aI{hNI(ma2Dm|sNC{CS}V|>HHSPT9H88J5LM5`UZB$1RKn@C zSI9qvtDLbxmiG=R&kafu32$W3>hmtNg@dx>xZXt>)8)_N&^2rP;}K#uetk5OOWHie z^NMvcM zCEE|YTH3{IW_*aA$MSx%UNv?j3DN7!^{1$DxQZfcqzF<^iT4^2>W{Hph|h?jZabZ8 z{z~G3j@wE|sh?amCFW61p)Z*?D=1Np1lrx{ZgE^ohAMLgTpaB8PP27=^R=A>VB$)&Tt{|2o0{Jr2jT%9UfYw^9{1j#3V{i4)- z?0n$zM{~*hzwLbsV3S4m@1zeJ`XDK^(DDpew2DA!s}_oyK#M7+5NLU*C@oD&i=~Ze z0!0xE1-2Nwc75XNY86Cwx2>$Jh_1TfArwKZipr|HWL@rmzgizvd8ugb@661Xq@}E^ z`~Tm)d#@?OIWylp&YXFlIWr>z%KPp3*+Z<9aLZXviau}OPDA9q$(>qR?u|juYe88c za3E#Osb9#4q@i@8))h{CFEP^_QW@UW6Ro+RI`+jFEHO(b&Pu{ghBQ|)y=Q52Gk-RnqN zhQDE^M)@O_%8d;R!_kHe*~94k^6hqW2?VH-d3(Xiy2)K!yDzruq$#P+rB}W((3l8~ zF#kRbqbYUYCajzQ&qK+xC$)Guh&zgyR>=@CRvPG3*p%H0V9QV%S%`n~%kc z5dv7+3kWO`u`uL1O@Y3P*JqC@iNDC25U`hfrH9Ta{&2)0_`8-%%dr{E=kDq?aB`{@n7{L9 z+OYD1K)oXqbwUB>aWoGvYCy(qz!MP6h}w&8{ebc*r1ePmDli9^MSFvj_8`yY`yu?* zStw@W)H=o~^t&2mGI-FK@c~^DB}(DwVNARlYLTR+1bu$wANOF-vTm}Exyoqg8?PVK zxo$$L{$0G2jC_o~V^5P8QHH7RJB_=)ayf`KK~d!b|6WXWQaW*c^QZ2C@B%5Vk}N)& zbUA)L8S*6Fz~e~x2+^kQ#@F2)4*V|)>0xZzP^`L~??qWziE;C3IbQ_!q+zoLS9t8^ zo;#uuOt$r}NN2)R-;RvXkQU*8vy&-bj-YB4*h6TDLx+IfsJGFI%o`$)L&T!CdfXxV zDOoqfeI~%?0(1dT(?AXTGr9Oj--N(ojtnUgslEyway)GSPU9V4%4AW-Nza>gABTzE zaUiZm^j|*xH^1)Va92Uy#}Te^bszU}4fMa}x=eZKx2h~dxe#cl5z`AhrRRye383RH zDxZeYi-gk+0G%sgpDyfE$zGvU@R76&t8O<}Q+Hx^5mXPelthkLK>899B#qt)*&VK* z^WpM>U8E_dbhB1RlD9DQDGkNAM&iv;O5Uc0^ok@`o;W=`b-u04dJP@hhKLkUMo;lvh*98=T6oSr>W=d~Kxuh! z`T9GZk@V>AJK0BZcm^c*1QWqq=o{Va?gVsqFZU&%_td(QLYmT~t?b zPcx<^n#j*dQ(fC;mddr*u*gP``NUh#yOCYWv25fWj2Kpg)OR(ul;xc7oaD z!TpI}TJT)Tzb zt-Q@4e^n;#L(hF2LQd)ZQh#C-dF1&Q-;bb4Vitt&t^9kf`hC3kzA^Cq0sg&6{jS4z zdVP9BWCK1Be@B6!S;9Nsqf-6-osbQYMex+AN7m;N(htZCAQ&fSQfPGDi=g@Ex{;H% zl824EjJ|lf{D~E?Q^mnDdNL(+h5uawm(YF@j`znhe1_gamYLci9&R{+SWN!I@Dg=0 zC&h@R1@8P#>@=e0?WgHq_8YEDf8sz&1%583>z-+DkJIFyxNXt{bOKLYEj(y3=m|fb zxYhWK_u}OjjKHtsX=~^Za4%viNU9CktvmH|)Pp))k)~b~e}npNBd(?QkQOWnFy6uw z5U8}nAnk}(5+GDpmzzzHFssX7C@#li-;R`0u;~4Q7QKB+b2r3yzMh9wvF>?RI%Naa z#n`O5ViIfPtyr+MU@ST3de{IDIC-@nlW7^*Acp|m2_Js(y&bpzJKq;>+L#?z{}qcfFO#gLy3hEzYC zHc9DQaAkaqufXw5ER8GCv+<>IOzDONv%cqR<3^&Q6Djj7b-3XLW8+TU^LpC7Dn+i3 zo5$>=bIkrW8aG8==_!ETdEP`($qZc@lA-hAtW71Oa~Bx5kGFql9T@7q4qFvh_jR~? zpeM4q3Dtch&b9(>hE3^=TCeJi1(i8bR0@z80{ZV@!`=8 zG?Hqa(gpv4)#r_7-P2!-HT*iiS(kH~#HW7Wax7iq9^3+@E~^%67k^^RmAodq$JSk` zYeC`R0t;*$J%rvF<$8dYL(l9Br)Jdo8?r#`M3&&Xk&hjG{U4OEzfU)yp@QIY;@6ZV zcVW)3gz8+BGMw-Q=DKfu%cp`49q5oG(gQ6=xG>E^mqL6;REhUCt0qP+Zw6iH8xJTN zP8ZIS)_v<+_AsQ6IE zKhTq%e+U`7IMeA=ByvUVOR)VKu>C8%Aq=*!Krl7&&MR@XIXaB}F0C>PRfjJg-=?MH zdwlq%9@;g~oc(Qeym<^xRK!M6?c1%q!%4wByqh5XEZ!Q4h&TCOxCtA7*zdF6OPR~T zRb-Gto7S!jALbr`z7Uh~94Op{NTn~>OI;B40i5H3E$$HcG!h4s#eoVV79XBB#r-IB z++%--lbVyt7sz@zUr?oQ$&UMAI}~ZkAyF|mjO_#tkqPM(?eydQwhu5p&iRfBHDsJW zoSfu$T~&AG?q6YB%Y6|TH4r<+F%W$X;Yas7V_!IdggPT%I0--}c)vm6@F>i6vEkS) zh1yZnV$3DopG4(k6ZfSY0+c#H=uT=TWXBnZ^o!|U z^M<%IPI~BTSftQ(GDi=g6%O4*=%EqaEMr<5h)IbD$~B^SJM};jfbIkg*{7W=P6#QqojChPr)J0_x@^R;9e6=xRBMvS!GXeQ2>ps5Ys@El*oClft$ zjA-s3MFopaPi|>FTWpM#Au=6Cv^De-3e8( z_DWEWy7wpD^B8nN1wDa)zWFR(&5Lm4KyfLR*^}?f@ob3I&`#&qnpJ70>@QZ1p(7T^0PcFZ-;0jxMXHV@ zdZC`$;7=?7^C%#C(f;O=)fCu_Ti7nl$y%&&89dy9h|sO21uA^1I|LmU!mgw|N;Q>s z63(KObRojvhmXA$qkVxV&i_zrnYM=iP|pz;?Y zPpbO_$7B*x=rIv(e#QsTufTKeW7_j|Q{J{)JVQt8K~jG9+tmY0O{+g*UHJ_UV?Wq$ z+8a);ZYc62EQ&>oa?qoYjdMblpwRcNK=E(55yoxC<8SD0B5z#>&Sbo5-jJ*H+*p+1 z$63Q%Jfk-UnwzUG$)V>#cbfdK8MCsmDed>>VjSr*)xCxZ5S|tAw`K2cn6FtGM%T#N zYdoju>X|6W9CJKH5vP7tOYHL;z%*GT#~8=gc7 zRa0;#Bes$*@<|HuP+S9bx$925uJGhL=rk2o zyzDP@chj{oW>0Pz+H-0kJmMm?B_!93cshLG7c#zBomb#M95N35d&}keyzI8+xFt?x zI@%my6wmu!Y~Av_llTfPV(kNnXXk%FM|&Qw3nb5_a```^@Uc12Ueq`Fhb^oE3YeMu$_Oo7X`}Q zD4q>c4sIYVt4H|N=_tpIU=o$Pk;*-d3YQ8St9q0!y(@%gg?I_)qQgK5&zB`^4eSty zT!~f0Wx&*qk3k8IUp7d(E1o>9@>VTTeXU;EFOVd~D-eV7yg;xEAdocWNsh!QzY-2c zBa zocN*)6?hZjdV!NbO^FaVH4o+V9h5VE?~L+^z`f+|6L=fphXvkFc$>hF5dMlX8e+5I8CIC}ca4q4n0@oAH1fE3r@!L5cxH6(5@KkdDP~d5Vw+lRr@I3-I623#= zbjn9*7Pyu0CV|f<{62vf5neCwGQw91+(EcQ;5CHX1YS${e1X>!ZV`AR;YNXPBs^2# zO@yZkd@JEY1-^}Ny})-69zi%}=lrgG%y3JCZ5^AZarV2h0*+MvvXZz$FHXnZAY2X# z7o4b$ndOvYT)vka5=zTJhf=daC})fZWoUA!f~5$d|WtEmjs`igyUW0DEa;Z z3W9Y!`gF)T7kemtGz`vSJ)dATht(ABC&J*L?-N6*(uTQ1J{I2L`5UgvhdNKPvgjU~ z!4E`~%ICij>M$M0z-YRD8S4Gtg{}M$|EJvXZtk5ISukPG@aHuw)R^ja(2Py9DhY}@ zK6;Rm%ixu!J|ySN^>y~o^VAyQgFZo8hUu3Ub0lrfofpt4O|Qpor3Vk)k#&c{@cb!W zKy>#J-;l1ZejbIS9jvwa0!z`|Jrx-3iP8I%X)dkl-3cygBTHY5Enu~Eq)v^@j#YQTpQE(=Y*wlQ(-`UT2=iZdClShX5PaQRdpWy|Y zw}D~`bA_EcN=jGVw7NX|Iw6)6rB8}m-By<3vVS9vWu#%!26&qp6St6wB`Q=_hBp@% zQ+swzj9dcA2+a>rzub7xFYX!CV$7BIE9Kwus+xrz@pG-4i%3L;swq~#xKteW<31p=Er-HwzEZbB z%b;}UImoZHd5>gWzeRoNOoQG6Hus4ZWQV^kVDTJ+Kme79+Egm7la=GpAVK|Ytn+@a zCK*@>t8XO8x$bR-d{2ou(IVEc$G=C$5DWG?@vaETqaa$a;d*4~avZ}w4Wx!a3nQq( zFzCqBH}#M*&{V9#Y$*mz%CMNi?H+U=ab+q(mGEPW2#*Nf;L}Xy5Oi~B(q^SK+^wMz zSv^!<_Zi&X1%Fj*H(=SGg+les_ZMWka9RUSIN*QOF}(Mk;1Ob#^JALDbnuL|lfj4>{ZDo8TnnY`CTCc;JSFc@S~W{seT8s}N0&fzyFbViY#WS}!8TxTF1vdq!jN zaD>*XSc)VnEyxkJH`W6PIifi4*owHIK{`NL8u*}mgVmrEOXA=w9>Lv6 zDjIDg=3dzfj!eS@#JffHo+B^6GEefh7f2Dsl7kFaTuie-SpU zS#n4m@G?SRXYNt#vmy?&pc~QBO>T6h4`eYA1VZ^G@wOE1h18Sy(wIMQ%LmCK6j=_g zx8R*oyRrqtdk&3otG}iB#&Vpzf|Sa`^`Qao?@{k#E! zSN)Ck?kr>d?GyLrPQv|q(>0wjux0Jdoro4p9gz>4=(xutH_Ky6KqjdBk$n$N4&v!O z%9t|YOTMp>kd@oBE9^{yim$bW>Wil; zAmaMm^QLF#m|fwgJ{F|>CeOZ(>D=O9 z70qi#M>eb|4n3qq{=}&$XB5N3Ao=3D+x21253+8=;lJF0uD9p_+3Th|^VuY=Gjfty zvuv|CE!KGqbdTkpA6GqZB+vJn?u<===f3c)TVIWSKnC#P3YL7&t6Y|fRM7{hYx@W! zZxKCnBK!vhb*oB+v?}k^DK4#=2XVyJ0dYi{Dvk(<>4s1nALFw$pdH{=E#2C^7)4C` zB2uKV>JPV&#Mnp8Q%WOn4S>Eg9Kw6<{Xuw_RH7C`!x|z8^!)Nds2eXJF6q{Of=`&P zX(6!cB{NsR7Z*J0*6xN!Rp6#d8cCuOlr)}GqB84ao)Z!{LZae#-4+lyo^s%e5I6=T zD*KQJQe}n5*(zm$3{()Gx!CcMQM{Okd*(zyI)YQ+kiLY9C7babqP$QcS{_o%gS;as zR=WZ&5Yu_`Q%Stim#As5XQ?xug*V}OP#U+j0a;pzOhwAlYHGU4RGPr1fJ`Nenm5T* zHj*nWBt4^PJ%njN0ovR%=P6!M_q0^~V7UiT)NL+B6RBe~W}jms^(2wPCsIq+2gc!3 z5d5m$NsozCP0xu`uFqrDqvhk}*?eDcD%FhnQRgI&5ho>dH0&fQo;+;_K{0Defan`q&H~;7KxBJ)eOj*F9!WKax{^ZyK`)9R^L$uEx3mT_kb% z^l@J1gUy~OQ|-z~b|u~j16ii51(8gM;6=9SP#4_@eAyq@Bjz#RldjXLqbOP2kx_pa zLRcm)MSwMwr4s1sTTVd!RRKXO@>6P=SaE{kY1;g1 zL)6+52>Ntw;5?lz4-w;6Wr^odd3-LSWHxxkx~__IkMDe5YkYN}FXv zMVl7Uq8N5#l9)3QCGK(&?+!!Bj!!MjG|Bo5+BLGnoJ(J~<10Eo%>Qx!Y?!k6bhWaC+AqUWjW2>Mt?-cY$6kL2(cNFNaaj>F$Rap;8Kww%ENRWs20B1us#Z4=O`o z0Y!MZ>p86FFzw=(DMFhOYZ!wv5^FVF&3{lizJz=0phI!IujKQ6%%~7w%3t9|y2saH z`|P#{aRVF%YF6jReOAV`J80Z@M`wTS9(K}Lglp!N6PR9#eM0nM3Qaw;cSG;`4dp|^ zX}bITU`{%wyYB!K(_MVm^J49C_B{SibZ|dOSw#K~Oqm2I=F%Ojso3||*t3UicmQ*GXncK3 zZ&Qf5{5^2O)m~=Y=q2a!S^T!ME0FejP%7v0S=g+Pfzv+J0?+Bre#-l`YW!HK;6oU= zhegQ{<*)ca1iTRNpiCnt^=e7bFXrq*Ply&%SZujQ0nySsKY4m(M!DaQhkodNYvdYd z)^Je?-W5W}zy*2g_Ugfq{nat_@V(YKijGty;C!BDQbe@-Qo0wy-v&4LXE=>V@7=pc zK(WfD6W_7($=|sD!VHD@AznHq(Fjjrt}DU<+)BCdzk@I$Cs)926dISOY?sFkb66B}>VwV8GMvEeCF z59CZB!Tb@?ZaiUyLnFaMA(Yn<;`j(Mf)gb3=)ltqoFSR6o+0^bkAov`f-v>q2yQ6@ zZFPz^cz|RXE==z7;~0rNKC-hjmRO^n0y+P)BlQ#vnXsT&1?kzjy6w<8+huAn{gH0q zh%kX`a6&_uF5#SwZLa8CbjEl_ZNKYa&KTT?wUf@R{3D$PV?OD(ehJkmB&1tQt1YoK zdQ$OI7S(}N*!mE7af_l1*qGOi*M)n&^JWDhE6@te-JB$4_p!1M_liW zIik`Kh(eyl4QdNP_o9e&FUnBwjdCs#oZDfhMh6I7*C<7=Qh$RjSv<;ISV}nG6CVeS zTwIWf`C^;$9aOT>iQ)#{eVs`{J`?OBm2fN}@p=VyFGf=Pz-pFXcN~~Y(j+!X&fnnU zPpT-aT}g$)AWlwT_LilzAsQ)}odeXEm)LoX8iBhbj}DTK6!zk^X>k zA-KhZz7@*eS9RNCN|DqCzT?ag9BtJcHee5^dA z6snc*+E6ZCWgc@1l@O2Mp%ONrB}la!RKh!`UHJFO`uBdX^{?0BLB1dxsk@ToD9lYq zH{FAkKi?XleF;!5#6)RApAw3EesKF5=l!P8GW^&mck=5Y^oo6u< ztMC_y1H?zU6EG&n^LJvDY3CU&iP9CL=Wm6e6qbjGDB|6^EYxP7SVj`U?Gj1Rd%^ zf9W56us@WhM<3$<8 zcjYsS5fL6Dxd0jhXZyk^35kkUiNmU)+gJ1wAHNWVj4Q98ccM?!g9V}&kDG3ipSq=7 z_i`7V?RYm%->EfMrTf$oIe}Prg-|cccfk2BH=+TBQ3V%4Odvgsw;B6aXGJpR)!nz#gTJ1v7NziDud$cpgEYt; z6Nh4#(CkTgP3c7Og{0FX-&7A3OK(xt-Co4_iJWo0eN~P%2BQtoE;J#(+uh42RQxn$ zKnN{?K%RV~a`N3^5K#30;O}q}v6``65;jYCkA$@nE|IWMLZgJ2NH|bJt%RosiFiMj z@Iwi`5^j;OQNm*~oXX-U()~gS^%61(m4PDuwzR}68=TPk0ty@Lj4et?r;fHCCrp?vV=1vTqfaK2_KNKRl+t2 zKa%i_gt7cFFvc#FFiS$Sgx5=0DxpKdl@k73!bc@+mhdGB4@&rvgkMS+L3cUfmn30| zgy|CINT}97o2+LJwce>8&H-00V6~LOR*!&Lj|$k+yZI&IzTn2*zxVV%ue{P$wY=H@ zZBJH{bvdKgKQqRqkAuz{|BbFTq^8x3uDMv+&Bc|r3cJlvUB0-oxFVWeQ{^&Dt*Uf6 zt11iy+|4lBHukE~Hrm9;FSo`~QRTEd$JuM_WS>)6yr{x%a8(&9s)}ufl8WN$>Prn5 zjjq0k+?;ktmD6Rg*Ob^DuJWqNNrutY6e={FtIS!oJm|$xRVrc;kt{EFl^K@WtE-C_ z+ttvM%PY%WS231)!<38Xis)FCbMbgrai#m_^6IKm*YaYgef)A~vBP0^j-MxBf!(>R zyu_ZX(!$u-(G_kPoPj54>1F5skNlDM0tz%1d~iCeoQ5igy|TP=G4i>%yxQelVJL;8 z`P$s;7S1Wion1f#OTGp9wAk(fYi_nz8pJX?M{^x4hzfdhN(__vCCdqRaH@D zuW)3f7gQEIs>@K3O5K$ulsiLtwV@LB;$_9<6}-N{%~b~1Wp-yZc|f7dnmbM~>|Akn zOB@zTzpxAh*fP>**lT`tnxS!orV$$dv~p+lk4`{Fs;0x^lJr|eA^vL_knwkmt7rWG z4H*c;FEbFVZ@m3qn>%|(t|cRVT#m&OTHRRa2O>2X&S`f!%k9h1hoC6c?n|u~Ax%V7 zj2<44MulyhG*ok@qmCJJYwRU%7ge+X4d+OYdzX#KP+E?jtg?8i9ZBV(izzRzD8H4O zx9maki!0F!IpM`s4tguf7deZaD+FD^_^a)eHp7(Jxu$Ck$WV9N<3(`;hQz@_MDly1}bA?Q#H-G5C(f$mf-l&NAFX*55SD|GL z+NeXO?C{}csbsIM7)4iHExP+)_=>6$^fGd6KzB8+dv`xhcK73CVe#%t_W7WM_p5n< z?(RIsi|!Ew>9AM2mx8|_g)&pUqS|F&YLI#19r3yHt>%{oN8)A=f4ttPyeO%%@j+D$ zGir48C>|zA$1QF<2ApbFvCCae{pVR;d&ci7#!%e5FYK^YRM;06R|Lj>PC&K8UQ%9K zZnq(68;>sVUn;9)ZdQRmF_TEGbXQaW?L+@CvC*^eKCDleJ|Z_aHl>ewJgV8LJ<^R&!b_+ zTn(Rp`6QfL<;<-qcggOJv8AkX^w++>ejS27nXhYve5z&P(D}^7ef1uL$j5AUIZI<1_@lVTB0dwS zbAhg<%mHYCslxwm7y&gN7lr;%zB zg%Wi~{2vUN!)eM#3`EyBUb#17S;eu1jSa6@VhQ z#0!d7d|3*gD)qq{+P!{F2&C70{i4{qmpi4Q@_j1kE`*)Rhsr>F5u7HT5uM}yN9u=~ zAC+%ufqbYmsr>6L2ets;1vgawr?ad;JXHF{yp@Q2QETfhE(5QFRF74fg5{act_Z}Z z(sO?0xg2Tro?`E1D)^9&UPJ9K&ObeBS=45KOnR3E(sQ7WiaM|iaXAsE8~m#P*UoN9 zYTFEQOr<|F5a0RJzYvsHqNdd#T^HIgaY(gMjZ{l9n3`JN6WGK+dcBo*6-t%LOZ2ML zzN>g|LA|COeI)f-b{>OTk5nk~GoeR)BC04x>K{a(L;V-koqseI1nbj;korXQo*my( zaGiQV;zSuQk7C}pi9X`ybEc!x`(x@)_mpg$|HVDHqQ)O=r&KD`Yq-$wQh!^9a5O?K zLatPviyoXf6Q`#-FZaYJoIy%5b`B;o~4&| zC|&X2w&UWvT#m3JY1hl|Oxm#hEdiO`(o~s<{UH{i5Mupn|Tdbj{hMr!>?y5xdyg`k;n;qLb-Rw}i>}JQYiEj3Ldf4yn zVW(#;L(`+DFGKCLCrNeM3qzY_X8cV8zn0>En(?YX8`=r|T?!85%RlPPh06+*2>s#e z0{o5V?&GBk0}u0gG$skjl7p59+((kheoY4A(6j%ue`@95KX*lES5x{CZT ztYL_LJdwfarF9L_2`xSN#SW^ZN5D$hDLtZ2&>`%^4Uw*z4#h*GGtCreoCxM;8eGal z+zLTC`Kk_aLv(B&=&) ziWO`(I~KK7^cm}0$RC79EO*`2AQmfM9yu1lyx_4UE~oOw>bN9O&h|x4H>6jb2>gfj zGq=(*8EG-ZPjNHEN%6r{BK!)5xF{Zm#WsauSbe*lHhjPji*bp8FJ*3Lb-)IG*=?2f z5C^Q_xebeX?hEUB0gGJ}4~3^N4E`AWFns5v_NlF1U%R>%0*3JQwd>c^CPYR;!mw`L zx=6;-(rT@>^-RlBFUqpctA+dkLI$g~9sv!hwe__K#UN%VD=X7#qiP(Ec zstiC#8Vev_fqcakb0D#ctLrhbpm$yKocHv3#+W zF{P?Tgq(vKlZ#$CgQcTK&wNni!xvSylcQ^jxo_p`R|A7ZLKJ?3nANkdzk2O91#HP(pZh30!uYdE~=9bo{ zxBc#!-#`1@_UCuJ@Zuj{dij+UNB;Ew z2Os|VFGqcU{pfGU{?~u~UFrC^^OH|M`@HLmFTXl|;^e8*Uw`xM8C-eGG-2Tpk$s}H zeWPPyDA&OwPqmfQHWm~#E4O2t*!CE%Ba1iT%ydR4@reoSY@!h|V z>cd7I*0aH`{z!8G3yn(ywfp{>1Qvs|DBd&(O&Vb`wIUtDKZO}8?S$`uAVn+fgc~48 zIj-iZFo}Qf=5|ca;|PS~c^|;j3B;Wk!4eP0Gc9Ngr9l%P$>Kp@bQekuGzz}nz8t_7$!H?Yv~$p+Lv%^Vih71Yirak;{H}~X=wJb?w3ZFpGk^^O9|vW|vq5j^xj$OF#V3ce zK0Ds4`n~;ftaYwn>^u0q7Em(?w8Gz@Lcq)@HYk07Lz9GjqAZh8mPshfr1S(wa#{=< zk!fQiG}kkIS3h5Dd$d>UKr6F~Hqr(@CXegOhS~P8VVS$xFwHBhpEuSKBftBwzEkPf z#6++dXM}_J$Mfn8v&Q$=vi|q<>x%X9zQGY$6p=K*a8_b_5gkoN|pkqL9Tj5}WP zUgg((d|MRqU1Nx423tHcpieSn_G1R;(5}J0r1pW{1cyf7hv{8WOb?#v(__7wzG19y zdSsdgZ_&qU;_=R91k>T0E!?{w&cqpgrD;`j?<(2~bWK)MLe|!)Q!aSc%QC4 z&Ku*1E>ijY9V8zUZbjQu`Fwc{8=ZMe_-IXOcyIOGfWG!0#b;WBgNiU}d?J6y7xKG^rkCx+fp#LwF)C1w)JIIg0ojLO_N#P`(4wAU zp6?8{MCyyO;8*q^)_5wXJ>UuYf@HMuWbiS0c4E7l_pNuL?s$T6YGm8!*#-vO&Dg~- z$7I^F%_23?A88W%fWLZ{_)I@XTv4o5!}}lb+!h6Qd`pk_a-O-mxdrI>+5L>Y3gcJf z52?qLcTwh1fwsfbjiRyrVcvgoKXB~Zqiw&pk+JB9FgCUe7|-iYU&N#3bw}mHIQV%2 zW(xe#kMqri`h(lJSE~>3+oBH^dkl#Pd*p1Tv?_j?M_6BM1Nyq*8_7DuwNicp; zH2U0r=x^iLpxFbu)LN<1Gxk>)4`8--qbH;c(?#o1{XhCBW46Z_+bjJi4@ds)iShMq zm*bRGjCE$D->v;P(SC?0sGEU)iPss_6_iyn%1^d!pPJT-PcilZ%!e{94aUp9ixBUS zXf|Yzjtz13Lq8SAhGfRFA@?L$d7Z)>FL`WS?g)&BL(q2)LR}d!wckCMPx$(@M|i`m zq7Mtw7Y};$O!rod1K}g z^cUsyou-iHF%RA!}~@mzXxAr>~WY=GXL@M zeONsDocQ$a{mO_xFjfK+|0V+A$N7MMfsYa3f&Q7k-Y7>OYjR5TWdk$fcg1yul$V@W z%%^a?&gwu@Kc;&I>bxb1zPu?F-Vz z>7)Pf<86tTCCU(OUh}wPxEwP{_24#af?F23T`>_6)`}9W{^nWYH zI)4DgD1LLHTffnVxxPGOL9T1zmh?BQG5QDn9jCJ)@Ymb#r}HaW)0}oYc26QJaLl2?UTH$_q?yJ~FUTDYxM;)VE(kvyLF*c5Ez_=u zv>%Kp;M%f<Ljp(=4&C^oW~Y&IwMT`=P(m;5T5yF!Kl)%!GXo9cEtp}#Cc=Gj;_ z(T;;Kq-Z@ASr!R6*>5R^x#HA9ZjFg02V*1xXFz)#aV|xim0U?UB#K;&0Yzb8Cx!-y8y`bDy;9g{M zyUMDZRu=xvNd=G!I`eRqEn{ce8koMA)42YUs7Ekfo3sHj8wmWfUR?#uhM? z2`QXQcg%aj@XhIxb`$$Xq#>e23Z|U7CTpI`@%O^a_F{)<4{vkaQ~}*|c7W)R^+*&L zsu8PUcfHw9^Y^Z)+9G8~eE*Ma-!z6KAplCzVjK z=o9-r)tqyF4hzq#&ap3YFUAoCE2=wHwhJR>yDH|EJ6-PLiaC|baW;&x5#%O{YnnWt zlS>NzIO|4VrWQM}qiZJ~;W!QZ45biC-=T;?yK`wdjzHMeX2$l0*{7Bj zI}5Aw-4(9#DJxudHkwipgyhz+FA+B~HWhWY96dk*c2;Stm1T!p?8VFMXSsjCxeXqK zRw(wHkQT|rJ;d0%+=hmO@?OD)2ivNsWb?ocO{m&;X5>5&W2ctPZYJLaE}L2( z2M0r|Egj*nr}BkIQNGuajaQBNgo%m)g_wd0JND97Qu&GKL}SD~tbubTJ+o`7v=unY zD}~2zh{Kd>;R=VHEfJKV%DNrIih1lU)S?Qzt7jZ+v4)7rtz1^_tg2j!8c~3=HkFI3 z=dr(1jJH%sbkIURv6-Bisfq<-8*IVGD~ ztyz<(`Jz9?eEpdaJ33^HEj8T5N*Q96gqxc>>@ZtkXa*m~!dV21WPKP;U_e_cnyF`N zXvm=>QwwqaW?}d9Hw&eoh4TE3?4TDGm(T&lx#d+jZ-myJSBY`)pN&HtxI#scJ+~N1 z|4Bjuk@Pqp^`nWQ^sRY0KRUduwsJD@qod(RGJg~=sPFl4$y#vQRUMgsTnw}AIKNb_ z&TQOE9X~D_Iz}f6k#&Rmh94W3I^pBfGBkyserIvu*}n-r*=-UwOV}h~`V&XTJ~W20 z*KahuReIR(Px?go*Gfn|47S10#|T6En1n~bB*8#@2`y-Tj*RPRMgfn7(Mm|Vn`DoM zp>NbLs^2JH3QJH2L-C?pgj%^QaH%a?cX~%HGC=9j@xW57k(f#xI zuLGpCFFb!q~%u>oMeiRRdn*>8; zwH)RFm}g<$hWQdk55MDK@?k1uxTb}YK76O2YS+l`+>t8P5B#W1LWBH(cV31R=BM9J z9QcU?Kb`}<^&jL`OP%k3+)sbbpU8^goWK9LtoBOqxwVgk_j4<2^%~uOq~kfOfEHSRx>Axpf{k?E8O8DG)`Zr1c+u{F>CyqTanEkIOlqYWJ89fWczv^)wViqRs zv);eyeFIzg{*w38&-VZJk-zx9hK|H45fT?-`lp8YsyQRp2QCR65>`l9CZSEjA_?b9 zXqC_`VU~oc5)PG6FJY{NS_va0WD=hFR?u@=!s8NlN%)C`iiF1`^htO`!ZrzClJHpx z)%csGeY1p*NZ2T0y@WLqmPuG7;Q|S*5@t!5Dq&wNs6ywT2I-z8pgh>+WCDclI`fEWa>Q*h~ zvt2^3glhcTq`gVPMhR;qER)bGVU~oKN|+*{UP9%xOi#j49*0!x|8_KIa`$yf&jkM6 z--!?Zh!<&7d#B&=z2GMc7vF0m1hmTh>aP~|0F?cwn*U3m6XE~6pc-$_y!5oI{#4lW zdr!OSPlY|d|Bzh`r^258Rd*Hk{Qg6BHJl26$bZl8YPkR3;W#jWj9T9fvfd}n5%u_A zg?Gqbii~%tjQ5{~YP)kXL6<6fpz)c0F6mC?O!*0vH)fqr!sPVRurvsuUV+&R9j;Iv ze-g48U`W58;3F_r-~{)<7=aV~1SSo5s1ARq{yypJ+Y%USh982PVIBca@OhZKfO`R# zCn7H3p}P5`qyGR*Y?Ow>=YgLg|A49veyILE>ERzu#?CqX6HFS6GrYhFj)chq9;(wG zs#71TPampFPx|w7a6sONumo?1X$Ma5aTqUff+u0N0Vg1Q1>HBe)85b3Fq_F8P}P|y`0fQbdjUTL2c|&Q1w2%*Jya)t z(P+rUE`q)^#R-@J^Ad1^KZ9uo9;)k3I`1pTFqQ&33GRnU0Dcg#;!^MvIKg4#QI^0j z1$+;t7I+t6L7K=T>7L#KL-}e1d>UpO{A>gK6y{m-54dFlaQN{89?t|1;ZAVcz?J19eu7PeBTj;EFF{>GSsw=Mf3t8;0K8w~8vzGai29QR_^`wu z0UU|V0;*RjfXy%qfD>Hh0Iz_P%>FAFs<+1hQ=Fn+5&WteX~EBNz>i(1|G+;1^tsWu z04JEVOwdfwDsh4a2+w)F0{k3Cf&VVRbt{Dbdcd1+MZ1D~1>nKe2!nb^@V9F~Gw^0W zKMe7KHZK;!5Z{Ub*Gs$}Fk!7oi(tfh)M11r_zKKs;9fxM&k!fV5`1+7V{LG61Ki?4 ze-0dXBeQlGik~$ww&Lf4Co2Kph9Mdb1LoZg9>I?V@E0%?=Y4=5NW2ShVzKfz8I;%CJDC<~YxxPJne_JD}r z2-pR)4ekVg@t~mpKEMMolrJA(#75*DxE?SSrX6@1-~^b%z>R<=m?Oa30plM+{REx> z_zKJ!;9kIqzZCIL2CRo6{t$FM4F2d)uK+i}*nn>a+zCT890$DcQIrwfaSt`S4Ti$5 z1YG|Z;)HuW;A1f4zX@>bFWQB^0`94RdtL>t zzzNpw74#6Cx)1FR?m2+B!BE*X0?ungp91}A2jJ-a;057;)vuvm0e1l&gP9DRVEX|) z3IaUgAld~C;hzAezb^8U3ApAE=@b+K{{7PI6*p}ML0n^U)6~5iy)n8 zB6osx#)xo&jS{DGMs$9L+zHZ|7s5G|IGshI^CIL8uBx;~;l}bVh@4g6kws z=QQYS1-TQXa}$IUq;m~~6C@pf!U>WdKj8!~kvMAjf8NiBx&W%po2;AWZ*pv^+0@qD z-VBE>oPz^6@}%YlD4F7$=YJxGJi|imYOZ~TQ+Xlx@E_fwk=1tC|gc%(LR;* zRO(Z-X?qx9Sd+F%-;~sp)|Ay`e8T*M?}@G_jK8%u&u=bjE^Br)*EH8Q*EcsdZ)|RA z-rBsac}KIinNmH{>}ytIqU&1yBanp>@{^IMBr z%UT_+HLbO+^{tJq8(W)Nx3+F;-O=i8ZEJ0BJ<{rHRa(1RPq(tCwNKYPz47TCPak>u z^wZ3Uxf-&R)nsj&-&E98*5qiaX{v2%Y}(k=)U>r}ThopvZ&O=Sd()Ao)JRXys#~|>@>#ANm&=vQFOhJ$7I2lnGX4L*|5GG)Ic8B8*J~Zt9J?SZwC320 zCQY7NFy-c(uDki_-xo}{`oJf4n)4(aQL zj+}k`6=yXke=m1^wz&__p`wSIJL&7(<`cP|)aRegeKp?M&39|~?B*JMeY*KLeSJz_ zFPuDKlF&Ms^O5B)*EM&ybKUdzr$foKZLZ^7ow7T+TvoQrH6}}gtK^!mZ_6}9?n!pb zKmL+e*H)w^LgO#TRaTwM-cP!a`-w_hJN8|r-e!Q@?7d83`yM&!Y^>S#`nAVnybTCyIj-W1P7X~ z#au&12HfetGMB5YpFwk71Fow8nHEID>N-+ajd#K?@XGq#JoV-Y zWYsc3Hm)Oh7uWaVndb<8jDh5`Nm|Ne^vtf;5uq#Re{YUj_2jw{Tw zqBj)gThVY~cPm;|Sm3|Nf3g1(EAnkY$o|ZVtVk5sTlU@xTZQZ$J6;OfTY~nF*6s~f zY;vNawm#fLP=a>rj+X?OSYg?Ftdcdi|CRnL{Nqwp(={v`E%mS_Y)bfAMrOMrKj+-q z(Te$AzaqyK&Hany8rvp=gCFzlyeONpHmP2{G@G3kNar;8CyomA;5snqA3 z)K8PCqO_^hYA3ZJnVOfGI@(EnDw!&Zp32+DNv%z$V$IU2iP6IIDs>&H#VZy`cdxDY z23Fb)h5!;t)vv3jv`LjDDYfBZkVC0=GPV7o%1QKaYTt&(O-|m=lBw>@y#IDm8Q>BNeYJZcH_nu^G8>t7K)XAh4ub|?y8!{@MsqdF+ov=40b^B+dy0P05 zmhHLu(j1pnyCU3M4W;q`CIe9Y&3%R37s`EXM3$OBNmkTd1~94L-g%v@L_JztXC-P@ zRBi*WlPVEBZooYX+$NVx^)*@dU!or=Ryzw#baWB7COsF}Cs z1>LG*Sjxq={4BO-@M7sOnUgd|&q34IY4y_314ZS|xY3T1O zJ2O7zyW;M}GMEkRUzIy_$n@Nyr&Q+EW&1_`OETKlpI8!1G#H|Rk_}Za2PaVInx@>o zE;R?PqVDe*!D{QLckuqJDeC@=2a;8(W*ElA+VmGgQ>Ha>XQlw6o_V0BA-4O;%W_=J z?m7IIzjTUGz^Lc+KAHH*_9(pQ*V^No!Z!HQ9%t;6_SiteFWMvOX=;NX^}O2V8UETl z>-PQnXQ3B86ul&Wff0x1&-PqEHrpNGf5~!hsKNI5lebd$Kr~cX5Qqi}yGJi7%;zC* z^u?E4>WnXwLiTHg>yc8(o?W<+YrtNi+wHsJ`k;NF+}>z^yyGSNCo5JOXh|eeYH>Y7 zNWgB8{^4Dm9jSja(t5iM_~Kmtfp#>=Yl&{|@m1{O=e)ng6-*6Zn5b zynz2b<2{Xz1ns@_|5)i~$`lbB*C{*EgbD={%PaqC+3q>VQ+LK8`s88OklqjSIQ4Y; zr0R8qsPrl|mN6?}KUVm1o2uMbIG1Po{20j}?R}YC7%I!^`dW7Hb9mCV4A|c#M^5_E z{iCpHq3AV*<3seGF(LcS!g{Dw*k8q_jq)Dj@_QHO7MdD+?^#Qap)dCp#;N>W*XYWx zr1JEc$esh?BK{}B-N3nMM7FEkZcq!3%yP9%HTn7jQ_l(Dw+7%9z@G##3P5N=P2uyD zeSuxGBp+9=z&0D$cn8*5VB*VsvNBo5J4 zS6(r;(Xt!cJWrhU6MpuINB;Wn2hu$m=`B3}oRKFhBQ29od*Ef=U9P|O`1M~A>A%ZJ z|B5`XXXM$Oai2-2H+dX?HC&jl2l1f29nVwzv`^7GMEWIj7LoT9aUE9QH|JPP)%A2sCGG~`PldTd%1&%rqb{azB)8iRN)_mZ!pQ_AhSlwFk< zf!EUzQBNAwpU>BY3id1m*_4J%H;~;ah#A>&Y_VJn?=4ptgbzRn*-Zzho-L`hyTZpC z^)N$i%oldBjW?dNN;P&BJ0(6tigI#X(*9ss@n(_h$b|3Vaw^7c|A1X@#R7#R%ZpbO zzq8PFn#%>WuO*!&;k#9^V!fwaAfsm3AF1zBnqat_afW4wgvwQtK4H0KL!c>;b-XK`u6^ctyhZ4|0nO@;c9b6lVQak7J${UFYJ}>bKJ9)k{StSJ38E5RP|mFvU{d zFAJLpbzKk>wLc15gUR*^+58K|Z6{AN_Ec`U4(`m=;qsJpMsMvU3F%#d!l7io=2tQg z)e{V(UfcYsQoXf3$ei%40aRSy;^Us$>Z?%!QPzB!tKturb~#FG(MOiO-CMIzxUtFh0p>#wR_f*Ae+3VD^9^?~sf6*()6&sPj%ajf_VS|k8T@hVv{cYupw|M3aV5t6G zvRrm)7YIa}udybqiEpeel&GJK#=pGXHN_;p`!olkM14z1! zi>~|k6y)%f3m&9X1Q;7^&wD*Z6f43#)edbO+>zk`n%xV4%O7);;?2|_w?9-=o+C5>Z-jIZ+rSm68sdX(_MOk*u{3wN{HG{f4O91)r+9G zK~YP!gu;UpzN2a0NNaZZl!ULVzRd|Ar>@2;rJ#?3Ld|myJcR6eU`32)6z1RJum zDoXBJa9y^ma&*8u&!1O*=3VvjgaG5`s@8n!HP};mOvrX`6We6_Hfa;(*+CiVusocd zyD>-V9Apj7YJ>ASmzJx5_o|Ohq6X7T878hx_?DEKzIA!RH(%f8gh!|crTd^}N1;Nu z>1@8c`K>eY#ug*cgLwwLusFLI@*yH#l^}BRffV3Sm?jbH4A)LuBcc z^pIUP`cnTz+C1BPD(tP6{gG9)*Rq$S<0X0CdEEvVt*mTM+@$uM%I}#3J@6RqCozFB zA^!E1nNUG_aUwWjPr1F@Z|^QAG;ofQU(n9orklL49+cm;iq?DQ<(=6%zp^v*h`?<3 z+s!FO4xcftf^edr>0Qb0D%|2#>TD!|ppI5McG3A`p3O3%+wY30c^aRA8V>4+KY-)J zFf1J5VPkQZ_V#+MTf4NmyZviDmh-&c)G)-Pyx-Y0g}?=Si8&i27* zXkT9ZG_?{%rO;#4ofI0hyX~Xk-%_xY+Rv2wHg--jt9k9STouuw`>e#e#2TyQz@0B9 zhY}~S@^L%i4;Ca&F)}z|Z7`aj^$YxL@KfFv@gBz8 zU&MyN|4Jkh9-;)ce%6~{AoAs8`z%j4i^?zgilTQ9vUJeG0bKeW`{Y<&dbuwo_7$l2T^qB zJr2FdN*uEqsFlt{bl#d-{KqSDxxzO`S`(E=(#A)hg)zB86Barx-_VR$s7oDgda6oo zJ>2bt^=5YoaQV~b%rk_igm3d;&2CU#xKsDf#xm)j>s9+S)!9Nd=6Mk7rnb?J#RQQk z>`nu|T)>+&Sp7~wZA9eMXU$vEycc`!}>Xj2!PoFZAb@)*Ef z0GPid*?x3~X1lY)_Q*7Wk1?RI{n1e94oQQX4EQMlA7|M9w}1@WX|L~MZC57+Sfa5# z9tyR;(Jiv$j8uz6XbfEoZ_Q2IN=-UbVjZMgZUi8mdAzo>;vs80W+i+L5GXJH&M$E{ z&wT-^7xO*LMUPkXatKtlAF7aJoC~aVv|-lEv%PS7}LnxtG)&6!XE_7ar+XHUZa4Ndb z3xTJEfZe;5`;wn$;OaD96F)q5&NYeVl2+$2$C~gd=A9znksJ%r7K&WVeamFAfVTTp z?wQ>N>?Zqtzl~wTBUc~mn2<;C629@Li$&HeO-M&ue=!i_={;ww#%;P?2cqGkj?)gv z^ip-ec+*mo{NtE&#XJWv5OD%Xp7*&?7a5%YVDXYT+McrNc0*wS9e3?@>Tp;!9@(km7x( z(?;qo!2ZSfh_2Xq2`l=V4(^r5F32vAoh$K>&)#Kn)!OdXV{|NW)+w|`4zWbPcmB3` zzTe&z@5Jr)xZ69QbvOT8vZ_-ayEBKFSG0>?4L6nT-;ilw{Nltaf61q}2CWH= z1SVh1Aht0+1UjF@i{FsW9zU6fP4N@>|8czFjdlX+@rFzWMRXIMEiLd7MEy}xI~+gdMGxoa7xe~TNbphw}SQ;{;SMV8SXI={hO zDlP_4o81#3P%E|n9v%s zw}4#O=&BgB^mte!z9Q8b|hw(88!s|(@x(!@ew~gj_ z=XKNzTuYJ*TspE4wD%drks9$mR5Mt#6#rSHFR2UV%WBw;MdP$+)~F5?p;x;sdkrn7 z_AsyE)})uT-s(0>VV?__rg7JmyW+V`Wjx8eGH9<>W3jd&y__`TB(($~M+RqmYv|@k z+kGYaUSY3ZBsvOzs)@-`%YUS7%`HxvL_w+w1G1zL8>Jm0%|9BiVu(kkgaMSy10lo` zvX=>$chJD)_Bz~m%l*+CYq?h^yVbtVYK32ECSEW7j1W`w$4awVFBC5ftU#P=O5 z&-Q&|05-sY$mF+JP;%n!o$rsrvbFGc31 zj{KfSC1eB z?B#d~V|(5kBIA+77CvHISJo-{hVW-i&YO(#JzYbVyV}* z>LRYnEJETGricIreqf-a_m=OoUEcdX6&4p_4x~G4W^^Cd%sij(t$CYt)a_DCk!3f8 ziW-PN+CApU?wyxD!;3J$6F(Hh5IWz7&-J%ReA_>d#DavhoZgDAt_MTJyLot zCA+3iVm_xdSx<{LbSuz0bwE~nY~MPQP|t<<7YB~<60}ZB1;EnsBU^b z8nU-sBDRufvG9f*?)@&M$gD@cShy8%FgkW?FnayQis;nkI9S2h`Limbchr~L%qBP5 zJJeYcXs|CTv=~vuHNaXh)(~e_`@R*Ts&?~jgNT#&lbI01|G6ciwZ0KtWFn*;sK%rN z)nR~kpibX~UT!WKw6`6&M2G9(qiULXK?Gghxu>Hj_FC~$h|M?JAK%W&YG6S%Eqe%JJMf263ILUXl=Br1V_jz+1aiH;8ZhAkk0H4lbzmF1MviXfGl8 zG4ULUGw%LRB4K+50asP55rVu-^2B_@C>J~ZhIryp_ck{`Eb%EIJZ%tsAgI?wL1I3+ zM@-oQikcjY$$@qKjS!8L{);D9c?c|gML$7V!I zzt5FcI~Jr4AgPnJIdi`SSte3DB#}ROmUzW9S!bWgvn&&cUP*5gw_A+8xZRNh?Zdv3 zLHCfY%2Q!4)9R(h>(R~eW4h9Gj0tnWmR(lKxHQh{VB38;8Hc#X@ZVc=tTFj_@Sx`- zzb#75M|P6gnU8FcQk_|1>#4NB86+Y&`fbZnEVS+J2m$eK%Iw}hv!GMb7`|SnDwa%D zSehvvup*Ht-ldnBX0MZ3zg7E==wZzRGS$~BG4|{SWcqL4_kfND=;al)7oD@+FG4a= zA8GCAtzgT?6S{!PS7pNAUmSf4xh@nG-`JC+7r_RK6jW=zq+Md3v*@zYweH%HV%iJS zq;!_LT%QKF?$+S|TO4OagV5cSj{1szWzXd1HL3E7(}7|=>ByJtFH8MJA^RiUEg zj(v5;m%KLP%Z#E5yR18zE7u3@bMk`GVYo==wifIuql2uyF>29MhAJc@vzD5|0wDfa zS%MfXv07__vg{rB2;Q0zXh<-6$JUDI1T5_J>&40@<5i3LKwU_wQcM+{2=22Q>Don+#nDKNAE{ldD1Y>5?yuMQN& zgA<6;{a|^A?U((B-NYiw0JT=#A=z?vTSY&#b%AALV@ZqbZOq7{w=%9(=cV!l@$|Fe z<)NZ4@Q8yY-zN8%B%^I9DzdXOgOF4B0U14X;lZ3OP3(>=Cc3ql1mr#FT<8SiSf6Jw$f&GU!~iO z6jskHJDA77W$zWgv4bi`;#TxZ6pE>y+{EwHKA3-jOXIJzqAwPX7oy+ERs`c?<6fH; zF4-rl2BZ6Wqu054wckxI(%A#{GW?~EGxuawxo7S^Qpi%5KKVZIAinzrk{86{e2<~{)(Id+WD);II7zmG?(bs9%>D%_+L@9ZAU4k6ip+O!(2Ih=^b zJq)U*beRs_cHkWEyxhE@1>xMG9V)woN}8v3V6`FMBKxgyZgag(QpaFP>n(2L((#sH zQ7g?BKKlGvHyVpYuVyuXU4c!xvVtm75kWLI>&)E4D%r%@z;L}iW9?vu*IVH2(huo20d1n0Sq!bN5hDz=& z$3kVSL*;CTiido;mOVO8jndnS)~G=+&x~8zu}oCkk^yq0-gqs|YC;(;Ua*|@>`pvl z!N_3<=PY4H+nB=7Q#PiI6w6LGtl!?`*A0vERqx3n_2$x$y%Nv<)04AZv61Z%gv!N< zH8FH7ou)wFpP@V7V}&z?A{LJe+nor!$##jNm3n{RJeCWW)CIKnwL_;YDwTG#rE}0> zUI@j?vcw$WR--IyaG4~eq9#y#mOy7EJFasL*&QmdiDgOs37VmsRVOq5Vex60tUk#u zVA=nhv5GpQQyAYW$T+>Ca(U3MXC(IL9b}%9{UK=|LiS;-d)eD7?Bx}>H)qcZ+Sws{ zNvNp4O?j?Vd6^1(Sh!P#eIez&Q@K2zTVW5+3)(Bx(Ji!zy&MHqSLM?vMceQxn6may zyAY=AGTF2Dh;xjFP$|r-kzWl|1}f9>F}lw$dW;98<y)r}bV1m$(pv#9l(-bL;hoPKF)vda;sVga2kTA}ZIU5G%i6L>;n$O4}UGE54U&pPZ zy%LRTZ;OUjG8|Xr*&nEH%yYPa)%$dLY5bLG{NH!i+jGD3*8X0`f!O(3YB{MDc3~lE zj@MUF`=z%ggxksX+3(uW3)({qvHuL9w+lVvAZF;3Z0NB+q?tlR%?yHS+!um{f_-Sk zrein8b%h$9-)zW8?zcBmv)@nI_MA;nX*wrS8e}HIAhJ$< zp;By}g}e^tXZ7d*m7ix)x&JTtY0FKZ?)pRpJ4&%5UwUg-G9S;{(Yz6hd}G`1+8&IVdTy(OJRWn?psbyz_?f zbbDgxag`oka3K6QyPhoZ{zH$iJekMJ-we*KJSrH=?HVkpzqJcJLMBE<%W*k&KFywU z_CvOJRm5@+6AzdRSU3Me##{`7c^AuhUxoeGz1dgSBY^>*xwjzfp1GHfFU^vG*osQ^ z3w&>lv>#I5-$$fOoKCu8Nn_YX6bn;6Ykqs$jI?;lQO$a$`g|Eh)$99KZH;v z1}Cy~QqqrTd5SnhvhrMIK13|z+Ktpy-UaZhZ{9PJmy;1oKd46*$Sa?&@KMTjmCLn= zjw3PlI^A!g@mmc)o`=IAF+bBQg+jX3~Szc=|w+G?&__)GEMV9H>7LNJ6w@;RZ!puI8S%RMp`UF?{hiZ1R#C6c=x9->MuKZ%Yo^&jb_)KWK zmqCn3NAX=a46>3jMz_Cl|xy@|}4bZV`cQ4os z)D=i|JHuvY9_z+r#eYN9TvCHXLmU4{Z#HDRWh47XC4SAy(k8vYhICEgN>}Vjg7|6;!Pv+;QF9SK86|92C39u=;}MmXKJKXoQ*XK$!;SiMi^iWK z`0SHUA*S>Ti&ap(d7*^M*ey~B`^x^5JhB|_Utqv)w}5ATBZ0Txdst+NjV|^_$6{IC zah{4-G|#+`W|5{*m%qRUi_z!#8LMS7vqC-c51`#9Lf-bg1$MMr$1`pB%RE@oF?xIw z_#FM>6z`ky&^)s{)Px|p?vd0-*cmJjx9f+acu;R&t09vFQr+JqkJZToC3z%U>2QW> z?-nXCPmkV+W8cz5B6fbZTDnY2^$#K<#l85pMHG@mqGP%-!_N+%PG0y<%(c=FoZR#{yIzC6JS@qN7t*_bSaOs+FRGrBL zfh@)<eiQMln_g@P?Uzz(=$8i6Vx&JfwQr}hP zv0l*LHur^s_HT2qj^_S3bH7yXA2s*0v;>mT%$8c9$#_jNe(C6&`+e4q@apZB$et|k z{jw{?BK$IQ$SL01w?xI*!5-z&C9k4%RP7l7@LMkgEwVp*Ix*zo`IwejLPUbsw!4&0$pXN`23jLScQ{wy})Bs zg`9ClUC-!bwvOr|**tYfcDopMi!#~0+bKcq!J5PFEj*{#^-PjNFHS^9Aso+GUFanQ z>PHng0Ye>DX%mu9ddtQ?UQ|r2WK4OQc?~@I87Ta*Q5K+&pV0zoC*`G0{B?8n!3wo+ zlMi2cJ?a@7nL|!>#Rua5_x^x)gZz;@5Zd_RbLY?1&yv+IZJ(;Qm|DNTdDnh-~Ws@vHb`s1ywfucrHd@4%<~$bG zD!-Oe%8V~z!ozFTGlGKebfp|bk@6S%+k5RzM8qozdAcvzkFAe+W}t>>tf-H~)A}YO zEb#!gW&k*LwWN{h*g#a@lDDVHyOXxD>m*s;K#g~j{E(~?@G7BJkXEw~alNq0TlYzE zcZm)$IbRrQ&GX(Pek$2&p95o#-@dPU;N`3)<*Z127Fndtqql~4sKsb>gtCr4h@tXr zVAit_Lgd}V5bR&z=7G+{By=*RwQS|F`L3j9ffWHOzA+QzE&~KHy$e(|t|ylaUu{sn z!zWIm%oUV-4n}z)6Xi}&;@83LIG~Gi!4+<=6X+#+4@TuqjTQF_bt@Cw zaaH5JV>q^q-)erJ^2@%=6o3>sqcW++)iV&f_#Q{ zUg*L7B`E2V z{cR5Z+XjCtPygeBv0`vF?%BWV7G z9RUjeL3^+)AD+O{P0)T<))NS$FTvk;-bYTVIVv8?*%XY_=LLz>ub5a4d$#A<-CA<< zQFFvFi;J=)8p@dt0wNfD-&#tuS0mm_fYjEb(UZvp#&JA*A8v>=WJl}rH0z#ANm0WM zfdmFd&stlR1r1pwStzO%^L?yS)~VAR@RJ6-*a7#{;7YcUyA!))eD4hLnc%eCYY?Lj z;`TLqDCr8~2Ps79;_+)JWwe8}DvkAW8Vh>yv%u=@U_ArY!UE_oa+L{HXx;@jXPHIo zr2P0{K&GVfgG1#!*8zaYf?oQ_4K;GBDCwY}K<)eU$;O=B^yaInR4DqahS8f(GR>0e z$oEpb6}?-M4}KvM{b>D3bmvJ)4IgdUi!>F-d>PY)I~&#MF!c`DF!gg!!&H$phwXXI zK;HrytuD~4d7cMm236%YSoa&OTQwFFZmHy5z@!h{{HYM~U9VAI?XD9yT6PzypjXYL z2B9cw=o>Bw)bW&q>iFzxsbjlC)UP`^sGpDw_o058cH8=Op?;=F-#5IcTk)O8dtq+@uUWI;02;jI=SvL zgdYV_#IRY5!E=p)UI8>(eX^lH2ACty*A3QL2J1+T)!$$Z049VUGAO+a%6mr&A=z4| zmCr4t?A078X9z~?2AkYJ?xc%dYO-$SK3YA{By8q^`iG$-)R%s&b@45M+V`*52GG&P z_g86M6qs!5TOhhjdks3My>_kCIw@!w>*2p_KF`&rxyC7nBNu_SC+-pk&5E8Pge`7?!5#Z0@TT!@U`n$~46D(+(MM#b95I z0L6QMmEAxHlM)-5i}tB3f{yV4k=Fdm0n(pxMUt!3J$8=h0{`bj`^tgE9 zl6!rel>y?5?%PPMeaCOF^*+%Moh44Pde+drjuh%Ym^@_dAz4EXTeA&DxxqLgTVs4E z0kD%Cj3*7o@nDeoX_AETD#Q3QCb6B#{$ZBJnIzfcA4!##tA87eFSltHmbo>?-DtmB z;b6Q1hN|Kp6N5Y5YS;oE|Jf+Heb17M(gM*}^Nn6T4gfA>-AO&78T8y`KoVb!`UfMW z+W@cw^-k)4i$S>x$lG$NanwH)gpoYj{-Kf9tg76S=IJLi`-ciPB0QZG1a&sF0=6|Y zWpJJ#I!?x8NT&2WlKl(5o=E{dQ@{aMNTU8SIR244dsvy!?pe}2;|P2B(2|Bb%VO1E z6KfH@CA1Uw+QWu&zma>lz)PC#b>7hO=x`{wUxk7$7!JxrzmGMAKPjs)oDD`MX@Ezy z^gK1XWQ%;aOUV{ietPc`Yj9vmYDi5X*}tIsZPcT}P&-{y z3sKdRg_=K}eRaE`{j;nB#e60Xkf?(8c0CL9d_+RjKN8yO zxwHKv(=r+rDp_*pS+Tnu8RbJ78TmsLBXJ8yM!F<#s5N>UMBFw+kPa-2REZ_Jd1jiT z8}JfELYqvvzm;;UWdOH-EP%?tc!2ElcyLmoJVWV0q2yg;7MWJQapQJ1D3id8y`c*|g3tGcRdS z$K=b*f4 zP|6L;xf*4wK^fwpJYrCeGblM4grR`be(<}IxqXRP0n6AC+E13)7?eqd|93( zr@kR);u|f5d~%w=jQUB3c|D(yfIDk4Z{PvtmnWUsfIUl0=6^W;TQ5`W(*|0pJ+neh zz%vJ!$hFlFuQn)WYLvbPr4pEbflR*C%?4|%!P=+&w^>H6BQ)00f@R{-o4onUBr4c1JJHOFA(Xe^0FDVM=&Y0=U+Q)4}5us#OnU!Y6;NCMHer_o^jh*uV^ zo@=n?Yb>wOdd*-x4&-gul|8|E+Thqg>}sh3&=fM%y+qR#;Tk><#Lvu- z=f#F*yI-Sur=hv)YeueYyEVGdX{G-F@V}Mch1gxSr~qTkon4#tEs84Q{C799boG}k zn|@p%`gg$r*biW8U_I8*{tKk+2elyInLgAZSMM%af9I)DEnoWOE#Q!SMpxx+bnqc+p4><4vYzcc+9$n+xT>xX9){JhC>tj=OuaQg8jI_P3k>o)kQv|dNpkGPvJINcmrTMsR4rOP)O6`5f%zAl%!B%? z!IJlrqSb?SvilAmA`1jJ>&`xuS0ZYvgTuH`pDYrxzDvPrzDwi4AdP+j02ug?W)*|- zoT1xa)0L7C>G3?+b!9xrDZCGm&u@Ri`3HJ8Ove6WyUx-XIuB7t=~XIU%YO)`vJh~W zPKY$;acEWhR!FWVp=6GbtYYe;^C|U~l;(S#q)_x#L(20UPsCnFf~lGf!fb;eASm6< z6XsV)@ia})W4@Lya$%1vA%01b*St5Gb;K(*2Ja(FZG#f^#V2B^*n~ zcoXi?wXXNxAJg=gTMeJ(sC(X|tmr+4!&0|Kd_XhM@L9H+Y*Gz-rC)z3mVUmZdhgdc zcpt2er%?3i!bx29(cU3mYL*O~WgN7>55%UA)%(AF$ENGiq`I35JPt*P_UQ`Lt)&9^ zfJ`4Vf~{Y@A;R!nFPQd&rqtY%sN-cC;xtpY6ZH-zB5;k#2wcqffF~unCiSdYYb+uc z>eQJn#=2m2xRlB~bDy(=zg6W^A~Q{QY~)zp>x=o8ca);nsn$jGKbAE}^m_wr7I%N} z1!8WpBFk7Bs*^f%!b&i*G}j-!h~vQQ(s`tpXt8_m+e;8sj(HX|ng5HtB+MxC3k$R6xTH5obHgR6vsT`{2Le|L>Y+oyni# zKfd69^1s}mXnEftL}I=xP)X_Y7q8OtzQC|MC6nEW@PoWH>=5#PK!`@~mgHZN_nxgH zgE~VX#c#>~=C^yAU-xSeX(R7{2vyF(?O-Y}o5RJ>?wBs?{%M&Ncm^_5K*J6p@3r%F z1tj^<@*ZONH~CZi-yzxlyS|JuC|ch8KGp2Lm1o%fkB(Fh`b41i{WCM!-9;|g)v!az z`xwKnB>#%Mqnc=)A&}yC)x7`7@AC#l^BXe!{?y*^JIL_c&+uE9$?v&_Uky71zc&fd z=-rb1EBtQyMC*qkkm9%3|K_*#bzLRR?_)wF=IaB$j?3^6EaO&9mvxfqCbfM!HB2hb zRTUocns^x~V-3oe?NS6rIRtu>T53|8(y8oZBtjQ=>u>=Ep(_~Cx>;H>?shyFZGFX9 zhy5RG_HHD)TPNq0_Qz@EX!w~1G2bs45sdMyhN%qQlpog%>QBAeZ zP)Nyh)ocH|{SAs~f5Y(O?vyx&EthfUwZbu)+cyh!f9Ba#`LROLH<33h9G)&F_f_fK zx#ULPcMczpW$ca=Hi-b3bcve#jN>4hI&9K0jCU z<@qB?>Q7p}o*4%1WzeG4&ztnAz?k}~sRm`7L8;UzFKQIGB{16))R;3RpDH)l{S5Z0 z8vA8~-P2(A%D_I-V7m*YXO3e31jlIBNFE-e3 zXJEf!u%9;A)HTF`2J=9&={&21#wGL>sdNnjuH@%?c zdkaWpk+|IWIxiNE=O#QbvdCi1giTS+cgc+;q7x5++B{R1SsXyM0LuExQ@nliFnwd* z2r2_6FT-ftRK0W>kI8*F>_(8F=`+v3pR8O2Se(~y{M@ljSddlc`Rr`rsJT_ahM)5% zuaGcW`Q*)V$yu&LYr8+wmw>&*zxxY+gK{@~gO$P6o4>r_^ZY*Y9le|-#SQwLbm5{! zx^!fzrCBK2u;AT_-{xQc&NUL7YiH~5+L9!9t5=t-WHh7OKT>aCCXQ#y{RZq-x4pjM zn`3g8|b<-wMzCHGszN+;-{rdlDs%Wl`?ybhf4cY4!$%X}Son^z0dYd4q zXd;(;ca)?rugD%6i-tP~d1F7qX6-=WJd*J=eyO`J490QE;+5*Rg5XyM8-DCwj8xIGi~?3lWA6D$uz6z-Sm7B zd(MdoU5l2>abS(i9^`yu?PJD94Nq=1RkuJ*y)p;>W4^oMG6UhIG_h(OUPVh~ufeNR zVEqT2P*|V#p%(sSAeP&aIdHA<{nf1!IjZU?EwY}0D(+S*xS0HZApgI#6YD7>|EnET z7V8bKPA%qOG1_^fdPpa(Qs?3Tr)u3hRWqcW&&(q=)t>qfqi6WXuigah(PUQ#7(`Qf zKZAE8F-Ldg;_N?s{e$#&C5cD$5zker&;6aTeyU9Y814Zu(>^V|dwS1r)`a&}u z78~sr6-C|9sp{KMUA9}^#x(^!NWGHZKeOG%P)DDfEmKGHb71JJ(Os0^((ew1CX}ZPfmcnkLh1ETl;2AJ9liXxHDhgl+=Io+BYB^;)r3;S0Do zD%?d>7`YUTZIJ~XVca}**TFYd3%RuW(g#z zVowyIVtXnot)wxz0);2( zGh{i2he`Nh>YRl%d9-&8pcWezNuI*J;ZvX2^G?F|?5Eg{39@!RL>>1RVa;+8^T;6^9>2m0gePIE)R{%2K8nNtdXUfN@))5|rS3g$!X%Y#d z5j`upynEFevPgk{5{f56kzz(sndw3za$CNuvY5(@k$N#-jQ5~PPK!E&!Lbg>< zVRv4Utgc%6?4fGvK80M(WwK+LZ!55igK{_v%5wx@C^a*?lXBt<%uwh^DBXK_zg_nB zj;H){9#4%|W6+Mp;?c0*R$LQy!;Z}2rJ}z)f>fjKO^<;o`!-Ke(=qv!b1RJ#yCf%e z!9F=@wg;?=5!LVaK1T3|emnlkMls`Mi>6P^ohb{F7PN%M5OpRrv{i;sJ0UcDk5GB{ z8SL?mh)(U%3$_luP>LQrpSl4~FsxH#%${bC8C<)0MtghA(BeeAz1}r3aTXPidH#w- z#e=XWngiH4@>4ZnigB8NhSa~fr?p&CF@koMe?dOAo=Dno6(bEsy|o{Tj2}NvW6oR8 zTbpISp`-cOEZ5P#jOF?UN_{ZVSaMm}^m`+>4R*~KpsxC}NWxPGwr&l;zX944bI$e)*y@gHPV&yuZp1v?}?>v}lV-PW;mD(ysiq&<@ny{UuP=s0YiZ36A%dYzng<#r-elr}hU6 z3GgLk_)=$67Pt$*jgDatw)-XSl4kEnZQaRr8My-XD)#KEE;@tfxxYBJUk&-QY4#J; z=wq>9689!Yf@vttE-!0uc?#Zdg?E*$7t5t_alodf6zcqcz^_&)t;T3C9nD=!366h^ zyX-lgN0hg}R8lq@duz_(mbY6ANuVtyLG*E;H1}XI2TFshReus$EJw%pKLS0`&#~%- z0$$54rmej-dq9e`cJkJ26S}thUu#p<_ttC?3cr6CWtLK@)du8%5JZ{VQ7fr|C7xJR zj8kOk7%Y|h_h|~@Vcz+n!ZSsmN2(Gy0e`4>{zi2o_eq);r)cU1dFe^5U?YTEEb&OG zQ-9sZ)YlIiNuNV0?K4U_O0Afk=J7vT@|wrrLQCzh&tP=x-yKHPEt%jINw744w)gTn z0B>`JGmgF*NwM4JWHbsM;b7IYK;*`|1Drd0O<`H_Ej@ZeWpr$gAS!gikK>&ReH?A*y6+jYvsXj?FAk37Om2zG-AE^Dh20cFv=b zR-gACQ7ip&!QHL*%F6|76Q9YMT5sVPF(qBS+N??Ob(pE`y{p8xxc4Y}MQrqa;I(YwgCJ1Y{#PjU zNm4i}DYU%=GmQB#LR$%%%nt^ux_MNMqs2sfnAZjE^?qJlEqdQyv{d%Zo2jS8&XMZ9 zd*R-D-z)o(chR!)qAkG*t12ef%cMAz(-5p~mGm<2<4r6_--3j{TA7mY_#__}!iU(f z;lk!{_0&<083><)2?(E6dO9W{d`9WHazUHiPo`-crLKK2tpzQ_L>xPC;0gNJBdit6 zc&v5Zu?dyWN~_U>*~G{O#_RjDk&$DHzc7cBHBOxMbsg_4&?e>lM)3PRzv=uY@Y~@0 zYBTPWu;ldt(hl{L{@Y!D|AZ=hx4v)G%DnI83}4N&oC~P zKiXf^tx(S5GDYyw-zB2+kruaA(hxq~$#sw9`cpdBiNBVs1GzW?&30EbVGN^Frj*+U zSkAAA-N1W$G2b!Jp@Q|a1!rl~g9od*bA=aAAMp8pqom-(t1fyoulc~#V^lBMu;z$K z-cj<_oB>!LFZLTr=S(5SEIC2o2O(I}6c*t>=fE~Quz?{{IJz^Gq~zWW?E$Es%-iJK z0_`3bahA&&&gQji&Vg8#;!f>+MHT2GEgAFRf*%+3>OAV zVej;gSYEQq8`@68g^$294qi`ytCl)86R;1#HByq zFgy@aqS*t9?;<{0)_knc*vH_6-4$}oUo#~K_2H$=-sy*JK9La%b?mMt{l!rp!oG;< z$M966VJ4RzuJAy!Zqa9!C4s|cR-JfYTxB80H+jB@X#v(S)Synpg^jn;9ZhN}MaY8l zw!tYo2w@M+v07`-hZyZ}NlXN@|53i;pikw}mB>*=|C#D?Vz-*rO6 zn3Qt6S-qz_i085ffu?NPFdbE0FS=8vn|&dqlGRW77;?ZhFZ_=5);vV=1+nmnIiZqW zw^+&j9@uDJ2x)R@MO~||mYILdcgZ_)xHf0;NSE27Mr#Jvsh>#=mh8HDrF<))OdN-i z0dXO)8`HZ=^}O@kn{BF>Smv(_crbgpTR7bmf^GebEqGwgHNhzZ~oeo)_K@c?cIRjdzKIE$GE>)($#}6dak0c#=Xe|w&CPJd| zXWo_=$5A0M-ygtJKcYFHI9cyaW!(bYSYV_i_NQQBCn_$cZK2G}W4;r>HI1}Sy(HL< zUDL+LM>Ij}CsxC#XoOtSpn)Mb6b@t-$NPDPfcgWOE9~!!d4019Gb>8?g5Ejh465~L znWfGL3)8cnU|5DCE__}bVKbp9h3=in6X z13{X761xE%`d!btx_ zbD~}vz9m~ma6XhxBhV_rq7RZMoF-3P*1o9zu#@U4uC8%T9Y42KB^U#fuyN9h(_er3 zQj%~z^6Ip2>3jf6YfIV(B~~%sOpij2=@R8A#gZm1-HglClPDtjXqn2B(()d&myb7( z%GRx*o|;7zfcojm)wdMwM@eIDHz>57ZZ9>nElM6JMwzVGoi)ixS}14Fh*o727!@dOB5V2?_I`pccb)3= zEBx=S{h$0ly$=3+{R;o{=}Y3Mlxf3H{nRrwsI*q1zNMPLmbS;7;hZ$57wk!z)8%vs zY^4l41I1k>DA3lT9s{a+(qK6jb#N;8y};vco!K#|qg2ng#d9j%xe%jfbTQIA4adnS zK%^mGg&1xS(kr`R0@sLndXpeCI7aHHiPaZh`VLanNziu)7cKOOF~L@QO!i?WJKIG) z_mDkc`-vDYSGz@nY5ELHtTsegt@3!g+6N?s^cPwOwM>ft+t_o)j{cBsgh zK*T{<5w&99vFEe-*)F}=!yeT?x!*%JjqpNMAV-{<@z9U=h3gc;;VmKw5DPaAkBRzAM}7pz>8W@X?ZS*hLWuyV3yW#F%~QVgcBG6Su2 z^aedF9e7t#{Wx8n&dRW=RkaWrXVLN_Y}&TM5Ty-fuZ$I_8zgr$mm^xCY?|(8j35n z|3dHn1W3uKZiLRnig}n>5q4-KJJ}>dqx_dNdJ2tEDH^L@7aH>RR*DZIo<{!-jfQQ% z;NxyU%428E3CMf^c>?B@4}=r%ju=Lml-3_~6S6-IiZ1m! zs_V4mX$$E^nwL33H|BdCRMQtdhm#q4632v|yj)O~&KRWJJ+JAA-0ec0??`Y_pAh5J zo)j9$GV^b!>hAv(H}D%wQ&6uHTc@Zi+Z3gJ)<2`csFb&+mRve^vNK8B ziTX&$YqIT3Bo7rkS*!Yy4EZml8#}R+;$=uy$4;75u_;4hCu`LQg3ItUhBlF?h#qZt zc|Zc7E#HZEWqa=bcbm$8P34{V$Q3dqwyC>X!y*Vl866+lrrvms_{f=H@f~!_j!CRl z7SRGoRbKp;U@S3nhQ+C6LHiC%V&=}*Np)yf;<=oqm;4?DO11Y@>3w^OS46ETJjV6o zM}ApM*cP?IoZ}Bi6P9x{i@Zis1~c;3I*Wqs)u$w}TVerO{E<7RxV$yex7c*SFz9m4 zIGQ_VSlo5vZmz!T$lcR&H~kviu`4m!$!M9{ez$hf_9EmI>|+D_QzmSMfep`uy>4J# zGU@#dn8daFOKa#edN>9_?@x(&)-cQ^e5azR(w-e)Wh#*P@ig*<+)%%SuZN^Y-5uv5 zACTl_sI@|0w3`-EexV=pyZ|iW`;o1$f^`H~V}P(j030IfeOr2HJl{z`HQfe5jk*{8 z)zCeh9M4i0lS9R8MFCR#==AwZOvgOeVTK6w6tgR23Iz0l3Wss{({KLFw2D9SaI}-G zJX+GceEj(uIdylPgirb!m$-&C6DakD630-XPkcxx;X4j$Oc3qWv5QNB_K#{9Sgb$3 z`zHy&$Wi^_t3+waob&ms_aC6NspqmUyJ)R7VUzwk!%31y?10t`yA_l3y~?@^Rg6_; zEh-WA?6vyiL5XGRvwH+te+1waXWhZP&fi7%7EGZWeP~2u@Z?)fC3FVdX7lm*!{3zl^v`avw#~;17%P%4&aw9hDMApSDLbwzN23SW+k7qC3SYg5OTpdAZ;&I~49XUD}gx zWVuS`gBq629$Nod*GZlLV)mm&N>7DH_J<`uf#mt|C3uc393!#_bL3A{?$mKIqS>Ag zP2%`eqTDIBNnB(Sr==3*PANUEc^)^3GgFCjr&gK7nI>^cDpBs#OD1uGNt~k-t? zQxBTNyJcsJY@R4AiA+F?_EGK&a^|&_hH1+=qG@# z@fuV79p9EeK5wcS9pbHFstL!%l|3AK-Wu9o1T==m)qC+Gdk0n?kxHdkN$Or3nNikygbs(#xr%M|p ze8=mQ%9GSbH|Y`OdXy{PS*C61wlbX#1WwzP(czp(KOdq+;Mai9cOf08P~9=2|@N9MQ{zS z)wVi_3c-c`|4!BIP6wIy|9;Q+@zA;VR-HO^>eQ)Ir%r8ROr4Sl{PXX^7W#8osTgT%D7Kn&tM}6?^ETyqi#KX70FjyBZHxg)A>S5>z|=PuSEA_ zJ5+HAI>ytsk7*9mlz|G|nt{5Sj)Q3|+fEw*7Q zsY~spc|O^7bci;QdD7m~5==jUWcUHg|y%{eRU5k}Ngp4&PspO5mXZ_V;rTZ^iD_fS{Q zC!n=3!rCfVX^!MuoD$rVSL<_>6t109#C;~79H!Pk&iy1>->ReQvM|*9|{lty^iwdgG?f(+7oDRxlHp8;i z-%JEWx`S|CBt4m~OGSak*#+86Y7fdN&%-2tl^OjzCX>Wd-LECix^wUpxAGM9_Yx$B z-ewHpMP2Zr)ML*=-l;B6u=`oOMP%7R4_>^XbMV^AD!RWuBydfu=wyA|rz>S?9E;?< zW|5pXbwgFO=2z%&7O(LZZdgDrUH0EA7tt_jfNdzb?&Mpo=By_-6*dtmRo~l2JADD| zF(pjBvz=i@Qs#$lnnEspQ8i6;G zC?YyZ#z1skBGy=-jD~DMw~XMMDFW#nrG<1{XtxmEDbxP&U}pTXgua-eW!1|J9#W_- z`(6X?$FXAuzr-NMK75(lZAbYUp-dG*PK1-B9h>B9TIhoCtEs?F(it29hofe_>49H{rQCCf^r@C!#$z`i^x+9ZuRmsU63W;*;Y5z08Zs4 zJM7`0;~l_*j@S8%%IOi_!9rpR_^&4^pg5}?;Y-%j1v<9OXc~ZequrBVj9rFF4HS*> zvWO|0WptU)OzO=5>wdj>2VV~gZfV6MbZka{`3{YF)?Fh8d{ow2(WSS9P7mju5eaKb z;CoD3^z5X1*pJVsox#vXW8CN)37T>njq6;K4X9RMr%~;{TcdhAR&t7MP?ZX*dh+&K zWy`$Qn5A48xun!8tB!Q>2FuFj65?Q4H5cjeSmNb~_h8vle#@-lr@2CW840c8$AWk1 zTk3-kXk|*csAa480S~X`ywY*avx@JMzKbJ+%U65xD+aWC?9RUvOC!BDq-RPIz=A*F(Y^8cwqR?QaKH#t%W zAr@;jBS#QG$X>qX)RtPo&4~F{A)rwLA>e?19+!X)HUVd==dRTRY`;qr@SRkEt%{69 zTm%8(^WaUXb(g_xJ)kk8e2+>Zt9z73q!R`b1KnQVd#tZYsd}9`lAwvPj0|`|A^qz? zXJ*E&(l@O0)~SKs)C0tN4~ONi^=rxD zZ{?*fO8keV)@LO|)I|n*>watFt^2i2N$PKU2(rcms(~e`A9+)ElvwY2a~)r?dPMS9 z+z-s>r+k(M9Us`C2iQzV-gU%mA;=rdcvoVanGQedP0}@#uzV)>UEqF{&%Gs9T}kd* zdEG(Set!E7IxjyEO6$n$PF@@M?d2!YU-A28sVYCw#BryZ)fFy(ecT zZDAU3%r0ZljSIEC5E;9i3xx^8h?B7vwcCe0#T=d`w&bw~+I0 z4AAJxbdUg90t#mSQ~{9O_pmPQ!ldvO#48`(qVNcD?uRn67&NMr1wwo0M9AU}YNC(e z(Nc{!>Aj3)-!)x*sTm@6Yc_qx3pq2t#a+0B`5yHw9tv|4>)lh4A{i7`l{5QnG(2m` z*cHh+^HJBrXLQHbSM9l4sw*SP?jI_A8ARiURHz|0BT2cR+cfQo3=Z9Fp-B#(Pm`C% zxQzU`P`rF)wv?9^_bdUP>VJq^&&zpG%Y~k#S$qhR&|5kjJ$A~$mwK@eWlTAnr@61A zuG-@~%Jp+UMlN-}=~}u^{7a>w;&MjHq?;PNES6T1=>v*l_A{1g8aHXg5FD`c5cd>f z`I00B<2uSB0R$Twj)R!x;g8y2ED`628f%poOku7#S|Ajxtfy6apED7CnR>;*OY-*?KfXB zLksf-kX}|`P9Gmhnr!4=-`#ObBJf=RGkSMOIYSxe66Lk-%LG*2F@rxL*;Qp_e9fc^ z=b&a04pa8>1;QSD)rgVsb|yJ9;t{{UyJldLldgXCQ-aB?zg;gxTCOKaR$|>JNbpGc zTy|A7?f)oodfqFs7D?`9)*@+sUbOHe(lqFI3>%`Q{YrBj!F!`%MguU#gMs4>RS7@b zE27Cx4U+G+7Nr9&PG2I#j>5R#EUVI(=g}0JWqPL1bwrsNVc?(i6|}?K_CiOw@)b-qr8BdP~4k>P6Jc;tog$``gJV_WsJH2h{WCXKp& zTL$py>IDP5K!6kGUy1=XkkZSE){|aNl%bbiPP8P0K&EH48pg!@ht?V#1}_j5Yej7v zQ?qCc`)MxI`uuIt=YwGW-U@*9&Dw8If>T0em)uYk;)_E>mo_O3iPT;FkPl0CP_e^#E;-sbdeWir$|JOrzfdM z#7#RF-g|-ySl>UDbpGe1C#WS4=>V#Eih((gCu7+wG52}|Xo)x!dRva}yyBWY9kpZ~ zF!b0LBfU&>D-9N!i;=eZzhPoeJxUm7oJe1)x-CI|`+v1a8lqzl5B8l{j;-=7AIq=JreNWs`r<_#f$5# zJdJ$BH!?}>x?Rd)v|1ZNS9XW(Qot_Lc}hL}A_1WXg$bNrT_mxzw7zhUUjJNmlD_r|C6zeDRKB&@bs7T^YQN)_?!0wpGG+FNMp9dsx2f5mlJ4b%Hb@> zJCemWiJDqgF3O>)f>>VG7F}}wvp5`>+XvgN2poWO0hCB}E9N5g)J?rUPS?}zkl+rD zb=WFmIGGn)Kj@l@t}6+wO^?-473(@=-B>HBsLJd35^Gp0N>@nK_3>k(uS_!$l~Jyv zO!EKy2xam+t6I&>}D8dT+miXlz|Lfhu_E(Z6awWx+jQ6(f%CfsUh6f zzv>bCGz!()q{dMpm+Jludi9eGe2J315W5K=1#Br-*Xb1gZK!1dHHN=f+kg8(CwH)3jn`khW+%}&$bXG;op&sJm0gQYwhQ2^5lHK5V#)X z_cwn3;P)cG*ZIB0PbiRWmD%pm_9V#TSK9g!{ngYP_libc=iv6lxv6FJ+7#%sT zxodP^Dcfx9PIgAlyr}Ebze>B6B?)L2SRm6UxK~-^GG6+i*K$PSqONxU6Od{^&@;W| zGEjXM5k1kXxKI%CO3E3!EH$AY>No|_kcAswYirb1X`|>MC_b|e+c^<)jgIk6mYo8r z{%qFQwbMch(ykzlbPW9Fn4iN}d--ZBU$WRF0^{_CRO$0xnvB2cvlZgJRF{6O=f`?S z>tzN3|8bi9Y3UC|`lvl)L_jm5#>+Dk6gI)J^EFKSoG9ox3_x#A0fGNa5^XYxw0x3J zETv?B9`NDE2m|czfDsmB1R1x7+O40#o{?$F0c6BaKqUd%pP&w2L(l|OD5QlPo>;iu z^xl)$focKnR$_nn)J_#?uUeY~&r1T+LuZ_6^45j02~hWg;2oGwJ;UrSk4S}^dX-Vw z%*gqwZnS2~x5m>lnJh>PYmV`E42>b8$BMe%TPlbUB5OTu_jWoW$Acw|GqRU%3u1UtZT5y-KIB}#PH=7E;OU3p({fS)UvA+4CGg@>i?tOb=BtS|yiefEiByYz)v`4>294-Dh0>5? z`NtrzMgJUd!l7oOzZ7JeQcc0>U_{z?kJP37T|6-%haZVOuC$MDN=vi(`azK(gh@;L z5<$T^2UL5aZG09FgL%c&(VPeH;jCUYr7ln@jm+SE1L!K#Oqa0J+XU zIuR*rM?$roD}c2cu%&JV?}96m$CS1HS}0!(V==k4B{#H9QQlfZJE1hxV_=c1=v-rOluF49ZHvQR!ibqMP| zK+9~(=hg7HU{wRiIYTMrm`KOcgZZ8{%mfqnMqGG*+w3pgDG#|q7vw3?tlhTAw20GSW9x{-h zQSr^%%Tb0y;U9E+Y2g=?HyXgP0ER~Vk%>ldhnI4}SRYCu;Yl$g!V(WSvy5g-vUKQ>=BRCAO~Hf7TN06f&AxS9+-y%kx1A z7oOVlUs~6_HdecJrRmo7d!A0;+#uu@pPTX<|%p|I}V0gThjkA7iZh*aex74O-XB$jAdk&Y!vF%KJ zcJxbgHMAL&Oc7`r^GrsK*%W&=$*8@~BKgh6422(n7~NPg_020Us6P{O7t&c6No%Xbe2T7;^T0!KK$3$ z-G+KI5$fPr5x1>@?P=~S?<)qdL6$v@&DeC%+ z7g=*LFMI%K=#)#_W|1OZ$J`q!}h4_MEwF*y=;>`41u+ISJtc7F4pCLQTQba&K`!A zne?lm5P!f2i-l;AY|}4)LUNNJu`-q})b-bX$A8gijiZF9?KaXy$H&#p5cKnw<`uG9 zr-g+&b&UKbj}7Y=^0i)a%o=K|vC5om386h?H)R&5m`7!Ojn;z;_t{k+Y7j*@3Z z-LKK;z=|V>fpy-=ZevoocJ_!e%U9XDEwjydtu}l>sO_~nN@)ez9{c%{{k+3|US&TA z*w2&f=OGFv>9*O=m+a>q_H(NJ9AH1&+0U=(+$7!G^6XX1I!Oy^0{oum_ji7S`3>VY ziro zj|#?R-QMS&Yy@B`ORmyd68{#0#i4<*EKE1J#N=Zi%R4S>J}yZXyUT#yYuYxt@0b<) z!cWe_W4*z$!%$iA-6T44jG~;2ZEaFDg6SI8o=fY-2aCd%)`q`6pQoOQ6!occCWz8! z>A(ndj-+5>uV^ZNys8yZ%u8QGkwhttVEN0ryt4%8LLPGJ>^vsti+Oji5Dnx!3vaLU zEG7wLrA#-%t35faYa&ZbBo?H|Tx7Gk$Lp$e&(N}0ZTLLhx3G#u;F9(A<`n|Q{lq7Vy)WjJ4S@Fhy{G)$CWnOFxv zBANQ$)oeaq=D#!9j8N@4`6vq@nE%!jaunMXPI5Q2!@@knDds++uD?T!cnpOG=|%Gx zZ5zVuf_#YJ*##*c(X1Q|0c{6X{lT<^PQpF`!A51UBx8g(cVFWAWM=2rRF|G8tCJ7f z8b74#7={1oXsPSRa>_*rD%OfDH0$l{{Q;8@kW^3HY9<$%#g+XDFW#w1sjQ$L0lIyj zK9{x!U-31er?~Y2UI=k!onCUvk=;ksdyH{(c+^z_?TnxXkv6_0RBXhR&Adjh_tAz1v>^W%I*!^VNed>FelUw7oh_(o*Mo^Fu^50`4k%+f8%*k}a#k zf3!ZUh;AV50zXB1elBAkdwFY9QHsd|$J7g->Xf0n=#37f9r^~5r<+^@lDUoc&l#Q=}rj38Ll5C=13@=WsnSvD{ zBb^bwqM^CTq2a0OkqbmYcKLh`L=~)}vt)G?>|IIzj7%tn8UjW3eB+8K#H+8lgF#*W zm@E`jEJXdtP10zcCz!F5H;>g&oV#BZlYfRWn%?V>*l>|sn0H%97KNAhzC9CFReZxn z*%6#WE|HThci!Q>g?ksAWg;FU;v*T;VG-yWTE{q#d}f0kH2I(jtPnz3B!a$T)5DaU z9v%i)Vtia731dT%5D8hX9>&NK*JZodKv7C{GjUqMs1Mdfqi9m>TG5Tu?3LBn`!IAw zbNd#~!EVRvxJ?2zh6Ittt%;dtftX(6dSHmUm0F^C>ZU4Yu%6n4bnNd6X~B;3fs+pD z40T>VP35>4m9`POfl*IPU*}^!KvjNhlCG(K^`Y||p<`uaO=hFQL0R7YPjbLS9@4*D zcvYlVdds?+j6cZ2tvAKUK923`eO$YS7n|Q@1=^~Oz#E||(%l7F%5GyTWA!x8o^}2Fo@&ZCzfN9CYlsT9$jS<8O==$L}xGh4tBViB`tn0H%_es>vlk z&2K+9!aJ&Fi_7R73hZl3%k8^?5whe>)O4cs^6{3+`3N0+3+~JwAgyRSTiaF+mx|cj z)VjlMPX5#WR_2dzVwjbJa$2kO-nC-rRD7q83$PqhL1@;MG*&TkM(R@V6738O07xL+|HHXw+j54u1B@idSEJRu~koojq1zE!0lC^ z@SuaeK=f9qtbwLX0aVK}2`z3w>}O7s5(kT`A;3o#vI%EiY0zKJZwbGp{FZrw{%6-0 zzmNnaQ+Z$RwhnO#@m-|!=kel&CTHa{f~a755g)#eg!bme&z<1a5~4Q1U22yzV-C^m z13rRWi2EPjdP5;FCV$F zGFIKJTXk>b{J6e{PBLx__IUuT;bPQ~Ab*2W~D)pF^6 z$ghQ`+MgFm^Kea{X_tZX;q(BH(9q>VXmDHB3*b_PFxB+_jHWRSST^>a2(w-k!=*Fw zULhD!8X?@A*geHg~Ce8A#aV&jI$ke8gZZ_Um;DPKWDycK0;n`u^S}?_kAIQgRFox)5K(vg$D{6C zAMlr4rUC3L;`|uVsbnVK>g8I!vPAq#uaOwM8G={rDB6O6NU2XT=j3ec3zn^8CRb^ zEc_Vr)a+j!fp|?WuvH+shWh;%S?K5xZsgxM_1lHF<{ z*OSt1Gy2I>xn7|KyZx0}rjfRrOrzfHtlSMp2$`_AOM>IBL})^o|aV5!uQ zvvLQ2$@ynwAp9!tM2~Bt%vt%FiGPjwW|Vb6v@1K$#?|SI$I^LavDR0A&1pg9yJ~?!h|KIbxRYr476& z!5AC8*E?R~HIszv9k1~w|J*BT+6c9^+y~PO7v~7*Q`U4{N}tB(_#2OaUNoHK&o0AI z?_}m(O`-x4bs`Z(6?m&!I$w49YKlQA&rdAndjn&oyhx%cm|2&l?LDzKkm+BoeQL`J zXgJJz6J5Pf-a@q^!4_422FcX-5wjM|RQ`WfN!}k|fH+uyNH3Gl5?r-ULPM_B$Ua)( zqv^t!R_Y749(PtwK$#KyC9*;6TXyWbcI-eCyT-&mVaGmW$GS}HQWINY#|G`#!_+94 z=a|^ZcI*v0)+hHfk1#PMcFaf}!&MmR`w|P)5%N{lLprECob3pBU|wdDuU%kXha^8E zC8wG?CC1I~RtmqCBqG>H5a~X@UTWmoWNPG_Nt!Z|ZOXin2;s=iBEylh4Bbze*yruo zSMAs~CU(Aw4cV~|+OZ#C^ii_0CiW&fcCH<}!o>DAu_Nu+%k9`I6Wh+j_OfFO?bz!~ zY|=tav&)X{V#oF}v76AZl<4p@Q=;fVQzDm%eb&V8vt#$$vHQ{Q(7edRuCin6?bvz~ zJKn_p&5r$t9lO}X_BF8!?bti**cm3agNeP`j=kQF?PX$r*raJ5Y{w3>V_hb8i;3-S z$M&>iKcjbm=EqHJOFPzS$JUwHO1uPcLk@P9`u%Z$;f73mllD@RcC#J3+m8JW0U@^5 z#J*_9zOG|^gNXU7iMij7dDO)8z_=>cK^()Iv1cRhJV!q;A)FgoQ)Sxc@EU}3=Sh>vyvH`oWZ-=*gYD3mKkwXD=+Cjhgy%(#(sDrAy$gm zLUInQSSp{sE9i_j@MgKb87(C@C++Me57b9r^;}Py14d&uz5KSRdexPrLqQ!NRa_1C zV!UUlegs;{<0)X{Ckja(%XJ6f}y2(QT$YV-k9@`nJnLPTKJO)S} zRz(A_LL&Y=N2gy6x%o0=qi>f#UM`eZ0>gPU>*4gH7wPw9@_vtgr}vJ!M%=7T`|f~E zkSL!-SuBptI9EQe<iJjs^H1ssX0P&xIo%P20a~S z*%`bW-p_!kR85}-9o{Y;KALa?(a}Wx^ja*SARe`Fk508W9(5{FD)_MuT@w#Ym(am< zI^_I9JoI2ULMQCjp%2AFKbFwLpX<=_c<4F_J)dDI7^V}dUZ0@JzKVBI0qe}?a6ZKn zn7B591Dh_45uPW}#!ZEtV;uKpzLj;N8`aKJiRNS+mT}60!{{bwB}WtL=Q5s}8-Z_A zeHTSH`8wk^%f{rp5t;FX+-aD*Y9}U#J~@@}K7_mDrwP3&F`K|aH@OOL3efhknm#$3 zsR5zzga)Oldj#$&;0S!4KzEI{yyi*pN)tR<2cv%lNoZ(_x>6!#%?-FG3ho;EH$;>L zJ{c_mj_i!n0eGPQH6y_3WASLl3gkp}COLz*?xf@>fO8}%|4hwK`T_eS9nH{#-{))wlKeBX(IBL%*8aSL@Q9nF#&NuzDiNMhZb+c#D>54<9E zgMX;G`6=U%itnT4cTZ(bCLvMRoj2+ZXqseyZ(9w-y!KgyVw-hV*-T&} z4Pm&T$5^&Ia77=4Mm+2*#F?OaoF(2D+N~Uu@SwoPEafEta%IiE0_8(($ut7KbRp%J zNszL>T!xVH5B=~3A%PV#`b~0HNnHn4cqP_Z`4)epE^CIS>I}6QJDQw+f~Vp{$8^wU zc{eiCTne8?7At;<^3Qdy6fnRwa_!V8lk6^%MQ~?lQjQ-+IRc`z_K+y&aZX@TbsMF&{2MAS0J~g*+?PX7hQB^laG@ zsM{LbfRWsqjP(YL5r;^SYBpeWf=4p7{KZ`JOtrtSeAy0%e2L#|KVP-sdP)4$CG9|U z62DXVox$&1etr23;3rcEfw~oeBk6OmqBbg8#qw_;GM4`r$KtoYAGM#i+0VgtzJu-W zT>JY5`}^-NX?pGk^+Ws~=l4&3FY$YW-`o7w@!Q7lIPxCH zw1vi|m9k2SigzB-d@Vt(M-K^bJbC%DHqpI|lm z8q;bv-W}^hkG0bsSn-|+if^E`No6ou;I@LIinyp%9c8duia{f8@8{|hRI=OJq-`|S z850R?-NEJ#K4Q{koXl5AV8uKw^j#S4y#bzLt3ujQi4~M^mW`=eGCNjf!MpsbUGwJ2 zI5SV38xZV{_4tI`ff`MwwbxhRHrM#7&p^w&^frL^FisT5SrBU4ik^m1t*}NxvPh5w zmkKZn$j6uVYOgPUjS!&}Qu3K%a9mClr_*Y*d=BL^SS>&rAhGg!x930N^$-0l&F|up z%q-4&Jit7gq5DHC>>B`!&(=g+FMzNVCUnv)9<5pY#F_*aTU!l>S7L#Hv7W6*44t>R zgO5s5wHxLU`~txxfmP+2)u)S7RwCD-9JtyW@qyo#L<+x0kd>6VNLHi8g{1imyp|98 zEXOL^aa_5sJ5N$(3?Vb3HasX=&-E`J>KuHmyiX8KDZ8BZs=j^6O;r8El5NO!f{xm( zPK|{#LIl=v@CxZ{YatgMj|LOWK3rRIPvuB5CG5GsC4}`iVMpm;<8Wu0uxlu7Jj`Xo zAqw%ZWE1w+#IWzr)p_(y4BKbIc2ODewC|d*eh1P)ZLZT4)u?3440FlzMwS_-PZoKq?^yy2ON? zk{CAMguO2ekHJkdVRertgpDQ)infkp!oJ9dbco2j!P(fkjxa%{gf6Y7#94 zOtzK{ZS0*}WE!?|iH33v5k4q8hd;6n{3E19(UM0`~2e;M1Hb4$c{jB#$1 zjL)o$Ex=$J2`*;N-c&iKYbQz7JVC*>a77-m^M-nTBt(29?kAd zaXC&=|9p{dwm$G%YiDQ$2xRj(2d2MfjuB!itdYRj{;slb%B;03M-ZYOEhbYbz}?zm zRrZZO=T4RP)WN>gbwVVetp#}cv7y-#I$A>Y0x(}&z?X0`UwL7+kEt`)&cBFSE&E2P zbEJ%Z7DShQLv4>lfrdutg%AVI*2A{BV;QqB5{=67^i_j-p$mQrcMH(J(c0uxl{5y; z!Zm5LElC#cYn*JeW4SCcxfIB9j@GiAV=JUtd+kgsrP11TA!9XFe-_5P+;V&N7?6D> zT{nJ2pft&S3^KVpv?FxHMrU1YY=;t?`z>G!KMjIF4FeKd4f`^6L6;|r^(dgo?e}K@ zo@;WGlLmEe>vJ`OB)1oE@5HWHxG#o~U8@@5g^37L48md0g76Fw+AtB((=ko-DI=b6 zE0fzMB6Mz-o7`Bopph;n+^&w70f$BGe?}zHTP! z1nMXqKT>e1Xh^*i5vZ>vJ?vC}FnC1N1?qFWG{L2!RKtr+S(nG4J}^*DpjKL z2ciWrkk^_(9?>8N1jGZ#&=|!r9m11VfDZ_v?8f~ z-6FJE1|wvDafpRe>RASA;oZOKesR16JS+ig2!LOHhQ(TLIua8al_u?RuEakj@$m4u zb~LO;n2>D)u3+szXoLVt=bWud1lk9*+J1tTu>)Wd?lE|HtB2;_S*$iWfk+#}5HQ3V zufgFE9Czu$xE`^St8$b03=$V-#uI<|*0G5<;Ma{@3ZI6@QeNDY@}u_glyXl%^K9>y zluYeu2An3*F_H2SqoSlOJis(1KGa?t1C7b>{UaPCO#BC{S3|A(1PC&IX^JVaEa>P< z1LEwaZ(d<>f$DNGZDq^= zn0g$;?69pcW9|!MeQ&|{CMytiKf`$nwZcQo(T8N*NMJ2lLUUDj&Jmyt@$CdFq^IMg zzYAq#eJW~^k@W@=nd1`lc?mKZr*~(`Ns%M^sA_Z^ru_cl;0&zF(>js+4gxP|Vu$!H zBGlLiWr4;ryaLj*!5+_K#`gQY+|lmYjZIVpe(Ol=2=-pi%7=u&UwfOQdN`@vSy`z=`Z}wA zlNWRTxU=d9{h=)zXVrc_xJo7y8mZYFt$$=P`zqQVO#I>!T_L~gCh7WwhuXjhh?tE! zCS#3`;k*PHpl09#mJYcbq*UVo;==P`Al$eQaNC@6Ryqjl^-*xC&_LWA;tH0^S^($W z3-}wTc@_j0`m+m`3j2Lo9;+@iii2-9G7wza8whnG9E|iRSlWXRUom+-M`MUdyZXoJ zcw=Nv8P+~>K*)8RKpw%G8p7fRl@pyPhN-OUV?VOB)2hxB+$Z~V0UOF#o>-Aj$o$KK zk4Ubd*-W6vs?O$%72+$sCXcEgbsjG@MHW|Wygg_p^?enPw_9`oiL?RG0`kJsuoI#c zHd-GkZRmc63hM)P&unSS4sR@}M@Dpx5l@JQZslu|FFu!T{5 za)vNG;~Ju&@irap8qY%w!OcpHSI1xC1rP2$F7}tWxpr z>Di&yCuurI>DU~J)#5%ZQQY6?iuS&DuAuYvh{^qv-|K`ObpfTwlD3I3S-shUIJk6Y zm2l8CO&+WY&Qo7&pQh^_;jGA9qdL%?v|t|t_&9>&u82aiCQRgGn!Jy*6$jBkF}2j<1($CXs_H@p1!HbNEwI& zHCmW_V~wW`LAvfHsrh-u0GuNL^Jbc(mG2auhFo4A_%_AI5Pl44RL_t9kUYR2O*#IHwmR^WP zD}iIMqv6^DNA&xYimY!xUe;tbmGEZ#8%FXt|4d0vfYmYj68QDoF1wC=vKqe&h+_P@ zHqNgL|DyRd8i3!2B=GApsvmx3@rdzj#t*t&4<<^Tx3exodsBv$VEC`>v-zj#>!9oN z${2ml%Cle|B-|n-*mXKRPUHPI3XMcxLG-*!<8^u>+=RxD6KLE(b;9RhB8^XX(lp-4 zd?Ywd0!K4T1aFhIcCun%z&=c@F9Rq0=?V%8QaNCM)Tr1E%5_+}9`K{<5QnnE*_1sqVCmSpKPf zwAmS}@5$iosd1Y2F)Gf>Av1J+4+5aA0L0qInKhc1NeR51k5o~n*M*jt%#MQ=igy|{ zr$sN;R-4*Kg8bdKBaxoJ6*tvw6FqO<5T|Fp0L1Bm5b9Quc})Jkix~M!q-Vn^nx1

~{zIAiVE!YvzhjKo`VRL{xvA3WnYIyGjFY46S@m`w>i-|pssFt-TPf1vFY3Nc zWjetc^Q>G+5aO8c;Fx9VCnv&^j@vp|w%qcj1` z-h(eu0gq8&M)e#pIjGum+EGz4JG1CWw?#FP*0$WuhxZF{LhKrEYVot)VDU0l_J2!d zRT9jX{P4>Bn&fn(=>0-1&yMlmy~Znh_@z zuF1O)@~CmR8n5(^we?fhD5JMYRD>+`6+vdHZzh}0v)FW=&2nGac&?ZFdabog`7m8I zF5MfPnN=E`bf7diO_c^`Hk1bE?N#HKNfl){21)<_G}XgLqgzaR6&osMD87Rg-|6O} z_c8@58qLQx9V6W&$?EusZ98%(ng2zUwC_M!lr|$4nw zMAYL&C>6jVe--`Zlhu{00S2pRdc7Cq0f61sd(vJ{6Jo4y0D9N}#W4;~#Q19mP2_A~ z0yQ$k9^%hz@|X7!e|etz$1I&A%ibMB6LOSt>_TY3XUvNiL1yyoc1)g@fW<1}4!~4< z#vrQnamhX7mw{L}2RsEU#FNF$>%CI@bca2sntau0;NZPF9SVDLmOFi^sxctQ_VA(wNzbCV2tcgiifoa_lO!m3?~z}1lnD=XbISE zpKM}sB!>0-^oV+w9Yam2!wDzq1bf&oR9vu9`c>ZrCc#frK)M6kRuX4=TIDp9JxfTi zLIyeH^(Y@6>jzT5M}V`Eg+vI*qG$OC)NZwrGAkk9jdHT&Qnz*29pgK5)JE#IC@Q{Z z3C%RppO?(bcEw7kb9%2~WuwWoy4Q-9bWW|`?957Vi?eHx$RmR9SP z4!6i$w}jV3oK$id%9uCwe$Uw9`Et-pw#uX)$e@@E!nMuIJ1GJXtp~s4_^}EY-VB+OnEDZ{Uv2m2v6r1g0LgAYx zq+Xq^3$$2Q7Y+sX2C*ZVmv~uDdA(U#O0^Tz)1K*Pq$|tFve>eg$)jqc^KNex2?^9W!g?Yolo5QA znxQ^3Mo{rmpBXnv2=$q<&f-P(UzSM-^_kIIUNU*S0hI*TV?c`L?+^4BeA~~*1Eh1)ed1Y@PDc;miq^PnL zo*m1*3GkC5GMNhB@+~h{=xYljFTlLj7lA|L)gxltcSDN7CXdG?-sCaFfBMP-gTDp% zBf{W5vOOwhXCJ`xP8DBIl9=#xi>;uj{D`=ad%gh@WRXDpSR)63f~+5{9Qg5#XmzoLiik$@U(-x zPdD$^{>1xL<~=O$mr6IBsb%f@wXqRFe@bVu?}*ZARoau%NxQT5sHZ1N2Qjacy5S*G z3u``Kp1_*-Gc;>1Au(&sKAA`-8(1avUf`_ScUa_2_tz*~Igx@TQEzt?@x`%IYC7eubfc7GD@hs zCWpUjU`H6tA?Q22fq_X2+Ns|<#8XAKdTXLL72PkZQoIE%7k;6>y_h%ld#Wx&^-N>c zEqJ;K$XEUB0A{=-AX{B&2johC<@8n@DgQY&iAyRc7iTjIf54l|=G3wSGJBOY#2}l1 z5-KRpb5ci}Q6lYqR&P;sa{4iL2^CqV5S%aA z(X9+lUl$3yP6zthTgBOSl2ni`jihO!Cbuc6309kbP$#$F91eR^cXDBl!^?P0-?D@C zQ0Kj2S3hs=nqVr<0e%?U1Uoh3cmxkK5FR44?;L;mOP@1~IJ9%Ȑz~jdBmq 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

eKf?U5Vh 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 literal 0 HcmV?d00001 From 3307d575286bdd2c282ac19091b1f4c1dcee067f Mon Sep 17 00:00:00 2001 From: Gary Tully Date: Wed, 2 May 2012 10:18:29 +0000 Subject: [PATCH 8/9] ensure test is more deterministic and does not hang ci build git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1332977 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/activemq/bugs/AMQ2571Test.java | 13 +++++++------ .../usecases/DurableSubscriptionOfflineTest.java | 3 ++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/activemq-core/src/test/java/org/apache/activemq/bugs/AMQ2571Test.java b/activemq-core/src/test/java/org/apache/activemq/bugs/AMQ2571Test.java index ee2b3fe9cb..533ae0c939 100644 --- a/activemq-core/src/test/java/org/apache/activemq/bugs/AMQ2571Test.java +++ b/activemq-core/src/test/java/org/apache/activemq/bugs/AMQ2571Test.java @@ -32,6 +32,7 @@ public class AMQ2571Test extends EmbeddedBrokerTestSupport { public void testTempQueueClosing() { try { ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(this.bindAddress); + connectionFactory.setAlwaysSyncSend(true); // First create session that will own the TempQueue Connection connectionA = connectionFactory.createConnection(); @@ -56,13 +57,13 @@ public class AMQ2571Test extends EmbeddedBrokerTestSupport { Thread sendingThread = new Thread(new Runnable() { public void run() { try { - for (int i = 0; i < 100000; i++) { + long end = System.currentTimeMillis() + 5*60*1000; + // wait for exception on send + while (System.currentTimeMillis() < end) { producerB.send(message); } } catch (JMSException e) { - // We don't get this exception every time. - // Not getting it means that we don't know if the - // creator of the TempQueue has disconnected. + e.printStackTrace(); } } }); @@ -72,7 +73,7 @@ public class AMQ2571Test extends EmbeddedBrokerTestSupport { // Now close connection A. This will remove the TempQueue. connectionA.close(); // Wait for the thread to finish. - sendingThread.join(); + sendingThread.join(5*60*1000); // Sleep for a while to make sure that we should know that the // TempQueue is gone. @@ -95,6 +96,7 @@ public class AMQ2571Test extends EmbeddedBrokerTestSupport { @Override protected void setUp() throws Exception { bindAddress = "vm://localhost"; + setAutoFail(true); super.setUp(); } @@ -103,7 +105,6 @@ public class AMQ2571Test extends EmbeddedBrokerTestSupport { BrokerService answer = new BrokerService(); answer.setPersistent(false); answer.setUseJmx(false); - answer.addConnector(bindAddress); return answer; } } \ No newline at end of file diff --git a/activemq-core/src/test/java/org/apache/activemq/usecases/DurableSubscriptionOfflineTest.java b/activemq-core/src/test/java/org/apache/activemq/usecases/DurableSubscriptionOfflineTest.java index 9a0e117c44..c8596a2d25 100644 --- a/activemq-core/src/test/java/org/apache/activemq/usecases/DurableSubscriptionOfflineTest.java +++ b/activemq-core/src/test/java/org/apache/activemq/usecases/DurableSubscriptionOfflineTest.java @@ -1610,7 +1610,7 @@ public class DurableSubscriptionOfflineTest extends org.apache.activemq.TestSupp } executorService.shutdown(); executorService.awaitTermination(10, TimeUnit.MINUTES); - assertTrue("No exceptions", exceptions.isEmpty()); + assertTrue("No exceptions " + exceptions.elements(), exceptions.isEmpty()); } public static class Listener implements MessageListener { @@ -1649,6 +1649,7 @@ public class DurableSubscriptionOfflineTest extends org.apache.activemq.TestSupp } } catch (JMSException e) { + e.printStackTrace(); exceptions.add(e); } } From b7e264f917584675392ba51118a4b4905aacdab9 Mon Sep 17 00:00:00 2001 From: Bosanac Dejan Date: Wed, 2 May 2012 10:35:43 +0000 Subject: [PATCH 9/9] [maven-release-plugin] prepare release activemq-5.6.0 git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1332981 13f79535-47bb-0310-9956-ffa450edef68 --- activemq-all/pom.xml | 2 +- activemq-blueprint/pom.xml | 2 +- activemq-camel/pom.xml | 2 +- activemq-console/pom.xml | 2 +- activemq-core/pom.xml | 2 +- activemq-fileserver/pom.xml | 2 +- activemq-jaas/pom.xml | 2 +- activemq-jmdns_1.0/pom.xml | 2 +- activemq-karaf/pom.xml | 2 +- activemq-openwire-generator/pom.xml | 2 +- activemq-optional/pom.xml | 2 +- activemq-pool/pom.xml | 2 +- activemq-ra/pom.xml | 2 +- activemq-rar/pom.xml | 2 +- activemq-run/pom.xml | 2 +- activemq-spring/pom.xml | 2 +- activemq-tooling/maven-activemq-memtest-plugin/pom.xml | 2 +- activemq-tooling/maven-activemq-perf-plugin/pom.xml | 2 +- activemq-tooling/maven-activemq-plugin/pom.xml | 2 +- activemq-tooling/pom.xml | 2 +- activemq-web-console/pom.xml | 2 +- activemq-web-demo/pom.xml | 2 +- activemq-web/pom.xml | 2 +- activemq-xmpp/pom.xml | 2 +- assembly/pom.xml | 2 +- kahadb/pom.xml | 2 +- pom.xml | 10 +++++----- 27 files changed, 31 insertions(+), 31 deletions(-) diff --git a/activemq-all/pom.xml b/activemq-all/pom.xml index e93fced865..26efc22a68 100644 --- a/activemq-all/pom.xml +++ b/activemq-all/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-all diff --git a/activemq-blueprint/pom.xml b/activemq-blueprint/pom.xml index 66faac3544..25a6f7de47 100644 --- a/activemq-blueprint/pom.xml +++ b/activemq-blueprint/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-blueprint diff --git a/activemq-camel/pom.xml b/activemq-camel/pom.xml index 51b6b100ee..8413ca9e5e 100755 --- a/activemq-camel/pom.xml +++ b/activemq-camel/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-camel diff --git a/activemq-console/pom.xml b/activemq-console/pom.xml index c0343ee215..3089a45687 100644 --- a/activemq-console/pom.xml +++ b/activemq-console/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-console diff --git a/activemq-core/pom.xml b/activemq-core/pom.xml index f8d5641afa..f5c3d576f2 100755 --- a/activemq-core/pom.xml +++ b/activemq-core/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-core diff --git a/activemq-fileserver/pom.xml b/activemq-fileserver/pom.xml index db943e13a6..e90a804227 100755 --- a/activemq-fileserver/pom.xml +++ b/activemq-fileserver/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-fileserver diff --git a/activemq-jaas/pom.xml b/activemq-jaas/pom.xml index 44fea82ddf..b6b79be57d 100644 --- a/activemq-jaas/pom.xml +++ b/activemq-jaas/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-jaas diff --git a/activemq-jmdns_1.0/pom.xml b/activemq-jmdns_1.0/pom.xml index cff60795ed..1b94a59222 100644 --- a/activemq-jmdns_1.0/pom.xml +++ b/activemq-jmdns_1.0/pom.xml @@ -19,7 +19,7 @@ activemq-parent org.apache.activemq - 5.7-SNAPSHOT + 5.6.0 4.0.0 activemq-jmdns_1.0 diff --git a/activemq-karaf/pom.xml b/activemq-karaf/pom.xml index b2fbaf3729..19b0ce7980 100644 --- a/activemq-karaf/pom.xml +++ b/activemq-karaf/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-karaf diff --git a/activemq-openwire-generator/pom.xml b/activemq-openwire-generator/pom.xml index 32cd439b7b..813ac5d7b2 100644 --- a/activemq-openwire-generator/pom.xml +++ b/activemq-openwire-generator/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 ../pom.xml diff --git a/activemq-optional/pom.xml b/activemq-optional/pom.xml index 61a780c8b7..105c84c7bf 100755 --- a/activemq-optional/pom.xml +++ b/activemq-optional/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-optional diff --git a/activemq-pool/pom.xml b/activemq-pool/pom.xml index 67745d8f76..348d00fd3c 100755 --- a/activemq-pool/pom.xml +++ b/activemq-pool/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-pool diff --git a/activemq-ra/pom.xml b/activemq-ra/pom.xml index fad7daa8b4..fa8139b597 100755 --- a/activemq-ra/pom.xml +++ b/activemq-ra/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-ra diff --git a/activemq-rar/pom.xml b/activemq-rar/pom.xml index a6bcc1b52d..c663b1e9e1 100644 --- a/activemq-rar/pom.xml +++ b/activemq-rar/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-rar diff --git a/activemq-run/pom.xml b/activemq-run/pom.xml index b269ccbb8f..48021ced57 100644 --- a/activemq-run/pom.xml +++ b/activemq-run/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-run diff --git a/activemq-spring/pom.xml b/activemq-spring/pom.xml index c2e1d8cf57..d68e127d8e 100755 --- a/activemq-spring/pom.xml +++ b/activemq-spring/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-spring diff --git a/activemq-tooling/maven-activemq-memtest-plugin/pom.xml b/activemq-tooling/maven-activemq-memtest-plugin/pom.xml index 0942877e8f..df086e4eae 100644 --- a/activemq-tooling/maven-activemq-memtest-plugin/pom.xml +++ b/activemq-tooling/maven-activemq-memtest-plugin/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq.tooling activemq-tooling - 5.7-SNAPSHOT + 5.6.0 maven-activemq-memtest-plugin diff --git a/activemq-tooling/maven-activemq-perf-plugin/pom.xml b/activemq-tooling/maven-activemq-perf-plugin/pom.xml index 6f72ab5eb8..0257f91407 100644 --- a/activemq-tooling/maven-activemq-perf-plugin/pom.xml +++ b/activemq-tooling/maven-activemq-perf-plugin/pom.xml @@ -21,7 +21,7 @@ org.apache.activemq.tooling activemq-tooling - 5.7-SNAPSHOT + 5.6.0 maven-activemq-perf-plugin diff --git a/activemq-tooling/maven-activemq-plugin/pom.xml b/activemq-tooling/maven-activemq-plugin/pom.xml index 54fd0cb8b5..61d9f8e2d3 100644 --- a/activemq-tooling/maven-activemq-plugin/pom.xml +++ b/activemq-tooling/maven-activemq-plugin/pom.xml @@ -21,7 +21,7 @@ org.apache.activemq.tooling activemq-tooling - 5.7-SNAPSHOT + 5.6.0 maven-activemq-plugin diff --git a/activemq-tooling/pom.xml b/activemq-tooling/pom.xml index 4fcc8f050d..3a6fa163d7 100644 --- a/activemq-tooling/pom.xml +++ b/activemq-tooling/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 org.apache.activemq.tooling diff --git a/activemq-web-console/pom.xml b/activemq-web-console/pom.xml index ec7b37f67c..668d639769 100755 --- a/activemq-web-console/pom.xml +++ b/activemq-web-console/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-web-console diff --git a/activemq-web-demo/pom.xml b/activemq-web-demo/pom.xml index b6bb29c9f2..dcb8474a37 100755 --- a/activemq-web-demo/pom.xml +++ b/activemq-web-demo/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-web-demo diff --git a/activemq-web/pom.xml b/activemq-web/pom.xml index f5720cd615..127d8e8ddc 100755 --- a/activemq-web/pom.xml +++ b/activemq-web/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-web diff --git a/activemq-xmpp/pom.xml b/activemq-xmpp/pom.xml index f25bd19aad..d0dd861960 100755 --- a/activemq-xmpp/pom.xml +++ b/activemq-xmpp/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 activemq-xmpp diff --git a/assembly/pom.xml b/assembly/pom.xml index 9bbf20c348..3e3de347cb 100755 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -22,7 +22,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 apache-activemq diff --git a/kahadb/pom.xml b/kahadb/pom.xml index 867c8673f6..998dba357c 100755 --- a/kahadb/pom.xml +++ b/kahadb/pom.xml @@ -20,7 +20,7 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 4.0.0 diff --git a/pom.xml b/pom.xml index dc58234aec..e44af5c0ea 100755 --- a/pom.xml +++ b/pom.xml @@ -25,13 +25,13 @@ org.apache.activemq activemq-parent - 5.7-SNAPSHOT + 5.6.0 pom ActiveMQ 2005 - 5.7-SNAPSHOT + 5.6.0 3.1.4 activemq-${activemq-version} Apache ActiveMQ @@ -197,9 +197,9 @@ - scm:svn:https://svn.apache.org/repos/asf/activemq/trunk - scm:svn:https://svn.apache.org/repos/asf/activemq/trunk - http://svn.apache.org/viewvc/activemq/trunk/ + scm:svn:https://svn.apache.org/repos/asf/activemq/tags/activemq-5.6.0 + scm:svn:https://svn.apache.org/repos/asf/activemq/tags/activemq-5.6.0 + http://svn.apache.org/viewvc/activemq/tags/activemq-5.6.0