PK HAoa,mimetypeapplication/epub+zipPK HA META-INF/PK HAOEBPS/PK HA OEBPS/images/PK HAOEBPS/imagesdb/PK HAhhMETA-INF/container.xml PK HAQ]!!OEBPS/CXFAMQIntegration.html Appendix A. Integrating with Fuse Message Broker

Appendix A. Integrating with Fuse Message Broker

If you are using Fuse Message Broker or Apache ActiveMQ as your JMS provider, the JNDI name of your destinations can be specified in a special format that dynamically creates JNDI bindings for queues or topics. This means that it is not necessary to configure the JMS provider in advance with the JNDI bindings for your queues or topics.

The key to integrating Fuse Message Broker or with JNDI is the ActiveMQInitialContextFactory class. This class is used to create a JNDI InitialContext instance, which you can then use to access JMS destinations in the JMS broker.

Example A.1 shows SOAP/JMS WSDL extensions to create a JNDI InitialContext that is integrated with Fuse Message Broker.

In Example A.1, the Fuse Message Broker client connects to the broker port located at tcp://localhost:61616.

As well as creating a JNDI InitialContext instance, you must specify the JNDI name that is bound to a javax.jms.ConnectionFactory instance. In the case of Fuse Message Broker and Apache ActiveMQ, there is a predefined binding in the InitialContext instance, which maps the JNDI name ConnectionFactory to an ActiveMQConnectionFactory instance. Example A.2 shaows the SOAP/JMS extension element for specifying the Fuse Message Broker connection factory.

To access queues or topics dynamically, specify the destination's JNDI name as a JNDI composite name in either of the following formats:

dynamicQueues/QueueName
dynamicTopics/TopicName

QueueName and TopicName are the names that the Apache ActiveMQ broker uses. They are not abstract JNDI names.

Example A.3 shows a WSDL port that uses a dynamically created queue.

When the application attempts to open the JMS connection, Fuse Message Broker will check to see if a queue with the JNDI name greeter.request.queue exists. If it does not exist, it will create a new queue and bind it to the JNDI name greeter.request.queue.

PK HA Appendix B. Conduits

Appendix B. Conduits

Conduits manage the client-side, or outbound, transport details in the Fuse Services Framework runtime. They are responsible for opening ports, establishing outbound connections, sending messages, and listening for any responses between an application and a single external endpoint. If an application connects to multiple endpoints, it will have one conduit instance for each endpoint.

Each transport type implements its own conduit using the Conduit interface. This allows for a standardized interface between the application level functionality and the transports.

In general, you only need to worry about the conduits being used by your application when configuring the client-side transport details. The underlying semantics of how the runtime handles conduits is, generally, not something a developer needs to worry about.

However, there are cases when an understanding of conduit's can prove helpful:

Conduits are managed by the client implementation object. Once created, a conduit lives for the duration of the client implementation object. The conduit's life-cycle is:

The weight of a conduit object depends on the transport implementation. HTTP conduits are extremely light weight. JMS conduits are heavy because they are associated with the JMS Session object and one or more JMSListenerContainer objects.

PK HAnGr|;,;,OEBPS/CXFJMSBaseConfig.html Basic endpoint configuration

Basic endpoint configuration

JMS endpoints are configured using Spring configuration. You can configure the server-side and consumer-side transports independently.

The JMS address information is provided using the jms:address element and its child, the jms:JMSNamingProperties element. The jms:address element’s attributes specify the information needed to identify the JMS broker and the destination. The jms:JMSNamingProperties element specifies the Java properties used to connect to the JNDI service.

You configure a JMS endpoint using one of the following configuration elements:

jms:conduit

The jms:conduit element contains the configuration for a consumer endpoint. It has one attribute, name, whose value takes the form {WSDLNamespace}WSDLPortName.jms-conduit.

jms:destination

The jms:destination element contains the configuration for a provider endpoint. It has one attribute, name, whose value takes the form {WSDLNamespace}WSDLPortName.jms-destination.

JMS connection information is specified by adding a jms:address child to the base configuration element. The jms:address element uses the attributes described in Table 10.2 to configure the connection to the JMS broker.

To increase interoperability with JMS and JNDI providers, the jms:address element has a child element, jms:JMSNamingProperties, that allows you to specify the values used to populate the properties used when connecting to the JNDI provider. The jms:JMSNamingProperties element has two attributes: name and value. name specifies the name of the property to set. value attribute specifies the value for the specified property. jms:JMSNamingProperties element can also be used for specification of provider specific properties.

The following is a list of common JNDI properties that can be set:

  1. java.naming.factory.initial

  2. java.naming.provider.url

  3. java.naming.factory.object

  4. java.naming.factory.state

  5. java.naming.factory.url.pkgs

  6. java.naming.dns.url

  7. java.naming.authoritative

  8. java.naming.batchsize

  9. java.naming.referral

  10. java.naming.security.protocol

  11. java.naming.security.authentication

  12. java.naming.security.principal

  13. java.naming.security.credentials

  14. java.naming.language

  15. java.naming.applet

For more details on what information to use in these attributes, check your JNDI provider’s documentation and consult the Java API reference material.

Example C.2 shows a Fuse Services Framework configuration entry for configuring the addressing information for a JMS consumer endpoint.

PK HA!~̄"OEBPS/CXFJMSBaseRuntimeConfig.html JMS Session Pool Configuration

JMS Session Pool Configuration

The JMS configuration allows you to specify the number of JMS sessions an endpoint will keep in a pool.

You use the jms:sessionPool element to specify the session pool configuration for a JMS endpoint. The jms:sessionPool element is a child of both the jms:conduit element and the jms:destination element.

The jms:sessionPool element's attributes, listed in Table C.3, specify the high and low water marks for the endpoint's JMS session pool.

Example C.5 shows an example of configuring the session pool for a Fuse Services Framework JMS provider endpoint.

PK HAr--OEBPS/CXFJMSBaseWSDL.html Basic JMS configuration

Basic JMS configuration

The JMS address information is provided using the jms:address element and its child, the jms:JMSNamingProperties element. The jms:address element’s attributes specify the information needed to identify the JMS broker and the destination. The jms:JMSNamingProperties element specifies the Java properties used to connect to the JNDI service.

[Important]Important

Information specified using the JMS feature will override the information in the endpoint's WSDL file.

The basic configuration for a JMS endpoint is done by using a jms:address element as the child of your service’s port element. The jms:address element used in WSDL is identical to the one used in the configuration file. Its attributes are listed in Table 10.2.

The jms:address WSDL element uses a jms:JMSNamingProperties child element to specify additional information needed to connect to a JNDI provider.

To increase interoperability with JMS and JNDI providers, the jms:address element has a child element, jms:JMSNamingProperties, that allows you to specify the values used to populate the properties used when connecting to the JNDI provider. The jms:JMSNamingProperties element has two attributes: name and value. name specifies the name of the property to set. value attribute specifies the value for the specified property. jms:JMSNamingProperties element can also be used for specification of provider specific properties.

The following is a list of common JNDI properties that can be set:

  1. java.naming.factory.initial

  2. java.naming.provider.url

  3. java.naming.factory.object

  4. java.naming.factory.state

  5. java.naming.factory.url.pkgs

  6. java.naming.dns.url

  7. java.naming.authoritative

  8. java.naming.batchsize

  9. java.naming.referral

  10. java.naming.security.protocol

  11. java.naming.security.authentication

  12. java.naming.security.principal

  13. java.naming.security.credentials

  14. java.naming.language

  15. java.naming.applet

For more details on what information to use in these attributes, check your JNDI provider’s documentation and consult the Java API reference material.

Example 10.6 shows an example of a JMS WSDL port specification.

PK HA}/ / OEBPS/CXFJMSConsumerConfig.html Consumer configuration

Consumer configuration

The JMS consumer configuration allows you to specify the following:

Consumer endpoint configuration is specified using the jms:conduit element. It has two children:

  • jms:runtimePolicy—configures the JMS message type

  • jms:clientConfig—configures the response timeout and the message's time to live

The jms:runtimePolicy element specifies the message type supported by the consumer endpoint using . The message type is specified using the messageType attribute. The messageType attribute has two possible values:

The jms:clientConfig element two attributes that are used to specify the configurable runtime properties of a consumer endpoint:

Example C.3 shows a configuration entry for configuring a JMS consumer endpoint.

PK HA[~ OEBPS/CXFJMSDep.html Appendix C. Conduit and Destination Based JMS Configuration

Appendix C. Conduit and Destination Based JMS Configuration

Basic endpoint configuration
Consumer configuration
Provider configuration
JMS Session Pool Configuration

The Fuse Services Framework JMS configuration properties are specified under the http://cxf.apache.org/transports/jms namespace. In order to use the JMS configuration properties you will need to add the line shown in Example C.1 to the beans element of your configuration.

Example C.1. JMS Configuration Namespaces

xmlns:jms="http://cxf.apache.org/transports/jms"
PK HA 1N1NOEBPS/CXFJMSFeature.html Using the JMS configuration bean

Using the JMS configuration bean

To simplify JMS configuration and make it more powerful, Fuse Services Framework uses a single JMS configuration bean to configure JMS endpoints. The bean is implemented by the org.apache.cxf.transport.jms.JMSConfiguration class. It can be used to either configure endpoint's directly or to configure the JMS conduits and destinations.

The JMS configuration bean uses the Spring p-namespace to make the configuration as simple as possible. To use this namespace you need to declare it in the configuration's root element as shown in Example 10.1.

You specify the JMS configuration by defining a bean of class org.apache.cxf.transport.jms.JMSConfiguration. The properties of the bean provide the configuration settings for the transport.

Table 10.1 lists properties that are common to both providers and consumers.

Table 10.1. General JMS Configuration Properties

PropertyDefaultDescription
connectionFactory-ref Specifies a reference to a bean that defines a JMS ConnectionFactory.
wrapInSingleConnectionFactorytrueSpecifies whether to wrap the ConnectionFactory with a Spring SingleConnectionFactory. Doing so can improve the performance of the JMS transport when the specified connection factory does not pool connections.
reconnectOnExceptionfalseSpecifies whether to create a new connection in the case of an exception. This property is only used when wrapping the connection factory with a Spring SingleConnectionFactory.
targetDestination Specifies the JNDI name or provider specific name of a destination.
replyDestination Specifies the JMS name of the JMS destinations where replies are sent. This attribute allows you to use a user defined destination for replies. For more details see Using a Named Reply Destination.
destinationResolver Specifies a reference to a Spring DestinationResolver. This allows you to define how destination names are resolved. By default a DynamicDestinationResolver is used. It resolves destinations using the JMS providers features. If you reference a JndiDestinationResolver you can resolve the destination names using JNDI.
transactionManager Specifies a reference to a Spring transaction manager. This allows the service to participate in JTA Transactions.
taskExecutor Specifies a reference to a Spring TaskExecutor. This is used in listeners to decide how to handle incoming messages. By default the transport uses the Spring SimpleAsyncTaskExecutor.
useJms11falseSpecifies whether JMS 1.1 features are available.
messageIdEnabledtrueSpecifies whether the JMS transport wants the JMS broker to provide message IDs. Setting this to false causes the endpoint to call its message producer's setDisableMessageID() method with a value of true. The JMS broker is then given a hint that it does not need to generate message IDs or add them to the messages from the endpoint. The JMS broker can choose to accept the hint or ignore it.
messageTimestampEnabledtrueSpecifies whether the JMS transport wants the JMS broker to provide message time stamps. Setting this to false causes the endpoint to call its message producer's setDisableMessageTimestamp() method with a value of true. The JMS broker is then given a hint that it does not need to generate time stamps or add them to the messages from the endpoint. The JMS broker can choose to accept the hint or ignore it.
cacheLevel3Specifies the level of caching allowed by the listener. Valid values are 0(CACHE_NONE), 1(CACHE_CONNECTION), 2(CACHE_SESSION), 3(CACHE_CONSUMER), 4(CACHE_AUTO).
pubSubNoLocalfalseSpecifies whether to receive messages produced from the same connection.
receiveTimeout0Specifies, in milliseconds, the amount of time to wait for response messages. 0 means wait indefinitely.
explicitQosEnabledfalseSpecifies whether the QoS settings like priority, persistence, and time to live are explicitly set for each message or if they are allowed to use default values.
deliveryMode1

Specifies if a message is persistent. The two values are:

  • 1(NON_PERSISTENT)—messages will be kept memory

  • 2(PERSISTENT)—messages will be persisted to disk

priority4Specifies the message's priority for the messages. JMS priority values can range from 0 to 9. The lowest priority is 0 and the highest priority is 9.
timeToLive0Specifies, in milliseconds, the message will be available after it is sent. 0 specifies an infinite time to live.
sessionTransactedfalseSpecifies if JMS transactions are used.
concurrentConsumers1Specifies the minimum number of concurrent consumers created by the listener.
maxConcurrentConsumers1Specifies the maximum number of concurrent consumers by listener.
messageSelector Specifies the string value of the selector. For more information on the syntax used to specify message selectors, see the JMS 1.1 specification.
subscriptionDurablefalseSpecifies whether the server uses durrable subscriptions.
durableSubscriptionName Specifies the string used to register the durable subscription.
messageTypetextSpecifies how the message data will be packaged as a JMS message. text specifies that the data will be packaged as a TextMessage. binary specifies that the data will be packaged as an ByteMessage.
pubSubDomainfalseSpecifies whether the target destination is a topic.
jmsProviderTibcoEmsfalseSpecifies if your JMS provider is Tibco EMS. This causes the principal in the security context to be populated from the JMS_TIBCO_SENDER header.
useMessageIDAsCorrelationIDfalseSpecifies whether JMS will use the message ID to correlate messages. If not, the client will set a generated correlation ID.

As shown in Example 10.2, the bean's properties are specified as attributes to the bean element. They are all declared in the Spring p namespace.

The JMSConfiguration bean can be applied directly to both server and client endpoints using the Fuse Services Framework features mechanism. To do so:

Example 10.3 shows a JAX-WS client that uses the JMS configuration from Example 10.2.

The JMSConfiguration bean can be applied to JMS conduits and JMS destinations using the jms:jmsConfig-ref element. The jms:jmsConfig-ref element's value is the ID of the JMSConfiguration bean.

Example 10.4 shows a JMS conduit that uses the JMS configuration from Example 10.2.

PK HAOEBPS/CXFJMSReplyDest.html Using a Named Reply Destination

Using a Named Reply Destination

By default, Fuse Services Framework endpoints using JMS create a temporary queue for sending replies back and forth. If you prefer to use named queues, you can configure the queue used to send replies as part of an endpoint's JMS configuration.

You specify the reply destination using either the jmsReplyDestinationName attribute or the jndiReplyDestinationName attribute in the endpoint's JMS configuration. A client endpoint will listen for replies on the specified destination and it will specify the value of the attribute in the ReplyTo field of all outgoing requests. A service endpoint will use the value of the jndiReplyDestinationName attribute as the location for placing replies if there is no destination specified in the request’s ReplyTo field.

Example 10.9 shows the configuration for a JMS client endpoint.

PK HA6@O'O'%OEBPS/CXFJMSServiceRuntimeConfig.html Provider configuration

Provider configuration

The provider specific configuration allows you to specify two types of properties:

Provider endpoint configuration is specified using the jms:destination element. It has two children:

  • jms:runtimePolicy—configures the JMS qualities of service

  • jms:serverConfig—configures the runtime behavior

The jms:runtimePolicy element specifies the qualities of service for the provider endpoint. Table C.2 describes the attributes used to configure the qualities of service.

You configure provider runtime behavior using the jms:serverConfig element. It has two attributes that are used to specify the configurable runtime properties of a provider endpoint:

Example C.4 shows a Fuse Services Framework configuration entry for configuring a provider endpoint.

PK HAR7AOEBPS/CXFJMSServiceWSDL.html JMS provider configuration

JMS provider configuration

JMS provider endpoints have a number of behaviors that are configurable. These include:

Provider endpoint behaviors are configured using the optional jms:server element. The jms:server element is a child of the WSDL wsdl:port element and has the following attributes:

Example 10.8 shows the WSDL for configuring a JMS provider endpoint.

PK HA$sOEBPS/CXFJMSWSDL.html Using WSDL to configure JMS

Using WSDL to configure JMS

Basic JMS configuration
JMS client configuration
JMS provider configuration

The WSDL extensions for defining a JMS endpoint are defined in the namespace http://cxf.apache.org/transports/jms. In order to use the JMS extensions you will need to add the line shown in Example 10.5 to the definitions element of your contract.

Example 10.5. JMS WSDL extension namespace

xmlns:jms="http://cxf.apache.org/transports/jms"
PK HA< ~~ OEBPS/ContractSOAP11Headers.html Adding SOAP Headers to a SOAP 1.1 Binding

Adding SOAP Headers to a SOAP 1.1 Binding

SOAP headers are defined by adding soap:header elements to your default SOAP 1.1 binding. The soap:header element is an optional child of the input, output, and fault elements of the binding. The SOAP header becomes part of the parent message. A SOAP header is defined by specifying a message and a message part. Each SOAP header can only contain one message part, but you can insert as many SOAP headers as needed.

The syntax for defining a SOAP header is shown in Example 2.3. The message attribute of soap:header is the qualified name of the message from which the part being inserted into the header is taken. The part attribute is the name of the message part inserted into the SOAP header. Because SOAP headers are always document style, the WSDL message part inserted into the SOAP header must be defined using an element. Together the message and the part attributes fully describe the data to insert into the SOAP header.

As well as the mandatory message and part attributes, soap:header also supports the namespace, the use, and the encodingStyle attributes. These optional attributes function the same for soap:header as they do for soap:body.

The message part inserted into the SOAP header can be any valid message part from the contract. It can even be a part from the parent message which is being used as the SOAP body. Because it is unlikely that you would want to send information twice in the same message, the SOAP binding provides a means for specifying the message parts that are inserted into the SOAP body.

The soap:body element has an optional attribute, parts, that takes a space delimited list of part names. When parts is defined, only the message parts listed are inserted into the SOAP body. You can then insert the remaining parts into the SOAP header.

[Note]Note

When you define a SOAP header using parts of the parent message, Fuse Services Framework automatically fills in the SOAP headers for you.

Example 2.4 shows a modified version of the orderWidgets service shown in Example 2.1. This version has been modified so that each order has an xsd:base64binary value placed in the SOAP header of the request and response. The SOAP header is defined as being the keyVal part from the widgetKey message. In this case you are responsible for adding the SOAP header to your application logic because it is not part of the input or output message.

Example 2.4. SOAP 1.1 Binding with a SOAP Header

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="widgetOrderForm.wsdl"
    targetNamespace="http://widgetVendor.com/widgetOrderForm"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="http://widgetVendor.com/widgetOrderForm"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsd1="http://widgetVendor.com/types/widgetTypes"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">

<types>
  <schema targetNamespace="http://widgetVendor.com/types/widgetTypes"
           xmlns="http://www.w3.org/2001/XMLSchema"
           xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <element name="keyElem" type="xsd:base64Binary"/>
  </schema>
</types>

<message name="widgetOrder">
  <part name="numOrdered" type="xsd:int"/>
</message>
<message name="widgetOrderBill">
  <part name="price" type="xsd:float"/>
</message>
<message name="badSize">
  <part name="numInventory" type="xsd:int"/>
</message>
<message name="widgetKey">
  <part name="keyVal" element="xsd1:keyElem"/>
</message>

<portType name="orderWidgets">
  <operation name="placeWidgetOrder">
    <input message="tns:widgetOrder" name="order"/>
    <output message="tns:widgetOrderBill" name="bill"/>
    <fault message="tns:badSize" name="sizeFault"/>
  </operation>
</portType>

<binding name="orderWidgetsBinding" type="tns:orderWidgets">
  <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="placeWidgetOrder">
      <soap:operation soapAction="" style="document"/>
      <input name="order">
        <soap:body use="literal"/>
        <soap:header message="tns:widgetKey" part="keyVal"/>
      </input>
      <output name="bill">
        <soap:body use="literal"/>
        <soap:header message="tns:widgetKey" part="keyVal"/>
      </output>
      <fault name="sizeFault">
        <soap:body use="literal"/>
      </fault>
  </operation>
</binding>
...
</definitions>

You can modify Example 2.4 so that the header value is a part of the input and output messages as shown in Example 2.5. In this case keyVal is a part of the input and output messages. In the soap:body element's parts attribute specifies that keyVal cannot be inserted into the body. However, it is inserted into the SOAP header.

Example 2.5. SOAP 1.1 Binding for orderWidgets with a SOAP Header

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="widgetOrderForm.wsdl"
    targetNamespace="http://widgetVendor.com/widgetOrderForm"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="http://widgetVendor.com/widgetOrderForm"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsd1="http://widgetVendor.com/types/widgetTypes"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">

<types>
  <schema targetNamespace="http://widgetVendor.com/types/widgetTypes"
           xmlns="http://www.w3.org/2001/XMLSchema"
           xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <element name="keyElem" type="xsd:base64Binary"/>
  </schema>
</types>

<message name="widgetOrder">
  <part name="numOrdered" type="xsd:int"/>
  <part name="keyVal" element="xsd1:keyElem"/>
</message>
<message name="widgetOrderBill">
  <part name="price" type="xsd:float"/>
  <part name="keyVal" element="xsd1:keyElem"/>
</message>
<message name="badSize">
  <part name="numInventory" type="xsd:int"/>
</message>

<portType name="orderWidgets">
  <operation name="placeWidgetOrder">
    <input message="tns:widgetOrder" name="order"/>
    <output message="tns:widgetOrderBill" name="bill"/>
    <fault message="tns:badSize" name="sizeFault"/>
  </operation>
</portType>

<binding name="orderWidgetsBinding" type="tns:orderWidgets">
  <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="placeWidgetOrder">
      <soap:operation soapAction="" style="document"/>
      <input name="order">
        <soap:body use="literal" parts="numOrdered"/>
        <soap:header message="tns:widgetOrder" part="keyVal"/>
      </input>
      <output name="bill">
        <soap:body use="literal" parts="bill"/>
        <soap:header message="tns:widgetOrderBill" part="keyVal"/>
      </output>
      <fault name="sizeFault">
        <soap:body use="literal"/>
      </fault>
  </operation>
</binding>
...
</definitions>
PK HA}1OEBPS/FUSECXFBindingIntro.html Chapter 1. Understanding Bindings in WSDL

Chapter 1. Understanding Bindings in WSDL

Bindings provide a bridge between the logical messages used by a service to a concrete data format that an endpoint uses in the physical world. They describe how the logical messages are mapped into a payload format that is used on the wire by an endpoint. It is within the bindings that details such as parameter order, concrete data types, and return values are specified. For example, the parts of a message can be reordered in a binding to reflect the order required by an RPC call. Depending on the binding type, you can also identify which of the message parts, if any, represent the return type of a method.

Port types and bindings are directly related. A port type is an abstract definition of a set of interactions between two logical services. A binding is a concrete definition of how the messages used to implement the logical services will be instantiated in the physical world. Each binding is then associated with a set of network details that finish the definition of one endpoint that exposes the logical service defined by the port type.

To ensure that an endpoint defines only a single service, WSDL requires that a binding can only represent a single port type. For example, if you had a contract with two port types, you could not write a single binding that mapped both of them into a concrete data format. You would need two bindings.

However, WSDL allows for a port type to be mapped to several bindings. For example, if your contract had a single port type, you could map it into two or more bindings. Each binding could alter how the parts of the message are mapped or they could specify entirely different payload formats for the message.

Bindings are defined in a contract using the WSDL binding element. The binding element has a single attribute, name, that specifies a unique name for the binding. The value of this attribute is used to associate the binding with an endpoint as discussed in Defining Your Logical Interfaces in Writing WSDL Contracts.

The actual mappings are defined in the children of the binding element. These elements vary depending on the type of payload format you decide to use. The different payload formats and the elements used to specify their mappings are discussed in the following chapters.

Fuse Services Framework provides command line tools that can generate bindings for predefined service interfaces.

The tools will add the proper elements to your contract for you. However, it is recommended that you have some knowledge of how the different types of bindings work.

You can also add a binding to a contract using any text editor. When hand editing a contract, you are responsible for ensuring that the contract is valid.

The Fuse Services Framework supports the following bindings:

PK HAR~.z z OEBPS/FUSECXFBindingsPart.html Part I. Bindings

Bindings

Table of Contents

1. Understanding Bindings in WSDL
2. Using SOAP 1.1 Messages
Adding a SOAP 1.1 Binding
Adding SOAP Headers to a SOAP 1.1 Binding
3. Using SOAP 1.2 Messages
Adding a SOAP 1.2 Binding to a WSDL Document
Adding Headers to a SOAP 1.2 Message
4. Sending Binary Data Using SOAP with Attachments
5. Sending Binary Data with SOAP MTOM
Annotating Data Types to use MTOM
Enabling MTOM
Using JAX-WS APIs
Using configuration
6. Using XML Documents
PK HAX8N OEBPS/FUSECXFHTTP.html Chapter 8. Using HTTP

Chapter 8. Using HTTP

Adding a Basic HTTP Endpoint
Configuring a Consumer
Using Configuration
Using WSDL
Consumer Cache Control Directives
Configuring a Service Provider
Using Configuration
Using WSDL
Service Provider Cache Control Directives
Configuring the Jetty Runtime
Using the HTTP Transport in Decoupled Mode
PK HA7rrOEBPS/FUSECXFHTTPConsumer.html Configuring a Consumer

Configuring a Consumer

Using Configuration
Using WSDL
Consumer Cache Control Directives

HTTP consumer endpoints can specify a number of HTTP connection attributes including whether the endpoint automatically accepts redirect responses, whether the endpoint can use chunking, whether the endpoint will request a keep-alive, and how the endpoint interacts with proxies. In addition to the HTTP connection properties, an HTTP consumer endpoint can specify how it is secured.

A consumer endpoint can be configured using two mechanisms:

PK HAb ! OEBPS/FUSECXFJMS.html Chapter 10. Using Generic JMS

Chapter 10. Using Generic JMS

Using the JMS configuration bean
Using WSDL to configure JMS
Basic JMS configuration
JMS client configuration
JMS provider configuration
Using a Named Reply Destination

The Fuse Services Framework generic JMS transport can connect to any JMS provider and work with applications that exchange JMS messages with bodies of either TextMessage or ByteMessage.

There are two ways to enable and configure the JMS transport:

PK HA]OEBPS/FUSECXFMTOM.html Chapter 5. Sending Binary Data with SOAP MTOM

Chapter 5. Sending Binary Data with SOAP MTOM

Annotating Data Types to use MTOM
Enabling MTOM
Using JAX-WS APIs
Using configuration

SOAP Message Transmission Optimization Mechanism (MTOM) specifies an optimized method for sending binary data as part of a SOAP message. Unlike SOAP with Attachments, MTOM requires the use of XML-binary Optimized Packaging (XOP) packages for transmitting binary data. Using MTOM to send binary data does not require you to fully define the MIME Multipart/Related message as part of the SOAP binding. It does, however, require that you do the following:

  1. Annotate the data that you are going to send as an attachment.

    You can annotate either your WSDL or the Java class that implements your data.

  2. Enable the runtime's MTOM support.

    This can be done either programmatically or through configuration.

  3. Develop a DataHandler for the data being passed as an attachment.

    [Note]Note

    Developing DataHandlers is beyond the scope of this book.

PK HAM22OEBPS/FUSECXFPortIntro.html Chapter 7. Understanding How Endpoints are Defined in WSDL

Chapter 7. Understanding How Endpoints are Defined in WSDL

An endpoint can be thought of as a physical manifestation of a service. It combines a binding, which specifies the physical representation of the logical data used by a service, and a set of networking details that define the physical connection details used to make the service contactable by other endpoints.

In the same way a binding can only map a single interface, an endpoint can only map to a single service. However, a service can be manifested by any number of endpoints. For example, you could define a ticket selling service that was manifested by four different endpoints. However, you could not have a single endpoint that manifested both a ticket selling service and a widget selling service.

Endpoints are defined in a contract using a combination of the WSDL service element and the WSDL port element. The service element is a collection of related port elements. The port elements define the actual endpoints.

The WSDL service element has a single attribute, name, that specifies a unique name. The service element is used as the parent element of a collection of related port elements. WSDL makes no specification about how the port elements are related. You can associate the port elements in any manner you see fit.

The WSDL port element has a single attribute, binding, that specifies the binding used by the endpoint. The port element is the parent element of the elements that specify the actual transport details used by the endpoint. The elements used to specify the transport details are discussed in the following sections.

Fuse Services Framework provides command line tools that can generated endpoints for predefined service interface and binding combinations.

The tools will add the proper elements to your contract for you. However, it is recommended that you have some knowledge of how the different transports used in defining an endpoint work.

You can also add an endpoint to a contract using any text editor. When you hand edit a contract, you are responsible for ensuring that the contract is valid.

Endpoint definitions are built using extensions defined for each of the transports the Fuse Services Framework supports. This includes the following transports:

PK HA)OEBPS/FUSECXFSOAP11.html Chapter 2. Using SOAP 1.1 Messages

Chapter 2. Using SOAP 1.1 Messages

Adding a SOAP 1.1 Binding
Adding SOAP Headers to a SOAP 1.1 Binding
PK HAOEBPS/FUSECXFSOAP12.html Chapter 3. Using SOAP 1.2 Messages

Chapter 3. Using SOAP 1.2 Messages

Adding a SOAP 1.2 Binding to a WSDL Document
Adding Headers to a SOAP 1.2 Message
PK HA Chapter 4. Sending Binary Data Using SOAP with Attachments

MIME multipart messages are described using a mime:multipartRelated element that contains a number of mime:part elements. To fully describe a MIME multipart message you must do the following:

  1. Inside the input or output message you are sending as a MIME multipart message, add a mime:mulipartRelated element as the first child element of the enclosing message.

  2. Add a mime:part child element to the mime:multipartRelated element and set its name attribute to a unique string.

  3. Add a soap:body element as the child of the mime:part element and set its attributes appropriately.

    [Tip]Tip

    If the contract had a default SOAP binding, you can copy the soap:body element from the corresponding message from the default binding into the MIME multipart message.

  4. Add another mime:part child element to the mime:multipartReleated element and set its name attribute to a unique string.

  5. Add a mime:content child element to the mime:part element to describe the contents of this part of the message.

    To fully describe the contents of a MIME message part the mime:content element has the following attributes:

  6. For each additional MIME part, repeat steps Step 4 and Step 5.

Example 4.2 shows a WSDL fragment defining a service that stores X-rays in JPEG format. The image data, xRay, is stored as an xsd:base64binary and is packed into the MIME multipart message's second part, imageData. The remaining two parts of the input message, patientName and patientNumber, are sent in the first part of the MIME multipart image as part of the SOAP body.

Example 4.2. Contract using SOAP with Attachments

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="XrayStorage"
    targetNamespace="http://mediStor.org/x-rays"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:tns="http://mediStor.org/x-rays"
    xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <message name="storRequest">
    <part name="patientName" type="xsd:string"/>
    <part name="patientNumber" type="xsd:int"/>
    <part name="xRay" type="xsd:base64Binary"/>
  </message>
  <message name="storResponse">
    <part name="success" type="xsd:boolean"/>
  </message>

  <portType name="xRayStorage">
    <operation name="store">
      <input message="tns:storRequest" name="storRequest"/>
      <output message="tns:storResponse" name="storResponse"/>
    </operation>
  </portType>

  <binding name="xRayStorageBinding" type="tns:xRayStorage">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <operation name="store">
      <soap:operation soapAction="" style="document"/>
      <input name="storRequest">
        <mime:multipartRelated>
          <mime:part name="bodyPart">
            <soap:body use="literal"/>
          </mime:part>
          <mime:part name="imageData">
            <mime:content part="xRay" type="image/jpeg"/>
          </mime:part>
        </mime:multipartRelated>
      </input>
      <output name="storResponse">
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>

  <service name="xRayStorageService">
    <port binding="tns:xRayStorageBinding" name="xRayStoragePort">
      <soap:address location="http://localhost:9000"/>
    </port>
  </service>
</definitions>
PK HA# OEBPS/FUSECXFTransAdvPart.html Part III. Appendices
PK HA:F F OEBPS/FUSECXFTransportsPart.html Part II. Transports
PK HAG;MMOEBPS/FUSECXFXMLBinding.html Chapter 6. Using XML Documents

