This is an automated email from the ASF dual-hosted git repository.
absurdfarce pushed a commit to branch 4.x
in repository https://gitbox.apache.org/repos/asf/cassandra-java-driver.git
The following commit(s) were added to refs/heads/4.x by this push:
new 7bc085bdf Move DataStax shaded Guava module into Java driver
7bc085bdf is described below
commit 7bc085bdfb337b91255573bc3e130815e280954a
Author: Lukasz Antoniak <[email protected]>
AuthorDate: Wed Nov 6 08:31:36 2024 +0100
Move DataStax shaded Guava module into Java driver
patch by Lukasz Antoniak; reviewed by Alexandre Dutra and Bret McGuire for
CASSJAVA-52
---
bom/pom.xml | 10 +-
core-shaded/pom.xml | 4 +-
core/pom.xml | 4 +-
distribution/src/assembly/binary-tarball.xml | 6 +-
guava-shaded/pom.xml | 215 +++++++++++++++++++++
guava-shaded/src/assembly/shaded-jar.xml | 48 +++++
...exicographicalComparatorHolderSubstitution.java | 39 ++++
.../primitives/UnsafeComparatorSubstitution.java | 25 +++
guava-shaded/src/main/javadoc/README.txt | 2 +
manual/core/integration/README.md | 2 +-
mapper-processor/pom.xml | 4 +-
osgi-tests/pom.xml | 4 +-
.../internal/osgi/support/BundleOptions.java | 2 +-
pom.xml | 3 +-
query-builder/pom.xml | 4 +-
15 files changed, 351 insertions(+), 21 deletions(-)
diff --git a/bom/pom.xml b/bom/pom.xml
index 96b7a6ceb..08f212f61 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -55,6 +55,11 @@
<artifactId>java-driver-query-builder</artifactId>
<version>4.18.2-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.cassandra</groupId>
+ <artifactId>java-driver-guava-shaded</artifactId>
+ <version>4.18.2-SNAPSHOT</version>
+ </dependency>
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>java-driver-test-infra</artifactId>
@@ -75,11 +80,6 @@
<artifactId>native-protocol</artifactId>
<version>1.5.1</version>
</dependency>
- <dependency>
- <groupId>com.datastax.oss</groupId>
- <artifactId>java-driver-shaded-guava</artifactId>
- <version>25.1-jre-graal-sub-1</version>
- </dependency>
</dependencies>
</dependencyManagement>
<build>
diff --git a/core-shaded/pom.xml b/core-shaded/pom.xml
index 6c139aab1..9a708beb2 100644
--- a/core-shaded/pom.xml
+++ b/core-shaded/pom.xml
@@ -57,8 +57,8 @@
<artifactId>native-protocol</artifactId>
</dependency>
<dependency>
- <groupId>com.datastax.oss</groupId>
- <artifactId>java-driver-shaded-guava</artifactId>
+ <groupId>org.apache.cassandra</groupId>
+ <artifactId>java-driver-guava-shaded</artifactId>
</dependency>
<dependency>
<groupId>com.typesafe</groupId>
diff --git a/core/pom.xml b/core/pom.xml
index 33688754f..2a48e8bf9 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -49,8 +49,8 @@
<artifactId>netty-handler</artifactId>
</dependency>
<dependency>
- <groupId>com.datastax.oss</groupId>
- <artifactId>java-driver-shaded-guava</artifactId>
+ <groupId>org.apache.cassandra</groupId>
+ <artifactId>java-driver-guava-shaded</artifactId>
</dependency>
<dependency>
<groupId>com.typesafe</groupId>
diff --git a/distribution/src/assembly/binary-tarball.xml
b/distribution/src/assembly/binary-tarball.xml
index 0d025fafb..b6294a253 100644
--- a/distribution/src/assembly/binary-tarball.xml
+++ b/distribution/src/assembly/binary-tarball.xml
@@ -66,8 +66,8 @@
<exclude>org.apache.cassandra:java-driver-core</exclude>
<exclude>org.apache.cassandra:java-driver-mapper-runtime</exclude>
<exclude>org.apache.cassandra:java-driver-mapper-processor</exclude>
+ <exclude>org.apache.cassandra:java-driver-guava-shaded</exclude>
<!-- Don't reinclude dependencies that core also has -->
- <exclude>com.datastax.oss:java-driver-shaded-guava</exclude>
<exclude>com.github.stephenc.jcip:jcip-annotations</exclude>
<exclude>com.github.spotbugs:spotbugs-annotations</exclude>
</excludes>
@@ -91,8 +91,8 @@
<exclude>org.apache.cassandra:java-driver-core</exclude>
<exclude>org.apache.cassandra:java-driver-query-builder</exclude>
<exclude>org.apache.cassandra:java-driver-mapper-processor</exclude>
+ <exclude>org.apache.cassandra:java-driver-guava-shaded</exclude>
<!-- Don't reinclude dependencies that core also has -->
- <exclude>com.datastax.oss:java-driver-shaded-guava</exclude>
<exclude>com.github.stephenc.jcip:jcip-annotations</exclude>
<exclude>com.github.spotbugs:spotbugs-annotations</exclude>
</excludes>
@@ -116,8 +116,8 @@
<exclude>org.apache.cassandra:java-driver-core</exclude>
<exclude>org.apache.cassandra:java-driver-query-builder</exclude>
<exclude>org.apache.cassandra:java-driver-mapper-runtime</exclude>
+ <exclude>org.apache.cassandra:java-driver-guava-shaded</exclude>
<!-- Don't reinclude dependencies that core also has -->
- <exclude>com.datastax.oss:java-driver-shaded-guava</exclude>
<exclude>com.github.stephenc.jcip:jcip-annotations</exclude>
<exclude>com.github.spotbugs:spotbugs-annotations</exclude>
</excludes>
diff --git a/guava-shaded/pom.xml b/guava-shaded/pom.xml
new file mode 100644
index 000000000..9854fcc48
--- /dev/null
+++ b/guava-shaded/pom.xml
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<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/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.cassandra</groupId>
+ <artifactId>java-driver-parent</artifactId>
+ <version>4.18.2-SNAPSHOT</version>
+ </parent>
+ <artifactId>java-driver-guava-shaded</artifactId>
+ <name>Apache Cassandra Java Driver - guava shaded dep</name>
+ <description>Shaded Guava artifact for use in the Java driver for Apache
Cassandra®</description>
+ <dependencies>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>com.google.code.findbugs</groupId>
+ <artifactId>jsr305</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.checkerframework</groupId>
+ <artifactId>checker-qual</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.google.errorprone</groupId>
+ <artifactId>error_prone_annotations</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.google.j2objc</groupId>
+ <artifactId>j2objc-annotations</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>animal-sniffer-annotations</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.graalvm.nativeimage</groupId>
+ <artifactId>svm</artifactId>
+ <version>20.0.0</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-shade-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>shade-guava-dependency</id>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <artifactSet>
+ <includes>
+
<include>org.apache.cassandra:java-driver-guava-shaded</include>
+ <include>com.google.guava:guava</include>
+ </includes>
+ </artifactSet>
+ <relocations>
+ <relocation>
+ <pattern>com.google</pattern>
+
<shadedPattern>com.datastax.oss.driver.shaded.guava</shadedPattern>
+ </relocation>
+ </relocations>
+ <filters>
+ <filter>
+ <artifact>com.google.guava:*</artifact>
+ <excludes>
+ <exclude>META-INF/**</exclude>
+ </excludes>
+ </filter>
+ </filters>
+ <createSourcesJar>true</createSourcesJar>
+ <shadeSourcesContent>true</shadeSourcesContent>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>clean-classes</id>
+ <phase>package</phase>
+ <goals>
+ <goal>clean</goal>
+ </goals>
+ <configuration>
+ <directory>${project.build.outputDirectory}</directory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>unpack-shaded-classes</id>
+ <phase>package</phase>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ <configuration>
+
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.apache.cassandra</groupId>
+ <artifactId>java-driver-guava-shaded</artifactId>
+ <version>${project.version}</version>
+ <type>jar</type>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <!--
+ Using later version of the plugin will scan all dynamically loaded
classes
+ with Class.forName(). In the end, more packages will be imported in
MANIFEST.MF
+ and OSGi integration tests will break.
+ -->
+ <version>3.5.0</version>
+ <extensions>true</extensions>
+ <executions>
+ <execution>
+ <id>generate-shaded-manifest</id>
+ <phase>package</phase>
+ <goals>
+ <goal>manifest</goal>
+ </goals>
+ <configuration>
+ <instructions>
+
<Bundle-SymbolicName>com.datastax.oss.driver.shaded.guava</Bundle-SymbolicName>
+
<Export-Package>!com.datastax.oss.driver.shaded.guava.errorprone.*,
!org.checkerframework.*, *</Export-Package>
+
<Import-Package>javax.annotation.*;resolution:=optional;version="[3.0,4)",
javax.crypto.*;resolution:=optional, sun.misc.*;resolution:=optional,
!com.oracle.svm.*, !com.datastax.oss.driver.shaded.guava.errorprone.*,
!org.checkerframework.*, *</Import-Package>
+ </instructions>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>generate-final-shaded-jar</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <archive>
+ <!-- this is the manifest generated by the bundle plugin -->
+
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+ </archive>
+ <descriptors>
+ <descriptor>src/assembly/shaded-jar.xml</descriptor>
+ </descriptors>
+ <!-- Replace the original artifact -->
+ <appendAssemblyId>false</appendAssemblyId>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>empty-javadoc-jar</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ <configuration>
+ <classifier>javadoc</classifier>
+ <classesDirectory>${basedir}/src/main/javadoc</classesDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.revapi</groupId>
+ <artifactId>revapi-maven-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/guava-shaded/src/assembly/shaded-jar.xml
b/guava-shaded/src/assembly/shaded-jar.xml
new file mode 100644
index 000000000..d762a27b2
--- /dev/null
+++ b/guava-shaded/src/assembly/shaded-jar.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0
http://maven.apache.org/xsd/assembly-2.0.0.xsd">
+ <id>shaded-jar</id>
+ <formats>
+ <format>jar</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <fileSets>
+ <!--
+ Include everything from the shaded jar created with the shade plugin and
+ unpacked by the dependency plugin
+ -->
+ <fileSet>
+ <directory>${project.build.outputDirectory}</directory>
+ <excludes>
+
<exclude>META-INF/maven/org.apache.cassandra/java-driver-guava-shaded/pom.xml</exclude>
+ </excludes>
+ <outputDirectory/>
+ </fileSet>
+ </fileSets>
+ <!-- Include the transformed pom with shaded deps created by the shade
plugin -->
+ <files>
+ <file>
+ <source>${project.basedir}/dependency-reduced-pom.xml</source>
+
<outputDirectory>META-INF/maven/org.apache.cassandra/java-driver-guava-shaded</outputDirectory>
+ <destName>pom.xml</destName>
+ </file>
+ </files>
+</assembly>
diff --git
a/guava-shaded/src/main/java/com/google/common/primitives/LexicographicalComparatorHolderSubstitution.java
b/guava-shaded/src/main/java/com/google/common/primitives/LexicographicalComparatorHolderSubstitution.java
new file mode 100644
index 000000000..95e9c70cd
--- /dev/null
+++
b/guava-shaded/src/main/java/com/google/common/primitives/LexicographicalComparatorHolderSubstitution.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.common.primitives;
+
+import com.oracle.svm.core.annotate.Alias;
+import com.oracle.svm.core.annotate.RecomputeFieldValue;
+import com.oracle.svm.core.annotate.Substitute;
+import com.oracle.svm.core.annotate.TargetClass;
+import java.util.Comparator;
+
+@TargetClass(UnsignedBytes.LexicographicalComparatorHolder.class)
+final class LexicographicalComparatorHolderSubstitution {
+
+ @Alias
+ @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.FromAlias)
+ static Comparator<byte[]> BEST_COMPARATOR =
UnsignedBytes.lexicographicalComparatorJavaImpl();
+
+ /* All known cases should be covered by the field substitution above...
keeping this only
+ * for sake of completeness */
+ @Substitute
+ static Comparator<byte[]> getBestComparator() {
+ return UnsignedBytes.lexicographicalComparatorJavaImpl();
+ }
+}
diff --git
a/guava-shaded/src/main/java/com/google/common/primitives/UnsafeComparatorSubstitution.java
b/guava-shaded/src/main/java/com/google/common/primitives/UnsafeComparatorSubstitution.java
new file mode 100644
index 000000000..549de0b5c
--- /dev/null
+++
b/guava-shaded/src/main/java/com/google/common/primitives/UnsafeComparatorSubstitution.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.common.primitives;
+
+import com.oracle.svm.core.annotate.Delete;
+import com.oracle.svm.core.annotate.TargetClass;
+
+@TargetClass(UnsignedBytes.LexicographicalComparatorHolder.UnsafeComparator.class)
+@Delete
+final class UnsafeComparatorSubstitution {}
diff --git a/guava-shaded/src/main/javadoc/README.txt
b/guava-shaded/src/main/javadoc/README.txt
new file mode 100644
index 000000000..57f82b2a2
--- /dev/null
+++ b/guava-shaded/src/main/javadoc/README.txt
@@ -0,0 +1,2 @@
+This empty JAR is generated for compliance with Maven Central rules. Please
refer to the original
+Guava API docs.
\ No newline at end of file
diff --git a/manual/core/integration/README.md
b/manual/core/integration/README.md
index 2dfc0155c..f2a96160b 100644
--- a/manual/core/integration/README.md
+++ b/manual/core/integration/README.md
@@ -671,7 +671,7 @@ The remaining core driver dependencies are the only ones
that are truly mandator
* the [native protocol](https://github.com/datastax/native-protocol) layer.
This is essentially part
of the driver code, but was externalized for reuse in other projects;
-* `java-driver-shaded-guava`, a shaded version of
[Guava](https://github.com/google/guava). It is
+* `java-driver-guava-shaded`, a shaded version of
[Guava](https://github.com/google/guava). It is
relocated to a different package, and only used by internal driver code, so
it should be
completely transparent to third-party code;
* the [SLF4J](https://www.slf4j.org/) API for [logging](../logging/).
diff --git a/mapper-processor/pom.xml b/mapper-processor/pom.xml
index 61906f419..6588f17d5 100644
--- a/mapper-processor/pom.xml
+++ b/mapper-processor/pom.xml
@@ -44,8 +44,8 @@
<artifactId>java-driver-mapper-runtime</artifactId>
</dependency>
<dependency>
- <groupId>com.datastax.oss</groupId>
- <artifactId>java-driver-shaded-guava</artifactId>
+ <groupId>org.apache.cassandra</groupId>
+ <artifactId>java-driver-guava-shaded</artifactId>
</dependency>
<dependency>
<groupId>com.squareup</groupId>
diff --git a/osgi-tests/pom.xml b/osgi-tests/pom.xml
index 5947aff1b..f0e66b656 100644
--- a/osgi-tests/pom.xml
+++ b/osgi-tests/pom.xml
@@ -71,8 +71,8 @@
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
- <groupId>com.datastax.oss</groupId>
- <artifactId>java-driver-shaded-guava</artifactId>
+ <groupId>org.apache.cassandra</groupId>
+ <artifactId>java-driver-guava-shaded</artifactId>
</dependency>
<dependency>
<groupId>org.xerial.snappy</groupId>
diff --git
a/osgi-tests/src/test/java/com/datastax/oss/driver/internal/osgi/support/BundleOptions.java
b/osgi-tests/src/test/java/com/datastax/oss/driver/internal/osgi/support/BundleOptions.java
index 536a6d96c..3e6171ca5 100644
---
a/osgi-tests/src/test/java/com/datastax/oss/driver/internal/osgi/support/BundleOptions.java
+++
b/osgi-tests/src/test/java/com/datastax/oss/driver/internal/osgi/support/BundleOptions.java
@@ -35,7 +35,7 @@ public class BundleOptions {
public static CompositeOption commonBundles() {
return () ->
options(
- mavenBundle("com.datastax.oss",
"java-driver-shaded-guava").versionAsInProject(),
+ mavenBundle("org.apache.cassandra",
"java-driver-guava-shaded").versionAsInProject(),
mavenBundle("io.dropwizard.metrics",
"metrics-core").versionAsInProject(),
mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(),
mavenBundle("org.hdrhistogram",
"HdrHistogram").versionAsInProject(),
diff --git a/pom.xml b/pom.xml
index 94311719e..620cf1db4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,7 @@
<module>mapper-processor</module>
<module>metrics/micrometer</module>
<module>metrics/microprofile</module>
+ <module>guava-shaded</module>
<module>test-infra</module>
<module>integration-tests</module>
<module>osgi-tests</module>
@@ -110,7 +111,7 @@
<version>${netty.version}</version>
</dependency>
<dependency>
- <!-- Only for integration tests, use the shaded JAR for production
code -->
+ <!-- Version of Guava used in shaded module and for integration tests.
-->
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>25.1-jre</version>
diff --git a/query-builder/pom.xml b/query-builder/pom.xml
index bae0e0c6c..4e09a10e5 100644
--- a/query-builder/pom.xml
+++ b/query-builder/pom.xml
@@ -45,8 +45,8 @@
<artifactId>java-driver-core</artifactId>
</dependency>
<dependency>
- <groupId>com.datastax.oss</groupId>
- <artifactId>java-driver-shaded-guava</artifactId>
+ <groupId>org.apache.cassandra</groupId>
+ <artifactId>java-driver-guava-shaded</artifactId>
</dependency>
<dependency>
<groupId>com.github.stephenc.jcip</groupId>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]