[seam-commits] Seam SVN: r14464 - in branches/community/Seam_2_3/examples-ee6: restbay and 52 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Mon Apr 2 07:16:38 EDT 2012


Author: maschmid
Date: 2012-04-02 07:16:37 -0400 (Mon, 02 Apr 2012)
New Revision: 14464

Added:
   branches/community/Seam_2_3/examples-ee6/restbay/
   branches/community/Seam_2_3/examples-ee6/restbay/pom.xml
   branches/community/Seam_2_3/examples-ee6/restbay/readme.txt
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/pom.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/src/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/src/main/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/src/main/application/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/src/main/application/META-INF/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/src/main/application/META-INF/jboss-deployment-structure.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/src/main/application/META-INF/jboss-seam-restbay-ds.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/pom.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Aargh.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Account.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Auction.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/AuctionEndAction.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/AuctionImage.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/AuctionService.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Bid.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Category.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryResourceHome.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryResourceQuery.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryService.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryServiceImpl.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Feedback.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/User.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/ContextDataResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/SecuredResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/SubResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestComponent.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestEjb.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestEjbLocal.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestForm.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/applicationcomponent/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/eventcomponent/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/plain/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/plain/PlainRootResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelesscomponent/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejb/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/subresource/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/subresource/Garage.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/subresource/Vehicle.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/META-INF/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/META-INF/ejb-jar.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/META-INF/persistence.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/import.sql
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/seam.properties
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/pom.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/AuctionServiceTest.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/BasicServiceTest.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/CategoryServiceDBUnitTest.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/ContextDataTest.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/ResourceHomeTest.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/ResourceQueryTest.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/SecurityTest.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/SubresourceTest.java
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources-integration/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources-integration/testng.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/WEB-INF/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/WEB-INF/components.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/org/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/org/jboss/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/org/jboss/seam/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/org/jboss/seam/example/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/org/jboss/seam/example/restbay/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/org/jboss/seam/example/restbay/test/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/org/jboss/seam/example/restbay/test/dbunitdata.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/seam.properties
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/pom.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/components.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/faces-config.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/pages.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/web.xml
   branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/index.html
Log:
add restbay to the ee6 examples


Added: branches/community/Seam_2_3/examples-ee6/restbay/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/pom.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/pom.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.jboss.seam.examples-ee6</groupId>
+    <artifactId>restbay</artifactId>
+    <parent>
+        <groupId>org.jboss.seam</groupId>
+        <artifactId>examples-ee6</artifactId>
+        <version>2.3.0.Beta2-SNAPSHOT</version>
+    </parent>
+    <packaging>pom</packaging>
+    <name>Restbay Example (EE6)</name>
+    
+    <properties>
+        <example.name>restbay</example.name>
+    </properties>
+    
+    <modules>
+        <module>restbay-ear</module>
+        <module>restbay-ejb</module>
+        <module>restbay-web</module>
+        <module>restbay-tests</module>
+    </modules>
+    
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+                <artifactId>restbay-ejb</artifactId>
+                <version>${project.version}</version>
+                <type>ejb</type>
+            </dependency>
+            <dependency>
+                <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+                <artifactId>restbay-web</artifactId>
+                <version>${project.version}</version>
+                <type>war</type>
+            </dependency>
+            <dependency>
+                <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+                <artifactId>restbay-ear</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+</project>

Added: branches/community/Seam_2_3/examples-ee6/restbay/readme.txt
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/readme.txt	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/readme.txt	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,21 @@
+Seam RestBay Example
+====================
+
+This example shows Seam/JAX-RS RESTful HTTP webservices integration.
+It runs on JBoss AS as an EAR.
+
+To deploy the example to JBoss AS, follow these steps:
+
+* In the example root directory run:
+
+    mvn clean package
+
+* Set JBOSS_HOME environment property.
+
+* In the restbay-ear directory run:
+
+    mvn jboss:hard-deploy
+
+* Open this URL in a web browser: http://localhost:8080/seam-restbay
+
+Note: this example doesn't have functional tests, because all functionality is verified in integration tests

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/pom.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/pom.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>restbay</artifactId>
+        <groupId>org.jboss.seam.examples-ee6</groupId>
+        <version>2.3.0.Beta2-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+    <artifactId>restbay-ear</artifactId>
+    <packaging>ear</packaging>
+    <name>Restbay EAR Module (EE6)</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+            <artifactId>restbay-web</artifactId>
+            <type>war</type>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+            <artifactId>restbay-ejb</artifactId>
+            <type>ejb</type>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam</artifactId>
+            <type>ejb</type>
+            <scope>compile</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.thoughtworks.xstream</groupId>
+                    <artifactId>xstream</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xpp3</groupId>
+                    <artifactId>xpp3_min</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!--
+             <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam-resteasy</artifactId>
+        </dependency>
+-->
+    </dependencies>
+    
+
+    <build>
+        <finalName>seam-restbay</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-ear-plugin</artifactId>
+                <configuration>
+                    <version>6</version>
+                    <defaultLibBundleDir>lib</defaultLibBundleDir>
+                    <!-- Exclude eclipse generated application.xml and manually modified jboss-app.xml during mvn build  -->
+                    <earSourceExcludes>**/application.xml, **/jboss-app.xml</earSourceExcludes>
+                    <!-- use maven generated application.xml instead -->
+                    <generateApplicationXml>true</generateApplicationXml>
+                    <filtering>true</filtering>
+                    <modules>
+                        <webModule>
+                            <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+                            <artifactId>restbay-web</artifactId>
+                            <contextRoot>/seam-restbay</contextRoot>
+                            <bundleFileName>restbay-web.war</bundleFileName>
+                        </webModule>
+                        <ejbModule>
+                            <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+                            <artifactId>restbay-ejb</artifactId>
+                            <bundleFileName>restbay-ejb.jar</bundleFileName>
+                        </ejbModule>
+                        <ejbModule>
+                            <groupId>org.jboss.seam</groupId>
+                            <artifactId>jboss-seam</artifactId>
+                            <bundleFileName>jboss-seam.jar</bundleFileName>
+                        </ejbModule>
+                    </modules>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>exploded</id>
+            <properties>
+                <example.name>restbay</example.name>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-dependency-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>unpack</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>unpack</goal>
+                                </goals>
+                                <configuration>
+                                    <artifactItems>
+                                        <artifactItem>
+                                            <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+                                            <artifactId>restbay-ear</artifactId>
+                                            <type>ear</type>
+                                            <overWrite>true</overWrite>
+                                            <outputDirectory>${project.build.directory}/${project.build.finalName}-exploded/${project.build.finalName}.ear</outputDirectory>
+                                        </artifactItem>
+                                        <artifactItem>
+                                            <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+                                            <artifactId>restbay-web</artifactId>
+                                            <type>war</type>
+                                            <overWrite>true</overWrite>
+                                            <outputDirectory>${project.build.directory}/${project.build.finalName}-exploded/${project.build.finalName}.ear/${example.name}-web.war</outputDirectory>
+                                        </artifactItem>
+                                        <artifactItem>
+                                            <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+                                            <artifactId>restbay-ejb</artifactId>
+                                            <type>jar</type>
+                                            <overWrite>true</overWrite>
+                                            <outputDirectory>${project.build.directory}/${project.build.finalName}-exploded/${project.build.finalName}.ear/${example.name}-ejb.jar</outputDirectory>
+                                        </artifactItem>
+                                    </artifactItems>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+</project>

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/src/main/application/META-INF/jboss-deployment-structure.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/src/main/application/META-INF/jboss-deployment-structure.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/src/main/application/META-INF/jboss-deployment-structure.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,9 @@
+<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
+  <deployment>
+    <dependencies>
+      <module name="org.dom4j" export="true"/>
+      <module name="org.apache.commons.collections" export="true"/>
+      <module name="javax.faces.api" export="true"/>
+    </dependencies>
+  </deployment>
+</jboss-deployment-structure>

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/src/main/application/META-INF/jboss-seam-restbay-ds.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/src/main/application/META-INF/jboss-seam-restbay-ds.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ear/src/main/application/META-INF/jboss-seam-restbay-ds.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<datasources xmlns="http://www.jboss.org/ironjacamar/schema">
+    <datasource 
+        jndi-name="java:/restbayDatasource" 
+        enabled="true" 
+        use-java-context="true" pool-name="restbaydb">
+        <connection-url>jdbc:h2:mem:restbaydb;DB_CLOSE_DELAY=-1</connection-url>
+        <driver>h2</driver>
+        <security>
+            <user-name>sa</user-name>
+            <password>sa</password>
+        </security>
+    </datasource>
+</datasources>

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/pom.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/pom.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>restbay</artifactId>
+        <groupId>org.jboss.seam.examples-ee6</groupId>
+        <version>2.3.0.Beta2-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+    <artifactId>restbay-ejb</artifactId>
+    <packaging>ejb</packaging>
+    <name>Restbay EJB Module (EE6)</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam</artifactId>
+            <type>ejb</type>
+        </dependency>
+        <dependency>
+            <groupId>javax.persistence</groupId>
+            <artifactId>persistence-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-entitymanager</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.ejb</groupId>
+            <artifactId>ejb-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.faces</groupId>
+            <artifactId>jsf-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.resteasy</groupId>
+            <artifactId>resteasy-jaxrs</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam-resteasy</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jboss.resteasy</groupId>
+                    <artifactId>resteasy-jaxrs</artifactId>
+                </exclusion>
+
+                <exclusion>
+                    <groupId>org.jboss.resteasy</groupId>
+                    <artifactId>resteasy-jaxb-provider</artifactId>
+                </exclusion>
+
+                <exclusion>
+                    <groupId>org.jboss.resteasy</groupId>
+                    <artifactId>resteasy-jettison-provider</artifactId>
+                </exclusion>
+
+                <exclusion>
+                    <groupId>org.jboss.resteasy</groupId>
+                    <artifactId>resteasy-atom-provider</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.opensymphony.quartz</groupId>
+            <artifactId>quartz</artifactId>
+        </dependency>
+    </dependencies>
+   
+</project>

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Aargh.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Aargh.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Aargh.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,80 @@
+package org.jboss.seam.example.restbay;
+
+import org.jboss.seam.Component;
+import static org.jboss.seam.ScopeType.APPLICATION;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Startup;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+
+import javax.naming.InitialContext;
+import javax.persistence.EntityManager;
+import javax.transaction.SystemException;
+import javax.transaction.UserTransaction;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Nasty nasty hack because hsqldb doesn't support date arithmetic and we actually
+ * want to deploy with usable test data.
+ * 
+ * @author shane
+ *
+ */
+ at Startup
+ at Name("aargh")
+ at Scope(APPLICATION)
+ at BypassInterceptors
+public class Aargh
+{   
+
+   @Create
+   public void create()
+   {
+      UserTransaction t = null;
+      try
+      {
+         InitialContext ctx = new InitialContext();
+         
+         t = (UserTransaction) ctx.lookup("java:/jboss/UserTransaction");
+         t.begin();
+      
+         EntityManager em = (EntityManager) Component.getInstance("entityManager", true);
+         
+         List<Auction> auctions = em.createQuery("select a from Auction a").getResultList();
+         
+         Calendar cal = new GregorianCalendar();
+         
+         Random r = new Random(System.currentTimeMillis());
+         
+         for (Auction auction : auctions)
+         {
+            cal.setTime(auction.getEndDate());
+            cal.add(Calendar.DATE, r.nextInt(7));
+            cal.add(Calendar.MINUTE, 30 + r.nextInt(1410));
+            auction.setEndDate(cal.getTime());
+            auction.setStatus(Auction.STATUS_COMPLETED);
+            em.merge(auction);
+
+            AuctionEndAction auctionEnd = (AuctionEndAction) Component.getInstance(AuctionEndAction.class, true);
+            auctionEnd.endAuction(auction.getAuctionId(), auction.getEndDate());
+         }
+         
+         t.commit();
+      } 
+      catch (Exception e)
+      {
+         try
+         {
+            if (t != null)
+               t.rollback();
+         } 
+         catch (SystemException e1) {}
+         
+         throw new RuntimeException("Error starting transaction", e);
+      }      
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Account.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Account.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Account.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,109 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import javax.validation.constraints.Size;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+
+ at Entity
+ at Table(uniqueConstraints = @UniqueConstraint(columnNames = "name"))
+public class Account implements Serializable
+{
+   private static final long serialVersionUID = 8444287111124328025L;
+   
+   private Integer accountId;
+   private String name;
+   private int feedbackScore;
+   private float feedbackPercent;
+   private Date memberSince;
+   private String location;
+   
+   @Id @GeneratedValue
+   public Integer getAccountId()
+   {
+      return accountId;
+   }
+   
+   public void setAccountId(Integer accountId)
+   {
+      this.accountId = accountId;
+   }
+   
+   @NotNull
+   @Size(min = 3, max = 40)
+   @Pattern(regexp="[a-zA-Z]?[a-zA-Z0-9]+", 
+         message="Account name must start with a letter, and only contain letters or numbers")   
+   public String getName()
+   {
+      return name;
+   }
+   
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+   
+   public int getFeedbackScore()
+   {
+      return feedbackScore;
+   }
+   
+   public void setFeedbackScore(int score)
+   {
+      this.feedbackScore = score;
+   }
+   
+   public float getFeedbackPercent()
+   {
+      return feedbackPercent;
+   }
+   
+   public void setFeedbackPercent(float percent)
+   {
+      this.feedbackPercent = percent;
+   }
+   
+   public Date getMemberSince()
+   {
+      return memberSince;
+   }
+   
+   public void setMemberSince(Date memberSince)
+   {
+      this.memberSince = memberSince;
+   }
+   
+   public String getLocation()
+   {
+      return location;
+   }
+   
+   public void setLocation(String location)
+   {
+      this.location = location;
+   }
+   
+   @Override
+   public boolean equals(Object value)
+   {
+      if (!(value instanceof Account)) return false;
+      
+      Account other = (Account) value;
+      
+      return other.accountId != null && other.accountId.equals(this.accountId);
+   }
+   
+   @Override
+   public int hashCode()
+   {
+      return accountId != null ? accountId.intValue() : super.hashCode();
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Auction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Auction.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Auction.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,294 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+import javax.validation.constraints.NotNull;
+
+ at Entity
+public class Auction implements Serializable
+{
+   public static final int STATUS_UNLISTED = 0;
+   public static final int STATUS_LIVE = 1;
+   public static final int STATUS_COMPLETED = 2;
+   
+   private static final long serialVersionUID = -8349473227099432431L;
+
+   private Integer auctionId;
+   private Account account;
+   private Category category;
+   private String title;
+   private String description;
+   private Date endDate;
+   private AuctionImage image;
+   private Bid highBid;
+   private int bids;
+   private double startingPrice;
+   
+   private int status;   
+   private int version;
+   
+   @Id @GeneratedValue
+   public Integer getAuctionId()
+   {
+      return auctionId;
+   }
+   
+   public void setAuctionId(Integer auctionId)
+   {
+      this.auctionId = auctionId;
+   }
+   
+   @NotNull
+   @ManyToOne
+   @JoinColumn(name = "ACCOUNT_ID")
+   public Account getAccount()
+   {
+      return account;
+   }
+   
+   public void setAccount(Account account)
+   {
+      this.account = account;
+   }
+   
+   @NotNull   
+   @ManyToOne
+   @JoinColumn(name = "CATEGORY_ID")
+   public Category getCategory()
+   {
+      return category;
+   }
+   
+   public void setCategory(Category category)
+   {
+      this.category = category;
+   }
+   
+   @NotNull
+   public String getTitle()
+   {
+      return title;
+   }
+   
+   public void setTitle(String title)
+   {
+      this.title = title;
+   }
+   
+   @NotNull
+   @Lob
+   public String getDescription()
+   {
+      return description;
+   }
+   
+   public void setDescription(String description)
+   {
+      this.description = description;
+   }
+   
+   @NotNull
+   public Date getEndDate()
+   {
+      return endDate;
+   }
+   
+   public void setEndDate(Date endDate)
+   {
+      this.endDate = endDate;
+   }
+   
+   @OneToOne
+   @JoinColumn(name = "IMAGE_ID")
+   public AuctionImage getImage()
+   {
+      return image;
+   }
+   
+   public void setImage(AuctionImage image)
+   {
+      this.image = image;
+   }
+   
+   @OneToOne
+   public Bid getHighBid()
+   {
+      return highBid;
+   }
+   
+   public void setHighBid(Bid highBid)
+   {
+      this.highBid = highBid;
+   }
+   
+   public int getBids()
+   {
+      return bids;
+   }
+   
+   public void setBids(int bids)
+   {
+      this.bids = bids;
+   }
+   
+   @Transient
+   public long getTimeLeft()
+   {      
+      return endDate != null ? (endDate.getTime() - System.currentTimeMillis()) : 0; 
+   }   
+   
+   @Transient
+   public String getPrettyTimeLeft()
+   {
+      long timeLeft = getTimeLeft() / 1000;
+      
+      int days = (int) Math.floor(timeLeft / (60 * 60 * 24));
+      
+      timeLeft -= days * 24 * 60 * 60;
+      int hours = (int) Math.floor(timeLeft / (60 * 60));
+      
+      timeLeft -= hours * 60 * 60;
+      int minutes = (int) Math.floor(timeLeft / 60);
+
+      StringBuilder sb = new StringBuilder();
+      
+      if (days > 0)
+         sb.append(String.format("%dd ", days));
+      
+      if (hours > 0)
+         sb.append(String.format("%dh ", hours));
+
+      if (minutes > 0)
+         sb.append(String.format("%dm ", minutes));     
+      
+      return sb.toString();
+   }
+   
+   @Transient
+   public String getDaysHoursLeft()
+   {
+      long timeLeft = getTimeLeft() / 1000;
+      
+      int days = (int) Math.floor(timeLeft / (60 * 60 * 24));
+      
+      timeLeft -= days * 24 * 60 * 60;
+      int hours = (int) Math.floor(timeLeft / (60 * 60));
+      
+      StringBuilder sb = new StringBuilder();
+      
+      if (days > 0)
+         sb.append(String.format("%d days ", days));
+      
+      if (hours > 0)
+         sb.append(String.format("%d hour", hours));
+      
+      if (hours > 1)
+         sb.append('s');
+      
+      return sb.toString();      
+   }
+   
+   public double getStartingPrice()
+   {
+      return startingPrice;
+   }
+   
+   public void setStartingPrice(double startingPrice)
+   {
+      this.startingPrice = startingPrice;
+   }
+   
+   public int getStatus()
+   {
+      return status;
+   }
+   
+   public void setStatus(int status)
+   {
+      this.status = status;
+   }
+   
+   @Version
+   public int getVersion()
+   {
+      return version;
+   }
+   
+   public void setVersion(int version)
+   {
+      this.version = version;
+   }
+   
+   @Transient 
+   public double getCurrentPrice()
+   {
+      return highBid != null ? highBid.getActualAmount() : getStartingPrice();
+   }
+   
+   @Transient
+   public double getRequiredBid()
+   {      
+      return highBid != null ? getRequiredBid(highBid.getActualAmount()) : 
+         getStartingPrice();
+   }
+   
+   /**
+    * Returns the amount required to outbid the specified bid amount.
+    * 
+    * @param amount The current bid amount
+    * @return The bid amount required to outbid the current bid
+    */
+   @Transient
+   static double getRequiredBid(double amount)
+   {
+      if (amount < 100)
+      {
+         return Math.ceil(amount) + 1;
+      }
+      else if (amount < 200)
+      {
+         return Math.ceil(amount) + 2;
+      }
+      else if (amount < 500)
+      {
+         return Math.ceil(amount) + 5;
+      }
+      else if (amount < 1000)
+      {
+         return Math.ceil(amount) + 10;
+      }
+      else if (amount < 5000)
+      {
+         return Math.ceil(amount) + 20;
+      }
+      else if (amount < 20000)
+      {
+         return Math.ceil(amount) + 50;
+      }
+      else if (amount < 50000)
+      {
+         return Math.ceil(amount) + 100;
+      }
+      else if (amount < 100000)
+      {
+         return Math.ceil(amount) + 200;
+      }
+      else if (amount < 500000)
+      {
+         return Math.ceil(amount) + 500;
+      }
+
+      return Math.ceil(amount) + 1000;
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/AuctionEndAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/AuctionEndAction.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/AuctionEndAction.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,32 @@
+package org.jboss.seam.example.restbay;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Transactional;
+import org.jboss.seam.annotations.async.Asynchronous;
+import org.jboss.seam.annotations.async.Expiration;
+
+import javax.persistence.EntityManager;
+import javax.persistence.LockModeType;
+import java.util.Date;
+
+ at Name("auctionEnd")
+public class AuctionEndAction
+{
+   @In EntityManager entityManager;
+
+   @Asynchronous
+   @Transactional
+   public void endAuction(int auctionId, @Expiration Date endDate)
+   {
+      System.out.println("Auction " + auctionId + " ending");
+
+      Auction auction = entityManager.find(Auction.class, auctionId);
+
+      entityManager.lock(auction, LockModeType.WRITE);
+
+      auction.setStatus(Auction.STATUS_COMPLETED);
+
+      entityManager.merge(auction);
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/AuctionImage.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/AuctionImage.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/AuctionImage.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,67 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.xml.bind.annotation.XmlTransient;
+
+ at Entity
+public class AuctionImage implements Serializable
+{
+   private static final long serialVersionUID = -1219357931402690891L;
+
+   private Integer imageId;
+   private Auction auction;
+   private byte[] data;
+   private String contentType;
+   
+   @Id @GeneratedValue
+   public Integer getImageId()
+   {
+      return imageId;
+   }
+   
+   public void setImageId(Integer imageId)
+   {
+      this.imageId = imageId;
+   }
+   
+   @XmlTransient
+   @ManyToOne
+   @JoinColumn(name = "AUCTION_ID")
+   public Auction getAuction()
+   {
+      return auction;
+   }
+   
+   public void setAuction(Auction auction)
+   {
+      this.auction = auction;
+   }
+   
+   @Lob
+   public byte[] getData()
+   {
+      return data;
+   }
+   
+   public void setData(byte[] data)
+   {
+      this.data = data;
+   }
+   
+   public String getContentType()
+   {
+      return contentType;
+   }
+   
+   public void setContentType(String contentType)
+   {
+      this.contentType = contentType;
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/AuctionService.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/AuctionService.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/AuctionService.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,75 @@
+package org.jboss.seam.example.restbay;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+
+import javax.persistence.EntityManager;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+import java.net.URI;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("auctionService")
+ at Path("/auction")
+public class AuctionService
+{
+
+   @Context
+   private UriInfo uriInfo;
+
+   private HttpHeaders headers;
+
+   @Context
+   public void setHeaders(HttpHeaders headers) {
+      this.headers = headers;
+   }
+
+   @In
+   EntityManager entityManager;
+
+   @GET
+   @Produces("text/plain")
+   public String getAuctions()
+   {
+
+      URI builtURI = uriInfo.getAbsolutePathBuilder().path("3").build();
+      // We can't test for /<context> prefix here, as we don't have a context in unit tests but we
+      // have it when the application is deployed... so use endsWith()
+      assert builtURI.getPath().endsWith("/seam/resource/restv1/auction/3");
+
+      // This is supposed to test field and setter injection for @Context
+      assert uriInfo.getPath().equals("/auction");
+      assert headers.getAcceptableMediaTypes().size() == 1;
+      assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+
+      List<Object[]> auctions =
+            entityManager.createQuery("select a.auctionId, a.title from Auction a order by a.auctionId asc").getResultList();
+      StringBuilder s = new StringBuilder();
+      for (Object[] auction : auctions)
+      {
+         s.append(auction[0]).append(",").append(auction[1]).append("\n");
+      }
+
+      return s.toString();
+   }
+
+   @GET
+   @Path("/{auctionId}")
+   @Produces("text/plain")
+   public String getAuction(@Context HttpHeaders httpHeaders, @PathParam("auctionId") int auctionId)
+   {
+      assert httpHeaders.getAcceptableMediaTypes().size() == 1;
+      assert httpHeaders.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+      
+      return entityManager.find(Auction.class, auctionId).getTitle();
+   }
+
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Bid.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Bid.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Bid.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,90 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+import javax.validation.constraints.NotNull;
+
+ at Entity
+public class Bid implements Serializable
+{
+   private static final long serialVersionUID = -6214050645831251660L;
+   
+   private Integer bidId;
+   private Auction auction;
+   private Account account;
+   private Date bidDate;
+   private double maxAmount;
+   private double actualAmount;
+   
+   @Id @GeneratedValue
+   public Integer getBidId()
+   {
+      return bidId;
+   }
+   
+   public void setBidId(Integer bidId)
+   {
+      this.bidId = bidId;
+   }
+   
+   @NotNull
+   @ManyToOne
+   public Auction getAuction()
+   {
+      return auction;
+   }
+   
+   public void setAuction(Auction auction)
+   {
+      this.auction = auction;
+   }
+   
+   @NotNull
+   public Account getAccount()
+   {
+      return account;
+   }
+   
+   public void setAccount(Account account)
+   {
+      this.account = account;
+   }
+   
+   @NotNull
+   public Date getBidDate()
+   {
+      return bidDate;
+   }
+   
+   public void setBidDate(Date bidDate)
+   {
+      this.bidDate = bidDate;
+   }
+   
+   public double getMaxAmount()
+   {
+      return maxAmount;
+   }
+   
+   public void setMaxAmount(double maxAmount)
+   {
+      this.maxAmount = maxAmount;
+   }
+   
+   public double getActualAmount()
+   {
+      return actualAmount;
+   }
+   
+   public void setActualAmount(double actualAmount)
+   {
+      this.actualAmount = actualAmount;
+   }
+}
+

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Category.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Category.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Category.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,55 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.xml.bind.annotation.XmlRootElement;
+
+ at Entity
+ at XmlRootElement
+public class Category implements Serializable
+{
+   private static final long serialVersionUID = 411989568594034566L;
+   
+   private Integer categoryId;
+   private String name;
+   private Category parent;
+   
+   @Id
+   @GeneratedValue
+   public Integer getCategoryId()
+   {
+      return categoryId;
+   }
+   
+   public void setCategoryId(Integer categoryId)
+   {
+      this.categoryId = categoryId;
+   }
+   
+   public String getName()
+   {
+      return name;
+   }
+   
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+   
+   @ManyToOne
+   @JoinColumn(name = "PARENT_CATEGORY_ID")
+   public Category getParent()
+   {
+      return parent;
+   }
+   
+   public void setParent(Category parent)
+   {
+      this.parent = parent;
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryResourceHome.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryResourceHome.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryResourceHome.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,37 @@
+package org.jboss.seam.example.restbay;
+
+import javax.ws.rs.Path;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.framework.EntityHome;
+import org.jboss.seam.framework.Home;
+import org.jboss.seam.resteasy.ResourceHome;
+
+/**
+ * This resource demonstrates using ResourceHome component. This resource is
+ * used for testing purposes.
+ * 
+ * @author Jozef Hartinger
+ * 
+ */
+
+ at Name("categoryResourceHome")
+ at Path("extendedCategory")
+public class CategoryResourceHome extends ResourceHome<Category, Integer>
+{
+
+   @In
+   private EntityHome<Category> categoryHome;
+
+   @Override
+   public Home<?, Category> getEntityHome()
+   {
+      return categoryHome;
+   }
+
+   public CategoryResourceHome()
+   {
+      setMediaTypes(new String[] { "application/xml", "application/json" });
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryResourceQuery.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryResourceQuery.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryResourceQuery.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,19 @@
+package org.jboss.seam.example.restbay;
+
+import javax.ws.rs.Path;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.resteasy.ResourceQuery;
+
+/**
+ * Example of ResourceQuery usage. Used for testing purposes.
+ * 
+ * @author Jozef Hartinger
+ * 
+ */
+ at Name("categoryResourceQuery")
+ at Path("extendedCategory")
+public class CategoryResourceQuery extends ResourceQuery<Category>
+{
+
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryService.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryService.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryService.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,13 @@
+package org.jboss.seam.example.restbay;
+
+/**
+ * @author Christian Bauer
+ */
+public interface CategoryService
+{
+
+   public String getCategories();
+
+   public String getCategory(int categoryId);
+
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryServiceImpl.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryServiceImpl.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/CategoryServiceImpl.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,45 @@
+package org.jboss.seam.example.restbay;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+
+import javax.ws.rs.*;
+import javax.persistence.EntityManager;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("categoryService")
+ at Path("/category")
+public class CategoryServiceImpl implements CategoryService
+{
+
+   @In
+   EntityManager entityManager;
+
+   @GET
+   @Produces("text/plain")
+   public String getCategories()
+   {
+      List<Object[]> categories =
+            entityManager.createQuery("select c.categoryId, c.name from Category c order by c.id asc").getResultList();
+      StringBuilder s = new StringBuilder();
+      for (Object[] category : categories)
+      {
+         s.append(category[0]).append(",").append(category[1]).append("\n");
+      }
+
+      return s.toString();
+   }
+
+   @GET
+   @Path("/{categoryId}")
+   @Produces("text/plain")
+   public String getCategory(@PathParam("categoryId") int categoryId)
+   {
+      return entityManager.find(Category.class, categoryId).getName();
+   }
+
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Feedback.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Feedback.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/Feedback.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,116 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
+
+ at Entity
+public class Feedback implements Serializable
+{
+   private static final long serialVersionUID = -5814392910187956828L;
+
+   public enum Rating {positive, neutral, negative};
+   
+   private Integer feedbackId;
+   private Account forAccount;
+   private Account fromAccount;
+   private Date feedbackDate;
+   private Auction item;
+   private Rating rating;
+   private String comment;
+   private String response;
+   
+   @Id @GeneratedValue
+   public Integer getFeedbackId()
+   {
+      return feedbackId;
+   }
+   
+   public void setFeedbackId(Integer feedbackId)
+   {
+      this.feedbackId = feedbackId;
+   }
+   
+   @ManyToOne
+   @JoinColumn(name = "FOR_ACCOUNT_ID")
+   public Account getForAccount()
+   {
+      return forAccount;
+   }
+   
+   public void setForAccount(Account account)
+   {
+      this.forAccount = account;
+   }
+   
+   @ManyToOne
+   @JoinColumn(name = "FROM_ACCOUNT_ID")
+   public Account getFromAccount()
+   {
+      return fromAccount;
+   }
+   
+   public void setFromAccount(Account account)
+   {
+      this.fromAccount = account;
+   }
+   
+   public Date getFeedbackDate()
+   {
+      return feedbackDate;
+   }
+   
+   public void setFeedbackDate(Date feedbackDate)
+   {
+      this.feedbackDate = feedbackDate;
+   }
+
+   @OneToOne
+   @JoinColumn(name = "ITEM_ID")
+   public Auction getItem()
+   {
+      return item;
+   }
+   
+   public void setItem(Auction item)
+   {
+      this.item = item;
+   }
+   
+   public Rating getRating()
+   {
+      return rating;
+   }
+   
+   public void setRating(Rating rating)
+   {
+      this.rating = rating;
+   }
+   
+   public String getComment()
+   {
+      return comment;
+   }
+   
+   public void setComment(String comment)
+   {
+      this.comment = comment;
+   }
+   
+   public String getResponse()
+   {
+      return response;
+   }
+   
+   public void setResponse(String response)
+   {
+      this.response = response;
+   }
+   
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/User.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/User.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/User.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,75 @@
+package org.jboss.seam.example.restbay;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import javax.validation.constraints.Size;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+
+ at Entity
+ at Table(uniqueConstraints = @UniqueConstraint(columnNames = "username"))
+public class User implements Serializable
+{   
+   private static final long serialVersionUID = 1L;
+   
+   private Integer userId;
+   private String username;
+   private String password;
+   private Account account;
+   
+   @Id @GeneratedValue
+   public Integer getUserId()
+   {
+      return userId;
+   }
+   
+   public void setUserId(Integer userId)
+   {
+      this.userId = userId;
+   }
+   
+   @NotNull
+   @Size(min = 3, max = 40)
+   @Pattern(regexp="[a-zA-Z]?[a-zA-Z0-9]+", 
+         message="Username must start with a letter, and only contain letters or numbers")   
+   public String getUsername()
+   {
+      return username;
+   }
+   
+   public void setUsername(String username)
+   {
+      this.username = username;
+   }
+
+   public String getPassword()
+   {
+      return password;
+   }
+   
+   public void setPassword(String password)
+   {
+      this.password = password;
+   }
+   
+   @OneToOne
+   @NotNull
+   @JoinColumn(name = "ACCOUNT_ID")
+   public Account getAccount()
+   {
+      return account;
+   }
+   
+   public void setAccount(Account account)
+   {
+      this.account = account;
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/ContextDataResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/ContextDataResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/ContextDataResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,35 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.ext.Providers;
+
+import org.jboss.resteasy.spi.ResteasyProviderFactory;
+
+ at Path("/contextData")
+ at Produces("text/plain")
+public class ContextDataResource
+{
+   @GET
+   @Path("/providers")
+   public boolean providersAvailable()
+   {
+      return ResteasyProviderFactory.getContextData(Providers.class) != null;
+   }
+   
+   @GET
+   @Path("/registry")
+   public boolean registryAvailable()
+   {
+      return ResteasyProviderFactory.getContextData(Providers.class) != null;
+   }
+   
+   @GET
+   @Path("/dispatcher")
+   public boolean dispatcherAvailable()
+   {
+      return ResteasyProviderFactory.getContextData(Providers.class) != null;
+   }
+   
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/SecuredResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/SecuredResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/SecuredResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,67 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Transactional;
+import org.jboss.seam.annotations.security.Restrict;
+import org.jboss.seam.security.Identity;
+import org.jboss.seam.transaction.Synchronizations;
+
+/**
+ * 
+ * @author Jozef Hartinger
+ *
+ */
+
+ at Path("/secured")
+ at Name("securedResource")
+ at Produces("text/plain")
+public class SecuredResource
+{
+
+   @In
+   private Identity identity;
+
+   @GET
+   public String getHello()
+   {
+      return "Hello world!";
+   }
+
+   @GET
+   @Path("/admin")
+   public boolean isAdmin() {
+      return identity.hasRole("admin"); 
+   }
+   
+   @GET
+   @Path("/restrictedAdmin")
+   @Restrict("#{s:hasRole('admin')}")
+   public boolean restrictedIsAdmin() {
+      return identity.hasRole("admin"); 
+   }
+   
+   @GET
+   @Path("/synchronizationsLookup")
+   @Transactional
+   public boolean synchronizationsLookup()
+   {
+      Synchronizations ejb = (Synchronizations) Component.getInstance("org.jboss.seam.transaction.synchronizations", ScopeType.EVENT);
+      return ejb.isAwareOfContainerTransactions();
+   }
+   
+   @GET
+   @Path("/ejbLookup")
+   public boolean ejbLookup()
+   {
+      TestEjbLocal ejb = (TestEjbLocal) Component.getInstance("securedEjb", ScopeType.EVENT);
+      return ejb.foo();
+   }
+   
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/SubResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/SubResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/SubResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,21 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import javax.ws.rs.GET;
+
+/**
+ * @author Christian Bauer
+ */
+public class SubResource
+{
+   private String baz;
+
+   public SubResource(String baz)
+   {
+      this.baz = baz;
+   }
+
+   @GET
+   public String get() {
+      return "bar: " + baz;
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestAuthenticator.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,51 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Transactional;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.security.Credentials;
+import org.jboss.seam.security.Identity;
+
+ at Name("testAuthenticator")
+ at Scope(ScopeType.EVENT)
+public class TestAuthenticator
+{
+
+   @In
+   private Identity identity;
+
+   @In
+   private Credentials credentials;
+
+   @Logger
+   private Log log;
+
+   @Transactional
+   public boolean authenticate()
+   {
+      // Tests that the SFSB can be obtained in both ContextualHttpRequests (authentication and web service invocation)
+      TestEjbLocal ejb = (TestEjbLocal) Component.getInstance("securedEjb", ScopeType.EVENT);
+      ejb.foo();
+      
+      log.debug("Authenticating username/password: " + credentials.getUsername() + "/" + credentials.getPassword());
+      if (credentials.getUsername().equals(credentials.getPassword())) {
+         log.info("Authenticated {0}", credentials.getUsername());
+         
+         if (credentials.getUsername().equals("admin")) {
+            identity.addRole("admin");
+            log.info("Admin rights granted for {0}", credentials.getUsername());
+         }
+         log.debug("Authentication valid");
+         return true;
+      } else {
+         log.debug("Authentication invalid");
+         return false;
+      }
+   }
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestComponent.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestComponent.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestComponent.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,27 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.AutoCreate;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("testComponent")
+ at AutoCreate
+public class TestComponent
+{
+
+   public List<String[]> getCommaSeparated() {
+      List<String[]> csv = new ArrayList();
+      csv.add(new String[]{"foo", "bar"});
+      csv.add(new String[]{"asdf", "123"});
+      return csv;
+   }
+
+   public String getTestString() {
+      return "abc";
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestEjb.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestEjb.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestEjb.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,23 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+
+ at Stateful
+ at Scope(ScopeType.EVENT)
+ at Name("securedEjb")
+public class TestEjb implements TestEjbLocal
+{
+   
+   public boolean foo()
+   {
+      return true;
+   }
+   
+   @Remove
+   public void remove() {}
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestEjbLocal.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestEjbLocal.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestEjbLocal.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,10 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import javax.ejb.Local;
+
+ at Local
+public interface TestEjbLocal
+{
+   boolean foo();
+   void remove();
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestForm.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestForm.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestForm.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,23 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import javax.ws.rs.FormParam;
+import javax.ws.rs.HeaderParam;
+
+/**
+ * @author Christian Bauer
+ */
+public class TestForm
+{
+
+   @FormParam("foo")
+   private String[] foo;
+
+   @HeaderParam("bar")
+   private String bar;
+
+   @Override
+   public String toString()
+   {
+      return bar + foo[0] + foo[1];
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/TestResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,124 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.UriInfo;
+import java.util.ArrayList;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Collections;
+import java.util.Arrays;
+
+/**
+ * Plain JAX RS root resource, no Seam components/lifecycle.
+ * 
+ * @author Christian Bauer
+ */
+public class TestResource
+{
+
+   @Context
+   protected UriInfo uriInfo;
+
+   @Context
+   protected HttpHeaders headers;
+
+   public void setUriInfo(UriInfo uriInfo)
+   {
+      this.uriInfo = uriInfo;
+   }
+
+   public void setHeaders(HttpHeaders headers)
+   {
+      this.headers = headers;
+   }
+
+   public String echoUri()
+   {
+      return uriInfo.getPath();
+   }
+
+   public String echoQueryParam(String bar)
+   {
+      return bar;
+   }
+
+   public String echoHeaderParam(String bar)
+   {
+      return bar;
+   }
+
+   public String echoCookieParam(String bar)
+   {
+      return bar;
+   }
+
+   public String echoTwoParams(String one, String two)
+   {
+      return one+two;
+   }
+
+   public String echoEncoded(String val)
+   {
+      return val;
+   }
+
+   public String echoFormParams(MultivaluedMap<String, String> formMap)
+   {
+      String result = "";
+      for (String s : formMap.get("foo"))
+      {
+         result = result + s;
+      }
+      return result;
+   }
+
+   public String echoFormParams2(String[] foo)
+   {
+      String result = "";
+      for (String s : foo)
+      {
+         result = result + s;
+      }
+      return result;
+   }
+
+   public String echoFormParams3(TestForm form)
+   {
+      return form.toString();
+   }
+
+   public SubResource getBar(String baz)
+   {
+      return new SubResource(baz);
+   }
+
+   public long convertPathParam(GregorianCalendar isoDate)
+   {
+      return isoDate.getTime().getTime();
+   }
+
+   public String throwException()
+   {
+      throw new UnsupportedOperationException("foo");
+   }
+
+   public List<String[]> getCommaSeparated() {
+      assert headers.getAcceptableMediaTypes().size() == 2;
+      assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+      assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
+      return new TestComponent().getCommaSeparated();
+   }
+
+   public String[] getCommaSeparatedStrings() {
+      return new String[] {"foo", "bar", "baz"};
+   }
+
+   public Integer[] getCommaSeparatedIntegers() {
+      return new Integer[] {1, 2, 3};
+   }
+
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/applicationcomponent/ApplicationComponentTestResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,194 @@
+package org.jboss.seam.example.restbay.resteasy.applicationcomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.contexts.Contexts;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MultivaluedMap;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("applicationComponentTestResource")
+ at Path("/applicationComponentTest")
+ at Scope(ScopeType.APPLICATION)
+public class ApplicationComponentTestResource extends TestResource
+{
+   protected final String INSTANCE_CODE_KEY = "applicationComponentTestResource.instanceCode";
+
+   // We want to verify that this is really an application-scoped single instance
+   public ApplicationComponentTestResource()
+   {
+      // Yes, this check is really required, probably because Seam instantiates this twice or something for proxying?! :)
+      if (Contexts.getApplicationContext().get(INSTANCE_CODE_KEY) == null)
+      {
+         Contexts.getApplicationContext().set(INSTANCE_CODE_KEY, hashCode());
+      }
+   }
+
+   protected void assertSingleton()
+   {
+      assert Contexts.getApplicationContext().get(INSTANCE_CODE_KEY).equals(hashCode());
+   }
+
+   @In
+   TestComponent testComponent;
+
+   @GET
+   @Path("/echouri")
+   @Override
+   public String echoUri()
+   {
+      assertSingleton();
+      return super.echoUri();
+   }
+
+   @GET
+   @Path("/echoquery")
+   @Override
+   public String echoQueryParam(@QueryParam("bar") String bar)
+   {
+      assertSingleton();
+      return super.echoQueryParam(bar);
+   }
+
+   @GET
+   @Path("/echoheader")
+   @Override
+   public String echoHeaderParam(@HeaderParam("bar") String bar)
+   {
+      assertSingleton();
+      return super.echoHeaderParam(bar);
+   }
+
+   @GET
+   @Path("/echocookie")
+   @Override
+   public String echoCookieParam(@CookieParam("bar") String bar)
+   {
+      assertSingleton();
+      return super.echoCookieParam(bar);
+   }
+
+   @GET
+   @Path("/echotwoparams/{1}/{2}")
+   @Override
+   public String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two)
+   {
+      assertSingleton();
+      return super.echoTwoParams(one, two);
+   }
+
+   @GET
+   @Path("/echoencoded/{val}")
+   @Override
+   public String echoEncoded(@PathParam("val") @Encoded String val)
+   {
+      assertSingleton();
+      return super.echoEncoded(val);
+   }
+
+   @POST
+   @Path("/echoformparams")
+   @Consumes("application/x-www-form-urlencoded")
+   @Override
+   public String echoFormParams(MultivaluedMap<String, String> formMap)
+   {
+      assertSingleton();
+      return super.echoFormParams(formMap);
+   }
+
+   @POST
+   @Path("/echoformparams2")
+   @Override
+   public String echoFormParams2(@FormParam("foo") String[] foo)
+   {
+      assertSingleton();
+      return super.echoFormParams2(foo);
+   }
+
+   @POST
+   @Path("/echoformparams3")
+   @Override
+   public String echoFormParams3(@Form TestForm form)
+   {
+      assertSingleton();
+      return super.echoFormParams3(form);
+   }
+
+   @Path("/foo/bar/{baz}")
+   @Override
+   public SubResource getBar(@PathParam("baz") String baz)
+   {
+      assertSingleton();
+      return super.getBar(baz);
+   }
+
+   @GET
+   @Path("/convertDate/{isoDate}")
+   @Override
+   public long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate)
+   {
+      assertSingleton();
+      return super.convertPathParam(isoDate);
+   }
+
+   @GET
+   @Path("/trigger/unsupported")
+   @Override
+   public String throwException()
+   {
+      assertSingleton();
+      return super.throwException();
+   }
+
+   @GET
+   @Path("/commaSeparated")
+   @Produces("text/csv")
+   @Override
+   public List<String[]> getCommaSeparated()
+   {
+      assertSingleton();
+      return testComponent.getCommaSeparated();
+   }
+
+   @GET
+   @Path("/commaSeparatedStrings")
+   @Produces("text/plain")
+   @Override
+   public String[] getCommaSeparatedStrings()
+   {
+      assertSingleton();
+      return super.getCommaSeparatedStrings();
+   }
+
+   @GET
+   @Path("/commaSeparatedIntegers")
+   @Produces("text/plain")
+   @Override
+   public Integer[] getCommaSeparatedIntegers()
+   {
+      assertSingleton();
+      return super.getCommaSeparatedIntegers();
+   }
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/eventcomponent/EventComponentTestResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,170 @@
+package org.jboss.seam.example.restbay.resteasy.eventcomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+import org.jboss.seam.transaction.Synchronizations;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MultivaluedMap;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("eventComponentTestResource")
+ at Path("/eventComponentTest")
+public class EventComponentTestResource extends TestResource
+{
+
+   @In
+   TestComponent testComponent;
+
+   @GET
+   @Path("/echouri")
+   @Override
+   public String echoUri()
+   {
+      return super.echoUri();
+   }
+
+   @GET
+   @Path("/echoquery")
+   @Override
+   public String echoQueryParam(@QueryParam("bar") String bar)
+   {
+      return super.echoQueryParam(bar);
+   }
+
+   @GET
+   @Path("/echoheader")
+   @Override
+   public String echoHeaderParam(@HeaderParam("bar") String bar)
+   {
+      return super.echoHeaderParam(bar);
+   }
+
+   @GET
+   @Path("/echocookie")
+   @Override
+   public String echoCookieParam(@CookieParam("bar") String bar)
+   {
+      return super.echoCookieParam(bar);
+   }
+
+   @GET
+   @Path("/echotwoparams/{1}/{2}")
+   @Override
+   public String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two)
+   {
+      return super.echoTwoParams(one, two);
+   }
+
+   @GET
+   @Path("/echoencoded/{val}")
+   @Override
+   public String echoEncoded(@PathParam("val") @Encoded String val)
+   {
+      return super.echoEncoded(val);
+   }
+
+   @POST
+   @Path("/echoformparams")
+   @Consumes("application/x-www-form-urlencoded")
+   @Override
+   public String echoFormParams(MultivaluedMap<String, String> formMap)
+   {
+      return super.echoFormParams(formMap);
+   }
+
+   @POST
+   @Path("/echoformparams2")
+   @Override
+   public String echoFormParams2(@FormParam("foo") String[] foo)
+   {
+      return super.echoFormParams2(foo);
+   }
+
+   @POST
+   @Path("/echoformparams3")
+   @Override
+   public String echoFormParams3(@Form TestForm form)
+   {
+      return super.echoFormParams3(form);
+   }
+
+   @Path("/foo/bar/{baz}")
+   @Override
+   public SubResource getBar(@PathParam("baz") String baz)
+   {
+      return super.getBar(baz);
+   }
+
+   @GET
+   @Path("/convertDate/{isoDate}")
+   @Override
+   public long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate)
+   {
+      return super.convertPathParam(isoDate);
+   }
+
+   @GET
+   @Path("/trigger/unsupported")
+   @Override
+   public String throwException()
+   {
+      return super.throwException();
+   }
+
+   @GET
+   @Path("/commaSeparated")
+   @Produces("text/csv")
+   @Override
+   public List<String[]> getCommaSeparated()
+   {
+      return testComponent.getCommaSeparated();
+   }
+
+   @GET
+   @Path("/commaSeparatedStrings")
+   @Produces("text/plain")
+   @Override
+   public String[] getCommaSeparatedStrings()
+   {
+      return super.getCommaSeparatedStrings();
+   }
+
+   @GET
+   @Path("/commaSeparatedIntegers")
+   @Produces("text/plain")
+   @Override
+   public Integer[] getCommaSeparatedIntegers()
+   {
+      return super.getCommaSeparatedIntegers();
+   }
+   
+   @GET
+   @Path("/synchronizationsLookup")
+   public boolean synchronizationsLookup()
+   {
+      Synchronizations ejb = (Synchronizations) Component.getInstance("org.jboss.seam.transaction.synchronizations", ScopeType.EVENT);
+      return ejb.isAwareOfContainerTransactions();
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,101 @@
+package org.jboss.seam.example.restbay.resteasy.interfaceapplicationcomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Path("/interfaceApplicationComponentTest")
+public interface InterfaceApplicationComponentTestResource
+{
+
+   @Context
+   public void setUriInfo(UriInfo uriInfo);
+
+   @Context
+   public void setHeaders(HttpHeaders headers);
+
+   @GET
+   @Path("/echouri")
+   String echoUri();
+
+   @GET
+   @Path("/echoquery")
+   String echoQueryParam(@QueryParam("bar") String bar);
+
+   @GET
+   @Path("/echoheader")
+   String echoHeaderParam(@HeaderParam("bar") String bar);
+
+   @GET
+   @Path("/echocookie")
+   String echoCookieParam(@CookieParam("bar") String bar);
+
+   @GET
+   @Path("/echotwoparams/{1}/{2}")
+   String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
+
+   @GET
+   @Path("/echoencoded/{val}")
+   String echoEncoded(@PathParam("val") @Encoded String val);
+
+   @POST
+   @Path("/echoformparams")
+   @Consumes("application/x-www-form-urlencoded")
+   String echoFormParams(MultivaluedMap<String, String> formMap);
+
+   @POST
+   @Path("/echoformparams2")
+   String echoFormParams2(@FormParam("foo") String[] foo);
+
+   @POST
+   @Path("/echoformparams3")
+   String echoFormParams3(@Form TestForm form);
+
+   @Path("/foo/bar/{baz}")
+   SubResource getBar(@PathParam("baz") String baz);
+
+   @GET
+   @Path("/convertDate/{isoDate}")
+   long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
+
+   @GET
+   @Path("/trigger/unsupported")
+   String throwException();
+
+   @GET
+   @Path("/commaSeparated")
+   @Produces("text/csv")
+   List<String[]> getCommaSeparated();
+
+   @GET
+   @Path("/commaSeparatedStrings")
+   @Produces("text/plain")
+   String[] getCommaSeparatedStrings();
+
+   @GET
+   @Path("/commaSeparatedIntegers")
+   @Produces("text/plain")
+   Integer[] getCommaSeparatedIntegers();
+
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceapplicationcomponent/InterfaceApplicationComponentTestResourceBean.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,32 @@
+package org.jboss.seam.example.restbay.resteasy.interfaceapplicationcomponent;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("interfaceApplicationComponentTestResource")
+ at Scope(ScopeType.EVENT)
+public class InterfaceApplicationComponentTestResourceBean extends TestResource implements InterfaceApplicationComponentTestResource
+{
+
+   @In
+   TestComponent testComponent;
+
+   @Override
+   public List<String[]> getCommaSeparated()
+   {
+      assert headers.getAcceptableMediaTypes().size() == 2;
+      assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+      assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
+      return testComponent.getCommaSeparated();
+   }
+
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,101 @@
+package org.jboss.seam.example.restbay.resteasy.interfaceeventcomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Path("/interfaceEventComponentTest")
+public interface InterfaceEventComponentTestResource
+{
+
+   @Context
+   public void setUriInfo(UriInfo uriInfo);
+
+   @Context
+   public void setHeaders(HttpHeaders headers);
+
+   @GET
+   @Path("/echouri")
+   String echoUri();
+
+   @GET
+   @Path("/echoquery")
+   String echoQueryParam(@QueryParam("bar") String bar);
+
+   @GET
+   @Path("/echoheader")
+   String echoHeaderParam(@HeaderParam("bar") String bar);
+
+   @GET
+   @Path("/echocookie")
+   String echoCookieParam(@CookieParam("bar") String bar);
+
+   @GET
+   @Path("/echotwoparams/{1}/{2}")
+   String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
+
+   @GET
+   @Path("/echoencoded/{val}")
+   String echoEncoded(@PathParam("val") @Encoded String val);
+
+   @POST
+   @Path("/echoformparams")
+   @Consumes("application/x-www-form-urlencoded")
+   String echoFormParams(MultivaluedMap<String, String> formMap);
+
+   @POST
+   @Path("/echoformparams2")
+   String echoFormParams2(@FormParam("foo") String[] foo);
+
+   @POST
+   @Path("/echoformparams3")
+   String echoFormParams3(@Form TestForm form);
+
+   @Path("/foo/bar/{baz}")
+   SubResource getBar(@PathParam("baz") String baz);
+
+   @GET
+   @Path("/convertDate/{isoDate}")
+   long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
+
+   @GET
+   @Path("/trigger/unsupported")
+   String throwException();
+
+   @GET
+   @Path("/commaSeparated")
+   @Produces("text/csv")
+   List<String[]> getCommaSeparated();
+
+   @GET
+   @Path("/commaSeparatedStrings")
+   @Produces("text/plain")
+   String[] getCommaSeparatedStrings();
+
+   @GET
+   @Path("/commaSeparatedIntegers")
+   @Produces("text/plain")
+   Integer[] getCommaSeparatedIntegers();
+
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfaceeventcomponent/InterfaceEventComponentTestResourceBean.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,32 @@
+package org.jboss.seam.example.restbay.resteasy.interfaceeventcomponent;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("interfaceEventComponentTestResource")
+ at Scope(ScopeType.EVENT)
+public class InterfaceEventComponentTestResourceBean extends TestResource implements InterfaceEventComponentTestResource
+{
+
+   @In
+   TestComponent testComponent;
+
+   @Override
+   public List<String[]> getCommaSeparated()
+   {
+      assert headers.getAcceptableMediaTypes().size() == 2;
+      assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+      assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
+      return testComponent.getCommaSeparated();
+   }
+   
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,101 @@
+package org.jboss.seam.example.restbay.resteasy.interfacestatelesscomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Path("/interfaceStatelessComponentTest")
+public interface InterfaceStatelessComponentTestResource
+{
+
+   @Context
+   public void setUriInfo(UriInfo uriInfo);
+
+   @Context
+   public void setHeaders(HttpHeaders headers);
+
+   @GET
+   @Path("/echouri")
+   String echoUri();
+
+   @GET
+   @Path("/echoquery")
+   String echoQueryParam(@QueryParam("bar") String bar);
+
+   @GET
+   @Path("/echoheader")
+   String echoHeaderParam(@HeaderParam("bar") String bar);
+
+   @GET
+   @Path("/echocookie")
+   String echoCookieParam(@CookieParam("bar") String bar);
+
+   @GET
+   @Path("/echotwoparams/{1}/{2}")
+   String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
+
+   @GET
+   @Path("/echoencoded/{val}")
+   String echoEncoded(@PathParam("val") @Encoded String val);
+
+   @POST
+   @Path("/echoformparams")
+   @Consumes("application/x-www-form-urlencoded")
+   String echoFormParams(MultivaluedMap<String, String> formMap);
+
+   @POST
+   @Path("/echoformparams2")
+   String echoFormParams2(@FormParam("foo") String[] foo);
+
+   @POST
+   @Path("/echoformparams3")
+   String echoFormParams3(@Form TestForm form);
+
+   @Path("/foo/bar/{baz}")
+   SubResource getBar(@PathParam("baz") String baz);
+
+   @GET
+   @Path("/convertDate/{isoDate}")
+   long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
+
+   @GET
+   @Path("/trigger/unsupported")
+   String throwException();
+
+   @GET
+   @Path("/commaSeparated")
+   @Produces("text/csv")
+   List<String[]> getCommaSeparated();
+
+   @GET
+   @Path("/commaSeparatedStrings")
+   @Produces("text/plain")
+   String[] getCommaSeparatedStrings();
+
+   @GET
+   @Path("/commaSeparatedIntegers")
+   @Produces("text/plain")
+   Integer[] getCommaSeparatedIntegers();
+
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/interfacestatelesscomponent/InterfaceStatelessComponentTestResourceBean.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,153 @@
+package org.jboss.seam.example.restbay.resteasy.interfacestatelesscomponent;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+
+import javax.ws.rs.core.MultivaluedMap;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("interfaceStatelessComponentTestResource")
+ at Scope(ScopeType.EVENT)
+public class InterfaceStatelessComponentTestResourceBean extends TestResource implements InterfaceStatelessComponentTestResource
+{
+
+   protected final String INSTANCE_CODE_KEY = "interfaceStatelessComponentTestResource.instanceCode";
+
+   // We want to verify that this is really stateless (Seam doesn't pool POJO instances, so that should work)
+   public InterfaceStatelessComponentTestResourceBean()
+   {
+      Integer instanceCode;
+      if ((instanceCode = (Integer)Contexts.getApplicationContext().get(INSTANCE_CODE_KEY)) != null)
+      {
+         assert !instanceCode.equals(hashCode());
+      }
+      Contexts.getApplicationContext().set(INSTANCE_CODE_KEY, hashCode());
+   }
+
+   protected void assertStateless()
+   {
+      assert !Contexts.getApplicationContext().get(INSTANCE_CODE_KEY).equals(hashCode());
+   }
+
+   @In
+   TestComponent testComponent;
+
+   @Override
+   public String echoUri()
+   {
+      assertStateless();
+      return super.echoUri();
+   }
+
+   @Override
+   public String echoQueryParam(String bar)
+   {
+      assertStateless();
+      return super.echoQueryParam(bar);
+   }
+
+   @Override
+   public String echoHeaderParam(String bar)
+   {
+      assertStateless();
+      return super.echoHeaderParam(bar);
+   }
+
+   @Override
+   public String echoCookieParam(String bar)
+   {
+      assertStateless();
+      return super.echoCookieParam(bar);
+   }
+
+   @Override
+   public String echoTwoParams(String one, String two)
+   {
+      assertStateless();
+      return super.echoTwoParams(one, two);
+   }
+
+   @Override
+   public String echoEncoded(String val)
+   {
+      assertStateless();
+      return super.echoEncoded(val);
+   }
+
+   @Override
+   public String echoFormParams(MultivaluedMap<String, String> formMap)
+   {
+      assertStateless();
+      return super.echoFormParams(formMap);
+   }
+
+   @Override
+   public String echoFormParams2(String[] foo)
+   {
+      assertStateless();
+      return super.echoFormParams2(foo);
+   }
+
+   @Override
+   public String echoFormParams3(TestForm form)
+   {
+      assertStateless();
+      return super.echoFormParams3(form);
+   }
+
+   @Override
+   public SubResource getBar(String baz)
+   {
+      assertStateless();
+      return super.getBar(baz);
+   }
+
+   @Override
+   public long convertPathParam(GregorianCalendar isoDate)
+   {
+      assertStateless();
+      return super.convertPathParam(isoDate);
+   }
+
+   @Override
+   public String throwException()
+   {
+      assertStateless();
+      return super.throwException();
+   }
+
+   @Override
+   public List<String[]> getCommaSeparated()
+   {
+      assertStateless();
+      assert headers.getAcceptableMediaTypes().size() == 2;
+      assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+      assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
+      return testComponent.getCommaSeparated();
+   }
+
+   @Override
+   public String[] getCommaSeparatedStrings()
+   {
+      assertStateless();
+      return super.getCommaSeparatedStrings();
+   }
+
+   @Override
+   public Integer[] getCommaSeparatedIntegers()
+   {
+      assertStateless();
+      return super.getCommaSeparatedIntegers();
+   }
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/plain/PlainRootResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/plain/PlainRootResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/plain/PlainRootResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,20 @@
+package org.jboss.seam.example.restbay.resteasy.plain;
+
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.GET;
+
+/**
+ * @author Christian Bauer
+ */
+ at Path("/")
+public class PlainRootResource
+{
+
+   @GET
+   @Produces("text/plain")
+   public String getResource()
+   {
+      return "Root";
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/plain/PlainTestResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,142 @@
+package org.jboss.seam.example.restbay.resteasy.plain;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.MultivaluedMap;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Path("/plainTest")
+public class PlainTestResource extends TestResource
+{
+
+   @GET
+   @Path("/echouri")
+   @Override
+   public String echoUri()
+   {
+      return super.echoUri();
+   }
+
+   @GET
+   @Path("/echoquery")
+   @Override
+   public String echoQueryParam(@QueryParam("bar") String bar)
+   {
+      return super.echoQueryParam(bar);
+   }
+
+   @GET
+   @Path("/echoheader")
+   @Override
+   public String echoHeaderParam(@HeaderParam("bar") String bar)
+   {
+      return super.echoHeaderParam(bar);
+   }
+
+   @GET
+   @Path("/echocookie")
+   @Override
+   public String echoCookieParam(@CookieParam("bar") String bar)
+   {
+      return super.echoCookieParam(bar);
+   }
+
+   @GET
+   @Path("/echotwoparams/{1}/{2}")
+   @Override
+   public String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two)
+   {
+      return super.echoTwoParams(one, two);
+   }
+
+   @GET
+   @Path("/echoencoded/{val}")
+   @Override
+   public String echoEncoded(@PathParam("val") @Encoded String val)
+   {
+      return super.echoEncoded(val);
+   }
+
+   @POST
+   @Path("/echoformparams")
+   @Consumes("application/x-www-form-urlencoded")
+   @Override
+   public String echoFormParams(MultivaluedMap<String, String> formMap)
+   {
+      return super.echoFormParams(formMap);
+   }
+
+   @POST
+   @Path("/echoformparams2")
+   @Override
+   public String echoFormParams2(@FormParam("foo") String[] foo)
+   {
+      return super.echoFormParams2(foo);
+   }
+
+   @POST
+   @Path("/echoformparams3")
+   @Override
+   public String echoFormParams3(@Form TestForm form)
+   {
+      return super.echoFormParams3(form);
+   }
+
+   @Path("/foo/bar/{baz}")
+   @Override
+   public SubResource getBar(@PathParam("baz") String baz)
+   {
+      return super.getBar(baz);
+   }
+
+   @GET
+   @Path("/convertDate/{isoDate}")
+   @Override
+   public long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate)
+   {
+      return super.convertPathParam(isoDate);
+   }
+
+   @GET
+   @Path("/trigger/unsupported")
+   @Override
+   public String throwException()
+   {
+      return super.throwException();
+   }
+
+   @GET
+   @Path("/commaSeparated")
+   @Produces("text/csv")
+   @Override
+   public List<String[]> getCommaSeparated()
+   {
+      return super.getCommaSeparated();
+   }
+
+   @GET
+   @Path("/commaSeparatedStrings")
+   @Produces("text/plain")
+   @Override
+   public String[] getCommaSeparatedStrings()
+   {
+      return super.getCommaSeparatedStrings();
+   }
+
+   @GET
+   @Path("/commaSeparatedIntegers")
+   @Produces("text/plain")
+   @Override
+   public Integer[] getCommaSeparatedIntegers()
+   {
+      return super.getCommaSeparatedIntegers();
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/ApplicationComponentTestProvider.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,64 @@
+package org.jboss.seam.example.restbay.resteasy.provider;
+
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.ScopeType;
+
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("applicationComponentTestProvider")
+ at Scope(ScopeType.APPLICATION)
+ at Provider
+ at Produces("text/plain")
+public class ApplicationComponentTestProvider implements MessageBodyWriter
+{
+
+   // TODO: Retracted support for Seam component providers, injection shouldn't happen, see https://jira.jboss.org/jira/browse/JBSEAM-4247
+   @In
+   TestComponent testComponent = new TestComponent();
+
+   public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
+   {
+      return aClass.isArray() && (aClass.getComponentType().equals(String.class)) ;
+   }
+
+   public long getSize(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
+   {
+      return -1;
+   }
+
+   public void writeTo(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType,
+                       MultivaluedMap httpHeaders, OutputStream outputStream) throws IOException, WebApplicationException
+   {
+      String[] strings = (String[])o;
+
+      StringBuilder line = new StringBuilder();
+
+      line.append(testComponent.getTestString()).append(",");
+
+      for (String string : strings)
+      {
+         line.append(string).append(",");
+      }
+      if (line.length()>0) {
+         line.deleteCharAt(line.length() - 1);
+      }
+
+      outputStream.write(line.toString().getBytes());
+
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponenTestProviderBean.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,58 @@
+package org.jboss.seam.example.restbay.resteasy.provider;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.MediaType;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("interfaceApplicationComponentTestProvider")
+ at Scope(ScopeType.APPLICATION)
+public class InterfaceApplicationComponenTestProviderBean implements InterfaceApplicationComponentTestProvider
+{
+
+   @In
+   TestComponent testComponent;
+
+   public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
+   {
+      return aClass.isArray() && (aClass.getComponentType().equals(Integer.class)) ;
+   }
+
+   public long getSize(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
+   {
+      return -1;
+   }
+
+   public void writeTo(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType,
+                       MultivaluedMap httpHeaders, OutputStream outputStream) throws IOException, WebApplicationException
+   {
+      Integer[] integers = (Integer[])o;
+
+      StringBuilder line = new StringBuilder();
+
+      line.append(testComponent.getTestString()).append(",");
+
+      for (Integer integer : integers)
+      {
+         line.append(integer).append(",");
+      }
+      if (line.length()>0) {
+         line.deleteCharAt(line.length() - 1);
+      }
+
+      outputStream.write(line.toString().getBytes());
+
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/InterfaceApplicationComponentTestProvider.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,15 @@
+package org.jboss.seam.example.restbay.resteasy.provider;
+
+import javax.ws.rs.Produces;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+
+/**
+ * @author Christian Bauer
+ */
+ at Provider
+ at Produces("text/plain")
+public interface InterfaceApplicationComponentTestProvider extends MessageBodyWriter
+{
+
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/PlainResteasyStringConverterProvider.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,42 @@
+package org.jboss.seam.example.restbay.resteasy.provider;
+
+import org.jboss.resteasy.spi.StringConverter;
+
+import javax.ws.rs.ext.Provider;
+import java.util.GregorianCalendar;
+import java.text.SimpleDateFormat;
+import java.text.ParseException;
+
+/**
+ * Converts QueryParam etc. strings to GregorianCalendar if they are in ISO date format
+ *
+ * @author Christian Bauer
+ */
+ at Provider
+public class PlainResteasyStringConverterProvider implements StringConverter<GregorianCalendar>
+{
+   public static final String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
+
+   public GregorianCalendar fromString(String s)
+   {
+      SimpleDateFormat sdf = new SimpleDateFormat(ISO_FORMAT);
+      GregorianCalendar cal = new GregorianCalendar();
+      try
+      {
+         cal.setTime(sdf.parse(s));
+      }
+      catch (ParseException e)
+      {
+         throw new RuntimeException(e);
+      }
+      return cal;
+
+   }
+
+   // TODO: RESTEasy doesn't seem to use that at all
+   public String toString(GregorianCalendar gregorianCalendar)
+   {
+      SimpleDateFormat sdf = new SimpleDateFormat(ISO_FORMAT);
+      return sdf.format(gregorianCalendar.getTime());
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/provider/PlainTestProvider.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,50 @@
+package org.jboss.seam.example.restbay.resteasy.provider;
+
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Provider
+ at Produces("text/csv")
+public class PlainTestProvider implements MessageBodyWriter
+{
+
+   public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
+   {
+      return List.class.isAssignableFrom(aClass);
+   }
+
+   public long getSize(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType)
+   {
+      return -1;
+   }
+
+   public void writeTo(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType,
+                       MultivaluedMap httpHeaders, OutputStream outputStream) throws IOException, WebApplicationException
+   {
+      List<String[]> lines = (List<String[]>) o;
+      StringBuilder csv = new StringBuilder();
+      for (String[] line : lines)
+      {
+         for (String field : line)
+         {
+            csv.append(field).append(",");
+         }
+         csv.deleteCharAt(csv.length() - 1);
+         csv.append("\r\n");
+      }
+      outputStream.write(csv.toString().getBytes());
+
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelesscomponent/StatelessComponentTestResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,199 @@
+package org.jboss.seam.example.restbay.resteasy.statelesscomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.contexts.Contexts;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MultivaluedMap;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("statelessComponentTestResource")
+ at Path("/statelessComponentTest")
+ at Scope(ScopeType.STATELESS)
+public class StatelessComponentTestResource extends TestResource
+{
+
+   protected final String INSTANCE_CODE_KEY = "statelessComponentTestResource.instanceCode";
+
+   // We want to verify that this is really stateless (Seam doesn't pool POJO instances, so that should work)
+   public StatelessComponentTestResource()
+   {
+      Integer instanceCode;
+      if ((instanceCode = (Integer)Contexts.getApplicationContext().get(INSTANCE_CODE_KEY)) != null)
+      {
+         assert !instanceCode.equals(hashCode());
+      }
+      Contexts.getApplicationContext().set(INSTANCE_CODE_KEY, hashCode());
+   }
+
+   protected void assertStateless()
+   {
+      assert !Contexts.getApplicationContext().get(INSTANCE_CODE_KEY).equals(hashCode());
+   }
+
+   @In
+   TestComponent testComponent;
+
+   @GET
+   @Path("/echouri")
+   @Override
+   public String echoUri()
+   {
+      assertStateless();
+      return super.echoUri();
+   }
+
+   @GET
+   @Path("/echoquery")
+   @Override
+   public String echoQueryParam(@QueryParam("bar") String bar)
+   {
+      assertStateless();
+      return super.echoQueryParam(bar);
+   }
+
+   @GET
+   @Path("/echoheader")
+   @Override
+   public String echoHeaderParam(@HeaderParam("bar") String bar)
+   {
+      assertStateless();
+      return super.echoHeaderParam(bar);
+   }
+
+   @GET
+   @Path("/echocookie")
+   @Override
+   public String echoCookieParam(@CookieParam("bar") String bar)
+   {
+      assertStateless();
+      return super.echoCookieParam(bar);
+   }
+
+   @GET
+   @Path("/echotwoparams/{1}/{2}")
+   @Override
+   public String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two)
+   {
+      assertStateless();
+      return super.echoTwoParams(one, two);
+   }
+
+   @GET
+   @Path("/echoencoded/{val}")
+   @Override
+   public String echoEncoded(@PathParam("val") @Encoded String val)
+   {
+      assertStateless();
+      return super.echoEncoded(val);
+   }
+
+   @POST
+   @Path("/echoformparams")
+   @Consumes("application/x-www-form-urlencoded")
+   @Override
+   public String echoFormParams(MultivaluedMap<String, String> formMap)
+   {
+      assertStateless();
+      return super.echoFormParams(formMap);
+   }
+
+   @POST
+   @Path("/echoformparams2")
+   @Override
+   public String echoFormParams2(@FormParam("foo") String[] foo)
+   {
+      assertStateless();
+      return super.echoFormParams2(foo);
+   }
+
+   @POST
+   @Path("/echoformparams3")
+   @Override
+   public String echoFormParams3(@Form TestForm form)
+   {
+      assertStateless();
+      return super.echoFormParams3(form);
+   }
+
+   @Path("/foo/bar/{baz}")
+   @Override
+   public SubResource getBar(@PathParam("baz") String baz)
+   {
+      assertStateless();
+      return super.getBar(baz);
+   }
+
+   @GET
+   @Path("/convertDate/{isoDate}")
+   @Override
+   public long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate)
+   {
+      assertStateless();
+      return super.convertPathParam(isoDate);
+   }
+
+   @GET
+   @Path("/trigger/unsupported")
+   @Override
+   public String throwException()
+   {
+      assertStateless();
+      return super.throwException();
+   }
+
+   @GET
+   @Path("/commaSeparated")
+   @Produces("text/csv")
+   @Override
+   public List<String[]> getCommaSeparated()
+   {
+      assertStateless();
+      assert headers.getAcceptableMediaTypes().size() == 2;
+      assert headers.getAcceptableMediaTypes().get(0).toString().equals("text/plain");
+      assert headers.getAcceptableMediaTypes().get(1).toString().equals("text/csv");
+      return testComponent.getCommaSeparated();
+   }
+
+   @GET
+   @Path("/commaSeparatedStrings")
+   @Produces("text/plain")
+   @Override
+   public String[] getCommaSeparatedStrings()
+   {
+      assertStateless();
+      return super.getCommaSeparatedStrings();
+   }
+
+   @GET
+   @Path("/commaSeparatedIntegers")
+   @Produces("text/plain")
+   @Override
+   public Integer[] getCommaSeparatedIntegers()
+   {
+      assertStateless();
+      return super.getCommaSeparatedIntegers();
+   }
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,106 @@
+package org.jboss.seam.example.restbay.resteasy.statelessejb;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ejb.Local;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.Path;
+import javax.ws.rs.GET;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.POST;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.Produces;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Local
+ at Path("/statelessEjbTest")
+public interface StatelessEjbTestResource
+{
+
+   // TODO: RESTEasy can not inject setter/fields on plain EJBs, see https://jira.jboss.org/jira/browse/RESTEASY-151
+   // That's why we have to do it through parameter injection below
+   @Context
+   public void setUriInfo(UriInfo uriInfo);
+
+   @Context
+   public void setHeaders(HttpHeaders headers);
+
+
+   @GET
+   @Path("/echouri")
+   String echoUri(@Context UriInfo uriInfo); // TODO
+
+   @GET
+   @Path("/echoquery")
+   String echoQueryParam(@QueryParam("bar") String bar);
+
+   @GET
+   @Path("/echoheader")
+   String echoHeaderParam(@HeaderParam("bar") String bar);
+
+   @GET
+   @Path("/echocookie")
+   String echoCookieParam(@CookieParam("bar") String bar);
+
+   @GET
+   @Path("/echotwoparams/{1}/{2}")
+   String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
+
+   @GET
+   @Path("/echoencoded/{val}")
+   String echoEncoded(@PathParam("val") @Encoded String val);
+
+   @POST
+   @Path("/echoformparams")
+   @Consumes("application/x-www-form-urlencoded")
+   String echoFormParams(MultivaluedMap<String, String> formMap);
+
+   @POST
+   @Path("/echoformparams2")
+   String echoFormParams2(@FormParam("foo") String[] foo);
+
+   @POST
+   @Path("/echoformparams3")
+   String echoFormParams3(@Form TestForm form);
+
+   @Path("/foo/bar/{baz}")
+   SubResource getBar(@PathParam("baz") String baz);
+
+   @GET
+   @Path("/convertDate/{isoDate}")
+   long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
+
+   @GET
+   @Path("/trigger/unsupported")
+   String throwException();
+
+   @GET
+   @Path("/commaSeparated")
+   @Produces("text/csv")
+   List<String[]> getCommaSeparated(@Context HttpHeaders headers); // TODO
+
+   @GET
+   @Path("/commaSeparatedStrings")
+   @Produces("text/plain")
+   String[] getCommaSeparatedStrings();
+
+   @GET
+   @Path("/commaSeparatedIntegers")
+   @Produces("text/plain")
+   Integer[] getCommaSeparatedIntegers();
+
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejb/StatelessEjbTestResourceBean.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,35 @@
+package org.jboss.seam.example.restbay.resteasy.statelessejb;
+
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+
+import javax.ejb.Stateless;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Stateless
+public class StatelessEjbTestResourceBean extends TestResource implements StatelessEjbTestResource
+{
+
+   @javax.annotation.Resource // EJB injection!
+   javax.ejb.SessionContext ejbSessionContext;
+
+
+   public String echoUri(@Context UriInfo uriInfo)
+   {
+      assert ejbSessionContext != null; // Ensure this is executed in the EJB container
+      setUriInfo(uriInfo);
+      return super.echoUri();
+   }
+
+   public List<String[]> getCommaSeparated(@Context HttpHeaders headers)
+   {
+      setHeaders(headers);
+      return super.getCommaSeparated();
+   }
+
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResource.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,105 @@
+package org.jboss.seam.example.restbay.resteasy.statelessejbcomponent;
+
+import org.jboss.resteasy.annotations.Form;
+import org.jboss.seam.example.restbay.resteasy.TestForm;
+import org.jboss.seam.example.restbay.resteasy.SubResource;
+
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.GET;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Encoded;
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.UriInfo;
+import javax.ejb.Local;
+import java.util.List;
+import java.util.GregorianCalendar;
+
+/**
+ * @author Christian Bauer
+ */
+ at Local
+ at Path("/statelessEjbComponentTest")
+public interface StatelessEjbComponentTestResource
+{
+   // TODO: RESTEasy can not inject setter/fields on plain EJBs, see https://jira.jboss.org/jira/browse/RESTEASY-151
+   // That's why we have to do it through parameter injection below
+   @Context
+   public void setUriInfo(UriInfo uriInfo);
+
+   @Context
+   public void setHeaders(HttpHeaders headers);
+
+
+   @GET
+   @Path("/echouri")
+   String echoUri(@Context UriInfo uriInfo); // TODO
+
+   @GET
+   @Path("/echoquery")
+   String echoQueryParam(@QueryParam("bar") String bar);
+
+   @GET
+   @Path("/echoheader")
+   String echoHeaderParam(@HeaderParam("bar") String bar);
+
+   @GET
+   @Path("/echocookie")
+   String echoCookieParam(@CookieParam("bar") String bar);
+
+   @GET
+   @Path("/echotwoparams/{1}/{2}")
+   String echoTwoParams(@PathParam("1") String one, @PathParam("2") String two);
+
+   @GET
+   @Path("/echoencoded/{val}")
+   String echoEncoded(@PathParam("val") @Encoded String val);
+
+   @POST
+   @Path("/echoformparams")
+   @Consumes("application/x-www-form-urlencoded")
+   String echoFormParams(MultivaluedMap<String, String> formMap);
+
+   @POST
+   @Path("/echoformparams2")
+   String echoFormParams2(@FormParam("foo") String[] foo);
+
+   @POST
+   @Path("/echoformparams3")
+   String echoFormParams3(@Form TestForm form);
+
+   @Path("/foo/bar/{baz}")
+   SubResource getBar(@PathParam("baz") String baz);
+
+   @GET
+   @Path("/convertDate/{isoDate}")
+   long convertPathParam(@PathParam("isoDate") GregorianCalendar isoDate);
+
+   @GET
+   @Path("/trigger/unsupported")
+   String throwException();
+
+   @GET
+   @Path("/commaSeparated")
+   @Produces("text/csv")
+   List<String[]> getCommaSeparated(@Context HttpHeaders headers); // TODO
+
+   @GET
+   @Path("/commaSeparatedStrings")
+   @Produces("text/plain")
+   String[] getCommaSeparatedStrings();
+
+   @GET
+   @Path("/commaSeparatedIntegers")
+   @Produces("text/plain")
+   Integer[] getCommaSeparatedIntegers();
+
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/statelessejbcomponent/StatelessEjbComponentTestResourceBean.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,45 @@
+package org.jboss.seam.example.restbay.resteasy.statelessejbcomponent;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.example.restbay.resteasy.TestComponent;
+import org.jboss.seam.example.restbay.resteasy.TestResource;
+
+import javax.ejb.Stateless;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+import java.util.List;
+
+/**
+ * @author Christian Bauer
+ */
+ at Name("statelessEjbComponentTestResource")
+ at Scope(ScopeType.STATELESS)
+ at Stateless
+public class StatelessEjbComponentTestResourceBean extends TestResource implements StatelessEjbComponentTestResource
+{
+
+   @javax.annotation.Resource // EJB injection!
+   javax.ejb.SessionContext ejbSessionContext;
+
+   @In
+   TestComponent testComponent;
+
+   public String echoUri(@Context UriInfo uriInfo)
+   {
+      assert ejbSessionContext != null; // Ensure this is executed in the EJB container
+      setUriInfo(uriInfo);
+      return super.echoUri();
+   }
+
+   public List<String[]> getCommaSeparated(@Context HttpHeaders headers)
+   {
+      setHeaders(headers);
+      super.getCommaSeparated(); // Ignore return, just to run the assertions
+      return testComponent.getCommaSeparated();
+   }
+
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/subresource/Garage.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/subresource/Garage.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/subresource/Garage.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,24 @@
+package org.jboss.seam.example.restbay.resteasy.subresource;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.jboss.seam.Component;
+import org.jboss.seam.annotations.Name;
+
+ at Path("/garage")
+ at Produces("text/plain")
+ at Name("garage")
+public class Garage
+{
+   @GET
+   public String getInfo() {
+      return "garage";
+   }
+   
+   @Path("/1")
+   public Vehicle getVehicle() {
+      return (Vehicle) Component.getInstance(Vehicle.class);
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/subresource/Vehicle.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/subresource/Vehicle.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/java/org/jboss/seam/example/restbay/resteasy/subresource/Vehicle.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,16 @@
+package org.jboss.seam.example.restbay.resteasy.subresource;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Produces;
+
+import org.jboss.seam.annotations.Name;
+
+ at Name("vehicle")
+ at Produces("text/plain")
+public class Vehicle
+{
+   @GET
+   public String getInfo() {
+      return "Honda";
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/META-INF/ejb-jar.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/META-INF/ejb-jar.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/META-INF/ejb-jar.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" 
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+         version="3.0">
+         
+   <interceptors>
+     <interceptor>
+       <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
+     </interceptor>
+   </interceptors>
+   
+   <assembly-descriptor>
+      <interceptor-binding>
+         <ejb-name>*</ejb-name>
+         <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
+      </interceptor-binding>
+   </assembly-descriptor>
+   
+</ejb-jar>

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/META-INF/persistence.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/META-INF/persistence.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/META-INF/persistence.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
+             version="1.0">
+   <persistence-unit name="restbayDatabase">
+      <provider>org.hibernate.ejb.HibernatePersistence</provider>
+      <jta-data-source>java:/restbayDatasource</jta-data-source>
+      <properties>
+         <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+         <property name="hibernate.show_sql" value="false"/>
+         <!-- These are the default for JBoss EJB3, but not for HEM: -->
+         <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
+         <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
+         <property name="jboss.entity.manager.factory.jndi.name" value="java:/restbayEntityManagerFactory"/>
+      </properties>
+   </persistence-unit>
+</persistence>
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/import.sql
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/import.sql	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/import.sql	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,108 @@
+insert into category (categoryId, name) values (1, 'Antiques');
+  insert into category (categoryId, name, parent_category_id) values (1001, 'Furniture', 1);
+  insert into category (categoryId, name, parent_category_id) values (1002, 'Silverware', 1);  
+
+insert into category (categoryId, name) values (2, 'Art');
+  insert into category (categoryId, name, parent_category_id) values (2001, 'Paintings', 2);
+  insert into category (categoryId, name, parent_category_id) values (2002, 'Prints', 2);
+  insert into category (categoryId, name, parent_category_id) values (2003, 'Sculptures', 2);
+
+insert into category (categoryId, name) values (3, 'Books');
+  insert into category (categoryId, name, parent_category_id) values (3001, 'Fiction', 3);
+  insert into category (categoryId, name, parent_category_id) values (3002, 'Non Fiction', 3);
+  insert into category (categoryId, name, parent_category_id) values (3003, 'Comic Books', 3);
+  insert into category (categoryId, name, parent_category_id) values (3004, 'Children', 3);
+  
+insert into category (categoryId, name) values (4, 'Cameras and Photography');
+  insert into category (categoryId, name, parent_category_id) values (4001, 'Digital Cameras', 4);
+  insert into category (categoryId, name, parent_category_id) values (4002, 'Memory Cards', 4);
+  insert into category (categoryId, name, parent_category_id) values (4003, 'Film Cameras', 4);
+  insert into category (categoryId, name, parent_category_id) values (4004, 'Video Cameras', 4);
+  
+insert into category (categoryId, name) values (5, 'Cars and Boats');
+  insert into category (categoryId, name, parent_category_id) values (5001, 'Cars', 5);
+  insert into category (categoryId, name, parent_category_id) values (5002, 'Motorcycles', 5);
+  insert into category (categoryId, name, parent_category_id) values (5003, 'Car Parts', 5);
+
+insert into category (categoryId, name) values (6, 'Cell Phones');
+  insert into category (categoryId, name, parent_category_id) values (6001, 'Mobile Phones', 6);
+  insert into category (categoryId, name, parent_category_id) values (6002, 'Mobile Accessories', 6);
+  insert into category (categoryId, name, parent_category_id) values (6003, 'Prepaid cards', 6);
+
+insert into category (categoryId, name) values (7, 'Clothing and Shoes');
+  insert into category (categoryId, name, parent_category_id) values (7001, 'Women', 7);
+  insert into category (categoryId, name, parent_category_id) values (7002, 'Men', 7);
+  insert into category (categoryId, name, parent_category_id) values (7003, 'Girls', 7);
+  insert into category (categoryId, name, parent_category_id) values (7004, 'Boys', 7);
+  insert into category (categoryId, name, parent_category_id) values (7005, 'Babies', 7);
+
+insert into category (categoryId, name) values (8, 'Computers');
+  insert into category (categoryId, name, parent_category_id) values (8001, 'Notebooks', 8);
+  insert into category (categoryId, name, parent_category_id) values (8002, 'Desktop PCs', 8);
+  insert into category (categoryId, name, parent_category_id) values (8003, 'Servers', 8);
+  insert into category (categoryId, name, parent_category_id) values (8004, 'Hardware', 8);
+  insert into category (categoryId, name, parent_category_id) values (8005, 'Software', 8);
+  
+insert into category (categoryId, name) values (9, 'Music');
+  insert into category (categoryId, name, parent_category_id) values (9001, 'CDs', 9);
+  insert into category (categoryId, name, parent_category_id) values (9002, 'Records', 9);
+
+insert into category (categoryId, name) values (10, 'Electronics');
+  insert into category (categoryId, name, parent_category_id) values (10001, 'Home Audio', 10);
+  insert into category (categoryId, name, parent_category_id) values (10002, 'MP3 Players', 10);
+  insert into category (categoryId, name, parent_category_id) values (10003, 'Television', 10);
+  insert into category (categoryId, name, parent_category_id) values (10004, 'Home theatre', 10);
+
+insert into category (categoryId, name) values (11, 'Home and Garden');
+  insert into category (categoryId, name, parent_category_id) values (11001, 'Kitchen', 11);
+  insert into category (categoryId, name, parent_category_id) values (11002, 'Real Estate', 11);
+  insert into category (categoryId, name, parent_category_id) values (11003, 'Furniture', 11);
+
+insert into category (categoryId, name) values (12, 'Musical Instruments');
+  insert into category (categoryId, name, parent_category_id) values (12001, 'Guitars', 12);
+  insert into category (categoryId, name, parent_category_id) values (12002, 'Pianos and Keyboards', 12);
+  insert into category (categoryId, name, parent_category_id) values (12003, 'Percussion', 12);
+  insert into category (categoryId, name, parent_category_id) values (12004, 'Orchestral', 12);
+
+insert into category (categoryId, name) values (13, 'Sporting goods');
+  insert into category (categoryId, name, parent_category_id) values (13001, 'Golf', 13);
+  insert into category (categoryId, name, parent_category_id) values (13002, 'Fishing', 13);
+  insert into category (categoryId, name, parent_category_id) values (13003, 'Tennis', 13);  
+
+insert into category (categoryId, name) values (14, 'Toys');
+  insert into category (categoryId, name, parent_category_id) values (14001, 'Remote control', 14);
+  insert into category (categoryId, name, parent_category_id) values (14002, 'Cars and trucks', 14);
+  insert into category (categoryId, name, parent_category_id) values (14003, 'Dolls', 14);
+  insert into category (categoryId, name, parent_category_id) values (14004, 'Educational', 14);
+
+insert into category (categoryId, name) values (15, 'Video Games');
+  insert into category (categoryId, name, parent_category_id) values (15001, 'PC', 15);
+  insert into category (categoryId, name, parent_category_id) values (15002, 'Nintendo Wii', 15);
+  insert into category (categoryId, name, parent_category_id) values (15003, 'Sony Playstation 3', 15);
+  insert into category (categoryId, name, parent_category_id) values (15004, 'XBox 360', 15);
+
+insert into account (accountId, name, feedbackScore, feedbackPercent, memberSince, location) values (1, 'honestjoe', 0, 0, CURRENT_TIMESTAMP, 'Sydney, NSW, Australia');
+insert into user (userId, username, password, account_id) values (1, 'demo', 'demo', 1);
+
+insert into account (accountId, name, feedbackScore, feedbackPercent, memberSince, location) values (2, 'bob', 0, 0, CURRENT_TIMESTAMP, 'Brisbane, QLD, Australia');
+insert into user (userId, username, password, account_id) values (2, 'bob', 'bob', 2);
+
+insert into auction (auctionId, account_id, title, description, category_Id, startingPrice, bids, endDate, status, version) values (19264723, 1, 'Whistler''s Mother, original painting by James McNeill Whistler', '+Whistler''s Mother *Arrangement in Grey and Black*: The Artist''s Mother, famous under its colloquial name Whistler''s Mother, is an 1871 oil-on-canvas painting by American-born painter James McNeill Whistler. The painting is 56.81 x 63.94 inches (144.3 x 162.4 cm), displayed in a frame of Whistler''s own design, and is currently owned by the Musée d''Orsay in Paris.', 2, 5999999.00, 0, CURRENT_TIMESTAMP, 1, 0);
+insert into auction (auctionId, account_id, title, description, category_Id, startingPrice, bids, endDate, status, version) values (62748261, 1, 'Lost Tales Volume 1 by J.R.R. Tolkien', 'THE BOOK OF LOST TALES, I, stands at the beginning of the entire conception of Middle-earth and Valinor. Here is the whole, glorious history of Middle-earth that J.R.R. Tolkien brought to mythic and dramatic life with his classic fantasy novels of the Ring Cycle.', 3, 4.50, 0, CURRENT_TIMESTAMP, 1, 0);
+insert into auction (auctionId, account_id, title, description, category_Id, startingPrice, bids, endDate, status, version) values (71234567, 1, 'Nikon D80 Digital Camera', 'The D80 features a new 10.2 effective megapixel DX Format CCD image sensor, bringing a new level of high resolution and sharp detail to the class while also providing plenty of freedom to crop creatively and print impressive enlargements. Nikon''s DX Format sensor and Nikon F bayonet lens mount design assure unprecedented compatibility across the comprehensive assortment of AF Nikkor lenses and DX Nikkor lenses designed exclusively for Nikon digital SLR cameras.', 4001, 899, 0, CURRENT_TIMESTAMP, 1, 0);
+insert into auction (auctionId, account_id, title, description, category_Id, startingPrice, bids, endDate, status, version) values (73219532, 1, 'Pontiac Firebird Trans Am T-top', 'In good condition, this car has had some custom work done on it.', 5001, 199000, 0, CURRENT_TIMESTAMP, 1, 0);
+
+insert into auctionImage (imageId, auction_id, data) values (1, 19264723, '89504E470D0A1A0A0000000D49484452000000C8000000B7080300000060F2E1B80000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C00000300504C5445956836B5874746423BCAA6764A4541A67636CAA5695B5653D8AC75D5A967E5B877F8D699ECC589BA9877BB9457D9B687865419767267A39C8E3A3532DAB578E8C996A88557AB8764885922CAA884E5BB87030203716D63F9E8B6504B466D6962CDA45B615D54D9CEB0B48A67DBC78D956A44413B3899958E9B724634291469655C513211956527FCE7A9764817ABA49AB8B4A8867B69F4CB888B6335A47B574437229B755621180FE7C27B845933F7DAA7171211DAB99527221835302B8B6445AD8348C39D75BDA56D302B27DAB369514732FEF9CB7B542759544C2B2722BB8C5255514BC4945AD3AD856239128A8479F2CE957B55339E6F38FEFCD5694624ECD5A8726A5BEDD6B4AF833B764B2365615A8B6027EAD79A928B77684219AB7B40C59C63FCFBE7EACCA4BC8D5B93621B0F0909BB9248B48C51CC9C63C5964BFBE19E645448C493533A2F1AB2AEA6C59B5CA37B416D695D4A402BCFB287B4946CC49D6BF7D48FFDEEC255442!
 7AC7C4BBC9361F3DCB61910099D8766B38C5CB38451CC9B5BA27340C59562656155E3D9C5A37D62ADA9A2A37B4BBC946C7C4F185D594FC49B51B58D71CFC0A5CCB477B493627B786FEFE6A5BD9C6E865C41A99476BD9B61CC9D6BE8D38CFDF1B5CBB7966A6354776346C49E81956D51B17D448B836DDECFC48A6A52C38D57A3744BCBAC9030260D634A36BCA2852B1F0DF2D0A69F8258785A40AD8F67C8B06AA9A4908F5C25CB9B53724931EFE4B1E8CDB2B2AC9CAB8C6EB2855E9B927E6753397B715D555144EDE6C4D5AD918D755AC4956C594219634C44754410BEA25BB59C6BC08D49544D4EB9B49D523A21C9965CD3A1665C534566604C673A20584E38140C0FCA9651453C3D896F489F6D44F9EED99D6F2D877F8F7C75896D6A53746C79B07D53332C2DB49B616C502AD19D58824E21BA8550655E61AB754BA88F5CA87540905F35412D1F69676EBB865E5E5A43E1AF643C383E6E400F2E2F2A6F70630808092B2B2D0C0C0C101010231D1B906F3FBEBAAE303131A07052BE8E6552403048414D4B22051E1F1E55564555594DE0C09D755C50EBF67C9B000059A54944415478DA947D0D405475BAFE611860401CD44140C481B9CA0888BA32201032A068CC0CA032192124709D1052888FC4829071600D1DBD6A1AD49AE24DB2D034AB5D35D9D25259C592D0E5DE56B6841!
 233C9908F75D5ACF6FFBCBFDF9901DBFAEFDEF7CC9C3973E683DF739EF7793!
 F7EE7E80
813B6CE733C24DBB2658BA727BB61D9E2E1E13145B4FF98F2F87F3C8A85DB7FC17E47F7DFFDE977AF4D7863DEE9835BBDC367CF0E0F0AAA0D9FBD7BC78EC0B8B8DDBBE376C7ED78737720B67607CE6E9C8D175E5DBF7EED57DEDE6BBDBCB71E3CBDC5D1D171DEF6795BB73BCEAD3AB861DEBCEDA7B756797D75B06AF576AF83AB0F1E38F8E21BA74FCF3B3D6FDEE9D378DF3CDCEB2ACA1C0F39CF8BF2F49C327E8A876F94E74B51535EC2B2E5A1C71F7F61E5F4C7C7BF347DFABBE385A7BD77874FBE535D5D9D5396EF2C93796E993265FCF8F118FEF277FFC8ECE13FFFF93F6921FBF37F8A1BB4FDC73FFF71D273FBC7CFF1F8C92305D0531CE7CE1D3DD97BF3E4F5DEDE9347CF1DBD7AF2C10D1B566F98BB61F4E6D1BBDE4F714C9930E1FDF7E7FCF4D34F53F0D6146CCC99F274CA1C0CCD23E5FD091352764DD8B56BF491CD4746C3C68D1EBD79F2E4A3F81E7CDDE60DB0C978EA15EE153EFBEF383CBBE3E2E202777F10B77B08C7E940ED8103B387BCBC85B9291ECE516BC2606B56329BFEC2CB640F3FFC08378CF991FF7CC0FEFC9F8FFCF9E13F3FFCF033CFBC3CFDF197A64C719F12E5EBE9BBC5D5B92EC739A7AEA2AE2CC7D9D959764876C8D939C0795ED9860D39756565CECE8E8E4F83E9C741B387C7168F2D5BE61D3A346FDE3CF802764F90793C3D65CAD3F31C7138!
 B6E0131B1CE74E98B07AF5DC37DE7074F4240E1D1D274C709CE0F1BBA727BC9F3267CEEF5E7BEDB5378076F3E60D9B374C1EFDE2FAF5B385C98E390EE90E9B563CB962935BD4FCF9F3A3C85E82AD7C41B497B1D08DECDD77DF7DE171BC88D1E0BE65CAA153F3B71C0A381570EAED804D9B56380504ACC3E3A64DEB3605B8060404DC0808983FDFD575BE6B80AB9B9BE77CCFA8299E51519EF3E1249EF4A7B03FE05451C0A9530187E6630FEDF5747575057EE79CB29C32E7436587E6391FDA7268DEA19C9C535B9C9DCB9CCBE6CDFBABDCF9100C47E2AF7F5D0DA73CE075A0E2ABD96BBD850DAECE39F1D13EC67207A715019BBEC09F3F15303F80D921FCAD43046DFE162C87020E61C0A74E6D3A255F01C3B857E4C5C7A7A7A7177738393965A7A73B39A5673BE13936F0485B2BD81327DA745871E6C94DF4B1534FAE600B1D3A0787F4F46C07D8A653F4859B3615ACC8CB5B41AF19D2D3E3E3F3F21CD25714C8E50E799B0A1C563864171717E37BF2707770C057E5ADC8F3F28AF73A7020F5E2D0412FE1447D806B4EF9D22B3E637C9E78E289D0D0D04CDC43B189A787E99119F6D076E813879F18E33366CCC68D1BC7F8C0D84EDB8B993E63323333E94DB68F8D19F3C418FA26FAEEC3F451DB6B6C7538131F09A54F7774748476848676300BEDC8EE604F845001A3C93C8C77!
 F9E0BBF137376223D1676362E298C4449FCC4C9FE84C8D3014B7E495BADABA!
 3A21E75C
AB6B4E5DDCC2850BBFFDE8231AE0460C74CC4676C387C7D0B8690F8DE630DBA24DDB6B3EE2887DD84EFA3856ECEDEC755A6DE45FE673D8670CB0307800884F1E3E4CC782BE634CE6133E99EC8BF02413DF8681D30BECEEE37365E3C619DCB2B0907DFBED421AF0C285590B179E7DF3404090A94828CB5FF74551C5DCE8EFA72DFCF6DB6F3FC29B181C801E33E6CA18FBF83EE228C78CA187191B377E34E3233CCCD8C8863A63069E32FBF65BFE25788FF8FC23767C3E6207801D8D31FC2810BA19573672A4EC9B7DF821F3E107D276087CF813FA8BDC683B71C647DFE29695B570DAF7A9AF06CA83E4C982636B6B7E6B5D59F2C2EF812F2BEB231AC5952B893E3E87A30FC34271D80E1F1E730507E630BE1547F1CAD22B57AE2CDD88750FBD01073634B40747901E7C7A0E0B3D3D0239674F0FF6C239E83BC861C84F0E1FEE0915D897E22BC78CC17AE3C62B890C0C0DFA0A01FC881FFD2C76CCE9B09365D1116187896F7C84C3FD6D167899F6FDC28B414379B506B950DFDA9A5CEF5C96A3591A2704065EB27C79B9FCCB2F2F7F7999D9F53B77AE5F0E0F3F3A39FCEF97D75F3FBAFE32E239621E82FBF5C947995DBF7CB9BCFCCBABE5E59672B3B92BBBA101028E2F379797973798CB1D4C06F3E5CB86BDD8DFD5B5F772D7F5BDD7F79299BABACCF858797CF62532600F0C0C140!
 27BE8CE569AB8E8D4779626A65E599AB5E4934F3E7967E9D2A55045B44FE261A3201885504D6666E2951957962C5C382DFAE2EC8BF2F8BC22A13EE0ED8273D5151B26C7ADBF73C2D95196E2E14B367EFCF2E5FB7FFFD873648F3DF6D8EF7FFFFBC77ECBB61EFBE3737F7CEEB7CFD1AEFFA0E4F6B4E3DCD35BCBB6575599CDB5E5E6CB00116FAE3099AA4C55E6A37293B9EE44C586B20D5B37383ACE2D4B9179F87AC852F8E258E638D771EE76CA767726E35671A7AAA2A2AA62C39DB9658E8EF5734FECBA33F9CEE4A3938F5E0EF73EFAF7F0F5978F5EA6E3E65D853F741447A7BCB111E544DC3B4BE2761F1892D7AEC811E6AE7B7BEFB99CA31B28EF8E7EEDE93953E6FCD7949FFECB5692E0FEDF5846189EE2F65FFFF537AA54FEF0DAEF7EF7C68437DE98BB1D839A3B61FB89B2131B566F9FBB1DE9CB71FB8409F3E66279C3F18DD513B09AE7B87D5E190A92D3DBB7CF7B63DEDC0D1B46AF3EB8FA08D2F77AEFF55EEBC367AF67367BF76CA4EEBFCF9E8D1CFEF7D9E1E18DA88066AFC706B3A3DEEB8F7A1F3D7A70F569DC46AFF60EF78E8B9B3D7B481EE4502438BA3EB937BFBE62AEC7A8C5CB1F7A77D2BBEF4E9AF44724F66790DA617F7EE4CF8F3C62CBF1A2E1E9338F3CFCCC1F9F7BF78547294F6FF18CF288F238E4CC12394B67CEF3E8D9A143C881F3B744454D41D21!
 EFFD21456BF79501AF5406EF7402AF7F098830798E36B5B263CFDF46B4F638!
 56A85F6C
CF99DC76B13525E9BC08D1EE980ED7AE38DD1BB4623A7BF38FAC5D3DB8FBC5A265B1F377BFD90BCBC2B59A8CF2F28C84FAE720490F10FF9E614B9F26478CA15B910D990F2E329B60F09F1D0A15387D8C321ECDEC48C92DB0A4A7C0EC55087036D8946CF9E94F3444746DFF136AB20363D89A7C8AC487EF1F1C5C574A3C761B314436CB5C5C54877F179555579E6BC3C39AA1C543E393975A88190E31DB79C3E307A97DC33FC2218D954DC5524B4B67EF169AB7CB26CCEFEC58B1F5AEC4101EF897F324A6094CD787E43A07FC29E42D82EFB9B587E23EBC066077BC67674883B11BF6837CF19A19962B21823260CE4B8CC4CEC159F903DC177B0ED508125EB50A123D4A943481D2A9B5B250BBF18543BB429FB4C91E0DAFAC5B92FAA37A4CC19B5D8FDA1F1A39C911737B258CDD3E218CA2657688DD51584C88F107C6760F9E80AA234A227E5129E405908F5197325F1CA18D1368A8F14B9C78899447CE50A520F7DD1158AA5B4CCA090FA114B49333ECAA2983BE3DB8F449BC1C2F218CA8B5452B02F98967AFAD4DC3B73670F0D1D085A91FD361871FD22799DBC2CC563FFE2F1FBDD178745EF68AC0D2FF70ABF1CEE653E7A94CACB3B2760F5BB5067A7EC826D184DEBD173B16334D68E8E5030EAD50A39621582D5F60A04968A9CBA737253757E757275757E7D7DD9DCB2B9DBB7!
 6FDF505156B69D95E4938F561D3D1AEEE58DBF128E90B41EA246004675DEB3A367C78ED41DD1587A52A31397BEB3343A31118706C96BC6D219388000C773FA342F537EFD1DD9ECDAA003C5C9D99FCA85D62FBEF874DD9DB2145F0019E53E7EF1AE09E8163C9F7E3A8596D79EFEDDEFA03AD8D3AF91E4DE40D3F0C61B4C71A35763397264EDFAB5070E1C089F7D00C12508F75ABE34CE6EC40D71C6CBEBAB2AEFB507F146EF232FBEF8221EB178A3C93A72F008DD8F6C5EFDE2EAD1EC156CB22F3F3D7AF4E9D1DB776DA7CE64FBE87964380E6515751BCACACAB6DED970A7EACE86F01DEF58CC45F5775A0F00487641C3A7C9E45A9F9EABAE97CD798831B2FFB949A377EF7AEDB539BF9B83F8CAA3ED7FF3D583F65B2CFFFD1FC825BE7328F6A4A43C3D61CB842D147771A30D4799634ACAF89F589B3665CA9C9FE6A4A450FF043BB10BBDD6EACD47366FF6C682E8BB7EFD1104DEF5A0C69B0EC807AC757A15CB8EB81D3B76BC4ABB3E78F5D5573FD8FD2A42F3ABA06EC78694A0A0F873B23BCEDEC826F10ED905A4914FCF1454CC0590FD8B478D5FBCFCB949CFFDE76F7FFB47BA61356CFFF15B1A3D862FA695E553C64FE13D92275AA82D6408BA8E689610800FA1377576441CF6941D9ACF5AA72D4F4FA135822D026D4A0A85D80908B51328E292E18594F73D00577C32873593!
 CBC7FFF4D3F847F73FF628D9BBEF221D3F3AFEA7F13FEDF2DEBED8AB31AF48!
 66CEF72A
0EF232E7599EAC83463E2D483E512FF3786894FBFEF18BF74F9AF4D0335B3E9F9198B8143541260A652C8246ACAA0594CD8246A3C9BC92A8D144472746631BFE9C1A1DFDA6060FA9D1AF68A253133F4F4CC49E546CC1DBA377E01D1AACB0D60CC509713D71FC3BF0C9A54B53D9A7F1AEC0C09E2194297881DF87822C8220A05CC13E6168E8E2ECDA211C7A78B1D7575FCDDE3E21674D78505E80CC2BE7686DAD9721DEF8C55F05D98D4F3F2D28724C791F7964D4E2FDC4C8F4973F680A0EBE160CBB9670ED9A42DBA988E855A8150ADCAF29D8034CABD5E295CE04BD5EA173D125E95A94A2B5B424295B925AECA66B7111AD9B2D2E2AAB0A4F7449E775BA55A27DC86CD5C8A7AF63F9906F61F39BF75E7FFDBDF7DE7BFD9D1DAFBC79D1D931276C7D507C806B55595571B997BC5C80D85D5D9FFCB4A0DE51E6FBD0E2C570AEE593A63F377DFA81DEF6F6F67BEDF7A4520CC945A773E9F657A95419DD1918818ACCC52529A94529954A2512B55AEAE7F79D9F3FECEB909090EE10DAF88E9EFA63FD9D1F5E1C3B769B688B16CD5AB468D1B645DBB6CDFADF6D0FD8D86D63616C35F62F7E63BFC337FA616BEC587C81F8E5DDDD5FDF53CC9CBA6DED21591D80C0B5AA72AA2C8D5EA662235CCBD5F5ED270DADB214DF87D60008B916807CA09690B54B08098EB14EA5D20182CEEA8207B!
 AE1F8B70086B45DDDABEE958694F89594E06F014746085949087B02F3FFDADFDFCF6F2C8D7378C8DC668DDD767C1B1BF977808A01D3988FD3B0D3E8CBFCFDB87DE757E247A008CEB696D23FCD9CFAE2264FB9FBE4C678B97355455590A536AFDC78264770BDF1E419871C990712E278E0580E8D4C5FC980B44BEE492452A512379DCA25E9479DCB8F56971F9392408632A919BBA512697BAF5AD12BC9F02F29E1E30EA9C90014C24448FCBBD978BEF663C7F9C1C38FF571A0602F310863C581FBD388F11852C21EFCFD4B68EF5FFCFCFFE2EFFF9716C95B33A7AE0DF094876D088A4F6E35D555D5D6D65E8E0F753008CE37DE3E73065AF77DE825F7518B173320D32FAA25EDEA76E9BD7670A294B628935C5CE0F9492D706C1082ADE624006C012924977615065DF2D9673B3F0BD95953B3B3E4B31262E8B39D256925696C6C6339101AFCAC6D8C04B6CD3DC96FA4F9DB6E7E3836FE251C09DFF117DA0290E7A71E0B70AB0B9B0B20AED773AA1AC36BCBCB8D2B920567682439DFD1171A715FBC78145CEB5D06440210ED0404060456064447D2C083AEB919AA3EDFACBC0B8D0008A850F6F6F62A98A9B5BD0AB6D9DBDB8E1B94460B7885934A43381046909D8C613A4A00807B1588F067DBB092AFFDBEF607B17E7F69290590B501BE150464AFCC54B735A83CDC7C55484F46D47!
 AF2EDA27C99C74F2B171323147E5F5879917030634094248B9616523D1C0BA!
 C2401C80
5E585E6F3D25209460E2025ED2EFFFB17D8D7B4FA5FB2FFF99FFF610F7C93DB22894A8461B7612A6C479F20B007711961635BD48C117779547D509E5C76A7A2AAB1DC2B7EC8188FA875A3E0C975D5AD1EEEDCB57ECFC47EB15D092814BAA40C880B0F53E45C49A476A54EA96CBEA05CA0949482110212D2BEEDA9B766CE9C396E1CEE33673E8FCD99CFC3663EFFD453B8FDE6374FFD86D6CA9A6D634778DAD891AEE52FBA561A16E656F0AE92120E8562C9D778D545F1D6F3E3D69E7297BB5507AD2892A1A7B4C47BD51A350E147E3FFDF4ED1C34B8702DC4ADE5CF3C474058604500A6B085C0054692A00DDCA0155D12D44E22B98037B513232E0022F9FAF971643347D8F3B4C09E22FBCD6FFE06202A1B906D0F309286C5C64A1AC64DF1C2AFC49FE32861B18405B216ADC8C88D9C460031E56CBD448C087972E10680ACAB96C9C8B516A34B7C66D2A4E92F5C6444DC9348296A2939102673889EBC8B5C0B7C2C90422304C43FA4044066721420E60F7F98F9070E854010231CC76F94D66D22215CE83620ECD0DBDC2B64581C25885D14CD2990877C1DE2E772731C18A98B92BB9EA8958391B2AA4BC55FD51A87D2F304B71B9F3EB9C994C2811023939E9B34FD15268D7BCCAD08084BC474835080A44589E8BB40BA0040DBD5C38CBC358E50906FBDF5D65B1CD6F3CFFFE9A93F!
 3DF5D41F8003409E02101E6945ADFBD9C49E56220638F6C45F44C580004509638432928BF6D8CC99C79CA3AA02728AE5724F53595550A3B9D6223831209F6E3221214E5F339EC2EF9F01642507A264C106A9AF8534C20D30C8800E6C49188EDB6A1D80A88911722D4231F3AD716F89EEF50766BF2103315230E26753C90824240C9B54281FFA95D84330C321BA96BF2A61D9CC712FCE8B32B50248B2A7497E34A831BCBCD8A9410E20679ECC2F7294FD841265144A943F4F7F6ED20BAFB42BED8C50B9E4D28DAA44C73C8CC1A1C28AF23A03A2502465D484B47F3D932B64DCB23DB065CB961DC30D36F5D8A265536D4094C340B6B15C2EA6426804D2B025909212AE177F0E81FC8B548300ACD22F9B3AF5585D94C9B5AED854E07A34EF68A0A5F672B9537C3CA2D69933EBEAEB5310B516030A732D004962381823481C2E2C6CD19AF19144FB281E00079068936A5435BD702D781312EFF1597BF6CC9AB5873D1C3F7E7CD6F190EF66914608C902EBD8918CF871B5D3BD24CDDFAE8B10A28255582525ACD4610AFA9A18D1EF993A151AA908A82BAE90CB8EE6790941976B8DC50D0E00B2E2CC991C6284B4CE5DEB8557A42DA2DA6D8C70C75291D259BD98C40A1435AF835B6A426A1462D47AEBD8F1B49D213B8F97D4A876D6586BC6A67DBC13A518C8F8DBDF0006AE856C300285!
 2D27A6A5A5F15C8E353EC034C2F9B0030161212E09CB1890B2FC9C5A79C17C!
 AFA23B3D
81B5431AA7F83C62E4C9E46A99A7EF4351E347AD81D8DF9DC41951B2C825A5E49104D722182A5126903BF91655BE2C972B6B326A7ABB9944C68D3B96F699B526C4AF645B8D2AA3A6662C021A0E3917FB6FFE26D58DB5552C7EB61A8B1ED3A852C480D3A00ED43A3B1929252C5CED0CC9F0E7410D0FE45AFFB3B628AABAA82228AF607E5E8EB927A83628CEE8E020CCBFB1F74903C4EEBED29D89FD610099FEB1A445C4718F5C2BC925A3DB2E76CA25494C23A242149D2D00A2E87E1E1227209FEDFCB866E7D8123F545D288659D1E1477E05247F9310103F5BE41D2BA262A12A8D460B624276EE4C5BB46C5B491A6303E486705494F04354FA45E3A6AE2D0A3B915C468C1C9597075E6A1CD258107EE743235D47651EEEA3DC911017FFFEE1497F9CF4C29BC8EC528A5C121108274325424176A42ADE0E444A1AE97E7EDC4C11C84E84533FC8532CBF21ECA7B8487E23D16D63CFFDEC48388E340EC42FEDB392CF8EA71DDFB6ECD89EB11C081C8D6452C2D3BC0B340246DCF38BCA6AF30CAE7979B59782E05AC5C8ECF36F749DE99AEC28731F15361E40F63F3C09AEF51E80B44B2562D4D2B9A88810ABCB08A3F82B5533D7EABDAD54D5D4A8996B4D05903DCBF6CCDA767C166F3CA889422BC56B14680440ECE2E0C177ACBDDAFD2CE4E38F672D1B77ECD89E3DC7F71C5B96B6F3B!
 31AC865A75D2640E6A21F3B75D9DABAB0FA1C06C49C178FA618564CB556838379B24CB678947BD8E2C5EEBF7F8480AC42F845F52121D7A21E5195319C47380E16B40807FA60ADB4BB46A51635F2D6B1597B58009E85080C088B8068D12C5E694123147EFDFC6C40781249E36DC7CE8F9B4BEF1E5FF6228E0508D9732C6DE7CE1A722CA0A107E218AEF5DDB1FFD9B329ACDED9B1D1C120F392E76900C3A2F182D803E20D5D771C53168F0A0B5B1C06207F244648EAC8128C111D4F232C8588FD37DC8DB587BC75D74A55191CC8D47153671E3B8EE03B6BDB67DFD99A414A1933FFF614D30867843361CBEA884E4448C8C7172222224A41C91BC70065CFB2B11F436B805153033C35C44948864AFFD9D4457BE46165BE1382E2F39CCD79759AA120A1311AD5AF6C5D3680C83CC78F725F1C66630440DA79A72B5552C9DB8DA8A52304ACE272E15A0723E2240418E1AE3575EAB899C7E0E47EC7D3FC43BE13DBC2458B962D630AB103B19529363AA8F508C95875174022561D3BF616BC0B40667DFCB14A458C30630D740803B2765398B36F4A509E83CC2C77061063ADA616AEB5A9A1C174C251062064BF7FE4B96700E49ED2D655C1B39254DD6CDE0319A425C92E1029698480DC062304844B64E6B859B3A815476C2275CC221C4C231C48F336B191E2524FE38CF8A761BCAB5EF95!
 07DF7C30BB38E8D23EF8273A69DB7AAC8B918109A0CC8A82120CBE05A8E6E2!
 9C5790EA
E5526D38EA1DA38CD50719130DFD5C1E1FA9D7AD9E235BEEE58F63FFCEE33D35F789D55F1E846949C918C6EABCE85267D684EC545A7B4455F42D2A9ED94A8541F2BBE1EF71670A038456902752C5B347519167084DBB8E7593A44ADC5808CF5B3E50FDB140980EC5C7531FC1F1FAE3AFF0D54B2ECAD1797CD5A36EBBCD50A4AE05100B21348325400326ED11EC64831C47EC760DE11D8B8432314A3430C70E83299EA65CB47B9B9FBBAF9FE1E40263D7E01EAA0FEF01E4D5661F02135D6241DEBD65B5809CC6AC6762E76AD08A49BE743EA40785F45C52F95F0F61A9E03B1CD8E8C1D9E6E28F1A3698BF75E39E07DFCEE85F7D296BD786C1C53898A5112C2BD8B114240A6AE3D1596E3FB7471DE8A1B274CA6389AF5D380115940B679EF9D13885A6EBEBE9EC4C81F5F7EFC7526F5F6760A4E54FC8658939A75E4582D62854253281211482780D4EC54A89863F17E64B81779CA06840CE137699BBD45B7052DCA984883AA55AF7F7E60D7F1BBEFAD9AB5ECD88B8CD7101B9010824140BA6301E4C54DEE65514F17CB0B5CAB4DA6C0B8C0B8DAA17483E0E15A1E6FAA208DF8FABA797AEC7F843142057ABB5AC2A22C58806735B3D9134041CF4EF308AC6624897426243020DDC3A5FBCC61287F607DD5534F711C7F9328B7F93D6869AC194102AF59F5FADDF7BC47BFFAE1F9B4637B!
 5E3CF622C2F7CE6F542A3E51468E155293A1AA894D1B37F5D8A6B0324F596D72416B91C11C3414A7A935667B099EAD0DE6E43B48886BDC7CDD5A6570AD492F3FFE2C7996BA9775EC4A90510320E0A185DDF9ECA8C8080849E86C57D5402354FB3228CFFFC18663A6ADCFE5B5D69FFEB640B9CDEE51BCBFA546248D798F6EF63FEE5E5C3DFAD50BEF211D521FB0A7E6FCC72A71BE8C42162402D79A39F5D8DBD088ACDC24773D67300C5D8CDB6111E2AB0437D7F8AE8A0A47C7F1A33CDDDDEA65FB99469EE5F5070141B3DBACB3EA9218105A92D03052EDDBCEF20811A25513906EF22AAE1370F3A07F3DFF3C2BB5189034BF92EF462049437DC508517DB3F9831DBB0F8E3EF28F0BAB961D5BFBCDF165B354DFC0B54A868140F40032F3C50077675FCFC68282563980C4C569CA8DD955C2FC000703809046C6BBC9DE67510B40A0905EB55ACA674D9BAD560644C94951523A14631611A265AE657DEBAD1759AD05EE8F3138B03FFCE14FE80FC9BBFEF49B3FC1162C184B2595389945356F5A08852C98F595ED1FECF0AE0AF75EFF8FF7661DDBB3F3B3E37BB67DFC0D5CABC436114B2289FDEC4FCF9FDEE4EEE826B3C8935D0B0C154340922788404C398E1EE3117EDD64BEA491175E7A96A22F80B0A4A804105D339B034E5226B1A9767816698824024208488D5A1BA1A0CC5CAA!
 2E9594962E582059B04079E1876FBE39FF8DF51BEB79EBF91FAC3F58BFF946!
 21F98EF2
F858D6CAA689456F1AD5B83BCF7FB0352EEEA89797F79159AF22F4C2F64024351C4306EBDD3390D9177CF7D9F14D51CE6EB22FE59FBA269B4CB385B8A172E3D53CC11340AE9F90B98191C5EEADBE8F01C8F497EE92D87BD54AB59A015152E4E5270C68F65A2996BE3C66257492D8553AD4CB08751256694AD823DFA66E929AFCE6A46672529A4E15CB12AA7659EBB4330365D537AFBCB223307CBD97B7F76C02729C6A4FE476042BEA06A868A4B825C11F5C80841825BB6AD84440868676084663B99CF2C81900F108438912251B06020C0A5D3307D2E2A253B1D994A4165592B2459C79E09516F26182C4AAFA18CB37D61F7556172BB298954E3DD4A8AC743CFDC78AB3D2B6D6636C096BD259E3C4D940BADBA952ADBAF0CA8EF0F0F507D7BFFAC1DA638B66A5BDBEF31F1F53FEC8E0D3416C8D44BF33E3E2A628574F6864856BB5E14E5060DC905168900B9E5F38745D3FE1E1B9780D3A12DFF1DCB5EEB279464844CD7C8BE6801810658B1FCD69B3E02B329290A06F97E8307632DD0F569DF51B6C138C1A9603481268926C53D97EDFA5B186D08F4F2BECA435468B68615D657DF69DC0F070AF8BAF7EB0FED8A2E3C7577D58F20DE22F9AB60C3271B21F45E42B8C118BFCC9D6645345D0D00E8DB1078CB8053838984EA08C5F130520EE003269E54B67C1487BBB629B4ACD4F9!
 120174A552ECCC9880FDEB02B6C40B4D21F388CF358AC0C938A0DA0863B379B16B10119CB4E79F8B1E69C81D9491E534314AE5AF0A666BDD7EC570ECC9A3575D1F145C7C7CEAAC111A2EF517120241374BE699BC25C3D658DC945ADF2EAEADA40CDD055A181C26F7A83215FE6418C84B9873DF6F0F449D3A7102338E2D22411088A2CA9BF4ACA4F96B0742811271E12605A29864E20E8649AD52AB20328EC6409861C5232A24E14B3B9BFBF38D90309D3591515F3AD8BAFEE7EE5D503B3F68CDBB367D1F159CB6A92446EBB6D9464C0118F3F090D00C8A6D6E46A53505C7460B660313320A6FC566AAC50FF2EDEFFC84308BF77DB2928C178F8A51CD8A253B269C7162A24956C6E8E475F3D32BB959B4EA75B65678446C0442A4E80FA8DECA5FCD814B51F9B5F60473C4465FDF19B0B1FBFF2DE7B00B26C192544142935497464F055DDEC909470A910103759A3BC8080046AA23516C1A916E1D7C99C5C2DF36540C2DC1F7DF88549107B293C4BAD001F4CEDAC4C645C28D9E48A72B8AB02219D3AE937183BEE2EF073AB0803CE9251C3E6D6D8C45B89BFDFC8592C3B9012727BE2AE46F5834E7761C185F756BDB2F6C565E31621008FFDCE8A38A7B3F2D3977CE234E4B39090E36FBBB97A3A7EB9178C5454D3E9614B68B9191DE29906430E0702D7FAFDC32F3CB3F2A5D2763A5!
 BA02056105159164C6248A4366B6F17832F4C21D17142AC5616B458D422D72!
 68D96703
A58DCB217276CD62A248401C9E0B011E3503E9CFFE6E38FFFB1E7C565533F0B51470E0E2648080973AD6EDBC9BD12FFE39B0044F6651E34B2B73A4E83D64A538C84F87657BCE10407829EFDD187E15A53CEB633CFA1AE9C4E912875492A9554F96392C8C6C82C92A04D5033203ABAE9AC3A1B2724602E921036F1365CF3FAF153067C721A54F0D0A0B222D39C3F8EE6126EB5C75AA31D1C1C8C552829F7108E10BBF91F2F726B85D80D9B5AF79A0024CE1298E85425786E6A70D82BBA165ADDFD8F80912967D50C891A40D45470A9FCFD5A5A7EFC91F220533AE5758A5A9D14B31290EF9840CEEBAC36E31A11D54E48FC1E38C346D1D7961F6A443D8191E6E60B48E7633F9BB5CD2FC3453F180B246A65334722B2411F416667400A5CE5A63B9AE8A12121BAD84B707D3BBBCBC6481831321D4022D44CECED6CA60409BADB452A6951FEC8F4D1A2646713A4A829D11D6A13F47AAD244947B1D78EC31E80336A441C3F03C24FDDECA4584A40288F008855A9BC609DF5F1CDD21ABF906E250819BCDF94C06A56AE113EBBD51D92F66994B34CF6A54381F35E0089130463345CCBB5E8AA83A1DE0EE4F79C113A15AA56485849C5FDA985A68279134FDDBA54AA504B140AA534419AA05723B8E8ACE7CF5BAD762C3AEEF8E2D41A5349892DEE8A40326AF8C2F98087599B9592B1D6C8FB!
 CAE66D19FEED0424363656D29CC44379088FE4C4481131526E4E6E3524DF090CD468CA338B0D82AC20DBC17C429612C6813CF6F0CA97A74F890010A54421492217A200AC744902A0967BACF24249A5E635BC42AA1E946AF512028244C281E89850B8E7D7D866A0C532C576464DCCD219193C66A9080E2A6C494648E460677388BFCA5F31C890442A58E0A2BCC8CE5A1192E37551AEF33DCB0D72CAEC814371D1826041AD657070309B5A53C2E8A4EE1A778A5A103B97B352C2C256BB145A6F414A6CE194F06B2228B777EA13145089BA99015945BC503261BAE72AC9105D8B052E7F712A9A15E619ACF4A8A9E1314EC508D185E823D54ADD77AA906EFDE020C256EC60ACB4B93989123CABE5BF26D11F3FE51930DFE34B43DEBA64136A2D8DC628184D82B3A1CBC17087158D2B01E4B1871F2746F82C22CD2FB013BB2E192ED290B1CDEC24550B2B73A52D1250A3A5323E011E46A990542222B1B2E84F03B49F1360912BA4C496CF33481D901043A0B27956887E30C1EA1252A25225314206236323D5507B1267C49FE7F6B422CF0099DB975D862203AA5F34ED9668631E5C0B404C322A1A1F128140ECBC246C674530C69DC4B208BBAE434A9E2555B7E8D4CA24C4AD04BD0240887D74F5CDE7752E3AD1444678ACF163E36715169DB2E5F55506AB2B33C4372268E942D483B112!
 A595204B8990C8FB83F707152C6E596B28707D1DD20D20C7EBE6E7CB7CBFCC!
 33E49B92
4D41468D70553324171CE57B1BC0088A46CEC8330C08C55D88BD852512DE6228D965366C4AB89D9E21274AB4C8220ABD42D2CCC6DEACFB810111BD8B0E35AF90180FFC641A3BBFC926A928CF10673C54ABAC3F841CF31F8CBC2969AE811B86F446DEC742BE45710BBE65E5A984B956DD8D00003124E71B2A0C419734966C02526FB87AD594DC2A5B438C84898C5C53E3A02BD42CFAD2ACBC52D2425264D7755028A3FA1E40A84841F46D514B81E287F3CDE4CD76467832E11538EB3DD835007EACABA861F983BB15D308C58845631591916A14A07E7E192AE6570C8A9E620DE5F7EE8CAFFDFDE92AAAE339F35B01C454946F3A670A12E22C1661284F702E307E6992B7CA461123C340588D0227C22A091257F92749432010CAED2D52356121A4A56A855E9FD0AE55323E74C34058DCAAE149519C9AE29198C75D962A993F89E18DE2F536EBE0FD48A9B544E7E717D212C31889A1C0554AB30674CD58065C8BAE393A5EE7DAEAEADB283F579F9C9F2C040EA1642C0690BD168B596424CC06A4903C4A41133EC82549ED12153262BBCA45D2CE2A60A90A725192F741EBFA043D5C8F7C0BAEDCFC20210C4B8D588197F0333F7C3684CD1A7242AC7CC3AAF3D342150A3C858EA43183913131241294290404D90472E7674401C45936BED15094232F9243233D1DD9C55F09AE864BB51C8!
 8EF4AF7C5EECF7146502F22E32975A8B7A4D874D12541167028EB6740D7BB284401D743424489A28ED007AB2549F84BE459493F03C21B3C9E94C52B664A78E45589D2E048ACD61FACD0F7FD48B555E5F275924A1D13138985A9248125AF662B87886F389E23739EFF53A33CF95CF23A431018E9281EAA129C93AF965F97B7BA829195EE61E319235B0AA96254F4AAD55ACA7CED126A462875F0C9857B2E4A2621B516158A42A1BFAF6F272034BD90D43C1209F31BB1B9E3E7CE9846E0559C10FE067603A10920245219A272B1B624915B45DE8F21DF8ABD59CA80501CECF667516BDE7C67D94FB579E78A8AF2E5E45A82D1F815C46E293799444658F89DBE061A81D720B86AE9020DD4556C825489FC685D40C8D494F5593F024EB0D2B7131BCDE400CD761CA2906DF91B7EC54E68B21E5DC57B5BDE4BB274A86B56C6C60CC60C365B95AA966E35E303CF4149EC4D85522A15816474237E1CCFF17496F9D6E615E58313E1529060B4801102626040DCC9B51E7BF9F1E7C0888235B22479AD82CFA420BD83147F2BBB1A3309C992C3401ED1AB29B537332C48CE3A22C6DEBA838E6ED6CA96883D49897F062FAE9830546274B3FED0A2A0BC11AB54E95C923262C9B3EEC73028B1098A05F8FBEC2BBBC165774DDAA9F965AE60A4A83E39B94830060A0DC5025CCBC1584E518B31820!
 EF1E5F1D3574E492026E8DEACA50D127812055D66782E55ABDAF1CA6D94BEF!
 AD804758
23A8949A45949C98B90F0BE849CA6BB5B95C16B767E655F892D99D7A87EFCF147AB08E4BC4EAD8FA148250DB12A93BA317EA287800CEAB50A56ED41252E2C9EABD24EB9E6388F0FCF43CC4A5E17680CB234141BBD049983803AB2DE936BC477FFCB8F4F5AB92558CD295148B45A0572075DC0284DD2216AA99949D5BAF64E85E2260A944E6DAC3E58C1A6DF940C08E0342B936CEE45FDB68A1589E20526FE34FB63E5A9E347AB5894597F50321C31284892925AD491DCB5C80613B4143E592E01926E7CE567A73CEB5DC707E59DAB4E96AF331A838C4ED99603428EC1586EDE9B2F5BB35804B2FCE5951EC1284FDAB5DC6ED3E9053A243AB85608C7C1A4AEE8D5EAA9418C8DD52B1802EAE99B955CF53A1B14FC6948A484E77756308A8C90EFFD28A6CD1FD4FA4136F058854A29EDA44D92089112C97C42C255E2A20229D69D459E9EAD3F21D6562717E40F7538598CF1C67868E44BB3C10446C21890475F5E8EEA574F575B43025A6A67A93EA47A970A483F0200BD5319D62955EB298DC0D40C01BF105B0C5FB6828BB5EE35AC022EE1A7FD436C45226FF009903A961FFFC8D8053F48B4781C20BF62F7FB9D08391C48920E40BA5D7ECC3835DF97C46E5A977C0E1A09321A1D3AE29147AE9A4D5D5CECE3C37C1F7BF9D197A76F49E0D78B6A09C86DA5BFA4191D2E3BA948AD2F80!
 48D01D6A3BB552F4EC5A3DBA1F70A614F9E0A434DB2AC71A2A73C56B494A32F80571353B55E45DFC06DF6A56C40E324FC25A2DD18AA0C8A0F741AD9666414420743DBA0B807838BA075599107F8B842144AD74A772C139AF3CDE64AAF758B326ECA1307702F2CC74E411FAB882F3A2EC96B00E914FA3D2892C244317A5A2B393D5F0B1E45A0B943624E46476242A31198694F0061D50FC50FBF2591616D7A866C6D00763B82618A061208445CBC681F88FA8C8AF56D85934DF138C542517AD2BCA178420A325DD295EC8C9AB35EF35B4BA31D77247F87DE899955BB4ED0AF1A27EF2D0766A0AF98975099F5E51A8553A7527CDCFE915DA586D21F2FF0534DC0C0A4B28493AD6D7519D25CEAA85F0B9383AEF54A3E2D58BD505D9432949888D8C14D3464CE40320C8F41C08028E54C9280190BAF9BECEBE074CC945F9F9F942B470C9E8906D16EAF3AE96A343F4080B0B031088FDD167561E2220D0BB1438B4BDED52159DB8A2F97764907676264B51A3D46A3B69C61440904BA45C203C66914292C469A11AF142125E3266D08C678D9842AC3A9A90D1C60E521A17E51D33F82021F751A130206A76B5ABD20E8418290838D1DADAE3730940E2F38432438325BE2BDF978044B9FB3EF7F2E3CF4C3F44E1173A50334AD474F196A4DD652755904A52BACB0F6A255E437D8284481AA1!
 E60730A4CDEC51C9A4CE53448DAD60E417608510901AD245420295A4D4D00E!
 875A716B
2492483D07C2A64094747165B775A77CBE87CC3DDC50D45A9FDF8A7E5DB01023399B56A41B4C8E6E00F290BBBBE76393964F5A79484FE1973E2FA1AB7FA4AC3B6CA949AA41C9AB432A41215FCA80B09015AB8F555F48B22B44C9DB079AFB60B5480697093F1DC24A7895DFD845DF29B42AE98821DBA4F1A06BDD874412880F3E99AEE4224993CFF775FDC9CB941F509F9F6F34A2637748AF021087F4BDD5F5BE61885A51EE3C8F1CA23C42690F318458A5F92009F2618654AA430AA1634FE779B40C879EBA4406A0599C1D86E9B85FD99B763EE71E92B113DB35218B8E4D5D366BD1225D1B1BED405BCCAF5B2C01E9558840942E56628434E21E2E2F6ACD87D83BAE0A1D0DD9D4585D6D38B3B7DE77315CCBD706A409403A51FF3256253FB2EB02939AD12BB42C4253A268CFA0F9150684E6E7E80C892D912C504A16B024AC13E7E8C4E9449ABE55599B17007F82E2F8AC0FD2DE3CBFD34FCD70F011131A51EAFC61806DED2BBC799B53C25C2B892E7E0B39E5EA26F3F59217B4169DCBD708419A8E867402E2D470665D354A9430BAF6E12106E41AAFB4288F3046E87C08B0D448918F5AF0AD2D74F906B916D880DCF5B7A54AFB74BD44D408ABE45994A2F91130888CC3F41099B0F3D5B4B8B47FEC5934B6BB77206660C08663D8CB806200BB10CD620B6FB33188AE4522B1EE3C3!
 5DFD31940025A7300A44308BDEA0046725638749D59774246E117401E9D8E5A0BAE059742C62320ED3479022F6BFF7ADB370B1001248AA4A476A91A799ECEF28010A95EDFD94E6448C107821B51636F49E82CA922413FC8448D862FA65331F8E107AFBEFAC1AC65CBB66D0BD1F77342DA606CA35254C90041C1479A0A6F924CD5FCEA7662A45BB5B3CED5CDD1CD4BFE452B1A924C8DA0716A70920B39671C1AF6B6B67A88401E9ABE7CFACA53C1D48524507CD52A7A7BD1AAF7227F246D2B61173649593BA2C471EA4CE05AD7774A201B96DDE15A5CEC7CE63449DD198BBE8F6A72169106DADAFFE272FCE37F7C30EB833DB3A6EED1B70D60C4FD0423B7ADADB2B2BF52743472ACB64A345A4D099C11FE8FA4D85556AA9D702D570FAFA2D6D6FCEA6A8D8FD0D3E1E094276C3873E64C57800CE11740A011911175CB2A04A7845EFAE72CD21F2512F423EDDD4AC2D74EF35BCA16E443899662AFBE534F40864F9DF08CC2E68714B1312CD751A981BB42E9123276D9FF94CC3AF6C1ACE3B396BD7573A072A0AD6DA0BFBF9F708085B6CA61183131FBF0E95814BFC3626FA194A8AA39E52C73F488AF43CCAAAE88D618351DE9D972E18EE98C43D70D37008902239ECBA7EF87460AAF69EF49A5DDD64EA9E2B6A257F223AAC65E690B886027E3D8DCB6B6532A49008EC14EB860025C6!
 B810437A9941C8C750FA85212C8E3599263D587BE45E5FF976DDB3242B61D5!
 BB46DD9B
2B742722B898B0132E6591C466525574C645353CCFDE04E5663A8C5ABF9D835E13BEB0264AE1E07922BF28BAA4DD11A21DAC901AE7527AFA1E18C9B2780F842EC6EFBA73F0AD72A542728FC69F6AAFD96B6F7B6F2473A512271A1E21D72699752360442052AF8D858123CD5F1ECCA271B2154A9E8D476F532286DB7B72529AD21DDDDFEFE8B76AEDAB66DAAAA327740C4418FC3D9A4520C5E2033F8B6626442D48191EE8FEB021C651EB572537272F59D68419389A2D124783B3434801124C4A8516E6E9E8F4E7F74D29A79D750114A3A6F75AA3B3B7B7BEF6528C426444DB3F04A29BE96CE8D50E17B132D09748C1A85CD4696121428FE02758ACAC898B6FBC32E8F91DD8A6CBBDD2BE9855FC60EEA23F552053BF49075DB805DEDCCA96C418BDA2A1E39D93F5BE3C5966AA7DCD5D1D5A3512E3719AAF7A66A041FC1A1C3245415671BBB6EDC700B73775BE31605200F4D5F332FE22E34DD79BB5D7BBBB757716F1BDADCDE76EAAF68D6974EF22869D637813C4B1F4B73827A74A3702C76E5868414DFFC43B34E3F22AC0ED887D88F3835D04FE38CE9A7683522F98D78425199182189B0CE8A74C9FA6817176BC6A65667C7945A7951B221DF909A89B231BBE3A870B0DC2274B9324616BB45B93D8A7E64CDBC0F91246EDF6EEFEDEC6D57F4B684B4487B2179CA053CCD53E5A84D!
 E84C806B0DC6EAF570310521908897A028418AF20745E588AE6238573047B2016BEB7F10490C511343B2A7B720ED0C6AB5BCFA65618B4D38A2684C0E70764D6994D7559BF24DD18942748FB1C32CACBE1C78C92C232060C40D79E4D1E9A30EDD55D2DC82FAD63D974E756F2F54DEAB56B4E8C8C1927452059DADA213D39DA003AEA51F041689084302A5138E05D2C8814A1A53DB483E08473F43C209686B1B1881A48D499FF9187B4F53252A14ADCDB7182508852D2E1905F96587522EC98BAA0D15044473D8186A12B6160348ABAF5B58541480782E1FB59F5C0B72D6696F2BDA5D90187B291DF6F2EBD0DA754A691236B4EC9A07643AE520124542AC56B24022190603E50FE652D6E0428E612ECFC63A30C0731D7BEC6F6329C4469058783134CCB72A4923FA4EC24294B04495D462556D5A57E69A1264AA4B3618BA12333B841E63A641A8680C02104F59541463643C03A255B7BBB0939D8ADBBD5408B3AA5E4DD75F239FD009207043E7D7D9B47F67E4A01E40A4507A29FF37BEA024A18D8DDA1692F89116632D7B0431904B3FDB63A78CE5C536111C01894DA0CBA88814358B8868785B74AB8A02729C3D83AA92E5D7F30C00A2F131F6E4095B2D8197C2AB5B5B39236ECB1793D83BD5DAA41AE4A14E2844AAA06A04C55E8B0BFA0175A7CA452B25AE13F40968DC6F472AB4!
 31E45A0B9846D4A27BA9635860A5A10E504C22E7CF65AE847D1C483F254206!
 E401BD33
D7E2509051EE27204931EF12033025F755750175F91E41F17293D900204E9AC31D0052511BF8F72FEFD403086384BB5682C22584FE3D45AFE2B6144D263C74AC52D97D4FDD8294DE4E735DF8724AE814B43A891605D14167224A49EDD205372B19211CC800F717C2C6860F87220CFD1C53CCC8086D07435E09207A0A299472A976254E2EA08CFBB0AEA8ACC8E3527C95A1CBC19C98199AA9B11C8E17EE9407ED6EAC3ED7EACE80B8ED7F7CFFF4957F0D56B434AB15F7DA6F51DC65C136497AAFBDB7C5AF59AF6C467172FB169B65EC1C44E2A69301833729C794AA23C008C402A5D3C831DEDC36EE3C03CC6FFA6DBBFAF9ABF44A3F79D6FD81FB2C770C3095D864820D722D42A215733BBB30FCFCA6A29C228FA0F23CC3E5F8A38963044D687A4FB150512E040148BD6F94DBA8F970AD8716BFBC725E44E73D159AF2965B943FE05C6A8554A550DD73F1937462A888EDB76FDFEC44A53508A9EB11EF6F69812102C229E51AB9D94FC73517464ED26F1306C69F9BCB052E3A1869C59637C47B3FCF8FCCBD2AD90C60825694BB848944795EBEA98C8098F3C2CBC3AF4487FA843A01C89DDAC0A0C6BDE7EA49EC3237DFC50F8D7FF9A553EADE960B38F094C015BDAC75675574779A55721B406EB7DF56DC4A505052472E8C8C641991A4CE70944A4A590D4583CEA572D026065EE4E6F!
 67341B347C6080FB73CE4E2B93D0AB70D54EE4BE8ECE401F8364DA74958E0BA209797257B06D5C6E7D5D6865F391CEAD3E194192F6C2D17021B4DC9ADEE6E0444B69F80CCFB1032C651EF55A342D1F2F96C17658D427D412AB9FD83420BE9286EA10905190829B109A80B491D12BAC0541DA1288D6563ED678C00098F4E4CEEB6DDFD04126B1BC40131BF90AA6CF54A1B732DF2AC4EDB9410BF5E61815C9E23F7182A2E8F6FAC6D4C3D9C7938B4C3C72C6C8D8F6BBCDC554D620FBBE1261BBFD21D40D85462EF3D3AA9D0CE7A2BB4BD687193A42E524948BBBA17D10AB98326A43AA965A7AE2FE1A6B6507B1347EF666C2C86DC8711F6F5F335595F9BDD72FBB02BD766FCE0F78B405808A05080EDCA81CADC413DBBB2AD93E74536F18CC3B5A220C7E01B585C1C1F54FBF72B3D9999A14688BDCA1C78E9B2A1DA31CCCD6D3131B2723CE511652789C3C5E5767BE72D84E15E6D3B9D6C835CD01BF6AADB93F0CD7A9A910227FA84E001EA39D8D82AD11CB1F161B07D7D7D1C0407D26F133BA3C186032D08C4C45CAC5F0C656C83B265CC406E650C3BB54BDE1BC9AF4D415514BC429E6FF0102CC58C119FC33E991D9966A12A1E40AAF6D653F845C945405E3A0520A8B47A5D92B49D9D68087AB56A6582324DD1F2177F6BB7E2767BBB343641ADBF0942622BF157B43191F8B37C6!
 07DB63BD944209928E2217FE2412B9730E6B671DFAAE49589188DFB6D60781!
 D53C934C
622D9400C3F5D420DB37E4541759767A0A5B8B6D1F2F72B00E24340B602084DC7934644206B4E6925A8E33BEF2111020F38ED54F52628D428E0DB95AADE16E83F56DF1EABA5A9CEC1CA844A54A903B96D76670190BE891C09812166FAFB6C112C57046973AC814A0A07237088C9075BD43DD24121B49523B2665BB0435E729E2CD0581BDF1814944AFF4B2269A4AAD878C96C36E5C3B5C2EC40EED2447C2738912021D2AC7C0BCD467403925E714FAFD6C1AF1262A175EAFF0A6FC6F6C7540EA3A0C14F9CD8F78001481B23C006D42E10B4E9B9B604C9DC8E7B1E4F9678A5AF5FD4913D5B56028883C92C0B3216C75B2C97A2E9BFE262AE552C18CB2F9B5C0988CC06A45441F30EBDDACEDEDBBDB73BD9B4BB1649110C49D1C8AB93683E0BBD089BDDD1D349CC7E8E61A2CDA71812EE551C4AEECF4CDC81A3CE1E996C449C141F581FDF963B40618147BC1145B27E85D9E0200B0A2A8EBFDA7809AE352634D4A71C1A112E992FDF9145B9DD0893CD972D1E3565FA9ABF5E43B8EA54DF6B57E851332628B49DD0089D18012F2DB7E161D2588516CAA31E36B232762072900FCDCEC430108CAA8F45AE5C3B21F44E11D9801D180F003CF5F040478ED52F9229C6631148535EBCC1E01C64292E2F26460E6FECF1F16914EA8A35C6F2F88AD628374F0ABFCBC148D85FAF25495BD4A80D!
 6FDFBA759B0AE09B5A14EEFC5233ABB653A92D1D445315098D54122584878D6E629FCDB5208DFE61466C831CB6892221228AE14046AE2506ED36A634DA214E17715ADADA621D1ACC86FA4644ADAB163092E97338F170A350518C38664EAE8FBA21836BC91673208A7B5655676F67A71E486E533DA2602DE76DA9BA3942F1F105B091C05D6B106167203721762239FE443EF6894448BFE8546D2C1473246D0FC211473F9C6D44F28663B62D828B9C705E726357A49B1D721A6B117E2F05456F7C82FE43CF20A1AA566369309B5ADD64B2B0F93764EE2BDDA7879DBA865A13EAEEBC0520B76EB5DFBEC92E710021F7D01AAA3EBB4028F47441155102A547C6F4310933776238FA6CE3C031168150B9486808132B55F88456AE0D823D770E6FD95311159836B5F703C8E5F87CB8567C6D636D2AFF9FF88284C996388BD9905CEDE6EA491A0190952F9DBA4693499D0A54EA80428C24B0CA4D812E076EF6C30505499D65F6CAC1CAFB9131CC59B0D8F898389146698BBB6C347CF08C17961D28E672E988A9933BA1282BDBDAC6487F9B6D6AA28D187128CF2E021088A43C7523FB3F048DC2D120C162CE939F9BEF0A466432F751EE2BC34EE925F47F67118CDBFA5BBDB71537D50ABD96956FB78046A257532322298D1C4C40EA1DEC8B24FF1191101DE459B603DAC754C3D23A0B55FD!
 7DB93CCAB22AA63F37B7EFE791FAC14DAEFB7EBB4018232BCCD9F941B5F45F!
 3C7ABDF3
91CF18E82450F00AD204C65FCECB97B9CAD6C86EB8112351F39AB46A346648EAF76F91DC6FDE962AF5440A22F12DF4D0120985AC08A02085B0A9C489B913EDD6C76256BF98DCFBD96AD8E9FB8707DBFF0B08FAFB47EEE9B757397620FD0072C6904D512B3BDEA9EB9DA5D1D14B97FA084295313AD0CB9C973CDF15798469048C50530618E89D6EDDBA094BA0896A54A16CFAFD56884E19194B174E32AEFBF5B1EDB103187C2E836003239628C3F98457910F8C74E2AF50F1C01E9BFCB9D829C0C1B5F21A722CB5160031456725267E9EB53150C8137604D69AF3AA5DF3B96BADF15D19B63598F84840E7741F1AB979F33670101DD440A3999248B4D4850437F3B333039109912C87E43E48091FAA888AC1B06799BE5F3191321BA336926C0992B56603FDB1C8ECD0487150767C8361C7D2C4A5594B96C2B58468C17239EF5C6B8E6CB1E70D99EF62DF95517F6DA2F68FA6D96FD3B9B55B3769A56557F86A63F5B7D48A4814A1918334058722A86D60624C2405DF1138FE09081BD444F1B98D267BFEFC1918717FBFFD055BA6A73A676020D621DD60915B6A8D00628A5E9AB864C992CF838472BADCA931FE5C72BD6CB14C26732320A722F969CE41FDED9BB7D8E3FDFBBDDBE85C9B96B8A1996B3D21816FA16768CBA5C26FA238ECBE077C6BE4135BCAFF3921FF54993D006CA23D0!
 2B3484751AF09409C8A026B2DE9D9E979D1331267A412905A8B60F932C82C3754CBC23CDD1810F7534DFC34E7E06D2D13C860ECFDFBB7BB5BE8E20060D01214D4BD5469E552B9C86EC3FAE81B81434C2CC3A39A38B20EFB674F9BF8209091159B2D95F6B7C5A6673BA4E70BC5B5E9E5D9A6E8199F672D5D923824840F192DE58D7906B349E6EED6DA2AF3F504234DFA603A87A3D5DEBFC94F40DFBA7F0B5985E6AC636FD24B0391F7D9199C4A0AA4AC62E2103831F6C03502905DCC3698131FC0F16084B0F9D6C4BE61BDE7B285925164BA437C76D150636DFCE56C7374D6D2A5001224845FEA70B258E2BBE24DF561BEAEE74EC8521623FCEAD98500C87B8309B10484E677911507091664423D15C18811AB3E1C2EEE552290BE61D7EA7BB00C7E4041C3B0EC1F9928B268D7BE18B40606EC9D726E537ABC21BBE852716DB9D978293A0B1259B2148C0842C7554BB9B9FC4E6B985B6B81C9D1714DD4BC48AE043020D112103A7710AB671739507112CBFC2AB2B2ADD256CE46E68E707F4E0ECB84F6616195FBB3433F0288E892E2C26089AFF68B1D594C656524FA685AC1B5D20DD9C9C6E2F2788B1098FA09625656A245B81C1ADA616C8C37979B1CDDDD5CD7994E94AD893AB54F41A70C22511992BAF7B14E3992C1D0DB36060763C476AA8F57BEB6C1D8814CE49AB0C3C81D0!
 E5B233433FC01F1483CF83ABEBA8D00D0F9ABC8C8262AEE2A9BD2D3F702C85!
 554F11A2
1FA131032A3C722D4863ED181A6D15C7EBDDADD13402AE6AEA1CC4E572F0DB21B45DAD8D8260682CEE0122574094924B5D4BC439AD8F7402614E5923B0C8925995C9BE38C18E80881D8DFD96767966EB9A020A632D26E0012ECE420CF3618B389110D772D1F8B501CDAD17135DBC1A1BCFC04C47ECE5CE5380AE1970D9CAC6930765F6CF03E460B4311CB11D2D509956D2223F664383200E7DA42942D9451401821765BB4B603E91BF1DE3EFB5BE88469652543203212D9D4905E0046B2B38B2D43424F5656D6921900522E84763434C43B947F79C7DDB3F55CF91D00791B518BC6CBD134C506C7068B209A188626767D710C4D3CF136A9EF014E8673C7C49F1560C372983852E83FFBE488103EB18F608884341110BA1A223D5D1E5F2D94038810A4C9CA3AB96429CAF8CB426828FDFFFBE6EB27DC65ADADE5C4480043D0D48471E31EDBB48F03625FD4241E1C263D4EC9C4E18C3DA2767C201FDA1F7F3EEC07D1FE3C13814642D1D4B42F383898EEC1FBF635355DCB4E4F6E48161AB2CB8D9AA1E8250032C32750A8ED093DDC6076C8EB3A7A878098AF236A9D8A6C62009AC40778177FD6D4241E95C1260E45ECD57F6934237CE601B1FC6CC4BFF4C989F6E03B113062830B0B2322AE15465CBB56782D785F61F035A77479B63C303BBBA158A3495D7892800842ADD0D3D35070!
 CE10FFE5645FD7FCD6649363989B333B02DC0A61C3EBE0E0A67D3638FBF67DDF1419C325F28B4046942BC351E99F0FFD3FE3B157CB13FB2A239B180E661804065618E184A8552D646797170B9A44EE5A0424B3A721795D41F9E5EBBEF3D7B59EAB908545393735D1FBAF15165E8B8828C51A0B47C5181669099E56B8AF895AC35F3BAE2353C4AFEDB729FE810A87E626481AD8AE8CDD771338CE96128E0830024200242F3B592877022343EF64657D9295052041822634BBE05C41F6D1EB6EAE45AD7BAB1DC3A09160BC9D7D34A2B4948E0483C268B9161C1CCB5921206CAA77E2AF03F92715FFF2DE07F1F23964F407D83DD0145B68670403092ED41223068B018C64176B029700C692AC448D30A4C9ECB96AC82F28375F97B9AECBDF5B2F0B739BD7D454A8050682B1E0D9D2BBB415A1C50264D7E0AAD7D87F335D78F2644413CDB04DFC9728FA7E1D9FAD8CB4876A36A9C472601B7CAB3F12A288B02309A6634A40AE260B57C18810B86421124956A2205C1284D0AB79456F373498DC5CCFE59F436F353F805CEB5AE9DD5200797601EC2EF1426818410C4E61E1B49385D30AC148DFFF9F8F5F8C4B0FAAC896FCC4271C07820975FC91FB82454AE82FC3DBB58510BB035CEB6A71B64533B464217064656A8446A1A7C39897B3CEA161EF0D00494E718B723B8578078DD16717!
 3C7B77C182D205A5B088528682D935FAF29311FB2A6D09F1FF4748DFAFB994!
 5D28C3E1
DBE65814E26348ED2C68D9D5CEFF3034525E0046B22D42DC276004404285C69ECC50A339E09C4343B5DB1700229345B9054452D8028CBB60E5EE820B84A574040CF675F0AC93FB6886E7C166FD5705FF4B443CE8632304D2C6521544D237CC4804795521A1816BC51B048B25DD32A439BBF0247C2B3313623F7CD862CE2F307725DF58975CCF1809008EC208C6C182BB00423870BF7BF76E69A98808AA2B2D3D19C1268272FBFE8F2A9F389281BE8923C316C751C9EB91186224988DFE1A5B15924B17461811B50CA10444089C064296906B05099982A5217F6F43D7F51BEB0A5AABDDDC7CDD8A8299CC4107A4BEE0026CC1B0DD657898464E9E2C0C8E1C2E7CFF4F421F1EFCC8F7E48AC52E4D6236DD8FEC27460A29F0302A0A0913B956B643795EA8A5381E8C4C6362A71FB412320F1B0988990391819173C111A0E102605CB8504A383EBCB0E0C208249C92936408244D48F103957DFF3AC8FE4BF1D8F207E703455D5B5F5F25855FEE5B1C86A230A2A3A1EBAA994EBD1987A217669148342290F273050DE6BD37D69D031099FB8DA2E0521A317CE90218F9905122B2729745B0D2889B85FB5876DCB78FD73F9195FF9E7BF53D48D68350C8AF6278E741A52995D87D95FB380ED207DD99D8B3BBAEC60B43966CA390B8108DD58C2C1F1148F6DE82ECCBA61B01C9AD10BB9BDBB!
 A6BB628F56C44040D9EEE04C4AE782A16F645B2539FE2299B89FF9E3D5034F6F53D5049F6B551EB012083D4011192D8C8BEFE265E20913C22B478D40603C865026244F59BB81048B2BE9DA11102358999C6AB7B0DD90DC4088B5A378ACE9632A99F7DF6D988D2BB8C0909A3A8D45EF31406130D91F65EF7976BA99FEDEAFB8570363C89447331BC5E1F8CE48577F0BEC8FE360212CC705C13FF3480345C35675ED238916B2D4466FF76A946B82824FA18AF1AC8B5E6B732206E3702A695B26C18F1EC02107281E3289500881ABBD580739301A1F2B7D276B6E617C7DCD7F7AF32BEBDC12275100034759191BC0D4243973B6063A490FB1555491DE90D4EE64C638FD32541438CCC58B814E157937838D4D855E0D0B5F7C617EB92CF1110E708AA4AC8B31694DAD4215D401118B291308D906BB1521EC7B15F3C09F52F4BAE5FAED76DF9BC92FA0ED654A34940EF100BFDC50EE4EEE338506A88780AAF1901E472E625C1221090854B961290B8CCC4C382D17CCEA1CB7463DDBAE46459BEEF8DFC695C22DCB32EF06CB8A0D496444A2314A514AD8209089BE160AC4CFC37AAC70743967DD685F7E634721C1E34A4687EF6015370A13E06AE652BBD0BED8C3434181B00C42808C234CE480F8A469F4CE16A5741BC39F946C1BA73D5B25637D7645653314E287CD165320484AB9D0A9!
 752149085C1E45B1468DA2A45FF9A98FB8B19BDEF973A9111732D84043868F!
 02C0EEAF
79101078044563615168EE88C3890EC0EA7F2C35F0A1D8251C37E6A6F2134122720BD5BE42B1A1C4CAE05E7F2ABDD646EAE056721F4081042E990270F866801772F80A1FFA5ED5AF03E7BD7881B9547B9BF2A869F37B923E7805847CBFB5950124B2058640FBE49F91640AE053308D74452B4A14E4663760FFD648C20D06F22662DDCA8115235993E82656F5176BC897EE426DF5326BB917F96C72CCAEB4C1E1246070F5D04451DC1A0D0B1822FEC139B4630F4EBAAEEFBE5025E9CA0041D3472186188DD67772600E19D69210F5E6C53E8301A8D3D702CDC177EF2C9C2255900F22680745C4D0E70B2185CCF19AAEB7D5D65F33F3DCB1C0830EE5E605904DEC50217B62E9452C1A5B6856172051B314DFB067F2D7FFF73DEEF1BEE80E19D237AEB7DBC15D5D35A1BDC3431F21AA383B7A7C137098E60EC300A3EC61E4130062E24DF3A4940E05AA1C5F99B9C2CA6D6737BF79EF075F5747DF22CE138F96C2979D6DDBBA267914E08CDDD91E9A490E3D8C7E6299A6273FF6F9523CF24B995FB86670886A70AD8D09B2245604CF2B4F3667044B153A81125A240BF8D48E1F7E4B74BA38537334520C6AED675C977AADD5CE7BB3E39EDD98867CF9E7DF62E558CA5AC2A612611F1702485D77862B413128964FF7FAAB6F8ABB9681AF8A400D7B21D113F4EC136B7B2BF5068CCCEEC10!
 7C044D0FB91689FDE4C6682115403A8CF9014E46736B72F2DE3B6EAEB21B4FA2DB7F1669FD6C292B7C9FB50B9D3FDE1D51A814EE63920F6EA21923FCD5817FBFAD1227C2C8ADC44C115C384C091F321B3FADAFD91126A04471CAECC84C0410C42D56A2646DCC14A235A13EA1C6E480F44BA6D682BD7BAB65F900320D118BEA93BB17982D78D65EFA5EA0B28BAAFB5256594788AEC534DF44F1A6EFDFACB66CFA8884B20BED484602D9C76928B4259060FBC494D1097E95184A8CF47C42254AD612BAD4FFF018E491B7D3853BF97B0DC926D75659EB8AB31188BC28189FE552BFC0EB5E9E56D033DE2D0590B311D32222A67195EC639A67A570E4FF610E05457A243E5968CF115C0EFB827942B13DB141E2E01282AF851A0F77088902D46D146832286BE10C00C9CC3C8CCE6A53BA603A6730ECBD236B9505384C230C182CE9C3868409E56EA94D2F88070C46E134D101602CA555FEBB02A15CCA0A2A1B001B193CC107DB0F104B2FC3110D1AC9F4310A1B054D66A8934073D8590B3FA77F0FF3C418C1D85004D73AD7D5B5D7E4D92AFB624561E1D988B3627F4EF595D8E3F239946B6C0EA5900F7FDFB0058B9ACFFD9738FAC45630B2491F9C200A5CD44830FF22AA5178A21FE16EFB68663D3836F25AB64F223A114113DAE344B556D60CAE9131D08839B9E192E953872E838118!
 7972DA3E7BA9C9ABCE6B62DD663B32DC6CD18ACF07F3397F24F8DC074E40FD!
 8A4C0807
9B62267135F110CE73EBF0B990A61126FE112AEF821B7DAE040248A610DAC1802CF97649345CCBE7708F312F39DE72FD6D4383C9207395057C7196D7CCD3C40E33A2D036636A73021B10FC2D76EE829D176313F454DAFF7CC6A7CF3E156FABB0FAC4A92BDB598FE161DABE841BAF7E9A86DF421377C196A52812AFA0B4123A7A18230BB3C00FFD4CA7A52BD9E14BF3B9BD97CDD7EB5D65AE4527BF9F760D4BF0B4C2EFAF7D1FFC7DF0BEEF1F3836E2B7B3E9F8CA7FB67FDD2DE6DAE7E06C78446BE315E803663F50EC04226E4D4159593D3D898853A1C69E69C4C8C2193E426A74E618C1D2258F6F34271BCA2F9BEB5D5364F3E2ABF21CE21D1C1CD2B3E38B8BCBCB8BAF161B9D8CF4C3CB870F1F663F2D98983863E9D2A5ACF0249B06638F6C75F2EC34D49BAF3FBB04F7F75EC7265D9A80FBB34B4E621B9996D9C9B30BB34E662DF97CE9129ACF616FF8FCF32567CF7EF2FA92773EA1674B3FFFFC9DCFB16B69E2E79FA762214BFDFCF5251752772CF944D39388E81B2AF46451465C480931FAF0985027074303C05C2DBF5CE55CEF3977FD6B739E9EF2D314761BBF7CF9F8E5E3E97726D92F4D4E89E2BF8EEBE9B1658BA3B3734E7585499E97176F708807F03C835C5E5050E45C975DBBF5B4F357A7E76DDF3EEFAB83A70F1D9CB7FAF47CB71B376EB8067CD1FA7681C16C315!
 778E5E5D41539E7B0DF803CE4EC5C5694F3D7D5A74FAFFEEAC0ECD55E8D97C36B8F7A7B1DADAAAAF2AAF2FAEAF4E90DAB2BB64E3E3AD9DB2B7C765C5CDC3FDE79FD59014034F44BD740F1EDC9931B8991C33EA116735EBCC5DC55FCE55193CC599647BFB418DDD313483F094D3F491AC756B0DD78BE9BDB0771BBE97730A371EFD1C4D14F37D2AD877EC0FA556357D0AAB3EBDFFCC781F56F7EF5CADA57E65D589BF6A69783F94CC199EC86E40EA70EA325283535957F7807FB39CD38FCC137DF79FD9D77DE01454BB350D17E026E4F8A64C3BEFF7EDAF7B4E2B42FF93C10E2EE89CE147C96B0DF360723D189570E0B41F179664B79D7E5C6EB4753EA274C99E3E1E9E13B65FC4BEE53DCC7BBFB4679F87ABA79CE97CD9739BBCEF77475756E75CE49961B0C8686068BC568B4189D8AD11F7438599C2CC5D90E0D0E0EC54EC5D9EFBDB935F595031FCC1E1AFAEACD03AF87BFF98F8B43A9D13D993D33A2AF5C99B1D4A7273AF0127DD458CCD70DE50DF1B541C6212188FD3E30B7DAF8035F7DE575C00B56F515D901EFAAAD5BAB2A56AF5EFFF71D9AC44CA40E217306809D64AE957805E5B059EE606C3499C3271F2DABDA41C7FED5DD1FCCDECD7E88F403DADA7D9131F1C17AEC5ABBFEC0FAB5F483D0B377FF3D2E905B50E0B0ED8E1356383804D5060D05D56A6AA33B044DB42!
 6FA9293311089D84983D20E7FFF4ADCDF67C7A5E21B0377075EA4DF387D73C!
 78E3753D
F7C27F5CD1DC454F49BD19A37DFD4BCC2164DEAE789EF80C1D4CFDF498572A09E773E59181D9D8AAFCD1C8A5E9A452C11109FC4D0A0DDE5F0DBF0EB79E1DEDE8E299EF0DC9CEA1327F2735A9D5B5BF3F38B0A0C38FE796668FF6A716DF1554B7931FDFF04993D3D3D3E3E577CAE5CB9423FA94EBF19BF71C646FAB5F5190B978476F824666A348989C2D2C33E89784BF498D0A599993E1B7D1267CC1833E6936933C00B7BEFC62B4B375EC1C712372E1D9308DB98483F779CD911DAD151DC413F694CBFEEDE31D43114D4119F171F9F9EEE80F5577979E1A9899AE86863F48C8F1067A66D440C4B4D4CBD78B1D65C9E1D7EF9FAECF5293FCD99F3D3F89F48DACB17EF67C67EB8723976B8FF044FA357E877CF3D3C53648ECE65B0BA0AB9D96CCE8355E56D95D7D5D555799183141BE123F1C5D970B7F8F878733973987876B7D45EAEAAA82B732E7374A6AFA0ADB28AAA8AB28A0A3CD95E5637B72C4726DBE2E939C53DCAD3B98E7ED8D6D179FBEA835FAD5DBB7AEEF6B9DB478FDE8EFBFAD457A233E312B3889169DF260AA9A99AD4B88BC5E6ECCB7F3F6A5A3FE1FDF75398BDFFBEC74F84897E14963660EFD38A7E4276C21BB8EF7A63F4E823AB0FAEFEEAA097B7F781702C64F0686FEF8370E48393B1AC263B7D7AF4F6D1A7576F66CF0E1ED97CE4C8C18347BCBD276FDE4C3F!
 5A3F7AF3E8D11B36B31FAFF7DEECBD9E1EBC8FD2EF9B7B796FDD1ABE792B44C18ED65CEFB56B3F988DD78F1CF15AEF7D64F211EFF5B3D1A56B529101100BB25285CFA3113F2ED69AB22F41E9EBE98B77ED4A49D935FAB55DBB264C002A8F39EF4F78FF356CBEF67ECAFBAF01E284F7771198B9BBE68E5EBD79C3666F6F04C5F0F0C6D9B3C369095FEF7514AB706F4245BFBDEE7DE48837FDB4F1118C1EE3F3A6F7F38DC96CF13E4ABB26D30A3B271FC1EAA897F7EA835BAB266FF6DA5AB5A162C3862AAFF5FF8FAC2B0A6DDB8AA20922C66B22B90CC7AAFD35E61A020D8162236A08D82F0C0CA52E7171C94C4B1CDA115308A460F9A30AD548C158A56E044A14089506EE0CA68A4A31C561032F5D9B417FF2D3FC3664E0E4AF9F05F7CFEC5C397FBB929EA3A727BD7B9FEE3DE79A90DCA85BC52454CABD9AB011BB36203385770043F2C740B62FB9915C21998C7FAA09EBB1BEBA07804D9D014DE343583C4BD1968A4DD9FDA321040F833915B33D5CC6D5B3B3543C99017826291CE1A749AA1B1DF75A0F5F539BB19487E14700914D3C05A87EE695E2CD0D8BEF424E726D2F9A73B9420E3CDB06BEC5BD6BC94C66F8703AA312BF675E41DEB3782C3E129BFA3D11CF65DEE577F3576EE67323ED7C26F32255136EF5AB7C335006EC0270290822F49B92C8E54864023F830783C1A0!
 DFFF3A12DCF083BFE8BF1428379E08219061295D5C1F2BDE3A2D3E2A8E158B!
 A7A7A7EB
EBC084878F86185A4CA78BE95F1125A3E962314D238A0F713A5A5ABEFEF2FACB1BAB82B0BAA4284F4CE589A65C174CC1F471DBF7EF7FDBBBAF9882AA2A9AAE547C3E2AC25D998383719AA169F0C9A80AD792529BB91C38E5F8E3CD02BD91426EF3452D1493760FB114E7786A1F1DF58F6247FDBE07B3F0847EA22A7A45A2A96274B46A2724C9712469CA96627D60AF3DB5F9D59E92B04DD953537DF858AD1672FAD29EE70E4E027B4894E813F84DB8DE2707A94A50A72FD98D06E12F1098203845EA8119DB8576BEFD7F3924F46D1F927C3C3C2CDC59CCEF1E5F5924F8452E83BB6D47AEAD3F4A97FE1D1DFD676565E5C18365700100F76734BF41C6C64E6F9D22DF02184E4F4FBFA112F1178715D3215F16DF2FCE3C2D10003F2D14B0CF5053289C0C0FEAA02B4F4F66323384D58BDE5D3320850C952A471F9AF754B0FDE2C91BFAC396E969AA307FE70EC0F8128E0CFA32977E997E334D9D973C7C1E89C3D3BE7E75DEBDC31B592CC09036DE48EA05A5575D42DE09402F30963097E4EEF8DDF157E3F3F39354892872EDDA0415F2B9100C5EB8B0E1F72D9942AF04EE7D984E87E03CA5DE72495816209F4D6A01C5374C73D55C0224EB8A690A04D1680445C57D00EB5208DE535285510CA5F1CF9E3D5B59FD4110BC41A552AFA4974AA6F9C147C9D84F482A7C3EF383A9AB6AEFF!
 3E710A675DC9ED3E91C7FC4D7F68B6448266737AE369BAD66B3B9333B784B683B18FC786F6D6D616D6161616DED2D6480E31E7A0783E7B83A3BBBB3B3D30CB75A56D8B200F0862C8B3D002B10F6C0E0382A6C6EE0685916D558B77803E318CF33AAE82E76A8B43B557797F93A76F86AE77147AE1CE8598EDBC806FD5C8533741983EB0C21A1C91CE3C2812C3D95D33111D30D5C96AB55C7E9E9724FEC54DB37AF2C6692239BEDE46EE3AF16D901BD604C77C7638DC1B9DC1B74BD1374ED0C884BBAE59D70B31C0622839CE6383407BADBAB814210021DBEC5C0323CB35A56D3DA024940234645D9CFAD623C8C826DD0B4D341571DF00CC475650351AC693AD425DEE00CC3A8330ED18D0964DD601AABF882B4426C4E9BC3A7256FB98E4B0178B591877BE13B7B2699FBF3FB666BB8BC98043336BBA47017D4D11C0ACEBBCFC98A9D6E970AA887B3612B4BFAF2862B3A554AEB9C2171B8D0E94016C17DE0382C765D76EBDE0B60BC864E32857926E1C7BABC5577C956F98091BA9AA2AABACA285720F2AC6B4C65ACC28B6EDD8D46798E31ADA79AC65C85E30C19D021EA2EC0C779FCF82A90373712CF251BD52D9EB932ACCF66B92C6E60A0BB70B7BC7139E0299DC5DE85EEDDB027D970132BC271D63E543B90E1B3A20A4B7AD84451930DC66322D5AD47C1FBB46110A3E1783066F!
 0EACB37C3650E232D0D7E02C378805B341152A37A28B1872421011C2376AD4!
 921902D6
02E010BB79962F8E6B88AA11FE8A25EAAA9BA1272444712EDC6A7E34C0AB95652EA749045C82C18D94086E3077B07B27839DDC9DBB7EF22DAE727C7C75FCD47B2012294C8C42CAE4702601C7F30E0E70C4D010DA8885FF5B3622A8AC9E0D3DBDBFBDB5A85F397B90DCFB7296E5A68CB65D861212760589A72201B8020910241BD0EBEF66FF87CDFC98AE95B12BCAF536665CE5C9A5B3291A350AAC505C06691D989498E0570EFE5F26C60831958765516371B30C47653EDBFFF201447EE0E66A7DC3D21C51A12DCAF53DFE2B7F8D650AC568B0297B7109F708716798756AF56F7F6A2247B893AE3BF69FBFBFBA428DCE01BBF0F77F262FC3C442C8B72ABBA0700AD308145989ECA0866BAE530F9016F3159D70DD755F7DCA8AC8909646CC870C0618E53953C16B2919FD80DBC33904F7217F93ED284FCEEA7FF041800DC233D536C32B8830000000049454E44AE426082');
+
+insert into auctionImage (imageId, auction_id, data) values (2, 62748261, '89504E470D0A1A0A0000000D4948445200000082000000DF08030000000DCDFBE60000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C00000300504C5445925131A9B3AEFFFCD8EFC872C4E5FFB6DBFED1CCB45E7788928B6DFFFFF5423A2F72694FA9CAE7BCE3FF474336D3D7CC859BA6C9B88FFFFFFE98A9A98A744D2B2823FFFFED3147547A98A5AAC5D9DCB055FFFBCA393632D7C591506879A9956CE7BB69312C2898B9D6B9D5ECA4BBCD585444BBDCF56C5033E4B756302A24DCB767758C9688A9C586979BF9DA99C3DFFE74858A33302B675B45AE8D53FEE7A8A8704B79949C38332BB4A571FCEAB899B5CC8BA3AAFEEAC8FBD888FFF6B9DBBA76F1DCC76A8089FFFFE4E8C98387A4BA67777A799AB697ABB4F8DDA595A39CB4D6F5998355534A37C4DEF5302A19474743E9D8A6FFE4986B8795A6A79DDFC376C3DAE9B3CEE6FBEED4FEDBBB7975646A8AA4877D65989784B3C9DAEDD599BCC8C758533A3B382BEAE7D6A9A58A425B6D7D8379B5DBF5B8AA85B9AC97263946C5BEA5CDB676CCE6FEBAC2BAE4CD96E4DBBAEBE5CA727B7AC8936A878B8345412D565A51BBB59B33302393AEC!
 4C7AB77FFF4A9D9E2DA949B97BBD7F5504C40F6CF8089958AC8A764AED4F538332245545855452AA49B877B6438DAAD64DBEAE7EDD38CADC4CE718FA7B6E3FF646A657EA0ABC5E4F6CA9954E2B78CCDECFF875841B5D7FDAFD2ECF4C9A8393F39D4E9FC2B3334A0C2DB4A4F49C5EBFF9EB3BABCB689E9EDE46A736AECF3E7B68839CFB566BCD7FD2A3029F5CC93CFE1E5EFE4B75C615CA1C4E5E0CCA651421AE9FEFDF6F5E1172E3A8FB3CA66441DBDD2DC3E3822FAD1B1C5D5F47DA2C291B3D3ADCEF0C8DFFEEEE2AA7F8E93BA9F59F4F6EE392C2BE1D0B7DAF4FFCDE5F4C67956434D53FEF6DFBBE3F6FBEFE36080935B4F28B4CFF1C9DEF6939082F6FEF6FCF6ECDDB0747C908D3A2C1E6F9199CE9F7E5E6F769CBCDF32382EF2FFFE2C2422A0B8A9342C2C8DAECE4B4E372A2C2DACB18AA2603EC3D7FCA3BEDF736E60AFB29A34392333242B423D3BBADFFFBEDFFFBADBFFBADBFBB9DFFBBEDFF9BEDBFFBEDBF9F9FBEE7093AD1C1C1822201AB07D5DD0ECF8E79675F3FBE57290AFC2D3ECA2A07B844427C4D1C9F7F7F3E8C16182A0BFBADEFF31F2450A000051D74944415478DA8CBC095C5367DA361EE0B00512911D0960580D1043221201850104641305C4028AA4222AE2C2188C1B68C5AD6ED8566806D48E53A415EA542B53C1D2C16F3EB55AFD8D4B91D722B695DA1!
 036C7DFD7F7F759DBBFE67FDDCF09D699B7F37EEF012190E43CD7B997EBBEE!
 EFB39284
88E484876F2AA56984C83D623EC308D0CBFFCB0663FF34F988C46936998FD968E21F3617E60CDBFDE7AC8C4FFD2DA441F26EBF1C3FCE3F82F8687D83946AA53530595959509070061D024B21E19A4837DB51EB12EC3078130B1AFD62338B96968787818BFE68F21F6513F544FDFACD9EBCBEA8719A4FAF175FFE978E54786C0BA7E386063AA20A23239210A108C83227C0C9AC68F7F7D3BBB3C53FD4B238C1FF5FFE5C3FA9FAFFCE5895E7D0C9CBC31468FA70A96552624472DAE360E0D0DF200E865F5D6D6BF8101C7303308FFDCBF3C6F5EBDFEBF0030FDFAD8F412060F617024783F592121D9D3ABFA717DFDBFAE6BFA1718CCCBC3080A3A152287DCF5AFC7E02BDF5F85C0AFFFAB81E1537C1DB42E7B0C089511C911A95E0163F5E9F565D683E617F0AFB436BD02DB0CC1641AE18D35C8DCF64FEB32C3102EC0FB97AB1E5FFDA5A38D7884338C6479C5221C93E58BBD02468787F8357FB5192DF34F20281EC7CFC2103008A6C1718C83F4038B657AE695EBFEF5D1E078B4310883229122508E58A83C7E2EB0FAF1307E37F2D26CFFFC7AD32BBF0404D1D0A06808E12BB2B61699AC45FC650F8A8CF578CC632014A6DF3CFE058231787F84605972D72FFB8F673DAE3621274DFFCD61FDEA893893694824E28D0E2883CC120066CD1E1F1CFC6FCFF42B84C1C1C7FBC304553D2E!
 1F9EDB5F1D0C0826D1BF41FECF57C0D573E938070B48138745E97D22CEBA1EB8387666EBFF29046BD1E8FE58C1CE65BF7C78FC787EF0A8F1DFBE7CDC21E327AEE70639A371983C912E028571654062322A8CE90063BEBAC1FF010490A1312B30565095F6A645586C7EB0021086FE5F10F8EF22307519671A4E1FE1B8618EE38C2346A368B85AA138369CCE0DBE0AF6FF610511F14297A0D562823CEC78C0E151E3F0FFEB7DE3DC65B4361AD3878D266EB861B8AC33DD18CC81B10214C1F9D58AB1612A24FF530883A291E0C50982CA5F9624271C0FC81A1DFC77A1F02A043AB71187634AE9D34E2EBDD0F77CF88170AE3AF85883ADED8B9442FF0A56CBFE07078360A258E8020497E45BC7173F1E53C0B5BFAE33F80A8DBC8280F9C17AD068ECB0F5E7AADF395FEA18FCA2941B3556734F6D031E5F2DCC5700C2E0AB91FCEB0F2FB10D1AD94F944F1CF1C2D6D595B7D2BE5E30A65098460E8E8C67B509C55B645ED2C8DECC175023AD20B21EE2027D632E7015B37DF3AF6F2CAD0EE646B80309E7FEE679F54B05576F045F588BC64F653E98F17817B173100C9CE8A03130426071FCC4F6AF97FCE1C249A3F54191C8387870F0E0C17A13074B59BF8440843EC24A39DE8E4C1A345E08EC89A9503C9EED3BDB2B6776D668F0E0B103B6C737166E1CAD1EA69CE4AC4D83BF0161908F!
 123C2024838307AD0F8E6E4C10AC76AA4CFB7A7FD6D8498E2355426FB51619!
 115546D1
3FA7D608DEC1DE0D08438AC09EC00B8A8AF0D214DF030187B974EED8015FCF52A72C147DCE8482C712E39F11987EB5027B8679E2E0480CAC10E19456773CBF4281C01E5510545CEAB0821BC6B95ED68397FE1934B2EFD617027D038F550342D66C5F2F2E9813890E24FC74C0373F98339A882E4D83AFC42F8B09A3D901E398E8A7836068C4426A446A58C2712F912220EB9D2C050EA34231CA2982DF79ECB8C3F86B411A277E066150C4C5F8068E95BDF3C2D731CBF7AA6238DDFA9D42DBFC73BEE78DD63B0000E2E75F13805634BE7239E3804460479788D9C939671DB9D13A4FAFC759C1C159F8A8CE1AADCE4F4919364318E48B07E35D3CC2551A2B626CFDCFDF2F2B2CDD181053BAB12DC5BFDED6372638C5B7E36E61A7E8D56C329AC6F888E63118C7411099D2458D7AA50AE4114EB651810DDC615B8F525B5F5F5B5F5B1CF85E7AD54B61E46360648477A6B5359FAEC6C151CE3FA7D3BF6D474C7853707078CC97F7DB76DCAFF30F0E08F7773CBFC364E4CAC606CD0B8F99E873C8384691C0C703E29D4281A52F8A75AA606B44976D945770D995AB674A0B9F1616DAAE5CE97BE0C993A7577D631E2B8CF5A24144A9482462D7806CA3B388AA535EC4740C1E148D8860B5C320562337C465057365CC4943C3C1C10A11119D5131AA500C716326C59851C191251ED3C55B1FD!
 C71CC5AA1A836E2B4A38060915C59199B5F7D25D8B734E6BB2FB3B28EAF5C19B5202B78B4C9F745D64905C7A597898E612D059DA31EC9C6718AC7DCC694A6614E74B06C3438AB024184304E7FCCD1C2D6833B449C312BEBB011FCC5052B82B38062746CF8247712F08D8A8A8A6A0587627EB09E43C40D0D9B148B5305B9035B2DCE9D1B3ED6501AF5E98551EE9DC0952B9DFE90257AA7DE76F6619085911B690B0F6F72745470D5C3102B3B1CD30302F21D1B4824588BB8F4FCFCFCACEA86C70AFC36207898E542673E1EA78B50C9F07D4156757EF568FA9701431CB723BD7A71FE75C5F041280BD19701DCE374CEF838F0B82077BDCD1FB79CAB56A417FA8F9E348E64C578AC74AA184525BEEF780119E2186E6BFBA4D0B6D4F6457E16656AC7D5D2525FDFABFEC322785454B6B1D0173F16E6371596228C3AD22118EE239C7C7D7DDB06D3AB0B7DF12C1F5B5787ACFDAFE2D7BEFB7F0A06070E3A1652C03DEDACD8EF22D85D54BE6ECB922F8D571A821548EFC3810481C3159A0E672916DCF5B5F5DFB1C37AC7DD420FDF8D28E8C7D21D0B577AA4E6577307EB712D23014D292B3D66C3106DBEA5E16D659C6807677DB71086DCB10341B938A6F44CE9C626C7B6B6ABA523F5A21DE74BCF34FAEEAF28131DB4367E195E5ADAB1E3F163AFE3821B2A3F1F9BD59F2AAC8F959521A!
 3157084FC3AB94BF4B87A8197AF6F2767CD71A35901511EA51B0F8F5607BF1!
 3EE51FA5
3D6A8F1202E65709803640FAFC30BB266DB8673C40F9C49A188F1D8B91F6950CD1D5E1075C637A0A2E2E498FFD59365D6239CA787FE4C44FE3198705811E06BDBC9E1FD6865F6CC98586EF1E998F5C12B22060156386C146181D1C38B4B4BFD2BAAB993F5A359150109674A9B5013B366AF2C3DF76985F58E8307AD45C3A3594D2B3D1667656DB4DD9895053F89EA4DC315811E97022B068DC35C5680E719DB4FB31E8F5DC84FE9E4C026B377B67A34E6941D4C1F341E56D8DA3E568C5D471F61E73A63E2C4D59F0E8948791E04EDC18A1760A983A6AC050756DA5E783C8AD4E182AB2B62769EC9091E15711B3D769E7B5C2D121D24675567ED5FB9D3EB5C604F78C568B5C8388440AF3E8C570472F52285E2F14F9E67AE5EBFF09DA27AF43027AA575438F51CEF59B932767404A70CB0B51D321AB300C1D5753A205423EF407D074760D846A7C388B583A6EB8B4B3D9CFE305A06A50CEB28AA6D1FECF482F04F05842C23D8E52031F6E1FDB0C2C69ED805081F64DD308AFE851882007EF84EF1E9D33309D72B2A2ECC760C06378C5D78D1F3D3625FC4D208573DFAA5EDD5619191A84935DD75D37BABABE99CC45B5CA07EA5D3753CB01ECC3AEEE111F307144C585C641ABBE0F4C063A36884ACF05316E2805E8217ED5F79C9E952E9F5EBC1AC9301FB8C5E8FF1F008E40E8E0C8D!
 8D7DDAB5D2F6A1D7C3D9A54D57468C63272FA0A6FD21B0B4B1D4ABCC388A5840491E85155419D3FD608541B3152E2016E4152672F4774E2B71352440000FC53355BF32E59835475608E62B17AE3B1856283DE3E1F4370EB5034A6508F44C56B85276D07A48B120ECCC4EDBABB6A52BCF5E1119C71415293D8BFF706163E94A5F140485ADAF4264A49ED2F5AB8CB7C90A23ACBA0C561CF790385D807C39287A9CB2F292FFE151489B835058C38AD9FA95B30181AC306A1C34F185332B70A54744C4198F988A91F4418A276B2332A23450340208C10BEE34FAA66E8C7951EA7F45641A527075507717BE9BBD72656140D64FB6B6F51CB3C2DAD7A66D7A6F0920302163BC709C7801340E2BBC38E3B1B14244740A695B7621F6CC257FD1E0773C0423D33F43C62B812B2F7DFAA5EF99D2402ED8C8D00E2A3A90111C19E40A9232E19D778E5DB9EA4F2F567029B68E1CF8F689C7CAA8BF9DF3B58528500082BBF7D44D1BC81104C1A4B8BE9132620CFEB7362239EE1CE6C8E324F883C31A6D3B4DA2C70C02699B51B4B964854B3F5D7F587AC636FF3007E3211E60058270D07ACC187CE74C427585A2BA6D078C00B2AFB3F51AC1AB46406FB17FB3F57DAC18CD4238CEB4F49EB3813262900A2A201800C1C82E3CBFF48C6F3EAA13CD884012BE2B9D3811F75DAA4769C028099B60C2B1!
 00103EFCF4FA6C8F339E0BAA47AD07EB19849D8117AC4DF5278D016167AEFE!
 A4387952
313C3A3434167CB8CEB78943E51E6EE84110F7D8068F0E13049F7DDEDEE5ABEB210B5087D30F5F4F85152A1423F5D0B2C1B11E2BEBAA396385F5494570C5EC95B6018A412E6BB6C7CE0094C0B1ACC3FE0F4DE9140BD77FBABEA00ED71570389DDB3198CE6D44185F38593F76F224C231E1D393DF5D38F9A5A2E3CB93595975A58157686005DA5DE9B1F2EAA7A38A2CD4885579F3E32E069AAD40948A620D1E01538E049FB35DE9115EA1F8F28222F86F1B4B7D17678DA49BFE90EA71C9EB0A579D55916FFBC2F8CEE1540F8F05D7B30E07F4347A04A2D8A1CFBB809C09BC3E765271726C41C4195B50D37759150F6D1F5607FF67AC6F130C38347478C1FED233676C2176C90AAB9A27ED5B6B7192C2D168AC76DC6F7BE68CAF577EBA0815E3D88273611EA52FF21F5FA8CE0FF7B55D7C78C1E0B1FAC59E1E1E4F9A1A1A0216D795DE578CE4D79DD9E915501D7C18E72C8DC9876E500478AEF470F929B8FAE4C980C09E33BEA9F95FFE14E095E3DB79E1D305393B37D2544B311A9015B8F3CC55945E0AC7F8497BF37EC7626170C878DEB7D46367A947A96F0A7162D9E1AC800E5F0FDFAB8528C9B3AF046471D6D628D61E2B519FA1EC3C6CBFE4C2F1A3876FA163439DED4E0F8FD2ABFEC6EA8E03BE7845428CA2C2118FF0908A75A9C753C5D8591044E98136EA8547AF5F08F7B86!
 A040458216FCAF3F88B4B4EB21192D1B1A9A9A9CDCBEB61479BC804CD96AEE0B2C61CC39F16A6DCC5BBAAAFA08A38DE0D5CDCD0D6D671F761608C23A7686BF2F76FF2BFFBE5705B53608CD7FD9836B49B1BFD9B02F7C738060F75FA07EEDFBF3F262626D03FE66CBAE264E7D9A6A6B3FE5F1AA1A820BDBE4B4921F188E63E74D294E6894BBE14914A2631076196C5A121A1E909711DA92D6AE04D83F42BEBFA0BD73F1D05391BAF43B28DD58B0E5E395C017D683D325ACD29A020A135451C24E5316EC8C48946CAF040C11D3E76E5583A442C8A1547094604565D31360682E508C21440D8FF29E3059A5C31CD6934D2F08BFA266B2375EE6C8664CD14B4E2BB8A6A545445D67759E801A15A4646205E59E330646D14D11819D847CA76D03CCA38324C67B40EBE52862EC8280A2E2BB316B17E6C5031C6918A1735C50A264D9914BA81089AEF7519E5F1CD2BFA5A6BE26C30F90888AF1EBF00E5A58FB1A66EE882A21A576F1A1229F00F5050A2D091A6A3AA89AC49498B44F5AC831619212745A2B263341B1BA4F9147D8110863FF0030D7A6085D089ABD32173152636007EB5931CE45B7163BA7114C46A0D6988158DC7E026721807810E558A8B3E468C046FE1138DA011327B6870C82482C2E1685DEBC1FF7298F8D99C28CBCB8920C4A34C01024DA17F6BD0059BDCEFF0C7477!
 8C7DD8EB6326367877F67BAFFFDA6BBF77728868C6DF7119058834BF76FF3B!
 F5B6D541
C1B726C7BD8E188B73535E5A73B36EDE044D6D6BF35FA63507808935E5AE1E06FCE67A085C23BFC9FBCF07F71B7A3D07F986B484909E89C5DD8D4F40235A7DEF1404A53F87D4EE4D871D7B1AD2325DD58D6E1DFE678F77C8731BDA9B0A921DC7F07F974F0B721A0A6F15608A562ADF82D2B98DBC2E14E6370CAEC63C1C1FE07F2DF091E0DC743FF9463C71CD387B874634AF895B34FB8E117F7E19AF4A7E1A3FE2FDA5040FC9F34553B167A353595A199120D99FE1D848A40DE0AEFADAE37220D4CFF0682C8385CD690127E0C2DD6939826C7A6BAB3C1C1319E4DE13082820B4E09F7AA0B7FC7FF29A39C8EC2CEF0172624F5704A4A7AD38198B30130EED090E9B72140117081512C16282346FFBD1528B91A5266071FE6FC9FDC0F8F894989C9E2CE16FAA7DC45BE72E907EA36D66DCC0A4F492F5304073B169E4D4941981A83C3672BBCAE163E0DE0402CF5FF068208FA66631841983C7149FA7F670513972E0A3870F68AA2A2232520B8AC3A3CFC70F0EC94C36D0DA0F474C593F0C381079A629E3A72A3C19C7FA1E38B17C661937114909B0E3C4C99CD8D0D7343C67F076150911A2188A758D85F4D1006C7C3D1DA9C0D88A321F4D4F5A26A51C393700E2D7D4A2788EBC57D0542921B19EEACE74E0E3FDD8862E0FFE581FB20FCE0176747CF163A72D5C6FC94A62CAF27F98E!
 4FEF2B90A44611CE4327A3A19EB57982443939CC6D4C40999A12EFC35BE125048E4645221A44C237B804C588A92D253C7DF4E4FD1447E3B0634AF870C38B94CE1D1D77EBC7149D4FC31DFD5F382AFC53FC1BAAC367370437BC78D1A668E8B81F7C18C1FB78E35347F8B19EDF932062E2109BD62F2198B81806A1B97C49B568F85708A2FA74909A697C8383A39C68DAE8DF60DC71F77EDBF0D00E7F7F54A78EBB77EF772A4ED6DF0DBF7FF6617A8551E1E81F7EFF2EC8A93ABDED4578474330D7E03FFB61E7DD17F73BB9329016D8851B44600E2AD0FAFECA0B1762220479CFA7DC84235E85005A03D7C20883C46D349B1E32960D933D391A770F2145D211FE282446D0E318C73D369E1C52942940A1DCF0285E38A4009FD2CC0C0D15CDCD760CD6535A184578BE13A5C24CBB3439CA8A0913E46DB30A2D5F92FE4F10506A40E43850BC445426497A72C3E3F3549188B32E03BE6328A86043B4D070F42023E874C4AE62F8246ADD31C58851916E1AE38EA14541678CCCAEE776DC3D7FBED3C4FD0AC1381AD825C8B37A3E99204097FF6A85C1B2CEB636C711519963DB5D3CB01E32A5B73D847C36A1DA74A257C7B7918626C7F4363CE9D8E6D8202A6B6B4BEFC4330DB8CC61CE543F94DE995E0F51945E9FEED809F9D3D9892EDA646C7B71F56A271C621A7784280BD4848CC84338!
 8A504BC7796150B4E32E083FFC7E4359C793F3FEF7C37718871C9F3EB99B8E!
 A23DD2E1
EFD871FFACE8CADDF0B32F10A3770BC3CFA6341DDB71BEE36E4AC7C3279D5CE78BBB90D79DE1E71DA130BEBC9FE2DFD6D154066113DEC09938EBB6C2C24E6E70E4250463B0572C85639ECF2F014815233FF3C5EF87EE77EC308D383EF10FF67AE22F2ABBDB39C8959D0F179101F1CC88A829E56C43CAD9630F1D51AF9EDC2D6B6A18ECF477747CDA11EC3F3CDA56988228509C4F4947D537DD0569C24CE71BD2EFEEA04CEB0484116B74E507CDA55241043DE979F37B363F190F8A068DE641A7E2E1D34EC57059D9D9030DF92931016D3B464CA286F0F0E07A28BBA76DA3C1A301FE079A529EEC409428AA9FDE150D97216FC01C4D504BC31DE14F1DC1DBE1E1C348E6E1B694E161C7918603FE15303FC287AC40BBC207D954DD44491906473437FBAC5EA038281A21D8D43971E14FBF3BA9E0CAFC73F21DEFCC3E7BDE4B641A4E0704C4F28BC2CEE1E0E060D4C0A60385671B46AB035262200E480D3A3EF11AE5AA1BC21D53EE738F47EFBFF812526EB4E94047780C373ABB70761B72AC4CE15808E21A1939C8C6A9E40D0520BC1D1ADAFC9EC54F0AC235C426F4835CC753474540F015FFA701F99E671B9A1A8CC3C3E975B347CB868CE185289AD5A38E398E5C534ACEC62BC1014FFCF12E34FFA2FC278EC19CA2E9E9C3A7298F1515E12F02140AC5E187298E4D0F031E3F8E399!
 0D2203AA6E01C0F5CCD3F46D33A73E619C70223046F4FB9E9333137FF2453746C3E3B22F27ABAF18262B42C7CF663AF2781C7AAD3878D8AEA17B3213C071D0B3B386869FF947CEE9D32CFF30DC1570A9B88C4A07B1B0E3C548CA6DF6F7B7C37050119FE220B2D006A7680E23124DEE1FC27E1C691EA635E8539F95C7099898D85A91210849B37E3D7D8B82C36D24481DF681D1929DBF834A6BAC1FF457AC5C3A71DA365C343264567DD8B00EBB6B6FAF3E79B3A879A663B36C4943550D12E7BE25F4FB2C8DAD4F0F421C22D65F8587DCA0B8E0B4F090868F07ADC71A0B322FD61873F1CE60F41CD791D28F40A367240C094AAC9F45D4C97E0A655FCC4F2AF178F890E8EF0D2111E1155C74027F9EF3859EFFFC2BFD39AE466DB8BF367FDC3FD0FEEE8B8DFD171B7333DFD7EF8D97047489727F71DAD493EEEF007153B76BCE8B4EE3C7F1E3990829777B4BD78EADF71FEEEC3171DE1E1B423DEF6A2B030FC21789536154670D1A6ACE37241BC55FC8C6FD2BC460F8E8CD084DE9A66486523C1D5C3F5F5A6B1A17AEBFA74B62F8C04A15B24505FEB77EC4847249775EEE04651DD4CD523F5A44F45F5A6FA41C50E641CDB701795A58F388E183B71824E937187E30E23CD3FD21DF3BFCCEFE4685B63144149633D8210FFDE86D52EF91746064F9A148A3113EDD6588F28468787E89!
 606AC6E4DA335982C7874043E1CC1022814B01837A4407788CC41EF6D4227C!
 4D1C2223
C43328DB6FF583F41D591ED6CD21EF7A0694C31A6500CD2D0C74823C67AE3E340B960D51B132FFE92BA382B58F1DD05C5850B0A23ED3D5FC90A868A42A73D4AE7C109868D87830F67E1181D350E0E0F8B907DE98A319CEEF149C700C786320EE982AC704C876E195170D4945D115D617586A3FAA0605ADF484C82674DB4F5820A861F2E04A2B98F9F686321DF7F7DC1E2C58BD1012E06E7B7397A79ED5FECE5886F5E8BBDD8D1B4D88BFAC3FD5E5EF9C0A108760C9FED0F9B5D780C5DB4B16EF659AF60341AC686F0D967B3B22A0E1FAE08080CC45B17E7E7E77B7939E6E73BE6E3A16327BC90FF654067E7F097D5013F9D3B17702EE0FA1FE41182668442EED6D5ABD396ADBFB17EFDB2CA889CAB09390911111109F4853FC222927B7A4E545676452427CB0317E7FFB47F764E8E674C7ED64F1B9D9CF2FFF37F05A47A860770E90181B3C33C6371EC3FE7D4E3DB43876F0FCE9280134424E48485E54439CD8E9D3D7B764A6AAA4B9A85C5F72E2E4B96249F103437CF7886E39B1933962F9FF1CCAEE0504F4F7272654225BE54AE5F5670021F950527AA6A6A82060A6EDCA83C7AA9B52739213921C13376F67100485DF0E7FFF8F39FFFB6D8D3D32B2060B14B54F2A54B3B77B6F654ED3CCA1F55872A2B2B4F9C38511911916C9B70AB2BA127A1CB33276DBBDD37DF7CF3DE37DF!
 2CDD6EB75E10DA3C63E9333BBB673366CCD814BFEA5951C1A1CA885B8BD2162DDABA68FB86E58BEC701415151538B043152496481E48565E6A8D88B5D81F9B1CB1FFC337F71F8F8AD9BF2030C173F1820F8FCB4F541DEDCFCECE3EDA1FA4AA0A02EA81430E453716E163FBF6ADDBB76FAFAC3A21978745A5A5A595FBBCF7DE8C457603B94B0549CDCB6FDCB8F1CC2FC3D575DAB4691919454595CB16E50263F9F74B6197893E1B96DF702D707575CD70B876FA76AD50289118F4977656F5DC4A4BFBFA970FDF7CD3292139226AF1FED8E3A9695BE5CB4E54E91F894BFAC599252A1C007D4D55F06C834DF9D21BCFBE4FCBDDBEECC4B2ADDB6F6DDFBAA17CADCF723FBB8CA5DFE7DE40464C2BBA71C3EE999F5F46C6B4B7DEFADCAFC8A1C06EF93357BFF7DE5B3E71E28AEFBF5F54E45094E1A0B223085AA1C4D0D8D8A8C797EC9D27D2DEB4FFF387E7D2D222625D8E9FFB70BF53F2CE9D47FBF5865EAD38A824A8447BAD045F7154152C5AB16869F937EF7D54BEC1CEA1B5CAE190C38F9B7CE27D66642CB7B958BEFE8460D31B33FC9E2D6B1D78F66CF9C4774343F36E66EC5165BCF79EEB8CBC4D6B665E2E07EC13AD0E457B428A6EF8A94EB76BF48D127C36EAF52BF5872ABFFEF39F57BBB824B446A4A5BDE97C6E596BB65EDFABD41BF4E2201C25701B8EFEAA135DEB5B5545!
 CF26CE8B8BFB66C0AE203324F3C8EF6FEECD7B2363D39A8B2B06825A05CD93!
 566DB22B
285A3A6386CF449FA4C949F1AB5CF7383C2B9FF16C934FB1CF338781435537D6AB5499A755AECFFC1C4E0BC50F0C121C7A4963EFCEF54BDEFCF3925817B9938B8BCB8209FB2B7BF48DFA5E8944AAD48AC5FD2A872255504D49FFA3AAED370E05955C53F99547C7D9D9F9A9B42147F6DC9C14FAC6B4CFE357CDF0B17370403715BACAAEC86EF9AAE61933BE5A9594B7376F959FDD22BBED7619AB3E87F1EDEC06ECEC54BBDA4F9FBEE63A638643FBEDDAF67661FBED471A49F6A15BDB57BF79DCC5E5DC874BA2D2BE76B975A2B5B757AF94F46A34B58FFA4B0A8A8A82C406F1AED3250505AA9A921278F39B450E7B101B197BF6E4C537674CCFC878BF79DE8CA2226A6BF366B8FACDD8E7D39CE19731312F2F1469FA4D51819D5FB9CF47DFFB3D7BE6E0EAEA702444A8D5F63BF815855CCB98E6BAE7DAE976756376EBB2ED4E16B14EFB5DC29CD2A27A5A77665F821B7A35C2A0818112AD839F9D43A6C1A0BD864076509538383C5B6D53FE0C89E55AE470C4F58DCF711AD769CD793E7EAE3704CD53263DCFCBD8336DF3FC353E19457E3392429B43D7CC5BB17B45F9D22284B4DF8C196F644CFB51B54B28EE77282A72CDD8B42AB4F9F369AAF6ECECD6D69D272222E87EA0FDC713765ED25F3AAAD74B84FDCBD6DAEC1E7028F22B2AE9370877B96E7A7BD334BF4DCFEC1C16D96C7!
 9DD66E9D26738EB11A49FEB9EF721963ECF705D0108A179B3A66EFA3C292E7ADE2A3BD73D7E6FACC95BF3DA5F262E1A106BB42A3F9F55CDF1D3BECA3892293E7A292848E5EAFAF9F3D02979CD7B8405EB971DAAF2684D88FDDBFFFACF73F2842A0FD0D08945EB0782767F3C6177914386DD9E7EBD587DDAF5EDF8F73F5FB56995DD9E5D0EBB374C78FD9715F07AC1B56B7B3EC95835F98DF75D7F5C5E2E88DF7B7392D5E6CD6FFF7E53E467C8936BD7327C10977EAE25BB548B325CFDA67DFEC6B4F76F4E3F72CD70F468768D4A75CD35D46ACAF37857D78FECFFB8AC45DF93107B7CFFE2E36109C93B8F5659FC7FCECE36254BD7953F5B047B9568FBFBC5A7F7DC9CFCFEF4F7A7C1FFB8F01287DD3636B94B7F2C08515D7BBF39B419CFBCBD66A2E0E694C993274D9E1A99B429CE7B0ED2E15A094210FEDF93F19177DC1A9F551F7CF0D6DEBDD3A75FD3F667D788C5AA3D7B56CDCA0BB50AFD7C4DA2FDB2C64395094EB1A9A9510909B70EE90B80C07EC3A2B56B7917F6C333E2F64FA6DFB49AF4C6A4E6E7CFF3C0040EAA56CA94906BA7F73437874E9E3CF96673BC0F20EC9D3265D2DEC9494973BCBD23E700C3AE1220C898E13375CEBE7D793E73366FDBFBD6FB7BF79CD68AFBF541AA6B7BDE9E65B5D76ADBE639DECE5BFB936FDDCA71F2ACCBE909733AD49F0B04F697132!
 D2F4E7CE69059D2AFD71FD50B777D72E47D5C42E8E42993A63CCF2B9EF7ACC!
 0AE0008A
EED697E9EB76DD6B6C993F2F6C509263F9F3469CAA4C9934267EDDBEC6D6919F7EEC4197B5C9F7DE3F3D99AA4F979CDA1F153A74E9EF2FEFB7B334E6BFBF5FD4141BB5CDFFE6072E8E4BC7DC5DECEABABAA22A292C3C2E006A7B0AA82D79D81C1DD3D6EED47CF54DAA01A83C12011AA3E09117C3B7DFA5B6F4D99126AB52F327161F9A2015C86EBAABCE6F9F3677D103A65FE666F9AB24C9A3265EFA4D06DFB22A32D131323A77E108FCE62B37764F19C6D7B93AC66C1F5EFBF35E5F34FDAB5FA7EB1F6F48CA991567B4393E2A313EDED17E90F45244445D9DA4638451CDA0000809078EAA389760EDA4CB141A216EE0A0939F2F3118140F0ED5B93676DF6F64EB477FEDD8A8C0CBF89D3DEDFB739FEE607F3376FDE6C090856CF9F5B854E7E9EB46F6A5CA2BBE59AC9569343F336E3F571C5DB70BDCFA710C6D09B19A76F6BB5EDED7B7C36CFDF161A5FFC5AA2BBBBF39F96B55646C5A686411324A7250281B3BBBBE567F3DEB373DD2514EE12B687B81E093942080482E9BFFF20DAD2DDDDDEFEEFE5BB977F35DDF57DABC94953B14652B1A5E066E8B659B3AC429392A646CE8F4B4CB48C8B9C3FEBF9E46DFBE65B7A2759594D22134D9A8458B9E9FAC9E9DBA7F72C9F3A3F69565E7CB177A2BBBDBBF3846561A90BCE2D088CB54D5E6D6F4F4600848F9E6514959CA6177F3EE3!
 C8270CC2B7823D3FFEFEC7E56B6165CB8F36BD3DFD081C63B56D5B52A477D23C4BC1DB3727CF9A959734F5DD79AF454646132E2B1C7B6FEE8B8CDC6765F51C08A6BC4501153AE5735757BB4D6BD64C9DBA2D2F2F321110EC9D5FBFB5F5C3FFF8CFFF78333021D9063FDB0382F7BC3576AEC8888C3D196FE4ED253F7CCBCCE03ABD68BADF339F68CBE84D9F4F7FC36AD6249C7A6F52D29AB844C1AAA4B8B8C859C5DE9633A32DBD2DBDE3229B43F3426745E67D3075FEACC9932856C90AF8F23C34694E64F1BEA459B3929AE7E072E8AAFFB4CCE23F1084CEBF74B5A62D74774F744FB43C053F643884B836C7BF91B769CF9E234798198EB063BAABDF269F39796FD0554F993279EFCD2444E329C1AAE6A9C884E839C8266FEFE8C87D79F1F1DBF6ED9BBA2FAF392F29CF6ADB1433024ADCBCC8F949A1C825AB78B8951038AF5E6FB165C9845F7EB18838513011B0121327A212A8AE15ECD9F3F9AABC35D33E09095161E99F431812C29031E3F3CF6FC6C7CFB782733F88F38EDB5CEC2358D39CB72F320EB4B4E6B3C8C8B8F9FBB0C4663C133935292F69FEAC6DA166003826CF9A1FB92D3434749B555E1C2020FADC172DCBFDE5F58F6DAAAA4E9C70D8337166A2E5F2A56B9FED52153984EC796346C69ED3D7AE8520275447E82B1D217B323266CCC898366DD6ACE7CFB7C57947!
 E635AF89167CB62F699B55E4E6B8B8B8CDFB8AE3E3F76D8EDBD61C8AD804C2!
 B8A993B1
22B300FE3DB77A3E0BB98C1C0D4D2208F6EEF61F97FF896562AEF8685050C891E53397BB3EB3834E825EC0EAD7769DCE54658604310421AA904F006697835D46068AD41B08B3597392DE5EF59977A2A0386FDBB6BD93AD36CF8FCFDB367F7E7C52DCE65949F13793A237476EDE1C373F0F2CCACC30093C0E0643FE6E9B0408C870841E2519B2C0FE75554B55104C7EC3AE644055A26DD73ED264BADAA9DA8525104E99210EAA90924C952A042F5195F4EF2982429CF679DEF3D09B37D72006DD053ECD4956A1CD939EEFB36A6E4E9A9FB46F7E5ED2E6E839F16FAF593311393375D67CABC9C81F941104C3145865D2A4D0C9B0422248C89E1D1415DF6B6B33718D2A689B475A00D0B40885627C92822B29513994A8D00484B01F824A54AE45767ED3DEC8CB8B7F0D6495E82C28DEB76FD6075656CDFB662559ED9B5ABC26293E2F12E1F9597474F19C7920AFCDB342274DB64224902FA61097A3BA8340100989CC1BC40F0B5BE70A77E14277696FD7CE7DD4DBAB6E518B856A89243BBB2628A886AEBD5F4C8F2025FBFBB580EA9A91D19C3715E492E8EE2C98579C3415D78A24981A17171D1D3967AA0F9217CF8145E6F81447CE8F4491988485194F4D825FA07123F102770600EEA0AF8B6A6F0B3333B18246572B93BAC9D44AB5542371536B0C3535FDFDAA7E14EE6C40E83F5AD!
 5DFFFA81F9AD235E3FD19442E086BC1A9CF8AE7CD29DEB7A6785E71B4A5A565A2F73C1F9F7933E939F744EF53F3E6440242A8D5DEC993B7814B9E5B81BE118E8491967636BBC23DB7465DAB11E22A33D532A954DAD7ADC1A1566B2412AD46ACCDECD7025D4D9058035DDBAF85C8871D5C337C88629D9D0596DE33677A47479F8A5B8810A308030ECBCBEE3CDD26267A7B6F9E1ABA77D6B649CFB7A1964C06991397C2118984E0E28444160B36ADC21675AF460F6BD7A865DDDD3F740B85428D10288490B042718DB63FA83FB3A65FA3D56BC580200EBA760DBE9848AE7C5DE0CE5F3099948A2D732EB18E335FF8405AC5DB4267594D7A3E6BD636B0C22CA409713B3361F9C0047BF6E2DD52BDA445D7AB7E64A809CA161286DA76AD902C2161711924D606F58BFB6BB49A471A2D0E8390EC6067F791BDFD171304CC167C6CB3655F3EE27F488C2E2E9E0A82A2B4D8367F56687CE4E67DFB928AE318E602AD0DBD66DD8A209944D2D222E9D52985D9E48BEEDBB2769841AD8131901704A1A6462BAE110BE9375A2D542EE80399B1EEE309B0C2AFEB99BF3BBF7AD85B4627C5CFCA43248211664526AD9A4F0C5A6C49D1E83E3077C06EF7223B95466630281FB829957D3AB5465C937DFB9E4E57DB8DE01076D7AA859935E2203823534360C8411ABD5AA34174AA0A8A9E5DB49920F!
 8F592DD5F627805055C51BC6972DE145236A1F1F3A726CD89DB3C27691EEF8!
 8A5998FD
0D9CCBD5D9B596350FE704FD6A756AB6B25E21ACD5C9D5229ED561B343AD95CB5161032854283E69150CB20A0D9E995186A5441D75425CF6C6C04EEEEE38B25FEF3F58F4348F42EDE07570001545C349513EF397004F3C484A52AEDAE4C1C12499FEC07595FB75A5AABD388B3356E6E5275B754AD51DFD6D5AAB5C2FE4C83C6A055AB79089A476AAD52928DB8016D2DCD15809ECC8B5DFE6D08C040696105869EBA39CEDB32D13271DEBC798C55EC5F5FEA505203432B918832373799B44FDD8D78A811CF8549944A9952098FE8C8231A3520E82414A3F0820E0129118AB5C2A0A0430502CB7108EEEB7E1302AB0590B553ADAC3E88DC3C7F4E34204417CF0314E4A25D89B01D277473EB55BA8190100C7DD26E9841AC96018F52A6D3E994B53A8A4AB51AFF946A3202E84223D4225B109862437695E094A579E5D76DFEE8FC9B18E8722DE72441F583179322E32C5163F7A14A24963B08B5EDB7E78292756E3A9D54760F18C81C5260E806069DCCAD056650338A521357E95E6290E05BAD305BAC111A0417BDCD106CBEB1F97756A080F84BFCCDBD7B9FEF9B85328E02BA0F145DAEBADDDE8E56BB76AE4E874FA152860B578299652024350049A52D80A1A30501432D11AA75B08304102464148A1AA4A9416013678E478BDDABFF2B02465C0423D1327A6AD2DEE7F3374FDD573C!
 1F15658EA54FC96D6682B9EDAA1B05F8DA5DDB0D0412A55A296B516A109E80E0D6226B916245AC0A6C12FA821F241A0641ADD3696AB285D982799F512620112D727F0BC2C2999689BC2E4DF48E8C6FDE373F72FE07FB92F28A8B3F2AA25183AAC86ED1F2B5EEEB8AE66A11824845ACD2828B574AD4527628996180A01B4F1110209108CD6E91EAC4D91283E0D43C2CE1ECEEFC666EDAEABFFEE35F23D27D26952C568E80610EC4DC0753A74EFD20A9F8233B9860D7EE75544DF0EE757E1B768BE7CA74B082B245296D6911AAFB10152DD207141EB03E5B5F2D4105831D2464078D04F1A3CED62B05D1F3BC71928FFFF84BDA768B2D5BFE35101267CE3BC5A4AA3B2546DC6728AA73A2677AC7CD5B1E72FBF6FF7178DDD9FC0C52DB7DB7F0FFCC45D44B5B94A06AB54489C8708341A4585928D1C9280000907E94A859702034644282F0D9299861CB6A0BF9AD5C8BD5667E7E592FDC2D235FA392CAFBC23D6EDE9C357F21729A786DEEDCB9AA72774269EFCE17EECBB92A3505BDB257969DAD23A3CBDC1E48658C33B12CEF08B5B44FC9D627CA20B7F5E905A736477AA32DDAEA22BF9526DFC043B0B71F4702EB4793382057B8534C467F563C67CEBEA91910A2372EBA13ABDB134941C5B923707283E8DA646EE27EC49A5AE9E6A67C4001A153EBB251C4751418080F3E26943AA5!
 8E0245223815173DD3DDDE469E1A2B7791E7DA9B8B84190483306F21AF5209!
 027A8DB8
3579ABF27C4E9D5A372E9912CDCA895EBF9B54D35C9D58AC012DC10D445752D023D2545C0BA6C075231CA46A864049B90308F322A3A3DD1357BBC4C6CA53D3B6FF751C015FB349B458CEBCCC0370675C6D6939277ED5AA35DECCFA3C0ADE4B44F097D7439ED4648AB54416ED321982810C8E0C44FE893558564D18E8E2198348198435C5C4B9DFCBC3A2C2E4F2F57F1A570CF62C1E98F5CD52196B5E2C5F3EC327CEBB7855DEBE71154FE295B7C1E50D13CA77170D14150C142D2B72086A075BC9DC90113A99B45628AED58883AA32790F485FA26891227405F3F64D4587B85A7EE74E545757AE3D6F025E38D93B3B9B9B05FCF6F23A9BDDBBCB4FADFB6826BA4F9FE89989AC4EF10A966266E1EE2095C300C4715026C802404AE00B508414FC08A5A0A161606B8D584D7CA1EC7B690906A1B8B878A6BB8D4B6A6C6CAC0B9F11660CBC77DDF9076B97FAED2E7F1D8AF1F2EF12292A493D26F2A940AF285FB448A5D5D64215422DB5C3F10E8B76AB6A51A5503A74B5284750B7350505AD416210D2EDEEDBDD521D31A952DAA8EC15446F2EFE2032711D4170C97DFDA5267ED9A6B0878936AA81EFCB73772F2FF746F441D49E5A730AB53291D9E8B2BDFDDA82FE4CB1100BA21EAB6B215634990E8B960EB4D7B60BD5B25A35F422C850452E1AC8ACBD4D477BBB16B5ABFB41E3835E0!
 1DAE9E262EF7516A9A9A91680F0F270B737071C7D2EDD35B0A1486567F391CF454B4244A9BAD0D2ACE42FAF5B5BA07D044A40055453F653DC6BDB331D8A54ED254135424DAD460B808FFA55550345F8DD6DE1AE10955D51914377B75AD9D8A81378C7CDF9604E9CF7D7B1A9A969B91FBF348039DC13897CDC6FEC0A7175B8E6BAC2671E328241A046879A797AD965BB01ED23A150A904EF2B5921862A8150697778E69089A6B2063A05A2514D5B042A075566A6CAF52B9F723BBB22D5EDDBEA078D2D02CBB862205867218FEA8AB0E013FCA50BD8E3753637D0257F12B2E7C71933FC8A2DF918A4AF7C3024BA5F76A86DD710D149D4BC3850D72A755443B51BCA559941AAA01AB14E53ABAE453B5302CD4AEDDCF2E51976AEAEAE9FDC56373636C211E8E4BCBDBF97CBBB6EFD62CFC7BF79FDC47530C1EBBB6FA84EC30A8269F19B36C5AFE1D99AEFE678AA70B754B5CFD5B8F15C03B1929D09218290B8DD5E5BB47611757955415A528CE871FB4BFA83608502BF0C34F976197B3EB92D018468D4BF39DEDEE5692E694E7FE423C06C0BE7B51B50046F0C386496ECC9D8F4FBB7A61F99B6E98D62DEF83C61F318166ADB35129E6B0C90E658B146580BF5DA7EBB64C30A87CC9AA02A87AA9A1AB1B8849ACACC9A5D8690A20C3FBFDD197E3F66EC39DD2D418D888CFCA078CEA9EFD!
 35C5CE413C6C38F0751BED4DE7E375AA04C55886BC657493F1E9936E7834D3!
 3CD8CE86
C2E91EE89CFE6C20F7D0F48B0D51080A04C5841D6DD276C6F2FB073D0C2FEC845343278AAA43F138189405DFED1EE1FA7F94DFFDCB55B5823888B2608F3566CB548DBBAC4FE25021C7FB75B6ABF811A0F6D66490842E1E611C1EF3F58C343308FD788C0BFB9565B2B25086E3209B173B698CC2EE9530B6B6F970CA8D04D0198584BCD4B498D18E4BD2BB3C4CEE6222C31FDFD6D5FDD16DA2123E2A0017CBEC9CD75495B6DF6334F073603362B4A6E6B6A1F6934DA5DD74242FC8E84FCECFA86A5D9FEEC2597ED2D97EE827613A28F00E141881858A30016E893486A6F67AA4AB0284D166A353A71504D0D847B3BAEE8FBB52B067E9CF6ED1B49BFFFF993DD0847EFE835F37C72D3725D722DFE4121E0CE87E3DF8B0A80A05D8DE2A2438F5A52722424E49323AEAFB1347819944B4FB797B8AA2007E00719A524556B54C6BE3E68B57674B0E8EF80405CABD6A1AD8460D6B6C311E513EC5C7FDC337DD6ACF8239F1C11A0953FF5D1A90D4B735D2C5C72574F701FAF11CEE5412A7409EDB5B5D48CA8DBDB3355AA4F8ECCC898C81098B9D97EA1AAD6E1E2EB7673354AA541ED4669413588F44A9FA4BB56A8BEAD866FFAE1884724D9334111E8ED4B0A6C2614FDF863C8CDA993270B3ED9836ECAB2DC66EDF76916162E5BB72FCBFD986768D4C122945CE27B1D983FA8E88656989929!
 0CF9C867C6423E0A7912BB98D9FEDEBAC4A57375506C4C8DB8F5A12A400F402529A96511A26DEBEF0F42283CA28762F2447F91CD8A239F4F9FFEC1D449CFF74CDF040889DF97AFFE262DF0B84B44C47A973F998B94B34D26108BB56A4D7B7BD0D2D7FFBEAEA636287357884FE2475F30047C503A7F31A0DD55B06E614189161A8964222A316B27A0A06BD5DD1A03DAA51AA1B65FAB7EA4A1B814A3B36D170F94BBFA7DF5FEB6E859939FBFFFD62A34F7FF37376DFBF6D8D4E3A9B12E6916BFFC915568E7850570A45EA3D7CD6D772877B7FFC7172AA121B3BDC4EFD45F12C70B381B84FFCECEEE2248ECF2EBCB846C7119C2D20DC2883165B744689048C48F50A51EA150182818B48847955DC6EFDFB78A9C7A330FCDB20F3AEB8569DB6FDDAA8B42B14E75494B334FD497526A095B90592A36E05E4773A24C57BF8FA0E913172E64CD0533056F35E78F8BD044114149FB20549844454474774BBA2506214A08A41B595548DFB441769BA6BDBF79FEE4BD56CF2785C20ADEDECB97755D3D107BDCC525D5C5E5FB5F9015EE5FAC50815F346877DA3337B06BDE807308B521AE3EA8094B5BEDEC6EACF89D3DCFCF2C2ED72D13A279D548492ACAA4884BF45450EB4A52CFC8696A6B350603E36914AD1ABF4D6F59CD7ABE97363B4237092EC745976F757A1AE594E60408695B27B87F!
 6C5F3E40842A44A1AF6DDFCD0C9F588453A0C8EEF1B174BF58D53FA06A6F2F!
 72679D3F
6170FE7860AE0CD59029226A6CA11AFBA861A0AE41438A49080DAF113208064028CA609B5593270182ABC072E6BCF2ADF2036151B7E4B12EB1A988868F2754E9D4628DDA8008D2A82EDA53ECADCD440BDC7DDAD5D5CFD2FD86F651FF40C82ED58A75EBF8EC00958BA90C0949151204C240B3064090299968A384C1570A6FA156B2CB75531E8D949F873E7FDEBC078E9867B348EE541776EB56EC46A7AD100D5B726BA1C21149B0427BC1EBCCDEBB719A5A61889DDFE796A082DAB92AD7CCF61095EB8A85041046500BD93232B202F5B3040144459429AC51EBE839E8686D36284A2336685DF326B1C1515E6852BC9F20D172DE5A8BAEBAD4885B72CF54272744834581462F51EAB5BD1A6DEDAEA5346C765FA86A570BE78AFD36F9F95C5E219EDB5E9BE9EABAAB7D57896A030B5E9B5D42840E542113A5589F4584949F36A0D1D76998A412821F6B75C21A71BB6BB395D594E6E6BCA4A4E2C8CB82CBDE176DCAE5B1B151F2BAD8D42824C5D7EBFBF53497D128C14B0533ED898C51ADD492DA5DEFADF53BB570A05B785B7B4DE5F0A34AB8ABC4F562E2C28BBB0B32C5990634EBB8F23EE26A29DF2DF09DB55A4C7396710820C99A9A76D7BCF9F3ADF27C22E3488509DC2DCB9FA142DDAA9347A5CE0EEB4ACD4D3B841462432184DC45BE6C1581F595B5ED7EF33EB2FC5D6637B24A1!
 502F1539259B2ABA0A8C02108B2448C159432487489C100BFD732B224083235646D2D13741A614D26345D667F7BC62AABA4A4397134B772B717AC4B5CB76CBB4B5A9DBCAECEC9891CB1BD9FB4288237535CB4D69E0FC620A14EEDA62BB15B3A33D1AEBBBB5BAB7208A1BD0EBA4F24B3A4065A04B4A791D4D292A001363C5053DD62EE208650B23113AC80A7B4B042311B9CB1847216AC9E30C16E7B9A4BACDC332A2C4CEE62915609790116D58A07962E64AD8CBDF3066DAD4E22ABDDE5F09EFB5A9550DD2DA4FD0D7E7321C87CD06095DA142827315DAF5AC903A0A138AFAC919010B034960ED2FAB10EC09EA75841EED71BD20021B5EE4E4E424257ACCBD6AA472054A136B368ADBBB3599ED9A15482F3B525E5F6364150FFED244A697BA1BF0462906D3250566A7808D934E6D5A08B92B1FC942AF9490F20D440D281A96B3297F2AA87EF1E055B211AE530022044852574A56D6D6D45816A5721DFC6CBF6C72A8434E2CA61D106FB09556A89EEB63693BFF62A9AF1F78B69B24DC36564257800C204393A1E8F8441C2A2110537285383AEA2266829DF24B2ED14670192E1CE2D97AE9CBAA83B51F28408F9D62ADA3118B0F9C7CBDED27E42899A20740F2C5DF1F15283BA4F36B77D57D0CB03178D3E8E8D97256A5C39FA0561AD46681E36B1EE91461BE400D20DED24A5778F9!
 B8074B0C029B62E21C22922C1B30E8E48E88975395175A875A0DCFDEFE0DF8!
 51318867
2108A5022EDCE76D8BD6540D622D3CDADD59218EB17334D46EB8BB528CB0844E225438D160424E4F392FF025EA2A6B22A484C93586DD022B3320282BF7F2188AD9BED19152B2F74AABB1391909323971F3AB16CD9F7BF94DBE015ABCB5F87319CD7539D1322BB84058B827A116773E73ED25655D564A276D6504C640AD9905FC88A84140511D6D68CA725C38076B3167DA683967A5C4DCD8DF1299EBDFD177F143845793A39C9A3C2A270C8A33C6F2524A741444EB0489BF08F2DDB17FD027B4D08C2DB0C1A19CA6E8DB85789767DEE5C9D249BC563093801254DCB3661241AA54CA704FDD5A01468D4FC24D68C4146F56A6040087D85B45CF67FEDC707237FFFAB401ED19390D3639BE09B9C13E61425F74C96BBB8A4B958C8E5B1812E5DEBD3B6383BE792E8D48A3532A910FA504667D6B92959D70203682912B4B4F5426440EDBC10E2A89D869D3AF3E0D16C88DA1A079550869653AF5FF6E69B5BFEF4477CBCBE65CB1F052EF284B030FA8C08937B86C5C6CA91215DEB23222A7B2A13BA2292B72FF98F459A76D4B820B14EC7271A4BB63E3594201A032D3B687D213FE857B3C60D3D2420E095BA710C4A5977B62AA81DC92969A9B2D8B265C204FCDB4287401ED605528AEA0A0BEB720A4B708A8D75494D93A7C9B7CABB706CBD752BED8F5BC1EBB711CE383FCD8ADC640C07!
 229FB61D6104F649237E21429245289A486244546A9D6E7C9AA294D68A6B322127C512C9B2D5BF6CF9700B7D4E98F0E11641443212C1966EA2CCF1CC2108D00CB116E8F453A1A1E092D57FDDAABCADAE556752974EA30335ABC932994E9389EE9101A08C240C7418C42C42A9D546D9D2295F1ED26E8AD3B91A7D6F95CB6A0B60F8F0975F565B58AC5E22E8C2EAB6097484D585E538C53AC9A19DB0F856A734F6EDEB3F598865B5100B482974E932947D35EF8E5A31CFCB42E609C68E140C90053564328A059D52FAD20CE069F415528D5ABF3ED7C2C562C992255F1F4FA3B0832370FD8420E74E9D67D89D584F50652C5DBF3C1618B6CA2D9C5FAF92D60A596B88BCC62280A0A3699A8C08979A45A179CF896D33A8898AD95E1CB5FB40C020B4E0915A795BA796889586CA4AF9F1AF8F7FBD1F9768E1E2922BD88A4CF48CAAF38C8A72024186C53A39C5DE921384AD7801502E71FEF32125CDCCA8CAD092B026D51DE95C197810FD2A5D3E6DB25099A24D0709DB6DC9D64AC8097C52D09CAF458A948543C5BDBD427DE56A9784885492CB3804B13D4E4E9EB17572274F4FE048880DBB8314614F5AD0F372F8ED28BB32CA7C145B6115E81012144D930CCD720D7E5D5B4B9A94AA948C1FFCD3CBB3C51A26639524EE2993293894C848A5B4575F59B953EF1B9B8A703B9EEB22E83A!
 14961376071F6151757561BE77A2A866A7BAC4A6B9B0904067B1EC281891F4!
 3FDB4E42
A72C260C14946A6810AD986FA5D91618258A44C2AC040C12998C2812ACD4472FA64E4B03FA52F682191A5726B81C47F6C522162A7D290E7240CE514E9E39BE60C91C22CA5B4EB002EC90762BA2F228AE4D27AE41F181470C428301C9C797212C44FD3AA52B49740956E1773C9093A0525A18A58B44A49B140FD069F2E398C6C6C69DF2D83AA73A27B95C2EE8E94142801D936DC37212927B22C2C26015A447541ACB4917F9F6B4437AA544A94139D6D4EA58FFAEA155D80895769700619C1734126A68F1454618B20D3A14168992C96A4040D556F363DF16A5BE15512727089582E4E488B03B0909B72222A2802121CA33D609E688728A65B1F23579A432FB01A91EAC065E2049A06425A88FCE4DBF2542023AB6ED24615B0D444AD25A43B6504A66C0CBBA65D26EB290D23C846E696C4D937BC20A51B111824A3033AE1B11D01515063C514E613907502E9CF8708521BEDE7AC8401B3B08BE6C9D1BEB9BBB89A2995E576AC80C94252451B13C1BB7803674B0041C26E3A5BCB4BB4FD9CD7757F473AD54D2EA14EBE974272759BE15D48448C80100206104058E3C7035ACCE89B103D81AE5E250B684824922CE1622C2686B852050CB26653B8F100BAC489101FAA46E32733B25534247F26E9041F4327B00789F4C3657ADAFAABCE5147B75A747B29CFEA722E4A39353545844584!
 232E83A2AECEA9D9C3B4EF81563A81EBD5ECFBB5102F71A345272B5922F55EC21C2035460A0BC603B3E4CB4BAA1B5250585E65E2D35CF80D42C2A08244C23BEB4333921C777E5CEE42E4157581DA8C933CA36D996958B88A89C3B51774012759EC010BBF5A894C6F96C2F85325CAD247DA6D43149283107A5542A21FA34A0DF61A25126E3AD000685A8072A37B639368E80BC810B4B4ED8B9D323011911D1E5999372E74E14B2212C220105232CE10E2051A878A274276723BB69EB596A3E2D7A15C80635B54DDD92BE3E255BD14DD647F12A26254FC947A58CB6D1F1454D630EDAA4E32D673EF4BD8DFACAAED69DAD5DC8884A27CFAB75108EB040046148084344C20D708493A7BCC720314F96953F10D7E17A642CF369C7B1AF4F66DEA57663CB69A09F8452A2D2EC1A9E1CF95004218959E7FFABAA962825FA9EAE849E1E79579520411E76352AC5C916FC4025B3A78795CD1C8A5104696BE303759F4E59CBF6E4798EA1948025FAA47D2FAF895DF15C580B0C6EA03A6130D400043C564BD21986CF3648CC829EBD0BEECCD667F79CE8A9949FD00B22C2E07CCF3B61093DBEC9949709949F38E09B2879585523025847CA833280E24A26ED7333D31C795746974F5FF0CC5C371D0DB7240652FC445544E4624A5890162F23192B5070025363F6D1435DCB2E35522C508192531!
 878B2DCE08F3A1CB1CBF48D0F7036BA2D44D90D0CF7DC18927B34BE508F437!
 01B87206
3BBF67D6405B184FA6C1DD54F78A05668660496B7640D90A644D278E94465D5831641421755484F79986D7282BC2EAA2E16CC48694A87BCE7C103B00A8946F23C3BA46EF77EE893FE700F7EE97B19FC44052421E08F7BCCDC6C317A1F6D88A240B259A494ED13D39BA803D72B1F541D3A2A7920112002C30EE42484DD62D5EA0E3E0F841D883A9073079EA8DCD9F240AAEEA6F33308CA3E373732E8031AAAB144E003D1BCE746FA44C62708E2020D3EFA17B4763AB58632494D31C15E87BAD9CDAA95E1A884F629E94F79727250322212921184576D6D73AE26E023073FB4EA1FB0B7F264D8DD875EEE07B71FD84F6E6EF7DCF8EE9DDD0E409BF1FC7D092FBB7A663B360B0612A98E924249C30704A3941983368BCD10404611E86200018A21EA0E5C0103809AA212F42D0F9474838C198392468AE6040002BA23837DA07A53092786646C353EF03233949AC918760785448C4E448A7051B319AD1B4D6901219917AFA4A3513A796204617AC6DEDAD9D8027AED96F293025801EBE2EC08C07BF7A4D003D98878A2082A9054BE195F305F9B075E8C32644C371139521E49943237D0989A1F8811594A205F7908C9C9093D7227F4D9E8F0EEDC41214FEBE96D5152AF4C65B1454610F8F067E795D4D0660FE898A71F65378DA0D5CA973326999B190320C8DCD894816F72A9118141CC!
 2C830F8340DEC59BA012FFBA927B92E5B1B3A19BEA62E5113BDD5A948845B2024242DADD6D9E6A2211647D861A7EAEA2948D0721C5C6CB2E929115F39A9B94A713A623098244CA4B17B2810C7E16A34C45D8DA1229C00A091E068FD2649469CF9E56DFA38D0F5A688EDBDDCDC24BD9DDCD4FD2A8E6CA74ECBE086AD95E5E2CAB2070911B6F03F2978CA70D7E30CFBF914F1E56B170027AAB41D015911391437F34970C23A022E8F5AD951148051CCAF1D8C23BA138945410D9BD414A19BB4A5CDB3D3E4B411632DE0E3C4730D3332CF7DC90474ABA9F082C25BB778FE50AB538E43B46947A01F423B110AAE3F6AE9D1209881399C38B4C0A9E3EF3781FE980AA4835926E44315F3C33351F80FC27C5A9D9E08CA1F046944AF89B4190C8EEDDEEEEBEAD54F7221CBB75DDEA6E0AD16CC4C2018ABF3B517279B284DDD6A0E669D45CE2D935CA9850949205E83625F57887C0DF1B43955B030AC66B98979992E9E361F0A55228E926B9D4F743F70F3FF4F535B28C900203BA3D40A0FA7CD5F62A14ECB243BD349011666B692A43E37B89B90EB999B52AC961D2E5ACF881A7700221E35C260A088FB846C2CB232A207D323E308912FAFA1EF43D780086FD015FD89D46083235133E02F2431D941AA2A155A243D3E6303010D44FB78BB2418939B2E1075C2AD6A31E91CCC06A14D34DE6!
 00A1FD08D08298952F3ED8C6139410D0AA0FA48DCA075225BEE06C90C0DD78!
 4D37F102
15A53ACF5B69F265977AD10CD6B41614140CD468D0A6E14CAC02102F91EE64DD03A966D626AB79D6932140D88D733462670D869A111533C3CB310F8520F45F8BAE856509E525720DC100530862595D8E8A75429BA7176A589F4E1B22E80CD44AA9DBAF628B06DC140974CB14937FECDE24084B8D81CD16587B2D8615E88506491F751B52B32F64DDB76FD3AD13B57474DFEE66304985022BA829025D7D9D535AE551FA133C9C8EBF01404B9364DA4FE02F05CEA0C82356A0B89232D2277AD1E9DCD46C2047B347D227241A292A49E2F7F15A55CA06D042FAE33BD6756766626121DD730945936D10F4F8DAFA5E8D754241D0EB79CBCACC335B89C45CF4E8963DE4372118573E94ECBC06D1E9507A34D4CCB07D1F5E3DDC23E1405CD127E5334923136ABAD99DD1A0F4EE1FEEDD96CD9D4B37844A714E4165EC9DABBE51F21EB2019D9BE97CD278ECF22916C07714947DE61641AAE407CB6C8C05C46EA48C0C6CDC452337A95943F0E5A48FF941AAEEA5DBAF33B5FDDA47623DCC20DCB54BBC4B9CA9D521AE1E089CEAEEF8E6C4765D6A649D16AB5E7DF4563E9418CBD109E98E4EB28F1BCF137D2C126894279349C80F6A351B71C8CCA55C66AE10EC2C7DCA47FAA53636177DCA6DCA6D56AF9D6073F1E247172F5EB4B129429BDCAB14D000BCAE2E819A67590BCF827D0C411F2D7!
 E4F66A67A37265B6901A579ACAC265F130C21DA2C1A28A86542A1F29E6CBC8190F2D7C1EF48942CFCC7CC99AF2D9C39D3DB7BE6CCCB0B17FE0E0FBF705EA151B7281B057234119EB1AD8D38E73D1D085D6936C003E93DE64EC0209146B5C08D0F853E257FA31CDF1D81A1353C26999BA14638EE01192F72CCA5F3F6B5E8D7A64FFFF65B7CBA4E9F7E04DFA7BB7EEB97B842582B9336C211754FEAEA5A1F48BAD573998AE8E379C01C896EAC46491945CAF882C57A6A751F1FEE4AE53D248959DB1B6A0CFC2BA54ADE924A56DCF0AE5DD17FF9592010FC2C98FED5BBEF7E35FD67FCF0B3EB171385B7BBC18EC44B7572DF0706752DEBDC799561164A7CD565FE95F2EEE06381B1255FFDD5F7CCB7FD92AB24867B3CF1B0169B816542656EE6CCD7D85F4FFD3E9AB6425EFBDFF4774CD3BFF8EAF66DB5442F003301C4A1C65EA9A41B390E832BA5F7EE29D56EF794F76875D43E73F195F1A121E50B8694DD310887B070919AA5589F1BF52960C83E255F31DD786954728A201CF9FDC7FCFD48AFFDF8F3B782E95FAC68977437C20A726AA213F4FA6C3556C3250105E2FD9E4489EF4C2AB322ECC60F8C5846F491186757A9A4BB37DC28B9653C7F48F96D42AA53D216BAE552FDC00D813E3733FA2FF41764BF73764FB44CB477FEC7DB4704821F17AED0491FF4322B00C29D9D8D781!
 B3E5BA4EC3E4DE93D56EA292EFADCB00EF102EF5537F2300F015C6930D04BC!
 506250B4
26615225F44EA03A5DE20D1672B29B0A5CACC998070E46DDA6E5B68E9EEEE9CF87B84C517365A491F392296ACE01971E9C1837BD20712370242A7C215D0A63356768350813F988FF93B0398872979A06EE0369A7A30FBA8D5E6FB6A5998641FCDCEAE3A8A33F64A752504E1DBD7E8CFFCD8ED07FF781710165E6CAD426B491008833C99FE885CE9A657EA25D46150482859B551539650E3C2525DC65307CB053E7F78F1C400329DC5DFC5A06C51EAB3254A40A49B0A0D0E0BDF452C2E9CB9CE3B7A62F4CC85A716CEA45828EF6FADCACE167439911152535DE4115DFA653796B5B62E5B565950596090B21922D351E64D4FEA00C6F759489052B6DCE30344CD14B979F46ABEA113170067B83D10571DD5AA16C20A5FB95B5ACE8CF389F3B6B45C78F9C79FA75F5E21AC397AB44AE01B010C51C73FFCF09709132A57FF71C98D1B4B262C593D61429554C22426D5BC5FE95A2D79A94394AFF4943C57C9A4AF8CFEF1580F31CCDA36A5AC1F8EF8F6DDBFBB9F8AB62CF6B69C87BCF8EAE71F2F6F7824397A74A740BF3321AACEC9E5DC12170B8BAD95B969870AB6EFDEBA2837B78A49C13EDE29E658A7019784DF9B7793F265009DB4394F792EE1EF3336637163914B02B70456F8F62FF6896BE32CD7785B7EE46EEFFE2E5941238119048D2B3D7C23E4728BDCA324DA1BA5BD06A5A4!
 46DC9ADD2D9549D80DD41229F5EB549F996750E995AC4960F5540D4EBCC7C700A90824355F48E9DEDE5EF20DBE487A95B29285AFB168B4F48E8E8723C6213C524B100BD9BD8D2B77B6F6F46C3FEAA67CD0DB7BF4A89B5BD0FAAA1A9A1C4BA8FDA4722CE5ED4100F01E491FDFA64889C6988A521BD801BCA022FA2D72B4850D5A7B593BD0A22B59F8EE11400086793ED1DEF427B6EFFEFCE3C20DED2047BDE084C7CAC69567F4D955D93A69F6FA25ABABE63E5A3D61A09FCFAF3EF344800904838145859AA60CF4D70FF7180420A33F1542F6D4644BC0062D640129632682A0812A6F51EA4A2CFF22980E2B789F8223C80AF6B002412082DE1AD1EA0114BD477BA59A435B3E5EDFA2DFE06C135403F58CE4C499954C3428E98FA60D2063CA018A827BCC085809E121532322F8698194D91E8CD842377AC30868FA5A744A5DE665160B0BD77927AE894B9C7939F1EF6FC31113851A7244579A534E4FEB4E7DAB5ED952F0D75F7455139C9D17098384EA5A1AF8533413F3C0049271E1E6666E14912A64F33EF8EB5E1FAF2CC142D2164A46B716E60AC83476EBB91A56F8F9DB77ED2D2DED2DD75CB64F04417E05081BA025B38F0A12E46863A36E551EEA6D3158FC75D13220F8B8B53D48580B298473110B19B2599BC2F656400DA4E4DCA42C3FA9AFA1F8BB87571A8E1A10D02D8806!
 3D3584B8789D92A29139427519E1F836BBCFFF236FDAB0FE02BC3073457B77!
 3762A135
CCD33356EEB47EA7A6B7A660FDB20DCECECE1BDAB5AA4724C90D12D6FBF2DBEF4A767F8E928D7858E3D84731AA6675445A7354EA8640A50CA6CD0F98D7A0E91DBFDF1B684AA858FBFDDDD91D103EA2BDF8D78E087EBCBCA2BD56A6EC155CEA714A8872921FAA123FB2D962B3DDC6D9F97587B9FD4174A394AC1B10BA41D2FCB8B18FD74D6E6EE6BB026434E167F0B06AB644FACA78019D9D41924DF149031E442C78E108CB4A7BFB8B7497FF3FDE1650466835346BD2B746258475F518760AF51F3B3BAFFBABB37BC1DC16FA9BBF5EB546D6DD0708C26EF3AD52BC2234EB9A3EE90F325E38F551ABA694F4BDEC7AD83D6EEC5E5C6A34D91FE96412410BDEA65B972DD95F7EFCF8338A7579A658AF96082EED4CC809EBF2D51F128BD7D21FC77CECBE5B23CB6CADD1E8F824246FBB99472866253B3EF595F2429F91D103126E7D66C5C70F57FA0CD96406622D5DC9655841307D66E2CC85EE745FE9DB506ED317AE108A41E282433DB6095DF2D6C6D6D645AFFF83FD85CC961B41D935B92A098A045DB4942F06E3C32B37B7F1893ADAB43E7E355635CD0D241F308483353FACFB073B5E262BFCFC7B4B4BF6E7D17FF996007DB1A296B6B20495B4639C7CA9B76AD90971C16AE7D727D8BB4FC82D5A961B04B6A512CD0FD9C78DECE6E6368E41F6EB10BC8F9F27984198C50D939C527!
 EB628E3AD7044F0D54C526E7FF916BAEDE71F01819E16D07F8694D0DAD85BD5AB9434D658A0424DB041BD1676F3332225AF665BCC837CBE4D79657D73E926352BE5EFB67C8976FCCFA650C865AC580BBE855A7BFBB5BFBC7DE467FAAF00C80A3AB0AA20223922E1D04E7DAFBE57D9D8A8ACC9CD9DB0E5869B906D3848694F93FECF9B16FA90B2BF8172336FF93C18F7C62B702826FACCAE20D569FEE31C824110BE65FF050182E0936F050CC2C2F7401DB042576504FAC943555586DEC6C6ECECD643AB6F64BB65575555E9599C4B008376BD1B952D04E4FFA7E28A41DC86A1A8D3AD1E3214B469F170940C1D54085E3AB4851B8E1EF5A0E112E892426829189AFACC2D221C24B77AEA208CA078F1A0BDB307F7B62C598C13088136F55EC32D99FABFECA4A98864CB0424BEFF97DE7B92CCD00C645DA62435640F11666BF2237B3361E298D544F7707AEC39CC11DB1CBF89B1CD81C7F4AD3C47779CCD803C5BE3577A9E16677A1C29F563AEE680A4948AA248919AA435645242DB046A242DA15E967549EA3AFD434CDBE581439C08118E73043946AF77DD258C0BFB6D8E69FBF025CF1FB6F0EBDF7F9BDDD8CCB6A250C6A95443AE27131D9EDF9E4FCE237D2B42E5259E548A324FD2BA5093248934D82A54999E32B8ABC2D0C3F060C7D7D13B367F28DA29160C0208FAEBD6240B8!
 B3EBE95FEA38FBB999D518BC22C99166A18768578D6E9AC2EF8EA220A83442!
 5BEE05C5
C70B110820780A3E036107C31E53F2BEE0751C71F570EF9DF2D0DD26227BB890CB1828E80159EEEF77BCC165CCCFD9BD71F76CB51665B058D8142D8FAAC9A08DC8DCD579D40A5A1AEB42F3A0BEE77DE2D38F7C5220804B41B70A1F938E43E1F737F4C013191F5411B6DFBD090B9936041035DDE3F1E0C5E18720DD7C1E00A8AAB27BF66AE6B772DC0EC1B401DF659186A70011D0D93444D55B774A730BA2118929E9CC2BC0349165887316F0AE09B7A4060CA6601B3592F69FB901D14DBD63DD0512E3FBDC4F419F277C8EF9B5A30CBB2CCB3289E1D8208B4DD54A631855CD091749DCA29111DB14D4D585D6E7A25851E806F823FAE7B318B252154228361260EB38307AE9B46FF217F23D3B26BFBFA0EF5285CB5B8EBB6428BCDA00B9555E1F045B3D10D1DC545B1319F9D424195A23CDBCEB7B19183A5F2A47902B15A4805E6AB60F85D9BF39AF8E7460764ED09B5067FB7E21C737BCBB7CB9B74B7CB32B327DA41D9AD877BF77F577F05180070305F1E2202685D0000000049454E44AE426082');
+
+insert into auctionImage (imageId, auction_id, data) values (3, 71234567, 'FFD8FFE000104A46494600010200006400640000FFEC00114475636B7900010004000000320000FFEE000E41646F62650064C000000001FFDB008400080606060606080606080C0807080C0E0A08080A0E100D0D0E0D0D10110C0E0D0D0E0C110F12131413120F18181A1A181823222222232727272727272727272701090808090A090B09090B0E0B0D0B0E110E0E0E0E11130D0D0E0D0D1318110F0F0F0F1118161714141417161A1A18181A1A212120212127272727272727272727FFC000110800BE00BE03012200021101031101FFC400A300000104030100000000000000000000000003040506020708010101010101010100000000000000000000000102030405100002010302030406060608030509000001020300110412052131064151221361718132140791A1B1425223C1627282B233D1E192A2C2532415F04334D26373A3168393B37484942527081101010002010302060301000000000000000111023121410361045171B1123213E1224223FFDA000C03010002110311003F00DFF4514501451450145145014514501451450145145014964E4E3E1C2F93952AC30C62EF24842A81E926AB5D55D77B374D6248FE7C7979A874FC140EB24CB7E1ADE256D5A54!
 F3E55A23ABBAFB76DDF27C134B2A000AB491F96109E6B1C00B2ADBF19249AB225AE8EDB3A8765DE64961DB331326584069635B8650C4852CAC01E36A93AE5BD9FE63F55F4EE3A60EDD938FE55C12A71D1CB13CCC8E815DDBBC9635B4BA6FE6BEEBBCC6D24DB07E445E1972E19FC25D45DAD1326B03B7D1DF4C196D2A2B4E6F5F31333224231672ACBC55216291A7EDBF36ABB7CBCEA36EA2D8964C9CA8B2736076498C6EACC50B1F2DDD5492B71C38F3B52CC12E56DA28A2A28A28A280A28A280A28A280A28A81DF3AD3A57A6C94DEB75C7C597FC82DAA5FF00DD47A9FEAA09EA2B5B657CF2E8483F91265E5FA61C6703FF003BCBA6D1FCFAE8E720362EE280F69810FF000CA68369515AAF73F9EBD3B876183B766E6330B82EAB8E9EABC8DABFBB50C7E7FE41375E9B1A3D39A2FF00FC0A60CB76D15AA76CF9DF8392BE66E5B0E76240085391094C88C16171FE5B721D82A4FA9FE6F74D6D1B3459BB3E447BB67E629387891B5B4DB9BE57DE8957B88D4790EF04CC5ABA93AA764E93C03B8EF792208CDC4310F14B2B817D10C638B1FA876DAB9FFAAFE6C750F567998FB7BB6D1B3B12A208188C8900F09F3E65B117FC2961DE4D54776DDB75EA4DC9F75DEB25B2B2E4E1A8F048D2F711C29C910770F6F1A4042A1FCC43A18FBF6E4D6FC43F4D590B5E431884EA886827995E078!
 F7D28C0B1D4D727BCD16717F1281EA3FD358B391F7AFECFEBAA80803D14A62!
 6EF91B46
5264EDF2BA6546750086E0FEDA9E16F5D36725C589B03DDC0FD3483B244342003BC7F4D07999919D931159B234A7F94BEE9FDAB5AF5B23FFE7FDD22DBBA9770DBB2E68E21B8632F91A982892589F822DED76D2E7856AD7624DCD25A8A9041208E208E0411C88A2BBA68AE70E95F9F1BC6D18D0606FD88375C78404F8A57D195A7B0BEABA4840F513DA6B7D74EF50ED9D53B441BD6D3217C59C1E0C34BA329B34722F1B329ACAA568A28A028A28A02986F3BCEDDD3FB6CFBB6EB3AE3E263AEA776E64F6220FBCCDC801CE9EC8E91234B23048D0167763600017249F45735754F50E77CCEDFA6876FF30EDB8775DB6153A5145CA1CB9458DE47FBA2DC17877D04AF537CE8DFB7AC56C7E9CC1976AC63A84D98E43CE47604D234C7E9E24D6B04C1CCDC1E6CB5864CC78AD264E490D2E8D6748795ED65D478788D5E13E5D67A2049E7982B5B4C4A596307B2CA0F1AAF4B9F9B89B7E5EC3F10B1E0E166CA9262405109981D1E7D8FF38022DE23E1AD3286304C3DE5361DDFD54629C7F89920CB3E5A18C490C9D9AA3BB37AC9E02D565DBB71DDA1D9E464D8F0B70C04631AEE2F1E96591CDD7CC7F30316E36B30E1DF503B8E124980AF9457E2148D4C82CACEC7DD5F4D0CCF8AEB16FF00D3187852C7BAEDB90B2C7043E764E24D1CFA4C97F0C7165A8D1C54DD751A4F23A97A0F132A4276!
 F9C478615668CE263B5CB02BC4F9DC4926FCF81AA218321E026F2B248DADD8BC6EACC2E2E75D9BB7BE99E4E0E74BE74D279ACB29F3257214036B9BDC31E1C682F39BD65B3489E4ED1879AD3411B471CF3C90E3C68641E12F1E323B48539AFE60AA9A46071ED3CCF69F5D4E6DBB2E3626D58D3E540F264650F38330B8D04D97C2A4F136BF2AC644C4BD952207BAC07DB4C2749C4450B0ACB59A732C517646A3D2B71F61A6AEAA395C7D7FD1555E137AF2BC8C79B2794846BEE26DF6D2B247E502A38B7227FA281BC8FA780E7DA69A352D25C70A41AA2927E548B1A55CDE9BB3807BFD028053C6DE822B71FC81EADF81DDF23A572E4B63EE43CEC30790C98C78D47FE2463E95AD316919B87D03D34F7026CEDAF331B73C162995872A4F111CF54643034A3B9A8A8FD8B76C7DFB66C1DE714FE4E74293A8EED42E54FA54F0A90ACA8A28A2835A7CECEA37D9FA5576AC672997BDC871B5036231D46BC83ED164FDEAD25D21BCEEFD2396FBCEDC60B245E4E563E490639632DE65B4DC3020F152BF655E7E770C9CAEB0DBF1E4BFC2C1801E207DDD52CCE246FA23515ADB7CDA63DACE3CA26975E44624D31101403702F70D7AD49D12AD9BBFCEADFB75832B140C0C28E54F2965C68E433C7ABDE7865672755B85C2F0ECE3540974CDE5C30466281486676E0EF637B05E6013CC9E269B43!
 2438C2D047A6FCD98DDBF457AD9A40366B5FF0F0FB2825866AE26385202B5D!
 999A43C2
E493C1071350B9BBC34AC7CA25DF9099F869FD841C1699E54E5C902FC799A683B4136BD2986C1E82E988FA8F033A7C9CD971E0DB93CFC891046238A366203BB49A99D9F43E9555ECE278D36CEDB1303758B6E973A3976BCA78AF9E9658DA266172EAA5BCB75E2B22DF8536E89EA2CCE9CC962029C69884C98278FCD8A48CFE38CD8929EF211C8F7DEA6F76DCE3DD53142C28B0431B2C6C57F32457919F5CC493A9BC46DE8A764BCAFDB0CF8437D6DEDD91F6ED9A093314232905615F2608D08278B16BD38EA6C0C1DBB33718E2C78A78362DBE7C861240AE24DC379C86F868A4E57F2C38D1DD5A68E1AFC4EA5458E2009F3233A1B570FC2453819BBB61FF00D26EB9318F3239B43B97532424344EC1B9B211E1BF2A0D83D41D010C599B7EDFB7CD0634E71944EAFA990AE247AB3F70CA983111E991B40402E6DD955B9FA177DF8E970B05E1CB54C38B728F29253145263E412B132F9FA74B330B6935190F5DF58E14F14CF9706E0B0AE4C7E565C48E92266B0972525161AD64717373EAA17E65EF4B3CF36E3818F9432F271323256CD1A98B038E3E246233A5215201B01CF99A08EDC3073B66DDE6DBF3BF2B2F124F2A78D595C060037065B83C0D483462DACDE457173A8F107D07B2AB99FBFB6E5B864EE59487CFCC9E4C99AC786A95CB902FD82F615350F53F4EAC0914D899ACE!
 A2CD22CB1007F7741B7D34C9837C982C0BC675A8E63932FED0FD351D2BA20BB1B7701CEA465DDBA7B264508B990A936676F2DAC0F3365D37A75B547B3ED9BBEBDC9E0CBDB322190E267B248C8AE002AE513C5AD48D24106C7E9A2ABE46A1AAFC08B803BBD7590C6636E1607881DE0D3BDD25C2CADCF2E6DB11930A595A4C7575D074B73B2EA6B0D5CB8D2A64F2F0F195C6A50192FDA2C6FCFDB40D5200BC7B69655038F60AC93437B8D73DDC8D1243E6A34478123977F6D04EEC5D6BD4FD38AA366DD24871D6E463330960E3C4FE5497517F45AB717447CE9C4DDE78B69EA88936FCE908487312E31E463C02B87E3131ECE247A4569DDC7130BA736DDBA195E2C8CCCFC54CD974D99214909F2E21DEFC3C5DDCAA2B76C59E1C3DBE5C82867CD864CA6547570B1960220D637562035D4F1A83B468AE7FF0096BF3A8624583D37D50ACF1061041BB6AB945274C6B90A45C85F77583CB98EDAE80A8AD17F37B2C3F5A62624A584306DF1B89109568A496697C608BF30801AD7DBBEC53661494CAAC54594B4416EBDFAA1F09FECD5DFE61B09BE6367A37111E2E2C76FDC793FC75599A59F0243F08EAD09E2D8D28D519FD922C50FAAB3B6BBF3E3DB17BCBC57ABDBF9BDBE3F5FBAF17DD27E3BEB99BEBE971F94FA2AEBD2D9321D31BA5FB000DFF669A6E1D3FF00EDCA1F3B2442BD800!
 E27D43813560CFDF3708D4B40B163771505DBE97E1F5552775C89F26633644!
 AD2CA49D
4EE4B13F4F2A9ACF2FF00ADB1F2917CBB7B297FE3A5DFD6DDA4FAE4CE768359106A651C9A4E67D82B38CF951875FE639B06FC2391B536A908317CD1196242817D2BC58DFD57B0AE91E4DAE6E7127C8F36E8834B6278801549E3E3979B7B16A7A6961F308D6156F65B71B01651F50A8C8E3754F2D621123789BC5A6FE963727B294455001D2835701DFF005D564BB48AFEE191AC09711A8240ECFC74D32F1E4867F2A49D9C0557678665916CEBA829310E045FC4BD87853C8A4C8818B63C8D130209F2C95371C45F49ECA4242D2316909673CD98DCFD26985CA365C6325DA299DADCC17D4413DE08A61262E42936BB05EFE753830FE2658E252AAD23045776D2A093CD9FEE8A4F2B133701D5332162928D71483EFADEDAE36E522DEA60CABA6E0F1E06BCA979E1C778C3960437BA4733E8B73A6498524CF64B2802E7511C07A871FAA98536B8D36B7A6FDB4F30646659316E6CE35C63B9D471B7AD6F4DE481E3731B8B3AF31DE3BC5630C86195251CD1835BD541669A4DBDF6BC248420CB842F9BE55C5D5C36A12A9E4E8C398F794FA293C85276DD43FE54BFC429028AACCA0F82FE027F09E2BF51A76AAD2EDD9F18F7A38D66007721B31FAEAA23E26BFB2A4F19FCD0219399E11BF71EE3E8A6381B66E39302CF0A44C8D7B069F1D1F877C724AAE3E8A95C7D937B747923C279444A!
 5E4F24C7332A8E6DA2191DAC3B4DA886992CD2E977E33E3AF971B3712A973C16FCB49351933B9F05F9713C6E4FACD4BEE31B8F87CA0418F263D60AF6904A37D9508CA16503BEE3E9E1453766209B7672F65769FF00BB0FFD09FEF9AB87FB4FC5EAF4FC3F995C5D23799202AA07002DEAE17ADD1B3754EEB9FF00253A976D9A7FCEDA0E2E24130001F84C99624F29BBFC1AD2FDD52871D767FF00D91BC1EE5C503FFB74FE9AADE6CACA64B0F7869B8E24036E3C2AC5D7DE1F98DBCFA5314DFF00FA741FA2AB196DC4F6FA3D35A9C337957B2CBAC0DAAFA59CE807BAC2FF005D56B36E640A05C9E42AD39E8D31080F0ED63D9C6BDC6DA7216D2C51F924F0F3E4035907F086BE91EA5F6D4540E0EC92CBA24C90555B8AC63991DEC4F05152E9008D34C68A80B5B48600D87E2BF1A903B6C03F9BAA43DA599D87D1A94560F8F8518B79641EF52C3EDD74C19346571E631040FBCDEF0F628F7BD66B12C411A8942C3803E295BFA053A5C7C3907872D2092FC17255910FAA784385FDF503D3586562E660BA7C54463F387E4CA4ABC720FF00B9C888B46FEC6340DCD9542B0F2C1E5127163FB46863DB25947DD51C58D0AA782422CE78B16E2DECEFAF06924F9635B1E6E68002DC6D74EDB8FB694F87132D938DB921248F65F95266C0DCF89FBBB2958DDA33AB80B5B52DFEBA08CCB87CA1!
 ACC292A837915810FC3D208FAE968FFD4188E38690B831C28A2E7C475140A0!
 5EF7EEAB
2614E89219D50491CAA22CA8C2866786E1995351166E1DFC6AAD91E561E53E461078B0DA40C149BC91E9374901E3E2068161B51DD70669B1640F978C430C75167F2AC4B49AB9691DBDDF6D79D75297B5997848BE9FC5EDAB3E6678CC396B32FC0C732F018C9E689A4D5E643F14D248AC4160DF9838F1E56A63B6E141BA66C8999998FB608A0999A69C111C8D1A16487C1F7DED607F4F3553CD8F728F6FF23709618F2156192178A6019091C05C107B34D39DA63F3F731005B266C534010DEC04A8CC9F4102D515B33C1108C6646F2E3E3E5413CD14640778588675427EF32A70AB01CF824DFE3CFC7F063AE4234234B4768C3F01A646765F0F31ABD5C2818E149B03ED7045BB0D590259926F878819E38CE9D2753695621C31009E54B8936C89E0C8DA648B172E3895FCD00C2F1CDA1445E5BF8ACC928D4E6FCAAB9BEC1F07BEE7C086CA991205B1E0416245658A49B5CF77D34173EAA9B6ECE497376950B82372CC4C6B2E90639024A0AAF62B36A603B01AA5CA2CE0F2E3FA6ACA9E3E9A9C73F273A17F6490C89FE1AAE640F6F6D0618D0B4B2CF1C6A59CAF840ED3AD455E3A61E51D11D758A14D9A3DB18FA1C66AA5BEBAA463BBC5933BC6C55BCB7B11CC71156CD932A4C7E97EA6C4D47466E1E3CA47EBC1B863056FA246A0BD7CC65D1F31B713F8F1F11AFF00FB32BFE1AAB4E!
 924D3886152F2C86C91F227D7E8EF356FF9AC9E57CC067E425C0C77BFECBCC9FA2A0E29136EC6932FF2D7265505E69BF9704646A50C058B337BC11789EDE1567097932931F6FD8D03E537C4E7B0D41540E17FC01B820FD66E26A1B2773DC72C9F2408D4F644A656F6B9069093738A595A4C388E4BB125B3F33C4CE4F364887814562D919925F5E4372E005940F60A06B90B9F62D2CB94BE9D2C05FE8A6666C9D568B3C920FB93007B7B6AED0B745CF04693646760E5363812CABAA655C90A97741A8DE366D570470FA2A337DDAF6E85227C2DCA3DDA395995D1E3D0F1D8075FCCE1AB9DB5055E3432AC3E7E545C72A10CBC3F362F4FD5D94F307779B1D1D31241262CA41C8C3906B864B7F9B0B70BF730F10EC34DDF1A44623158863CF1E437BF0B781BB787B7D34CCC0B331931AF0E429E31F2E3DDD96B0E77A8AB4418906E71993680C66894BCFB63317994282CD2623F395140B943F98BFAC38D350BE72A287015B8AB8E4D7E5723B6A130F3668E6492366832E160E8C84AB065370C84710473AB5CF9789BC629DCD42C3B9060BB9632AD9272C0FF00AC8828B2BF0FCD5E00FBEBF7851114A6FE1896C396B3CFFAA8E00D97C6E7FE3852D28F390967B18949371EFADF9DFBC522A4B02221A40F79C9FB68178A67C77125AD13358806E14F3B561B9C297F88400C5370917B357!
 F5D60045AB410CE18789870B1B731EA34BE1FFA88E4C29BDE3E1F511EE9AA2!
 1A1495EF
8719FCC881747B78DA01E3B03FAA45FECA4BCC4D1A23168C8E24F16614F61963C4C869F220F39E28E787CBBD806951A20C7D08C6F51AA34D81E361C6A29CE1DD629C5EE5102DBF6645753FD9661ECAF336738A4C4FC64EC00DC5BB0DEB1C79C45E7B15BFE5116ED2C1B40FE214D2139AA8D343E388717516702FD8CA79502D14F3E44DE64F12C80D831616361E9A934DBE392369B0B8941AA484FBC00E6C3BE9B99124C44CB8134293E5CA8392BDAE3D8D4E766C87833B1F207882BADC7E25274B29F58341258773B06E8BCF4CB8725FF007A44FD355DC91CED56C971D70D3A8F0E2E31C3242A9EA139B7DB554C9E47EAA04A1FFA89BFF0DFEC156CD8E113F4D753E4123FD1E0E322AF6DE7DC31F8FD11D552117C89872FCB7E27D9574E99889E88EB99FB160DB23BFED66AB7E8A0D8DF37B18B75AEDD213A227DB899653EEAA4133B3B1F507F6D6A4DEB749378CDF868EE98501368EFDA78F8BBD8F363ECE42B6BFCFBDDA1C7CBC4C5880F8818EDE73F6F965C388FD45D54D69280F918BADB8BBDC9EF24F3FA4D2702423D523F918EB723DE6EC029C9C350006BC8DDA5AFA7D8A2DF5D3EDBB0BE1B0D4BF19651ADCFAEB0CA2224200F19ED3F656B1D1E6F279AE6EBAF493BA2E6C7C241F99A40FD58D0FF001014D81C243FE9B2DA07EE652A87D762E9FDD15ECB1BCD2E917676F6!
 9F6D2F89B54790EE919D663FE6CA6C114FE1D4785EB17A2F8F7DAFF24DA61611672A856FE5E4C67F2C9ECE22FA4FB6D5E4D8C677F2D8E9CB1FC89B979B6FB8FDCDDC695936F748DDB1D9254E22489486E5DA54535C77560312427CB63681CFBC8E3888C9FE13ECA4B97794D2689B257CC50572A3E6391B8E63D0072F5FAE9C6DB9ACACB3A1B32F86551FF1ED14A65066033748F35088B2D7B18FDD73E86EDA62E462E62CC0FE54DC24BF3E3F788E16EFAAA9D94F96CB2456D37BA70F0F2E2BEA20FD158CE9E2598D931E5BB46A87EEF6ADBB08ACF1D5A681E0E6CA4691F4E8FAEEBEDAC1151F1A4D68CF242434416E4056367D407603C6AA305D4EA51088E2E275376D877FA6948E4D3950CFE66B325D5EFEF02A6C357AC5607924B3B6AB70F2BB6CB6B03E822B290388598C3A3CA915F571BAA9F0E93E837A832DFB18459EC40F065C4265F59163FDE5A80B5CDEAE1D4281B0B64CCEFF003616F63238FE23552B69623B891F41A0418E99651FA84FD256B3D95A3F8F09331582447599BB9749607D840A560556C99CB0054461483E9E3FA2B38704487C8490A2486CC02A8245F916BF2A294DADE2381BBAB0F04A22F201EC904A185BF775539C068E0956561758C863E9B710BED3484FE5E1BAE342A1D53BEE45FBFD26BC123CAC0B72EE1C00F50A09CC795E7DB77A9E537925F2!
 1D8FA5A6D46ABB93C6E6A7F1386CBB99EF38C3FBEC7F4557F22F7B50248409!
 A6D46DE0
603DA456E0D9BA5372C0F92DD49B84B8B27C4EEEF8B3C38E14F99F0B8D3C4DE615E76B6B7FD9E35A7553CCCC48EDC5E554FA580AEE9F2C7C3F956E1A34DBD16B54A398BE74CFF17D6B99149ABCB8FE1E0B2F16D3652DA477F1AA66E3851E267C185148F225E124C89A1AEEBE615B71E5DF571F9D50B63F58EE2E2FE2F879D78DB9AA76F67106AABBD3E9DC31F2480B718F215120942F0F2CAEA1DD6AA2CD3A853A4725F081E81C2A1F3389B9F4FD75313B02DAAFC0F1FA78D4365F6FA2E2BAECF9D223D51CA49E5FF32421030E617B4D4AC9819102E26DF8EDA0C807E61008506DA9ADC89E35E74F498072333173DB479D8EE31A4EC128E201F5D259FB9CD9D8F143190B2C17B30E0483E13CAB8DCFDD3E1DDEEF6F3C7FAF6BB5C6D8FEBF3EF2B0CDC59A193831F28314138035AB0E4D7502FC7DE1DD5079035F97311E5F9C0A49A7EEBAB5B50FD96B1A9C8B2258D089889E420E88549625BBDDADA5477F6D41EE80E3C51E331BBC6A59CF6966E24FD34DF6977B759359DA4E8B259C9EE332E498CCC005CA071B20760727483EC6A8E9E076C7971E41F9B0B30B71F7949BFB787D752BB36D93EEEDB962C32C70BC18EDB806975043E5A8D6BA941D2C59469E1C4F0ACB738C1CE192A2D1E763C1976E36BCD1F8FDDFD74AAD30D85CE49C75BF8A7538E4FEBDBC07FB616A412364DCB!
 CB864117C402A9211C144E97048EE17E3509B1BB6317039E364AB8FDD607FC3567DDA358777C7503DD6084778599D07F76912A091748758D448EA46A9BEEA8E2BC2FD87BEBD7F2FC9C8FCE666D0A4920D99AEBE1FDDEF34A4C024932321C650E4261AF3E0DEEB7ECD6190645C79752A0044519516BADC823DA40E35448EF3287D8F678CFBDF1129F669415556605D8F7927EBA95DDB2BF2B060BF08237948F4B1E1FC350909D72017E1CCD45384BA2B13EF4AC5ADE81C07D94F713C0AF90FC028B0F5D618F8AD396773A631EFB9E40770AF32A6125A18B8429C17D27BCD03566323B4879937A5A3E7EBA480B52D18B9A099C736D8F3CF7CB8E2FEAD66ABF3F16F6D4FAF8762C8B1B6BC98B87ECA39AAFCA497EFE200A053688BE237CDBE21FF00332E15FED4AA2BB96B8C3A1B03FDC7ADB61C68EF66CD819CDAF6D0DE6B7D4B5D9F52F2AD0BF3FF00672B9BB7EEEABF97970BE2CAC3B1E33A96FEB57FAAB4F48B1E46CF0C8AB1C52C5FE9E650E5A42070491C1E5E25B57597CC3E9AFF00D55D2D99B744A0E6460646113FE747C42FEF8BAFB6B9331C08F38E1E4C871F1B2C94C8B8008900F0AB92090350E356254FEDF9C3336E8A427F31079720EE65E148E51B8BF7F03E83D950D04B3ECD9D2E2E48B293A651C08BF638B5C71A909661CC1BA9FA08AE92E67AC79B7D31B667151!
 D33B236A1C181A45B2622DE65DA197B597883ECA73347E60F05DBD5EF0F67D!
 E151B243
25C85B311D80D8FF65AC6B1B1ACB0E9F779954A8C86248B12A2C7E9E3516CF265CEB1AF391801DE4936E359B62CE4710101ED623EC1763F4539860F86000FFAA97C1129E05750E3237E1B0E55CDDF58B1F4A4D0C5BCCB992A66490C3039276E04CAA1CC881DADF734B71F65259C41C5D94837FF0042D1FA4AC7952AA5EDFAB521D23911ECFE76E93413BC12AAC71CF085D3114D2F8ED3860DC18C40F2EDA85CDC8E38A8E6E71B114C9CBDE919F21B9FA6415BECBDCDF6C177CCB0F7A6D23D773FD3564DDF2125DE636D5650E4B37E1024663501B327970C72C9FF003243337A81FEAA70990EF912E4DC068D4952DC46A6E1CBB4F13483D2C59A46562E2573F9ADC657E24DC0ECBDE9B65B20686254D06E65604DFC3C93F4D2DE18D4BCBA82A8F1B8E7CFBFB3D0291DA767DE3AA3735DBB67C67C9CB9FEE2F28E21C2EEE7C28A395CD15179B399646606FE610A96FC0BC07D269FE0E0A431879AEEEDC4A2F1F65EBA3FA13E4D6C7D3719CDDF638B76DDA54D0C2440F8D0A91C5228E40751FD7617EEB558733E57F40E69264D8B1A363F7B1C3407FF002192A6472ACED24A0269288392AF65346465E7CBBEBA6B27E487464B738EF9B8A7B04791AC0F64CB2542657C83C737387BE48BDCB3E3A3FD68D1FD95730C39FE948F9D6E4C8F90FBFA5CE3EE18338EC0EB2C44FD024151727C!
 96EB38CD93170E41F89726DFC6829914490E9D8D7F5F289F5E98C7FDAA8DC2DAB3B74CE870B031DF232A636871E21A9D8FABB07793CAB6F6D7F243A972DD23DDF2F1B6EC356D44404E44C6FCF4F0441F4D6DEE96E89E9FE90C7316D18D699C5A7CC94EB9E4FDA73D9E81615326156F963F2B60E8F8C6EDBAE89F7C954A80BC63C656F79233F798FDE6F60E1CF6551454515CF3F3AFE5F360E54BD55B6437DBB31BFF00C94683F933B7FCEF4239E7DCDEBAE86A4F231E0CA824C6C98D658265292C4E032B2B0B1560798341C5EB2E3EED847133DC47B96329F2324803CE516558ADABC44F6F0E14C4FC560C870F363789D403A1C10C011707D208EDAD9BF327E5065EC0F2EEDB046F97B2DCC8D125DA6C4EDF4978C7637676F7D51A1DDA2CD7D1D469F121C24699A01BA2EABB35D4DD48BDF8037E55B959B3B544BCACBE21C47630E55E7FB9B28B31D407E2B1FB6F4E8C788D2C8715D8C3ADBCA2DEF14B9D3A8AF6DAB35C78CF320FA74A93F652F5666B8E0C06E3953DD31A32C7F101603D7D82A4368D967CD96DC6432DC48F7D21C0F118E326DE1FC6FDD4B22C09CD7CC23906F77E8152FB46E93451E746618658A64119C99515840476202ADAF503FCAFBDDBC2F5246927BF4C9B56D2BB1E34EC51F8E69471E5B9215F5268B7874586961753606FC2A86E25CE9CC2BC24CA6D4F!
 FA912FF50B54A6E595267E418E2064762491704DC9D44B30E172C6EC7E8E00!
 52F8F8F1
6D90B49211264C9C5CF2E5C947728A53835CA2B8C8228C58800003B07203DB58C51E845436B93A98DF8EA3D9ECABCF45FCAFDEFAC265DCB34B6DFB493ABE2DD3F325FF00E5E37ECEE73E1EEBD6F6D83A03A4FA6CACBB66DC9F12B6FF00573DE69AE3B43C97D3FBB6A995C342F4CFCA8EA4EAC923932236DA768E0CF9592A44920E7F910B589F416B0F5D741F4BF49EC9D21B78DBB65C7F295ACD3CEDE2966702DAE57ED3DDD83B054E5151451451405145140514514051451405145140514514056BBEAAF93DD35D42F2666003B46E0FC5A4C7506176EF920E02FE9522B625141CD3BA7C93EADC07271F1A1DCA3EC970E511BDBD31CDA38FA89A853F2F3AA62243ECBBA0B73D312BFD62F5D61455CD4C390DF62CCC47D12EC9B84928FBB930CC17FB11A2DFE9A798FD29D5DBC1448367CC310E11A240608941EC06411AA8AEB0A299A61CF7B57C98EAD9BCB191F09B642FFCD2EE669547EC4434B1FDFAD83D39F283A6F6678F2F742DBCE7A1D424C816841ECD30025787EB5EB61D14EA74780000002C0700057B451514514514051451405145140514514051451405145141FFD9');
+
+insert into auctionImage (imageId, auction_id, data) values (4, 73219532, 'FFD8FFE000104A46494600010201004800480000FFE1122B4578696600004D4D002A000000080007011200030000000100010000011A00050000000100000062011B0005000000010000006A012800030000000100020000013100020000001B0000007201320002000000140000008D8769000400000001000000A4000000D00000004800000001000000480000000141646F62652050686F746F73686F702043532057696E646F777300323030373A30383A32312031343A32373A3533000000000003A001000300000001FFFF0000A0020004000000010000019BA003000400000001000000D30000000000000006010300030000000100060000011A0005000000010000011E011B0005000000010000012601280003000000010002000002010004000000010000012E0202000400000001000010F50000000000000048000000010000004800000001FFD8FFE000104A46494600010201004800480000FFED000C41646F62655F434D0002FFEE000E41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0!
 E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005200A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F2A4925A3D07A657D47A9574E4BDD4E1B4EFCAB9BCB6B68DFB5AE77E8DB6DDB7D1A3D4FD1FAAF4948B1BA5E5DF5B2FF4CB71DEE2D6D874DC447E8E907F9DB773B6376FE7AF51C5FF00127!
 D31D431F959F90CB5C039EC68AE1B23F9BDD0FDFB3F7D0BA074FC1EA3D7FEA!
 FDADAEB7
BC576750BDB53CBEAC7AA9366374CC0A36FE8D8CC5C866FB1FF004F272FED17FA8BD41D05A41E0E85016934347E78EB3D37EACF4FEA57E150FCCC9AE976D1901D500E8FA5FA3D9FBDFCB59E71BA3983EAE5563BFE8AB7FF00EECD2BDE327EA3FD57C876F7F4EC6DCE3EE22B689FF3550BBFC597D50B2670437CEBB2C61FFA366D44D742A1E2F92744FAA8EFAC19A70BA5E656DB830BC0CB6BA998E5ACF47ED9EE566EFF0016DF5B19D4ACE9B562B322FA982D2EAEC6B58584EDDCC7E41A3F397A6E0FF8BCE8BD1FA8D3D4B02EBF19F4B8101F6B5CC3FC83EAB3F3BFAEAF7D71BAFE9A707EB062B1D63F12DF4B22A6CFBE8B47BDAE89FA16358E6222BBA0BE2DD4BEA67D69E961CECDE997B2B60DCFB58DF56B681F9CFBB1FD5A99FE7AC55F5074ECEA3A86155998E7F4768DC01E47F25CB99FAE1FE2E7A47D62A9F7E335983D53E933258D86D879DB975B3E9EFF00F4FF00CF33FE17F9A414F82A4AEF59E8F9DD13A8DBD373DA1991491BA24B4823735EC710DDCC72A49294924924A5249249294924924A524924929FFFD0F2FC5AEFB2FADB8EC365C5CD0C686EE971706D63619DDBAC735ABD1BA9399F57BA158336BCAE9DD67298D193877B1991D3F35FBBD47DB5BAAF528C6B19F4FF0056BB12DC67FF00825C57D5FEBFD4BA35EEFB13ABDB73AA7D955C03AB7BB1EC6E5E3EEF!
 A2EF6DB5FE63EB5EB1D1BEBB7D5EFAEB8F6F40EB58DF63CABC167D9AD32D7BBC71AE7358EAF26B77BDB5BD9EA33FC17AA929F3DE81F5DB27A0D8D7D14B0B9CD2CB6D2497EC25EF6D6CDD156DAEDB6DB7659F9FFB8BA7ABEB97D69EB56D55F42EAF88E7DAE6B3D2CAC618B60793ED67E91D9B8B639DF99E9E57AB67F83A571BF58BEAE370ADCBB7A4B9DD43A560D82AB7A835CD700F7C06B2DAEAFE69ACB7753EB6DF4EE7FF00C6D6BA9FFC6E32E9E8785D5FA1BFD5EA0719B6E7F4CC9009B5B645AEA7D2FA2EDBF43D37ECF576576D7E9E4A14B897A4AFA5FF008D605C6CEA186C24C9347A6D9EDBB6DDD3EEDDFF0081A164E17F8D5A585D57560F7766BF1B1CB7FEDCC7AEEB3FF65D59FA9FF5D31ADC22DCFC8786565CC2CBC39D7E3D8C69B2CC4C9B3F9CCA6ECAEDB30F21CCFB45955575791EA5F8F6D88D9DFE367EA66201E9645B9AEEEDC7A9D23FB593F67AFF00E9A5C28B79637FF8CACACB6D5976F4EC8CAC72432BC838CDB59BE376DA7F43733D4F6FE62DC2EFF1B6EC66B0E3F4DB00FCD6B8877DEDB5B5AC7EAFFE383A3E638D23A10CFC51AB3ED8E634EEFDEF4BD3CA633FEDC5C9D7F5EFAC62E4BACE9CE763E2BB8C37D8FB58DF2AAE2E664D4CFF008BB91FAA9ED70F03FC6431D6373B032763DFB9AFE9F9F463EC04FE65173B2287FF009957FC23D74383D1BEB438!
 977EDCEA18959E28C9A30EEB1BFD6C8AFD7A6CFEC2F3FA7FC65F5A7B36E3F5!
 07E15C7F
3729ADC9A4FC323D3FB551FF005C6DFF00F09720E4FF008CDFAFD8CE1EAE4561AEFA0F6D35398E03FD1DAC6B98FF00ECBD222FAA2DF42EBBF519FF00582918FD47A8D793753FCDE43F19ADC860D7D9EA635B8ECF49CE3BF63E85E57F5BBEA1758FAAFB6EC8DB918563B6B32AA9DA1DFE8ED69F756F42CBFAF3F59F2BA81EA2FCD757710D696D5EC6437E8FE899EDDFAFF3BFCEFF002D747D27FC6B5D662BFA6FD65C56751C2B9BB1EE3A3A3FE13DAFDFFE6FABFF0008950517CF2125B7D7713A251D5DC3A4DEFB3A5DA4398E30E7D6D31B9BED73BD5F49FF00BEB2DE4D56398ED966D301ED00B5C3F79A9290248CE752EE6BDA4F769D3EE76E43DADECEFBD25314939696F29925292492494FFFD1F2FA1F435978B5A5CF7571491D9FBEB76E76ADFF0004DB5AAD559F5DE68AFA8B4DCCA346BDB1EA160FA18F63E5BBEAFCC66EFD2D15FF0035FA3FD12AD4FA1E95FEA025FB07A2418876F66E96FE7FE8BD441060C8E7B24A767EAE75AEA7D133EBCFC6F7556BF65D5DB269BB8DD5DCDFF09E9FA8DB3F7E9FE714FAB7D69EA599F59EDFAC547EA19C5CC2DF49C4EC7575B31FF3BE9B2CF4FF00495BFD9FE0D49AC3D4FD3C4AF26AC2C0C66329A8E4EE0D75A1BBF21CDF42BB9CCDF77AB75977F35456FF00D358A56754B2B73BA37D64C365B550E0CF56A6575E5D247F85A72696B5B!
 9BBF76FD994EBAACBFF0007755FD2101AAE2340F43D5722AEB9D25FF5CBA68F4729BB31FEB160D26087021D8FD4F1F5F52BFD2B2BB6AB3F7EBFA7FA1CBF578DEA5416DC5F688B5C03ED0C1EC70780FAB2AAFCDF4721AF6BFF00AFFE62B26BCEFABF994F50C2B5B938974FA1920134DF5F17E2E4D4EFE43BD2CCC2BBFF003D3E9BACD2C77E3752A5B895E39DDB5EEE90D0E2E2E6171B72FA1DD646EB5EDDF65BD3BFC27AFE9FFDCDFD1943CC4D5D83BEF1FDC9035FEEBBEF1FF9147B71F0D8E206438C1E3D321C3FADB9CDF72116E30262C79F0F601FFA31252FE9B5EDDD48712D6CBDA60989FA4D8FCC6B7E927A72EFA1AE631D353FF9CA9C258E8FDEADDEDFEABFE9A835E2B707D6E70734C830041FBCAB7938953B0EBEA14BD8458E2CBF1EB906978FA1BF7B76FA7930FB29F4B7B3FC124A693CB49968DA0FE6F31F04C9E59E07EF1FDC9D9E96F1EA077A7DF6913F88494C525A2DC3E965A1C321E416CFD1E1DFE8FF00F3352FB2F491CDD61F648E3E9FEE7F57F9699EE8ED2FB1B039399D78B1FF008F173125A7E8F4601DAD84C0DB2401BBF3F77F27F7522DE88D0E80F710D1B65DF9DF9DC7E621EE0FDD97D89FBA1EB9710FF0DA75D22D67E89D36807754ED376BFE07F7FDBFE0FF009CFF0047BD01C04E9F72D2EA38FD3862E3E4603A7DA2BCAADCEDC7D5027D6AA5B5BDB!
 4DCDFF07FE0AD59B04F6253C1B6B1146BF259252D8E3DBEFD14488307FBD14!
 3FFD2F2A
486841F04921CA4A7B4FAAD8B55F5B7A65B7370EDEA543463E53B4DB6B2E666B9ADB0FB6B76462D4FA77FF84FD0D4B03ADE3E5D4EAABCB66CBB187D99F10416B3F498EEDEDFE73F4166D659FB95AD1EAA2A6FD5AE916CB9B5E456F6D9B359752E7575EF9F6FF39BBFEB6B0EBADD6E15EF3681F67756452774B83B757BD9F99FA2F6FF00DB899106C9F164911407806FF477752A70B22DAE819BD32C77A59B86E3209DB35DCD68FD2537D7B9CEC7CAA7DF5FFC47AD558D8D9548C4662D59AFAA96DEEC8AD8E66DB28B80636AC9AADA9DFA6DCDAD95DBB365BFE169C7B16762E5E4E1DA2EC6B0D760EE3BF939A7DAEFED21EC7B9A6C825A0C39DDA4A70E2B3755D169E1A1577FA5DBE8F7F8D4749FF18D762372F2DBD2FEB1555FA792FF004DA59962BFA36B18D763B7ED3B4FE6FF00DB7E8D55AB977F896CDA5AEB29CA66596825B492692E23F37D5D9735ABCD2BB1F5BC3D8E2D70E083075D0F1FC9571BD53AADF147AF93735C0EEA85B61DC00DCEF66E7FD162286DF5AC4A7A565598191D37D0C9AA3713906DE46E6B83AA0D62CB17B5B21B58877D205CED44EEDA61CD572EC234515E465616563D3701E8DB630EC7E9F98F70A5B67F610AAAF16DDCC6D36BAC602E7064980DD5EFFCFF006B3F3D252017D627F57AF5FEB98FFC113FDAA38AAA1FD99FFAADCADBFA4DF5E3FDAEDC!
 4CA6620DB391B49A86FF00A1FA66B3D3F77E6FB9557B3127D9618F39FF00C824AD54DCC7480FAEA7B265CCD8D6CFF6EB0CB5BFD87AD2C7FABF6F56ACDDD049CAB191EAF4F711F6A64FE7D6DF637368FF0085C7FD2B3FC3E353F9F9EFC56B2BAEE707B69B645769076B8B63D40C7EC0D7ECDCDDEA5899630726BCAC4B2C6DF53839AE80069D8C39252D97D2BAA6139CDCCC3BF1DCD12E16D6F640F1F7B5AAAAF46CAFF19BF5A7368B2BE9543198AF6ECDEE76EBEB247B9ADC9F559BBFE0ED7D1EAFFC67F3CB91B716E881D206E77E7D6FB9FAFCADB1A9BC71BAE217DAD7704EAF84D77A720C83AE853124F795D7F42FAB14F54E9D5E6F54BF0BA1E187BA9A32328BC597B9A76DBB196E454CB198EE3B3D46FF00E8B47FACBD3BEA67D5B7D7D3A2FEB79A432FB5F5DACC7A5A1CD9A99FA1AAF73FD563DB6FD2DFE9FA5FAC237DB55B4F1201260092780B4EFF00AB9D4F1706CCDCE6B30831AD7D78F90F15E45A1CE156EA309DFACB99EEDFEABEBAEAF4FF003D6B7493D7B375E8D463743C4921F9E3F4418D3F49D6754CA75F9CC67FC4DDFF005A59FD7EAE8D875D789D373DDD5725EE36E7E5EC2CAF78F6D5563FAA7D5B76EEBDD6DCEFE77F43E9A4083B288ADDFFD3F2A49249253D263D4EEA7F53ED6D52EC9E8B6BAF2C6BB9C6C8DAD7D9E97E7B712FAEEF51FF00E0BED6B3EAAC!
 D5F57B22D712DFB564D55B04B40736A6DAFB1DB4FE91CD6BDF5FD0F625F577!
 ABBBA575
3A323716303B6D8E6C1863FF004776E63B732D66CFF04FF63D5BFADDD671BAA75065781A74EC261AB146C6573AEEB6DD94B6B67E99FEFF00A0C4DD6EBEABFA5FD1C11CEBA8F05D0D7818393F57DF938563321D8C1C7330AD219954EE79F4F270DED1B73315ACF4FED2D77D0FE73D0A7F9E5CF153A322EC7B5B752F35D8DFA2E1CA72C62013C0981263C1131321F8993564B58C7BA9707865AD0F618FCDB2B77B5ECFE4AD9AAAE85D4FA4E4E47DA074CEB38D363B1CE98D93572E6E2ED9F4333FEEBFF316FE8FD2FF000BE8630B6C78D86F7060D00717447F55BBD25336750CC0C153AD75B4C6D14DAE2EAF82D6FE8DC767B376EAD3D3857580B9AF63034725D1E5F9A846CB2769BA5A3832E8FC4284999DDAF8EA81BE9A2E0475D5B95E2D818FA9994DADB6C0B19FA40D7869DEDDDB5877ED7FEF209C32013EA34C7835FF00FA4F6AD6E99D63EAFD18A29EA1D128CDB9BC647DA726A7B8F8D8DA9EF67FDB7E92C4701261E23C04FDDEE096BDD5A765EC75BB595B9E5CC64EC69261B265DB1A7E8EE510D27C3E64048B4013B81F213FDC991436F1B3B3716A753458D635CEDCEFA24CF1F48EE57F17EB5755C7780F7557B48DBB6C6FB7E334FA4E58A9934E389DE20FD170C9302848D76BD1DBEA7998F9D97F69EA79CECCB1ADF4EBA71185B532B6CFA78F4D993E9FA35B27FC1E35D!
 FE93F9C7EF54FF68515698787554623D4BBF4F67C7F4BFAB7F998AA8C84D28D05BC45B3939F9596E6BB32FB2FDBF45AE71200FDD60FA157F618ABB9D3A7026404C922AB7FFFD4F2A4924925294BF37BFF00051492485249249214924924A5249249294924924A5249249294924924A5249249294924924A7FFFD9FFED16CA50686F746F73686F7020332E30003842494D0425000000000010000000000000000000000000000000003842494D03ED000000000010004800000001000200480000000100023842494D042600000000000E000000000000000000003F8000003842494D040D0000000000040000001E3842494D04190000000000040000001E3842494D03F3000000000009000000000000000001003842494D040A00000000000100003842494D271000000000000A000100000000000000023842494D03F5000000000048002F66660001006C66660006000000000001002F6666000100A1999A0006000000000001003200000001005A00000006000000000001003500000001002D000000060000000000013842494D03F80000000000700000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E80000000!
 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800003842494D0!
 40800000
0000010000000010000024000000240000000003842494D041E000000000004000000003842494D041A00000000033D000000060000000000000000000000D30000019B00000004006B00690074007400000001000000000000000000000000000000000000000100000000000000000000019B000000D300000000000000000000000000000000010000000000000000000000000000000000000010000000010000000000006E756C6C0000000200000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E67000000000000000042746F6D6C6F6E67000000D300000000526768746C6F6E670000019B00000006736C69636573566C4C73000000014F626A6300000001000000000005736C6963650000001200000007736C69636549446C6F6E67000000000000000767726F757049446C6F6E6700000000000000066F726967696E656E756D0000000C45536C6963654F726967696E0000000D6175746F47656E6572617465640000000054797065656E756D0000000A45536C6963655479706500000000496D672000000006626F756E64734F626A6300000001000000000000526374310000000400000000546F70206C6F6E6700000000000000004C6566746C6F6E6700000000!
 0000000042746F6D6C6F6E67000000D300000000526768746C6F6E670000019B0000000375726C54455854000000010000000000006E756C6C54455854000000010000000000004D7367655445585400000001000000000006616C74546167544558540000000100000000000E63656C6C54657874497348544D4C626F6F6C010000000863656C6C546578745445585400000001000000000009686F727A416C69676E656E756D0000000F45536C696365486F727A416C69676E0000000764656661756C740000000976657274416C69676E656E756D0000000F45536C69636556657274416C69676E0000000764656661756C740000000B6267436F6C6F7254797065656E756D0000001145536C6963654247436F6C6F7254797065000000004E6F6E6500000009746F704F75747365746C6F6E67000000000000000A6C6566744F75747365746C6F6E67000000000000000C626F74746F6D4F75747365746C6F6E67000000000000000B72696768744F75747365746C6F6E6700000000003842494D042800000000000C000000013FF00000000000003842494D041100000000000101003842494D0414000000000004000000013842494D040C00000000111100000001000000A000000052000001E0000099C0000010F500180001FFD8FFE000104A46494600010201004800!
 480000FFED000C41646F62655F434D0002FFEE000E41646F62650064800000!
 0001FFDB
0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108005200A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F2A49!
 25A3D07A657D47A9574E4BDD4E1B4EFCAB9BCB6B68DFB5AE77E8DB6DDB7D1A3D4FD1FAAF4948B1BA5E5DF5B2FF4CB71DEE2D6D874DC447E8E907F9DB773B6376FE7AF51C5FF00127D31D431F959F90CB5C039EC68AE1B23F9BDD0FDFB3F7D0BA074FC1EA3D7FEAFDADAEB7BC576750BDB53CBEAC7AA9366374CC0A36FE8D8CC5C866FB1FF004F272FED17FA8BD41D05A41E0E85016934347E78EB3D37EACF4FEA57E150FCCC9AE976D1901D500E8FA5FA3D9FBDFCB59E71BA3983EAE5563BFE8AB7FF00EECD2BDE327EA3FD57C876F7F4EC6DCE3EE22B689FF3550BBFC597D50B2670437CEBB2C61FFA366D44D742A1E2F92744FAA8EFAC19A70BA5E656DB830BC0CB6BA998E5ACF47ED9EE566EFF0016DF5B19D4ACE9B562B322FA982D2EAEC6B58584EDDCC7E41A3F397A6E0FF8BCE8BD1FA8D3D4B02EBF19F4B8101F6B5CC3FC83EAB3F3BFAEAF7D71BAFE9A707EB062B1D63F12DF4B22A6CFBE8B47BDAE89FA16358E6222BBA0BE2DD4BEA67D69E961CECDE997B2B60DCFB58DF56B681F9CFBB1FD5A99FE7AC55F5074ECEA3A86155998E7F4768DC01E47F25CB99FAE1FE2E7A47D62A9F7E335983D53E933258D86D879DB975B3E9EFF00F4FF00CF33FE17F9A414F82A4AEF59E8F9DD13A8DBD373DA1991491BA24B4823735EC710DDCC72A49294924924A52492492949249!
 24A524924929FFFD0F2FC5AEFB2FADB8EC365C5CD0C686EE971706D63619DD!
 BAC735AB
D1BA9399F57BA158336BCAE9DD67298D193877B1991D3F35FBBD47DB5BAAF528C6B19F4FF0056BB12DC67FF00825C57D5FEBFD4BA35EEFB13ABDB73AA7D955C03AB7BB1EC6E5E3EEFA2EF6DB5FE63EB5EB1D1BEBB7D5EFAEB8F6F40EB58DF63CABC167D9AD32D7BBC71AE7358EAF26B77BDB5BD9EA33FC17AA929F3DE81F5DB27A0D8D7D14B0B9CD2CB6D2497EC25EF6D6CDD156DAEDB6DB7659F9FFB8BA7ABEB97D69EB56D55F42EAF88E7DAE6B3D2CAC618B60793ED67E91D9B8B639DF99E9E57AB67F83A571BF58BEAE370ADCBB7A4B9DD43A560D82AB7A835CD700F7C06B2DAEAFE69ACB7753EB6DF4EE7FF00C6D6BA9FFC6E32E9E8785D5FA1BFD5EA0719B6E7F4CC9009B5B645AEA7D2FA2EDBF43D37ECF576576D7E9E4A14B897A4AFA5FF008D605C6CEA186C24C9347A6D9EDBB6DDD3EEDDFF0081A164E17F8D5A585D57560F7766BF1B1CB7FEDCC7AEEB3FF65D59FA9FF5D31ADC22DCFC8786565CC2CBC39D7E3D8C69B2CC4C9B3F9CCA6ECAEDB30F21CCFB45955575791EA5F8F6D88D9DFE367EA66201E9645B9AEEEDC7A9D23FB593F67AFF00E9A5C28B79637FF8CACACB6D5976F4EC8CAC72432BC838CDB59BE376DA7F43733D4F6FE62DC2EFF1B6EC66B0E3F4DB00FCD6B8877DEDB5B5AC7EAFFE383A3E638D23A10CFC51AB3ED8E634EEFDEF4BD3CA633FEDC5C9!
 D7F5EFAC62E4BACE9CE763E2BB8C37D8FB58DF2AAE2E664D4CFF008BB91FAA9ED70F03FC6431D6373B032763DFB9AFE9F9F463EC04FE65173B2287FF009957FC23D74383D1BEB438977EDCEA18959E28C9A30EEB1BFD6C8AFD7A6CFEC2F3FA7FC65F5A7B36E3F507E15C7F3729ADC9A4FC323D3FB551FF005C6DFF00F09720E4FF008CDFAFD8CE1EAE4561AEFA0F6D35398E03FD1DAC6B98FF00ECBD222FAA2DF42EBBF519FF00582918FD47A8D793753FCDE43F19ADC860D7D9EA635B8ECF49CE3BF63E85E57F5BBEA1758FAAFB6EC8DB918563B6B32AA9DA1DFE8ED69F756F42CBFAF3F59F2BA81EA2FCD757710D696D5EC6437E8FE899EDDFAFF3BFCEFF002D747D27FC6B5D662BFA6FD65C56751C2B9BB1EE3A3A3FE13DAFDFFE6FABFF0008950517CF2125B7D7713A251D5DC3A4DEFB3A5DA4398E30E7D6D31B9BED73BD5F49FF00BEB2DE4D56398ED966D301ED00B5C3F79A9290248CE752EE6BDA4F769D3EE76E43DADECEFBD25314939696F29925292492494FFFD1F2FA1F435978B5A5CF7571491D9FBEB76E76ADFF0004DB5AAD559F5DE68AFA8B4DCCA346BDB1EA160FA18F63E5BBEAFCC66EFD2D15FF0035FA3FD12AD4FA1E95FEA025FB07A2418876F66E96FE7FE8BD441060C8E7B24A767EAE75AEA7D133EBCFC6F7556BF65D5DB269BB8DD5DCDFF09E9FA8DB3F!
 7E9FE714FAB7D69EA599F59EDFAC547EA19C5CC2DF49C4EC7575B31FF3BE9B!
 2CF4FF00
495BFD9FE0D49AC3D4FD3C4AF26AC2C0C66329A8E4EE0D75A1BBF21CDF42BB9CCDF77AB75977F35456FF00D358A56754B2B73BA37D64C365B550E0CF56A6575E5D247F85A72696B5B9BBF76FD994EBAACBFF0007755FD2101AAE2340F43D5722AEB9D25FF5CBA68F4729BB31FEB160D26087021D8FD4F1F5F52BFD2B2BB6AB3F7EBFA7FA1CBF578DEA5416DC5F688B5C03ED0C1EC70780FAB2AAFCDF4721AF6BFF00AFFE62B26BCEFABF994F50C2B5B938974FA1920134DF5F17E2E4D4EFE43BD2CCC2BBFF003D3E9BACD2C77E3752A5B895E39DDB5EEE90D0E2E2E6171B72FA1DD646EB5EDDF65BD3BFC27AFE9FFDCDFD1943CC4D5D83BEF1FDC9035FEEBBEF1FF9147B71F0D8E206438C1E3D321C3FADB9CDF72116E30262C79F0F601FFA31252FE9B5EDDD48712D6CBDA60989FA4D8FCC6B7E927A72EFA1AE631D353FF9CA9C258E8FDEADDEDFEABFE9A835E2B707D6E70734C830041FBCAB7938953B0EBEA14BD8458E2CBF1EB906978FA1BF7B76FA7930FB29F4B7B3FC124A693CB49968DA0FE6F31F04C9E59E07EF1FDC9D9E96F1EA077A7DF6913F88494C525A2DC3E965A1C321E416CFD1E1DFE8FF00F3352FB2F491CDD61F648E3E9FEE7F57F9699EE8ED2FB1B039399D78B1FF008F173125A7E8F4601DAD84C0DB2401BBF3F77F27F7522DE88D0E80F710D1B65DF9DF9!
 DC7E621EE0FDD97D89FBA1EB9710FF0DA75D22D67E89D36807754ED376BFE07F7FDBFE0FF009CFF0047BD01C04E9F72D2EA38FD3862E3E4603A7DA2BCAADCEDC7D5027D6AA5B5BDB4DCDFF07FE0AD59B04F6253C1B6B1146BF259252D8E3DBEFD14488307FBD143FFD2F2A486841F04921CA4A7B4FAAD8B55F5B7A65B7370EDEA543463E53B4DB6B2E666B9ADB0FB6B76462D4FA77FF84FD0D4B03ADE3E5D4EAABCB66CBB187D99F10416B3F498EEDEDFE73F4166D659FB95AD1EAA2A6FD5AE916CB9B5E456F6D9B359752E7575EF9F6FF39BBFEB6B0EBADD6E15EF3681F67756452774B83B757BD9F99FA2F6FF00DB899106C9F164911407806FF477752A70B22DAE819BD32C77A59B86E3209DB35DCD68FD2537D7B9CEC7CAA7DF5FFC47AD558D8D9548C4662D59AFAA96DEEC8AD8E66DB28B80636AC9AADA9DFA6DCDAD95DBB365BFE169C7B16762E5E4E1DA2EC6B0D760EE3BF939A7DAEFED21EC7B9A6C825A0C39DDA4A70E2B3755D169E1A1577FA5DBE8F7F8D4749FF18D762372F2DBD2FEB1555FA792FF004DA59962BFA36B18D763B7ED3B4FE6FF00DB7E8D55AB977F896CDA5AEB29CA66596825B492692E23F37D5D9735ABCD2BB1F5BC3D8E2D70E083075D0F1FC9571BD53AADF147AF93735C0EEA85B61DC00DCEF66E7FD162286DF5AC4A7A565598191D37D0C9AA3!
 713906DE46E6B83AA0D62CB17B5B21B58877D205CED44EEDA61CD572EC2345!
 15E46561
6563D3701E8DB630EC7E9F98F70A5B67F610AAAF16DDCC6D36BAC602E7064980DD5EFFCFF006B3F3D252017D627F57AF5FEB98FFC113FDAA38AAA1FD99FFAADCADBFA4DF5E3FDAEDC4CA6620DB391B49A86FF00A1FA66B3D3F77E6FB9557B3127D9618F39FF00C824AD54DCC7480FAEA7B265CCD8D6CFF6EB0CB5BFD87AD2C7FABF6F56ACDDD049CAB191EAF4F711F6A64FE7D6DF637368FF0085C7FD2B3FC3E353F9F9EFC56B2BAEE707B69B645769076B8B63D40C7EC0D7ECDCDDEA5899630726BCAC4B2C6DF53839AE80069D8C39252D97D2BAA6139CDCCC3BF1DCD12E16D6F640F1F7B5AAAAF46CAFF19BF5A7368B2BE9543198AF6ECDEE76EBEB247B9ADC9F559BBFE0ED7D1EAFFC67F3CB91B716E881D206E77E7D6FB9FAFCADB1A9BC71BAE217DAD7704EAF84D77A720C83AE853124F795D7F42FAB14F54E9D5E6F54BF0BA1E187BA9A32328BC597B9A76DBB196E454CB198EE3B3D46FF00E8B47FACBD3BEA67D5B7D7D3A2FEB79A432FB5F5DACC7A5A1CD9A99FA1AAF73FD563DB6FD2DFE9FA5FAC237DB55B4F1201260092780B4EFF00AB9D4F1706CCDCE6B30831AD7D78F90F15E45A1CE156EA309DFACB99EEDFEABEBAEAF4FF003D6B7493D7B375E8D463743C4921F9E3F4418D3F49D6754CA75F9CC67FC4DDFF005A59FD7EAE8D875D789D373DDD5725EE36E7E5EC!
 2CAF78F6D5563FAA7D5B76EEBDD6DCEFE77F43E9A4083B288ADDFFD3F2A49249253D263D4EEA7F53ED6D52EC9E8B6BAF2C6BB9C6C8DAD7D9E97E7B712FAEEF51FF00E0BED6B3EAACD5F57B22D712DFB564D55B04B40736A6DAFB1DB4FE91CD6BDF5FD0F625F577ABBBA5753A323716303B6D8E6C1863FF004776E63B732D66CFF04FF63D5BFADDD671BAA75065781A74EC261AB146C6573AEEB6DD94B6B67E99FEFF00A0C4DD6EBEABFA5FD1C11CEBA8F05D0D7818393F57DF938563321D8C1C7330AD219954EE79F4F270DED1B73315ACF4FED2D77D0FE73D0A7F9E5CF153A322EC7B5B752F35D8DFA2E1CA72C62013C0981263C1131321F8993564B58C7BA9707865AD0F618FCDB2B77B5ECFE4AD9AAAE85D4FA4E4E47DA074CEB38D363B1CE98D93572E6E2ED9F4333FEEBFF316FE8FD2FF000BE8630B6C78D86F7060D00717447F55BBD25336750CC0C153AD75B4C6D14DAE2EAF82D6FE8DC767B376EAD3D3857580B9AF63034725D1E5F9A846CB2769BA5A3832E8FC4284999DDAF8EA81BE9A2E0475D5B95E2D818FA9994DADB6C0B19FA40D7869DEDDDB5877ED7FEF209C32013EA34C7835FF00FA4F6AD6E99D63EAFD18A29EA1D128CDB9BC647DA726A7B8F8D8DA9EF67FDB7E92C4701261E23C04FDDEE096BDD5A765EC75BB595B9E5CC64EC69261B265DB1A7E8EE510!
 D27C3E64048B4013B81F213FDC991436F1B3B3716A753458D635CEDCEFA24C!
 F1F48EE5
7F17EB5755C7780F7557B48DBB6C6FB7E334FA4E58A9934E389DE20FD170C9302848D76BD1DBEA7998F9D97F69EA79CECCB1ADF4EBA71185B532B6CFA78F4D993E9FA35B27FC1E35DFE93F9C7EF54FF68515698787554623D4BBF4F67C7F4BFAB7F998AA8C84D28D05BC45B3939F9596E6BB32FB2FDBF45AE71200FDD60FA157F618ABB9D3A7026404C922AB7FFFD4F2A4924925294BF37BFF00051492485249249214924924A5249249294924924A5249249294924924A5249249294924924A7FFFD9003842494D042100000000005300000001010000000F00410064006F00620065002000500068006F0074006F00730068006F00700000001200410064006F00620065002000500068006F0074006F00730068006F007000200043005300000001003842494D04060000000000070003000000010100FFE11803687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D27EFBBBF272069643D2757354D304D7043656869487A7265537A4E54637A6B633964273F3E0A3C783A786D706D65746120786D6C6E733A783D2761646F62653A6E733A6D6574612F2720783A786D70746B3D27584D5020746F6F6C6B697420332E302D32382C206672616D65776F726B20312E36273E0A3C7264663A52444620786D6C6E733!
 A7264663D27687474703A2F2F7777772E77332E6F72672F313939392F30322F32322D7264662D73796E7461782D6E73232720786D6C6E733A69583D27687474703A2F2F6E732E61646F62652E636F6D2F69582F312E302F273E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A657869663D27687474703A2F2F6E732E61646F62652E636F6D2F657869662F312E302F273E0A20203C657869663A436F6C6F7253706163653E343239343936373239353C2F657869663A436F6C6F7253706163653E0A20203C657869663A506978656C5844696D656E73696F6E3E3431313C2F657869663A506978656C5844696D656E73696F6E3E0A20203C657869663A506978656C5944696D656E73696F6E3E3231313C2F657869663A506978656C5944696D656E73696F6E3E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A7064663D27687474703A2F2F6E732E61646F62652E636F6D2F7064662F312E332F2!
 73E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A446!
 57363726
97074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A70686F746F73686F703D27687474703A2F2F6E732E61646F62652E636F6D2F70686F746F73686F702F312E302F273E0A20203C70686F746F73686F703A486973746F72793E3C2F70686F746F73686F703A486973746F72793E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A746966663D27687474703A2F2F6E732E61646F62652E636F6D2F746966662F312E302F273E0A20203C746966663A4F7269656E746174696F6E3E313C2F746966663A4F7269656E746174696F6E3E0A20203C746966663A585265736F6C7574696F6E3E37322F313C2F746966663A585265736F6C7574696F6E3E0A20203C746966663A595265736F6C7574696F6E3E37322F313C2F746966663A595265736F6C7574696F6E3E0A20203C746966663A5265736F6C7574696F6E556E69743E323C2F746966663A5265736F6C7574696F6E556E69743E0A203C2F7264663A4465736372697074696F6E3E0A0A!
 203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A7861703D27687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F273E0A20203C7861703A437265617465446174653E323030372D30382D32315431343A32353A32312B31303A30303C2F7861703A437265617465446174653E0A20203C7861703A4D6F64696679446174653E323030372D30382D32315431343A32373A35332B31303A30303C2F7861703A4D6F64696679446174653E0A20203C7861703A4D65746164617461446174653E323030372D30382D32315431343A32373A35332B31303A30303C2F7861703A4D65746164617461446174653E0A20203C7861703A43726561746F72546F6F6C3E41646F62652050686F746F73686F702043532057696E646F77733C2F7861703A43726561746F72546F6F6C3E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A7861704D4D3D27687474703A2F2F6E732E61646F62652E636F6D!
 2F7861702F312E302F6D6D2F273E0A20203C7861704D4D3A446F63756D656E!
 7449443E
61646F62653A646F6369643A70686F746F73686F703A63393464383463362D346639652D313164632D623434612D6462616432653537656630373C2F7861704D4D3A446F63756D656E7449443E0A203C2F7264663A4465736372697074696F6E3E0A0A203C7264663A4465736372697074696F6E207264663A61626F75743D27757569643A63393464383463372D346639652D313164632D623434612D646261643265353765663037270A2020786D6C6E733A64633D27687474703A2F2F7075726C2E6F72672F64632F656C656D656E74732F312E312F273E0A20203C64633A666F726D61743E696D6167652F6A7065673C2F64633A666F726D61743E0A203C2F7264663A4465736372697074696F6E3E0A0A3C2F7264663A5244463E0A3C2F783A786D706D6574613E0A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202!
 020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202!
 0202020202020202020202020202020200A202020202020202020202020202!
 02020202
0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020!
 2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020!
 2020200A202020202020202020202020202020202020202020202020202020!
 20202020
2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020202020202020202020202020202!
 0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A2020202020202020202!
 02020202020202020202020202020202020202020202020202020202020202!
 02020202
0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A20202020202020202020202020202020202020202020202020202020202020202020!
 2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A2020202020202020202020202020202020202020202020!
 20202020202020202020202020202020202020202020202020202020202020!
 20202020
2020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200A3C3F787061636B657420656E643D2777273F3EFFEE000E41646F626500640000000001FFDB0084000A07070708070A08080A0F0A080A0F120D0A0A0D1214101012101014110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010B0C0C15131522181822140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC000110800D3019B03011100021101031101FFDD0004003!
 4FFC401A20000000701010101010000000000000000040503020601000708090A0B0100020203010101010100000000000000010002030405060708090A0B1000020103030204020607030402060273010203110400052112314151061361227181143291A10715B14223C152D1E1331662F0247282F12543345392A2B26373C235442793A3B33617546474C3D2E2082683090A181984944546A4B456D355281AF2E3F3C4D4E4F465758595A5B5C5D5E5F566768696A6B6C6D6E6F637475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F82939495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFA110002020102030505040506040803036D0100021103042112314105511361220671819132A1B1F014C1D1E1234215526272F1332434438216925325A263B2C20773D235E2448317549308090A18192636451A2764745537F2A3B3C32829D3E3F38494A4B4C4D4E4F465758595A5B5C5D5E5F5465666768696A6B6C6D6E6F6475767778797A7B7C7D7E7F738485868788898A8B8C8D8E8F839495969798999A9B9C9D9E9F92A3A4A5A6A7A8A9AAABACADAEAFAFFDA000C03010002110311003F00E338ABB15762AEC55D8ABB15762AEC55D4C55D4C55D4C55D4C55D4C55D8ABA98ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AE!
 C55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC5!
 5D8ABB15
762AEC55D8ABB157FFFD0E338ABB15762AEC55D8ABB155F1C324868AA4F6AE0269205B30F2BE8CEBA95BDA49A643737329A96B9E4CAAAC3F6A1FB1FF079599B6703DCB47F26797EDE10F269907AAF42C1A34201F051C7ECE4A365814D3FC37E5EFF00AB5DA7857D08FF00E69C931B483CE16FA069BA7B3AE9F6A25A1A7EE631DBE1FD9E593885B78C5D79B658E7744D3AC99396DFBA02A3232098943BF99ED9EA24D134F2C7AF18A877F1FDAC8D32523ACE90451F43B7DFF90B2E2B4D1BDF2AC8E1A5D1E5407ED08A634FF600E2B4B5FF00C16E4520D4231D36789B7FA571B2B4B1348D0AEE5E169753C658D156745DABFCCC8D920189653FF2A535C96D56E2D2FEDA6E42BC183A1DFA745930134A0245ABFE5B7997498CCB70B0C918EF149CBF80C41B5A48E0D0757B8DA0B492523F9057F564A90D4DA16B5054CDA7DCA05EA4C4F414FF002B8D302A04A95342083E076C55AC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABFFFD1E338ABB15762AEC55D8AA77E5BF2DCFACCAF2BB7A1A75B82F7574DB2A81FB20FF3B64652A6518DA75777FA6A294B08C4505B8020000AB536F51DBF99FED653B92DE299E7E50E8725D4B73AF5E3191C90B106DF7A7DBC9016C245EB4065AD2E3B0C!
 2AF25FCC49B53B9B8748EDE564A9DC027AF4E83F6572C082F29B9D3EF44ACCD6F28249FB4A47F0DB224241421B79947C51B76EC47CBB60A4DB4508EA30526D6F163B5294F1FA322432B70046F4C56D1760E639C1F7FD472712D65EFDE43D48DDE9F1C25B93014F889EC3BFD1864141641ABE8D6D7D6B22BC6A5F89E2C7AF8F7F87005615E554B2B1D567B5994092324AF2DB6F1FF886495E851A44CA085AAD29423BF7FB59029416A1E59F2F6A8A45FE9D6F715EACD1AF2DBFCB03960430FD6FF25BCA97EA5AC049A74DDBD36E49FF0001272FF89629797F993F2A3CCFA187992317D68A4D2582A5A9FCCD1F518DAD30A646462AE0AB29A3291420E14358ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AFFFD2E338ABB15762AEC551DA369373AB6A3058DB29692660BB7604EEDFEC7232953288B7A84F656D39B4F24E9429046C0DE4A06EEEBFDE3D476E59546C96D3B04179E34ED374C82D74CB48B835033B53E23D157FE1B2F9000358365EC3E53D323D2F40B3B4414E3186623BB37C4DFAF2B80599DD39CB1834FBA91E3D7BE02A8196D165724D46F4DB635EBFF11C2249212F9F4547154501BB0DBC695FB3FF0060F2568A427F86E1706A919A9A54A0A787BE1B0A8697C9FA5B805ECA26A8D8!
 95506BF2FA31B5415C7E5DF9725A9364AA294251B8D083F16DFEC7FCFEDE05!
 4BEE3F29
FCBEF411ACD19E838BD7E2AB03D7F6A98D252B9FF296D91C7D5AEA443B7DA0A46FB76A74638400825927943CB77FA3DC2FEFD668CD08AA9141F6149E5FCDCB12A033FD99771B1ED90579779E2C8E93AB457D01A2B6FB6D4FC4FECFC39645059B79775AB6D4EC90C720760A050EC41A7BEFFEB64484A76BD37C82B476C055A342B461F4604B01F3BFE58699AF4525DD9C62DB5203E164002B91D9C61052F05D6344D4747BA7B5BE85A37534048D8FCB2484BF143B15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFFD3E338ABB156C2D4D05493D862AE5525801D4ED8A43D0FC8C89A4417377222C7792A18EDE690D046187C4E72B9449671349FF906E34CB4F344AD777D1DCDDDD2B242D1F2216BF130FE5F897964626994907A8BAEB3E72782302482194CB31FF253655DBE15DF2C9498443DBAD5425BC680710140A7D18C58956C28689F6AE02556725A604B9C023E2E9892AE50BD7A9EB5F7E871B55A557B1A0EF4A78636AE31AD3E5523BF6A7BE1E25532869B0ED5EBF8FF00C2E0E24A9B42A6A8CBB375EA7AD77F8B0F12D3422457241DC9A915AD4D001D7ED6DFF35E1E2B452363FB3BFF0098ED8841623F989A7C979A621450CC84915F61BD3271D90F3BF2F6A3716172B1C9511921452B4AF4ED922!
 87B3695769716884302E051857BF86FFE4F1C81648E39155A77141F4644A5A00508ED885487CCDE51D2B5E857EB56C92C919AA96A827FC9665F8B0ABE7CF39F95FF00436A92C76E8C90B125617AD50782B1FEF13F970AD318C28762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFD4E338ABB154FF0040B7D164B3B86BA9261AA160B671A01E9D29F1F3277E4D842A69059FE879A39AFF0049924B4660E250A4301E2BB7FB2C4A433BD5DFCBFE63D3E19B48BD88DCC518596D1E91CAC07829A2B32E444BA24C5845816B2F3344A89E9BC61B973DA950D534C810CC72657E49B76B391F5865E51DECDC149A1A80DCD8AF2FF2B0016AF625B880202644E951F10FEB9214D641529F54B0881E5750A11B90CEBFD701924040CDE65D11369353B651DFF789FD71E24F0A1AE7CD3E5E28D4D5605F75753BF5EC701290109179E3CB70C7E9CBAB41211B862E2B4F0395D967C2170FCC2F28AD6BA9C3B74A303F778E4ACB1315ABF98DE51A1E5A8463DAB5A636BC2BD3F307CA2C69FA4E214EBC8918D95E1565F3D7945AA3F4B5B8FF00663240B13142EAFE67D2AF2C1EDF49D62DA3BA620095A40283BF1FF2B083BA692AD3E2861A037304EDDDC4C189FF0086CB048312197E9B7D0143575AF5FB61BB7FC0FECFECE02!
 57856EA77D66D1947F8D54FC63B74C3128A2C3F504D1B831F4C46CB5A501EF!
 5FB59340
50B0F3C436158A2B39AE20068CD0AF24A8FF2BFC9FE5C3CD168A97F3674C818896C6EC28EADC09EE7B655205902D47F9D1E543F6D2E233DEA953FAF2165970A616FF9AFE4C94D0DE18DAA07C68C3AFD1B60E25E14D6D7CF5E53B91FBBD56DEA7F659C29FB9B25C48E12A1E63D1BCBDE6AB0685A685E602B0CF1BAB329EA3EC9C6D68BC1BCD9E4CD4746BC78A58EBD59644DD587D1D0EF920A4314208343B11D46162EC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFD5E338ABB1546E9AD24570B2C6A5829A9DABF3D86297D15E59F36796757B086CEE1E249D1557D29E82A69FB3EA64884301FCD5D1BCBF6F22DD694C914E77758C8A57724FC3838536F3CB4BDB857E44866E25096A9241F13D722CB9239FCCBAA2ADBA4337A705B0FDDC2BB26FD792E3C979A7369E62F2D6A748B5A827B476EB756D2311BFED321DB06CBB856BBF22DB5EC267D03584BF04545BCD20590FB76DFF0067ECE3C34A0B17BAF2C6BD6B37A5358CFCAB4AAA16077FF23960B0947C1E4AF3B2209A0D26EC2B0142226DC1E878D315B4CAD3CAFE7A5DA4D05EE17B89E1DFC695F870AA60BE50BD714BCF295CC7E2F6A48FF846AE0428C9E48D22426AD7DA6B5765BCB73407DCA8F8714DA1A7FCBABF281F4FBAB6BD5EA151C2B7FC036349!
 B63F7BE5DD66C9CA5CD84D1B0EFC1B8FD0CB5C56D0234FBC6345B795BE48DFD315555D2B53A82B6D38FF0060E3EEDB1B545DB695E656DEDA0BC045775120FC462845187CF16BFF002DEA3D8498ECA86B9BDF35B232CF2DD94E8DCC3D29DD4E112410B74BD77CC1A4BD6CE69156B568981287FD65C3C48E166BA5FE68B10B16B3A52C8BB03340A4377FD93F0E3C416991C50FE5E799A30DC561B83BD194C2F5F6FE6E8B902C91B6FF00953E4E256AB34B53B7EF36DFFD55C484DA716FF95FE49550469E1BDD99ABFAF080C4C9737E58F9441E505BC96EDD8C5232FF005C7851C450D71F96B6AC0882FEE545085591F9A8069E2B9245B09F307E4F5E8E52DB37AE402792ECDDBED0DF0ABCD356D0AF34B99A39D190AF40C38D4614259815D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABFFFD6E338AB22D03C95ABEB9A55FEAD6C512CEC01F519CEECE007F4D147F92705ABD4BF293C97A7CBA1AEA9A8DB892595996347150029A72A1FE6C92B21F317E5AE95A842EFA728B3BB00B46C9F08E5D474C41578B79A743D6F48B9306A45DC0DD589AD7B8C2770A18E8620785695C83353663F8F4C0AB4B1FBB0D22D1961A8B5B38E5531D7E250687E60FF003610696ADE95E58F385F69912DD076D47495A7AC0FC53423FCBAF55C06!
 36A090F63D2758D3F57B44BAB1996589C576EA3FD65C508EC50EC2AD322B02!
 AC0153D4
1DC6054B6E3CB7A1DC37392CA30FD990703FF09C71A4DA0E7F2A45C58DA5DCD0B7EC873EAA0FF60DBF1FF658D2DA413DAF9B34E6669AC2DEFA104D25B7015E9E250E46AD97121A1F37D9C5384BB8DED1C6CCB347C4547F95BFFC364F802389935979974F923E71857DBFDD6411DBF0C7851699C5A969F31550C013D030A63C2AAE6DECE51BC71C83FD556F960A5B526D23496FB5636E7FE7927FCD38D2DBBF43E93FF2C307FC8A4FF9A70505B2B1F43D1A4003D8C040DC7EED47EA18696D5A3D3ECE2004518403600569BFB634B6AE1157A75A52BDE98D212AD535A1A74D1C6ED19E6090AE78B1F97ECE4C0B555B7D7F4D95C46F20864207C321001AF83569829531D987883F48A605631E70F2758EB96329F4C2DDA8255C0DCD3B6D84157CE3AFE817DA25F3DB5DC65373C188D8807122952CE35FEB8134D889E9502BEDDF05AD35C1BA50D7E5850B68475C55D4C55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55FFFD7E338AB2AF2879BAEB45B1D4F4E047D52F63E4C09350E9B2F0FF5EBC5B01487AEFE5E7E60E897BA65B6992B0B5B981029E7B2B31279529F671521E86AE8E39230653D0835185093F99BCB765E61D365B3B850242A7D294804AB50F1DFED71DF1055F3D6B5E49D734A9E48A6B4731AC8104C07C2D5FB254E12120B1FBFB55B5!
 98C2B2895D7EDF1E80F75FA32292878636964545FB4E4015F12683150CC20FCBFD49F48BBB978D96EED08631D2B543D48382D29069FA85F68B7A258495653C648987C2CB5F895D0F55A6157A3683A890875CF2DB142BBEA1A583D0FED3443A64A9897A9F967CCF69AEDA2C8A42CE3ED2F4A9EF4C084F315762AEC55D8AA1A7D4AC206E135C468DFCA58576C55037B3F96EEA16FAD35BCE846EA4AB350F80FB7855E33E61B5B0B29E4B8D2A76B57EBFBA63C09A0FD9AE4A9095D87E636A76F586FD45D20F84C8A78B506DFEAE478995322B2F37E9B7C01B4D424B2BBEC9292072DBBD7085298CDE69F3669EA65F5CCF101B303CD48192A0C504FF9D3AADAB159A0576A529C40A6020282E3F9EF774A7D49397F36FF00860D9560FCF1D45B6FABA83E3F0D3F563B2AFB7FCF3BA5FEF6D43EFB5475FF0027E1C1B258BF9C3F31EF7CC5441188501A823AA8DF65A7F2E1B5A49AC3CDFACDA0F4DE5FACC03FDD736FB7806EAB91B4B2EF2FFE664F692288266850905AD663CE2249FD96FD9AE485143D4341FCC3D23520B1DD11693B7424D626F949DBFD96242A2BCCDE53D1BCD161C1C27320B453250D6A3F981FE6FDAC0AF9E7CD7E55BDF2D6A06DA7AB46DBC6F4EA3B602120A4D127360A3666341F4E0A656DB1922728E0AB2EC57C0D30B16C4B5DFF000EBE1DB0DA1504D11004918!
 3BEFB0AD053BF5C55CD1D9C83E1AA3788A907BF4F8B1553FA9291F0CA3E904!
 7EAE58D2
A83C1221A11F76F81565315762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFD0E338AAE8C8E6BCBA577C551B2C7240C248DFE1FD8950EDD7D8E0A656CAFCA7F98FAD681208CC9EBD9B30E68FBEC3C0F6C569EF3E5EF34693E61B513D84A19E80C911FB4B5EDFE562C6921FCC5D5B4FFD1CFA4ADD88B529C0E0AA03305DF7FF00230713201E2573E46D712CA4D46085AE2CD0D1DC0DC78F25DF0AA47676F34D771C5102652C29E35AE297D55E5E0F2E8D672DCC7C6778544AA69B9038EF82904B11F3CFE59E9FAA412DE69F1FA576AB5F4D07DAA7864916F1AB7B8D5BCA7ABAB85292467E346FB322D7ECFF00B25C79279BD4F4CD7B4F36516B160A12DE57FF004A2868D149FCCC3F97964D872661279EB43B2B6497519BD1A8DDC02CA7A7C4A57E791A4A4F77F9C9E4D8437A52C9311D288547FC36FF00F0B8D2B11D4FF3CEECB95D3AD51129B336E7FE1B1D9522B8FCE6F364A8C8B22206AEEAA0115F0A2E0B4B14BDF336AF7B299A6B862EC6BD70DAA0DB52BF7AD677F8B63434FD582D548DCCCC38B3B30F024E2AB2BBFBE04DB7534C529869FAF6A7A791F579D820FD8624A9FF00626BFEAE4AD8D268DAC68DAB8E3A95BFD5A720FEFE2E95EBBA530DB14BAF7CBD3C4BEADA38BA80F464A134FF00571A54A0A952430208EA0E04B60E0576296B1577EBC508BB4D46!
 EACCD61734E9C4F4A61056999797BCFCF6D2AF3964B2714F8E33CA33DBE38C8C24AA6FE6DF317E99453EAC3323A541E038D695F81FAFC5CBF6B2403125E62E642E5A94604D29E3ED4CADB39A6B3CB6FAA5AA30023D4A15E2E2BB48BD981FE7E3F6B25CD8F2497A1AD771914B61A9FE7E18AAE24D295DBA62AD7A8C3BFD18DAB6253DFEFC55CD213D77F9FF006D7157108FDB89F6C5569888E8790F6C50B315762AEC55D8ABB15762AEC55D8ABB15762AFF00FFD1E338AAADB40D712F05EA1598FC9472C52113617E2D27FDEC627B63B490B7423A62A9A5F68F6D25AFE91D1E4F5ED284CD09FEF623DD641FB4BFE5E349B4268FAD6B1A35DACFA5DCBC339F868BB86AFEC943D6B815BD7759BCD4AEFD4BA62D702A6573D4BF7FF81C1492699B7E5FFE62C1A34634DD494C967310198D4F1A9FB584297A0E97F96BA147A936AF1FEF1243EAC201A81507A7DF86D8B0DFCD0F37F98F44F310D374BBC7B4B486142A894DEBBEED4C8D26D0DE53FCE6D5EDAE520D79BEB768EC019800244A9A576A72C559F79CBCA3A579B345FAF5804698A19A0993F6B6AE482393C5B42D565D03549ECAF949B09898AF213E07E1F500FF00270834A45A69797B1C2CDA2EA2DEAE9F2D1EC2E7C14D08E9F3C921865F594B6570F049BD3EC378AF62320943D7B62AD549EB8A1D8A5C37F9E2ADE056FF00!
 577C55C7A62968FF0099C50EAD70AABDB5E5CDAB73824287BD3A7DD8DA2934!
 1A8699A8
294D462F46E2945B98C6D53FCEB92B08A405EE9B25B51D1965818556543514276AE02136833D7FCFA604B58A1D8ABB15762AA89712A2940E781EAB5DB0DAD384C46DD8F6F95302569735A8EB8AAD249EBDFBE28762AE0698A5DD715762877BE2976055C1C8141EFF008E156CB2B9F8877EA3C3155A508F96285B8ABB15762AEC55D8ABB15762AEC55FFFD2E338AA73E5778535098CB2A435B69951E4FB3C8A5157014849B0A111677B73672FA96EE50F461D88FE5618AA77A29D3A6BE5BC91D22F4B93C90374242FEC7D3894848A790CB34929EAECCDF79AE052B01C52F41D07F347CC3A168D1430AA5D428C54FAE492BE014FF2E049633E6EF33CDE66D5DB5396210B322A18C1A814EE30B148C1C55E9BF951F982748BA5D17527FF0071D72E043231DA273F0FFC8B380A79B21FCD3F20C57103EBDA5A80F4E5322F420FED2F11879A06CF2A8EE1AF2C7EA13926E20A9B527AFF00951E486FB29EF5289D2FA2FA9DD3F0B88FFDE691813FF3C9B0284034091B9477A329A1DBFAE04D3825B8EAC4FCBC31577FA2F5F8BE5B6286AB057EC9A7CF14B7CA0EE877F7C55DCE0EF1FE27156FD4B5A6F19AFB1C50BE686D4A46D6AECEE56B3230A7135E8BFCD8AA17BD3BE156F1571AE2AAB05D4D0D551AA87AA1DD4FFB1C6D0D49E9BD5D071F15FE9812A5850EC55D8AB58AB7DB156B156!
 F156B156F15762AEEF8AB8604BB1576142ADBAC2D2A89DCA46DB33015A62956B9B392DC86FEF213BA4ABF648FA30250E1856806D850D1094F87AF8628598ABB15762AEC55D8ABB15762AFFFD3E338AB6868714868E28762AA901FDE0A8AEC462521B8E29659561894B48C68AA3A9381534D4342B8D2D62375C59E4152886A57D9FC1B224B30146D104914F00AB7A82A83FCA5AFF0C54840B432AEFC4D3E59360A7B8C55B048208342370462AF75FCB4F3F586ABA3FE81D6A709751A18D1E46E3EA47D29C9BF6D723C95E77E7CF2F4BA06B6D3414FABC8DEAC0EBBAEE796DF4E4AD3497EB1A77D6AC21F3058AFEE9CF0BB8D3731CA3F68FF0092F8AA512A5C5DACB74685A3A7A8075A7F3D302109850EC55AC55BC55D8A5D8A1B562AC194D08EF8A51AF025D406E20DA54FEF611D69FCC98AA08EDF218AB47143B15762AEC52EC50EC55D8ABB156B156F156B156F15762AEC55BE98A5C715762AD6284559DFCB6A4A802485BEDC2FBA9FA314AEBA8ADA40D7168782F56858EEB5FE5FF271541D714358ABB15762AEC55D8ABB15762AFF00FFD4E338AA32C74E9AEE1BB9E300ADA46259077A1609FC71484253156B1436AC54861B118AB24F295B88C5E6AEEA48B38C88BFE323EDFF000AB912C8285E6B22E0B015657079B11B93D4D321C2D9612F867782649E2A06435A7CBC72682!
 CD34AFCC0D0E04105E689134727F7CE054D4FED2A9C935B5AD794B48D5EDDF!
 55F2A482
48F7696CBA3AEDFB2AD84845B03961921629229561D4114351812B031520A9A30EE36C559CF963558B5FB06F2D6AF255C293A75C39DD48DDA3A9C0136A5E5CB91A45E5DE95A901E8BD62BB81BA32578F35FF2F15426AFE5DBBD07525953F7BA5DC54C13FECBC4DFB24FF371C52916A7642D67F8378241CE26ED43DBFD8E1625038A1BC55D8ABB1576F8A5D8A15219648241246DC597A1C528DB9B78EEA037B6A2857FDE8847EC9FE75FF25B0252F20F8628A750F4C2B4EE0FD2876EB8AD3B8375A74C55BE0FFCA7EEC556D0E285E20958542123B1A1C064198812BBEAD31FD9391E20D83048F42B859CFF00CA71E30CBF2D3EE77D4E7FE438F1851A69F72E5B0B83FB269F2C1E206434933D177E8DB9077423E783C40CBF2735DFA2EE6952BB78E0F14321A29AF4D16EDC121761B93F2C4E6013F9193869339341B93D863E2865F9092F3A3CAA68C68723E30643B3E47F1FF1D54FD052802AD4E5D3078E127407BFF1FE955B4EF2B6A1A8C770F68BCCDB02CEB5DC81D78E5D1982E065C662527654524106A3623A11F3C9B52C34A6D507155B4C50D62ADE2AD62AEC55D8ABB15762AFFFD5E338AA67A4DCCD6F6BA918DA8B25BFA722F8867518AA5A7156B1570C55398F5492D745FA8C7B199FD4761E1DB0331C9BD0F451A8B34B7330B6B28CD1E6A57AF655C84A54CA31B6417BE4!
 8B6974F7BCD02F96F922AFAD6E4709471FB452BF6FF9B0092486112290E54EC41A119606A28BD2F57BFD26E96E6CA568E41D403B30FE565EF92050CC5BF44F9D612D185B3D7D17E24A7C131F15FD9E75C3CD584DED8DC594ED6F708525434653DA9914A823BC6C1D18AB8355606841C509C5C4B2EA9A7FD719B95E5AD04E7BB21FB2E7FD5C4A4320F2DEB0758D125F2B5F4844B532E9D31DC875F8BD1DFF00D5C8948492492CE312D8EA6B298A27F82440032B8F85978B7ECE1494233E803ECC770DFEC94628D94CDC69409A5ABB8FF2A423FE238AECB5EEB4FAFC1674F9C8C71A45AC1756C3A5AA56B5DC938ADAD6BA56624431A8ECA06D856D699F6FB0A2BD36EC702DAD33313BD3DF6C56D19A2FD59B508A3BB99A0B590F195D372478531484D3CD9A55BE9B7AB2E9AE65D3A6158A5AD4D47DA0D8D258F191EB5AEFE38D31B6BD593AF23855C2593F98F86287737229C8D3C31A4DB553D71547DAEA72C68B139AC6BD06D954E16E5E9F3889DD3A8EEF4E6B42776989A03DB314C656EE2192077D9D6B77688C7D652C08D80EB8C816D94E2792C82F2059C3B2D6304EC7C3E9C4C4D2F1C48A6AE2F217999914AA1ED8889A5196202A5D6A503A22C69C4A8F888EF82302C4668858754436DE97015FE6EF87C336BE3C2EDB835730C4F1A81F1F8D09C4E224B13A8815186FD5240E!
 00D8F439238CA7F3515F3EA6B3CBEA3F53E0300C6580D5443573AB195154B5!
 78EC0D3F
CEB86389AE7AB88E48ED07566B03EADADD05724728DB6A13D59724410E1E49C6480F3469C8253A85B00A929FF488C7ECB9FDB1FE449993136EBE428B1D2724C5AC50D62AEC55D8AAE11B9D8035C534D3295346143E18A1AC55D8ABFFD6E338AB61980201201D88F1C55AC55D8AB856B8AA20A996548D77AD117F56064CC34CD126D5661A4DA49C12DA22F393D0BA8E5C731EDBC8A0A76BA8DBD8CB15F584AF1CB6CE4CB6D27DA634E1B3775CB406B281F37D8C6CD6BAD5B270B7D4939B2765906CEBFECB26181635858AF8669609165898A3A905586C411BE2ACF74EBCD2FCE968BA6EA6CB6BAE46BC6D6E8FD9948E88FD32576AC3F59D12FF0047BD7B4BC8CA3A9F849E8C3B329C8A557CB7232EB16D1F2558E77114A24FB051CF16E58DA808EF35D82E81E66923B13C52064960706BBFDAE4ADF31812F43D37CB7A2F9F34D4D52290457ACA22BE8B6F865514136D9032A6556F33F33F966F3CBB7ED69742BB9F4DE840650763930589092E1438E28762AEC55BA1F9629A750834C569B181535B3D4C359C96175F14120F81BBAB766C369A4A585188AD69DF145358A1D438A5B0AC7A02715A5C2294F4463F20702D2E5B4BA6DC42E4788538555E2B4D4148020929E054E4486C8C88EA89B8B6BE8006688AA91DC7F6E478436F8D2EF4219E4F1E95DB0F08478D2EF5A6E24EA5B1E!
 10C4E6977B46663D5B0D20E43DED19D8FED63C28F10B4677FE6C691C656FACE3B9FBF0D2F1977AADD6A71A471968B31DC9C69165BE55EFE3BE34BC4883A8DD1B716ECD58E9420F5A78634B686A2F7E9E38A1C4C7BD01C2AEE49D97F1C0B6D161FCA0615B5CB2B28A2D062B6D7AB27F37DF8A16924F535C55AC55D8ABFFFD7E338ABB15762AEC55B1D715098E8AAD26A71B01C8A55C0F1E3F16573E4D90E6F40F21DCA47E628E365005D16576269F1302331ADC923663FAB7972E74E83509E68CF2B7BAE00914AA9272EE2DDAA92EFAC35EE917B6E187A50159A046FB400FB5C6BFB3973531FC2C1D8AB6A5948652430DC11B10714B294F33C3AC698BA56BBFDEC43FD135003E2423F665FE65C0A527FD03A9BC8CB6D09B80A2A1E2F8811E238E369E156B633DFA1D2EE2BF5A1FEF33C868411FEEA35FE6C28A28DF29F982F7CA7AFACB2AB0881F4AF2DCF74AFC5B7B7ECE448640BD5BCD5A4E9DE76D3126B2915AE0A096D5AA396E3ECB2E423B3221E74BF953E6BAA86B47A10492ABCA94C9DB05927E5D6AB1920DADD965EA040C7F1031B4D282F93A48686E2CEF78F7222236FF6430A16345E51B462B75697DCC7ECB155E9ED8AAC9351F2505022D32E4B52956947DFFB58ADA02E350D11FF00B9D3D90EDBB48715B413CF6BFB36F4F9B138A1BFAE463A5BC74F03538A5B4D415!
 2BFE8B0B127A9535FD78A2DC352707E182102BB7C15C696D736B17447D88D7!
 E4831A5B
5A357BF1F664E3F251FD31A5B68EADA89EB3B7DC07F0C696D69D4AFC8A7AEF4F634C348586F6F0F59DCFF00B238A6DA4BCB9470E246246E2A491F8E34B69CC10E99ADAF1F512C354A7C3C8F186520789FEEDF0252CD434CBFD3A6F46F21689BB123E123C55BA3614213143B1570C55D8ABBB62AEC52DFB7EBC55DEF8A1AC52E2298A1D8AB58ABB15762ADD2B8AB650D0B5361D7DB155B8ABFFFD0E338ABB15762AEC55D8AA79E5789E4BAB96404BC76EEFB7CC6573E4DB0E69AB5EDCE9620BD836904AAC29D6A32902DB897A5EA5AD797BCC5A1AC8248D1EE47EF626F84F203E22DF77C3913B200796DCE911E9DAEC708902D95C7250F52400C29C4FD397E3958DDAF24698DDCC5E8DC4B175F4DD96BF234CB5A94CF6C5596687A4E9DA9693475513A13CA4A856DCFBE61E5C9289D9CEC38E321BA55A9797EE2D034B19F5211DC751BF719663CE24C726988DC25F697D7B672092D67785C774623F565F4E1D946BEB26F24125F2D6E06EB751FC32023ECB1FE6DF0532BB52D4EFA7BD6479D848EA3889A94765EDEA789C284DFCBDE6CBDD2A38E20D58A36E50BD48642372B5FE56C052FA0FCB3E71D1F5FD3E2B88275498802585C8043F703C7FC9C431213FDB0A164D043327A72A0743D8E2AC1FCD1E49F2ACB2196655499D764EA7E630A6DE1FE62D2ACF4FBE920B76E48A76AEF!
 B0DBB625212371434FBB1415B8ABB143B156B156F156B156F156B15762AEC55B04D7DF1566BE58F33DA4F08D23CC708BCB23F0C12B00658C9FE573D5710C89641FF2A7A3D5D5AEF41D423FAA9AF159ABC837F29E01B094241AAFE5379C34F72A2D45D46057D580F25A7DD5C0A90BF94F5F4AF3D3E71C763FBB6A0A7D18152D9ED67B7204D1B464F40C08FD78554A9F462AEA6F8157B46D4069B1EF8554F143B156FAE2968ED8A1AC55B552C683A9E98AA2ACF4DBBBD97D1B689E690F458D4B1FC305B2A66369F97CB650ADDF996FA1D2A0D8984B07B86FF5231809480EF31DFF009363F2AFD4B43B3717124E805ECC07A8EB1D5A4237F8579620959304C9307FFFD1E338ABB15762AEC55C31564DE4AB79A7BDBC8E204B9B57341EC572126C8A69ADBBD97D62DC44AF14B1A08CC8BDE9F13A7F94AD950E6DBCC30CFAC4A360E40F9E5DC21AB888578EF672D1F27E7C18150E7606BEF8294CAD46F64325D48E400C4D485E95C9060543A1C50AF6B7973692092091908F03407E6304A20B642663C93F5F334135A4B15CC656564215977049CC5FCBD4AC39875571A6344E663816D0C55D538AB81C56D36D335BBCB4B736B0CCB123372A95DBDF937DAED81369AA79F7CE81825BEAB3708871501CD29F22710AB87E6279D092B2EAB73E14572A41F98C5692BBAD6B55BB93D4B9D427!
 2D5A82ECC7E5F1570A10724734BF1B5CA4B2375AB54FFC3604A91B2B824900!
 311D6846
1435F50BBFF7D31F90AF4F962868D9DD8EB0BFFC09EF8AAC30CABB3230F9823155B423B62AD5315762B4EA62AEC55D8ABA98ABA98AB6A581041A11D0E2967BE42F36DCC17F0D8BDCB5B3CADC526AFC0C49D9645F7C0AF6EB2F335BA916FAA3A5B4DFB13310B1BFFB23F0AB7F9388521172798F438D589BC8DB88A90A791FC30A1E37E7CD4752F353AC56BA6451450B12930203B0247DA3B1ED925610DE52D7475B63DFA32FF0391A64A12797756854B4B07003AD48C690ABA6E9171732189A48E343DE460A2B86916BEFFCB72DAC8144B1C808EA86BF88C69508DA484DE49957C4753912590088B0D21AE2654B5B79AEDC900041B75FBB23C41908944DFF009435A8F5192DBF47CEB312088550B50353F6F11253144C5F975AF2A09AFD23D3ADF6265B960A69FEA7DAC36C69111DAF9074750D75732EB176BD6180048ABEEEDD7136952BCFCC2BE585AD744B58748B53B7EE14190FFAD31DF1016D8CC93DE5FDC069A492E2773B3312EC49F9D70A115AF29B7BA4B006A2CE35434E9CD87A927FC3362104A575C287FFD2E338ABB15762AEC55D8AB2FF00CBE24F981E152795C412A285AD49FB54FF0085C849B228FF0039AFA69609C8F2F4C8E27B50FC59586CB61D7D716D32C29140B149182B2C8A4FC67B315CB834C9062B5F9E1404EBCC5A1B696B632D2897902CA056B43FB43!
 6C012424B8A1C70A1DED8ABB157018ABB15762AE15C55BE4474DB14B83B78E2B68A8353BB876560C3BABA86C555BF4BB56AD6B0904D4D1698AB6751B17147B155F74760715B515BB8D1C95122A7F287FBB15B4645A94206D75711D3A29F8BF8E2B6B5EFD5BA5D48DFEB01DFDC8C5567E90626866DBC4A7F41884B7F5C1CC51D0AF72CA3DB142A99E061B3C42BE232485093D3626861A76E8B914A994A529E91F9506295EC24E247A70F80206F8AAC5AD29E9C7F11D8D715733DB4647AB02B1F056F1C505AFAE5A2FD8B6FBD8E14350DF243711DC4702F28D83053D2A0F21D302593DD79E2E2FEC120BD025442C52D4034E44539F3FF002460654C69AE7507A942EA95F85456806F80C82F01EE53FF004F3FEFC3DFAB7F9F6C1C63BD3C07B9717BF514E52AFCC9C3C41784A935D5C9146918D7B924E4AD8D2C2EEDB6368A7A87933F2BE7D5B4C86FAF6E648619B75886C695F85B7F1CA0C89E4DC000CEB4EFCA7F2E5A3ABBA199850D5C93EFD0E3C25066986BB71E5FF26E9125F3C61154718615A2B3B6C02AEDFEAE3C081325E3FACFE6F799AFD985994B085BA08C55FF00E46B648414C9865EEA7A85FC865BCB992773D5A462DFAF2CA616A30DB4F3B058919D8F6504E032014449667E58FCB2D57596592E644B4B6A8E4588673FEAA03903907467C0F466D13F2EFC8962D3DE4!
 8936A010F02FF00BC90B11F0F0857ECF5C90DD897835E5C35CDDCD70DB995D!
 9F7EBF11
AE4D828E2AFFFD3E338ABB15762AEC55D8AA7FE50BD167E62D3EE18FC1EA04623B72FDDFEAC89661927E60431D16290F09ED5DC293BF3590F25CAE3CD99E4F3F78D929C87DA151BD72D6A2168DCEDD70AB20D76D1AD74DB28E572F2B00E4313C96A3EC6F910C8B1FED9260EC55D8AA26C6D24BA94A44A5DC296006FD3C71A4AA5E08185445F57B85FB71F63EEB8AA0B143B15762AE38AAE8FD3E69CEBC2BF153AD3DB0253D934FD16396D26996EA0D3E65AB3B254920FFBACFED7C38195278D63F95CF6AA1750BA49D8EEEC84D3FD8D306E9D9896AB67696D7456CAE3EB56A45526E257FD890DDF24C690721424715E3B6E3AD4F8E142E81A24995A65E718FB495A5702A3EEAE74A59A19ECA034E03D686424A892BBF13E18D26D33B7D7BCB323402FB44555423D4781D94914FE5AE0A4D854F35C5E4A36B0DD79724904933524B592B58E9FEB622D058AD724C5D8A5DBE284E3CBD0E812CF2B6B73BC3022D5163524BB787C39136CC25B77F57FACCBF55AFD5F911172EBC7F679610C4A8D4E143B157034C555E0BB9E260508047B0C043389DD9BA44AD1C4CCA3914566A78F5CD64C9B76B8C0E16D220C76A2F86024B2118AA1D22D661C6715EF41B7E38633218CE00B8795F4EFB621A8F1249DFC7F0CB0E493488455F44F24D8C9AAFD76E9D63D36DFF7B372D9405F8A9960C848!
 A6A942215FCC7F9BD7A8FF00A3FCB6AB6D6508E097054176A0A1E21BECAE5F1877B8E4A49A47E6A79BB4EB9469EF5AEADC35658A40AD55AFC40353E1C970A109E79F3ADE79AF50599818ACA0A8B7B73BD3F99DBFCAC2C58DC56B248788049F000938929E1643A6F956E5C09EE63582DC6FEADC3841FF0003F6B2A948F46D8C40E69BAEADE59D1A3E0B39BD94758EDD78A57DE56C87864B33900E481D47F323579A236DA6A2E9D6C76223F89C8FF8CAE32D8E301A4CD8A4B35C5D4A6495DE695CD4B1259893965303BA8B295255B6606847B8C2C5AC55FFD4E338ABB15762AEC55D8AA26D64646575EB1B0714EBB11912CE2F4EF3AE976DAB5AE97AA5B49437F002D535F8D5072A8FF85CAB8A9B00795C808620F6CB83515F6B049717314110AC9230551EE71280C8FCEB14F05D4714CFEA7C2BC18F5A2A852323167262E726C1D8A156D638659552593D356DB9F61F3C5592689E57D4A46BD9616A1B581A68E64DC350576A78D327548B4326ABA76A30341AA4423BAA522BC4DB7EDEA0C814A497307A12B47C83807661D08F1C52A5B628762AD62AD83435F0ED8AA75AB799EF753D2EC74C991560B1148D86EC7B7C55C00322525C2C51D65AACD6904B0055912452143EFC49FDA18A6D038A1D8A5D438AD3A8715710476C50EC55AC55BA62AEC55D8ABB14BB143B156D4F121A9D!
 37F6C0905336D7F502080C00200D87400532BF083778C54A3D6B5189832CA6!
 A37C4E28
A3C69045A79A754570CEC18775A01913862CFF003124F6CFCF76E9195B8B76E5D82D08F7EB959C05B066096EBFE71BCD521FA9C0A6DECBAB463AB9A53E3A65D085344E76925B69D7F78DC6DA0794FF0092A4E4EC30A25385F28CF0289352B982CD0FECBB866FF805C8992447BD733F946C80A09F5097B9DA28FF00E6AC1522CAC0517F35DCC7198B4EB78AC90FED22867FF836192E063C6945CDEDDDD316B999E527BB31392A0C6C9510093B0C28568E28854CEFC40FD91BB1F60302694BD561F64951ED86916B3143B157FFD5E338ABB15762AEC55D8AAADB3012807A1FD780B289DDEADE416B6D6B42BCD0EE49FACD9D6E2C8ED5A1D9D14FDAFB5FC994486EDCF38D6F49BBD32ECC37402C8DF1D01AECDBE5D16A92BF95F4F375A9A4AC4AC56A0CEEC3C23DFAF6C4958854F37943AA1F4E5F55194480D79539EF4C42C92139262EC50EC5594793BCEF79E5CBCAB28B8B294709E16DFE03D69FF3461B5669E6DF2EF92B58D206B3E5D7586E187236E94AFF00B28FED2E1A5793CF118A568DBAA9A6452A74C50D9523AEDE18AB54C55D8ABB15753156D4027734C5211296F11A55ABE343B64496C1108FB7B0B46721892A07507FAE532996D100A9243A6C47E1899C8EF5DBC3E788322990885159E00DFDC7C3B6C0F6193DDAF65513695237EF2C9D8FB3D31DD765295AC03D62B26!
 E3E0CE4E116834B3D4829F0D8AFD2C7C30B15394827E1B644E9DC9C2B487757353C500F6FD585042811BE2C5C17DC0C2ADF05AFDA0305A69516288F59540EFD71B5A718E21FEEC18AD0770B7FF7E7E18AD06B8DB8FDA24E2BB2C6E1FB35A7BE14394A721CC7C35DFE58AA7C9AD6876683EA5A5ACB2D07EF2E9B9FC43FC85A6468B2B086BAF34EB33A98D66F4223B7A700E0B4FA3E2C78429914A9E492462D231763D598D4FDE70B1B5B850EA62AD8A77FC314BB9B0FB3B62B6B6A49A9C50EC55D8ABB157FFFD6E338ABB15762AEC55D8AB8120D47518AB23D0B55BBD3EF20BEB37E13A1DB7D88FDA8DBFC96CAA41BE2F47D5ECFCB7E69812EE778ECEE9C0F55643C0EDD7D27FDA1918C96410D369DA2683E5FB916F203EAA15129DFD43523E03FC8B88B43C9266E4E77A81D32D0C0A99DBAE162D6143B156B154CF47D5A6B096AADF07F29E87DB0DAA6973A75BEB3135DD8B05B9AFEF2DCEC6B848B5482E6DA6B63C268D91C13D452B91A4DBA5BB9258D2370BC5294A000EC3155F15F7A69C1A08A4F765A9DB15B735EA9047D5A200F829FEB8AA9099791631A9AF6ED8AAA9BA848A7D5D3E78A149A588D3F7607CABFD714B5EA2F65FA2B82936DFD61C1D89FBF070A788AE178FF00CA3E9AFF005C7853C6C9346F26F9BB59884D61A7892261C96462A8B43FE5332E1A4712327FC!
 B7F3F5B935D2B9D3FDF6CAFB7FB16F8B1A419316BFB7D474FB936F7D0BDBDC!
 2F589C50
EFED8D2F121FEB53766FC31A5E2537919CF226A70A2D6E286B156F15762AEC55AC55BC55D8AB58ABB156F156B155C013D074C52D1C50D571575715762AEC55D8ABB15762AFF00FFD7E338ABB15762AEC55D8ABB15445B5CB42C37A0AD41F039122D9C64F52F23DF585EC4DF5D457E042AC6C030A52B5CAAA8B61DD22F3FEB9697F24696EFCBEA8CF1040388E2771B6594C6D8281BE49834D8A16E143B157571575715558AE2589C346E558742A68714BD83C8571E5DF38E93268FADA45FA4A304432100391DA443B726FF00271560DE73F245D795AF95276F52C6727EAF70BEC7A32F50D82D698ABAAAB9556E401D9BC70A1512DA7701952A0F43518A57FE8FBCA06F4CD0F7A8FEB8A2945E378CD1C50E295CB04CC01552478F6C556FA5252BC4D315A68AB034228475C569DC1A95A6D8AD322D13CF1E6AD182476178E2251C4444065A0FF5B15A64C3F397CF063E2120E5FEFCF4C7EAC28A619AEEADAC6BF7C6FF005221EE080B50028A0F618094D2586271B152305AD2D2AC3A8A62B4DFA521FD93F71C2B4D1561D4118AB5435C50EA1C55D438ABB89C569D4F1C55D8AB58AB862ADE2AEA818AB8B1229DB156B15762AEC55D8ABB15762AEC55D8ABFFD0E338ABB15762AEC55D8ABB15762A8AB4D46EAD2A2191901F024603164254A6CED212E4D4B1FC714F35BD01ED5FD58A16!
 13858B58ABB15762AEC55D8AAF8279ADE559A0731CA86A8EA684118AA79ADF9DBCC3AE59C567A8DC0960880A0E0B5247ED33D397FC0E29B483143AA7156C3B0E848F962AE2C49A9249C55B0EE0503103D8E2AD726EB535C55AE47156F9B789C56DBF524FE63F7E29B6FD697F9CFDE7143425907476FBCE2AEF564FE6351B83538A6DC6473D589FA715B6FD697F9CFDE7145AD2EEDD589F99C55AE4715754E2AEA9C55D5C55D5C55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB157FFD1E338ABB15762AEC55D8ABB15762AE18AAE1F4FD1D31641AFBF14358A1D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABB15762AEC55D8ABFFFD9');
+
+update auction set image_id = 1 where auctionId = 19264723;
+update auction set image_id = 2 where auctionId = 62748261;
+update auction set image_id = 3 where auctionId = 71234567;
+update auction set image_id = 4 where auctionId = 73219532;
+
+insert into feedback (feedbackId, for_account_id, from_account_id, feedbackDate, item_id, rating, comment, response) values (1, 1, 2, CURRENT_TIMESTAMP, 19264723, 0, 'Pleasure to deal with', 'Thanks!');

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-ejb/src/main/resources/seam.properties
===================================================================
Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/pom.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/pom.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>restbay</artifactId>
+        <groupId>org.jboss.seam.examples-ee6</groupId>
+        <version>2.3.0.Beta2-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+    <artifactId>restbay-tests</artifactId>
+    <name>Restbay Integration Tests Module (EE6)</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam</artifactId>
+            <type>ejb</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam-resteasy</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <classifier>jdk15</classifier>
+        </dependency>
+        <dependency>
+            <groupId>org.seleniumhq.selenium.server</groupId>
+            <artifactId>selenium-server</artifactId>
+            <classifier>standalone</classifier>
+        </dependency>
+        <dependency>
+            <groupId>org.seleniumhq.selenium.client-drivers</groupId>
+            <artifactId>selenium-java-client-driver</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>functional-tests</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.dbunit</groupId>
+            <artifactId>dbunit</artifactId>
+        </dependency>
+    </dependencies>
+    
+    <build>
+        <testResources>
+            <testResource>
+                <directory>src/test/resources</directory>
+                <filtering>true</filtering>
+            </testResource>
+        </testResources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+        </plugins>     
+    </build>    
+    
+</project>

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/AuctionServiceTest.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/AuctionServiceTest.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/AuctionServiceTest.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,108 @@
+package org.jboss.seam.example.restbay.test;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class AuctionServiceTest extends SeamTest
+{
+
+   ResourceRequestEnvironment requestEnv;
+
+   @BeforeClass
+   public void prepareEnv() throws Exception
+   {
+      requestEnv = new ResourceRequestEnvironment(this)
+      {
+         @Override
+         public Map<String, Object> getDefaultHeaders()
+         {
+            return new HashMap<String, Object>()
+            {{
+                  put("Accept", "text/plain");
+               }};
+         }
+      };
+   }
+
+   @Test
+   public void testCategories() throws Exception
+   {
+
+      // Just verify we can do that, even if it doesn't make much sense
+      new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, "/restv1/category").run();
+      
+      reset();
+
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/category")
+      {
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            String[] lines = response.getContentAsString().split("\n");
+            assert lines[0].equals("1,Antiques");
+            assert lines[1].equals("2,Art");
+            assert lines[2].equals("3,Books");
+         }
+
+      }.run();
+      
+      reset();
+
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/category/1")
+      {
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("Antiques");
+         }
+
+      }.run();
+
+   }
+
+   @Test
+   public void testAuctions() throws Exception
+   {
+
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/auction")
+      {
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            // TODO: Assert content
+         }
+
+      }.run();
+      
+      reset();
+
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/auction/19264723")
+      {
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("Whistler's Mother, original painting by James McNeill Whistler");
+         }
+
+      }.run();
+
+   }
+
+}
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/BasicServiceTest.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/BasicServiceTest.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/BasicServiceTest.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,449 @@
+package org.jboss.seam.example.restbay.test;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.testng.annotations.Test;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.BeforeClass;
+import static org.testng.Assert.assertEquals;
+
+import javax.servlet.http.Cookie;
+import javax.ws.rs.core.MediaType;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * This is the test matrix for resources:
+ * </p>
+ *
+ * <pre>
+ *                                    | EVENT | CONVERSATION | SESSION | APPLICATION | STATELESS
+ * ---------------------------------------------------------------------------------------------
+ * Plain JAX-RS Resource              |  OK   |      -       |    -    |      -      |    -
+ * ---------------------------------------------------------------------------------------------
+ * POJO Seam Component Resource       |  OK   |      ?       |    ?    |     OK      |   OK
+ * ---------------------------------------------------------------------------------------------
+ * POJO interface-annotated Component |  OK   |      ?       |    ?    |     OK      |   OK
+ * ---------------------------------------------------------------------------------------------
+ * EJB Plain SLSB Resource            |   -   |      -       |    -    |      -      |   OK
+ * ---------------------------------------------------------------------------------------------
+ * EJB SLSB Seam Component Resource   |   -   |      -       |    -    |      -      |   OK
+ * ---------------------------------------------------------------------------------------------
+ * EJB SFSB Seam Component Resource   |   ?   |      ?       |    ?    |      ?      |    -
+ * ---------------------------------------------------------------------------------------------
+ * </pre>
+ *
+ * <p>
+ * Note that all EJB resources are always @Path annotated on their interface, not the implementation class.
+ * </p>
+ *
+ * <p>
+ * This is the test matrix for providers:
+ * </p>
+ *
+ * <pre>
+ *                                    | EVENT | CONVERSATION | SESSION | APPLICATION | STATELESS
+ * ---------------------------------------------------------------------------------------------
+ * Plain JAX-RS Provider              |   -   |      -       |    -    |      -      |   OK
+ * ---------------------------------------------------------------------------------------------
+ * RESTEasy StringConverter Provider  |   -   |      -       |    -    |      -      |   OK
+ * ---------------------------------------------------------------------------------------------
+ * RESTEasy StringConverter Component |   ?   |      -       |    -    |      ?      |    ?
+ * ---------------------------------------------------------------------------------------------
+ * POJO Seam Component Provider       |   ?   |      -       |    -    |     OK      |    ?
+ * ---------------------------------------------------------------------------------------------
+ * POJO interface-annotated Component |   ?   |      -       |    -    |     OK      |    ?
+ * ---------------------------------------------------------------------------------------------
+ * EJB Plain SLSB Provider            |   -   |      -       |    -    |      -      |    ?
+ * ---------------------------------------------------------------------------------------------
+ * EJB SLSB Seam Component Provider   |   -   |      -       |    -    |      -      |    ?
+ * ---------------------------------------------------------------------------------------------
+ * EJB SFSB Seam Component Resource   |   ?   |      -       |    -    |      ?      |    -
+ * ---------------------------------------------------------------------------------------------
+ * </pre>
+ *
+ */
+public class BasicServiceTest extends SeamTest
+{
+
+   ResourceRequestEnvironment requestEnv;
+
+   @BeforeClass
+   public void prepareEnv() throws Exception
+   {
+      requestEnv = new ResourceRequestEnvironment(this)
+      {
+         @Override
+         public Map<String, Object> getDefaultHeaders()
+         {
+            return new HashMap<String, Object>()
+            {{
+                  put("Accept", "text/plain");
+               }};
+         }
+
+         @Override
+         public String getServletPath()
+         {
+            return "/override/seam/resource/is/not/my/path/for/SeamResourceServlet";
+         }
+
+      };
+   }
+
+   @DataProvider(name = "queryPaths")
+   public Object[][] getData()
+   {
+      return new String[][] {
+            { "/restv1/plainTest" },
+
+            { "/restv1/eventComponentTest" },
+            { "/restv1/applicationComponentTest" },
+            { "/restv1/statelessComponentTest" },
+
+            { "/restv1/interfaceEventComponentTest" },
+            { "/restv1/interfaceApplicationComponentTest" },
+            { "/restv1/interfaceStatelessComponentTest" },
+
+            { "/restv1/statelessEjbTest" },
+            { "/restv1/statelessEjbComponentTest" }
+      };
+   }
+
+   @Test
+   public void testRootResource() throws Exception {
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/")
+      {
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 200);
+            assertEquals(response.getContentAsString(), "Root");
+         }
+
+      }.run();
+   }
+
+   @Test(dataProvider = "queryPaths")
+   public void testExeptionMapping(final String resourcePath) throws Exception
+   {
+      new ResourceRequest(requestEnv, Method.GET, resourcePath + "/trigger/unsupported")
+      {
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 501;
+            assert response.getStatusMessage().equals("The request operation is not supported: foo");
+         }
+
+      }.run();
+
+   }
+
+   @Test(dataProvider = "queryPaths")
+   public void testEchos(final String resourcePath) throws Exception
+   {
+      new ResourceRequest(requestEnv, Method.GET, resourcePath + "/echouri")
+      {
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().endsWith("/echouri");
+         }
+
+      }.run();
+      
+      reset();
+
+      new ResourceRequest(requestEnv, Method.GET, resourcePath + "/echoquery")
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            request.setQueryString("asdf=123");
+            request.addQueryParameter("bar", "bbb");
+            request.addQueryParameter("baz", "bzzz");
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("bbb");
+         }
+
+      }.run();
+      
+      reset();
+
+      new ResourceRequest(requestEnv, Method.GET, resourcePath + "/echoheader")
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            request.addHeader("bar", "baz");
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("baz");
+         }
+
+      }.run();
+      
+      reset();
+
+      new ResourceRequest(requestEnv, Method.GET, resourcePath + "/echocookie")
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            request.addCookie(new Cookie("bar", "baz"));
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("baz");
+         }
+
+      }.run();
+      
+      reset();
+
+      new ResourceRequest(requestEnv, Method.GET, resourcePath + "/foo/bar/asdf")
+      {
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("bar: asdf");
+         }
+
+      }.run();
+      
+      reset();
+
+      new ResourceRequest(requestEnv, Method.GET, resourcePath + "/echotwoparams/foo/bar")
+      {
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("foobar");
+         }
+
+      }.run();
+
+   }
+
+   @Test(dataProvider = "queryPaths")
+   public void testEncoding(final String resourcePath) throws Exception
+   {
+      new ResourceRequest(requestEnv, Method.GET, resourcePath + "/echoencoded/foo bar")
+      {
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("foo%20bar");
+         }
+
+      }.run();
+   }
+
+   @Test(dataProvider = "queryPaths")
+   public void testFormHandling(final String resourcePath) throws Exception
+   {
+      new ResourceRequest(requestEnv, Method.POST, resourcePath + "/echoformparams")
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            request.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+            request.addParameter("foo", new String[]{"bar", "baz"});
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("barbaz");
+         }
+
+      }.run();
+      
+      reset();
+
+      new ResourceRequest(requestEnv, Method.POST, resourcePath + "/echoformparams2")
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            request.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+            request.addParameter("foo", new String[]{"bar", "baz"});
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("barbaz");
+         }
+
+      }.run();
+      
+      reset();
+
+      new ResourceRequest(requestEnv, Method.POST, resourcePath + "/echoformparams3")
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            request.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+            request.addHeader("bar", "foo");
+            request.addParameter("foo", new String[]{"bar", "baz"});
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("foobarbaz");
+         }
+
+      }.run();
+      
+      reset();
+
+   }
+
+   @Test(dataProvider = "queryPaths")
+   public void testStringConverter(final String resourcePath) throws Exception
+   {
+      final String ISO_DATE = "2007-07-10T14:54:56-0500";
+      final String ISO_DATE_MILLIS = "1184097296000";
+
+      new ResourceRequest(requestEnv, Method.GET, resourcePath + "/convertDate/" + ISO_DATE)
+      {
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assertEquals(response.getContentAsString(), ISO_DATE_MILLIS);
+         }
+
+      }.run();
+
+   }
+
+   @Test(dataProvider = "queryPaths")
+   public void testProvider(final String resourcePath) throws Exception
+   {
+
+      new ResourceRequest(requestEnv, Method.GET, resourcePath + "/commaSeparated")
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            request.addHeader("Accept", "text/csv");
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("foo,bar\r\nasdf,123\r\n");
+         }
+
+      }.run();
+      
+      reset();
+
+      new ResourceRequest(requestEnv, Method.GET, resourcePath + "/commaSeparatedStrings")
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            request.addHeader("Accept", "text/plain");
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("abc,foo,bar,baz");
+         }
+
+      }.run();
+      
+      reset();
+
+      new ResourceRequest(requestEnv, Method.GET, resourcePath + "/commaSeparatedIntegers")
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            request.addHeader("Accept", "text/plain");
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            assert response.getContentAsString().equals("abc,1,2,3");
+         }
+      };
+      // }.run();
+      // TODO: Retracted support for Seam component providers, injection shouldn't happen, see https://jira.jboss.org/jira/browse/JBSEAM-4247
+
+   }
+   
+   @Test
+   // JBPAPP-3713
+   public void synchronizationsLookup() throws Exception
+   {
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/eventComponentTest/synchronizationsLookup")
+      {
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+         }
+         
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 200, "Unexpected response code.");
+            assert response.getContentAsString().equals("true");
+         }
+         
+      }.run();
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/CategoryServiceDBUnitTest.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/CategoryServiceDBUnitTest.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/CategoryServiceDBUnitTest.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,82 @@
+package org.jboss.seam.example.restbay.test;
+
+import org.dbunit.operation.DatabaseOperation;
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeClass;
+import org.jboss.seam.mock.DBUnitSeamTest;
+
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ *
+ */
+public class CategoryServiceDBUnitTest extends DBUnitSeamTest
+{
+
+   protected void prepareDBUnitOperations() {
+       beforeTestOperations.add(
+               new DataSetOperation("org/jboss/seam/example/restbay/test/dbunitdata.xml", DatabaseOperation.CLEAN_INSERT)
+       );
+   }
+
+   // Or, if you don't want shared headers between test methods, just use
+   // it directly in your test method:
+
+   // new ResourceRequest(new ResourceRequestTest(this), Method.GET, ...).run();
+
+   ResourceRequestEnvironment sharedEnvironment;
+   @BeforeClass
+   public void prepareSharedEnvironment() throws Exception
+   {
+      sharedEnvironment = new ResourceRequestEnvironment(this)
+      {
+         @Override
+         public Map<String, Object> getDefaultHeaders()
+         {
+            return new HashMap<String, Object>()
+            {{
+                  put("Accept", "text/plain");
+               }};
+         }
+      };
+   }
+
+   @Test
+   public void testCategories() throws Exception
+   {
+      // new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, "/restv1/category")
+      // or:
+      new ResourceRequest(sharedEnvironment, Method.GET, "/restv1/category")
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            // Or set it as default in environment
+            request.addHeader("Accept", "text/plain");
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assert response.getStatus() == 200;
+            String[] lines = response.getContentAsString().split("\n");
+            assert lines[0].equals("16,foo");
+            assert lines[1].equals("17,bar");
+            assert lines[2].equals("18,baz");
+         }
+
+      }.run();
+
+   }
+
+
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/ContextDataTest.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/ContextDataTest.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/ContextDataTest.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,50 @@
+package org.jboss.seam.example.restbay.test;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ *
+ * @author Jozef Hartinger
+ */
+public class ContextDataTest extends SeamTest
+{
+   @DataProvider(name = "contextDataTypes")
+   public Object[][] getContextDataTypePaths()
+   {
+      return new String[][]{ { "/providers" }, { "/registry" }, { "/dispatcher" } };
+   }
+   
+   @Test(dataProvider = "contextDataTypes")
+   public void testContextData(String pathSegment) throws Exception
+   {
+      final String path = "/restv1/contextData" + pathSegment;
+
+      new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, path)
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", "text/plain");
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 200, "Unexpected response code.");
+            assertEquals(response.getContentAsString(), "true", "Unexpected response.");
+         }
+
+      }.run();
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/ResourceHomeTest.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/ResourceHomeTest.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/ResourceHomeTest.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,170 @@
+package org.jboss.seam.example.restbay.test;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import static org.testng.Assert.assertEquals;
+
+/**
+ * 
+ * @author Jozef Hartinger
+ * 
+ */
+public class ResourceHomeTest extends SeamTest
+{
+
+   @DataProvider(name = "queryPaths")
+   public Object[][] getData()
+   {
+      return new String[][]{ { "/configuredCategory" }, { "/extendedCategory" } };
+   }
+
+   @Test(dataProvider = "queryPaths")
+   public void testResourceHomeRead(final String resourcePath) throws Exception
+   {
+      final String expectedResponse = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><category><categoryId>1</categoryId><name>Antiques</name></category>";
+      final String path = "/restv1" + resourcePath + "/1";
+
+      new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, path)
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", "application/xml");
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getContentAsString(), expectedResponse, "Unexpected response.");
+         }
+
+      }.run();
+   }
+
+   @Test(dataProvider = "queryPaths")
+   public void testResourceHomeCreate(final String resourcePath) throws Exception
+   {
+      final String name = "Airplanes";
+      final String body = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><category><name>" + name + "</name></category>";
+      final String mediaType = "application/xml";
+      final String path = "/restv1" + resourcePath;
+
+      new ResourceRequest(new ResourceRequestEnvironment(this), Method.POST, path)
+      {
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            // TODO for some reason content type must be set using both these
+            // methods
+            request.addHeader("Content-Type", mediaType);
+            request.setContentType(mediaType);
+            request.setContent(body.getBytes());
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 201, "Unexpected response code.");
+         }
+
+      }.run();
+   }
+
+   @Test(dataProvider = "queryPaths")
+   public void testResourceHomeUpdate(String resourcePath) throws Exception
+   {
+      final String body = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><category><categoryId>5</categoryId><name>" + resourcePath.hashCode() + "</name></category>";
+      final String mediaType = "application/xml";
+      final String path = "/restv1" + resourcePath + "/5";
+
+      new ResourceRequest(new ResourceRequestEnvironment(this), Method.PUT, path)
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.setContentType(mediaType);
+            request.addHeader("Content-Type", mediaType);
+            request.setContent(body.getBytes());
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 204, "Unexpected response code.");
+         }
+
+      }.run();
+      
+      reset();
+
+      new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, path)
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", mediaType);
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 200, "Unexpected response code.");
+            assertEquals(response.getContentAsString(), body, "Unexpected response.");
+         }
+
+      }.run();
+
+   }
+
+   @Test
+   public void testResourceHomeDelete() throws Exception
+   {
+
+      final String path = "/restv1/configuredCategory/15004";
+
+      new ResourceRequest(new ResourceRequestEnvironment(this), Method.DELETE, path)
+      {
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 204, "Unexpected response code.");
+         }
+
+      }.run();
+      
+      reset();
+      
+      new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, path)
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", "application/xml");
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 404, "Unexpected response code.");
+         }
+
+      }.run();
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/ResourceQueryTest.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/ResourceQueryTest.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/ResourceQueryTest.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,55 @@
+package org.jboss.seam.example.restbay.test;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ * 
+ * @author Jozef Hartinger
+ * 
+ */
+public class ResourceQueryTest extends SeamTest
+{
+
+   @DataProvider(name = "queryPaths")
+   public Object[][] getData()
+   {
+      String[][] data = new String[2][1];
+      data[0][0] = "/configuredCategory";
+      data[1][0] = "/extendedCategory";
+      return data;
+   }
+
+   @Test(dataProvider = "queryPaths")
+   public void testResourceQuery(String path) throws Exception
+   {
+      new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, "/restv1" + path)
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", "application/xml");
+            request.setQueryString("start=2&show=2");
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            String expectedResponse = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><collection><category><categoryId>3</categoryId><name>Books</name></category><category><categoryId>4</categoryId><name>Cameras and Photography</name></category></collection>";
+            assertEquals(response.getContentAsString(), expectedResponse, "Unexpected response.");
+         }
+
+      }.run();
+   }
+
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/SecurityTest.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/SecurityTest.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/SecurityTest.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,210 @@
+package org.jboss.seam.example.restbay.test;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeClass;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This class tests RESTEasy integration together with Seam Security.
+ *
+ * @author Jozef Hartinger
+ */
+public class SecurityTest extends SeamTest
+{
+
+   ResourceRequestEnvironment requestEnv;
+
+   @BeforeClass
+   public void prepareEnv() throws Exception
+   {
+      requestEnv = new ResourceRequestEnvironment(this)
+      {
+         @Override
+         public Map<String, Object> getDefaultHeaders()
+         {
+            return new HashMap<String, Object>()
+            {{
+                  put("Accept", "text/plain");
+               }};
+         }
+      };
+   }
+
+   @Test
+   public void basicAuthTest() throws Exception
+   {
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/secured/admin")
+      {
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", "text/plain");
+            request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 200, "Unexpected response code.");
+            assertEquals(response.getContentAsString(), "false", "Unexpected response.");
+         }
+
+      }.run();
+   }
+
+   @Test
+   public void invalidCredentialsBasicAuthTest() throws Exception
+   {
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/secured")
+      {
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", "text/plain");
+            request.addHeader("Authorization", "Basic ZGVtbzpvbWVk"); // demo:omed
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(
+                  response.getHeader("WWW-Authenticate"),
+                  "Basic realm=\"Seam RestBay Application\"",
+                  "Invalid authentication header value"
+            );
+            assertEquals(response.getStatus(), 401, "Unexpected response code.");
+         }
+
+      }.run();
+   }
+
+   @Test
+   public void adminRoleTest() throws Exception
+   {
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/secured/admin")
+      {
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", "text/plain");
+            request.addHeader("Authorization", "Basic YWRtaW46YWRtaW4="); // admin:admin
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 200, "Unexpected response code.");
+            assertEquals(response.getContentAsString(), "true");
+         }
+
+      }.run();
+   }
+
+   @Test
+   public void adminRoleTestWithRestriction() throws Exception
+   {
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/secured/restrictedAdmin")
+      {
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", "text/plain");
+            request.addHeader("Authorization", "Basic YWRtaW46YWRtaW4="); // admin:admin
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 200, "Unexpected response code.");
+            assertEquals(response.getContentAsString(), "true");
+         }
+
+      }.run();
+   }
+
+   @Test
+   public void invalidAdminAuthorization() throws Exception
+   {
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/secured/restrictedAdmin")
+      {
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", "text/plain");
+            request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            // See AuthorizationException mapping to 403 in pages.xml!
+            assertEquals(response.getStatus(), 403, "Unexpected response code.");
+            assert response.getStatusMessage().startsWith("Not authorized to access resource");
+         }
+
+      }.run();
+   }
+   
+   @Test
+   // JBPAPP-3713
+   public void ejbLookup() throws Exception
+   {
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/secured/ejbLookup")
+      {
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", "text/plain");
+            request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+         }
+         
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 200, "Unexpected response code.");
+            assert response.getContentAsString().equals("true");
+         }
+         
+      }.run();
+   }
+   
+    @Test
+   // JBPAPP-3713
+   public void synchronizationsLookup() throws Exception
+   {
+      new ResourceRequest(requestEnv, Method.GET, "/restv1/secured/synchronizationsLookup")
+      {
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", "text/plain");
+            request.addHeader("Authorization", "Basic ZGVtbzpkZW1v"); // demo:demo
+         }
+         
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 200, "Unexpected response code.");
+            assert response.getContentAsString().equals("true");
+         }
+         
+      }.run();
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/SubresourceTest.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/SubresourceTest.java	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/java/org/jboss/seam/example/restbay/test/SubresourceTest.java	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,39 @@
+package org.jboss.seam.example.restbay.test;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.testng.annotations.Test;
+
+public class SubresourceTest extends SeamTest
+{
+   @Test
+   public void testSubresourceGET() throws Exception
+   {
+      final String path = "/restv1/garage/1";
+
+      new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, path)
+      {
+
+         @Override
+         protected void prepareRequest(EnhancedMockHttpServletRequest request)
+         {
+            super.prepareRequest(request);
+            request.addHeader("Accept", "text/plain");
+         }
+
+         @Override
+         protected void onResponse(EnhancedMockHttpServletResponse response)
+         {
+            assertEquals(response.getStatus(), 200, "Unexpected response code.");
+            assertEquals(response.getContentAsString(), "Honda", "Unexpected response.");
+         }
+
+      }.run();
+   }
+}

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/WEB-INF/components.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/WEB-INF/components.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/WEB-INF/components.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<components xmlns="http://jboss.com/products/seam/components"
+            xmlns:core="http://jboss.com/products/seam/core"
+            xmlns:persistence="http://jboss.com/products/seam/persistence"
+            xmlns:security="http://jboss.com/products/seam/security"
+            xmlns:drools="http://jboss.com/products/seam/drools"
+            xmlns:async="http://jboss.com/products/seam/async"
+            xmlns:web="http://jboss.com/products/seam/web"
+            xmlns:resteasy="http://jboss.com/products/seam/resteasy"
+            xmlns:framework="http://jboss.com/products/seam/framework"
+            xmlns:transaction="http://jboss.com/products/seam/transaction"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation=
+                "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.3.xsd
+                 http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.3.xsd 
+                 http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.3.xsd
+                 http://jboss.com/products/seam/async http://jboss.com/products/seam/async-2.3.xsd
+                 http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.3.xsd
+                 http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.3.xsd
+                 http://jboss.com/products/seam/resteasy http://jboss.com/products/seam/resteasy-2.3.xsd
+                 http://jboss.com/products/seam/framework http://jboss.com/products/seam/framework-2.3.xsd
+                 http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.3.xsd
+                 http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.3.xsd">
+
+    <core:init jndi-pattern="#{ejbName}/local" debug="true"/>
+
+    <core:manager conversation-timeout="120000"
+                  concurrent-request-timeout="500"
+                  conversation-id-parameter="cid"/>
+                  
+    <transaction:ejb-transaction />
+
+    <persistence:managed-persistence-context name="entityManager" auto-create="true"
+                                             persistence-unit-jndi-name="java:/restbayEntityManagerFactory"/>
+
+    <async:quartz-dispatcher/>
+
+    <framework:entity-home name="categoryHome"
+                           entity-class="org.jboss.seam.example.restbay.Category"
+                           auto-create="true"/>
+
+    <resteasy:application resource-path-prefix="/restv1">
+        <resteasy:resource-class-names>
+            <value>org.jboss.seam.example.restbay.resteasy.statelessejb.StatelessEjbTestResourceBean</value>
+        </resteasy:resource-class-names>
+    </resteasy:application>
+
+    <resteasy:resource-home path="/configuredCategory" name="configuredCategoryResourceHome"
+                            entity-home="#{categoryHome}" entity-id-class="java.lang.Integer"
+                            media-types="application/xml application/json"/>
+
+    <resteasy:resource-query path="/configuredCategory" name="configuredCategoryResourceQuery"
+                             entity-class="org.jboss.seam.example.restbay.Category"
+                             media-types="application/xml application/json"/>
+                             
+    <web:authentication-filter
+            url-pattern="/seam/resource/restv1/secured/*"
+            auth-type="basic"
+            realm="Seam RestBay Application"/>
+
+    <security:identity authenticate-method="#{testAuthenticator.authenticate}" />
+
+</components>
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/org/jboss/seam/example/restbay/test/dbunitdata.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/org/jboss/seam/example/restbay/test/dbunitdata.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/org/jboss/seam/example/restbay/test/dbunitdata.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<dataset>
+
+    <category categoryId="16" name="foo"/>
+    <category categoryId="17" name="bar"/>
+    <category categoryId="18" name="baz"/>
+
+</dataset>
\ No newline at end of file

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources/seam.properties
===================================================================
Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources-integration/testng.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources-integration/testng.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-tests/src/test/resources-integration/testng.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,57 @@
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
+
+<suite name="RestBay" verbose="2" parallel="false">
+
+    <test name="RestBay Basic Services">
+        <classes>
+            <class name="org.jboss.seam.example.restbay.test.BasicServiceTest"/>
+        </classes>
+    </test>
+
+    <test name="RestBay Auction Services">
+      <classes>
+        <class name="org.jboss.seam.example.restbay.test.AuctionServiceTest"/>
+      </classes>
+    </test>
+
+    <test name="RestBay ResourceHome">
+      <classes>
+        <class name="org.jboss.seam.example.restbay.test.ResourceHomeTest"/>
+      </classes>
+    </test>
+
+    <test name="RestBay ResourceQuery">
+      <classes>
+        <class name="org.jboss.seam.example.restbay.test.ResourceQueryTest"/>
+      </classes>
+    </test>
+
+    <test name="RestBay Security">
+      <classes>
+        <class name="org.jboss.seam.example.restbay.test.SecurityTest"/>
+      </classes>
+    </test>
+    
+    <test name="RestBay Subresources">
+      <classes>
+        <class name="org.jboss.seam.example.restbay.test.SubresourceTest"/>
+      </classes>
+    </test>
+    
+    <test name="RestBay Context Data">
+      <classes>
+        <class name="org.jboss.seam.example.restbay.test.ContextDataTest"/>
+      </classes>
+    </test>
+
+    <test name="RestBay DBUnit Integration">
+
+        <parameter name="database" value="hsql"/>
+        <parameter name="datasourceJndiName" value="java:/restbayDatasource"/>
+
+        <classes>
+            <class name="org.jboss.seam.example.restbay.test.CategoryServiceDBUnitTest"/>
+        </classes>
+    </test>
+
+</suite>

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/pom.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/pom.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>restbay</artifactId>
+        <groupId>org.jboss.seam.examples-ee6</groupId>
+        <version>2.3.0.Beta2-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+    <artifactId>restbay-web</artifactId>
+    <packaging>war</packaging>
+    <name>Restbay Web Module (EE6)</name>
+    
+    <properties>
+        <!-- filtering property for components.xml -->
+        <jndiPattern>java:app/restbay-ejb/#{ejbName}</jndiPattern>
+    </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.seam.examples-ee6.restbay</groupId>
+            <artifactId>restbay-ejb</artifactId>
+            <type>ejb</type>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam</artifactId>
+            <type>ejb</type>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.seam</groupId>
+            <artifactId>jboss-seam-ui</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.jboss.seam</groupId>
+                    <artifactId>jboss-seam-jul</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>commons-beanutils</groupId>
+                    <artifactId>commons-beanutils</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>commons-beanutils</groupId>
+            <artifactId>commons-beanutils</artifactId>
+        </dependency>
+    </dependencies>
+  
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <configuration>
+                    <webResources>
+                        <resource>
+                            <directory>src/main/webapp</directory>
+                            <filtering>true</filtering>
+                        </resource>
+                    </webResources>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    
+</project>

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/components.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/components.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/components.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<components xmlns="http://jboss.com/products/seam/components"
+            xmlns:core="http://jboss.com/products/seam/core"
+            xmlns:persistence="http://jboss.com/products/seam/persistence"
+            xmlns:security="http://jboss.com/products/seam/security"
+            xmlns:drools="http://jboss.com/products/seam/drools"
+            xmlns:async="http://jboss.com/products/seam/async"
+            xmlns:web="http://jboss.com/products/seam/web"
+            xmlns:resteasy="http://jboss.com/products/seam/resteasy"
+            xmlns:framework="http://jboss.com/products/seam/framework"
+            xmlns:transaction="http://jboss.com/products/seam/transaction"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation=
+                "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.3.xsd
+                 http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.3.xsd 
+                 http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.3.xsd
+                 http://jboss.com/products/seam/async http://jboss.com/products/seam/async-2.3.xsd
+                 http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.3.xsd
+                 http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.3.xsd
+                 http://jboss.com/products/seam/resteasy http://jboss.com/products/seam/resteasy-2.3.xsd
+                 http://jboss.com/products/seam/framework http://jboss.com/products/seam/framework-2.3.xsd
+                 http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.3.xsd
+                 http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.3.xsd">
+
+    <core:init jndi-pattern="@jndiPattern@" debug="true"/>
+
+    <core:manager conversation-timeout="120000"
+                  concurrent-request-timeout="500"
+                  conversation-id-parameter="cid"/>
+                  
+    <transaction:ejb-transaction />
+
+    <persistence:managed-persistence-context name="entityManager" auto-create="true"
+                                             persistence-unit-jndi-name="java:/restbayEntityManagerFactory"/>
+
+    <async:quartz-dispatcher/>
+
+    <framework:entity-home name="categoryHome"
+                           entity-class="org.jboss.seam.example.restbay.Category"
+                           auto-create="true"/>
+
+    <resteasy:application resource-path-prefix="/restv1">
+        <resteasy:resource-class-names>
+            <value>org.jboss.seam.example.restbay.resteasy.statelessejb.StatelessEjbTestResourceBean</value>
+        </resteasy:resource-class-names>
+    </resteasy:application>
+
+    <resteasy:resource-home path="/configuredCategory" name="configuredCategoryResourceHome"
+                            entity-home="#{categoryHome}" entity-id-class="java.lang.Integer"
+                            media-types="application/xml application/json"/>
+
+    <resteasy:resource-query path="/configuredCategory" name="configuredCategoryResourceQuery"
+                             entity-class="org.jboss.seam.example.restbay.Category"
+                             media-types="application/xml application/json"/>
+                             
+	<web:authentication-filter
+            url-pattern="/seam/resource/restv1/secured/*"
+	        auth-type="basic"
+            realm="Seam RestBay Application"/>
+	
+	<security:identity authenticate-method="#{testAuthenticator.authenticate}" />
+
+    <component class="org.jboss.seam.transaction.EjbSynchronizations" jndi-name="java:app/jboss-seam/EjbSynchronizations"/>
+
+</components>

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/faces-config.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/faces-config.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faces-config version="2.1"
+              xmlns="http://java.sun.com/xml/ns/javaee"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd">
+
+</faces-config>

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/pages.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/pages.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/pages.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pages xmlns="http://jboss.com/products/seam/pages"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.3.xsd">
+
+    <exception class="java.lang.UnsupportedOperationException" log="false">
+        <http-error error-code="501">
+            <message>The request operation is not supported: #{org.jboss.seam.handledException.message}</message>
+        </http-error>
+    </exception>
+       
+    <exception class="org.jboss.seam.security.AuthorizationException" log="false">
+        <http-error error-code="403">
+            <message>Not authorized to access resource: #{org.jboss.seam.handledException.message}</message>
+        </http-error>
+    </exception>
+
+</pages>

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/web.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/web.xml	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/WEB-INF/web.xml	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,93 @@
+<?xml version="1.0" ?>
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+         version="3.0">
+
+    <!-- Seam -->
+
+    <listener>
+       <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
+    </listener>
+
+     <filter>
+         <filter-name>Seam Filter</filter-name>
+         <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
+     </filter>
+
+     <filter-mapping>
+         <filter-name>Seam Filter</filter-name>
+         <url-pattern>/*</url-pattern>
+     </filter-mapping>
+
+    <servlet>
+       <servlet-name>Seam Resource Servlet</servlet-name>
+       <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
+    </servlet>
+
+    <servlet-mapping>
+       <servlet-name>Seam Resource Servlet</servlet-name>
+       <url-pattern>/seam/resource/*</url-pattern>
+    </servlet-mapping>
+
+   <!-- Facelets development mode (disable in production) -->
+
+   <context-param>
+       <param-name>facelets.DEVELOPMENT</param-name>
+       <param-value>false</param-value>
+   </context-param>
+
+    <context-param>
+        <param-name>facelets.SKIP_COMMENTS</param-name>
+        <param-value>true</param-value>
+    </context-param>
+
+    <!-- JSF -->
+
+    <context-param>
+       <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+       <param-value>.xhtml</param-value>
+    </context-param>
+
+    <context-param>
+        <param-name>com.sun.faces.numberOfViewsInSession</param-name>
+        <param-value>15</param-value>
+    </context-param>
+
+    <context-param>
+        <param-name>com.sun.faces.numberOfLogicalViews</param-name>
+        <param-value>15</param-value>
+    </context-param>
+
+    <context-param>
+        <param-name>com.sun.faces.responseBufferSize</param-name>
+        <param-value>32768</param-value>
+    </context-param>
+
+    <servlet>
+       <servlet-name>Faces Servlet</servlet-name>
+       <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+       <load-on-startup>1</load-on-startup>
+    </servlet>
+
+    <servlet-mapping>
+       <servlet-name>Faces Servlet</servlet-name>
+       <url-pattern>*.seam</url-pattern>
+    </servlet-mapping>
+
+    <security-constraint>
+        <display-name>Restrict raw XHTML Documents</display-name>
+        <web-resource-collection>
+            <web-resource-name>XHTML</web-resource-name>
+            <url-pattern>*.xhtml</url-pattern>
+        </web-resource-collection>
+        <auth-constraint>
+            <role-name>NONE</role-name>
+        </auth-constraint>
+    </security-constraint>
+
+    <session-config>
+        <session-timeout>10</session-timeout>
+    </session-config>
+
+</web-app>

Added: branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/index.html
===================================================================
--- branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/index.html	                        (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/restbay/restbay-web/src/main/webapp/index.html	2012-04-02 11:16:37 UTC (rev 14464)
@@ -0,0 +1,31 @@
+<html>
+<head>
+    <title>restBay Seam example</title>
+</head>
+
+<body>
+
+<p>This application does not have a human-user interface. Execute 'ant test' to run the unit tests
+and explore the source code.</p>
+
+<p>
+You can invoke some of the RESTful webservices directly in your browser though:
+</p>
+
+<ul>
+    <li>
+        <a href="http://localhost:8080/seam-restbay/seam/resource/restv1/auction">GET /auction</a>
+    </li>
+    <li>
+        <a href="http://localhost:8080/seam-restbay/seam/resource/restv1/auction/19264723">GET /auction/{auctionId}</a>
+    </li>
+    <li>
+        <a href="http://localhost:8080/seam-restbay/seam/resource/restv1/category">GET /category/</a>
+    </li>
+    <li>
+        <a href="http://localhost:8080/seam-restbay/seam/resource/restv1/category/4">GET /category/{categoryId}</a>
+    </li>
+</ul>
+
+</body>
+</html>



More information about the seam-commits mailing list