To map an interface to a pure XML payload format do the following:

  1. Add the namespace declaration to include the extensions defining the XML binding. See XML binding namespace.

  2. Add a standard WSDL binding element to your contract to hold the XML binding, give the binding a unique name, and specify the name of the WSDL portType element that represents the interface being bound.

  3. Add an xformat:binding child element to the binding element to identify that the messages are being handled as pure XML documents without SOAP envelopes.

  4. Optionally, set the xformat:binding element's rootNode attribute to a valid QName. For more information on the effect of the rootNode attribute see XML messages on the wire.

  5. For each operation defined in the bound interface, add a standard WSDL operation element to hold the binding information for the operation's messages.

  6. For each operation added to the binding, add the input, output, and fault children elements to represent the messages used by the operation.

    These elements correspond to the messages defined in the interface definition of the logical operation.

  7. Optionally add an xformat:body element with a valid rootNode attribute to the added input, output, and fault elements to override the value of rootNode set at the binding level.

[Note]Note

If any of your messages have no parts, for example the output message for an operation that returns void, you must set the rootNode attribute for the message to ensure that the message written on the wire is a valid, but empty, XML document.

When you specify that an interface’s messages are to be passed as XML documents, without a SOAP envelope, you must take care to ensure that your messages form valid XML documents when they are written on the wire. You also need to ensure that non-Fuse Services Framework participants that receive the XML documents understand the messages generated by Fuse Services Framework.

A simple way to solve both problems is to use the optional rootNode attribute on either the global xformat:binding element or on the individual message’s xformat:body elements. The rootNode attribute specifies the QName for the element that serves as the root node for the XML document generated by Fuse Services Framework. When the rootNode attribute is not set, Fuse Services Framework uses the root element of the message part as the root element when using doc style messages, or an element using the message part name as the root element when using rpc style messages.

For example, if the rootNode attribute is not set the message defined in Example 6.1 would generate an XML document with the root element lineNumber.

For messages with one part, Fuse Services Framework will always generate a valid XML document even if the rootNode attribute is not set. However, the message in Example 6.2 would generate an invalid XML document.

Without the rootNode attribute specified in the XML binding, Fuse Services Framework will generate an XML document similar to Example 6.3 for the message defined in Example 6.2. The generated XML document is invalid because it has two root elements: pairName and entryNum.

If you set the rootNode attribute, as shown in Example 6.4 Fuse Services Framework will wrap the elements in the specified root element. In this example, the rootNode attribute is defined for the entire binding and specifies that the root element will be named entrants.

An XML document generated from the input message would be similar to Example 6.5. Notice that the XML document now only has one root element.

PK HA[%%OEBPS/HTTPBasic.html Adding a Basic HTTP Endpoint
PK HAe0#OEBPS/HTTPConsumerCacheControl.html Consumer Cache Control Directives

Table 8.3 lists the cache control directives supported by an HTTP consumer.

Table 8.3. http-conf:client Cache Control Directives

DirectiveBehavior
no-cache

Caches cannot use a particular response to satisfy subsequent requests without first revalidating that response with the server. If specific response header fields are specified with this value, the restriction applies only to those header fields within the response. If no response header fields are specified, the restriction applies to the entire response.

no-store

Caches must not store either any part of a response or any part of the request that invoked it.

max-age

The consumer can accept a response whose age is no greater than the specified time in seconds.

max-stale

The consumer can accept a response that has exceeded its expiration time. If a value is assigned to max-stale, it represents the number of seconds beyond the expiration time of a response up to which the consumer can still accept that response. If no value is assigned, the consumer can accept a stale response of any age.

min-fresh

The consumer wants a response that is still fresh for at least the specified number of seconds indicated.

no-transform

Caches must not modify media type or location of the content in a response between a provider and a consumer.

only-if-cached

Caches should return only responses that are currently stored in the cache, and not responses that need to be reloaded or revalidated.

cache-extension

Specifies additional extensions to the other cache directives. Extensions can be informational or behavioral. An extended directive is specified in the context of a standard directive, so that applications not understanding the extended directive can adhere to the behavior mandated by the standard directive.

PK HA=R5UUOEBPS/HTTPConsumerConfig.html Using Configuration

You configure an HTTP consumer endpoint using the http-conf:conduit element and its children. The http-conf:conduit element takes a single attribute, name, that specifies the WSDL port element corresponding to the endpoint. The value for the name attribute takes the form portQName.http-conduit. Example 8.5 shows the http-conf:conduit element that would be used to add configuration for an endpoint that is specified by the WSDL fragment <port binding="widgetSOAPBinding" name="widgetSOAPPort> when the endpoint's target namespace is http://widgets.widgetvendor.net.

The http-conf:conduit element has child elements that specify configuration information. They are described in Table 8.1.

The http-conf:client element is used to configure the non-security properties of a consumer endpoint's HTTP connection. Its attributes, described in Table 8.2, specify the connection's properties.

Table 8.2. HTTP Consumer Configuration Attributes

AttributeDescription
ConnectionTimeout

Specifies the amount of time, in milliseconds, that the consumer attempts to establish a connection before it times out. The default is 30000.

0 specifies that the consumer will continue to send the request indefinitely.

ReceiveTimeout

Specifies the amount of time, in milliseconds, that the consumer will wait for a response before it times out. The default is 30000.

0 specifies that the consumer will wait indefinitely.

AutoRedirect

Specifies if the consumer will automatically follow a server issued redirection. The default is false.

MaxRetransmits

Specifies the maximum number of times a consumer will retransmit a request to satisfy a redirect. The default is -1 which specifies that unlimited retransmissions are allowed.

AllowChunking

Specifies whether the consumer will send requests using chunking. The default is true which specifies that the consumer will use chunking when sending requests.

Chunking cannot be used if either of the following are true:

  • http-conf:basicAuthSupplier is configured to provide credentials preemptively.

  • AutoRedirect is set to true.

In both cases the value of AllowChunking is ignored and chunking is disallowed.

Accept

Specifies what media types the consumer is prepared to handle. The value is used as the value of the HTTP Accept property. The value of the attribute is specified using multipurpose internet mail extensions (MIME) types.

AcceptLanguage

Specifies what language (for example, American English) the consumer prefers for the purpose of receiving a response. The value is used as the value of the HTTP AcceptLanguage property.

Language tags are regulated by the International Organization for Standards (ISO) and are typically formed by combining a language code, determined by the ISO-639 standard, and country code, determined by the ISO-3166 standard, separated by a hyphen. For example, en-US represents American English.

AcceptEncoding

Specifies what content encodings the consumer is prepared to handle. Content encoding labels are regulated by the Internet Assigned Numbers Authority (IANA). The value is used as the value of the HTTP AcceptEncoding property.

ContentType

Specifies the media type of the data being sent in the body of a message. Media types are specified using multipurpose internet mail extensions (MIME) types. The value is used as the value of the HTTP ContentType property. The default is text/xml.

For web services, this should be set to text/xml. If the client is sending HTML form data to a CGI script, this should be set to application/x-www-form-urlencoded. If the HTTP POST request is bound to a fixed payload format (as opposed to SOAP), the content type is typically set to application/octet-stream.

Host

Specifies the Internet host and port number of the resource on which the request is being invoked. The value is used as the value of the HTTP Host property.

This attribute is typically not required. It is only required by certain DNS scenarios or application designs. For example, it indicates what host the client prefers for clusters (that is, for virtual servers mapping to the same Internet protocol (IP) address).

Connection

Specifies whether a particular connection is to be kept open or closed after each request/response dialog. There are two valid values:

  • Keep-Alive — Specifies that the consumer wants the connection kept open after the initial request/response sequence. If the server honors it, the connection is kept open until the consumer closes it.

  • close(default) — Specifies that the connection to the server is closed after each request/response sequence.

CacheControl

Specifies directives about the behavior that must be adhered to by caches involved in the chain comprising a request from a consumer to a service provider. See Consumer Cache Control Directives.

Cookie

Specifies a static cookie to be sent with all requests.

BrowserType

Specifies information about the browser from which the request originates. In the HTTP specification from the World Wide Web consortium (W3C) this is also known as the user-agent. Some servers optimize based on the client that is sending the request.

Referer

Specifies the URL of the resource that directed the consumer to make requests on a particular service. The value is used as the value of the HTTP Referer property.

This HTTP property is used when a request is the result of a browser user clicking on a hyperlink rather than typing a URL. This can allow the server to optimize processing based upon previous task flow, and to generate lists of back-links to resources for the purposes of logging, optimized caching, tracing of obsolete or mistyped links, and so on. However, it is typically not used in web services applications.

If the AutoRedirect attribute is set to true and the request is redirected, any value specified in the Referer attribute is overridden. The value of the HTTP Referer property is set to the URL of the service that redirected the consumer’s original request.

DecoupledEndpoint

Specifies the URL of a decoupled endpoint for the receipt of responses over a separate provider->consumer connection. For more information on using decoupled endpoints see, Using the HTTP Transport in Decoupled Mode.

You must configure both the consumer endpoint and the service provider endpoint to use WS-Addressing for the decoupled endpoint to work.

ProxyServer

Specifies the URL of the proxy server through which requests are routed.

ProxyServerPort

Specifies the port number of the proxy server through which requests are routed.

ProxyServerType

Specifies the type of proxy server used to route requests. Valid values are:

  • HTTP(default)

  • SOCKS

PK HAѸ5*==OEBPS/HTTPConsumerWSDL.html Using WSDL
PK HA]77OEBPS/HTTPDecoupled.html Using the HTTP Transport in Decoupled Mode

Using the HTTP transport in decoupled mode adds extra layers of complexity to the processing of HTTP messages. While the added complexity is transparent to the implementation level code in an application, it might be important to understand what happens for debugging reasons.

Figure 8.1 shows the flow of messages when using HTTP in decoupled mode.

A request starts the following process:

  1. The consumer implementation invokes an operation and a request message is generated.

  2. The WS-Addressing layer adds the WS-A headers to the message.

    When a decoupled endpoint is specified in the consumer's configuration, the address of the decoupled endpoint is placed in the WS-A ReplyTo header.

  3. The message is sent to the service provider.

  4. The service provider receives the message.

  5. The request message from the consumer is dispatched to the provider's WS-A layer.

  6. Because the WS-A ReplyTo header is not set to anonymous, the provider sends back a message with the HTTP status code set to 202, acknowledging that the request has been received.

  7. The HTTP layer sends a 202 Accepted message back to the consumer using the original connection's back-channel.

  8. The consumer receives the 202 Accepted reply on the back-channel of the HTTP connection used to send the original message.

    When the consumer receives the 202 Accepted reply, the HTTP connection closes.

  9. The request is passed to the service provider's implementation where the request is processed.

  10. When the response is ready, it is dispatched to the WS-A layer.

  11. The WS-A layer adds the WS-Addressing headers to the response message.

  12. The HTTP transport sends the response to the consumer's decoupled endpoint.

  13. The consumer's decoupled endpoint receives the response from the service provider.

  14. The response is dispatched to the consumer's WS-A layer where it is correlated to the proper request using the WS-A RelatesTo header.

  15. The correlated response is returned to the client implementation and the invoking call is unblocked.

PK HA\/OEBPS/HTTPProvider.html Configuring a Service Provider

HTTP service provider endpoints can specify a number of HTTP connection attributes including if it will honor keep alive requests, how it interacts with caches, and how tolerant it is of errors in communicating with a consumer.

A service provider endpoint can be configured using two mechanisms:

PK HAs#OEBPS/HTTPProviderCacheControl.html Service Provider Cache Control Directives

Table 8.6 lists the cache control directives supported by an HTTP service provider.

Table 8.6. http-conf:server Cache Control Directives

DirectiveBehavior
no-cache

Caches cannot use a particular response to satisfy subsequent requests without first revalidating that response with the server. If specific response header fields are specified with this value, the restriction applies only to those header fields within the response. If no response header fields are specified, the restriction applies to the entire response.

public

Any cache can store the response.

private

Public (shared) caches cannot store the response because the response is intended for a single user. If specific response header fields are specified with this value, the restriction applies only to those header fields within the response. If no response header fields are specified, the restriction applies to the entire response.

no-store

Caches must not store any part of the response or any part of the request that invoked it.

no-transform

Caches must not modify the media type or location of the content in a response between a server and a client.

must-revalidate

Caches must revalidate expired entries that relate to a response before that entry can be used in a subsequent response.

proxy-revalidate

Does the same as must-revalidate, except that it can only be enforced on shared caches and is ignored by private unshared caches. When using this directive, the public cache directive must also be used.

max-age

Clients can accept a response whose age is no greater that the specified number of seconds.

s-max-age

Does the same as max-age, except that it can only be enforced on shared caches and is ignored by private unshared caches. The age specified by s-max-age overrides the age specified by max-age. When using this directive, the proxy-revalidate directive must also be used.

cache-extension

Specifies additional extensions to the other cache directives. Extensions can be informational or behavioral. An extended directive is specified in the context of a standard directive, so that applications not understanding the extended directive can adhere to the behavior mandated by the standard directive.

PK HADXjp;p;OEBPS/HTTPProviderConfig.html Using Configuration

The http-conf:server element is used to configure the properties of a service provider endpoint's HTTP connection. Its attributes, described in Table 8.5, specify the connection's properties.

Table 8.5. HTTP Service Provider Configuration Attributes

AttributeDescription
ReceiveTimeout

Sets the length of time, in milliseconds, the service provider attempts to receive a request before the connection times out. The default is 30000.

0 specifies that the provider will not timeout.

SuppressClientSendErrors

Specifies whether exceptions are to be thrown when an error is encountered on receiving a request. The default is false; exceptions are thrown on encountering errors.

SuppressClientReceiveErrors

Specifies whether exceptions are to be thrown when an error is encountered on sending a response to a consumer. The default is false; exceptions are thrown on encountering errors.

HonorKeepAlive

Specifies whether the service provider honors requests for a connection to remain open after a response has been sent. The default is false; keep-alive requests are ignored.

RedirectURL

Specifies the URL to which the client request should be redirected if the URL specified in the client request is no longer appropriate for the requested resource. In this case, if a status code is not automatically set in the first line of the server response, the status code is set to 302 and the status description is set to Object Moved. The value is used as the value of the HTTP RedirectURL property.

CacheControl

Specifies directives about the behavior that must be adhered to by caches involved in the chain comprising a response from a service provider to a consumer. See Service Provider Cache Control Directives.

ContentLocation

Sets the URL where the resource being sent in a response is located.

ContentType

Specifies the media type of the information being sent in a response. Media types are specified using multipurpose internet mail extensions (MIME) types. The value is used as the value of the HTTP ContentType location.

ContentEncoding

Specifies any additional content encodings that have been applied to the information being sent by the service provider. Content encoding labels are regulated by the Internet Assigned Numbers Authority (IANA). Possible content encoding values include zip, gzip, compress, deflate, and identity. This value is used as the value of the HTTP ContentEncoding property.

The primary use of content encodings is to allow documents to be compressed using some encoding mechanism, such as zip or gzip. Fuse Services Framework performs no validation on content codings. It is the user’s responsibility to ensure that a specified content coding is supported at application level.

ServerType

Specifies what type of server is sending the response. Values take the form program-name/version; for example, Apache/1.2.5.

PK HAxAGOEBPS/HTTPProviderWSDL.html Using WSDL
PK HAMGGOEBPS/HTTPServerRuntime.html Configuring the Jetty Runtime

The httpj:engine element is used to configure specific instances of the Jetty runtime. It has a single attribute, port, that specifies the number of the port being managed by the Jetty instance.

[Tip]Tip

You can specify a value of 0 for the port attribute. Any threading properties specified in an httpj:engine element with its port attribute set to 0 are used as the configuration for all Jetty listeners that are not explicitly configured.

Each httpj:engine element can have two children: one for configuring security properties and one for configuring the Jetty instance's thread pool. For each type of configuration you can either directly provide the configuration information or you can provide a reference to a set of configuration properties defined in the parent httpj:engine-factory element.

The child elements used to provide the configuration properties are described in Table 8.8.

PK HA ?,P,POEBPS/MTOMAnnotateData.html Annotating Data Types to use MTOM

Example 5.1 shows a WSDL document for a Web service that uses a message which contains one string field, one integer field, and a binary field. The binary field is intended to carry a large image file, so it is not appropriate to send it as part of a normal SOAP message.

Example 5.1. Message for MTOM

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="XrayStorage"
    targetNamespace="http://mediStor.org/x-rays"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:tns="http://mediStor.org/x-rays"
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
    xmlns:xsd1="http://mediStor.org/types/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <types>
    <schema targetNamespace="http://mediStor.org/types/"
            xmlns="http://www.w3.org/2001/XMLSchema">
      <complexType name="xRayType">
        <sequence>
          <element name="patientName" type="xsd:string" />
          <element name="patientNumber" type="xsd:int" />
          <element name="imageData" type="xsd:base64Binary" />
        </sequence>
      </complexType>
      <element name="xRay" type="xsd1:xRayType" />
    </schema>
  </types>

  <message name="storRequest">
    <part name="record" element="xsd1:xRay"/>
  </message>
  <message name="storResponse">
    <part name="success" type="xsd:boolean"/>
  </message>

  <portType name="xRayStorage">
    <operation name="store">
      <input message="tns:storRequest" name="storRequest"/>
      <output message="tns:storResponse" name="storResponse"/>
    </operation>
  </portType>

  <binding name="xRayStorageSOAPBinding" type="tns:xRayStorage">
    <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="store">
      <soap12:operation soapAction="" style="document"/>
      <input name="storRequest">
        <soap12:body use="literal"/>
      </input>
      <output name="storResponse">
        <soap12:body use="literal"/>
      </output>
    </operation>
  </binding>
  ...
</definitions>

If you want to use MTOM to send the binary part of the message as an optimized attachment you must add the xmime:expectedContentTypes attribute to the element containing the binary data. This attribute is defined in the http://www.w3.org/2005/05/xmlmime namespace and specifies the MIME types that the element is expected to contain. You can specify a comma separated list of MIME types. The setting of this attribute changes how the code generators create the JAXB class for the data. For most MIME types, the code generator creates a DataHandler. Some MIME types, such as those for images, have defined mappings.

[Note]Note

The MIME types are maintained by the Internet Assigned Numbers Authority(IANA) and are described in detail in Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies and Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types.

[Tip]Tip

For most uses you specify application/octet-stream.

Example 5.2 shows how you can modify xRayType from Example 5.1 for using MTOM.

The generated JAXB class generated for xRayType no longer contains a byte[]. Instead the code generator sees the xmime:expectedContentTypes attribute and generates a DataHandler for the imageData field.

[Note]Note

You do not need to change the binding element to use MTOM. The runtime makes the appropriate changes when the data is sent.

PK HApOEBPS/MTOMEnable.html Enabling MTOM

By default the Fuse Services Framework runtime does not enable MTOM support. It sends all binary data as either part of the normal SOAP message or as an unoptimized attachment. You can activate MTOM support either programmatically or through the use of configuration.

PK HAYe0>0>OEBPS/SOAP11Adding.html Adding a SOAP 1.1 Binding
[Note]Note

To use wsdl2soap you will need to download the Fuse Services Framework distribution.

To generate a SOAP 1.1 binding using wsdl2soap use the following command:

wsdl2soap {-i port-type-name} [-b binding-name] [-d output-directory] [-o output-file] [-n soap-body-namespace] [-style (document/rpc)] [-use (literal/encoded)] [-v] [[-verbose] | [-quiet]] wsdlurl

The command has the following options:

OptionInterpretation
-i port-type-name

Specifies the portType element for which a binding is generated.

wsdlurlThe path and name of the WSDL file containing the portType element definition.

The tool has the following optional arguments:

OptionInterpretation
-b binding-nameSpecifies the name of the generated SOAP binding.
-d output-directorySpecifies the directory to place the generated WSDL file.
-o output-fileSpecifies the name of the generated WSDL file.
-n soap-body-namespaceSpecifies the SOAP body namespace when the style is RPC.
-style (document/rpc)Specifies the encoding style (document or RPC) to use in the SOAP binding. The default is document.
-use (literal/encoded)Specifies the binding use (encoded or literal) to use in the SOAP binding. The default is literal.
-vDisplays the version number for the tool.
-verboseDisplays comments during the code generation process.
-quietSuppresses comments during the code generation process.

The -i port-type-name and wsdlurl arguments are required. If the -style rpc argument is specified, the -n soap-body-namspace argument is also required. All other arguments are optional and may be listed in any order.

[Important]Important

wsdl2soap does not support the generation of document/encoded SOAP bindings.

If your system has an interface that takes orders and offers a single operation to process the orders it is defined in a WSDL fragment similar to the one shown in Example 2.1.

The SOAP binding generated for orderWidgets is shown in Example 2.2.

This binding specifies that messages are sent using the document/literal message style.

PK HA.OEBPS/SOAP12Headers.html Adding Headers to a SOAP 1.2 Message

Example 3.4 shows a modified version of the orderWidgets service shown in Example 3.1. This version is modified so that each order has an xsd:base64binary value placed in the header of the request and the response. The header is defined as being the keyVal part from the widgetKey message. In this case you are responsible for adding the application logic to create the header because it is not part of the input or output message.

Example 3.4. SOAP 1.2 Binding with a SOAP Header

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="widgetOrderForm.wsdl"
    targetNamespace="http://widgetVendor.com/widgetOrderForm"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
    xmlns:tns="http://widgetVendor.com/widgetOrderForm"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsd1="http://widgetVendor.com/types/widgetTypes"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">

<types>
  <schema targetNamespace="http://widgetVendor.com/types/widgetTypes"
           xmlns="http://www.w3.org/2001/XMLSchema"
           xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <element name="keyElem" type="xsd:base64Binary"/>
  </schema>
</types>

<message name="widgetOrder">
  <part name="numOrdered" type="xsd:int"/>
</message>
<message name="widgetOrderBill">
  <part name="price" type="xsd:float"/>
</message>
<message name="badSize">
  <part name="numInventory" type="xsd:int"/>
</message>
<message name="widgetKey">
  <part name="keyVal" element="xsd1:keyElem"/>
</message>

<portType name="orderWidgets">
  <operation name="placeWidgetOrder">
    <input message="tns:widgetOrder" name="order"/>
    <output message="tns:widgetOrderBill" name="bill"/>
    <fault message="tns:badSize" name="sizeFault"/>
  </operation>
</portType>

<binding name="orderWidgetsBinding" type="tns:orderWidgets">
  <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="placeWidgetOrder">
      <soap12:operation soapAction="" style="document"/>
      <input name="order">
        <soap12:body use="literal"/>
        <soap12:header message="tns:widgetKey" part="keyVal"/>
      </input>
      <output name="bill">
        <soap12:body use="literal"/>
        <soap12:header message="tns:widgetKey" part="keyVal"/>
      </output>
      <fault name="sizeFault">
        <soap12:body use="literal"/>
      </fault>
  </operation>
</binding>
...
</definitions>

You can modify Example 3.4 so that the header value is a part of the input and output messages, as shown in Example 3.5. In this case keyVal is a part of the input and output messages. In the soap12:body elements the parts attribute specifies that keyVal should not be inserted into the body. However, it is inserted into the header.

Example 3.5. SOAP 1.2 Binding for orderWidgets with a SOAP Header

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="widgetOrderForm.wsdl"
    targetNamespace="http://widgetVendor.com/widgetOrderForm"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
    xmlns:tns="http://widgetVendor.com/widgetOrderForm"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsd1="http://widgetVendor.com/types/widgetTypes"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">

<types>
  <schema targetNamespace="http://widgetVendor.com/types/widgetTypes"
           xmlns="http://www.w3.org/2001/XMLSchema"
           xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <element name="keyElem" type="xsd:base64Binary"/>
  </schema>
</types>

<message name="widgetOrder">
  <part name="numOrdered" type="xsd:int"/>
  <part name="keyVal" element="xsd1:keyElem"/>
</message>
<message name="widgetOrderBill">
  <part name="price" type="xsd:float"/>
  <part name="keyVal" element="xsd1:keyElem"/>
</message>
<message name="badSize">
  <part name="numInventory" type="xsd:int"/>
</message>

<portType name="orderWidgets">
  <operation name="placeWidgetOrder">
    <input message="tns:widgetOrder" name="order"/>
    <output message="tns:widgetOrderBill" name="bill"/>
    <fault message="tns:badSize" name="sizeFault"/>
  </operation>
</portType>

<binding name="orderWidgetsBinding" type="tns:orderWidgets">
  <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="placeWidgetOrder">
      <soap12:operation soapAction="" style="document"/>
      <input name="order">
        <soap12:body use="literal" parts="numOrdered"/>
        <soap12:header message="tns:widgetOrder" part="keyVal"/>
      </input>
      <output name="bill">
        <soap12:body use="literal" parts="bill"/>
        <soap12:header message="tns:widgetOrderBill" part="keyVal"/>
      </output>
      <fault name="sizeFault">
        <soap12:body use="literal"/>
      </fault>
  </operation>
</binding>
...
</definitions>
PK HAM>M>OEBPS/SOAP12WSDL.html Adding a SOAP 1.2 Binding to a WSDL Document
[Note]Note

To use wsdl2soap you will need to download the Fuse Services Framework distribution.

To generate a SOAP 1.2 binding using wsdl2soap use the following command:

wsdl2soap {-i port-type-name} [-b binding-name] {-soap12} [-d output-directory] [-o output-file] [-n soap-body-namespace] [-style (document/rpc)] [-use (literal/encoded)] [-v] [[-verbose] | [-quiet]] wsdlurl

The tool has the following required arguments:

OptionInterpretation
-i port-type-name

Specifies the portType element for which a binding is generated.

-soap12Specifies that the generated binding uses SOAP 1.2.
wsdlurlThe path and name of the WSDL file containing the portType element definition.

The tool has the following optional arguments:

OptionInterpretation
-b binding-nameSpecifies the name of the generated SOAP binding.
-soap12Specifies that the generated binding will use SOAP 1.2.
-d output-directorySpecifies the directory to place the generated WSDL file.
-o output-fileSpecifies the name of the generated WSDL file.
-n soap-body-namespaceSpecifies the SOAP body namespace when the style is RPC.
-style (document/rpc)Specifies the encoding style (document or RPC) to use in the SOAP binding. The default is document.
-use (literal/encoded)Specifies the binding use (encoded or literal) to use in the SOAP binding. The default is literal.
-vDisplays the version number for the tool.
-verboseDisplays comments during the code generation process.
-quietSuppresses comments during the code generation process.

The -i port-type-name and wsdlurl arguments are required. If the -style rpc argument is specified, the -n soap-body-namspace argument is also required. All other arguments are optional and can be listed in any order.

[Important]Important

wsdl2soap does not support the generation of document/encoded SOAP 1.2 bindings.

If your system has an interface that takes orders and offers a single operation to process the orders it is defined in a WSDL fragment similar to the one shown in Example 3.1.

The SOAP binding generated for orderWidgets is shown in Example 3.2.

This binding specifies that messages are sent using the document/literal message style.

PK HA. uVVOEBPS/SoapOverJms.html Chapter 9. Using SOAP Over JMS
PK HA OEBPS/SoapOverJmsBasics.html Basic configuration

The SOAP over JMS protocol is defined by the World Wide Web Consortium(W3C) as a way of providing a more reliable transport layer to the customary SOAP/HTTP protocol used by most services. The Fuse Services Framework implementation is fully compliant with the specification and should be compatible with any framework that is also compliant.

This transport uses JNDI to find the JMS destinations. When an operation is invoked, the request is packaged as a SOAP message and sent in the body of a JMS message to the specified destination.

To use the SOAP/JMS transport:

  1. Specify that the transport type is SOAP/JMS.

  2. Specify the target destination using a JMS URI.

  3. Optionally, configure the JNDI connection.

  4. Optionally, add additional JMS configuration.

You specify the address of the JMS target destination when specifying the WSDL port for the endpoint. The address specification for a SOAP/JMS endpoint uses the same soap:address element and attribute as a SOAP/HTTP endpoint. The difference is the address specification. JMS endpoints use a JMS URI as defined in the URI Scheme for JMS 1.0. Example 9.2 shows the syntax for a JMS URI.

Table 9.1 describes the available variants for the JMS URI.

The options portion of a JMS URI are used to configure the transport and are discussed in JMS URIs.

Example 9.3 shows the WSDL port entry for a SOAP/JMS endpoint whose target destination is looked up using JNDI.

For working with SOAP/JMS services in Java see Using SOAP over JMS in Developing Applications Using JAX-WS.

PK HAO5((OEBPS/SoapOverJmsUri.html JMS URIs

As shown in Example 9.2, you can append one or more options to the end of a JMS URI by separating them from the destination's address with a question mark(?). Multiple options are separated by an ampersand(&). Example 9.4 shows the syntax for using multiple options in a JMS URI.

PK HA399OEBPS/SoapOverJmsWsdl.html WSDL extensions

Table 9.4 shows all of the WSDL extension elements you can use to configure the JMS transport.

Table 9.4. SOAP/JMS WSDL extension elements

ElementDefaultDescription
soapjms:jndiInitialContextFactory Specifies the fully qualified Java class name of the JNDI provider. Equivalent to setting the java.naming.factory.initial Java system property.
soapjms:jndiURL Specifies the URL that initializes the JNDI provider. Equivalent to setting the java.naming.provider.url Java system property.
soapjms:jndiContextParameter Enables you to specify an additional property for creating the JNDI InitialContext. Use the name and value attributes to specify the property.
soapjms:jndiConnectionFactoryName Specifies the JNDI name of the JMS connection factory.
soapjms:deliveryModePERSISTENTSpecifies whether to use JMS PERSISTENT or NON_PERSISTENT message semantics. In the case of PERSISTENT delivery mode, the JMS broker stores messages in persistent storage before acknowledging them; whereas NON_PERSISTENT messages are kept in memory only.
soapjms:replyToName 

Explicitly specifies the reply destination to appear in the JMSReplyTo header. Setting this property is recommended for SOAP invocations that have request-reply semantics. If this property is not set the JMS provider allocates a temporary queue with an automatically generated name.

The value of this property has an interpretation that depends on the variant specified in the JMS URI, as follows:

  • jndi variant—the JNDI name of the destination.

  • queue or topic variants—the actual name of the destination.

soapjms:priority4Specifies the JMS message priority, which ranges from 0 (lowest) to 9 (highest).
soapjms:timeToLive0Time, in milliseconds, after which the message will be discarded by the JMS provider. A value of 0 represents an infinite lifetime.

Example 9.7 shows a WSDL contract for a SOAP/JMS service. It configures the JNDI layer in the binding scope, the message delivery details in the service scope, and the reply destination in the port scope.

Example 9.7. WSDL contract with SOAP/JMS configuration

<wsd;definitions ...
1    xmlns:soapjms="http://www.w3.org/2010/soapjms/"
  ... >
  ...
  <wsdl:binding name="JMSGreeterPortBinding" type="tns:JMSGreeterPortType">
    ...
2    <soapjms:jndiInitialContextFactory>
      org.apache.activemq.jndi.ActiveMQInitialContextFactory
    </soapjms:jndiInitialContextFactory>
    <soapjms:jndiURL>tcp://localhost:61616</soapjms:jndiURL>
    <soapjms:jndiConnectionFactoryName>
      ConnectionFactory
    </soapjms:jndiConnectionFactoryName>
    ...
  </wsdl:binding>
  ...
  <wsdl:service name="JMSGreeterService">
    ...
3    <soapjms:deliveryMode>NON_PERSISTENT</soapjms:deliveryMode>
    <soapjms:timeToLive>60000</soapjms:timeToLive>
    ...
    <wsdl:port binding="tns:JMSGreeterPortBinding" name="GreeterPort">
4      <soap:address location="jms:jndi:dynamicQueues/test.cxf.jmstransport.queue" />
5      <soapjms:replyToName>
        dynamicQueues/greeterReply.queue
      </soapjms:replyToName>
      ...
    </wsdl:port>
    ...
  </wsdl:service>
  ...
</wsdl:definitions>

The WSDL in Example 9.7 does the following:

1

Declare the namespace for the SOAP/JMS extensions.

2

Configure the JNDI connections in the binding scope.

3

Configure the JMS delivery style to non-persistent and each message to live for one minute.

4

Specify the target destination.

5

Configure the JMS transport so that reply messages are delivered on the greeterReply.queue queue.

PK HAGsf?f?OEBPS/bk01-toc.html Using the Web Services Bindings and Transports

Using the Web Services Bindings and Transports

Table of Contents

I. Bindings
1. Understanding Bindings in WSDL
2. Using SOAP 1.1 Messages
Adding a SOAP 1.1 Binding
Adding SOAP Headers to a SOAP 1.1 Binding
3. Using SOAP 1.2 Messages
Adding a SOAP 1.2 Binding to a WSDL Document
Adding Headers to a SOAP 1.2 Message
4. Sending Binary Data Using SOAP with Attachments
5. Sending Binary Data with SOAP MTOM
Annotating Data Types to use MTOM
Enabling MTOM
Using JAX-WS APIs
Using configuration
6. Using XML Documents
II. Transports
7. Understanding How Endpoints are Defined in WSDL
8. Using HTTP
Adding a Basic HTTP Endpoint
Configuring a Consumer
Using Configuration
Using WSDL
Consumer Cache Control Directives
Configuring a Service Provider
Using Configuration
Using WSDL
Service Provider Cache Control Directives
Configuring the Jetty Runtime
Using the HTTP Transport in Decoupled Mode
9. Using SOAP Over JMS
Basic configuration
JMS URIs
WSDL extensions
10. Using Generic JMS
Using the JMS configuration bean
Using WSDL to configure JMS
Basic JMS configuration
JMS client configuration
JMS provider configuration
Using a Named Reply Destination
III. Appendices
A. Integrating with Fuse Message Broker
B. Conduits
C. Conduit and Destination Based JMS Configuration
Basic endpoint configuration
Consumer configuration
Provider configuration
JMS Session Pool Configuration
Index

List of Figures

8.1. Message Flow in for a Decoupled HTTP Transport

List of Tables

3.1. soap12:header Attributes
4.1. mime:content Attributes
8.1. Elements Used to Configure an HTTP Consumer Endpoint
8.2. HTTP Consumer Configuration Attributes
8.3. http-conf:client Cache Control Directives
8.4. Elements Used to Configure an HTTP Service Provider Endpoint
8.5. HTTP Service Provider Configuration Attributes
8.6. http-conf:server Cache Control Directives
8.7. Elements for Configuring a Jetty Runtime Factory
8.8. Elements for Configuring a Jetty Runtime Instance
8.9. Attributes for Configuring a Jetty Thread Pool
9.1. JMS URI variants
9.2. JMS properties settable as URI options
9.3. JNDI properties settable as URI options
9.4. SOAP/JMS WSDL extension elements
10.1. General JMS Configuration Properties
10.2. JMS endpoint attributes
10.3. JMS Client WSDL Extensions
10.4. JMS provider endpoint WSDL extensions
C.1. messageType values
C.2. Provider Endpoint Configuration
C.3. Attributes for Configuring the JMS Session Pool

List of Examples

2.1. Ordering System Interface
2.2. SOAP 1.1 Binding for orderWidgets
2.3. SOAP Header Syntax
2.4. SOAP 1.1 Binding with a SOAP Header
2.5. SOAP 1.1 Binding for orderWidgets with a SOAP Header
3.1. Ordering System Interface
3.2. SOAP 1.2 Binding for orderWidgets
3.3. SOAP Header Syntax
3.4. SOAP 1.2 Binding with a SOAP Header
3.5. SOAP 1.2 Binding for orderWidgets with a SOAP Header
4.1. MIME Namespace Specification in a Contract
4.2. Contract using SOAP with Attachments
5.1. Message for MTOM
5.2. Binary Data for MTOM
5.3. JAXB Class for MTOM
5.4. Getting the SOAP Binding from an Endpoint
5.5. Setting a Service Provider's MTOM Enabled Property
5.6. Getting a SOAP Binding from a BindingProvider
5.7. Setting a Consumer's MTOM Enabled Property
5.8. Configuration for Enabling MTOM
6.1. Valid XML Binding Message
6.2. Invalid XML Binding Message
6.3. Invalid XML Document
6.4. XML Binding with rootNode set
6.5. XML Document generated using the rootNode attribute
6.6. Using xformat:body
8.1. SOAP 1.1 Port Element
8.2. SOAP 1.2 Port Element
8.3. HTTP Port Element
8.4. HTTP Consumer Configuration Namespace
8.5. http-conf:conduit Element
8.6. HTTP Consumer Endpoint Configuration
8.7. HTTP Consumer WSDL Element's Namespace
8.8. WSDL to Configure an HTTP Consumer Endpoint
8.9. HTTP Provider Configuration Namespace
8.10. http-conf:destination Element
8.11. HTTP Service Provider Endpoint Configuration
8.12. HTTP Provider WSDL Element's Namespace
8.13. WSDL to Configure an HTTP Service Provider Endpoint
8.14. Jetty Runtime Configuration Namespace
8.15. Configuring a Jetty Instance
8.16. Activating WS-Addressing using WSDL
8.17. Activating WS-Addressing using a Policy
8.18. Configuring a Consumer to Use a Decoupled HTTP Endpoint
9.1. SOAP over JMS binding specification
9.2. JMS URI syntax
9.3. SOAP/JMS endpoint address
9.4. Syntax for JMS URI options
9.5. Setting a JNDI property in a JMS URI
9.6. JMS URI that configures a JNDI connection
9.7. WSDL contract with SOAP/JMS configuration
10.1. Declaring the Spring p-namespace
10.2. JMS configuration bean
10.3. Adding JMS configuration to a JAX-WS client
10.4. Adding JMS configuration to a JMS conduit
10.5. JMS WSDL extension namespace
10.6. JMS WSDL port specification
10.7. WSDL for a JMS consumer endpoint
10.8. WSDL for a JMS provider endpoint
10.9. JMS Consumer Specification Using a Named Reply Queue
A.1. SOAP/JMS WSDL to connect to Fuse Message Broker
A.2. SOAP/JMS WSDL for specifying the Fuse Message Broker connection factory
A.3. WSDL port specification with a dynamically created queue
C.1. JMS Configuration Namespaces
C.2. Addressing Information in a Fuse Services Framework Configuration File
C.3. Configuration for a JMS Consumer Endpoint
C.4. Configuration for a Provider Endpoint
C.5. JMS Session Pool Configuration
PK HA **OEBPS/ch05s02s01.html Using JAX-WS APIs
PK HAUg8OEBPS/ch05s02s02.html Using configuration
PK HA};OEBPS/ch10s02s02.html JMS client configuration
PK HA0OEBPS/content.opf _FUSECXFBindTranGuideUsing the Web Services Bindings and TransportsJuly 2012Copyright © 2012 FuseSource Corp. All rights reserved.FuseSourceenPK HA!ߕOEBPS/cover.html Cover
Third Party Acknowledgements
PK HAOmmOEBPS/images/decoupled.gifGIF87a   &($ ) 17=  0$&%5''%'$2*A:+,)+-7(5)01/D35%C#)5J'6P-5F7:6;=;T-BB*?@>$Q-AC2W*3C_:BR7CY"Z'CFNFGE1X91X>AMc>Ni g7;Pql/@PlDPg7_?QR?,g8-f>FTeQSPVU:KSeRS[*n=9iFGeLSZm,zC``GbaCJb`bT_a^b`d?vNIqP`aj7|JOfSe|JqUUkYDuRWetV^q`wd,Rmpl:T4X3N8Rqq{survwd:S{|V~}Penyzxq}5Xdo~lhdCepvpxy~BbLeu{{:\cl@e_qm7c|XqrxcCcIoPrDm'f6m0j|uBlHq|>i9ef~zĖippw˨zүyr̎uϔݲ屰xˆŹùſºɆ͒ƿږۏڞ,@ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶}nOKݝIrЗ /=Yկǐ#KL˘3k~d].Ynڭn --6 eph!lį-sMVKZZ6x~N6 ϝB H3tTfaP:LgF#"J&x(m(&FSi":&.b9kj9yyÅ&ș&agifж%^+-^Z&e o*n릣o* k_.[-Je0a(97+Q? aʾkkfiFa*/ in) yfd(DC\aJ 3GK"TQP l  t*uВpI\ gl7ˁpb.82z\% ~i(&] d,vM*ΐn?Suņ4pWq w\@󲵬֋YUlԭD`h!OIVhHJ %F-YP`yI+@GH@ !& "L )V"! MHtjWeQH ؄#ҐYCd 1KIN" |a `Kh!n80h@ ,YZĕ8rZ"+hEA&@ciC輧B~3QHc~q  ĥ-emXHMRzm8FeTJժZXm*&tl9FVǚԧe֊>P @TѪԧn jPHX2!skVε0YX v[@ VKCbufRթ0ٲ╈ݫjW:e2dP@N0elC1la1>&8A*р .`# \5gkZ. Rht l6JqfPU:֩E^W=Mbn+K}7 *3RP]F)F fvHEgQ'y.g<Ͱ7l@ +YaɞO2>L]xP1QKR[٫P!C - |xȄL$,0IpDsfڙ DFJ!D4:=%-`5[yXN_o8{GC21Jp:HAkVݘAH&I|iqe:!p1Ll9: -~@?/y Z596RU @\l ,l:o 96*͐a$i R#k99^{S+GT݅1){31?_LPZC(n9]C^Z-̝m PXsI0>L F hm:r|T#Щ<T=}Z 9ǥ &`0 Y"+~=gxծ/+_qhVukE5j60ubK{<Pdwݮ(zbsrP }/=i{+!G6f~LX5cN{73ryse??^=_鰿jpHAp QKKeGPP ȀwHng"yחTuwwyU{UVi~B}Ql& gp gw`l*8LwORR6VłFJ71\! 4VY}ZCRJ *P Pj6-0Epj+0vh0RQ%߀1 pdX bk#>-}\}6v@1lE{vRQkA'h(7bYP) `0Q`Jg hhH-QS0-e!11@x` P(2~`hP9Yyih i`y99p "9$Y!(i,i-/Yx P466NP RSTP5WɏRiII]YfYOʨHinyoE tOIhP)ouNIz jysɘt[I* ^)0)r*1 pX4Y /x)yYyY5yYƩȹٜZ)kI9/闦 Ƞ``@t p@$  P  @p` `Yi9ɛyٖk :L  )UBI)kyɜ>ZaIIM =IIʣPz(y&Rz4JXJ5:%FyZu'ʖyʧzڧ8`e`Sr0|Q9NjIщʤGښ ~Z)NZj9*z)ʚU9˹iiڬpJ*9z֚JI6YГj@ 0X(k22~֮>E[{۱ ";$[&{(*,.02;4[6{8:<۳>@B;D[F{HJL۴NPR;T[V{XZH{g`b;d[f{hjl[l\fr$ TUQrj-ry{|9X  !y]ڰ3hR0^rlhJJ4>hV;mgtH?v|@ "gPOPQAQRk +e?n\;Vo`%sDC0M1:=b%%вЮkxhH 5#l5;C6$Vl֣I E5X=UCc*YC3|EB*m;,7=5e,`g2 1 Hj3GB1m Mc<`"@9C=c8@7,3Ղ.ZK7u '@IB pJp%5/o,[  @@ 0@gܦH0_02gT"uS@4_,N@p($&JİDeы eR pXx1&w?&0cxCfx7aNQD-H 8.08YD`X>Ud]%#pttc̠?^wca@4Y<"Q p< z @{ \Nz:0&~QfFl@mFmj%LHP5mę`? jeĉe1bBWZ&R%TX*!J&:6c1ؕېͦCGʇL`a%N>X`… FXb2i֜dʕ-_F90~txZe93FgM~S<}zWض}b1!m}ztKJ@kܕmR:vݽij^m:%yѥ^$/p_֮ll)?2P;0B '0fJA@vޫE@\Aꇳg3g!hlm nu$H|GcFd}q ~}$.$L3,h+M6t3N89J~EO8PA 4O=XrPE 3I,Ѵ?qK NSQG%T 7lДxLZsOEV]w k ~ZքL `"XtDXL$)!W4ybp םhLG$PCZ8^{װ)VIhĬp~2_2UYlrK+4b/I?ßNw=&aC ^tZ~s vQdFW'z'x' QY (kdHMڻΩVYYT)yBxNxaD&X鵕Nzo֛zp'qgޛm_h=<͕>t?GOWu_{\oIN(ȱ-s gC΄ ^1lw4dWqNs q3m N,e:GJZs#+eP6}^D!:sJ_-EnD9RPr<ϵ!P/iLe:SԦ)NsӛMS4C*Q{Zԙ*? STVuVE*VkTJU_kXjTԩC8K$bLhLsW/Nh14հcaÒld%;YVֲlf5YvֳmhE;ZҖִEmjUZֵֶmle;[ֶmnu[ַnp;\׸Enr\6׹υnt;]V׺nv]v׻ox;^׼Eozջ^׽o|;_׾o~_׿p<`Fp~Lp%
Ӻ 5lg_zI(c&pRdl(R8Db)ԢP:Q:~,wEU~ȢYўB4jc QG+a) `Ŗl^ N{ $Ar8l $v' CFtl|`fG;T2$X9Ch[$S|{'N!Ng;ON|^!Xq -zR-US7USA(]_{^vj;x=^7;OxC4#2=B vMBev^'02LQ05[~j<5xɧvǟ(:] LO <Ʊ3h̟>+vc?퉇vO4 K8|x#>H1?4hO{ڻS<绾?[Qq@ <]>뾶۾><;3k; Կ+ <}-<=#ꣿ{<ļƳ?O`Xp, B3A}IHHPAڻ,|CdBc(>-ɋ?l/B!,2 jhSD7$;8曼OЄ2ص 9CBC<(QhBX@.@\@YsFԗ,BLtHQQď3 A >GlEHM@$(NQX!M N FEOhq !·|p\>|@ I<G˼ʤOrdNϯȑM̟F|AItA<T>O0+Q\A.dD_ OP؂QFH&C|ɛ O՜B!$픾hSDpN̿ I uQXI;BO*+#1]&ɑcżF̌=W OlEtG eN4("&G6mRŝT<ǔęLK4.@ SA;BXL@%ėtL|;BWOQЂv> }"l-0UKmndL{_tKKEPUY=N1$]UU~P24NǼ_5f@Q]ؒkU_;#MhHK}>g ISxLMG$W; zB5l3z3GSD7$L>D5M`w`(/@i={z#If5ƋQdc-̩ ſ)I meY{uŠCYNɻ-$SMKQx@[pڛ|e`@Ӌ</0=׳Kd>ahziP\  ЍmȆP ,Jא8f8\hنذghHyhFGBh kЃlvPN`jxHk=j^gs Mig0=0Ёmjf Ԙl pm`8=Ȃzla0&댪flH \eX xJP (@^Ĉi6ֈi6l^|l==+H (lȆ@ Ȃifcm^n Wi~f'lNmpluqm؃.E pqgrqp'd($`,-./0s1P=8؃=x1r"bŮl%o=? rUjNƚx .abb-!I"ΑZitP਑/Őo%OgR7SGTWUgV/u'?s=l8QTy(uUqSY16ˉ/ЗЏCc4MVYO[R㇝;Z(~X1]xeOa TdivfHy ]ICHOoGIg%ciD3 AXdN w'xgyi&!. yMubj0H8<e[^PwixrsKVvW׫D r Dߟv6 U9Wzx+{ W{?1{@W)kF#1r S]Oo0u6m_Jxۇ=hRX:q@ r'/}_07}ZP}y xx'zuo_=mЌƨo{k_q:= qp~(rrf|̐HQ6m/’d& ? @ W+L`Qh-=xȑ<&Ё"fQ)ܖ->2g OGPȶM'(z G3z(H#f8ڱACjєSbǒ-KY]YmKr΍뒉Yvߺ͒,Zy3n1Ȓ'SlrޯaiU% 0ol+ 5m> rce˗1OiӢ\5\|O2V[jl`m[lD)&h}7hP6h@6XVVvYx!j!VY-Y Y \ a=K05O?9G8Eq 7K7" Wd}adlAT@N"l AtTh &m;\:ifNLL,wo|Nx/;fmM)uM"c쯔𦙶0q/Ƅ[S?bU,0)J61$K.|3߬3`63`RP2o9s@M`JgJpȃ5bva$i6-? rApO8D[[~Վ OnOuMS`C3I;}46"7_c>) ;R+45e7۱>e9Ⱦg} J-(3yqX+SDM.?/8dv܏[4c1N;>?@?A?!_.ݸPv %p}bAqp@|zFJ,|LdZ >E-x(;FT%2QHl"XV";Uh݈ŭQn|#)-6_a$đ4Ҹ6J+,bXE2R 8 z8j1GGhl7豪AKA @6ÏCZFi]3"9~A (v#hAǔ?`oS4.d|8D#Mʀ7sǻ6֓>1M, w˺”=W$ @={TX ayt8 ?fiQ`ey>{s'u=ltqWm7"X]Vg_Ok׽{փmlk>[wGAWyh],7D<:A.`= V"=_E`2`@8tZy_ʙ] ݪYګk9Z=ȃVeP?C,<ÎZu]]`em5a a ֝`VZ[k]_ڲq`ϱ [X-aq]=5L =!q$bߥ-9!9B_niY؁Y؁ϕk]X*ʝݐ'͡ŝ000:XVb^ !֏ٛ]$~5!*8z'*a(B!ub%߽ہb"y"h>֊c!^"1.d0206d261fXD C&W5S_A7= ?xdJJRKK$LdJWMMdMdNdOڤLM$NN QJ&%M*NGePdQJKVReT2%PJeWJB%TeR"YeW.L%U[z%\je\V\%]e\%Q:%O\C pGvd8 k fbN&ev?<}=P]e>d2d~&jX̃9^&l֦ldڦn&oo&pp'qq'r&r.'s6s>'tFtN'uVu^'vfvn'wvw~'xx'yy'zz'{{'|Ƨ|'}֧}'~~''((&.(6>(FN(V^(fn(v~(((((ƨ(֨(樎(())&.)6>)FN)V^)fn)v~))))Nfn曶zƁ9թ)橞))jƁ'HXRgHDN*V^*fn*vV*8V ***ƪ~C`BMA h-++&.+"і">\4@4|L*ˤ泆FUO<F:>C LXC;H@(?CL \@k+>yT<)t洢>+pr엺KC ?,m~RɎlMQ P h j@%,(ɂ),ʀ G*"$c%M4BkflM\,ժ+&= L,?8@LkA-ܒ@-(4-Lm (Mj%,ђ<>&$I k ,@dQ*غ . ,7@@H:l;C?H֬*mM몀"n BXA(@%}X?,@H@:B-Rj"m .:o&mtͷ(SMPtfRķ4LD-L :<؀""*A@E>Ԅ"Fpe9MA.T0~L BpRL0/,@,2tN;,Lb?l WA<+4|lۂ~-Rф2,| 1Â-T%- L\OFal00qL"4&)t)|B'|&s'sr'l&w)&"\027-bo0ؔlaig^"CI>A\$p)B(gr2c2&s(?s3?1#&O3'(8L ,K/o-C>0::%sʄ~LC$pA'L&3(r''2#s?s3#',9S39&,x$'@t?('pF9k7OP4Ju)d34?W34543?>(3AC>7Dt4%3wrBO3X[(uI&H 4 U[TW)(2'3@45#Qo2_42[__1K3RÆe1|Alu44PHOQ#uXI'AX8626d%+3P/O+`'sX?sA+5m5a#&.ո/SiWF>AhBRKs't_ Pgf6mugw'hB6c$w4?3'Gw5 `w5I`#4R{5{?scr{{BlA7_xK xG1x!7S5|^ 4QkSPu{spZoHCyWl_XO'WugtuǸ)\A(q<cpY[ezHC23cmS7t'5(up{KKE>pokAX337_5(5`6X &T[Ȝ7鍯 )v^/'tx_#x˶+HH9eD!G|۵X7ﵞGsge{{ɐȳ'9|ӷe7ӷ78W;|}3es1dHcE4y/sC?g>^g>Oo>9'xMu4x%}#}BX`''yg'x)@Q:%PaS*d8DӸcGMdI'QrgVJ辘bxć;UfO?+*Թ0(P)҇5"hjH:%WkW_;lYgA LE>]:7Ϝ8I/C\pCQ0@ŋX%W*Nw%zw)Qb†bl<3iĺ;r;Sg7ξSkQ>Siͧ0=]ysϡG^V3tM lR1IӅ+xH&QW$h(q6o9jBͱi,4k )d;ߊ n'dޢI )p?m6l Yla:9"6л*SvP1 ixCH -<}jSZq+~dZΡ\+.>@@8`J@Q\ԃ  ;e+lS#Y"SM9S;dk"o7RF \OE8 60EGb Bې S2*LL6B4(ա`<+<EKhءx|l;Kj!K1Xf <|Щ@$JUT2 4a)+(}4Q Xpjjj(j=%\BN1ŃBwQVaOL7+5|sNZ߁ꪝ0Qb2.NF +v78O8GM} AJ(lLO5uW<@ Svp]/XK YoE" /-oόU&tr{zNЦYd{c$!r7j]4RXcWCHQrr>-gW?j( AG(`U:`>݁8ɢˎF@KwG=^[:1^f.$ZX%'#π"GCp{Ѷ 5mto [u7lg{ ?MT˴cSeT$KL Aq\nj$? K8Dm9B;(O\a lOy>k'F]S$ÆaN%ҨD m $ujMvfʡ(wL(qʆPrIOLqcS9KazG>H-씖^O(S~Ο@FRӸSDMIX  &IIL>|iYS~hZɂ TP)+Q֗7}e@6a|L$\7~c?MUXT qU(E\iVю֞N%˗|Dc"\D4>aA](H‡ F +A>+(q>5$V)hjY}J'ؠhn -%w;Sk_Z:Hᅋnl _pE?1 0h!s #ddn6ړFxTGsd~_Q\8HAOF ́4BP.u:"vр?D v`EXMx0HՑqz|  ; r<}ܕzhG$&!?CDh#nHp)Xdpi4>`Mnk=*>\ YeAiOK4:!;x(a N\Ta0?ac)wE]6 w p&`X0mH\@aIX8!Aٿ' K{_S 8 +@,&T'[C#Ӥ83!ܡ{6y%>L_p( C;`= qva@a:3@gf@m@AA#GC̴35Ys@( L QA)D@ v!G1sFE󇲳HKKq`3Ra AltJL-s;;Ga8S2= :^ @ S)41 ahT-=2u `@AAf?4I1?GGY+8~`$ku :J: )s%'2VQ`A3FUU@;yj8!-O &Z[c`J!u-59ZsBH-r ̀(( d) _*Q1*E 2Z3iT 2`>Ct>rB`Q 2~hACSbV#49XI-SGTFcL 95[)a  & P2OIRJaTc ^Ai Y!YvP 0+VRG.SlLU`-Gra`tdQ*2QW3 *#6q4u`ʵx rL!8xTSWwa88X` adSx x׈7x4bJx#Qd.hhy~RK!@$jȰw73jtvPB,dh9w@ ~  j`L@@`yٚٚY9Yy幜͹V{.F{1%.ZϚ\`.-,I#+Tܩ"Yy VQ0G:ukdmj),V3 ¯4CzS8::uyz~ᤥa pk|tSکaA|A7`.A |iL.!Xb: U)4D@xxUN,fh@>"R 6Z`;!S!*9R,@  !]gUcS,A6,D:ISdfM:ݰkFS= 7JF,_'x/d.Y Gn;cz2Pؚ9zߛ›~f\SZUw 9S4 x+R@ű]%<ș%7S._;T[ Ak¡\&@!`h8ϱ!Aq;,˱bmS$L͟G/1-U+@AaǷGZ`)Djһja+AUKZ]:CփT$Jڱ4۹} fŽT`՝N`3m̙=TTOgfE!7]ա@WN!$qw3~ X؉Q{#Ui%TM={u1G~z 1 J4r@Ay_At=S@uSFx!a=u`7@ OCQ6 >YQ~ L>/u>Rsw\vrSY v]2&>`ε(ތK"#V o9ط@)K҄>۬YCG6 >eۖmY%/ȑ$CۗDJ * Dd  -h6JujVɥLY 5ԩTGP+ꔛۘ:m׮mʶ,[J,ڲ:#k,3٘Tɯ4S1kﮗqKV-h[imsUf9͜;{ :Ѥ17} V)&͆m`l:64X&> r 7K)"6dp5|0Qۇ\G RJtVjʇXL`jm1^Eg_ecfyuOL[~~ꐃ~+8aNeGb&b*(T& X4M|!dm薜z8FHD@}P6`$RM⊞YvN|T`I2t%85؀HyׁePa NEsF_6'@d"^e> i2TT/taTß֤BWzT^yW?不GF GR*t JRe9)U\Ro{G}0SGgO0Xe^s΢A@U{[C#`)joW.Jp>pCJķ%U(IM%;+CcgZ!.֪ , tRo tBsHFt39tԪbC[?V*{Dz:  ͛ bըGP|}bC xR?Ix IO'yTciX{g ]k k^{KT {;J8?rv亯٫V"i; <'.Y߮;{_?s3JP{Qi"Y<8U#>IK>cC~}JFzJc}[`# >T[>p X6r?c=HN 3$sDBb;,͏C .Ұ8#&1G#F NB jPE$.5SD*qJd",Rd h9ꑄ!$lPKXe4$HlNW%UDf]jC ڇ) IDnϦ+XA T\4cPh-mڂ`NԙThR_'^3ECD YJv 56 @ SžW)l@ bA.e5~ p|`"P䬵P))'r}rf~ap?]tl 'S^n ݏAQ$IW\I^22pA;;~US8dOA #b9iLKhLtS86! ]>@*CSPܟt)ZPZɮëbM! Yޣw?9AfoO/텔S.t '~"Hd<)J96LbMS҂ !LN\o:6 2( xf1~" ,`v}8ѤI1mt1)__C~0\x6x)yU8jJ3;a7ӎ@Uǵ)OzHn j0_/~+xgcQ>ΑmP*o_R{HJ]#5A'#0/C~J5j(7gw)TExuhN ` pE Nǁ 'Ϧ%p~*0z&~L+wL/@CH rP!V &@S dwzWX@27)(C@j(JSR `h){ȇ}(IU qȈ|x(Hh {h=؇t8u~ppH Pxxp(Hh O0x؋h8@0d@(HX戎k؊P8Q'C `HXi'ȁ ɐ kPxQwHɑِDHuȊI%i')yxȒ* &O5ɐwXiX XדI 8; Q)SIU HQxOV a c)gikɖDim)jsiDhnI0#) Ԑp8 IK78)Iiyv.98٘IihɛI)yIwXv )8XP蘏ٓ9i剑XIܹٞ9IٓYIiɟJ9ٚ* Z ZixDx @Bؙ9 ę,9Iyй.]8يJ٢8x9ٕ ;f ](uvڥwyspZpxj{z*ʓ5 |PH};ڔHY) ꨟz̩R9nJ p8IaJ*źzJ:IT):JjjWܙpjx <,.i X܉[z)jy*jzb tj8ɭ_z왨KIajת+˨ڨdp P ೕ@,n@E $ XAp,`@0#c:g vz<9 ~{"@ g9*ʭ:jzɪJȓx Z,kˬ 9 $`@ 0}~t/0 O F` 0 @`L&۱Zwj<1kKP  @$ ?I$   LՀ/ P ' {лҋ\˹[ʧܹ;ٷ`ĥEiX˨n;kl I a\f̱ժ:ف pځqܼٜPi\ zhLƕ˚̌)Yhh Dl"HGٙ)̲^Î Z]ÜN*Ɋo;:Ży5++M ڝ?~ہ<\F)>ͲƌQ*Q,"}7ςYLƷ; =` [eY@6{M)VŔ̼\X)@ jԓb8< *K`_Yʶ]W{zb=<g]Xjӝ8kʈ۽GZČaᜢ؍1PP˰=ɓAаڱbloK{j&[@ݐ;U, e z߉ش]~[lXy ?xH H(-Gڽ ʝ[g<|:|ګY۪=R] CM@K=ɮMܐ ɞgmXî =d-T<&mٙzֈz c^mXN*~ͧOnd)C | O(tO隞K.>ꪞ괮.n>.>.Kӎ콾.Į޾n.~0ƌ@jS8'ńgsNwNnsA79c~˳Q` l SX8,#_ ^$o=y,/?c 8փ A/)ptBwkQ/)3/WIY=V_a/cOeogikmoq/sOuowy{}/Oo/Oo/OoU/Oo/OoǏɯ/Oo׏ٯ/Oo;PK HAQ yyOEBPS/imagesdb/1.gifGIF89a !, @(-ĉMWڱߗI}K; !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~!, V * c,l35TrER,1"8txJD6|Q˕dT B(HT/$9() ;PK HA\,rrOEBPS/imagesdb/10.gifGIF89a !, @0IB&|&^h&zj8;PK HA)rrOEBPS/imagesdb/11.gifGIF89a !, @0I"gI_^觎'ɉ~hG;PK HA5|rrOEBPS/imagesdb/12.gifGIF89a !, @0IBZ'|Z]h (ʢ8;PK HAxKrrOEBPS/imagesdb/13.gifGIF89a !, @0IBZ'|Zudh18;PK HAjىrrOEBPS/imagesdb/14.gifGIF89a !, @0IB eu,)qW۞jG;PK HAiJOrrOEBPS/imagesdb/15.gifGIF89a !, @0IB yƑו,ؙk%x;PK HAG΋OEBPS/imagesdb/2.gifGIF89a !, @(-q٪kŏQ!FuR; !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~!, h *@ c,ڹw Ȩa)ku!= Պ4Dҥsj"0Iʗ##1t9|P`I9() ;PK HA ,2OEBPS/imagesdb/3.gifGIF89a !, @(-qj\>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~!, o *AX7kޜAs!oGF +Xc:g &sgaJ-82(w1r#tCkq cZUrd J ;PK HAMqqOEBPS/imagesdb/4.gifGIF89a !, @0I"@}b8^Bhz*W;PK HAuOEBPS/imagesdb/5.gifGIF89a !, @( ĉ`[>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~!, q *́ E)X ǿwH|H#VGK!}dIZ>R:1GFi W F% ;PK HA~OEBPS/imagesdb/6.gifGIF89a 000!, @΄ @#YcQGlc'l襐i( ;!, W'FIQ "0eM Gr ˡ`&!2 Z e*h ,F Ea4Ņ@!<̫>Kp"!;PK HAOEBPS/imagesdb/7.gifGIF89a !, @(4'] {i`7r*W; !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~!, h %%E %*CCr(տ1I<~$)Z~D Z.O8?2%#J> 1B!.*)) ;PK HA*OEBPS/imagesdb/8.gifGIF89a !, @($ɪ+i|`%~Fh[9`$; !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~!, s l%%E)*T s(Ұ7k TC%4ӐCBB"xa :wAC0h'E ˛'KjjF3xPIP:MO QaG%!BI(0 ;PK HA_țOEBPS/imagesdb/9.gifGIF89a !, @#Ǫ+~O%F i9`$; !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~!, x l%%E)* s(TA+kJEתo0ҐE:@ ٫aȆz;wM6 FaBP/GCFhݚ)ư@ o QA ;PK HA4OEBPS/imagesdb/caution.gifGIF89a (ߢ7ܸ>qqqRRRQA$JJJ===5553)+++!,@#4`@8 "Jx@AË"H cF L91 x0@R>$Isbŋ+[֌2fJ"KLq͟$BǜKG834#TS:hӢ؋Z͸̵) ;PK HAA^==#OEBPS/imagesdb/cover_background.pngPNG  IHDRWƳ CiCCPICC ProfilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/7bKGD pHYstIME # [| IDATx}yn/0b# ĒLe;blWU8*WS~?T*$[.Iv"ƒj$J@q'`͊<|C13/ɹ~U=sN/}nMpeyiգSO/'@Bl@η?>$I$I$I)%w6Fmo1|qq9!{`aXom-Y4 v?0ݻ|I$I$I4eݔm2!Ap`8dmc}GVچUb_\`3$MjnT%J; J&ʵ*UѶ7t4#_F5ϿHX i%I$I$I.`4~nx _PJ!"sn0ϱw~g#R"u甈*^:qfqeϰH$I$I4%]*J?:wK^NCDN?M8O*ڜֿSUo Rb3Q)֞{}{¼$I$I$ITn~RJ`(%:.)%֛gϟ^Y]gO0*NJ[Ɵ*R A} .ecÑ$I$I$iJ }DUz=w"<a۲R맹<@UA5jRCѹ D$I$I$IS` tUEgV/qrmaμx2gn %SCB}2/BI$I$I4Rjsfe4`m4/^?ÿz;3T'E+!W7 N5])%4pѹ$I$I$ISu ta3/}o\x+!/\fy4| söٖ5b!%Ƴ'N3:{ݏ=Bm%I$I$I )Ȥhu<ߺx-p?6P5"ƭSU"h._ax =aI$I$I~JJfDE\!%gI4 SgzC$I$I$i c/-mI#u:.\dIb2J$I$I$)\_Q7 @2*U\Yy%I$I$Iޙ~0̙&2Dڎ}%Rա kꋗ:Cԍ!I$I$I-2m.-2Tè(ӿ$"MJڕU6^z2y$I$I$")؋ܒK!R ѶR!_] $I$I$IER-DJҶ']0U] Ϝ>wضO$I$I[a B m ,䪈RhW:MAH$I$It t[QhKᇑG$J)HIKW<I$I$Inn RFT94nwᢇ I$I$I-0m4Fno2)eԸ2jͅKΝ0$I$I$IIR- _=w??szDJt'Rږ` HΞct!I$I$IMqR""WXGTUwbK ơ o:uT.fJ` %I$I$I;2Ҏta\fDE"Mm_"Rϒ$I$I$2ҎV8_gy8"UwS͔R4-m$I$I$Hilj" . 6Hx~TBJ$I$Ia %kӅ~kko-d*r_VHI$I$I \>]opvc)I$I$IމRцuG5AUz/DZT!%I$I$I;1Ҏ֔¥:>uN @P2BJ$I$Iwb -Gpy0RO]2Ua3PuTu!n$I$I$I@J;ZDR40h3)-HPچP֍$I$I$0Ҏ>J\<'T%JݐR$I$I$ Rڱ"mx}cрD*D[ZD"Qh $I$I$IA EY5D$HLBHDnɃ!-n$I$I$I?f…} ) GZ%I$I$Ifha~ӐH[ E\(2BJJ$I$Ic ڌ<ִn)PnkDn$I$I$Io@J;^DЖ` Q0*MCNX!%I$I$I2̸I$I$I~)hD-hr$ (MKNX!%I$I$I2XG\诳ю bOH%v%I$I$IzRmåAQMRsRJDɴk딑$I$I$Io@J3#A+>DҖK"BA6$I$I$mHi55WJ.$n5̐J J7։zyU$I$I$)͔(2"%@ִ}JӸ$I$I$)͔dV\ A-*e0t%I$I$Iz R) lu\_LF`I$I$IB-,g=mΊJgS9W $I$I$IzVHiVHoj3*yh>I$I$IފR)qRQWh7(,I$I$I[0Ҍ JWIM"ACN﻽$I$I$)xiRDyyZk' S6 $I$I$Iz+ΐy -( eT$I$I$vxSETLaxTHDi76n$I$I$Iob @)SZ,xAD!oЮɒ$I$I$34S" 2kJzvuM$I$I$M nӬ$I$I$fJDK Q`uR %ȃ횁$I$I$Iof @ Qi +&RChVֈhI$I$Ic R"hsLe_I`DJԵ-I$I$Iu 4s(k6)G#yd %I$I$I 4S GDR D-mOn>I$I$Ic R"hKLg_"TF4WV@J$I$IMR)Pe)AJQF +ْܺ$I$I$MHi2.jpDVHI$I$ItU-, Dw۪tG*܌[9CJ$I$IL)%hL)$T^)UD[h)ufK$I$I4a @ua\4rCBB lI$I$I& 4SJuDS#LBْ$I$I$MHi(4!WIEʪe8Y[m$I$I$IR)QhJ&&Җ_@"mY^!$I$I$ 4cJMd $R%Him $I$I$I 4cKKlOu̙fe<$I$I$]@DД(g`n5JWfeܷBJ$I$I$BJ3f\!iJDzJԡ]]#opI$I$IBJ3&"ȹЖ̐)%ЮѮo$I$I$afL\hJ!H䚂 A o$I$Ig R"sKSZ" iA$ʨR}I$I$Id 3-MRLc_bbL>$I$I$iHiDM4v zfeM$I$I$<)͜: u 20)P2e'$I$Ig ӖB[r.)&RQ 0KREh׬$I$I$@J3D0-y3fyTRȃ-$I$I$I@J3(aL*CTшvmM$I$I$4)͜misfOm~zCu5$I$I$6)͌qK~Pv-6nQCN|I$I$IL3̈GE:gHD)<}bJ$I$I@J3iyBaMseŶ}$I$If sCC&ibgiW׈b %I$I$I]]@hдmr]z4鶷QꬪA#5+$I$I$I3@J3iش9fTH[)5& ږvmR$I$Ie>ͤaB!Ui{nL؀RtI$I$I2L̠y*QrLZn$I$I$ifHi&5%3l[R:8m%"2:1$I$I$.)ͤa\ HLm_J BSM$I$I$,)ͤ~ M^SJB@J$I$I4 4-ǕL!UD@ȣ.I$I$IYRIuΌ64 V[E4 ?X%%I$I$IQR9hԶ4mJCn|I$I$IL2~[CL?~U CtI$I$IL2An!b G 9m'I$I$I]R))] L$9CJk>I$I$Il2L몡mz=Z 5}1_PF#1$I$I$&)ͬa۲69L*m.&XRVHI$I$Iff֠m7M[J ׍-$I$I$I3@J3ə~SS*HD &NhZn$I$I$i&Hif ۆA=͓jR1*i@J$I$I4 4(l-u!b\$Uh[HI$I$IffV33DlËa3 Jΐ$I$I$()ͬ6ښm4"9iRhZ-$I$I$I3@J3)~Ҕؖ}(m!6gUI$I$I4c 4"a0l[خH*%RBJ$I$I4 4m07(4H*D"rX!%I$I$IYRien(i%" $I$I$$)͜jdV뚲aQD$I$I$iFHi59:vw y$I$I$iFu͚[55Sn۷yA3$I$I$I )ʹ\ 6vM"P$I$IYd #XorlF)J%*H$I$I$Iw5ӚYȹ@}UR)*$I$I$I@J3-G0-!D_Ӑ"ĵ ,I$I$IffZ`-d3n'I$I$I rʹAi&Tܴ/" $I$I$I3w5Jf[2L\ӓ:$I$I$iffZDЯkF%S6y:]RK$I$Iff0 y{nz=)I$I$I2̫K4m; w+AvI-I$I$IIRyj9bVO4#u $I$I$I@J3DьstGHM+ܜR$I$Ie ٞD^Թ!mEL7{T=gHI$I$IfkfE\֛aP\Mߟ,݀kxӥH$I$Id5RHiJ/ u*{vәw%I$I$I3@JAӒK&u Ue ^J L|I$I$If-$ AT7ݲƁTT%^Nݏ?SϹ$I$Ia %\3 M.P-e\Zu"*Ͽ)6S~!:KKn$I$I$i&CLF0h3Md* mu*)RUѮoq7~K9$I$I` %aض@li"%<Oep/I$I$I R0-LZ#SXWKt {_y͍$I$I$) ̠i# MelA^%Ҭ$I$I@J3/b L]G@ h2 ϾH$I$Iv<)ib`[BLVvme7^$I$IHIei b[O\J}$I$I` ҵh3!~('J $I$I$I;41-n LlcE$I$I$I?. 40hfM$ھh*%(%9GI$I$Iv<)ib~ QDJ$I$IHI2h7~s"*c%I$I$I - \_o,nja$I$IpTUŁ9|p/]ZZdiqyv/-PU/vg"/M{rY\gT\kԔAnEa3j=M[D]9RJn$I$I$iG3&wy9rx?GЁ<{n癟0caGs}.]Y{>{;>LoGS7^Y 'sNx(.AД\"N ͋J%zTxI$I$IҎg 5E9ow=O<нG5߃^znw~|G)kad@I>G__܋'Y[xPo)aےs|'M>FAga]n$I$I$i3]O}sz{=BgRr!J# ǡћoRyOm .<\^y]x#<|G7_ayu{ m(4QHm,ӼAJDzٵDw}#* IDAT^7^$I$IHmu>O_=ž9RUANʵ*bCEA"qx?ss|Orw@m&b3Hm ,v;Y+B1*y^/%۴Up%I$I$I;^Zg'[g!90N#6DxpYo)%vZөGCyUvH9+6D[Hy|=ʰ¥~Em)̨m^H b|tOo>7^$I$IHݢ^|)/| Jzh8XTMHW?M RUցTUUؿ!sk+WA/Ut:ո:c JiOWoNR"<̉R öɅV&i2?osPzn$I$I$i3n >SOAT\)T"Ey2h3QTU< 6C>/ y q#uA3=r&H)mK$%2wzl'I$I$I R//{`}pm698d7<:U0߃ia0πb*0GzHd8/|g"ss]z.=O<yaQu3j[^oOo7z&gmK9Lx&UJxK$I$IfMZG8o7 ̦IK4߃n?՗Nq9Νȥ˫ Rw9>C͡C!%R;Ro3C`yuՍW_sç>4?ɧy=LfLh[:U'x?~U^;uރȥ0lE!D`A7\$I$I4 n:uߝдĨ :r)\87g+x㯜 #"`~}ǎ'']Q T0G۹7ռ^x ~8g]ڧ#Th3Bڽ3O?ʗ}@:M چE)^;p17\$I$I4 nc'>3\"_B۴ _=Ëϟ}~Eor*K o[!uNȯ?W{H䁴-=|y>}Ń(ui(Qvtz,ή]n$I$I$ifTnKUػ@+ 4MK0jfK/;2+0#U t:-?WN3"_q!Դs!%  mܲ/uXש/_q%I$I$I3@&wNR Tp 7̟rM":B0?ߣLqzu>p*l K:LfR"MA3㫪s'_¿}5F=s$I$I$I1` uNt;q2[/^_Οq^7etvO07ץ77\*v[ϠVVYY 7 ^ P%ٿo3q˾Q)L3J0Jq$ɔѐSQ4WX?2/G?>NUY(I$I$IH݄y*AnY^Y絓͖_[ AanGӡiV G QC 8oսJ`mR(7OgqNMCuWֈR#$I$I$f u3TF)[ 0"-{tՖ)D+Ì\={fzJ%ҸizG49 v?}Ӭ~ԗREU͓7Xw}YZp$I$I$I-Dĵ"%r 꺥-2 ^9.ʫs.^N5 D'UVHm1v| EQ˞>yOr_dx E:K}6YᅦjJ3$I$I$Ia3 M9㰧n= F # 17caa^uSJ޵Ȟ=tP?"6gJ)0бrY6ǘ?z]KOP--rPjG*R$I$I$I)0M;BSki{wt s^Z`#t*#۳ r\WΐFQӜT U]wݽmm<7c%I$I$I1|&<}QV7*AӲ8g>ܿsA/}{<OĻ9p`ZcSO<-?槞x_?ű{:ոB*%vk}^;yW^{ (nx.97[$I$I43lwFu /c@ dRág9 oo+?Qv--s+g kr.RDhs<0#6؇_{?3o_xG_ s7?L"U^¥wbsִ⹔ JRtuڧ?ƞC`8%"S_|/yM v} p-.-1w0KO$I$I4;|W&=I>?9Huć>8Kޣ?q݇y9zx?>=Zd{&L׵Ku=K|cO?1~?y4mvzn>yy#wf\Y5W5=7I\,QUjiÇH=+$I$I$I@&#~_O^h3D] }<`]y'4߃%<.uc*3 _y`^'µ}[Y!Uzt즳{3$I$I$iH݂g/Ox n?$^YVD] |_<)Z}g< IU.I;IEAR cSEDDDDDDDDDdMQ J_"ཏ܋&-(<p|nyPD=zی1Kx \zZ~NQs㍳ZceϾ$>55?o 6@T 4UdYsH݆6 -zFƇ˽9y9rf^B:ʰ'tڼt$O~Y^fZ ›t.c,[uYDDDDDDDDDDR9KOr'8\9J$^Le([B/2]R,uM:sfx_S\4{(C` j DDDDDDDDDDdQ &(;?xOg?~>Xi dEwiϨU˻k[ osYz_3|G/r9|Z[*qռPYTՊ,""""""""""k7I=.\z/޷ŝ7359kTq~B^e@z8.>:s>o^9|3.33}T!`,$VYDDDDDDDDDDRo6/tسsmd F'iЬU*$qD,Ql6CYN't3iZ_Li϶tq3.s<ϱ9z<^^(@kzNf1(ı,""""""""""kHQx9á#g7ftxӓl8Ԇ1&'bQVPᔵP4E2ffv6s-f2K9{g/23.7nK`]o"L=+3-6cpb9K,^sQ=y^g>BB9ٯ{uB rM1յ aUEDDDDDDDDDdQ s b1K*캢 "EDDDDDDDDDDkQ*wU\YsH,4Jq)DTeoT *9 D1"0{g k$M):YDDDDDDDDDD!Z<(4n5 ۲K { R1XAn*9 duO0:ܤR֒e9g8v<֛!SUعmwfQh;\̹˜8}3箐iT-%j é )6̬,""""""""""k7IZa߽îS 6cGk+o??=WޔϬV^>e1.]ç3_`߁̶gȚ22ZdƔGwQX-sաS{Ȼ8q_ۓzuc#Y+WX!s>`p2:> {~y^3#سk4øFc|68b-7Y ZG{'xpIs;g4@OS\=wuuIȚ0>:~/2{C'%do"LνwmgS^x(YP^KxL Z@c-6ظc#cXki-v joKXr0V%k0JDDDDDDDDDD*E㳟|⷟`ϻBkY!` e7L7z=7v3ج곫Isx`)2Ȃ1cgSxO褄F_ >1-~P#(ŕ0|QY?={FzK V!ܱ/.kAo&`, jf Q*xUN7e,̷!vPO"Îa#|?:1 10q{e卡y;TdYs4oF{ ITvFG !& !8 ^|Nѳ'/37ϟom:7M}{vLynYݔ}ٍ!/0c|by)g!s 7XVOxxhFSUdYsH§?^Ff:0΂5>zg}>|g.r܇ٺcckfcXm/k8xv}s-zp #l4IҬ{\]>fs.ws34 ۆF pP* cz?[q⊈ȚcUٵ}{ESvK1vg8rۋ]~a 1r@^dϮM>s*æx~v :nD7_5$#C$&q~@""""""""""&)X:7M2>1  "`+CO]kQx|;?xcCذa;woY}:0ˋγ@ lH֯#HDDDDDDDDDD,+ij Fc 6rI9z4 ڝ-;Q|`-0}`px[!땴,Wm|X5 KB'T7MaUWDDDDDDDDDD,+0ap|P*\2KNre/\a#y9> B^n|8srgKU `U*aWDDDDDDDDDD.R+0>6`;9nqyfc'Γ9qE`'R>D:JV\{Xxf1Bie5jT7Ī] V`QZK&".Ͱ 4i `%cij^RiQpHiq!sfdl@JDDDDDDDDDD0R+շTMCݷ5{ɺ9Y’gK:<r?[ MYx\B<4k4TTH IDATYH~)aہc^b(>ho4aE]Q21q}"""""""""")Z,/ȋpmDۧ9j IyrYo=n|>ǖ5eWz 724ODDDDDDDDDDdR vݠf~ 4U6#ee Y^ꐦ n$/n2x K%v:(""""""""""k[ZSFNlY?1銙=Dqq^\f N+dy+fBO09@<4"Ț@j.\c~v|o|SQ0>d刼]ۧx]8gyM -Μmks8,QI44Ț@jN 3Px1*+lg4o,CB߿> [65Ss9 + DQNl.""""""""""E*;s2O^3@^-;w [S{7.p•7:u*nJVԫ6!rc c<{:)!Hkqe;W uCbnk JljUQDDDDDDDDDD<R+Pxϡ#yioY/*)sjB$""{G!zPe ;._3:s5F1$a0{{UvQ\{@G:㣃>| ϽcM M3@پ+ٳcػȣ04gYa>6q?K0*<RN9/_= r`9ZB{lbMPDDDDDDDDDDR+vSwQF0 .ヒݹoy^xg]}mн;_e{;v'1;bImYϙsc:&PI|,4PrA{u8ki1֚[{C`)@Ԋ-:C|{'CmNXX9f͛&a>ũtyv(ذn_{̧>My\VKV2,(*,62sޗaukCN8"8v$?:rZz}͖`Tq o1~%""""""""""ң@jN}[ص;ى"(@@ٝ`bq>>?.p%]W6mv242 mJFeQv_-v9t >`nפRj`b-Dyg]_J*s UjXcRf[sDت)P *v~ik;f-wlxWjrE7*2nc|oԟ0yE{u{S7EnA5!림W&Nb:z#/`QL44)RI&.r?8n9B6*qL`΃G@(zǾvrWGe>^gT>71,BjH*8k ߤ׭1 DDDDDDDDDDD( Ͽ$~c Z#Qn!VpΖL!,%nӒ|,U5ro`nf}G_kO>lK w Q5`y0xs^[y(""""""""""@Mp}>]^+ey5Y9sO `5"/x闞SuQxF1[ %U5ODDDDDDDDDDOԛI_ Sx=wع}#LJ \=TkeEe7kʚQEAs|$?t߫8u(P+ЌcUj PxqC؊)zS^z$> r[ٵM 10Ԥ٨ĎY^qWå@/QT\(rɊN'elg8q/:ٷŹE\ U "><5 ng2L䈆˽DDDDDDDDDDDP ( 'է:[׳s;l`M4UՄP$ؕN@s4' n,vR:ͷpi/rY;cg9uA!Ԫ,5X`WcczIbAs*HX>vc'OsJ%bxp:zjPUHɲne9vS;]Z.ssmfhw乧¿h9y}. &ӍQfB a"R"""""""""""} ~xp)KE9 z#zzUB9ڽBk=(ق U*cHP^x"jvt|a3\R" eTk*:DDDDDDDDDDDQ u P~¯io\3gO;C=;6A=J@X;{H"lk4vQ14`tdًi̧);y -غmƎ1v 5H0I≈,@j8v+x{wmfl!+*/Ƙ,b߅s|`XAlY^` xq6ITHeH¶K|cæIHs~Z7K*/Ⱦ(80ϙv v;|b64pC9 4GG-))Zfw~qÐ{l{91RwH-ŋ80p㛷3^oR0 TEDDDDDDDDDDcU45} h@7tivGEzE3.>*/] 8G<2B2>\G 5ٸax֒9vH mN1`dpxx[p"""""""""""R+d9 F4 1\,d]ihR!#VDDDDDDDDDDDn@R+TxO`LyˤY F+5bXlM[x4PvI4$DC* Cjڋ]fZe1@ sZ]«@ C*:ZwmvuS &Uʆu?JDDDDDDDDDD&HЕN  XgcFg!1WL6 U*{j&M6pbU * (ZgxՓt[TupZ #ıFA!5h1 ޵iK1>Neb$* hkq8OQ]RFEVQ);݆*UF{:yF7/[P:M4DDDDDDDDDDDnF*8}? DF5TwZzCP*xEWQ߾[Q)""""""""""r3 V9p X5jl6/}!VJF#BFj[6c+'""""""""""r3 Vޏ^czbGTk~'> J"J "^(U3&ωT6n$Y7qNE 7:<ijU>pՄ{vm24XcًG( B20Uoލc| s pi瘝kM3݌,In9ifY^픯^{Sjݸ[mZ^e5* (Z.?;wOhޓ&PJ%X"KԬh[7;^YM3|Qu34et:)YMs:ݔSiN{ˇNů|/?rY-u,Pcb@䗎48B1NoR %""""""""""r V^ҬiWCNr;}5o5l0\??pE#+fc"^w c XR"""""""""""X@Zy!ޭ%eBy@^h4(yt .-igH]EU/Zm|7U1EDDDDDDDDDDP jIk}IE\ {:g䡛( ,rY}@f!|(<,yQ馴e7N۝2 eV!/ v6_;yEr)1^Gڙ9f6}@SR"""""""""""@jU$}eع6pZμUB,/;65Ly FqC*@o `f']Xȱ??pԅsRM Wʵ1NO3RDDDDDDDDDDRR$ܹ{ As-(!H(Zk-jq  HQ Hzٔ0X箽[@?`CPR>6}`%9cAԪtӌ#'17bc-uRvpInr1f|`ttf5f3h-Qv~``aʖ׏EDDDDDDDDDDR^syظqM M", |oT>ެuҐdE[>a_Sq'"""""""""" nۡ#g8t j8-LQTvH9 ;z5VFB\FJ#zj5Y*juk zA6u$A(Z04Mpig.c|? YvSK!*.b}cJd,Y1ܩ7Q2p2q9@MIYKC\`c0˚m1[yf{?ǽ4jU&&صm> }6 ![(8p8?~,Tc(ME \!u&1XMpaPzv ֝ jXQ3ʗ!U26{f3}D=DDDDDDDDDDDnDkb'O$w߱ h7ȻSٗ8}5֢j1RP,aQ!ϱILmf?(ͽGyjX#Ξ'YrAwN"B9*5I  ENTܻOE26R+%"""""""""""K)e 6==ɇwFuק' תq'c w7G4JDDDDDDDDDD)ZCΜӗOdMs;=Wb**bl:/Yi}DDDDDDDDDDDVHjwk l8 jdMקE4*[v}BDddx|L_$R EAyooX@ƖI7oP8a,fkQN2:Q}"""""""""""ks9!@(ٰntMvH7r&  bX_$R kjT*I cljkP ,*+O<S>yAai|s nfT"j#O/4D:&քKB9vl}wnghB 3?tg.}1eouܶ?0bޭIytRsmNďws/^ wFGؼqǩRtɋ4+󢼟( O=! pO5$y$~^>]dbY9zvwͮi%Et~H4Պ"""""""""""@j7)]yÿ& DQ=?Ac+J,N PVN7fZ]`ӥ b7HӜ}wmc)F liT_١U^Ib./oi]-JF1t n(07Dj)ZF0Z:*pGI#JD-:"-6{4G(mf^wfU&U 22T~ EjcAzm8^<fA~X{9}aSR<~*DDDDDDDDDDDB5Ҍ4`K֒zYpQ^c avn}1>1pH/'/\{93Kx2ƪBJDDDDDDDDDDdH]IΝ'"+ZAƾ7־㌌Nyc7w# IEYh,5y/_gbCSP˲=^"""""""""""2/ Q-yk ?;ve4٧"!b:ڛsC|Sse.o7sps*3,7f駮P}T9e| z3oy-ƴke@/_VRX+DDDDDDDDDDDd^H3/!nڽ '?^=00Uyhl3c 5X,O|]zVk\bE~|'/ s7/_R %g<5xxL`L#8K3(fxtc'x7yOTW(>%ǟSxW %"""""""""" 9FMpi? x-X ) >yB@{!R0 (BŐbP,P) zHb x#N*UF&40™KJj-ֆ]C))x2.߇0 EDDDDDDDDDDd^H]gsLUjLUj:k Z|#=E/3D)R k"Y$)jѱP  ~Hc-ޮϨeȼC@=1^e8"""""""""""2vYPʾoL>yKDc!]"""""""""""2o dY59GsaM>?JȂ(eͷApYG9FMDDDDDDDDDDDd|-3ᇙc~,0bp.p;DDDDDDDDDDDdAHCFʥa!\ )byLTjiJfqdɩ**H 8Ogi. """""""""""2 >bXtv+XŐ0) (XU#,#Kq0U2U19Uetl1r=W9) _3L)xf6of ټ]t`6[Cy6S u6_ŧO+՝Pʃ,$Ln6xJ|F2sfLM0 ڭkZHR.p//z9ȸ6eh)3`,8ȲLsDDDDDDDDDDDHuk:<]l޾BONUgoC'~w}0P~<'25+i▻v[xKs={X~UOIIʛ8y7swٗ1` (r&zؼ}ݴ^|Q,}2P(P} ff%GDei}""""""""""" @j4}7?/}7a[j)\. fZ-"3]q\};㾛ؽu-]J<;LLV^GCR}"UPeEDDDDDDDDDDdH-"k ;Ǹ]%<$Pr7<h,GXɟ?ǟ"˲e_hCB/s8WNc^@JDDDDDDDDDDdH-'r|n2R=܈/z)e֚h-A@Sb~Wd8M )yQ <ϲ}~;vWE} 6xf.w:bLc;oFG8t,os8I;5"ggdIB$#%"""""""""" AG[3_- }Z 7y˾(f>wʹj7ffΔ"h(qvcxdc;5ZJE,,GF ]jdQ4.5S lXAZ[R . $cf^3ZYY_!sB ś,ꯛ9⼜Z_/=+oY1W"mA?YBJDDDDDDDDDDdH-N>~6l䃿9=(GELNT`xtJ4p8ƳZg }Zhi.㗋P,g!N` ^Y˺?|G{޵B:e0,.EQ>{KDDDDDDDDDDDEmͽw",!NnWzP!N^ KC L0>1$Q%ik XL1tv[psN@{[& s.?3q [ְgHd1c -"a63>Fڕ䳭^D ]mlmȫ0P8wE9#4#Ee'R ՝P1YDc0^ʟ[0j̱I-<Ě.L+Wi*. }TJڋ lv-**iBZ4CJDDDDDDDDDDdެ`֬ <滲952^Y. ͫ5ߵ}are\l%khikbݚX5:eڋEB)~h^!䁔fH̟XJKk olyicg^б9>~9sB^ys@ĪmXk~mUB\.cԪL-j87R HCCq󙸣g8cRW{#?48tgt/CZfRli.n`\bUH,(B/dkU#er+9ZsY']5sGXX-B뱦=AVAR"""""""""""k Q?7pU#GWrYqq`j5kfC).óB!f eXbec Mf!2("흈R@j<+ޫBʀsdiJ%dٯsPdYRy`3{]KOnlbe9@bR"""""""""""} 9pOT@R qSu:ڛ_MA5U]moW2,sDQLKrϢ,:DR#sLW,9GǸTR"""""""""""@j*Ո(NLs|NR]Q(,77/2H$K֢TKSNs|dV4Pp,q!%""""""""""2o `|B1=!wܼV}Xnܹwmtss냢(ft|jI웮x85ۗ.rijonJ7E1)dj'""""""""""2 `pxəw /I };7'dֵ9ھ}A6n>V|af&*\4L%w976kq3S"ƀq,N\-M`d*\k !_a؃jHƝ7i{ B?yQ;F'8q":>:ȩa&6),RR"""""""""""k l?}}8cjW李\?}N204絮[l+ᅰƸz5Ղ3(R0\\3J#*F85Vs+9\v0ODDDDDDDDDDD>TEFhhg sHSLjٺkW3oZ"(!+r<>B@X\*qJ>vNyu;~sn:;0Qo{s"}l˾΍qfl-s^8t(e4[f DDDDDDDDDDDC;#g7C3R]C!3VL>Nqi*hܐdžM2 t#K\R"""""""""""rH-xwM`s%9R;6нu" JJ5"NrR#(ʥ~S2asB@*j-mUV[ a^{lp¹1r1=5Yh<)Zx}cg&qq[a3se>M !MMehϜ`:IS$Ź<&^~?Z?)D) dl;>sppTϿCG{ލF}Vc-d)0D*/fVK0Q<7@! VQc&prjS0:T-JykRT 1&* @- N1W \=3@3U_koZiʥ)+Rf[+^afeDDDDDDDDDDDH-KΩgL7~{P,r<<*x&N0 'O¿<.Jc8L",%@PY IDATeu DDDDDDDDDDDKu2<2/Q>~.v†jkR{yڑe!ATcւo4$%E\0s=˛oͽwGAusjLFi(xH欽b0 DDDDDDDDDDDCuE >;O«mض5;(w4S()>{kL>h:*VdiFDIB5JUTǧb0GcS$:Eڔ+8瘊#&4Qapy`=-<(:vC=Mvn]MlZ=+X&ʥ$M4Iɩ*CcK=A r\?Cciq2Di1˞s2k0V%""""""""""2 >bQs". k Àb!\*R*h(h,)1ZLQLUTSJ(N(NQ>$˘",]Mx>6ղODDDDDDDDDDdH dcRcRay\(W#$)Iޢ0\qDs).X{wDPHr.0EDiR< CLZ̋]=iL.[,b )yQ %T(s9\ĄIDDDDDDDDDDdH4'ZlU %""""""""""2o DZ]_7+ƭ̗) KYzy olxIDDDDDDDDDDdTD44i,)A>9 Si)R,:[Aȼ)ukYv%׮`mw=;hDZ$G={3ga4B~HsdY9`cUL(""""""""""2_ ~غ{ŭ7me˦nVwa~Cp1ΜБ^?8z}ja?229l1$hi/RF5ܺg _'͆M= %p $ܘG{tsJns=Y ϼ|MFF'pRpᕊ-M!%"""""""""" ~M46/?o}~nce|cL?97]A1xa@|~e;7ݲq'xs14b٥5l!on+/Jk@* a@G{3Me OfLLV=OvʌVv/|m %E%,}7si{467k&:ۛimmyg_z){2],Ŗ ZJE)yS U>͍ezVwyj6m\ʮ6JŐ$IWIm|[yvōNtT=߇` 2\-Vw0ac|$I^OK9, ye)^Dڂ-YR@g>mQW.}Ƙ jcc g8 hn$lo-@j㺕|7/=4P$xݷmw'?T_,ݵ|~LsJ%sy8e-<}>s-sA-R{q?T9a.,?uѽ]]li N]^f ^s3AG%DDDDDDDDDDDhYR6w [0(4<2wܴO?= #>vsS/YkO$.sPgW"+j1Vni+7'䚏],~Vͬ^j@}Ā1_~=zVuތq fvݰwl๗̭[B1|uui Bq2Fgla %C,.ַwo[s+b 8cZya/?}eSFY7nA^5,ɳ~?'ts_'OBL,WIe` kVp-}oIfvudMS4!13文9pIry+GeHm\ўR!{酽~Ə~u;MWk:̍BϾ_<6c >ޡcg<˹s 07{$=6T^{^*X̴|+҄ZqC,eH`ֵ_ a^\޲Fw^6wh15uS7׬dd*c 0#GӧޠptQ99U}yNLA0KcXd:ZsX{o  As.;eP.M]D2:wE|)kضe +WCż8O=2~6֬z6f5-y U$cϾQ;8< pl%I^N`iy=`3@kD,jb6oɨ*DDDDDDDDDDDò gt7Cyghd? W?*7^sl ~Lbրqy^w}z$Iy\0zUXުP.Rq[H9㧙f  1Zw Z6TScU+Zi,!fbҔ1 {_~}>gUƮޱ=]9Yƫo权ړ$tE_"T˯i5_XETXR{>}}샾ɀÒLNOjzYeHyDKKa-U#8amO=tt`_eUغ-'@^3"nbt7:S}~iqq`*Bj+:[)% 9 g?gI)K,вrlU^^T~vQ_,ܾukWbEHY39p e &' N0Y!ӁXߧ0chCA@`7}0@ZLN]BDDDDDDDDDDdMTSCb!cjqBضrN㟿̾HlQ_.vGQE=x3.]ubr:sp1G8ZRջ-@XCx2('H3. rw*<ϲg;\!Igks$e``dbr]!SzYy0og e?xx#qI90Y-".!""""""""""@rPYl}vn:r̓! )SU'/lofǶt|-թ*{/r9*=pWjYz=c(p{ϐ233% Y]BDDDDDDDDDDd첹ҹ9Ael!cfY-{ܨlN14[gfx89}'36>uݯ\;v Yϳ}j*gs қ!Zx`l(!RF""""""""""" l*s=x'C5X_ 39q3\{N,Va$i|Y||OJeU9GFG&x _k޸~{.֮[}H30}JC` _s` )Yeղ9'y}Q]@(fM-j"<(&I3,ùfZ{6u?'V9wYe lܾbܠɘ<ΝWp9$ny}|-6}@s|?o;Ρý 1xcҵP>[vԅa{i?/{B1*ΒYI {\=cSOVbF:VF{k#53m*9Iw?*(n׸ij{/?M{6A yeXyDI$g};{Zg1BDDDDDDDDDDdxGOok׭by(cå)&B&Z:Z`c7$ .JI,; ~|D 6}ˋ\8}g_zW:MMeWs:k7|6nغLu< C<ۼؒg|cOk1x"""""""""""2o2?}nFss]4"lj1JA *U\W 6qLY(执fR! E<ʬ^+-}vHܘ0=*<^z%ϖ<2ã>UH,\/|pxS*~[Y6- ƹOOe9po pM|fVhgu'd%{B%oΡcg>SRd5yj'"""""""""""m pՇ˘(բø.1W`yUUC?pO>Jf>96_ŗ?[z>c$óQX)ٗal|jI1>2˒M9p/_7YeYxC8xYf Q qsl˷epg1%D3W[9Wk:VCA5$4|>~iƖΆQ+>>ʷXӻ-j-ahdq>lCYo:ȇGa0` q2><[o;??y):~^϶mx~3c󫒔OW/ˢUe;!;էGM/$Aw [[(Z ?0osdqB[c2T߯<<v^}oBn_ Ɗ18k+ 07R01Ys8}}3 IDATr"-\QFLVj'xi97K#{8w~Us ˖u>q29Qep`sDQOc7uF0AC!""""""""""2O #NCra1`%jA>~'x}ܲj bZ-fhdY06ZFΑ C*DDDDDDDDDDDK,j1Zs?ww~9WW^^R"""""""""""@규s >LG vBJ|yZYs8U^W?}"""""""""""7)Ym0rn~H DDDDDDDDDDDK,Xsd k!EDDDDDDDDDDI,X󰾏=3Y10bǨBJDDDDDDDDDDdHɂrB 9L֑ϘNN-.Npi@Kc<G-~~89w~ MSL>Onra @.P4 P뻈sV"""""""""""rR7Qwg+kV-al߲%X=5S*(s\pY9,^څg?{uFTu_7/=5 Mq w7ē8ُ$IH`iSIC./efƣHejI+U3R7A>tq'ܿG7n~:9 i+NT 6r` ,[u+xkRzƗ(ݫBQLӾܺe5nYCGqb_(:Ja2ҁAqRSQtrh`dd?"""""""""""s@j w_|+wB@- SP% xSߓDp+*0P=:HҔ3/& &u!MBg.L-ZYLS-䍷#Dq)"8&YD~f8^M望xըc5hn_DDDDDDDDDDdHA>{:>']1YW\nݞs`< uJ5WcyAa}9Iqd <BZEI/웘_O|A> hU+cZVع60Y;?(!ǫ{rs v8&cPZɣ';] uMM-.Y -u}Zs{vڛP+0`9 ?C8qK#OThn*dq'nYÎmkYb3b!G_?,bRK]ȉ!~+ཷGm^v/  %NR c rcBmk0SsRv7/@Z;H=ݝ*.\n8u1#K1 R"""""""""""s@jl徻äYba {8~.s{seIu+غU]mj5*lob ظ\%5И,IRć%h\!_ BσgGwGϜ8}k^4?4X\ ⇷kT!~ykQ&&Z {:eRue)QML~SUX7c~֌@ι 9 }DDDDDDDDDDD@,wETk9cgON$3._}'xO>7a^x=d,g./N eئ*)._Jڂ |YuIc$ćYX|==W &>Ͻn{$G:6a@.wsZ-'! Y<V.@ʹ˕Oi~ ʑYDՁ%u0d| (hch+UұqI}DDDDDDDDDDDfI,4Q*=HSFط8ڜ2c00ɇMd<6Iyl$JWd?bf)W̐\O~sS=flaMG# ̒Y(rrpa ]Vu*J 0O>9G-E +Pނ[9wU eRMMsWSp%)GA%R~6kiF eeRcttc*J0  EJaT*{}A[+~e#5uURW(\0s$IJdJZ\ֲ/߄ )c |H.+Z^-@ bX^~p̊)c iBk-Q]Hyac|p)SOժ$THH‰pa40Ajimk᱇wނs k?/ _Ħu+Y q a^V\<{nom6sێ4kzy p9Z#|/b~:)6G˸4BDDDDDDDDDDA f܅N'*OgU3QB)rM|;iom3!l)c {+vR˦+mzۛ|;0=Y2O^ e_0>8[6rʁbr)FZY8r<e\c֮V~18T/~<=uB!~F) }׭I֭]#hnls?~Z7|1ޱ}vra@.{# vϜsiz@^fyƘ`kSRj'""""""""""(Rti^x=n_,ws+q>޹GKÜdxd$47im)tI'nYc"_C,vn_QN'OKsuko|, $ y7^5H%Irz>&063S æ ẐY:p,=| ѳ$ L'eؼE_q][ٽ}+vdQ+Wt֌ 񌇏kMME;{1?3<?uHWg ֯侻;n * H1;~_>}O,=Krˣ׸n\@JDDDDDDDDDDQ f)y? -= p `e?y=?@E:s5T\σ$B-Wg 8KSJ<߹%;xsyˌMP*lofْ.VZªKY|BLC.dr`SQ,ruf>DŽ!w%j04H0i֯_#&l.D5 ~/ Xz)+v{NHAljio.YaSU8S0.R[ײnrG09Q9(s6hm.Rh*B^Ÿb Y%W!Oy G/plbB2|3]!5E 4HIk{}B>&E1 & Yr1K,NL-)$fQS6ԙ J {\@nJn,WMV{Tٽ c_ ||AT=,&tb 4H<|QEZ|䶬2e-8d*0L87jq^ogσB|K|{O߾9٣v} }ƮeiJZi ܀yHR/Kyswҹ'T!Nqv]]Ō}cO1,QAΞ7ٗBn]Bxnz+p`0ԒVYk\NP uҞ:~O}wmeJMEBx`I짩b>TΌ XcHRKT';Ϟ̋«ql6ZeZ=nsٱa'+#%"""""""""" R7pe~q;;r[ؾy5+u &k!ٿ]RdAgyP}YՕrip/iz({3LLTISc ˁqPj1fH%QDDDDDDDDDD nLidtWnT*/h \jHHɂ>MMMxou4ke $&j'""""""""""ROXf EsV}BJDDDDDDDDDDaෛr\>3u$IJIc>S(016*18ZEDDDDDDDDDD@\vݺMVtIb$N<ϑc8uc>]B qUe@jPʹ\_֖nYβ%]47㔾!;DžKøPuc/zh7ߵ WJ#}sDQLe(gN_`~;Jy|cS*Y!j6vC 6T]"""""""""""r[VsMlu-KtQj* F8xϾyJmNTsێ ޗwi Ls)ұrŎgS-ܶkO={Cޔ`7T@䜻 )ilLcMZ4MDDDDDDDDDD(IJvPϭş|/~nh.B*,vsO0+ݰ;wmdӆa>9*v/܌u^ְQ &4:?ꊕٗ"""""""""""? n? bJV4#0E>N.gߑY>?zOߕ]w#&FP Yj ?ÒExӇغ,g|OIſo )Ejx ρ2\Zef"""""""""""7zS;lڴ |$Z\jqf1ࠧzlm5]iK]6ècc19\Bc?Osy|+ma50 sa+҉ iTmٍ%3YNHT!5O_y[woReECdꡔ( x{:/=N7^k[9ct^QWo)rtOI8! |Nc$i P(rUTZb+l= [/ [@JQ 5B>sO־-N:gnG$T5*cQE=qZ [}6FkQ83"tqUI˕RYuIVZ׾mM?{w?N_0{T*(W͐J'*܌`p9NDDDDDDDDDDD@j>qV{M=Pܾ7P39T7oֻ*E1_l:jmR>,[كdL0 5JZ n+I IDAT<sJ-z9 "m^77+Ty޵)GGH+里Q$""""""""""@j |]غ&XrBu8xo}I~?u(f vl]ã" Z")ZN_WOpY:ZXV}zV`W//`|08_AI3x%I$ڧR2g,+S?R 5MMܵ&642<7:w~cs1GM /?$ri~׮ >R# }1{NHsA>-RZPT(hkkX,N?fxL:>IƛL}1=%""""""""""OK0{%nݲB> v#w-Tx[پ}M-%@U1ti_kh͞s'Serx z>Wٺ+!Ie8cdFV8:_砣5ˁq GR"""""""""""7@jZ,n' 㷦l<ÅaFFu[z÷t"ALW`Qλs{k2>^M/aT*P*CUkk+W^{Ce-Ō,W*υGHcfpź1bAASxӌ7 KDDDDDDDDDDc(N.P*1 €uT*5jQ7KcXO?r;n^ UVA@cCc\\$V7Kx8q$G??G\.~CVuRKT.|<.c<9-""""""""""R')ZY \MW{ˬT/6Rhm8ɞ0Y%Dy_<.]Y%$IJ#[۩V|>G}0 bƍ\,Zǒq. ~⤩yS&j٧8JDDDDDDDDDDFHR1:63:6_ɚUKfu=c ;zW,pfj'O18TX yAdJF$55\1;j?0aNj*֬Ysy׻^PP(ԷQ9s>dV4v}3x DDDDDDDDDDD@j&*Rm `)^m;gRvn]׿wܶ\.UOFyC?t(XxQ;+z{7y㌍O^q~G{3޾C<.;[!PzэS.־#g;m˯y$iĉShߌA֭[y)W=ʢE(T*V\\.392;qZRSf_ݔX<04@ ރܺc=֦]C6lX7q߲؉'HӔf6_C R{^|?|7>K#֖>wϮGHUjqGʿ9;;w^ *F[[Z9^38瘘`dds &rݔ{ٌ/!E}c<һ|s{I'3`]V=S1|S|swqK$e׫\31ٌ8w~Z#÷wI!  r͛7cǎ!MMM000p@ Zz(.0O͵/i9x{0zSjm-~<|ȲUKXz1+qSG9Ν3֖u6mZ_62ow)sömغu߬A@XT*ݰ)MS.ٳ<G?@jj[Yq93nR3 S>/a 6ܲŽK0Q,,J-fT"S*OTxK< mͬZC'=Jzn2vȝ6lRH\P={ ׾~S|gӦMYaH.n 5s&h!l[;f>WYC!R06^G?v2!IGc:}[6[ slFՒ.ۡd 4{=Z+o䉧 MGA}v-Zts|'R3gRER)^\V(5l7& ))GDŽϟ|1W-jtԇ}(^_szښر{#;Fma x`gs@.>%O~/wݱ|G &j(F6\e%~n/S<7KT+ZO6 !0L$&. 4X3D>>v7bJ UGiJ$ Rqj3> 5zZy>>"""""""""""_&+5^x=^s\Pȇ y\j%<1IqPUԵ篒˅t4~(: xYg_yqoZa|CǧiJ6^izn80BrQDDDDDDDDDDDnHԯH'qBRcWcU~ ySweu>ZpS'/޻x<|߀Q3J%VXA`kmC&6% YWoch/wkNYe<PBJDDDDDDDDDD!oQ~8vVг0Uc˜:s'(MF477cL4mx5ĥO07L x*DDDDDDDDDDD@jxi?|s WH:m|TfP~> |DDDDDDDDDDDi HӔ8ssM81dQai.5$IB ȪK\i~HHo c +粯Q*/1G4JHZBRi͟yp+06DDDDDDDDDDDA nbz0Fk0~<Q wj> g]6CTW %""""""""""0 ™ukrmXv=]xVIRsJ5RGjQ`Ԣ4•j9k-:Ո8Mq6;Z~(&uXTkź(:'/2 &I5|uK%劈4Jݻ7ᑇnc͊t648V0)("^SEq:HU&$IHqBRHUkD2>Q%MSR눓 ֺ8!PkRR?0ʥQ8]gg-= #oe MrȦG9Դ9w͙z U(i90/~/~! ]P@gh6xd?;.of=]4 YR}tqE^r*f*bᕙL8U}eW]b;G?6II& H5Hcۺs ́ BfRs$)eZ |H5dFcrH2K9,ƒ[f֒,qIQKҒF=ݭfiKc{ `0yjm 0F7hV[-iZ(R/"~s7Z*,!.q#NCCp ~wT(KnXUsb4iY^n<!lt 1PAO~??,33=</eda󐚛 Ot;:'*CRxJ$I$It n[[- ,+/9v0>^r?/`9/PikC BdVX?F`r@J$I$Ie ;lum=K]X?GOy?g/ʏܾ;zaѩ/B,6HS#E^/pcVx@Jx&gR k/e7G:$ߙ; IDAT*LA:,'W_a#*c* ϐZRNĪ:|rvp *$I$I$I]`˾|Sw< udVM[?zy^^\~$2iE;)\l!^%dZ5UH'OPT%I$I$I.HBa޻O_> ݊\77*Ҥ%~nWVڢiuSm%s.ݫR[unYHz,Ȑ!%塃^^$I$Id˾]8znژU&u#x_|/8xpF y,kE5͌30gf\gEE[;:13ץs"I$I$I_oC|  ko㉟=w~N_ضw<3ɄIxRS Mu"-yJO^>cy_~gI&m4Exq^yo}-3p!q?VRL?ufԥꚵX!tVףw@J$I$I濲߄!ԣ3:% }qo~3 @NG&FIM4p*5LxL]7FƓɤa4r"3>'<{s?wG SNdjduyg_|W~sxrkZI[޾Ycf"k?5Z9?\%mٶW;%Yr0:rP$I$I$$Vc%;:2q~|o{q߯}"ӫ*[\9 P]qzuS:3DNӡ5I$I$In P դiIq'9 >'My]6)v2ӬD2=fJ\VBۮixW/A9s5] 9J΁@nK6uUZ7!o~I$I$In v+ffzӊ )U9)CĪ`cp`Mji7KsIzx0 W/I<=^l|66*"yWc~4MkD idѐzLU4ycS}C^_$I$I]0A!@SAQv.UEV$ MICnmJǁKأszibկ?xTU D";]f5aSsqxȠ%\=x 1B޼,#%I$I$I%6¤nz(e,rk#2wUQsփ+6=Ϥ2! E]ȿwWԴcfwg:,GΏ5CFfWEљ7$I$I$i nŅ~?BubFcmY^^Ṇy.}m!)N1Ƴ?_޸V?1ru;r50Zə*\iƢHu$I$I$If u~ܫr>˯k+EtaO}f,'}㶿^JmwIE6^9?5_|oWYa8Oekk4MM(' r $I$I$i n*_Əϟ)ϟcyes/sx7x;rۡ("1F"R@ ,1EQPH8 3')ɤ:14,G,\XO<÷$?xW\\X}ʼn{+nߨ9B+u9Q:H5$I$I$i v̹Μ[g/,_6G<0àߥS ]zN̠KSut˒L^CUTH*SNR3L&5k1g/Ko^>MJrn=fTV'm[m7 g֨S޺[~L'!9rAorI$I$I%Hhw#VynTFVlLB @c[5UUSUY0ə*(@j8:bye k1фx;Fm\ω ;Ʃ &M^/%9HQ$I$I$-}|ӏwq |?|=09jƈIus͙J r^9>`oV$5\6Ȅֻw< 1l %ǝ%I$I$I1:2O{3?3<׳2muBlCʲUL!¸&g&C'cP@%]^J t bH$I$IK3}9t|.!_Mmy2#Nm}ʰ&gV#V1uNk\͜(A:)z]\$I$I=` LjXZgx;\}&e8qt0eG#C !҆ZW9%BU9q$I$I$I+RR=pn&7 Ed~w;"395 ^!\)dx$yQo!A=qȒ$I$I$)p! s2fg.ҾL"+K{}bz+QJ,G沆}!srn W$I$I$iHno)o -B ;tk%]_%ZjrfqLuR$I$I$!)NUM+j25R1OBB۶hTΛGC !)Qй -I$I$I22R@;7,BMR%-e|O[9\%Z-~>č+MNA'u$I$I$iٗ (ˢm׷[hN4urʧ@Uu7fHW=]ja8d*v@&Mw9B1W$I$I=fPUe[Y. 32RVʙ*Fv{TڷZ:3IQu::J$I$IRE+`{K uPŁ̠C*o;s/DeE:mud¤IE^>LQ\TI$I$ITTeI qsvU49 ~ˎA>GqΞ׿_zNEݸ@anDYTr{s&LQ:G ѢAI$I$ITXQ0 n[Z!=/'Hk?K+9ԵeKV*:CjXOXkƌSC!tﺃj*I$I$I[m_Ѳ/r&&ZxpG?ػ J!RQPkWHMRb4@ΙL} *I$I$I[@TfHy{'y{(x M;GYH]Or,"eVH]ͨiXLR|1%Bw.YU$I$I>1R1Fؖg=ꦡ~*ym$O88;޻O03yw^W)#t*TΙ3z¸i6s&c$:Nu@K$I$I$<+6+6 B yߝqbRژ_u8~GpNj RT!RŸъjFQ=C Rfr"W_^\ri%I$I$Iz H@UŶB 6H*e&dCsAzꦏw?|Qꨍg^ӻZ2@Wv(5tC"Y}5&.$I$I$mE %heTk.x}w){>o3 ,,0MyNUǿϗ `8㆔!d>w?Ͻ:?yyuy}6 Hİi˛YzZ#LNZK$I$I4ؐTI >?#ﺇ?=^zM^?usYY:dR7I9~pPא6RKO-jg? }_y5:mfo7]5IL:6+ݶ~nJ^X^X OjBD$I$IxKd0!4!4CBUp;8y]09{nY^hv ʪ41@YЛN%%'smB[5O:O%oPp 3Mj+^LȐF#U)I$I$Ivt N;O'4mt#BKEnhcUIlOvz>WNrmUDw*o8{nwZ9Qĥ6TOh# $I$I$Rt &ޓ WtN|KKӐkR*O=w#߭#L44\k= HIMLH$I$IKVHazS/7 cv1+Lm2֖+@sn6bLw?|^Ciw}/BqJur>!M"7/$I$I$Id 5r毾uӰƧ{Rh*B;i-eS>ۉ}|eH{\=k=W9y4WNBRaH9(&gr΄K*m掙WC$I$I]3ڢi_O/O= s3}:N("Lס,6*"nʂn"H n"-F GlyKJrmmM> ;R$I$I$햁nk6 iTʙ:ˢ-;(^PR$I$I2{93Ԍ@*4UM d# -I$I$I.H685 zG-R ̜SĪr%I$I$I%6ԆI@0 RM _u%%I$I$I^BJ9gu$evGe As%I$I$IRuj5)}&mQR@1;X$I$I=` V 5jjFdg\6?*V[m<rn5$I$I$i/H鶖Rfu2a@rNd %, )I$I$In[!Xkhחrŭ{(fE$I$I$iHrnCitYe\m3uT`@l'I$I$I^(]~$,is'sPm/? 'T~=$I$I$I n/9Hu, iDQ#(6v1i]PGuJ$I$I$횁n;S0\S.;{b((z}BCv$I$I$i/H#>ΑqjX5>_ B(ڈj=xEGϣ$I$I$I;b n^Dș0ZG!kTH5#V\$I$I=bL&dG:L~ٿjmt IDATC*gH(+jH$I$IWWw2mSzAgX^^&JU(!I$I$I^e38J@9}Ν;G4;zMԥBhGEGI$I$IW y&ޝ'8#,,,pEr;cJbzO&e)I$I$It o9Nts{!c^}Q\UG,W6 ͡ $I$I$%]X42y2:4ǁG=eo믿uIUSĪRf !bg$I$I$I;RoF9Su98GpiN:uC1Rt*bUA|T@$I$Id@F522;906{79} 1RIJ$@ gu}Cm%I$I$IҵHiʩ!@q1eWVV8uϟ} Um˷>vT̉TOO$I$I$펁9gR3!5ݻ|w?L1m%MRUOCd[I4&C$I$I=b }$Lg85IM޻9s*ooA]XpTݹY^XhkB{)V䱁$I$I$I{@JC@?O~6M) /p̙GC~請|( > *̐jKi4H$I$IG  ʙ?)t|xg9w܎vsn+#UO97Gv̐@$5ze4$I$I$I)R!:*%ш}~cW / 7unG~o D:$ I$I$IJ@T&'tOp{ʨv̙3gxY\\xZ !?F}`T2i4^[#5TH$I$I]BJTN r<0?g?I'/*ye_ۥw(塃$zTriWIH$I$I=` [*Lrw>py9|iӎeYR9LHaGrYY!'^ I$I$Inx?{ēw^w/ӟpxS !PΉct!n^\&K$I$I$]njnFEAly >!w V!gBrӸ$I$I$풁n )%~iy],KbU9vrnP39CJJO\|I$I$Iv@J^Ι_~z^{m7Po̎jhF4+ I$I$I.Hi߫_@L>(b9%dL'9ʊ@$I$I]2ҾƷm^}1RUUUmy\뚜}}@$I$I]*]gu] /ӧO7ת(}R9\'ș LΉfyz@J$I$IݲBJڅ ;yվʲ,9!Wڲq44K^I$I$Iv@J믿߰ pӳv[iUΰe!FpDDk/$I$I$I` }k8}{ ](RV9@ Ƃ41^Z$I$I$킁_|ԩSӻQж[Vi^!u!F#%pJ$I$Ivg }?w7]\emGmy G44+kD$I$Id }'/=z=oYt:¶+Hɍ$I$I$I7@JNΙ~g?*omTJjLȐGc&/ #I$I$IM2Ҿ+|^xfeI#ƭ}۟ G !3 #I$I$IM*]'ϟ[?яX^^v_ 1cوBnj/^$VHI$I$ItҾ\pavHbQ@mU#ȋ#I$I$IM2ҾP%gϞ{Ҫo]ۥo{-@( BY7MgHdq4=I$I$It tK(wW6۫v}p@eΐ LvnIԋK4+9R$I$I$ )0Fbk|_?kUӹr Ul.yHkCUd$I$I$&H*U/|;Foݬ^`0ZXUp!HuCD`$I$I$݄%Эȏ~#x y`i/mG׻B UI BȐӖtT0YXY[Cj,za$I$I$&Ht:9r^QVz+ Pl/|R//ӬHI$I$It3![( .EQeT~Ns1RD4+˫^0I$I$InRBoiJ'Ar:C*ޮ/@ PҬڋ&I$I$I 2-s&4 :T!{m [%Cy4&'/$I$I$I7@JTJpHJ-;z`@۽~Pu QTKi<&Hk#/$I$I$I7@Jd2aiidVI]e{]BUr!5"OfU/$I$I$I7@Jh4ܹs4ZoW/z=B"QmE۲/g5U/$I$I$I7@Jh4ٳ-fffET(hB ɤ!͊$I$I$I7t t+?{ywUlv.K-{ly9g'E$kA^ 9 `3|,V_$jgEd7MR#Sdaܽ{UVWWy?FcJ7&J!IJ )T>$I$I$IO )X;lnn2y:ʸt Y|3}I$I$I tnNHmmm1Lu4Q˞}IlF=8=9,HOJ%ZgHI$I$I tiM&@*f=u:0叇S@ix)I$I$I: 666f u[SFΐ$I$I$)n.XYYyu:g]ҵ4 6n$I$I$IO )]Z\zփ)u:#8޴/rgHI$I$ITҥ(}$$eѬP͕$I$I$)X!KxғRI{~u6_Y,+$#5q%I$I$IzR677eP"ꤨ-+gHI$I$I4 tdޏ\-fݠ}A:jVi7dI$I$ItDm۲錃p.)e d 5M7X$I$Id.v}kkk]obG{PZ8lwXnHI$I$I tDlooa U9q`%X(*MKi$I$I$I[҉ڢmć=wDQU&,I$I$ISBJ6[[[_n'{0mV"]٢E+I$I$IS2ҥG_x666~g{}f߀Li$[%viخO$I$I߅._@W?#tJ&wh/HJ$I$I;0ҥK?rMw{>(-Q ˡQ$h䕗i7 $I$I$I]HEׯȵ=~swaq9T"`5U7Y$I$I߁. ]d29~o;?1pXG-u`1~+[W$I$I$I .mf{{xz0eg?.i=԰&e2f4kn$I$I$I#)]*mrvvvFݟ߹ín~N GUO( CO{շ^9%ܒ$I$I$IOu tt]W\y^{~!?'( }u=u>'sLƌ_|k*$I$I$]d2ᥗ^bm{?aDMâQ_(JlѬKl~;tΏ$I$I$?.^u}d:DFPl{lL^{eԹ$I$I$G0җ^"XL& C[ >hPј7µ?!U͕$I$I$2`mm_~D Wݽc؛TJ^bu(I$I$I!)]*[[[\~i{?gg+:9!+QVu6w#%I$I$Iz tic_իW)ўߺ>`ؽGͩ&@˽$I$I$Y2ҥʵk9O>e~&t @q_ L$I$I$Iz tilnn /ytfn|B{2RXDPy_Ct4n$I$I$Iϐ.^yԧtFdĩqTiO$I$I$n tiK'g7ChVBi⟅$I$I$IϒXߟ?;qwwa8NNZTMkp$I$I$Iϒ.??Mlp0%3UHΔFn$I$I$IϘ.qT@J$I$Ig@J)G0mKc忛n$I$I$IXpӝ~ ^F+i_u,[AD!un$I$I$IϘ2QSDpcs}[D@)@=ERA)c[I$I$IHLցgwwOBo@e(q!`f񈲲FJ$I$IHR9 u??{۷i&&ip$f2q%I$I$IzƊ[$3tA?e/%ý}(Ai&Y+^}@(㱛(I$I$I3f KgJ;@dn2L!(% "Zɘ2@I$I$I1)]:χ~QWf7>}2ab*e$4++č$I$I$90ҥu`?)r6g rY(ABY[Fn$I$I$Iρ.p:zo(jViƝ&I$I$Is` KV0oަh5+$I$I$IzN tide ;o!=44kkDg$I$I$Iσ.y&Sr߽C{64k )I$I$I)]ZsY&;d@@De~hWW)mI$I$I .!w$I$I$Iz twaњX~Մ {3c7M$I$I@JpGDݵ IDATѭ)wGsE˾`(2F#&JJ$I$It hX0^ΐ*rTUQ_NJ$I$It w}E(xdFG3QkWwM$I$I$ 8CJփsfrs繁ƥpZӾI)%!rTfkknSM$I$I$ HŠL&QlZ">0pkȀ6ŜM"hQɲ:jeBw ݕMidI$I$I΀.hx_9jͷ[ց &⡾baP@e9;j ڄfeb %I$I$I1҅uW m^r{jRe(I4t8 Ʉnsf}O(x%I$I$I: ~" 륶َۣz;r$h FReK?XmlnRF )I$I$IΊ.tc&lDk݄2ʝ왓2*THEݲe_ իʘ2$I$I$)]8tMִTnV2ʽa`$} Gt;W6i")+ʨs%I$I$I:#RFN$yX! fB@3}JI$I$It ta%IDou]Ƿ-]vtzu @Bd5$I$I$,HJAw7Z;曋2=ٰ2XTFJ$I$I$ Hסh |wߡ!.~wy_|XۛΘ @i>I$I$Iΐ. 3集Ǭ#׮o~3u1@* ͕$I$I$ n.eR0~5~=/6668z=zCO$YTI=uL$I$I$LX! )F;WW$秵VX+gٲ/$Zyo>I$I$IΐRp"j/snc fLӣ{}ϽٜryrH$I$I$Iz t!@0z%V5G3iQuU )I$I$Iΐ-taS3Ң"j}~h@u$I$I$BJP,*~ +F4C+ter7Pk=? }y&U:BJ$I$Id '#"{7:tǝ{xٿ{޴so>deE$I$I$Ig@JaT@M}v#>{:~0̆,Sfd?BJ$I$I3 )]h9B}D $>eGR$I$I$Ig@JV9 {{d}tTD!ۖzoiV+{|q#ȡ )I$I$Iΐ.. {%cfL $ 9-$I$I$I:SRr!(CϦI[!%I$I$IY2ҹW<eRǶ;||M3q;: n$I$I$Igu t^"(%"`HbE{=u6ERIW}ГY!!UBJ$I$I3cMf.*i7)%8:CH+E"u`w6 p$I$I$0J([o"):ʤjȊRJr{v@eѳoQ-%I$I$IΌ mFׯC=v/z!"h:3ws97*GI$I$It tFW7)1J "rXχCMx%I$I$Ig sreo|2u`QulAVJH&&NʝaH"󥊩$I$I$Ig@J#=YCLq2zвhw| '@J$I$Id sh/B@e(k6ֈȍ$I$I$ HB:Pk@heg C%@*m_q%I$I$I:cRjП@tHՃ)>g~EUCt;WlI$I$IΘ]fB R[Eʨ=uSϩ hPӾ)FK$I$It t!0@SNh!ƣS+fzIBE<GEqǰ ++n$I$I$Ig@JBuQ%2eTBƧVH>Ƨdb"zp0ӏԶq%I$I$I:cR:wa'E uZT>[DieCTmPK$I$I$1) &AH-Nh?f~F{hQ˾9Xsf}߻$I$I$1)]u͐cףmiƓR>gDkaudKM!"X Nˤ0P3pI$I$IΘ]=Qcӟ˨FG Ӱ~C@ ,bV 2K$I$It t!'# qwBjM>-9D|# Acq0P $I$I$I:sR:w00fNA:hf|>!ǷdD)0 ΐ$I$I$H\e&u3WH%u4-~po"WHEYE U Z+}߻$I$I$1)@@z.T4Dl>@D$I$I$|H\e&9Tr:(sZJQ ͸L'Lo|B<8CoߕK$I$It tjgGaaS4A(݈]PSP9ʨ"Y!Uk~K$I$It tR|N)?bzu`13X hRVHI$I$It> t@R.GE/}z$XO̜$I$I$IP t:YOdIhDi[{կvRӏl+3H3)I$I$I.)E Փɖ}e2(Lo|MǗ,Oq9DER$I$I$1ҹLtFA3@?_3K KkQJK$I$Itt^*3@aٲ/!IJ7L{¢)sђ/Pj[E$I$I$Iu tTO?a ݹE`Diനi0,BJ2PO]׶-m둗$I$I$W& -BeEYs1+cQ5RĨ%B,OhۖsI$I$IΘt3r6'kOƢ_u.u:M"_5)m6-J7"fh4 MӸ$I$I$1)LlNgd r:,'2Vڍ 6&ӌFT`V+y,m:CJ$I$Is:_@p0 28:jGqq9կɕ|2} a<;CJ$I$Is` sUao RHZ":W޻L^{hZZIz3뺎hd %I$I$I90ҹa@?@>PT .¨uѪrwaoSIdI ))I$I$IΏUbNP8!$8)I(wwߡXfD.(FL&)I$I$I΁Uʰϐ,g?IAPsyO4L^L^e>mLA'HEɄF.I$I$I3ҹ~`[싣R ET,*2+^`O7_'ſ$YPa u.I$I$IU=uoJ·W&^]|+? YVvked*2Ē$I$I$Ig@J*aoh2rUHr݈+ɿ|MHثɝ3w[[[s%I$I$I:ӹʾgwNV5%PkR l_믞\I$S&TUI$I$Ia sCNgPs1 P=eu?}v?e孯?HEwf2$I$I$+tnâ<wW{>s^j>I$I$IΉRP ҵ}-Vz In79-_ښ,I$I$I90҅@B3|4F8CJ$I$Isb gh/\_>Soll8CJ$I$Is )]Г@iG4uJ ն-\rhJ$I$It ta<qu]3nMu;;;HI$I$ItNl٧%3M)#~'Wԕ+W[I$I$IΉ.@)Av?GnݹsEUf2yY[[sc%I$I$I:'RpET-n޼pph'Y]]7ޠ:7V$I$Is )]8͏cf#VVVx뭷 $I$I$I:GVHjRk._֭[{'_rW_}K$I$It^V}r,^>?)RڵkR$I$I$#)],)3x'GZ__^6x%I$I$I:/B:z?3idy}N,g&D Adi cxß΀aca0$0 xl-DrHfw-vUUٝQY ꎌ8ԛpE?\{/U$I$I$1[)Hj)ԮW?~mGw';wMQ$I$I$0^oZ Y/>#>s_Ep?]ǃ1]t$I$I$I7ȆJY\tP_!Uk嗿%og2`#8)A $I$I$I7ȆNBOlN#=OXd/:kHT*tdHI$I$It ֪ 'G_W=avW `HߐZɮ@)$I$I$HT>+{_d"Y~!S0,vP $I$I$IIRzL1& i)9 IDATK ( =T5`J$I$I$)Z",CVH^I58Ujd&+I$I$Iҍ0gLtu~YPg*I$I$I 2[g'aTW FM(Qʳ9$I$I$k?J5+5hYNFI$I$It 5DkAZ4򗁔$I$I$I7ϑ}Z )j0n&}uѽzƟ$I$I$IZ9)vAR :%I$I$IV͑}ݰxȾ! e\Z(I$I$In62vnH"6"?]W$I$I$Iҍ0농`4\B6q4}dHI$I$It ahH[RgjI$I$It A#>DBjAJ$I$Id ]ƣ!J֯6B/iV@z4 #^هQ$I$I$Hi#nn2(Rj. ,x͙5R $I$I$IARZe{k jf?KLKJvs>fZ˗$8O$I$I2#* - bهj!Tc)!fTvs>"GD\*R$I$I$ RZp՚ammx<xydߎ"v|yZ;MZ+ߖR$I$I$ )Ԡm\Ӷ-V&݅aۏﻂӑ}{,e-hisj%Y$I$I$:Hiڶa}}L6L&{g?΃tpTЗu k`L -/K kHI$I$It Rm0 iX Ce}mLDGDHUOʜ@iG!2&Y!I$I$I 1jo& 4M\]Wxwt>9}H>B a+7RU†$I$I$I7@J+ -M5+G~ywDς/r$$ǥcR+DsfS2iT? p\ {c =M^hBY}$I$I$)VDҩ&+prTԄe qH5|h'6$I$I$I)RZ<$"loo*"A) "X{W=R$I$I$)Td|$MMBI]RkFe.G"I$I$I 0J՚,,ln +R<- si  xhZD̆$I$I$I7cGU2/( `в>f~qz~-Td0ip XoZxIdz$I$I$RZR*ɜR mXi텍dR{4^j#Xo^9/!rn$I$I$Iz Rpx<+rdMڈA\jzy&Pojqe%I$I$IMrdVj8<< з`m4m]d8YVk.3Qcg$I$I$I[ɆVj8m! 3!۶Ⱦ4+Ӭg  h}Y$I$I$Vjg{ fA -Mshӆ$Y5ap+$I$I$I)RZx4dYb0hiA0ʤVah(j[$I$I$IARZuفQDж \"(z~d_LZuV\,Z=I$I$InVj4>A΢/1B#.HRr_EGwxD9>&"I$I$I 0JEq YV˦UK0 D*5Pꥷ,L2 Nx'"I$I$I 0Jmnq6rn_LtQܳ$I$I$IoVf8:@-Ɍ"!xwm<8o~ރ$I$I$ 3nop7R)t R bHGq"̤fDp_rKH$I$IHieZglq2˨{!"2| 3$I$I$IoVޝܿE;h8m/՚L&3p}} UʹrS]åt''q$I$I$Ib wwww9-#EhBuW]!I³D4z3co~J< I$I$I)̃wgR*D- ',(r\O_Ўnz2~NwpI$I$IHi%Fs6v6)eC>P胧Iy.J *rrɯ?`#HI$I$IHo&ww)5L 1^- @G?TCI~o)'K$I$I7@JS5 .wnm1h&iCjzvR5|nD_f"]R,Ccf|J9:$I$I$Iz t7U]v7&v2WmHe?RWٗ}8?daI$I$IHڵM;nև@V&9G+5J@2/H?&~龇%I$I$I` k7h[em4>D R*錣*$ U ?_⷟$I$I$Iz tƣ!wno3(At#NR¶J]f 2`@`L$I$I$]`в`S;Ⱦ:ԗBwtLHL<0I$I$IV@J׮֤toEq&G'+7$vH}5;tt$I$I$i t&}tʠoa>892-|yM_!}lĆ$I$I$If kXtO?4@*d2xrvTxT9C* @c&I$I$IҊH՚XtȾ&88wH@-:QK$I$I$IZ!)]hȝ[};|@TJa23-.e(CewHu:]I$I$IBRVр[;[ *KT9/P);j> ]xp$I$I$հmXc0h]LW CdTaU꼾BHI$I$IJRm i8Rz SJjgP $I$I$IZ))] !\e)a>/.R,Үu_6" Y+%PI$I$I/f B:tKfs6 F~t_+*t$I$I$I+e kU3Yt\f\- iQyV-PaTcbzp$I$I$U)|A)eC*Y,speuCjF^Cٯ+K,Zg5+I$I$It~NV@*YKBb,"ʋ}_L kRbCJ$I$IU!kUke>_PjX[t\-: i ^兵U_|, Ն$I$I$I+d kUKe6[Ԇ*Y~YM ~B),Ń$I$I$i tRLgG$8/B2ByE)=z$ZȒ )I$I$IV@Jת+ɌR+ː'/LN._%$u6$I$I$IZ%)]+(cҢrr@IV#ܯ]ٵrс#$I$I$IZ))]R*']>,DLG~w̠, pd$I$I$I+c k7͙,E@dҶA4 "=:Z. 2|t:/vdWL%I$I$I.@Jn>/OB}4_ȾZݼ&^$Y:r6!%I$I$I Hu]ᄮ+gm撷[rxZRyF\u9y%))Y'I$I$IҊ t拎#] Z}㩐LrrŗYK 6u/OK()$I$I$iu tJ)-:6W2 ja&BϾO-:@J$I$IU1ҵ5?b6_,Fv^&Y8~Ⱦ`D0|ndeVW(pd$I$I$I+)]#&y?/`m##Tɉ;$I$I$IZ!)]Z'O9:Rj!" FFtqf0l5iϗ XHI$I$IBRvYGO9:PڶemʼuO& jGwt>I$I$IV@J׮fSjI"mX658Z^q4GlkUR::"_}$I$I$IWc kN8<0/h-k/u 8ڽ5kѰq>ʼZ \$I$I$Hi%GOha۲.pX Ձz4l-MijPWTxI$I$I"RZ$;A-[klqC* 8kF7 [/?#dQ(G$I$I$I+b ;8ih ͍7NyVjWv3Z6?Xꢣ{GwtLul$I$I$I+a 98I$I$IV@J+spxݢP3Zgw5T.K'YدqSkl֢f~P*"$?C$I$I$i 2}CꐮL%_+l4}CjAeqkB\Ӈ?$I$I$IZ) O/d&cv7|iPtl7-[0eEMfM$I$I0ʔR9(%Gܿ`pȾy&Kq-aV;` [^ IDAT/<[ h$I$I$麹CJ+5-x٢x<]a|ff2gWnZ6}"SHon:O$I$IU0J{GLgsR dgk<<5Ӭ,^j Fg[$I$I$I+` LO1_, GܽÖz.JZ[P!5n 5 ֗#h77hF#L$I$I0Ms?9d63wwxDf@Б“x.:o##Q_m`L Ò$I$I$i rGOM@jĽ;΂g_ OJʑ}̀6╡2u@J$I$I0ʕi-ܻJ TǓZ. w2bYj4)I$I$IV@J+WkxɌ̤iܿJ.)8cGMM˝vNַf4&%I$I$I Hij&p|2J4768g^eiYk"U b<@J$I$IU0e&pt4J;;lomА$<-_Hk;G%U R_$#@J$I$I0՚atFژ{wwE)i<*{hH5C4j^Wf8 Z:H$I$I ވtCOhxȽܾEI-<. ˁTzm8 D$I$I$IZ^oDMxcڶa8p6nopX K4_?MK7Hi~$I$I$ZH?b&j]ڶx帾=\n;2 $I$I$IZ)1{<;f-ܻE6|9Rm{Z㣈뾢$I$I$IZ2ē'tnorO9G\hpN4\X>rd$I$I$I` 7foGOJdcm-w6,. Z`MKGmwY*J$I$I$ >Zh&w,8@jipA*HI$I$I Rzc<;"2 `tggi:[MC+אIڐ$I$I$i% FLFmK>丽w!?3<7m+ $I$I$iE FNOɄ&Z(ˉԈoAYEbd-p%I$I$IRzN&3~#3iG?`4x!3\N; XA\@@V'I$I$IJH:>G3ɚ vlk9OqbHdWjCJ$I$IU0u2'8>QJe0l]ó;53Z{$:0$I$I$i% F >{ǓCöeksw߹ЇNC7RV6L/,PBVGI$I$I Rz'|Ǔwac}|vSx XBhA!%I$I$I*H鍛f|g4A66 h&#*$"g_R<I$I$IV@Joܢ+O? .k}C̀mZ&%- $I$I$IZ)q&g@̯Ԕ8 <I$I$IV@JoRAp#iږ\aGM]FK$I$I$IZ^oJMPgr<&6;C6wJD|}A@@_I$I$IVo&x;no4q 4t'S',Q:;m~cgoJcچ0$I$I$i%x]h4?x%#`olC5?k&k=!_~T#$I$I$IZ^W6?{|h?9dc){J&o0Z껤mmHI$I$I" l8ly-omCwHჵmg/N`oGW ̬˧ngŠtoONd+ˣ4=eӡR^<-&3M& e)|g/NU׍fݿw>۴$) =ҋzBr}\@T{YDWk%y0Ta0p>'׋S-VkFS/%3), Z?>t}vYɲ 4=~pKٸII*䙊]R`RZE=eYҦtʲ(_?׳/]^Uh Km uؾnI27XtPC >HჹJZE=yk&>A4:~+GsɂBi->- c^? +=e3p>KZWJELArIPzr??{,䭫=v6_Iyݙ,FHჹZU(ĠHӝmm3d_?_=7<%ӡ4X7I"Wqٔ'Rp.UZUH. wT^m9SsTT$ˣ[SMJIr7aK;\}B /#sVJuH"T@J6̔V|vQI%_S6J?u@]z3%wxї+{@ ]ZUꦕ$y :&yVZ.Xd=8TygP˿\8h'@ Hu垔wwTd(n.6 )v[){c ?=P6akGP >JZFU*F)3IbdэS1Ag6/7$, R"?R(jTU,Hw{앉}/M1 _'hQU72I!GF7ؒ2IrWIRjdSrQb8uWb)bCjG @ :4{~/OjRJQ W7V>Bw,l3OQi%47ѐ\RZ}y$Yb ҳX ,B0QƏkUu#)Ġ 5zTRUKMB'n_rI6^e!@ohHu%%e!t#߇˕VM]n%7IVZ7];S2(zF ԍi8(4使o\HzNfUZJU#_jAL1g|V7U\2u 4Lf&섲F\:̔vU]՛۾<1Ȳ( 4>ZU7F)%%we 嗛Q2S6hmEHuސjkZwHE,a#)|nUUR*^ۤXD h[Rޤ&ul-_W2k )Yb@oѪQUu )wWQd*~wHYגr8jOb?35JRB*.VB[ l>Z]7Z׍E UH-Q. A&? :lx=zB`d7@ [+T)eIq2`3B>uTsrHg1(d l>Z4ȾR޺3M|6nL.EImRsRsx3te$=#Gn+,r 5̬kIˢi١F_ܑeARҒukㅚz<&@ѪQUr"WY [监tmݱ_R'Jל.U]e!\J,fHC Hᣥ䪪VmǠ"v/+3m&O.im~pKtԴ[T~~vY汯%)DYs@ R7geQyOȓK.AT彽.r]4$%ㅔo\rIG}@ 4ԅ>1FEM&o, {g#Uzxtyvs! µ4MպeRe능M\@ipoOȺjs_3,Z=:R;__nFnd_!@p-uj]rI!UR${@RwyB7IճSU.+}V~񄛋?iH;)\KS7ZjI]C)˂<ɶ:&eRO4])Fy.)RUksUu+ /wRȢBs@ 4]CJ.Remebgޞ&?D+:%^ƺ/ vOA3Ot~boRmk\fRe~ywGvBuAF_{,Jrɻd}ۤhϟ*Ս d.)MR2vH;>ǵ4mz]IJ1FwBIQ&?}M{Y jVsy/}'xh Rd}!kiۤ庖,(Ϻ}hHIpL뻣$Yi^imD kiVUk EEvRf| ;nLuJZjnJn,(C HZ救}fbTg R&"vlgԴ//]RZ٥׾;Q,#oR6%ֵ]LYTl |g?Pyk&QޤUwdq7٩e(Ze\&W2)zG kiۤuUM](;>9],;3d\+vGI)i u# ︬M2F *C HZ6ijR1(/r}t"y\jZcxGʂ͸Rਖ਼ujbw2Ⱦ #wR}m*%WAeɥᧇ.tiESjZijΖ%mWbľe! µ6*)]!(àp~ \˻]ɵ5l=Y jΖ:o~|,[2z I!FYN @4ҶVJm )&I2hû*nMQf5':_]7=_dY>zGC Ҧe (kH˓+䙦iM]Lۓ$Y՜XަRf.7WLeY"Oq-m>WAe2 &yJBёPEޔ Y@4ҦպVJ$W>42ۤ8,4PR򺽈\Li'#yJ>nE)d+@4ҶIպRJI?yryJwGSeaw{N g#}.}WG?B 1ʂq@ ҶIUu]1yT yv~BIaԦ% ܵc-T٪ t~wL&b&eQ CgRպVӶJBPY H6)k[?̺QRC"Ju<ɉ\f3. /Y|kFV&TsI~zWwGmfE];WZ}\|-}H;_yeY>n-ժRW' IDAT.zebi>퍺df6:ZhDi]\$QA.)F kkۤR$e1,]*jm;}jJu㹼ieM 1B! µ5mrVv ߷\M $dRLiYi 56͟enTwM)Ыm[-kMS<ϠLqXjkUORzBYנzu7Tsu;Ivqᒔe Y& R-%FL`=R"Sq{'&AnU8Jm1n/İ>F ksw-Wk5mRA1e^{¨;*,t^|Ă]U=9Qg4> W2I!Y?xp|ksw-V6))M {c<2Lի9^hXٲ&!bܥrHSA[d1M'03hsyn2+r~,R(nZ+m+.*B!=LF;[ &LnRiKtObppmj!#|rd(^k;udjV] w>><2I!d7@ ׷WUܥe@O臟ZP]"(^zr폚O`B 7@ Zת.bPT>;TӦc/G<|ىԴ>zTw՛Be8<n]ZlR+kH/`wكߛmSאn>iKOT-tQR7";!R6#Bv4?'wUR:oH?_ekGէK-~򸾏uA \>ǵj3i8,<ɏ> 0zBP[hXi]_{ l+ލOqmrU'ɤѠP]}yvjV'۰.+~t!% X&S Y7%:>w-W+Uug8,pOpXi^ (d>Rmc, `7%VUJ]si8(]1o4Oho, Jmz-c2uRݪzv/ʛ$m$s]*C '؊ijM#3pP*"ڙ /i<*ezԜzxcei M)(n "rjLa_d/>"7AY4Os5$Ydsp)lbb%3d<Ҡ|=ڛ[ fJ=Mݵ|x寞۴Q$RSRؚ|r&ʢnt$S"MԮjyգ#"!u%oZ @ /@* pp9ڝMtfӱ$)}wK ]y1_)W.-LRJu͡p5e岒S̢Fؾۇ3ݻ{]TARs|s Ha˵?;RX{Z몖Rd̔֍U%OIv~{|BC @ Z*=zrj4ڝ5ժR]]jVZyiw:Tj5M{Ⱦj4Y/TTzDщ<%HaV?=rU)XgmզU{,׋&r\s5G BZ!f;#:K (i?$.7Hyer'Z=|D @U)N::i[L}+3SJ;a` //ZyUsx@ [X鑖JPw+ϢB0`g$?C辮ֶ. RוV_TH)l]U5zHR@h<,reY .GM.)DSAiI$_57j+Ha6ck TX2z% AK5ZzH=!֥ٱNK;яDh8(&}w;,)}JjZGOU??Rb %w=yzӅ&~?J?B)d ˢjd&SRHճJ%@2~ض?}Ӆհ,~*,(Of]C*dQ]dwh_7+>Ts6W6rl )l]Jg/NurT]tp0dR}D @ЋMz~tB0mRJ.w납)SȺɯ,QK'H)љOvԻ2)+2&ITwcVH7'g -B7LK;uVəS5H7K,oKvH껭d/jNԞ*V[F ޜ-t|2Wjۋ6BP3"w%R.7#9H7gOj.w2u 2f9L/88@ 99LmJ2f.Y BeS.\殴X=;2)fXlzӐzD*Ġ8*$r7LiRsJ H7Mj>_k;FKEeR/MWdߟm^S&|Vs2)jtz\ o %nd߸TR~i]Y84@ Z+-%IeyT3by K/42)j5_]wvlHy{5`ZZһR~>oP(B$IV HWMjZz>d2"SJ0)phlzմIU%^TB,F)H6o7D.eЧMZn߻I̕,nHIrIqpC`hHW)%Uum] A,MJY.7MyWrܕ͔84@ JU׭RJ|HBߐRΎ]шC`+wWӴJYprLPa_xm9`!ݩ=ѐC`ЫڶrY7m)dR3T==e{Ƨ蕻Զ˔#OruQ6* WnaSqx|(#@CM˧#A!{}oR+Sy玲@hH_MQ8*}7Z{L8/z@ ^Lf"y}B+ {HI"ul2ze&dflSMu'KȔ ҖHm:R]lP*S 80z@ ^b'_QoҕLqӐ BiH$0*G,r`@ 23,ʂ)ll>S>*6W&2Be}x{YH\uvTR@lSֶu- H ,],iH){mvHJOJ)ɂIBt{i[6I/Ԝ-ú){Ser|'ώU|<* 펺ے&QszvUq`RUAYjVR%ֵT\-x2S*wތ^&K.JАRUAyܕkjUu+^X*&<䒛oj~d1ʌ } Bb!\umUU]fқyr"Syw˯DmvQ٦]TB+nl+IMZZ,Vjۤ.ˊL ̷G$Řip}lÁ)dˑ\RUӼ}LB &峡BiT6jT~rWu|^IP&)%WU:/4[R$mbo,+Mz?#L&wU; ,(E@Muj1ߌ)|,q|Pҫ )Kmr{G?B7\Z.+5M+{ n_+QD٨Pe[gR4?g\=Sx=u)Dk4BxdʻP8*[w)wW0S&n0 ѐBܽg,bא:TՍd֖K P ݨ=I2{ GvuO_~!3!UHILygKU]XlPd{+UPJ=н?os@)*yRZ ʋ\yϗ֕<ޚHmeB~ب0J]}o(N8 nzնI2Ie,rNϖZwK&ǃ.zL2ٌ*?{#3B ^5MuU*\eYHOZkerLXl$+i֦T%sl3m;/Tq0 )i[UuAYh NZ,rwٛ&))7;vIrd=Fwq(ܰd.wW9(4ӹNZ󷮑•F*w$ Ԧuk5u?z?*@;@C PRY b/Nu:_) }/@X$QEQ;wtH?%zs?_C]"θ ڶg::>S[䊃BH@^fL_4SNuGLw{Лůio6kP]|zH!fː]ȔFw'2n|" ptOv~Лۇ{{_!ft2hGW>Ͽ~6޶G]Ge;#cyR^Eb9P_׃o!=@ ެZUUoO,N'y?˯ىܥ^OL&oP8*Tޚ)}J*L?G_7|bui$uSb ڛczU_?/~D.W*@2\LR}LC?6ͥ0)FGfcMtt2ףG WB5U,MXf:Dt)&fQY.4 ;tA),wGʦCY7AVP}K?S~|H7Eu\mX:ܟ^]m۪;!e1(؛({wsM~dy)f8(T|M,tpW1v^JIuݜET.SO˼kHM"B/Lx4pPS$6,sݹ<.nWEhg!%)Q!Q毫bdo<+ Ht)53Yƥ c, .Cui4ᮆRͪV}t&Mtu%ム cp-Y=E f:dTʂ.FI]4skWaDRb-If&42wlw*? ->/tpd(NP߽hVZ3u#7_)w<;f W4u!n4yr3ݽd3I|ٙҺ7l3LfΞsOt1Rغ,ukW"Wjҥ}0t$Ԯj(*9͓*v4H; 9)l]Y}8SYjˁe;#h M#5'MJ{wA8=G t7SJr u>o0(tx0lwi㹼uI&m$ugAUo6p+xNa*ϣv4 cPݴAQ`oX|g*k"RRM]-SZZ/Oӟ|{vw5 y.OU??= P&)lՠ,txЍtdfݿ.DfvwgOdם^Xrz ҌIhdcd Ӄ8$F8LDR"1nV{UVn˽GKU.^0#)˪Jw/sN/v5sMRe+̔ۤS -[ )*ai IDAT7G?U[J 0x5<:um}E7n+'JZhuѱO۬Mjܻevk6I?/\2-(`5y}MQ쥤(g׵UݺG/MC`r3eF7oh|󆬸@jbcMTԵj(  Fe>d:y]˺y}M,~ yӑFVT/kh3R\]Q4&SLx @  ,I:]$yv-/um}YKKY45/vU?z[IKYD{7uWq:Eit}C4U-XY` RԨ,<RUQkK"3SWyv:c] _)._u X]VPm*UwW( ,dfufsOpʽ0I쒁TۚGzG߸b} %HaPuݨiZyvvgZZ+|eeTPDLf;3:I% 03ɊBf> kk*n^WvWk=7;by HaP;vv*o'IZ_[V]ݼbu0*d!SV5JZs7s74Q,y#,u,VU\P뮑o-h{~0*y\30ݙ?w}Ot5Vz. 8+,"ȳ+Iiܷ;ɂɕrURqiںl2Ru |P;Bx\bkW"* w'{9\f@QT-{Z{UH.y$.R.fHKnRNRn.uo Hx@8 exTjueթ62;07Iir@[+O{IRJ.uq:ݷ3* %. ) f<.5d&@Eu%R+\J^pg'yN!%Iq:wH0*7dsVM&]Li |)%Sײ/7h$HkVf*).@  GQYײo~S5Jr|˭{'˒~v')WL %I+woS\g'#`FeTYs7@GU])R8}>NL]y]qyIiZʙ Ha0eY( uN R6K!5K{]JC6wKVH&]϶wW"0*x,9TUI&yl;O*YYcshoy\gjoE CLrz{V/mRKd7Sϟ)m~Q.@ ->ZueN BP|GՓRr'OY(R!L %ܔUbhn) 윳ɥ,igRbO͓m媑Lꤳ{JΖ7$յ~rUh ) o׷EM6SګApNRLϟo] vڏQIWH$76ݫ}\\jyT)3M}[!j_  LQ.̔մIu*cnURtNw.,rI}%kZo+,-ivv6s  "j<u#N̔nZUuT$yW4+U=@ _t|yĥVmTmhת?-HaPe5vi5/yQj}۸/e).!dޓmJGOɯ 0"U"%U׭f{UPN;~W{eɲKdok| 7]m a ) ,FE!<ʔs֬;:)rw)ɭ2<,y<3<_e$64}o(oh?U)F ,c8ޡ}MJ)kwVik{fǞSMN8}_]5T #-[7Vv>L@Zy@ )(vqɳKgRʥ8hWyɃ RLY*U&OٕJ&w=jRa2{ߺmcyJ<|NA EPQ3~IS-ev!ߑ𡔙it놦→ocap) ( e PY)gIf:yM_:>4&j?Y@ )nԢR6 N|ZsF9ufZ=Q>R8RLY*̈́:)aT۶M&ɬ:Kj%%i=7U{VWzO>ep ) ,z:MYM*'¦£y̤}N>ί^')G۟j?fp ) * LjڤnzgMif}YI6-4o2F7i]ׯu׃Gw?}B%RL_!&5unc*)&+cL}QTr+y~;~oޕKf y,!`"( _`TխfU|f` Ep/.9@jt&몲$~cHa0EQ(ƸXU9pHaf1(D[dgɵ7Um,ّ׏TK'#YYݫo~wY}}j4mFnhQqB.fwf}~\yR_mSҬU7͡CȤ0)E)&.y+tTie}\yR-V%ɕRRUժ.:|H>#Y W:'eo9R-Z>C|W[o(k{tI|HX+@ rfH5MRx)o7UDQ) -PkIZBǝi;*äd*_trf,)  Mn4t;deTGYGAI  Hk+Z}M{)P)KfJiϔ\aRgWNYyJ 3)笺n4͉\.3ʮBl}]uU+SD[z~+J {{J{,E -MYUݨi NgPFq) R}TvIݷ]f?j.j~N 0.+\]TӴjtR$Yƅ,ک$Y^[ZUܸ!3+}63j=g,) ĕrRJE)SWQUG2,FY` >٥܇]V:?3=~[*&w0jܶ}񍪯Qn J" ܥIJ|:ȓ&nXڲRgR}u + )Uh`[׭Jkb}Uk-ءk/B,D mꪝN~L&e; AKi<} & ? ޟ-0j;eCWH&) }qQ.]k˺qmU1FI}ҡf9yfI[f[ʍcZ',D Tun`ZYj}mY1 M ]Ǹk!hRK@۷^@,S}5HW3uUH&cp)u-YbYQ{Oō:Rf{OՃjY(+@ FU(,4* Ge?}6VTL:-棜^O߾uemKu3$SꇏX(+@ .pv>w)]K9+ەcYR %L޼֭.:^]r3 M?`) fVתVf-+ A!;Y0nvkW޶RX&IYInHXu+I*d/T?d!`vw+m̔s>߁'U/Iٕvkw\RS )I*76T^8{6/4{r0ݙwR$ csVJW~`T[5ʳ|.kX\[Uy^},TupUHa0T(Rd&mR۶JM}Qz/mϔ\NMRMHSk+cbe۪?Pk J!`E_!e:q6\۶ &W,`ry7Sd㱊W+4? 3)7O R@ 9\!S3`YhoR|̩RbP|rr۪~XN !pɬ:94^77UULvBRT<Q RV^OU?yr٫FgU͂\Ry2ff^9Ĉtbe61;|.OΎr۲hW+g?LJ)j5M# :>_ʮPFK"vQ!dJZ}'j?BBnX4+@ 9+tj5|^TYuӪiӫpN}˾Bq(ZpYW!j f_}G+=}.SW1ef2{u%$Wޛ)5p%0Rz'su6) :GX#Y0+Uru- RֶOj|^~>׏f )@ ϐ:7+,4e8.0s]KaG/]eTGiyߞ?4Y4+}LrWreQyd+ l^^AVDYYt9) AY<| ȶCPLnA~rv庑Ģ\ RN_4wnԡQQuZ˳lԹV1|oV%a.ז5}C:L%o[y۲fW[Lum@ pl>Xݲrowv(54Ս2)rUHf`~fdo(߹ϬFi0.pMdH.) 1}ɕ*5wPkJ󚆬Frާ)=~_ff&Q]3ۿh3L 2 ~xTj<*ʤӘ3vݿר\7pVnS7_r)&)V=Mn>!ߗTW 3G:^7CPvzfWz)m~Rn[>CYvLV]c?\7]ԡ*SB peвNƚNFL/`ETA' )ݝS>x.Wn[ys@jl5723I>kx$++)S*2`#M&cuR2+eTNfB`CQ 0r7| >B{)~lTW%ŲPby*J[w L٭ G@ Y5F. *bTÉ!Be"z\{׭nsV/ G=Cގrt[.ѝ[ ++?͐"O0.T\Xm_rYN)I ieY@O)L}h"hهK3&㑊xB$EDCǺ+.2«3ۥڪVnKUHyJjwga&&m*׎82,FYA 8UH؅GG], !40.ULmu%R)Ku\W/ԾV[,ݼ~O&ɤ5B"Kp%H̤QY*Ƴʂ(2v^ե8*&e??xFӾf+ԵjyxTB 妖e&ewbe;8H!tQܢ,C*# 2*:_fAuR̐بP3$)gysVU6]]j77 b7 L/?ĠPHj ¥LE-I.ʪS0몣bP>vk[3MRJ9~߈L}E9;ZڽTb(b7j yۦUnZIRy{}igWKyUߟ)NJ8륅 bkgf]>fHa!*땭h]U5/rIյɓm#Mm} d,s%ťIw}g\P1Fa?, 2łB w;<L.e+ו<;nWK>Z\*L& gT:Y,l,dF Ar2y7jN{'2 )Dk;wr-M#sTv?L٦]޵'TL'KdeSmoH\RYٌbgH]¼n|-f_}_|\vвOAqeYqisX BwabhpEHasWEtdI^ \]Beօ6f:_"e'[IRj|->BxLV+./-!yX&s j)\9}Bg圏ˬ#e$򮍠˥6ɛf{[;D l;*:BQ޷!$ \R(9Q!'3yUud]Awɮj|b' &ʮ=ѪpPAgQ&}TwܑL A92y5۴p>OI/~},T sKK~KkݪB9BO&bpi5[}͕)R?=ݾ, ӉlTvQTʢs*!Ԧ|}&)ʏj!^pԡr),IөǴ*=z"3bTj;ZD3H͖Ku6Kd AR$QTRT.U*7Gxb_aO\O<\T%YDb#hH dkow| d| q ^"{cZ iD .-kW6uOB꬏co ܞ9)Mgz?A1h0=:a< }zYT|ZHB4Mm?S]mJʫ@QfvR+rϫ>&yhcj0kySwni[+wd1>߃RVi7R)\U۶ϔ#yjۤ6Q2 vR9r^mD#PuCLy٪Ϻ*.3S0_?}7vAKe,I9+W23@ UU>~T>*sߐ}fSwlrd&)ʔmoֿ纝b< 2C.LU5n9wUU錙N/̺l=}M҉@j:wQCeҝ?S}[*67QdR )g.̢nT5-rvm7Ĉeu?O~+ Ե paUie1ʺv}9gmVY&{"IJxv}9R}=}EVLuw??e챇|[;m;^bkSFH)/*f>paZu(HRJJ9LfAf{lyw_hO`*}}әfS\z# nz)77$|!|6H,ZE #զ}/*wQj)3ѣo\ '"/S7]~zw~Kqق3nR˕sMxKwBfvbb9UIRw.l}- n$3 THfr2* 欜]?_?EwM5?JW.0)no]öMeIyPZH>paZYΨZo?~et]t] Ze_moipUkj|&H,Zyʨ]mJJ)=I`:.'y(_tWThW{誸Ob<૯kFzqoufR )\Ţl^+Q6~|^nZA>r1K*P+XU@ɺR'B1෿/O^翫bkm ^~Yl2+6 3@ f:4-=+N&C%od*^kwğ,-#KUƅOycG^r(lgB` pQJ\mL)%]J'?gw&K޲:TXbzo߼0J`ܺ-f̑|6HB拺CYMGkk`pfG> byTv)Sj"Չ1I!Fm|[z7RקyS/~A+M'JS@ jhu4BXSA)v4;*ƧlAnyS>t&";g>qkC|IVDLyN`HB-ZG̥kbZJY 1 plW=-,2B)d݄KZ˧k6kWd}h_b4%?)\ux4ό:!żֽwR>RJ=%ܟ╗{T7~yhͯE)%|вiRHLRi9щy|/s!:][OtPq44+ BMX{RPuh6'sI!e|>xdsLLN%_.%;;o~H孛Rj4G 4jtfTH=C{`݇{׵Ogt_7U敯QNIڽEŦ=fHBMÙ&=1,(A,ة}WRǙ-[vok/]я~wV4G.TӴ:8iZTk>W4[! Vҹ=dTOo7voiW6E IDAT?{mXik )\/B!h0(?BJAz'\bqkC;7T޺y2yg:_rrInN k}py\m v]1Fji,~yBnvR_?lk[8]횼 -zW!Kgr5WN)ik@ nZLUB<ܥFRE+d1m.ʰ㳻h_啮I%mUy.Q-`HUu:)Rr4 >EAs[UC39VLE>9+65 ^̻Vnf.\&]@ʥ"FGU˾P' ,FYs4~<@$[[rGō+_˷5|Ua`}MwBi6?W.-p4UnE{].P{;T޹Z7)7Ɍ9RF .NUUͩ׳,R-$3c{'.">Ue*oW\/od*-)\J ɻ,}فZ)5Tbdm]Xnh\V )"…w0l^l5d*x K!ARΣVᗙV]kG#ŭ &c 1)\kgև0.3RC)SySMQB ևHL]t*򜕯qVx,N̐5)\8wDB9jɽ a>*WP-d&+⠐ =wPw>C*,rJ$A*) )#…s&gAI)ex~}˾"ʆE?ɟ& ] u|g!BQ]VYi )z#¥hVGSMg YW!e}˾d)QqTvE縺+ĨPwO?I&Oh )Z#¥pgL VN1*S_kh\ 3@ h2t6ZVPE ]Tu%/gH hp VAѝC%RmN$c9'ZJʳrӰak )\LS圎g@KfΚ!%Y0"JܚyqT*^*%:Rn጖}F K3-tx4Sݷ[2I@E*qG=_dݹx1_Lf׷sZn'fb\l"¥iۤ\YBW94*BW>NlIMpm6j8@mRE K5/$+}îB RߟS ]T1fJI} f׶&]݃&yn*}D K5ε7"J̥AYt"¥2B8&)VzRu?wd%\Š0[-èx}[>(O5쓙yH.C{f,X7G,l羦dއ=1BHY-C 7N2.o[ylZ*X\&JeRz3럂Ɋ|zQ-F͡,YW)uMpZ3)m&-*pڶt6 b E<] LVFA) dr{w"(Rݏ]ߖ@qsP̺ L XORTUjo|5zƦٻ9RT k߳^к1Tˌˊb<]֢Tno>ъ0HRJ`MHRUu#m+WW. -/.PycC] u9RRwx(Ơkh&׷-wnc\/43 _vRTuhoHuHҪ]>wK_ !H )g;<ȆM[7v4x5KsRJ XKRTujw–]/~I660*5xyG.KR\f]۾k*ohTlnm>=E`=HRUu꺕Bz[ss[jpg . `(x3(4|e>B,Vs\&G.UJIGJ)ɳk8(]8ʛ[R%uL!]/o׿XA&=(lZ"¥kvsb0]E_(QΆ77%/O"n!P{%w>'rݰqk@ =;R]x,*om)QH YIR]ͣ=}_0k׿>3II{ht?P8A KU#5OUbT5VϙrFҬV]twUpmmLW^W~EEI&Sk}TUl ¥z{ljg.0( ōͱ,m>zޟmR;9Ifj5{Z@[5_{MlU r 6`mHy\Td&ɂܤ8,GeVwz$ۤ4SV0)M5}]妽5_ J0֕*ӲFpg=;dPιkxU-OYVr%߮R۬v/JwqH__ZJ&98d.w0tV)g?.2S[ջE%Iŷi9ʕViZIٻ~J{w\ W훫]L>RӶp]BGU#|C2) nmɊ\Q/ֵˋZ%%^Uꇏq$6uE wԬɄX RuplN)+Km}5}[|]aXJ)wa 03唕rm$YޞyNiW:sj>S)(X\:u̺@* ;Z 酙mV[&ܤ4_i:Uҍk[wQj}GIf\*pe!jْ=ۤ8hpkKΆRϽ*rJ=0C 6pefJBɳN?u+]}/V%"(QluM=:RpO( _}Yy8P v6W4@ +3Wu8$Mi(.ꃩssBP(.:q*7=<5Tyl8R.*-u|HTURjMfL`fw"T筒1J1:WC5׺&;*r]#X R2mZTuF'˖MU=8TntagDͣk]QX,%U8O=)\wW]ϻLyJTiZ sO2S׭n|QR:pUU5}G% \7jj'οMnNJkܪ4?ERE ZյrE #•jۤij,yU=sSni4O=)\f5MBMєZu+7H Ӥefr3&iqO}sb.S/N"ڞBQl[yNlTײoBVj )ow6p'=Rkg'.ݧSU))R׷(fBXUIMppRJjڮ ɑNnSnGGjM+{9R mLjj'SGRNuTV;HY !d>ϙ )Z •jsV YL AÙw絬x- ivFf2{e_s d!HNt"hӌ@ Wʳ+e5LGj]P󬛹,V7i̤VWy<1iN&[ NߝȢk@ W]gWۤ/ޛȳwIYw:@{S>ծoU%݄$Snڣ<] )=Vp\'=|ú)yW4`WJZW9=G*Q\GoQ^4ص[ߝ FPR:-K p]Ÿ>d1>`moYe&Ij[!s9 O;)\3G#K^|(mPɤ`jg:{3痟YJyR;)eup>m7Y5?~bS2Iv5y㮚݉*(?>;S0)gM޼?UHVvx'MJt撢58#Z-KŨ`uu͒Z΄d4t?]yvY8'KIi:ޖ}UZ2X!Ÿӊ@ W)+5P'~GZ4m&oU{8S8pwږmg/L1*kvJ=u.Ҳm]>n[gET7:]}OJ2BPUu_CyN{"Y^U򶹾E.oZyJ'eEMݸRf )PDzdk͵o([C^-Sb9iJzu~_{@*WrS_ۚx6,3\r,MԣB WL RF9Y4Y-k~o bPnv-S'BOٕZnoQr7Sǹ%+J@ G +eF]eӉ L,R<)/5ջGrgVה=+IRʮTWmeX0(d)vS A~֛ٻן+Yɢg}?.ojYjr($W׮OeE)+ #ncq2qWH%u-)fI)4r5ʫZ]ݘQA0izRR1E죗c.q]P?vP{48yj\ )oZ6:Uqw妕RZ, JM#•1,HvsL]ԩv}h٧M멎RRS@aD #•1(c7鱖}T)\R9}̳́:]$i9+/JM^ݔQ5A +CPEP޵@ʬKܥu_X<w妑ROٕ yVYdxĆ)\ME%٩]r[d˖}m7B%)s~c/{V*)\-T$ )\cH=VjwVIR0㞙h0<[0q׍<5rnM*c!`=HJEpPxԒw3Ox: 3ws7>74mLr-t:!x$ōR@ +cf} 5XaS_}Ӻ1 ux[:9DJm~\Rv٠P=V3,q30RlvTղe07cMX R2EUbgHR um:] }4̕S~quUIu߻f=+W챖}akC}5A +S]uNT3uV dd۲f&Iy^+ͫG%>Tsp TvBr_~6Wd`mH BAQ1Bf)+WcUP/Jʋ]&ݕUln0C 6peeѠ=}(')I2yJu\r윉TYitMɕoH]Rm]OLR*6R@ +3 f]t"|rq(uN9 IDATd1Be͎gH sHLLͽZK]Yi>Y̨=cY(nnҲ6peRѰꓦH)RLVD)FI.3 ڼ<Ρz'%?wxArUiZ=ytZNkYQTB &peFRrꓨec]dS7\BT(,ڲr*-Zy~)T}P~f֠=<҃|W]BFy)Fl • J .xꭢ$3)?g"BWQ^ԧ2,;eL_B_4T}M~F| |{ۊ)\pPʟ@%AaX( UҬg rwIÇ:OR֠aղϤ 7nhX#R2@a)q ʨ8,ee\fɢ+o¥籜#咢L:{¿Uw#HqcC<%y( eɆ )\@Bdp}˾qn RaXʊ}ޥvZ=?w4.t-~WL/R?cEbg[F X#R2Pe˾U]>3Y t:dR1( \R[53Rjgw/>R[JWBQ( 6 `mHJ1j<j8=GN}M&7@JfJZTcO=t{->{kP}wijk}eC͐*"6p5-.?ӢV{0SVR8.°Ir{SyV?J4} ]{jt_HZ!¥33mo52̕T% RqkPDym:5W꣇:h[MB\ܽ/+_~'0H1ôLh͐e`HҙI[[J=^rJjrN]fR*6Z39dj߿tBIf*o|lmL!>+ *w ¥*F]Y7ɽ \M, S& Aq4P5AsW9ޥYvzrUO5{sK2 nz EXa!¥36 ߑgWj򢯐z,`صS跪k*V}_=->|rjxxͶQ\ײPasK")\&+"D>{6)ͻR:Q!"tɭrS.E]0k ouܶjC[[Ox~5JacCcO?~KWQ[*C$IٕVj9!%RY+ﮑe?yC<|sxӪ?T77OWi[emUnoak@ ,KmoUũ@J&y yue,@H̥VRu?ޟGGg:SR{t$6ǧޫ}OPL]g@ n0(5VYFm̔VLn`YRRf&wumB0GoO-csRNUGѩ4CCŭMVp2j{kCe|ص/Us+KT?c]M[] 5H.UYDmm52|2Ez{)+3ZYzG-oAǕR}{h3FRiP4*PqL X?RTeYhg{CEQH2y_!U޿P[;w1:(ZlձVUKWݕ$ 课gpz98T:G$UT)\Pٷݳ>DJ9~sl^L SyK`R 9 ,&?~C<FC7OTHjS|9S)\,g~,˲;9TeUwWfw(&) "!AC/d7m l ,4I5լ!++t{{#"3+3"2{g/Z,#$3c>w?ݿO0;ϻ̰65Y%wb ֿLx)v.Mi2%/g7b0^h'"""""""""".HkUQ߲c震8:v<Ӯ.3zz=e3#=|ƒq<"Tg-|/ڮeł8 DDDDDDDDDDd(׻,0}۽eT7-yMZBqCOh6S{v|70:6( JFDDDDDDDDDD֎)ymFÊoԗ7L FJyU4-)%QS׾)?sP79/~̡y>g{x\fsh-`EA8WI&"""""""""".Hk))s~獾BM~b}n}.?7亾pl{|DL.4hbQ""""""""""Hko}yw|˴˙ܴxZRuie$9J4SNO9?[MC3{ǴgXM{TXQDDDDDDDDDD֓\^Ѱje8"';?w}>{t3 [ޫ0{#|Σ}UnV"""""""""""kL6{loiڴ긷sf0Z9\˾|Vƙ~L}O>1{G_2IOxb)YO 䵨-6̊ryqmArre s'aR8?S98dޏ`3ԏtϠmϞݣzQ %7 6#v6+\8,5m^{B]-y5Csp ǿOxBstBͺy>SȺ( ܽֈb~żQ[zwr`Xw38=?ew? RS94o=?C*឴yDDDDDDDDDDd-)q.ۛcb*'زSxo3aKx` >dd|2Awl9u7 VD""""""""""VHɍ{{*&ăLg Ƅt'wR[ض.8Plmt6-nVV R""""""""""fHɍ{{h[tL 6>rYշsWIgUHL0 &.iԵsw@Jn\YaE{nN#gtƇ= ӫy'gd)C4١@n9esojm Y;A@npX֛ +R_lix13.gg8LUt3bYRlaEѵ0l~cyQ@""""""""""vHɍeQYT#>i$"*[՗^_﹯"kAouOrorw;Mےަł@JDDDDDDDDDD֐Zɍ+ec4$MfH#6|1 +sU&WHk=@͔[[{(o[l7 ƃ,KHVX跪wanU"#_͎oZwwWO]ԲM T%9%H:- ]_ӐfR%""""""""""yR %7jg{{o)3-%CXQEYUycxX?~jkopuQ}ułӿa6#4jQ>TDnm tj#?z/|U$T%nt휾B*LxAQ{{l~߼!Θ'GxX7\2'4'}sY7d5@Jn&wo0V)ޅ@ftÏɣ͏r8(^Nnr_d//sf ?&wRn5*Hn03G_T;;L/8ʁ4\IDDDDDDDDDD֎)1om]"RKv'spt/b#qXGe)yWM,aWl8N}18(w74~oź֝r~K)Y+r]f3VIȚ )1s{'9!t[O8<S,Цtv =_( " U4iOx-GO-yM!9qTQB- """""""""">J'x: iZ'ZF]Hs)އ[}+sз9bgK1 S>Y# lqwgB'3c>y|pBtA9Bv:=s< o3iqx@^<^s"ς DDDDDDDDDDd(W{)3ìtƃOP!efCbU+EC5 |] A%""""""""""kE\[QDnm9 -̌6%I)]i1 TŅ<92SdzdO1;$pU7BX uD}-EDDDDDDDDDdovw6pPST)O.?CK(ƃe&wU;pzpgیg'8(2,'9!66Rrm[ܾCY}dt:e䣏sQޏBʪx6 zrsݿ}o5u ݉-BU`E=KhD DDDDDDDDDDd(kE骔׻w?Қf`E$b>sfĝ v~ᕪ̬k`b }Ҁbkέ""""""""""")Mw6.p dο^v}QEF韢'jk| +#fBY4 q{wHQ %׶&)U.yL_9 l.9C~-m|+Mzz*"Gn> 2 ]@Jmo R>+c!Sq/j`EAJ,`#m~;l}I1fX»VIVFQ_}g:yw?f; DDDDDDDDDDd-)kM6F>230?{W[ԻȊH-6}d e,CJșaK4k.}2>3 IDATp' J[2)w?94غI~mm.Y; ̌ݝM7ǔe oB0RNw?dz6zaP@j%wh7f=?Mv~ e]tTVF1m,u3kg@0c0[\""""""""""H7M0nn1$eF놏Y͕ 1 "bE+QrrwwK^Ļ;<'Tf$w2G=3cK*;y^f}f V|b{KKDDDDDDDDDD֒)2 ƭMFÊM >yxtv}2vCfL]O`wG NG0sG/]xN(#7v N,H`ʁ?%o%""""""""""kK\Y [{[TU ̌3']BjN(#<Hyݐs8υO}WA9cIXtW!T{]2Ndz Q~>C6Mx%""""""""""kK\}[;TUI' FʙiH]Bj5C*RֽN'鄰S`S_gޞ2XYvwy&hxδsړYܯϽǜ6uG WUU9e̺L39~ ` UMOY<|B{|z0Bv}`[c16(pwҬ9L3 m,Y[ Ê1EqeߢINfNf,骆Mօ7yѓ+h!a0\E%fF{29fMW [Z9 >ZKDDDDDDDDDD֖)چ ƈѰ"H!GSzQ]>|˾ k2ǏX_m)c&nX ޹ϾCugfR0{!+tSK}xH{x`"""""""""""+ʂ  b0&9R`tS;3'O@,Q$7-هOhOX< ^k8d]CwhO,>"JJDDDDDDDDDD֔)(-gHfd6g2}YHfXqnTWE״ǧǤB0,qs@3 :xp1i`JV7,:sf(FSўλ^P?>9<@JaQx3sR$򼁜ytMK(7Ƅ"7X0 x~>'G&}r%fF=.3[,ׯ2¨8,pȀEKxx§̐j'O87[{PU"Rl 03) L>`j5"9:={fcwo3f +h@UAL;I ZfLuYF>>9)Y?j' pjW8xM%""""""""""kGRr ]:4iw%CUPl(6Kx?C*m纡98yvⓇow_ r{kakLiɋO,*w/*pnU@KDDDDDDDDDD֎*J .\Ù暁8(Iަ.iY| yOx/~}F|{?% UqkaXM`_FGͯ٦ɔ!3P %Wc |Y-g1&D[Eަ.Jy5)0{f?_gwx UI=&1(6MnTJ ,F7$M&ԏ@Π@JDDDDDDDDDDֈ),* h`4麕CZ&#ʹE7djylx/Gxq}PTw)ۄJaP1xM@{:yoZWSDDDDDDDDDDև[d<9aR9& d.;|˖}yu4iG?3l};=%T|Kn]oSW!k3C{ L 1gG')h&""""""""""kC}ʲ`{khнdt )sjb{ܵ*MreX淿+/ BQRmQnt/ o2f/670zf]?R)ӞLhO^|(KՠC&tXF"5m"MgT/S޽Ko]rrs@ܨܴ亅>x)3zޤ)^oLOiՆ@J.}Ux_!eE"3`ŀ*rӒuw.G7`qcr a L;ouϐzl; Id9unA;<>[R"""""""""">Hɥos{BeS mVAS0XNx\y)1y,:1vqw)iVoZN'Zw[ n"nnz߭)w03BHQ %V@QĮeݹ0&{9C YMEb@'O4ofYFu! q<)fyCywe?0Yy0mwnSBUV}զ}S kCUHZQ %v:1̞y=̼nHUİw,ԢZ*2DZ0^yY MhyV76f pgm= )Y/ Ҧlѵe>t}XDB gu-0?+r݈x@XtM>9b~k>+Uƈrom; Uq31I)XlnQI( 3%ϛFe yi XʂPXxqϾ.t3BQR9pqKf5))Y eT^ΐ^O)3׫RW߅FVXVnI{:g }ԅoI\R7[]xRy@JDDDDDDDDDDփ)2M𼌇E_'1ʂ8 Y 'k YCB6AO˙lN{:yi@foj+݇טRͭB-DDDDDDDDDDdmzre}l^s|2%_B*F!eF*/_hwsy6=y* N})Pcae*R)u^GTZwny x"""""""""" )f H)3/8:zT,#Í!<eSZ=!/jtx:{Os])Uv+ EIve h[ѶײI)椩)1{;[ ٬|̀* Ay=yvH=fxېSɴRriрhVx~NAU2V}sog/G@OV}4{#VF ִ@ҫOc͐ʋ4N\A6 q`vþ_0U %""""""""""kA\h4`48ǰW( *Ȱ*)h e`ś9j c8*XDtR#/y] ]{ .\X0՗aefWnlշʼiHә6|)K@W.]?T%aU~~#uM|~ c}U].*rhFIY7өn.޽{~ʫLʋ%G=h#<{t4g\0°Sx_ε y6s/4RRfh0,K,U,[ڧep b_i*(]{`e׺nPD̼[Ψ=98ʹ"q83BY ?S5ZWԶ Ϫ/6RRf0Te삟]Wqt}!1gg9C=W.qP0 n0*>xqk 8?b}Η<VUXU5[ ;}fWnۗvT!%""""""""""_p cPEPFR!Xp=+ݹYw~B8(mtU[9E,Ϯc IDAT r3c;'ꇏ;i+ ͟9}WH)y)3t f.:UIyJz -/RrfTUqHYv'"P1AJxJݵX ( + ,tq+s.Ŭ w/;t]W%sSDDDDDDDDDDgN,ɲν22+G@$D3ViAҴߠLh\ 0 A@3BY9{_ ӋѨ,"]vc?;"¥LRSRR"ef`ZD,'R!UGU".R5*ySw8CBUbuV>_v+!p~o(~+ӱvKHU҅~MUQ'_]iG#’JH|Z--L?*YwWJM?JrrB p{Ha)f?[t>ށfł_MJoG9Dj*L2dnzsĨ0hnf"ϕg3y:]%9wz>HW)E@ -mV wru0`گg'].Nd1^(IdMU~lRJpPz^RLu.[Ii?3}ON3_RYHn7),=O !(ՏQ0Svj{r>}:2Хh66\~g,F̀=Vuw>r'1/~O uӉ%7]ahjmU[YRz3ygB S5[LʬߓI@&)Q.ԦW iY6ƃ5zʪFC o+ԱTmVwJ?9BJ?}ԵevDL~vjuT*uWB@ rmK'^f4 46rgQPG:KUk;o*nmyV`2Cs~Tv),Ww}&3k 4(R!uTBrZәIPQ}(KThj)ܕ__R)7+_7RV?Ccp)4wJ]d2+_)gC1j8l4hs?JJR5~KK%mҬU7W:Zz/K!Dw6_$ј zRk2kv}URuRV%RcPTO[dU䳉$Ii22Ɔ00#bR`ټU.uImەPW=xTHYvRdhC5]>NK`4딺Nt4J9k?5#UꍑB3NxXd`2Sv`yi6oWZ/S]Erܥ`uOqP)M[]VEu&}ǿ]M>|"Ai2riw/~"3WQa8յ`;2yi=THn/),%笽3mldfjv@$+TUEau3,ig4,u{D~_~g{R&4#n2)9ld8[@ K{{7i )+R !,W/Qw4~6Pqc3[ygH[Ir+m (jWemn 559$}{zὕٕKzfP*aRqIn&a1t [@ K Rʺo[쬼aȯ0˥%RWG YU]G IV]WH; sKL)3K!Y9[@ K13UrZPZIRrԮdu- n/KK)+Lm4W!UŨw>Q&Ub2?*FIT$bT0C pHai)>|2fVY[`{{CKK)Rdro}l:|3)X*rV.4LWp 7wemnԶi&+ݱ3 MjRX+{!4u0^iѯg׶rm'} Z}UFV>F B:΂i2k`v5/ԥ,[=Rr]K uz>?7߸]Tv&)LR5 )\jQ!(IrZ"7HnaэT3+:y~Dڼo)4 ѐR: %&5u.m+N_rO[y}W<Z ¥LR]E*dR:*\HUvtΖoޢ*[$"#[.MM.gT(ϸ\wǺѨQ7;ݕ睼˒L~%M}nI՝m*kRIB)pn ,;+ƨyܕ;ڇ뺵Rfv"z}l3wjLΖ )zB 3SUW !rI1s[`zpGr4E f%ٹWWzR}Gx)\j1CQL_X0ݻPL~->xrҴ+}j{BPug0l PLʂ -ѹ$SH XR@*PM!-Llj4OdP~wqwS9\q]U_  ռYE`upIf.×(QLLևRy[]  )\d}73̂lo+|smNC<me^P_{]ͽrk+ӢoYU߹#p敒Kujx)\Τ`:j4gV 9VUEo|/](w)U[#U[#ŦM t?赿ߨڹsh]U=Z ¥3Bb!r+mmn0*Mo]{M&R],Ku1^h*~KwT86&4wviXRY߲o1HRιU:C]EmbnS]r*R7*,@y*O%2v|3\Q)I-U[[<ڨxXF]H$wR1FF1sYɢP)%K}u) Fg{eŏݮt;S)=z?3dzvXU>xMq( ¥Ji7>JbPS7 !(hT))]/ǕWPG&j3Yu4'f'¨kJ( < Lu]B諒\9BjՉSױXb1sY쨊+,.}q|Y]QVdWE35SG|hRZlZJݻŋzRLuSKdR3RJ9U&}˾\eUPK|T3(n5s[TQ8tB ɢB/!նcnQ]KRx52Mm+I&>VAWkP?[|^p) eT y._!]Yrtjِ3:wcyyg,]R@ 23Uu8CJgHu]dgnoC̔TB~@ IDATnfRhws?#IjPbW%Z :~:LJCX+RXP]RMm)|miw@]~R7bv5]1G5IRU>uҮR!ٹA.cPAf++yּ NڶӋjN1Y9&]+9:nYλ$yVtgoݕ&Jٹz)[ZN+e**d'mR:B*嬧4ks7jɬOn0KuTZuђh\3~O[LZ3e%z$:`HR@D}g7]Od2׍ֳZMk.+:.kާbV6_eMTLRYAtx+y<RC `xbTYm۞;C*G=]~33I1l˾`.)]wk\pK5[?:~ay'd:#:\'K))<Z!…LU !<ӹR)>^Wή`|:lHB2<%Yve7Po~] ^*4|:TQYXRP0Sy6ur?BϞӗAMX.,5:wIbbVRjCmU@q4T ;2]y!%*$ewN)OѧOŞ*fY0)]{>"S07nhg\y8ko+r8d<p .- Wή->>왪uz]hzRʭ-{hW40d꫽Ke`&)\|@T(3+s\նr~G'Ou2R/QVEygA7yN~K.j665xuYS쒠R)ѲVp! A (T9mK+>豺Zם%咬/dk-w8(/W&ɪxw[qstL~f u4 %Ӳ~p1SRf̐~qg_˽|g *H\ KG `ɵpX¨:e.ȹh3)K")\ȂfHy{ y郏KbX*}&YeⰖ OJ&)Եh(IVTI]s;Z.> fbP0;pvϐ'O_?@)gxSJ rɽ֒VzYUe. :`HBև,!1K.g/OټT6-H]dU(MTH+a]IɕtfHfQ.S!X+Rΐ*3])%)-ݽӗJ)["1BeuèQhJ" *r}Rޝ~7VRrWqɓs&)\|@RfV8eWvJ)/K'zGLf_";8:QlsL)k ]LrVO>{~jU { T*Z|HBf@ʤ]6-ծoa`?_}u%eHL*ȻtTtƺϞhK1\dz%KJ:ʳ+wiwe&s7j?VQm7HRB ȱ}t)jA˗>|)2.ioC|f Ur.Rђp/b<&| R &`}޸+L%J)W i6kWUdӠVj*:JɕWHLx;wN0FɬoXްUBȌ_Moq AUegܳ.W,MNg:̔HQ!\]0e_ıxe㑶hx=0سWVp+euPhZ .> fHI.^E4 =K}}ߊ%0h̐RI<# eU cP4u)\|@BPrW^U=}y)UM6^*J0*+.]uvv4| YSe;sEAT*٠a`޸P4S<̐ƚUQ!-Zyձ` u%)S>qQ{dgK.e?6C:f4 ٟ"…,R圵j"UUQww6;4 V}tP**$Og&5[[j0޵TjZuT<.> !񨧜r^(W7҃)}{Y$Y A%,o<FXkf윖}`PE`HB1WkAM]ꃟjɢ) R5JJTs?M{&X@,HK+EBxuԢBjM]GMrg/sdWL'B) A]Vw& vnuS_XΎD X3THB3:):BJfVR_tU'?c̐mRw)\~Uۗ{D~\rOy2IxzVN"LU<~LvIrϒ]g ky)[yWZ)uz{ǟ[GOKw֮憚w9tC T(s+!VRʚNgJy1j\]RYͮPd&<)SYR;뫝̤GJ'.~^)$W 5B HF2BXش]D]J+swyW3[?IԩKI8yWg˯jqz\g'~f>]P)4`HBfV)[+bw_][V'g5ٱ}H^ƚJqcP;$-$3el?c=?IRHOK V23Tv*^.BPB_QGGԥ6y+f[>ORO;WKVE՛U[CM<5"UGW7}L%/Sҫۯ$]>ytP.pLUGqB\}TήټtB\KRe_%YqԨ)uҼ;R/fRh[=WP 4~GjvoO>.BP%/-BkUu]d2W:Ҭw ]qP+u L&/u_2uϞ}$3Y?$4DJIfHB1SN.U ]b^|֝Ya uT:(ԵŻq)+^ Q}u>~ܶ<Z!…b<#5vII^|QRiǍ́r}UnuYJ~y KJ/<Z!¹b1}Rs?>=K>rv'y+%Z'Q͡Py:W򜯟T@\G_gVF=!OXR8pDSVb ߲/SUH *A|Ty*īa+Tm >J7[!epw'RVOSϞ_!_`R8p)X!UҳﺁTQAvv|`~LO4rd1hZʟq{!')B(_fEfrjZaZqͦtΦt\zgC ʇ\e7e0Zt0{>ӷ%+Te`}P!GҞX>cVيRM]Ν MdMz{$cU T Ǧ#B8޲ef 1H jݽC$]-T*TXiϽ1Qr= >oYy_6p.H-rr`b Zgx4X2)ˮL:J az.duϡʳN/D"D@ FpX˾,(lٔN[*, \~ (3)4BRvSIs}.)gW7e`0C ~T0-B3V-xcMJr%R/7?BSbgWEYv*pX3mNHuP#I}5Ux_UWU*KXŔK%ԪLJYrزώQ))TH?!(X_d 1݌GCcɈVdQ3bL}K9/ٟ>s=Վۊ@ cRK R[Cmojo0Û8-m~ {k*JfUo!r-2n9)8RO!ugscͱ,r@k- #o!u ] 6b7dZxb4*T&l/l/6c;P*D>q L!nOMg;kCjnkfPe{ sxQ+[J[&B\*DjB$UnpHRؕ)ضyOm˾BTՠ=Ĵ&kO2o] ^8誸w?UhMŭmΑ(5.*B؄Soٚ?eMجT:5+ɓS!83&Y!efm˽Rz-[Q&?/ VHŽy:fid!H1(re})TmЫZ A ێpvq.=I@ p60C obj);D tr%wfɚLs^Q%Ooɫ2lkKByY)ɂ)v {=tԴ+P 3@ j&%MuHgGjfDu.̫k=UEb/'м>ru.+dQ^ yWᆭ祪nOLE>ʬeNL 3LRӉ휦ìhpOR굉qPFf& \K)If uT4T`Mꨩ2l>2/Ev5 f~Ӷ7Z,:tRYJUܶ=MOk A77BZ ^܄Pmo'~& R}sS _ef!eRb|PXW6BHI͌*տ~Q_}AK8$oMd! YE 5͎(YB?z$OTJu}OC`d14R4%KC)&:[B pVHaWL$g 2I1h3+NnCϳRV!RM՗KuRd/̩syQC4ffU 87vR'@ք[fHB Myt0aAM=qRۂbŶe_]+MB#QfR'#)R WD=n\Ͽv A&X:3I!Bl*RR*6j?!%oZS*NgB"M_fD=8vRpo.V9`򲒻۳ڪ%?.N@}sS6s23Y M VdTUR|=ɓ7]OX:gc0+[uӱ YvZe_TaK7_IJ)9R3z㙲dyTȣYSem>]uѶμJM5YSJ5uiZ pFWoQ&:+4Sud!Rxlϛ,v$R8fL^i{ՆNvU+JBJT*BKGpvWo<[\ӎ}ЍM>{YfMIJI)ml3s M`U>P>gjMgHR@ rm+e4i+Uu eQ*R R*Jo/(̙zd.3gJ-nB;gmq.N{fJ{L!,HJU-6yk]n'W:ƇwTL6M鎹$)B )B ]R>ksB)vk1O) Yi>m׷]!щӛΐ"f< LKd؛e_ ש}n}.ꦥ_~$Ch8C7QЉݼi7-^wǛB'SȚ@Z^־Pζ *\R2IY|+A gKB7Wd#i+_bmUDN!eAMU !3g%YB);MKfjMAWaifF9'$)؎NMJuKْq l$ɲ&hROO3*TSeq_/Iܷ^IXuWeӶ}TF)2Wtwn*_IRM`JEE _sR4)LYR'm hɥ38 hه5,/ zBI6[y]+{~Uu/˲_-Y M ?3)H/i]ɛ@dR!\˚}!RhRh4.f7jB'ShE^C_8lT޺f5|jʨiYdoU )B>e}~&e[K6#M\M`gL%)_sq^a7;t;75x޺4ͤ6[ܵXRUҲpHaW5x\%%f<:M %o\R6Sgi( &MdMc4]^z+u)m]59pbǝUsWmgv>G\Rie_Ts)v%AOqɥm- Թ4/S`+)FT44.vTsc1k2*Jm6[Y[YLߑz4RZHTV*m- ΐ:KwI )B ='VGqM3/KfL΅ _βR=*YPM\\Ε&dZ*N?&'_DR}SQTZMڹJ3V!%)dYur]+ ht,|QRwTJ?oz )F%z2B pP!=UV ̈́Fʦ KR)wuIݫKǥŁ^%Y :2)B :v^'իJR3RSQVZYې{,QV|Os^+ʗ{Zx+SS5uY;Cꔮ'ժV3_#žʺt,MJM4qY/{yA։ZueÞϟoZyu*@.N7J)A =)iRr\L׮ɂɂZ|E)Y|3)ZG-pIN*T'l>A 7Hi8)7vԴ3u$O.Kum>3L|cS yJmu6)unq<: ̀HSc~y@mlZTJj2\`C3NOJ+Jb&<(L HG>fEf= d\χ_ls ᱐ .9v*'VWh8#Ӵ3I9FT'׃ۏO?T=x)YG 4&c6 L žyAg:ƪ6R~onKe-ˢm__QhY{8?ƃ?mW^]S=g3{wcЃ5~_}^Ȳ8cwimg?@{L##´]1˳LO4B i@_YG{Q RyklH3@ 2cZrw,_LFܗJ ~JQv*7]2۬}tKտ?3M2S l"®]X˕|˴1?ǟU&SqoUFф?3sk6ٶD$+gq3%w)iֿ??ZCգܝ xfd]J~6Fcݹ &Z)ٹO9Mwgwn};? o&<®q~@m յVF*T+TiRmv.?}+Pו4t? !RSJjw )LGO̧\PQHi"S2 N7# T'uC`sRSJXgjBx z}zcTU"a2 2o{5Vr Aߓet<;NJ:EJR]&p1IڤDj>d._:%u!rͶBTI AA^U6Jr)k?%3$E>gƞRTUӶ}Ǔʄ La8usyY'$ R޶̳v Rf&&s6'A =*J1ބ(mSY*Z/.¹yuLk*q럪mf׵|p2nRյʪj~8BFdf`zWnG/bOa=ׅzbdzzkwjo*g 73RPe*:}W/nWuofk!žVQT:1eYhRO?]Z%|'ig&}sZryU>ZL:W/+lVbTU&epd5uܢG=BT+ʯ=R.ru??R&BP+ _)Ȗ@ {;)L >PjmMܜԄ/>m\O/l{튪NGef!{8y.WE ]hOBW?]s5u^ZP>h mZ}SLrNujeE}ruM05F"G.u;{Ewn\。KJm߃#L1hpEYi'?/~Zs"RD>쩪kmL&^!%I!,StleM6j^OGJz-$gBwi|7lXL"žx\1$RMYBʺ*3MZUUDfdmNTvxjI/tW|>:i4(I&V^tBKJuשi;g6˓?lw,-*p^WtUU>|;t /GTU6FUUf2m1[m\>{4zz'`|iQ/sN&]s3@ {ZeyK&%˔R|3/\KJI@Þm_9).ku-2.0s1VY'VdW o,)l/5յ<%=vx&)/SvnQԿjI? ,)쩩,@6״_6 eL!3Ź9u^Q$Iw4)3> 0i UUu1WH5Q&4ͦ*uZU䵫RJ2vUzRҢ_k2I_3 IRSUZ](eqv|);N)+%ˤRm|pG{+Je% &UI-;eMK-s;^}.X٠jy IRh4h\UYT(RM˾~/P]^Ro+d6wPSLqؓeӣreM )RؗBjRG!RRA CE {JVkoB#d14IS4PS!ev7e2Y׮|eⷿr<_iW+M 6.`fHa_]+ {̘5EdjB94z}LiqoWլ+&w ǤTO׿7 ~O:7_Koko\^afʺGcu0Q AeY;niee]+XУ?3e!H1juTP]_zc8*ҤUF|4s]U埼w~*) ¾61(ljYh>XrթWDY7S/ %GwǪ&ܸdYPTjsKG{v4ͷ7Zl^L “m#v f*J5 wKɓu#ˣ,գBhkiQ,'Ɵ|YML+cgl\L ¾b0]Ņ<ȏ0)yRU;2:\nW!R#`2LGYQ6VȢVzK@U*+`fa\ɧܧt]1hw4蓧2 & AW.-iiq,tH,6r;KtjHKzϟS~aNTl(U IDATQӥT7Tܹjeuw^w7 Q{f:)IYSq.;`CPю'3) 0O7{eI݋Թ޵s)Tkh;#e!w-o+ 5z#= 8iRؗianN(]1F Md1([y{NL&]ŽqEIR::ٶ KR;*>}UZٻRYO $47lwXRE_~` yp DJɓh'& DXvO'IŽH^WW_juS觪V@ Ovb(TREέj}zT3NLJj4LiR\^y7@'x{mͿc+lcSC 7:\!3]ʲa_@\\X[mGY1Rh]uyU+_ʲzT\)UIP}U./+M'zoSb\jU޽F<5RS'ܧ#2}B*kg55 FV[탔NSRQ:)t2熊s=yT3xX`s4.T=ZVDo{o}Mi8Tɫ x*/ Mh5c6}9Ii\* )y[t≔qK׵w-JMnQf<R85M^AՃ?= )HTAEQUuq|I yɥ,B+3$wRYef2#:Қ/RU7^W/kdf֧N[aN S(+=|pǭ ,bE5T_SqMl*Btkf[ Xں|{z_7ޔYҤ?V􎪵u6;DHa_R\nAǃԣu& &:MΫ~ɝeգ Ln$ASn哱WHIRE-p(%Ւ҃=?O~f)Ϥ k*m-4Z)mLR0Y)d٩̎rIvVUr'߃KP!O|I+e&=V=)cG }I1nk_wc<%EY9宐E)4s< WI{'cmen3L RԽtA xSqny+jwUh흟kotfe4)cSt]J=4,(MJUk#'jOo[iL'[u$)\[;rŨދϫu ݛ1ijocA =I~Wyh%yj9eYsCY S'>]^'m"6ͦ}\Xi<9򱺗/iJv\m4[XHaOyi~N'thNiqa<Ϧ6/ 97' X4ζJ.t.ܫcvwMn7)̑t2زϓb vǚNyeN5)S SzRZ[;rT67_LmT$MT>|t93-tdAG $`v2 汔$Is~NBmw .f\.)wEj}KUU]Qvf޶JtWm?\jGZ\6R6d4Y)3 RC*:ȩDB&N(o[i m^[?vz% ^mf.)zPoQ!82)ɴ0<ƶ:W0${qA@!mcN6rBd!hzkR^=z>ITHIJ+}GC =u;2ّoӬN'poZ:sρ@  *mn ԎZN(hmW UneE\oURWrdEƧ_SN{/Tu#/yT7)=a%5l.xZR8L~OUUE3hcڙEBյ-~-V ʟ'k^WN[ t(sWc_Sqew-d*N xvR8SWi8詈q^JUWd5DRRwOW&R-qwXxC׮.;<6 )!™ʲP+-=e] wi,ܽ74,FHYQ(*}Fχ@ )KnzJˊ+eeѽvq%gyziǍþB' A]$yB se ޼y\V^Pƣ}z)+kY-˩b^OqЗ(O9\p.wWjR7C%#**Y^pNyvy-%_bCY*n"*׍x4--`"¹rjRR2QRv!uUHtis(T\ڑ #G\hxvR8i2fm1Kw2*KYѶ ~&3xiŠeY\] l3#¹r^R ^}mzBU.lԉ}Ti<5C*]&zr5Ӊ|:eH\ %,Ykn02*?+fJVHUWz}eI9Ӳ\p ):Dd-AqГEvE3&>8T܋XvUNW gF se]咽.3)AqXITE\\%WsoW,+ ^VuyGѤxf9U!Zܽ $I.Q_.h˾E݃ȩ]%FWUrM*RR} )B rw&=\DJLAW3.iZ;wfV /ɚ/&)+gZe-˂ɪض] f'{֛rC^7m )s ¹ꔔ_V};,D8ݚuq&v[^UsO g )s۲/笗3:$RQk lΐ5{Oy6S5yxm^|M~KLޞ!̨¹rj 쥾^ PF. 5KP;w&SI[3zCyGW_Q{fo_y)!¹-\HIb pN[!%M4OwǓg:`zwWy6cC ]>Q::\nû+S䩑LTt8Rg )+-BTZ^ f87KʓfJIՕ ~KV=6^>r{[gGj"KG.. p][,ߑjU.eIwΏ,h$)zS[?ugZ{u_}So5{ &ÑC6H])61{.5yԌgRv x'BYҵz?ؤ)TdRՌJ򜟩 rRΒ̔t03Y0\7(I >)XWfJ#ջX*^H9mT"m:Rj?߇{U zCHޞtz'D ZR%[ IDAT,:bIX]>Y/Tu㚊-ϼVf4bC+goӛŠf4ξÉ. 8qۚwkMP: Ñd @ H2ݑWs8J.vKJUjz6,Z( YQtUb&3)ǚ߹VXRv 5wQ^IrL6kT߻p<̔'w<5)R.zVH/i4RNegs5B 2Bm"M:H](ܔFݕ5Ii>W4)O@ e&`N䲲P藲x_Kh4/x>+Mgy>WwL xJRx2r7swYz,F ҪФP:a&2+^QhVǥ(M&&1O@ UbU$R)W&?뮔rN]H&8=3{׮Q m<3H\f^U(Ġ1<`MHfBfb<I QVo J7S<1)+ƠcQYF(2 Rvջ#4h_2u_У-`^f.+ YUɪr)I y[]vnO@ @BPU*br4.)TbïRs8^̇R+Ul m ՝țF{xbR8WA^MYVD[}]uKuKVď%8FW-熚ʭ%ҴCO<_ }[4IE s1߯TQ2[6nTT^佻:+gݶ4̤T]R;[k'f\7[+_74w9Q"¹5TQ%DP,Ի`o=]4AThzڵum}Un ۢ53e{}k? p.)(ʲbRyiCSnHe,B mDڳE7~U]rqqlwOW9p.) z*pTDLm+bs8Tu7M*7^YI>x2~K_zA_OkG>/JE\YR7{lpB芆\f|hR&)jYlϻxLY)W[5u.zu]m~3Xm A7_OzR՚ݼ36 LR8WUdI\\^){|5)YۮoHM񠫋OL Wh~Bsijc6 LR8WU!Ċ$+B mU4m{mlț<)Z$m~~g%Q'm~S(^Q4SG Mwt8bD s{77$@)FYݏ4uWi:SA&pLIJZy.i,Yj۪Q{;$Y5df@ +moeʪYEL,irPj~Pa I)+׍rʒ{kZd^<絜um~XF>Rsxf@ {ZD][>Z{޼%V] R0YGZl:̮u/^_k5V&[ yGU: @ 1wfH22oÝͻrӴo\aeebWw.o_/~O+a8$U9)Ć<49PYD*\f. R}{ooD˨8ɪg^|W^p v[9eY_ebkSq2yJR+e6 nβV_eeI(б`P(MkMojr 2WzdW aO*g~Q[0O4uxk|>z}P_I1H,q2{6R8ư2JZm&Tjv58YE U)ނ e+?y]i2}s$mHŠɊ^7-Ju\L>HLþv67TrVH&sLoV:HVO{[B|tdsVueSJ\HTN~.96ԊBV,'5^,R8@}4e(v˲hmsPӛw3Y\GVBf;?vfRh~@t-)oLhѭVR8PW,BOǭ\j,Wך=P%[G2~pqًU])j3H&yv8G*S!ZJ kٴZδ5氯WHY;iSCXf]ؓf}',kR,gf4҆.gTf}JZ[yJR[[bHR8@0BJOm *63j>3ZP7b-]~vp 9I9=m@I, J++ϛFV}bTdeB(עȺozz8P 83H!f́zU)֓DK'ZdA_*JY :++]VBJRcy}H *v7gc B[!UQ~"YUbgB4wRwK-;bPde< ˳dePkۊXroק͹z`\J$CPqiGVUlCkW(ϫ}sWS=h+t" r7]a*#bX)٥a&ydԻb' vԂpwJ#YW%y4W.)g#`(b7?jż%aOQv<%yMj#$c7**GS:ٟʪbTZp.CTuRxHQ.Z9MA*zEDk+JK]r,(zmQXۻ U7vTl9R,kl7W3h2u~8PAf&_-ȊB~NSnU,T @Rޡc ^@jeBY\i4>Ւ0Tzׯ)l𐜳fZ9uߴL"ȊSP޶Sf2׶[`.\.ogXSV?=UwԻյvԊo +ײ/kX~9mvֺ@ iRhI ZS"咙ɂb8ݚϥg2ST dn:Y"#;(j+vI!8C*k鴻E﫼zUqc(8.Ms5MZ!eRhUI튤ۯ_|X eɗO/7w˨ږ^IbUWu`@ qwMs@ }NsX|TsXIR!`ǚ}+5x0j}MnVn/Uy6[$Kqk[kaxq/xKu4I9H; ď-<ZĹBYTm~P-/[j+Nv3tIYo~[?һb1-TvTlS!x[iRZlIIN:'~ܵS^zoCPE^qJ*gwGmL九 kLE0RQ4ěZAV ʝmW/)ȨU7IMu(+(j)sZ:ږt*⦜}7ICYP&Ql> jWˢJ&W%x,)otg>ke!S>5sjʒj_n/jѝ埯(de!3Se6 Ha E˾u5d`Dؕ$w΍6HEe+YIwK/Ky6[yW5C5U\@ 0Q hu^Qq/+e7fP߲s4OϿrk(%Zn_I:ӿz9_*kWT]aruRkT[IdeTٗp$eX0)?2^uUJVqMnSVkr:JjW:j!xfn9?cq?uMoRIY*w7,'B T7m k'w2*`$kٷ )I eTN 'IJ) ޼Ͽކk&Zn&_ ,ݥu[ӇR4wK3\*v <%5))IeW U7NA&?1C*HkBeERkNޛ`y]{cnhӯ9ȳ?0k3mt?ѭ?;OwF[h1[+l77z=6 H\uݨigE[O!Q˾KC}"*X;)g)e,+bTQ9=>M={c ޸k|ȪƧVtI{23YY[O~5|:UIv76x"RxT׍R . AF_M٭{,e_ײϻ ^!+T¢)C5cy*/ ߽fZ+&[;*Kfï-}Q||)'kT YlanRJr_&.3ST]TQmAI+l.+BUb5 4Ռg=TTl+*UBu_frmDj@ hه3sPAAPRfzD?f.9>?$*6Q']ʓ~PUx\noHi2Unrwp`6,fuewn&7;Ut4+F<-pnGy#d %3I=yG7,_ ~BVsޮ6T8HBuϺQ3p/,ߊKfJәt*յ#pBbc!2.S?y\x͑rڅ,(e_UTs>lvW.hyEJʣrJY>'iM/ܚW^kE[gҠ_K+HrIQReAenqhXv5h]KU׏:u?sL߻4u/5xz^R֚ܺe&4xM ?iBKSx_*}[g/5Ͻ^ͷz?X2Q/(zϥIENDB`PK HAjGGOEBPS/imagesdb/docbook.css.needsjavascript { display: none; } a:link { color: #3366FF; text-decoration: none; } a:visited { color: #3366FF; text-decoration: none; } a.dotted { color: #3366FF; text-decoration: none; border-bottom: 1px dotted #000; } a.currentlink { color: #5A7800; } a:hover.currentlink { color: #88B400; } div.toc a:visited { outline: none; } body, div, td, th, form { font-family: "Trebuchet MS", Arial, Verdana, Helvetica, sans-serif; font-size: 10pt; } p { font-family: "Trebuchet MS", Arial, Verdana, Helvetica, sans-serif; font-size: 10pt; clear: bottom; padding-top: 2px; } p.timestamp { font-size: 70%; text-align: right; } div.footnote p { font-size: 9pt; margin-top: -1ex; } hr.footnote { height: 0px; border: 0px; border-top: 1px solid #000066; margin: 0.5em 65% 0.5em 0; } code.sgmltag-attribute, code.sgmltag-genentity, code.sgmltag-element, code.sgml-emptytag, code.sgmltag-prefix, code.sgmltag-localname, code.sgmltag-namespace, code.function, code.type, code.exceptionname, em.parameter, code.varname, code.interfacename, code.oointerface, code.classname, code.ooclass, code.methodname, code.coexception, code.computeroutput, code.command, code.option, code.filename, code.literal, code.uri , code.envar, code.code, code.methodsynopsis, pre.classsynopsis, code.constant, span.type , span.markup, span.package, div.cmdsynopsis { background-color: transparent; color: #990033; font-family: "Lucida Console", "Courier New", Courier, monospace; font-size: 9pt; } code.sgmltag-attvalue, em.replaceable { background-color: transparent; color: #990033; font-family: "Lucida Console", "Courier New", Courier, monospace; font-size: 9pt; font-style: italic; } div.abstract { background-color: #FFFFFF; color: #000000; padding-left: 10pt; padding-right: 10pt; padding-bottom: 0; padding-top: 0; left: -2px; position: relative; top: -2px; } div.abstract p.title { margin-bottom: -2ex; } div.abstract p { font-style: italic; padding-bottom: 0; padding-top: 0; } div.fusenavheader { background-color: #be1e2d; border-bottom: 1px solid #393939; padding-bottom: 0.5ex; } div.navheader { background: be1e2d; border-bottom: 1px solid #393939; padding-bottom: 0.5ex; margin-top: 2px; } div.navfooter { background: none; border-top: 1px solid #393939; margin-top: 2ex; padding-top: 1ex; } div.caution, div.note, div.important, div.tip, div.warning { background-color: #EEEEEE; border: none; color: #000000; font-style: italic; margin-left: 10%; width: 80%; } img { border-width: 0px; padding: 0px; margin: 0px; } h1 { color: #636363; font-size: 150%; font-weight: normal; margin-top: 0; } /* h1.title applies to the book title on the cover page and part titles */ h1.title { background: none; border: none; color: #808080; font-variant: small-caps; font-size: 190%; font-weight: bold; } /* h2.title applies only to the book subtitle on the cover page */ h2.subtitle { font-weight:normal; font-size:140%; line-height:140%; color:#28458E; margin-bottom:0.5ex; } /* h2 applies to chapter headings only */ h2 { font-weight:normal; font-size:210%; line-height:130%; vertical-align:top; color:#808080; margin-top:1ex; margin-bottom:0.5ex; } div.titlepage span.productname { font-weight:normal; font-size:210%; vertical-align:top; color:#808080; } /* div.section h2 applies to first-level sections in a chapter */ div.section h2 { font-size:170%; vertical-align:top; color:#808080; margin-top:1ex; margin-bottom:0.5ex; font-weight:normal; } h3, div.section h3 { font-weight:normal; font-size:140%; vertical-align:top; color:#808080; margin-top:1ex; margin-bottom:0.5ex; } div.section h4 { font-weight:bold; font-size:120%; vertical-align:top; color:#808080; margin-top:1ex; margin-bottom:0.5ex; } div.section h5 { font-weight:bold; font-size:110%; vertical-align:top; color:#808080; margin-top:1ex; margin-bottom:0.5ex; } div.simplesect { margin-top: 1ex; } div.simplesect h2, div.simplesect h3, div.simplesect h4, div.simplesect h5, div.simplesect h6, div.simplesect h1 { float: left; clear: left; background-color: #CCCCCC; color: #000000; font-size: 100%; font-weight: bold; padding-bottom: 4px; padding-left: 10px; padding-top: 4px; padding-right: 10px; margin-top: 2px; margin-bottom: 3px; margin-right: 8px;} div.itemizedlist ul.li { list-style: square; } p.tablenote { background-color: #EEEEEE; border: thin solid #000000; color: #000000; margin-left: 2%; margin-right: 2%; width: 95%; } pre.programlisting, pre.screen { background-color: #F0F0F0; border-bottom: none; color: #990033; font-size: 9pt; padding-left: 10pt; padding-right: 10pt; } span.olinkdocname { font-style: italic; } strong.command, strong.userinput { background-color: transparent; color: #990033; font-family: "Lucida Console", "Courier New", Courier, monospace; font-size: 9pt; } div.section th, div.informaltable th, div.table-contents th { background-color: #EEEEEE; color: #003366; } th, div.note th, div.important th, div.tip th, div.warning th, div.caution th { background-color: transparent; color: #003366; } div.table p.title, div.example p.title, div.figure p.title { font-style: italic; font-size: 80%; } div.section table, div.informaltable table, div.table-contents table { border-collapse: collapse; border-top: 1pt solid; border-bottom: 1pt solid; border-left: 1pt solid; border-right: 1pt solid; } div.section th, div.section td, div.informaltable th, div.informaltable td { border-right: 1pt solid; border-bottom: 1pt solid; } div.calloutlist table, div.calloutlist th, div.calloutlist td { border: none; } div.note table, div.note th, div.note td, div.important table, div.important th, div.important td, div.tip table, div.tip th, div.tip td, div.warning table, div.warning th, div.warning td, div.caution table, div.caution th, div.caution td, div.figure table, div.figure th, div.figure td, div.figure-contents table, div.figure-contents th, div.figure-contents td, div.mediaobject table, div.mediaobject th, div.mediaobject td { border: none; } span.guibutton, span.guilabel, span.guimenu, span.guisubmenu, span.guimenuitem { color: #000033; font-weight: bold; } span.property { background-color: transparent; color: #990033; font-family: "Lucida Console", "Courier New", Courier, monospace; font-size: 9pt; } /* Styles for cover page items */ p.pubdate { font-size: x-small; font-weight: bold; } p.releaseinfo { font-size: 105%; margin-bottom: -0.50ex; } span.date { font-size: 105%; } /* For entries in the left-column TOC */ div.ListofTitles { font-size: 9pt; margin-top: 3px; } div.toc { font-size: 9pt; line-height: 10pt; } div.toc p { margin-bottom: 2ex; } div.toc dl { margin-top: 0px; font-size: 9pt; } div.toc dl dt { margin-top: 2px; } div.toc dl dd dl dt { margin-top: 0px; } div.ListofTitles a { padding-left: 0px; } div.toc dl dt span a { padding-left: 0px; } div.toc dl dd dl dt span a { margin-left: -2em; } div.toc dl dd dl dd dl dt span a { margin-left: -3em; } div.toc dl dt span code.sgml-element { font-size: 8pt; } div.toc dl dd dl dt span code.sgml-element { font-size: 8pt; } div.toc dl dd dl dd dl dt span code.sgml-element { font-size: 8pt; } @media print { div.navfooter, div.navheader, div.fusenavheader { display: none; } h1, h2 { border: none; } } dt { font-weight:normal; font-size:110%; vertical-align:top; color:#333333; margin-top:1ex; margin-bottom:0.5ex; } div.revhistory table { border-collapse:collapse; } div.revhistory th { background-color: #EEEEEE; color: #003366; padding: 10px; } div.revhistory td { padding: 10px; }PK HAUGeOEBPS/imagesdb/important.gifGIF89a #%3$~~'}}yyywwwttassnnmmmfffddCaa,^^\\S\\:\\"\\[['XXPP?NN*LLJJJGGGFF,FFAA999222 ! ,@2fΘ)DIRHq+p L1 e" /z"@3 )9,9. f9ag"Y:<s&H Q4/#vj D`Z3`$e)$ƆA[@92#twaV&R/&TgbΦ+6 sfgUkɀ $Ah?S!STD(PD;PK HAaCAa++OEBPS/imagesdb/note.gifGIF89a~~~}}}yyywwwtttsssnnnmmmfffdddaaa^^^\\\[[[XXXUUUQQQPPPNNNLLLJJJGGGFFFAAA999222 ! ,@+X`R=JCRxPa8Ch81T@&00X `ĠϘ0=<LLPp R<RbJ*pTCWG=hP0ҤO=;NxԻ X6XpB )48) H@A  p+ @AG-O9fϊ şX]YWv̞%1i&j8 @Ϟ7Nt!w9.Рp^#p`!À;PK HA5 OEBPS/imagesdb/warning.gifGIF89aJJJ!,@eP9c;@W`}e& v.,JOr+͈ OMQj "2]WL^qߗݖRu1_Oφq@sOabXA;PK HA$i&i&OEBPS/index.html Using the Web Services Bindings and TransportsPK HAդXXOEBPS/ix01.html Index

C

configuration
consumer endpoint (see jms:conduit)
HTTP consumer connection properties, The client element
HTTP consumer endpoint, Using Configuration
HTTP service provider connection properties, The server element
HTTP service provider endpoint, Using Configuration
HTTP thread pool, Configuring the thread pool
Jetty engine, The engine-factory element
Jetty instance, The engine element
JMS session pool (see jms:sessionPool)
jms:address (see jms:address)
provider endpoint (see jms:destination)
provider endpoint properties, Quality of service configuration
provider runtime, Runtime configuration
consumer runtime configuration, jms:clientConfig
request time to live, jms:clientConfig
response timeout, jms:clientConfig

E

endpoint address configuration (see jms:address)

H

HTTP
endpoint address, Adding a Basic HTTP Endpoint
http-conf:authorization, The conduit element
http-conf:basicAuthSupplier, The conduit element
http-conf:client, The client element
Accept, The client element
AcceptEncoding, The client element
AcceptLanguage, The client element
AllowChunking, The client element
AutoRedirect, The client element
BrowserType, The client element
CacheControl, The client element, Consumer Cache Control Directives
Connection, The client element
ConnectionTimeout, The client element
ContentType, The client element
Cookie, The client element
DecoupledEndpoint, The client element, Configuring the consumer
Host, The client element
MaxRetransmits, The client element
ProxyServer, The client element
ProxyServerPort, The client element
ProxyServerType, The client element
ReceiveTimeout, The client element
Referer, The client element
http-conf:conduit, The conduit element
name attribute, The conduit element
http-conf:contextMatchStrategy, The destination element
http-conf:destination, The destination element
name attribute, The destination element
http-conf:fixedParameterOrder, The destination element
http-conf:proxyAuthorization, The conduit element
http-conf:server, The destination element, The server element
CacheControl, The server element, Service Provider Cache Control Directives
ContentEncoding, The server element
ContentLocation, The server element
ContentType, The server element
HonorKeepAlive, The server element
ReceiveTimeout, The server element
RedirectURL, The server element
ServerType, The server element
SuppressClientReceiveErrors, The server element
SuppressClientSendErrors, The server element
http-conf:tlsClientParameters, The conduit element
http-conf:trustDecider, The conduit element
http:address, Other messages types
httpj:engine, The engine element
httpj:engine-factory, The engine-factory element
httpj:identifiedThreadingParameters, The engine-factory element, Configuring the thread pool
httpj:identifiedTLSServerParameters, The engine-factory element
httpj:threadingParameters, The engine element, Configuring the thread pool
maxThreads, Configuring the thread pool
minThreads, Configuring the thread pool
httpj:threadingParametersRef, The engine element
httpj:tlsServerParameters, The engine element
httpj:tlsServerParametersRef, The engine element

J

JMS
specifying the message type, Specifying the message type
JMS destination
specifying, Specifying the JMS address
jms:address, Specifying the JMS address
connectionPassword attribute, Specifying the JMS address
connectionUserName attribute, Specifying the JMS address
destinationStyle attribute, Specifying the JMS address
jmsDestinationName attribute, Specifying the JMS address
jmsiReplyDestinationName attribute, Using a Named Reply Destination
jmsReplyDestinationName attribute, Specifying the JMS address
jndiConnectionFactoryName attribute, Specifying the JMS address
jndiDestinationName attribute, Specifying the JMS address
jndiReplyDestinationName attribute, Specifying the JMS address, Using a Named Reply Destination
jms:client, Specifying the message type
messageType attribute, Specifying the message type
jms:clientConfig, jms:clientConfig
clientReceiveTimeout, jms:clientConfig
messageTimeToLive, jms:clientConfig
jms:conduit, Configuration elements, Configuration elements
jms:destination, Configuration elements, Configuration elements
jms:JMSNamingProperties, Specifying JNDI properties, The JMSNamingProperties element
jms:runtimePolicy
consumer endpoint properties, Specifying the message type
durableSubscriberName, Quality of service configuration
messageSelector, Quality of service configuration
messageType attribute, Specifying the message type
provider configuration, Quality of service configuration
transactional, Quality of service configuration
useMessageIDAsCorrealationID, Quality of service configuration
jms:server, Specifying the configuration
durableSubscriberName, Specifying the configuration
messageSelector, Specifying the configuration
transactional, Specifying the configuration
useMessageIDAsCorrealationID, Specifying the configuration
jms:serverConfig, Runtime configuration
durableSubscriptionClientId, Runtime configuration
messageTimeToLive, Runtime configuration
jms:sessionPool, Configuration element
highWaterMark, Configuration element
lowWaterMark, Configuration element
JMSConfiguration, Specifying the configuration
JNDI
specifying the connection factory, Specifying the JMS address

N

named reply destination
specifying in WSDL, Specifying the JMS address
using, Using a Named Reply Destination

P

provider runtime configuration, Runtime configuration
durable subscriber identification, Runtime configuration
response time to live, Runtime configuration

S

session pool configuration (see jms:sessionPool)
SOAP 1.1
endpoint address, SOAP 1.1
SOAP 1.2
endpoint address, SOAP 1.2
SOAP Message Transmission Optimization Mechanism, Sending Binary Data with SOAP MTOM
soap12:address, SOAP 1.2
soap12:body
parts, Splitting messages between body and header
soap12:header, Overview
encodingStyle, Syntax
message, Syntax
namespace, Syntax
part, Syntax
use, Syntax
soap:address, SOAP 1.1
soap:body
parts, Splitting messages between body and header
soap:header, Overview
encodingStyle, Syntax
message, Syntax
namespace, Syntax
part, Syntax
use, Syntax

W

WS-Addressing
using, Configuring an endpoint to use WS-Addressing
wsam:Addressing, Configuring an endpoint to use WS-Addressing
WSDL
binding element, The WSDL elements
name attribute, The WSDL elements
port element, The WSDL elements
binding attribute, The WSDL elements
service element, The WSDL elements
name attribute, The WSDL elements
WSDL extensors
jms:address (see jms:address)
jms:client (see jms:client)
jms:JMSNamingProperties (see jms:JMSNamingProperties)
jms:server (see jms:server)
wsdl2soap, Using wsdl2soap, Using wsdl2soap
wswa:UsingAddressing, Configuring an endpoint to use WS-Addressing

X

xformat:binding, Hand editing
rootNode, Hand editing
xformat:body, Hand editing
rootNode, Hand editing
PK HAf= OEBPS/toc.ncx Using the Web Services Bindings and TransportsUsing the Web Services Bindings and TransportsI. Bindings1. Understanding Bindings in WSDL2. Using SOAP 1.1 MessagesAdding a SOAP 1.1 BindingAdding SOAP Headers to a SOAP 1.1 Binding3. Using SOAP 1.2 MessagesAdding a SOAP 1.2 Binding to a WSDL DocumentAdding Headers to a SOAP 1.2 Message4. Sending Binary Data Using SOAP with Attachments5. Sending Binary Data with SOAP MTOMAnnotating Data Types to use MTOMEnabling MTOMUsing JAX-WS APIsUsing configuration6. Using XML DocumentsII. Transports7. Understanding How Endpoints are Defined in WSDL8. Using HTTPAdding a Basic HTTP EndpointConfiguring a ConsumerUsing ConfigurationUsing WSDLConsumer Cache Control DirectivesConfiguring a Service ProviderUsing ConfigurationUsing WSDLService Provider Cache Control DirectivesConfiguring the Jetty RuntimeUsing the HTTP Transport in Decoupled Mode9. Using SOAP Over JMSBasic configurationJMS URIsWSDL extensions10. Using Generic JMSUsing the JMS configuration beanUsing WSDL to configure JMSBasic JMS configurationJMS client configurationJMS provider configurationUsing a Named Reply DestinationIII. AppendicesA. Integrating with Fuse Message BrokerB. ConduitsC. Conduit and Destination Based JMS ConfigurationBasic endpoint configurationConsumer configurationProvider configurationJMS Session Pool ConfigurationIndexPK HAoa,mimetypePK HA A:META-INF/PK HAAaOEBPS/PK HA AOEBPS/images/PK HAAOEBPS/imagesdb/PK HAhhMETA-INF/container.xmlPK HAQ]!!yOEBPS/CXFAMQIntegration.htmlPK HA0>OEBPS/SOAP11Adding.htmlPK HA.`BOEBPS/SOAP12Headers.htmlPK HAM>M>}OEBPS/SOAP12WSDL.htmlPK HA. uVVOEBPS/SoapOverJms.htmlPK HA OEBPS/SoapOverJmsBasics.htmlPK HAO5((/OEBPS/SoapOverJmsUri.htmlPK HA399WOEBPS/SoapOverJmsWsdl.htmlPK HAGsf?f?"OEBPS/bk01-toc.htmlPK HA **OEBPS/ch05s02s01.htmlPK HAUg8OEBPS/ch05s02s02.htmlPK HA};OEBPS/ch10s02s02.htmlPK HA0*OEBPS/content.opfPK HA!ߕ<OEBPS/cover.htmlPK HAOmm>OEBPS/images/decoupled.gifPK HAQ yyOEBPS/imagesdb/1.gifPK HA\,rrOEBPS/imagesdb/10.gifPK HA)rr=OEBPS/imagesdb/11.gifPK HA5|rrOEBPS/imagesdb/12.gifPK HAxKrrOEBPS/imagesdb/13.gifPK HAjىrr,OEBPS/imagesdb/14.gifPK HAiJOrrѲOEBPS/imagesdb/15.gifPK HAG΋vOEBPS/imagesdb/2.gifPK HA ,23OEBPS/imagesdb/3.gifPK HAMqqOEBPS/imagesdb/4.gifPK HAuOEBPS/imagesdb/5.gifPK HA~`OEBPS/imagesdb/6.gifPK HAlOEBPS/imagesdb/7.gifPK HA*)OEBPS/imagesdb/8.gifPK HA_țOEBPS/imagesdb/9.gifPK HA4OEBPS/imagesdb/caution.gifPK HAA^==#OEBPS/imagesdb/cover_background.pngPK HAjGG OEBPS/imagesdb/docbook.cssPK HAUGe OEBPS/imagesdb/important.gifPK HAaCAa++ OEBPS/imagesdb/note.gifPK HA5D933: OEBPS/imagesdb/tip.gifPK HA5  OEBPS/imagesdb/warning.gifPK HA$i&i& OEBPS/index.htmlPK HAդXX( OEBPS/ix01.htmlPK HAf= m OEBPS/toc.ncxPKSS~4

Using the Web Services Bindings and Transports

Version 7.0

July 2012

Third Party Acknowledgements

One or more products in the Fuse ESB Enterprise release includes third party components covered by licenses that require that the following documentation notices be provided:

  • JLine (http://jline.sourceforge.net) jline:jline:jar:1.0

    License: BSD (LICENSE.txt) - Copyright (c) 2002-2006, Marc Prud'hommeaux

    All rights reserved.

    Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

    • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

    • Neither the name of JLine nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  • Stax2 API (http://woodstox.codehaus.org/StAX2) org.codehaus.woodstox:stax2-api:jar:3.1.1

    License: The BSD License (http://www.opensource.org/licenses/bsd-license.php)

    Copyright (c) <YEAR>, <OWNER> All rights reserved.

    Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

    • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  • jibx-run - JiBX runtime (http://www.jibx.org/main-reactor/jibx-run) org.jibx:jibx-run:bundle:1.2.3

    License: BSD (http://jibx.sourceforge.net/jibx-license.html) Copyright (c) 2003-2010, Dennis M. Sosnoski.

    All rights reserved.

    Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

    • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

    • Neither the name of JiBX nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  • JavaAssist (http://www.jboss.org/javassist) org.jboss.javassist:com.springsource.javassist:jar:3.9.0.GA:compile

    License: MPL (http://www.mozilla.org/MPL/MPL-1.1.html)

  • HAPI-OSGI-Base Module (http://hl7api.sourceforge.net/hapi-osgi-base/) ca.uhn.hapi:hapi-osgi-base:bundle:1.2

    License: Mozilla Public License 1.1 (http://www.mozilla.org/MPL/MPL-1.1.txt)

Updated: 08 Oct 2012