Orbit Commons Collections per https://dev.eclipse.org/ipzilla/show_bug.cgi?id=3305.
diff --git a/dependencies/plugins/org.apache.commons.collections/.classpath b/dependencies/plugins/org.apache.commons.collections/.classpath
new file mode 100755
index 0000000..3216c85
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry exported="true" kind="lib" path="" sourcepath="source-bundle"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.3"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="javaBin"/>
+</classpath>
diff --git a/dependencies/plugins/org.apache.commons.collections/.cvsignore b/dependencies/plugins/org.apache.commons.collections/.cvsignore
new file mode 100755
index 0000000..43568b0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/.cvsignore
@@ -0,0 +1,3 @@
+bin
+javaBin
+build.xml
diff --git a/dependencies/plugins/org.apache.commons.collections/.project b/dependencies/plugins/org.apache.commons.collections/.project
new file mode 100755
index 0000000..6e82942
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.apache.commons.collections</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/dependencies/plugins/org.apache.commons.collections/META-INF/MANIFEST.MF b/dependencies/plugins/org.apache.commons.collections/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..71558cc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.apache.commons.collections
+Bundle-Version: 3.2.0.qualifier
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.3
+Export-Package: org.apache.commons.collections;version="3.2.0",
+ org.apache.commons.collections.bag;version="3.2.0",
+ org.apache.commons.collections.bidimap;version="3.2.0",
+ org.apache.commons.collections.buffer;version="3.2.0",
+ org.apache.commons.collections.collection;version="3.2.0",
+ org.apache.commons.collections.comparators;version="3.2.0",
+ org.apache.commons.collections.functors;version="3.2.0",
+ org.apache.commons.collections.iterators;version="3.2.0",
+ org.apache.commons.collections.keyvalue;version="3.2.0",
+ org.apache.commons.collections.list;version="3.2.0",
+ org.apache.commons.collections.map;version="3.2.0",
+ org.apache.commons.collections.set;version="3.2.0"
diff --git a/dependencies/plugins/org.apache.commons.collections/about.html b/dependencies/plugins/org.apache.commons.collections/about.html
new file mode 100755
index 0000000..be61750
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/about.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 8, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+		
+<h3>Third Party Content</h3>
+<p>The Content includes items that have been sourced from third parties as set out below. If you 
+did not receive this Content directly from the Eclipse Foundation, the following is provided 
+for informational purposes only, and you should look to the Redistributor&rsquo;s license for 
+terms and conditions of use.</p>
+
+<h4>Commons Collections 3.2</h4>
+<p>The plug-in includes Commons Collections 3.2 (&quot;Commons Collections&quot;) developed by the Apache Software Foundation as part of the Apache Commons project.  Therefore:</p>
+
+<blockquote>
+This product includes software developed by the Apache Software Foundation (<a href="http://www.apache.org/">http://www.apache.org/</a>).
+</blockquote>
+
+<p>The Commons Collections binary code is included with no modifications except postprocessing
+(pack200 conditioning and signing). The corresponding Commons Collections source code is located in src.zip.</p>
+
+<p>Commons Net is:</p>
+
+<blockquote>Copyright (c) 1997-2005 The Apache Software Foundation. All rights reserved.</blockquote>
+
+<p>Your use of the Commons Collections code is subject to the terms and conditions of the Apache Software License 2.0.  A copy of the license is contained
+in the file <a href="about_files/LICENSE.txt">LICENSE.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
+
+<p>The Apache attribution <a href="about_files/NOTICE.txt">NOTICE.txt</a> file is included with the Content in accordance with 4d of the Apache License, Version 2.0.</p>
+
+<p>Examples and documentation as well as updated source code for Commons Collections is available at <a href="http://commons.apache.org/collections/">http://commons.apache.org/collections/</a>.</p>
+
+</body>
+</html>
diff --git a/dependencies/plugins/org.apache.commons.collections/about_files/LICENSE.txt b/dependencies/plugins/org.apache.commons.collections/about_files/LICENSE.txt
new file mode 100755
index 0000000..d645695
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/about_files/LICENSE.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/dependencies/plugins/org.apache.commons.collections/about_files/NOTICE.txt b/dependencies/plugins/org.apache.commons.collections/about_files/NOTICE.txt
new file mode 100755
index 0000000..3f59805
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/about_files/NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/dependencies/plugins/org.apache.commons.collections/about_files/README.txt b/dependencies/plugins/org.apache.commons.collections/about_files/README.txt
new file mode 100755
index 0000000..7d7c453
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/about_files/README.txt
@@ -0,0 +1,51 @@
+Jakarta Commons Collections
+===========================
+
+Welcome to the Collections component of the Jakarta Commons project.
+This component contains many new collections and collection utilities.
+
+Two jar files are produced by this component.
+The first, commons-collections.jar is the main jar used by applications.
+The second, commons-collections-testframework.jar is an extension to junit
+for testing new collection implementations and is not normally used by applications.
+
+
+Building from source
+--------------------
+This component requires the excellent Ant utility.
+It can be found here :
+
+  http://ant.apache.org/
+
+For testing the project, you will also need JUnit :
+
+  http://www.junit.org/
+
+To let the test process find JUnit, you may make a 
+copy of the build.properties.sample file, rename to
+build.properties,  and modify to reflect
+the location of the junit.jar on your computer.
+
+
+Once you have Ant properly installed, and the
+build.properties file correctly reflects the location
+of your junit.jar, you are ready to build and test.
+The major targets are:
+
+ant compile      - compile the code
+ant test         - test using junit
+ant jar          - create a jar file
+ant javadoc      - build the javadoc
+ant dist         - create folders as per a distribution
+ant tf.jar       - create the testframework jar file
+ant tf.javadoc   - build the testframework javadoc
+
+
+Maven
+-----
+The component can also be built using Maven. (Ant is the primary build tool.)
+It can be found here :
+
+  http://maven.apache.org/
+
+Once installed, the jars may be built with 'maven jar'.
diff --git a/dependencies/plugins/org.apache.commons.collections/build.properties b/dependencies/plugins/org.apache.commons.collections/build.properties
new file mode 100755
index 0000000..a381b3c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/build.properties
@@ -0,0 +1,7 @@
+bin.includes = META-INF/,\
+               about.html,\
+               plugin.properties,\
+               about_files/,\
+               org/
+output..=.               
+               
\ No newline at end of file
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ArrayStack.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ArrayStack.class
new file mode 100755
index 0000000..9f33ef8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ArrayStack.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Bag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Bag.class
new file mode 100755
index 0000000..0f79cf7
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Bag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BagUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BagUtils.class
new file mode 100755
index 0000000..14ca3d6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BagUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$1.class
new file mode 100755
index 0000000..724bd73
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$10.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$10.class
new file mode 100755
index 0000000..8bf5b7d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$10.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$11.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$11.class
new file mode 100755
index 0000000..f5d8bf3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$11.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$2.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$2.class
new file mode 100755
index 0000000..0678f1e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$2.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$3.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$3.class
new file mode 100755
index 0000000..87dd94e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$3.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$4.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$4.class
new file mode 100755
index 0000000..34711d8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$4.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$5.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$5.class
new file mode 100755
index 0000000..8156716
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$5.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$6.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$6.class
new file mode 100755
index 0000000..5fb5090
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$6.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$7.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$7.class
new file mode 100755
index 0000000..3e2028d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$7.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$8.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$8.class
new file mode 100755
index 0000000..dfeb816
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$8.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$9.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$9.class
new file mode 100755
index 0000000..4778772
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$9.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$MyMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$MyMapEntry.class
new file mode 100755
index 0000000..e40d19e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$MyMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap.class
new file mode 100755
index 0000000..1675883
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BidiMap.class
new file mode 100755
index 0000000..676eef1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BinaryHeap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BinaryHeap$1.class
new file mode 100755
index 0000000..16531ed
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BinaryHeap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BinaryHeap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BinaryHeap.class
new file mode 100755
index 0000000..c8c1eb2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BinaryHeap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedCollection.class
new file mode 100755
index 0000000..439a6db
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedFifoBuffer$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedFifoBuffer$1.class
new file mode 100755
index 0000000..2276cd7
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedFifoBuffer$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedFifoBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedFifoBuffer.class
new file mode 100755
index 0000000..11a40b4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedFifoBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedMap.class
new file mode 100755
index 0000000..cfaa0da
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Buffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Buffer.class
new file mode 100755
index 0000000..74d4be5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Buffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferOverflowException.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferOverflowException.class
new file mode 100755
index 0000000..1825cb9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferOverflowException.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferUnderflowException.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferUnderflowException.class
new file mode 100755
index 0000000..0a7a33b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferUnderflowException.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferUtils.class
new file mode 100755
index 0000000..f476fa1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Closure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Closure.class
new file mode 100755
index 0000000..04f9211
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Closure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ClosureUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ClosureUtils.class
new file mode 100755
index 0000000..532a97e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ClosureUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CollectionUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CollectionUtils.class
new file mode 100755
index 0000000..e0d4ac2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CollectionUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ComparatorUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ComparatorUtils.class
new file mode 100755
index 0000000..cc41b6c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ComparatorUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$Cursor.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$Cursor.class
new file mode 100755
index 0000000..5c4ceab
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$Cursor.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$ListIter.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$ListIter.class
new file mode 100755
index 0000000..ad80fbe
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$ListIter.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$Listable.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$Listable.class
new file mode 100755
index 0000000..e77db68
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$Listable.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList.class
new file mode 100755
index 0000000..e53869a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableSubList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableSubList.class
new file mode 100755
index 0000000..55e5313
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableSubList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapBag$BagIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapBag$BagIterator.class
new file mode 100755
index 0000000..b517100
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapBag$BagIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapBag.class
new file mode 100755
index 0000000..7ea04bf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapEntry.class
new file mode 100755
index 0000000..5c04363
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$1.class
new file mode 100755
index 0000000..ff2fab2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$10.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$10.class
new file mode 100755
index 0000000..0d9f275
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$10.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$11.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$11.class
new file mode 100755
index 0000000..27d57bf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$11.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$12.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$12.class
new file mode 100755
index 0000000..2caaee3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$12.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$2.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$2.class
new file mode 100755
index 0000000..1846767
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$2.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$3.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$3.class
new file mode 100755
index 0000000..a0450fd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$3.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$4.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$4.class
new file mode 100755
index 0000000..fbdeb6b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$4.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$5.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$5.class
new file mode 100755
index 0000000..fc26dad
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$5.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$6.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$6.class
new file mode 100755
index 0000000..b37ccd9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$6.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$7.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$7.class
new file mode 100755
index 0000000..bd9d696
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$7.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$8.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$8.class
new file mode 100755
index 0000000..7797ead
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$8.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$9.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$9.class
new file mode 100755
index 0000000..13aa03f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$9.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$DoubleOrderedMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$DoubleOrderedMapIterator.class
new file mode 100755
index 0000000..749acfc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$DoubleOrderedMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$Node.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$Node.class
new file mode 100755
index 0000000..bfc1c4d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$Node.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap.class
new file mode 100755
index 0000000..9d83c8f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/EnumerationUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/EnumerationUtils.class
new file mode 100755
index 0000000..3c0a69c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/EnumerationUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties$PropertiesReader.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties$PropertiesReader.class
new file mode 100755
index 0000000..1dd3d9e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties$PropertiesReader.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties$PropertiesTokenizer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties$PropertiesTokenizer.class
new file mode 100755
index 0000000..0f7f6f1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties$PropertiesTokenizer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties.class
new file mode 100755
index 0000000..5e86984
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Factory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Factory.class
new file mode 100755
index 0000000..f463fbc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Factory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FactoryUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FactoryUtils.class
new file mode 100755
index 0000000..8dc1f92
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FactoryUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$ListIter.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$ListIter.class
new file mode 100755
index 0000000..4d568c0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$ListIter.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$SubList$SubListIter.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$SubList$SubListIter.class
new file mode 100755
index 0000000..ce469d1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$SubList$SubListIter.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$SubList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$SubList.class
new file mode 100755
index 0000000..c7162aa
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$SubList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList.class
new file mode 100755
index 0000000..abbe31d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$1.class
new file mode 100755
index 0000000..03bec57
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$CollectionView$CollectionViewIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$CollectionView$CollectionViewIterator.class
new file mode 100755
index 0000000..aa5a3af
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$CollectionView$CollectionViewIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$CollectionView.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$CollectionView.class
new file mode 100755
index 0000000..fce0ffc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$CollectionView.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$EntrySet.class
new file mode 100755
index 0000000..a0f0d97
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$KeySet.class
new file mode 100755
index 0000000..10805de
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$Values.class
new file mode 100755
index 0000000..ec36432
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap.class
new file mode 100755
index 0000000..4c4253e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$1.class
new file mode 100755
index 0000000..d5b6d3e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$CollectionView$CollectionViewIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$CollectionView$CollectionViewIterator.class
new file mode 100755
index 0000000..28990ed
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$CollectionView$CollectionViewIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$CollectionView.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$CollectionView.class
new file mode 100755
index 0000000..cb8816f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$CollectionView.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$EntrySet.class
new file mode 100755
index 0000000..70f4eba
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$KeySet.class
new file mode 100755
index 0000000..46e064e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$Values.class
new file mode 100755
index 0000000..74b33f6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap.class
new file mode 100755
index 0000000..061c66c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FunctorException.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FunctorException.class
new file mode 100755
index 0000000..a9c13bc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FunctorException.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/HashBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/HashBag.class
new file mode 100755
index 0000000..95c81bb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/HashBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/IterableMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/IterableMap.class
new file mode 100755
index 0000000..ca07f19
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/IterableMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/IteratorUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/IteratorUtils.class
new file mode 100755
index 0000000..b2f1d09
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/IteratorUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/KeyValue.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/KeyValue.class
new file mode 100755
index 0000000..315d9fa
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/KeyValue.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/LRUMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/LRUMap.class
new file mode 100755
index 0000000..c9986ba
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/LRUMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ListUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ListUtils.class
new file mode 100755
index 0000000..ecb0e86
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ListUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MapIterator.class
new file mode 100755
index 0000000..8a9ff99
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MapUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MapUtils.class
new file mode 100755
index 0000000..47191bd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MapUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$1.class
new file mode 100755
index 0000000..86da6c7
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$ValueIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$ValueIterator.class
new file mode 100755
index 0000000..c9f2bc7
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$ValueIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$Values.class
new file mode 100755
index 0000000..2408712
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap.class
new file mode 100755
index 0000000..bd006fc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiMap.class
new file mode 100755
index 0000000..c4cba95
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedBidiMap.class
new file mode 100755
index 0000000..09f02cd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedIterator.class
new file mode 100755
index 0000000..ada9830
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedMap.class
new file mode 100755
index 0000000..400b14f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedMapIterator.class
new file mode 100755
index 0000000..8b3e42b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Predicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Predicate.class
new file mode 100755
index 0000000..f5a345b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Predicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/PredicateUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/PredicateUtils.class
new file mode 100755
index 0000000..c1a4aec
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/PredicateUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/PriorityQueue.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/PriorityQueue.class
new file mode 100755
index 0000000..02c159c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/PriorityQueue.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ProxyMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ProxyMap.class
new file mode 100755
index 0000000..dccf92e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ProxyMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$1.class
new file mode 100755
index 0000000..28bf788
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$2.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$2.class
new file mode 100755
index 0000000..a0b1f0b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$2.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$3.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$3.class
new file mode 100755
index 0000000..ac9cf16
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$3.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$Entry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$Entry.class
new file mode 100755
index 0000000..c35f48d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$Entry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$EntryIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$EntryIterator.class
new file mode 100755
index 0000000..c421fb3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$EntryIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$KeyIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$KeyIterator.class
new file mode 100755
index 0000000..a6510c3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$KeyIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$SoftRef.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$SoftRef.class
new file mode 100755
index 0000000..fd51394
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$SoftRef.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$ValueIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$ValueIterator.class
new file mode 100755
index 0000000..09588a2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$ValueIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$WeakRef.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$WeakRef.class
new file mode 100755
index 0000000..7596f66
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$WeakRef.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap.class
new file mode 100755
index 0000000..d24a9bc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ResettableIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ResettableIterator.class
new file mode 100755
index 0000000..9a740bf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ResettableIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ResettableListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ResettableListIterator.class
new file mode 100755
index 0000000..35175ea
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ResettableListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$1.class
new file mode 100755
index 0000000..febaeee
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$2.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$2.class
new file mode 100755
index 0000000..50e7b34
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$2.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$3.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$3.class
new file mode 100755
index 0000000..07309c9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$3.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$Entry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$Entry.class
new file mode 100755
index 0000000..f58077b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$Entry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$OrderedIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$OrderedIterator.class
new file mode 100755
index 0000000..6a3ce1c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$OrderedIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap.class
new file mode 100755
index 0000000..d805039
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SetUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SetUtils.class
new file mode 100755
index 0000000..e72f231
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SetUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SortedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SortedBag.class
new file mode 100755
index 0000000..071ec43
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SortedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SortedBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SortedBidiMap.class
new file mode 100755
index 0000000..b92bb98
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SortedBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$1.class
new file mode 100755
index 0000000..75e2bd0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$EntryIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$EntryIterator.class
new file mode 100755
index 0000000..59957bb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$EntryIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$EntrySet.class
new file mode 100755
index 0000000..ca3c38e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$KeyIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$KeyIterator.class
new file mode 100755
index 0000000..d399ed8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$KeyIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$KeySet.class
new file mode 100755
index 0000000..68b8f90
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Lock.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Lock.class
new file mode 100755
index 0000000..50c3e98
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Lock.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Node.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Node.class
new file mode 100755
index 0000000..03db1eb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Node.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$ValueIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$ValueIterator.class
new file mode 100755
index 0000000..3cc58e4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$ValueIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Values.class
new file mode 100755
index 0000000..43b614f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap.class
new file mode 100755
index 0000000..85bf22d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SynchronizedPriorityQueue.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SynchronizedPriorityQueue.class
new file mode 100755
index 0000000..19230bd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SynchronizedPriorityQueue.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Transformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Transformer.class
new file mode 100755
index 0000000..af7ba2f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Transformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/TransformerUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/TransformerUtils.class
new file mode 100755
index 0000000..dbcaf6f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/TransformerUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/TreeBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/TreeBag.class
new file mode 100755
index 0000000..de21099
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/TreeBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/UnboundedFifoBuffer$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/UnboundedFifoBuffer$1.class
new file mode 100755
index 0000000..7be9829
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/UnboundedFifoBuffer$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/UnboundedFifoBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/UnboundedFifoBuffer.class
new file mode 100755
index 0000000..376a57c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/UnboundedFifoBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Unmodifiable.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Unmodifiable.class
new file mode 100755
index 0000000..502988a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Unmodifiable.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractBagDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractBagDecorator.class
new file mode 100755
index 0000000..91a027d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractBagDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag$BagIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag$BagIterator.class
new file mode 100755
index 0000000..d2ed049
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag$BagIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag$MutableInteger.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag$MutableInteger.class
new file mode 100755
index 0000000..8dcb44f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag$MutableInteger.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag.class
new file mode 100755
index 0000000..9195fcd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractSortedBagDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractSortedBagDecorator.class
new file mode 100755
index 0000000..7fae8b0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractSortedBagDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/HashBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/HashBag.class
new file mode 100755
index 0000000..990b939
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/HashBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/PredicatedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/PredicatedBag.class
new file mode 100755
index 0000000..d494003
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/PredicatedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/PredicatedSortedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/PredicatedSortedBag.class
new file mode 100755
index 0000000..87b0711
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/PredicatedSortedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedBag$SynchronizedBagSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedBag$SynchronizedBagSet.class
new file mode 100755
index 0000000..222ea05
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedBag$SynchronizedBagSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedBag.class
new file mode 100755
index 0000000..b95e751
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedSortedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedSortedBag.class
new file mode 100755
index 0000000..7556912
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedSortedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TransformedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TransformedBag.class
new file mode 100755
index 0000000..45f199d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TransformedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TransformedSortedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TransformedSortedBag.class
new file mode 100755
index 0000000..3bb9a27
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TransformedSortedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TreeBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TreeBag.class
new file mode 100755
index 0000000..dd296e2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TreeBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TypedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TypedBag.class
new file mode 100755
index 0000000..4003066
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TypedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TypedSortedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TypedSortedBag.class
new file mode 100755
index 0000000..e5f2d7a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TypedSortedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/UnmodifiableBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/UnmodifiableBag.class
new file mode 100755
index 0000000..bb5330f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/UnmodifiableBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/UnmodifiableSortedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/UnmodifiableSortedBag.class
new file mode 100755
index 0000000..6f33f32
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/UnmodifiableSortedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.class
new file mode 100755
index 0000000..f7e47dc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$BidiMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$BidiMapIterator.class
new file mode 100755
index 0000000..9c68e87
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$BidiMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySet.class
new file mode 100755
index 0000000..ddd046f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySetIterator.class
new file mode 100755
index 0000000..9a341ff
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySet.class
new file mode 100755
index 0000000..fa9ce99
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySetIterator.class
new file mode 100755
index 0000000..9b911a0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$MapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$MapEntry.class
new file mode 100755
index 0000000..670a901
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$MapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$Values.class
new file mode 100755
index 0000000..00e47eb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$ValuesIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$ValuesIterator.class
new file mode 100755
index 0000000..0244ae9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$ValuesIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$View.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$View.class
new file mode 100755
index 0000000..d62d9e5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$View.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap.class
new file mode 100755
index 0000000..3972441
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.class
new file mode 100755
index 0000000..741e435
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.class
new file mode 100755
index 0000000..a7d4981
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualHashBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualHashBidiMap.class
new file mode 100755
index 0000000..0f2a9c6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualHashBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap$BidiOrderedMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap$BidiOrderedMapIterator.class
new file mode 100755
index 0000000..1917aa0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap$BidiOrderedMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap$ViewMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap$ViewMap.class
new file mode 100755
index 0000000..8effe7a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap$ViewMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap.class
new file mode 100755
index 0000000..d647a5f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$EntryView.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$EntryView.class
new file mode 100755
index 0000000..5394857
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$EntryView.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$Inverse.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$Inverse.class
new file mode 100755
index 0000000..320fc43
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$Inverse.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$Node.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$Node.class
new file mode 100755
index 0000000..806d45f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$Node.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$View.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$View.class
new file mode 100755
index 0000000..2fa1df4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$View.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$ViewIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$ViewIterator.class
new file mode 100755
index 0000000..86e40c1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$ViewIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$ViewMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$ViewMapIterator.class
new file mode 100755
index 0000000..ddb4e2e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$ViewMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap.class
new file mode 100755
index 0000000..f37c9ba
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.class
new file mode 100755
index 0000000..8906e47
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.class
new file mode 100755
index 0000000..93e38d8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.class
new file mode 100755
index 0000000..d325f91
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/AbstractBufferDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/AbstractBufferDecorator.class
new file mode 100755
index 0000000..09deebf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/AbstractBufferDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BlockingBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BlockingBuffer.class
new file mode 100755
index 0000000..06129f2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BlockingBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedBuffer$NotifyingIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedBuffer$NotifyingIterator.class
new file mode 100755
index 0000000..fcec171
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedBuffer$NotifyingIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedBuffer.class
new file mode 100755
index 0000000..b6d873c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedFifoBuffer$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedFifoBuffer$1.class
new file mode 100755
index 0000000..cc955ad
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedFifoBuffer$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedFifoBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedFifoBuffer.class
new file mode 100755
index 0000000..043f6f0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedFifoBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/CircularFifoBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/CircularFifoBuffer.class
new file mode 100755
index 0000000..56bdaa3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/CircularFifoBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PredicatedBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PredicatedBuffer.class
new file mode 100755
index 0000000..c1f624a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PredicatedBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PriorityBuffer$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PriorityBuffer$1.class
new file mode 100755
index 0000000..149ce8f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PriorityBuffer$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PriorityBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PriorityBuffer.class
new file mode 100755
index 0000000..8dcc425
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PriorityBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/SynchronizedBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/SynchronizedBuffer.class
new file mode 100755
index 0000000..1e11264
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/SynchronizedBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/TransformedBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/TransformedBuffer.class
new file mode 100755
index 0000000..14f4591
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/TransformedBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/TypedBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/TypedBuffer.class
new file mode 100755
index 0000000..85ccdeb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/TypedBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnboundedFifoBuffer$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnboundedFifoBuffer$1.class
new file mode 100755
index 0000000..c7b950a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnboundedFifoBuffer$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnboundedFifoBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnboundedFifoBuffer.class
new file mode 100755
index 0000000..a013d5b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnboundedFifoBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnmodifiableBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnmodifiableBuffer.class
new file mode 100755
index 0000000..231d091
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnmodifiableBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/AbstractCollectionDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/AbstractCollectionDecorator.class
new file mode 100755
index 0000000..f32d651
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/AbstractCollectionDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.class
new file mode 100755
index 0000000..73e52d0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/CompositeCollection$CollectionMutator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/CompositeCollection$CollectionMutator.class
new file mode 100755
index 0000000..245ef68
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/CompositeCollection$CollectionMutator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/CompositeCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/CompositeCollection.class
new file mode 100755
index 0000000..272e9d4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/CompositeCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/PredicatedCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/PredicatedCollection.class
new file mode 100755
index 0000000..5309264
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/PredicatedCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/SynchronizedCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/SynchronizedCollection.class
new file mode 100755
index 0000000..43bc8fb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/SynchronizedCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/TransformedCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/TransformedCollection.class
new file mode 100755
index 0000000..f9b3edf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/TransformedCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/TypedCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/TypedCollection.class
new file mode 100755
index 0000000..f715906
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/TypedCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.class
new file mode 100755
index 0000000..7accb4f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/UnmodifiableCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/UnmodifiableCollection.class
new file mode 100755
index 0000000..b542fb0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/UnmodifiableCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/BooleanComparator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/BooleanComparator.class
new file mode 100755
index 0000000..34a4e09
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/BooleanComparator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ComparableComparator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ComparableComparator.class
new file mode 100755
index 0000000..f71300b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ComparableComparator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ComparatorChain.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ComparatorChain.class
new file mode 100755
index 0000000..7278551
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ComparatorChain.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/FixedOrderComparator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/FixedOrderComparator.class
new file mode 100755
index 0000000..d43994b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/FixedOrderComparator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/NullComparator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/NullComparator.class
new file mode 100755
index 0000000..bfe37a8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/NullComparator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ReverseComparator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ReverseComparator.class
new file mode 100755
index 0000000..b88c2e1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ReverseComparator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/TransformingComparator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/TransformingComparator.class
new file mode 100755
index 0000000..e6e29ef
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/TransformingComparator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AllPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AllPredicate.class
new file mode 100755
index 0000000..6ebd75e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AllPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AndPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AndPredicate.class
new file mode 100755
index 0000000..62cb11c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AndPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AnyPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AnyPredicate.class
new file mode 100755
index 0000000..0e5448d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AnyPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ChainedClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ChainedClosure.class
new file mode 100755
index 0000000..352306e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ChainedClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ChainedTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ChainedTransformer.class
new file mode 100755
index 0000000..cc7f540
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ChainedTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/CloneTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/CloneTransformer.class
new file mode 100755
index 0000000..5f14009
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/CloneTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ClosureTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ClosureTransformer.class
new file mode 100755
index 0000000..1557710
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ClosureTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ConstantFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ConstantFactory.class
new file mode 100755
index 0000000..638a1ed
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ConstantFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ConstantTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ConstantTransformer.class
new file mode 100755
index 0000000..149206d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ConstantTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/EqualPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/EqualPredicate.class
new file mode 100755
index 0000000..0fb59e4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/EqualPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionClosure.class
new file mode 100755
index 0000000..3602b04
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionFactory.class
new file mode 100755
index 0000000..28ed6e5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionPredicate.class
new file mode 100755
index 0000000..7fa692c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionTransformer.class
new file mode 100755
index 0000000..92bfafc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FactoryTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FactoryTransformer.class
new file mode 100755
index 0000000..de80139
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FactoryTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FalsePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FalsePredicate.class
new file mode 100755
index 0000000..675a159
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FalsePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ForClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ForClosure.class
new file mode 100755
index 0000000..a89fd71
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ForClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FunctorUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FunctorUtils.class
new file mode 100755
index 0000000..47eda5e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FunctorUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/IdentityPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/IdentityPredicate.class
new file mode 100755
index 0000000..f7f09c4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/IdentityPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/IfClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/IfClosure.class
new file mode 100755
index 0000000..f75c256
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/IfClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstanceofPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstanceofPredicate.class
new file mode 100755
index 0000000..13abab5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstanceofPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstantiateFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstantiateFactory.class
new file mode 100755
index 0000000..510d708
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstantiateFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstantiateTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstantiateTransformer.class
new file mode 100755
index 0000000..ec94a9c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstantiateTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InvokerTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InvokerTransformer.class
new file mode 100755
index 0000000..2d971d4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InvokerTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/MapTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/MapTransformer.class
new file mode 100755
index 0000000..5dd8b13
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/MapTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NOPClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NOPClosure.class
new file mode 100755
index 0000000..b27f904
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NOPClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NOPTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NOPTransformer.class
new file mode 100755
index 0000000..d92c10c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NOPTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NonePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NonePredicate.class
new file mode 100755
index 0000000..25fd9d2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NonePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NotNullPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NotNullPredicate.class
new file mode 100755
index 0000000..e22bc94
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NotNullPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NotPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NotPredicate.class
new file mode 100755
index 0000000..96aeb15
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NotPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsExceptionPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsExceptionPredicate.class
new file mode 100755
index 0000000..ea8ceea
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsExceptionPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsFalsePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsFalsePredicate.class
new file mode 100755
index 0000000..67caec2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsFalsePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsTruePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsTruePredicate.class
new file mode 100755
index 0000000..84abaac
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsTruePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullPredicate.class
new file mode 100755
index 0000000..8d384b6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/OnePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/OnePredicate.class
new file mode 100755
index 0000000..fdb27d3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/OnePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/OrPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/OrPredicate.class
new file mode 100755
index 0000000..157eeae
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/OrPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PredicateDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PredicateDecorator.class
new file mode 100755
index 0000000..98795d9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PredicateDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PredicateTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PredicateTransformer.class
new file mode 100755
index 0000000..703e832
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PredicateTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$1.class
new file mode 100755
index 0000000..f89da83
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$PrototypeCloneFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$PrototypeCloneFactory.class
new file mode 100755
index 0000000..ee41589
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$PrototypeCloneFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$PrototypeSerializationFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$PrototypeSerializationFactory.class
new file mode 100755
index 0000000..383ba77
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$PrototypeSerializationFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory.class
new file mode 100755
index 0000000..ab3f534
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/StringValueTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/StringValueTransformer.class
new file mode 100755
index 0000000..337887d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/StringValueTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/SwitchClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/SwitchClosure.class
new file mode 100755
index 0000000..fa5d97c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/SwitchClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/SwitchTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/SwitchTransformer.class
new file mode 100755
index 0000000..dba350e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/SwitchTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformedPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformedPredicate.class
new file mode 100755
index 0000000..0c2770c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformedPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformerClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformerClosure.class
new file mode 100755
index 0000000..761b280
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformerClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformerPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformerPredicate.class
new file mode 100755
index 0000000..7b5cb51
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformerPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TruePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TruePredicate.class
new file mode 100755
index 0000000..d22088d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TruePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/UniquePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/UniquePredicate.class
new file mode 100755
index 0000000..090a6ab
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/UniquePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/WhileClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/WhileClosure.class
new file mode 100755
index 0000000..9852dc1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/WhileClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractEmptyIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractEmptyIterator.class
new file mode 100755
index 0000000..6013229
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractEmptyIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractIteratorDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractIteratorDecorator.class
new file mode 100755
index 0000000..9d1bdfb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractIteratorDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.class
new file mode 100755
index 0000000..f0d5079
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.class
new file mode 100755
index 0000000..9aaf492
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.class
new file mode 100755
index 0000000..92ca372
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ArrayIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ArrayIterator.class
new file mode 100755
index 0000000..ceab4fc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ArrayIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ArrayListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ArrayListIterator.class
new file mode 100755
index 0000000..dbe76c2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ArrayListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/CollatingIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/CollatingIterator.class
new file mode 100755
index 0000000..96c4792
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/CollatingIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyIterator.class
new file mode 100755
index 0000000..eb5ca3a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyListIterator.class
new file mode 100755
index 0000000..31f4430
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyMapIterator.class
new file mode 100755
index 0000000..f8535a5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyOrderedIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyOrderedIterator.class
new file mode 100755
index 0000000..4a92dcf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyOrderedIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.class
new file mode 100755
index 0000000..ab0a06a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EntrySetMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EntrySetMapIterator.class
new file mode 100755
index 0000000..fa4112b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EntrySetMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EnumerationIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EnumerationIterator.class
new file mode 100755
index 0000000..934f7c4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EnumerationIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/FilterIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/FilterIterator.class
new file mode 100755
index 0000000..7ea25f9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/FilterIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/FilterListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/FilterListIterator.class
new file mode 100755
index 0000000..6a4d7a4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/FilterListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/IteratorChain.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/IteratorChain.class
new file mode 100755
index 0000000..2d6e553
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/IteratorChain.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/IteratorEnumeration.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/IteratorEnumeration.class
new file mode 100755
index 0000000..70af33e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/IteratorEnumeration.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ListIteratorWrapper.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ListIteratorWrapper.class
new file mode 100755
index 0000000..62c5aee
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ListIteratorWrapper.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/LoopingIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/LoopingIterator.class
new file mode 100755
index 0000000..683c423
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/LoopingIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/LoopingListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/LoopingListIterator.class
new file mode 100755
index 0000000..6a7ad75
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/LoopingListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectArrayIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectArrayIterator.class
new file mode 100755
index 0000000..d46e329
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectArrayIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectArrayListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectArrayListIterator.class
new file mode 100755
index 0000000..af22fbf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectArrayListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectGraphIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectGraphIterator.class
new file mode 100755
index 0000000..0f5d4b6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectGraphIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ProxyIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ProxyIterator.class
new file mode 100755
index 0000000..ff6627d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ProxyIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ProxyListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ProxyListIterator.class
new file mode 100755
index 0000000..22c7852
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ProxyListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ReverseListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ReverseListIterator.class
new file mode 100755
index 0000000..e850eb2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ReverseListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/SingletonIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/SingletonIterator.class
new file mode 100755
index 0000000..de5bde6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/SingletonIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/SingletonListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/SingletonListIterator.class
new file mode 100755
index 0000000..51f9356
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/SingletonListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/TransformIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/TransformIterator.class
new file mode 100755
index 0000000..42193df
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/TransformIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UniqueFilterIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UniqueFilterIterator.class
new file mode 100755
index 0000000..0d44002
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UniqueFilterIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableIterator.class
new file mode 100755
index 0000000..d376ce1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableListIterator.class
new file mode 100755
index 0000000..34767b0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableMapIterator.class
new file mode 100755
index 0000000..3f64fb4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.class
new file mode 100755
index 0000000..31873a6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractKeyValue.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractKeyValue.class
new file mode 100755
index 0000000..3c60816
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractKeyValue.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractMapEntry.class
new file mode 100755
index 0000000..4c34718
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.class
new file mode 100755
index 0000000..d583176
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/DefaultKeyValue.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/DefaultKeyValue.class
new file mode 100755
index 0000000..2c617e8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/DefaultKeyValue.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/DefaultMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/DefaultMapEntry.class
new file mode 100755
index 0000000..31234be
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/DefaultMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/MultiKey.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/MultiKey.class
new file mode 100755
index 0000000..4f4c65a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/MultiKey.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/TiedMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/TiedMapEntry.class
new file mode 100755
index 0000000..d9d72b5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/TiedMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.class
new file mode 100755
index 0000000..3513b5a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedListIterator.class
new file mode 100755
index 0000000..e3d1329
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubList.class
new file mode 100755
index 0000000..e7b9ae8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubListIterator.class
new file mode 100755
index 0000000..40a72be
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$Node.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$Node.class
new file mode 100755
index 0000000..954a2d8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$Node.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList.class
new file mode 100755
index 0000000..502d734
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractListDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractListDecorator.class
new file mode 100755
index 0000000..3df31cd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractListDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractSerializableListDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractSerializableListDecorator.class
new file mode 100755
index 0000000..f908d4c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractSerializableListDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList$Cursor.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList$Cursor.class
new file mode 100755
index 0000000..9e60bd5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList$Cursor.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList$SubCursor.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList$SubCursor.class
new file mode 100755
index 0000000..fbaa101
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList$SubCursor.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList.class
new file mode 100755
index 0000000..369fac3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/FixedSizeList$FixedSizeListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/FixedSizeList$FixedSizeListIterator.class
new file mode 100755
index 0000000..da2afb0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/FixedSizeList$FixedSizeListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/FixedSizeList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/FixedSizeList.class
new file mode 100755
index 0000000..e1e2d55
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/FixedSizeList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/GrowthList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/GrowthList.class
new file mode 100755
index 0000000..babdf5e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/GrowthList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/LazyList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/LazyList.class
new file mode 100755
index 0000000..791ae90
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/LazyList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/NodeCachingLinkedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/NodeCachingLinkedList.class
new file mode 100755
index 0000000..c65ae58
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/NodeCachingLinkedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/PredicatedList$PredicatedListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/PredicatedList$PredicatedListIterator.class
new file mode 100755
index 0000000..555b2b0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/PredicatedList$PredicatedListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/PredicatedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/PredicatedList.class
new file mode 100755
index 0000000..230192e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/PredicatedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList$SetListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList$SetListIterator.class
new file mode 100755
index 0000000..8fb5f6f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList$SetListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList$SetListListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList$SetListListIterator.class
new file mode 100755
index 0000000..63196e6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList$SetListListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList.class
new file mode 100755
index 0000000..7303afb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SynchronizedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SynchronizedList.class
new file mode 100755
index 0000000..15bc320
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SynchronizedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TransformedList$TransformedListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TransformedList$TransformedListIterator.class
new file mode 100755
index 0000000..956d0b6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TransformedList$TransformedListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TransformedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TransformedList.class
new file mode 100755
index 0000000..5a11492
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TransformedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$1.class
new file mode 100755
index 0000000..de453bf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$AVLNode.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$AVLNode.class
new file mode 100755
index 0000000..5edcc67
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$AVLNode.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$TreeListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$TreeListIterator.class
new file mode 100755
index 0000000..50cf078
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$TreeListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList.class
new file mode 100755
index 0000000..1456136
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TypedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TypedList.class
new file mode 100755
index 0000000..7050040
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TypedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/UnmodifiableList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/UnmodifiableList.class
new file mode 100755
index 0000000..bfb8004
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/UnmodifiableList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$EntrySet.class
new file mode 100755
index 0000000..dc2aa22
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$EntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$EntrySetIterator.class
new file mode 100755
index 0000000..e62e009
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$EntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashEntry.class
new file mode 100755
index 0000000..4673af3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashIterator.class
new file mode 100755
index 0000000..319bc81
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashMapIterator.class
new file mode 100755
index 0000000..deb5d23
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$KeySet.class
new file mode 100755
index 0000000..ad76d31
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$KeySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$KeySetIterator.class
new file mode 100755
index 0000000..531dbb9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$KeySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$Values.class
new file mode 100755
index 0000000..8653cf2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$ValuesIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$ValuesIterator.class
new file mode 100755
index 0000000..68c6da9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$ValuesIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap.class
new file mode 100755
index 0000000..b2140f1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySet.class
new file mode 100755
index 0000000..0a1de16
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySetIterator.class
new file mode 100755
index 0000000..ccd4a63
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$MapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$MapEntry.class
new file mode 100755
index 0000000..0c57d0c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$MapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.class
new file mode 100755
index 0000000..fadf385
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$EntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$EntrySetIterator.class
new file mode 100755
index 0000000..19cbd55
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$EntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$KeySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$KeySetIterator.class
new file mode 100755
index 0000000..b50d53e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$KeySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkEntry.class
new file mode 100755
index 0000000..fc91fd0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkIterator.class
new file mode 100755
index 0000000..fbc9244
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkMapIterator.class
new file mode 100755
index 0000000..ecfed48
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$ValuesIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$ValuesIterator.class
new file mode 100755
index 0000000..6cb0466
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$ValuesIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap.class
new file mode 100755
index 0000000..f468bad
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractMapDecorator.class
new file mode 100755
index 0000000..174f938
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractOrderedMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractOrderedMapDecorator.class
new file mode 100755
index 0000000..35c1907
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractOrderedMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntry.class
new file mode 100755
index 0000000..bb911ab
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySet.class
new file mode 100755
index 0000000..76e0b19
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySetIterator.class
new file mode 100755
index 0000000..aeb4ac8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySet.class
new file mode 100755
index 0000000..85712fd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySetIterator.class
new file mode 100755
index 0000000..d38112b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceMapIterator.class
new file mode 100755
index 0000000..71b8f5a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValues.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValues.class
new file mode 100755
index 0000000..f0a215e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValues.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValuesIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValuesIterator.class
new file mode 100755
index 0000000..64c07bc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValuesIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$SoftRef.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$SoftRef.class
new file mode 100755
index 0000000..17ad0a0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$SoftRef.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$WeakRef.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$WeakRef.class
new file mode 100755
index 0000000..3f2c65f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$WeakRef.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap.class
new file mode 100755
index 0000000..cc0fb78
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractSortedMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractSortedMapDecorator.class
new file mode 100755
index 0000000..ee99feb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractSortedMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CaseInsensitiveMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CaseInsensitiveMap.class
new file mode 100755
index 0000000..882f3d5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CaseInsensitiveMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CompositeMap$MapMutator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CompositeMap$MapMutator.class
new file mode 100755
index 0000000..ca7eb51
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CompositeMap$MapMutator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CompositeMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CompositeMap.class
new file mode 100755
index 0000000..5938a16
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CompositeMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/DefaultedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/DefaultedMap.class
new file mode 100755
index 0000000..52ca171
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/DefaultedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/FixedSizeMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/FixedSizeMap.class
new file mode 100755
index 0000000..b49480d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/FixedSizeMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/FixedSizeSortedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/FixedSizeSortedMap.class
new file mode 100755
index 0000000..6e24761
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/FixedSizeSortedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$EntrySet.class
new file mode 100755
index 0000000..4305b82
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$EntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$EntrySetIterator.class
new file mode 100755
index 0000000..90466d6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$EntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$FlatMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$FlatMapIterator.class
new file mode 100755
index 0000000..5581918
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$FlatMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$KeySet.class
new file mode 100755
index 0000000..80c30b6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$KeySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$KeySetIterator.class
new file mode 100755
index 0000000..c615564
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$KeySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$Values.class
new file mode 100755
index 0000000..45a20b0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$ValuesIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$ValuesIterator.class
new file mode 100755
index 0000000..e2d71e3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$ValuesIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map.class
new file mode 100755
index 0000000..c1546d5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/HashedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/HashedMap.class
new file mode 100755
index 0000000..d2cd236
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/HashedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/IdentityMap$IdentityEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/IdentityMap$IdentityEntry.class
new file mode 100755
index 0000000..a5c849b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/IdentityMap$IdentityEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/IdentityMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/IdentityMap.class
new file mode 100755
index 0000000..430261d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/IdentityMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LRUMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LRUMap.class
new file mode 100755
index 0000000..34a126e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LRUMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LazyMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LazyMap.class
new file mode 100755
index 0000000..1a4c132
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LazyMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LazySortedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LazySortedMap.class
new file mode 100755
index 0000000..9fbf35a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LazySortedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LinkedMap$LinkedMapList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LinkedMap$LinkedMapList.class
new file mode 100755
index 0000000..86385e2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LinkedMap$LinkedMapList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LinkedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LinkedMap.class
new file mode 100755
index 0000000..26a2aab
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LinkedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$1.class
new file mode 100755
index 0000000..671ce9a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$2.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$2.class
new file mode 100755
index 0000000..b006cad
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$2.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$EntrySetView.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$EntrySetView.class
new file mode 100755
index 0000000..3d1f70e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$EntrySetView.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$KeySetView.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$KeySetView.class
new file mode 100755
index 0000000..1ad6fa4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$KeySetView.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedIterator.class
new file mode 100755
index 0000000..2ea3d43
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapEntry.class
new file mode 100755
index 0000000..b71c0bb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapIterator.class
new file mode 100755
index 0000000..9abb322
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ValuesView.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ValuesView.class
new file mode 100755
index 0000000..6691864
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ValuesView.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap.class
new file mode 100755
index 0000000..4360664
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiKeyMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiKeyMap.class
new file mode 100755
index 0000000..2ceb40b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiKeyMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$1.class
new file mode 100755
index 0000000..2bbc0d5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$ReflectionFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$ReflectionFactory.class
new file mode 100755
index 0000000..33478e2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$ReflectionFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$Values.class
new file mode 100755
index 0000000..284089d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$ValuesIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$ValuesIterator.class
new file mode 100755
index 0000000..711fa9a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$ValuesIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap.class
new file mode 100755
index 0000000..6c08e36
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/PredicatedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/PredicatedMap.class
new file mode 100755
index 0000000..c0c0c5a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/PredicatedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/PredicatedSortedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/PredicatedSortedMap.class
new file mode 100755
index 0000000..9c3ec12
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/PredicatedSortedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ReferenceIdentityMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ReferenceIdentityMap.class
new file mode 100755
index 0000000..35434c0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ReferenceIdentityMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ReferenceMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ReferenceMap.class
new file mode 100755
index 0000000..9e33b78
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ReferenceMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap$SingletonMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap$SingletonMapIterator.class
new file mode 100755
index 0000000..c33881f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap$SingletonMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap$SingletonValues.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap$SingletonValues.class
new file mode 100755
index 0000000..703aaca
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap$SingletonValues.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap.class
new file mode 100755
index 0000000..51fd6a2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$1.class
new file mode 100755
index 0000000..547345d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$EntryIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$EntryIterator.class
new file mode 100755
index 0000000..ee6e53a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$EntryIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$EntrySet.class
new file mode 100755
index 0000000..155f3b4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$KeyIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$KeyIterator.class
new file mode 100755
index 0000000..68dc972
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$KeyIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$KeySet.class
new file mode 100755
index 0000000..f8ec4f2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Lock.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Lock.class
new file mode 100755
index 0000000..86d4fc1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Lock.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Node.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Node.class
new file mode 100755
index 0000000..5d5390d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Node.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$ValueIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$ValueIterator.class
new file mode 100755
index 0000000..3d3f20e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$ValueIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Values.class
new file mode 100755
index 0000000..766f2cf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap.class
new file mode 100755
index 0000000..50b4b17
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TransformedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TransformedMap.class
new file mode 100755
index 0000000..a8f21f2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TransformedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TransformedSortedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TransformedSortedMap.class
new file mode 100755
index 0000000..4b005ec
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TransformedSortedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TypedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TypedMap.class
new file mode 100755
index 0000000..97306b9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TypedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TypedSortedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TypedSortedMap.class
new file mode 100755
index 0000000..3d7c825
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TypedSortedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntry.class
new file mode 100755
index 0000000..729415d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntrySetIterator.class
new file mode 100755
index 0000000..d0b1fb9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet.class
new file mode 100755
index 0000000..902220f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableMap.class
new file mode 100755
index 0000000..3e979fb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableOrderedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableOrderedMap.class
new file mode 100755
index 0000000..2b91bed
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableOrderedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableSortedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableSortedMap.class
new file mode 100755
index 0000000..6f4957c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableSortedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSerializableSetDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSerializableSetDecorator.class
new file mode 100755
index 0000000..12daf45
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSerializableSetDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSetDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSetDecorator.class
new file mode 100755
index 0000000..e95de01
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSetDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSortedSetDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSortedSetDecorator.class
new file mode 100755
index 0000000..0e2547a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSortedSetDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/CompositeSet$SetMutator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/CompositeSet$SetMutator.class
new file mode 100755
index 0000000..32c3ea0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/CompositeSet$SetMutator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/CompositeSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/CompositeSet.class
new file mode 100755
index 0000000..9bd8014
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/CompositeSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet$1.class
new file mode 100755
index 0000000..7a44be1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet$OrderedSetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet$OrderedSetIterator.class
new file mode 100755
index 0000000..a42713d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet$OrderedSetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet.class
new file mode 100755
index 0000000..f72bc81
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/MapBackedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/MapBackedSet.class
new file mode 100755
index 0000000..754b614
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/MapBackedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/PredicatedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/PredicatedSet.class
new file mode 100755
index 0000000..8b90218
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/PredicatedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/PredicatedSortedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/PredicatedSortedSet.class
new file mode 100755
index 0000000..2e852c6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/PredicatedSortedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/SynchronizedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/SynchronizedSet.class
new file mode 100755
index 0000000..0ce01a6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/SynchronizedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/SynchronizedSortedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/SynchronizedSortedSet.class
new file mode 100755
index 0000000..ff93667
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/SynchronizedSortedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TransformedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TransformedSet.class
new file mode 100755
index 0000000..0d45b94
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TransformedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TransformedSortedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TransformedSortedSet.class
new file mode 100755
index 0000000..85e53d7
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TransformedSortedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TypedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TypedSet.class
new file mode 100755
index 0000000..ae3638a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TypedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TypedSortedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TypedSortedSet.class
new file mode 100755
index 0000000..e1b02e9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TypedSortedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/UnmodifiableSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/UnmodifiableSet.class
new file mode 100755
index 0000000..b5753d4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/UnmodifiableSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/UnmodifiableSortedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/UnmodifiableSortedSet.class
new file mode 100755
index 0000000..0d91880
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/UnmodifiableSortedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/plugin.properties b/dependencies/plugins/org.apache.commons.collections/plugin.properties
new file mode 100755
index 0000000..3219fa5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/plugin.properties
@@ -0,0 +1,12 @@
+################################################################################
+# Copyright (c) 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Eclipse Public License v1.0 
+# which accompanies this distribution, and is available at 
+# http://www.eclipse.org/legal/epl-v10.html 
+# 
+# Contributors: 
+# Chris Aniszczyk - initial API and implementation 
+################################################################################
+pluginName=Apache Commons Collections
+providerName=Eclipse.org
\ No newline at end of file
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/META-INF/MANIFEST.MF b/dependencies/plugins/org.apache.commons.collections/source-bundle/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..7b300a7
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.apache.commons.collections.source
+Bundle-Version: 3.2.0.qualifier
+Bundle-Localization: plugin
+Bundle-Vendor: %providerName
+Eclipse-SourceBundle: org.apache.commons.collections;version="3.2.0.qualifier"
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/about.html b/dependencies/plugins/org.apache.commons.collections/source-bundle/about.html
new file mode 100755
index 0000000..be61750
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/about.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 8, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+		
+<h3>Third Party Content</h3>
+<p>The Content includes items that have been sourced from third parties as set out below. If you 
+did not receive this Content directly from the Eclipse Foundation, the following is provided 
+for informational purposes only, and you should look to the Redistributor&rsquo;s license for 
+terms and conditions of use.</p>
+
+<h4>Commons Collections 3.2</h4>
+<p>The plug-in includes Commons Collections 3.2 (&quot;Commons Collections&quot;) developed by the Apache Software Foundation as part of the Apache Commons project.  Therefore:</p>
+
+<blockquote>
+This product includes software developed by the Apache Software Foundation (<a href="http://www.apache.org/">http://www.apache.org/</a>).
+</blockquote>
+
+<p>The Commons Collections binary code is included with no modifications except postprocessing
+(pack200 conditioning and signing). The corresponding Commons Collections source code is located in src.zip.</p>
+
+<p>Commons Net is:</p>
+
+<blockquote>Copyright (c) 1997-2005 The Apache Software Foundation. All rights reserved.</blockquote>
+
+<p>Your use of the Commons Collections code is subject to the terms and conditions of the Apache Software License 2.0.  A copy of the license is contained
+in the file <a href="about_files/LICENSE.txt">LICENSE.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
+
+<p>The Apache attribution <a href="about_files/NOTICE.txt">NOTICE.txt</a> file is included with the Content in accordance with 4d of the Apache License, Version 2.0.</p>
+
+<p>Examples and documentation as well as updated source code for Commons Collections is available at <a href="http://commons.apache.org/collections/">http://commons.apache.org/collections/</a>.</p>
+
+</body>
+</html>
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/LICENSE.txt b/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/LICENSE.txt
new file mode 100755
index 0000000..d645695
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/LICENSE.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/NOTICE.txt b/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/NOTICE.txt
new file mode 100755
index 0000000..3f59805
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/README.txt b/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/README.txt
new file mode 100755
index 0000000..7d7c453
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/README.txt
@@ -0,0 +1,51 @@
+Jakarta Commons Collections
+===========================
+
+Welcome to the Collections component of the Jakarta Commons project.
+This component contains many new collections and collection utilities.
+
+Two jar files are produced by this component.
+The first, commons-collections.jar is the main jar used by applications.
+The second, commons-collections-testframework.jar is an extension to junit
+for testing new collection implementations and is not normally used by applications.
+
+
+Building from source
+--------------------
+This component requires the excellent Ant utility.
+It can be found here :
+
+  http://ant.apache.org/
+
+For testing the project, you will also need JUnit :
+
+  http://www.junit.org/
+
+To let the test process find JUnit, you may make a 
+copy of the build.properties.sample file, rename to
+build.properties,  and modify to reflect
+the location of the junit.jar on your computer.
+
+
+Once you have Ant properly installed, and the
+build.properties file correctly reflects the location
+of your junit.jar, you are ready to build and test.
+The major targets are:
+
+ant compile      - compile the code
+ant test         - test using junit
+ant jar          - create a jar file
+ant javadoc      - build the javadoc
+ant dist         - create folders as per a distribution
+ant tf.jar       - create the testframework jar file
+ant tf.javadoc   - build the testframework javadoc
+
+
+Maven
+-----
+The component can also be built using Maven. (Ant is the primary build tool.)
+It can be found here :
+
+  http://maven.apache.org/
+
+Once installed, the jars may be built with 'maven jar'.
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/build.properties b/dependencies/plugins/org.apache.commons.collections/source-bundle/build.properties
new file mode 100755
index 0000000..4554292
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/build.properties
@@ -0,0 +1,15 @@
+###############################################################################
+# Copyright (c) 2007, 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials 
+# are made available under the terms of the Common Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/cpl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = about.html,\
+               about_files/,\
+               plugin.properties,\
+               META-INF/,\
+               org/
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ArrayStack.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ArrayStack.java
new file mode 100755
index 0000000..614306a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ArrayStack.java
@@ -0,0 +1,194 @@
+/*
+ *  Copyright 2001-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.ArrayList;
+import java.util.EmptyStackException;
+
+/**
+ * An implementation of the {@link java.util.Stack} API that is based on an
+ * <code>ArrayList</code> instead of a <code>Vector</code>, so it is not
+ * synchronized to protect against multi-threaded access.  The implementation
+ * is therefore operates faster in environments where you do not need to
+ * worry about multiple thread contention.
+ * <p>
+ * The removal order of an <code>ArrayStack</code> is based on insertion 
+ * order: The most recently added element is removed first.  The iteration
+ * order is <i>not</i> the same as the removal order.  The iterator returns
+ * elements from the bottom up, whereas the {@link #remove()} method removes
+ * them from the top down.
+ * <p>
+ * Unlike <code>Stack</code>, <code>ArrayStack</code> accepts null entries.
+ *
+ * @see java.util.Stack
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ * 
+ * @author Craig R. McClanahan
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public class ArrayStack extends ArrayList implements Buffer {
+
+    /** Ensure serialization compatibility */    
+    private static final long serialVersionUID = 2130079159931574599L;
+
+    /**
+     * Constructs a new empty <code>ArrayStack</code>. The initial size
+     * is controlled by <code>ArrayList</code> and is currently 10.
+     */
+    public ArrayStack() {
+        super();
+    }
+
+    /**
+     * Constructs a new empty <code>ArrayStack</code> with an initial size.
+     * 
+     * @param initialSize  the initial size to use
+     * @throws IllegalArgumentException  if the specified initial size
+     *  is negative
+     */
+    public ArrayStack(int initialSize) {
+        super(initialSize);
+    }
+
+    /**
+     * Return <code>true</code> if this stack is currently empty.
+     * <p>
+     * This method exists for compatibility with <code>java.util.Stack</code>.
+     * New users of this class should use <code>isEmpty</code> instead.
+     * 
+     * @return true if the stack is currently empty
+     */
+    public boolean empty() {
+        return isEmpty();
+    }
+
+    /**
+     * Returns the top item off of this stack without removing it.
+     *
+     * @return the top item on the stack
+     * @throws EmptyStackException  if the stack is empty
+     */
+    public Object peek() throws EmptyStackException {
+        int n = size();
+        if (n <= 0) {
+            throw new EmptyStackException();
+        } else {
+            return get(n - 1);
+        }
+    }
+
+    /**
+     * Returns the n'th item down (zero-relative) from the top of this
+     * stack without removing it.
+     *
+     * @param n  the number of items down to go
+     * @return the n'th item on the stack, zero relative
+     * @throws EmptyStackException  if there are not enough items on the
+     *  stack to satisfy this request
+     */
+    public Object peek(int n) throws EmptyStackException {
+        int m = (size() - n) - 1;
+        if (m < 0) {
+            throw new EmptyStackException();
+        } else {
+            return get(m);
+        }
+    }
+
+    /**
+     * Pops the top item off of this stack and return it.
+     *
+     * @return the top item on the stack
+     * @throws EmptyStackException  if the stack is empty
+     */
+    public Object pop() throws EmptyStackException {
+        int n = size();
+        if (n <= 0) {
+            throw new EmptyStackException();
+        } else {
+            return remove(n - 1);
+        }
+    }
+
+    /**
+     * Pushes a new item onto the top of this stack. The pushed item is also
+     * returned. This is equivalent to calling <code>add</code>.
+     *
+     * @param item  the item to be added
+     * @return the item just pushed
+     */
+    public Object push(Object item) {
+        add(item);
+        return item;
+    }
+
+    /**
+     * Returns the one-based position of the distance from the top that the
+     * specified object exists on this stack, where the top-most element is
+     * considered to be at distance <code>1</code>.  If the object is not
+     * present on the stack, return <code>-1</code> instead.  The
+     * <code>equals()</code> method is used to compare to the items
+     * in this stack.
+     *
+     * @param object  the object to be searched for
+     * @return the 1-based depth into the stack of the object, or -1 if not found
+     */
+    public int search(Object object) {
+        int i = size() - 1;        // Current index
+        int n = 1;                 // Current distance
+        while (i >= 0) {
+            Object current = get(i);
+            if ((object == null && current == null) ||
+                (object != null && object.equals(current))) {
+                return n;
+            }
+            i--;
+            n++;
+        }
+        return -1;
+    }
+
+    /**
+     * Returns the element on the top of the stack.
+     *
+     * @return the element on the top of the stack
+     * @throws BufferUnderflowException  if the stack is empty
+     */
+    public Object get() {
+        int size = size();
+        if (size == 0) {
+            throw new BufferUnderflowException();
+        }
+        return get(size - 1);
+    }
+
+    /**
+     * Removes the element on the top of the stack.
+     *
+     * @return the removed element 
+     * @throws BufferUnderflowException  if the stack is empty
+     */
+    public Object remove() {
+        int size = size();
+        if (size == 0) {
+            throw new BufferUnderflowException();
+        }
+        return remove(size - 1);
+    }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Bag.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Bag.java
new file mode 100755
index 0000000..cc5bd9c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Bag.java
@@ -0,0 +1,221 @@
+/*
+ *  Copyright 2001-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Defines a collection that counts the number of times an object appears in
+ * the collection.
+ * <p>
+ * Suppose you have a Bag that contains <code>{a, a, b, c}</code>.
+ * Calling {@link #getCount(Object)} on <code>a</code> would return 2, while
+ * calling {@link #uniqueSet()} would return <code>{a, b, c}</code>.
+ * <p>
+ * <i>NOTE: This interface violates the {@link Collection} contract.</i> 
+ * The behavior specified in many of these methods is <i>not</i> the same
+ * as the behavior specified by <code>Collection</code>.
+ * The noncompliant methods are clearly marked with "(Violation)".
+ * Exercise caution when using a bag as a <code>Collection</code>.
+ * <p>
+ * This violation resulted from the original specification of this interface.
+ * In an ideal world, the interface would be changed to fix the problems, however
+ * it has been decided to maintain backwards compatibility instead.
+ *
+ * @since Commons Collections 2.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ * 
+ * @author Chuck Burdick
+ * @author Stephen Colebourne
+ */
+public interface Bag extends Collection {
+
+    /**
+     * Returns the number of occurrences (cardinality) of the given
+     * object currently in the bag. If the object does not exist in the
+     * bag, return 0.
+     * 
+     * @param object  the object to search for
+     * @return the number of occurrences of the object, zero if not found
+     */
+    int getCount(Object object);
+
+    /**
+     * <i>(Violation)</i>
+     * Adds one copy the specified object to the Bag.
+     * <p>
+     * If the object is already in the {@link #uniqueSet()} then increment its
+     * count as reported by {@link #getCount(Object)}. Otherwise add it to the
+     * {@link #uniqueSet()} and report its count as 1.
+     * <p>
+     * Since this method always increases the size of the bag,
+     * according to the {@link Collection#add(Object)} contract, it 
+     * should always return <code>true</code>.  Since it sometimes returns
+     * <code>false</code>, this method violates the contract.
+     *
+     * @param object  the object to add
+     * @return <code>true</code> if the object was not already in the <code>uniqueSet</code>
+     */
+    boolean add(Object object);
+
+    /**
+     * Adds <code>nCopies</code> copies of the specified object to the Bag.
+     * <p>
+     * If the object is already in the {@link #uniqueSet()} then increment its
+     * count as reported by {@link #getCount(Object)}. Otherwise add it to the
+     * {@link #uniqueSet()} and report its count as <code>nCopies</code>.
+     * 
+     * @param object  the object to add
+     * @param nCopies  the number of copies to add
+     * @return <code>true</code> if the object was not already in the <code>uniqueSet</code>
+     */
+    boolean add(Object object, int nCopies);
+
+    /**
+     * <i>(Violation)</i>
+     * Removes all occurrences of the given object from the bag.
+     * <p>
+     * This will also remove the object from the {@link #uniqueSet()}.
+     * <p>
+     * According to the {@link Collection#remove(Object)} method,
+     * this method should only remove the <i>first</i> occurrence of the
+     * given object, not <i>all</i> occurrences.
+     *
+     * @return <code>true</code> if this call changed the collection
+     */
+    boolean remove(Object object);
+
+    /**
+     * Removes <code>nCopies</code> copies of the specified object from the Bag.
+     * <p>
+     * If the number of copies to remove is greater than the actual number of
+     * copies in the Bag, no error is thrown.
+     * 
+     * @param object  the object to remove
+     * @param nCopies  the number of copies to remove
+     * @return <code>true</code> if this call changed the collection
+     */
+    boolean remove(Object object, int nCopies);
+
+    /**
+     * Returns a {@link Set} of unique elements in the Bag.
+     * <p>
+     * Uniqueness constraints are the same as those in {@link java.util.Set}.
+     * 
+     * @return the Set of unique Bag elements
+     */
+    Set uniqueSet();
+
+    /**
+     * Returns the total number of items in the bag across all types.
+     * 
+     * @return the total size of the Bag
+     */
+    int size();
+
+    /**
+     * <i>(Violation)</i>
+     * Returns <code>true</code> if the bag contains all elements in
+     * the given collection, respecting cardinality.  That is, if the
+     * given collection <code>coll</code> contains <code>n</code> copies
+     * of a given object, calling {@link #getCount(Object)} on that object must
+     * be <code>&gt;= n</code> for all <code>n</code> in <code>coll</code>.
+     * <p>
+     * The {@link Collection#containsAll(Collection)} method specifies
+     * that cardinality should <i>not</i> be respected; this method should
+     * return true if the bag contains at least one of every object contained
+     * in the given collection.
+     * 
+     * @param coll  the collection to check against
+     * @return <code>true</code> if the Bag contains all the collection
+     */
+    boolean containsAll(Collection coll);
+
+    /**
+     * <i>(Violation)</i>
+     * Remove all elements represented in the given collection,
+     * respecting cardinality.  That is, if the given collection
+     * <code>coll</code> contains <code>n</code> copies of a given object,
+     * the bag will have <code>n</code> fewer copies, assuming the bag
+     * had at least <code>n</code> copies to begin with.
+     *
+     * <P>The {@link Collection#removeAll(Collection)} method specifies
+     * that cardinality should <i>not</i> be respected; this method should
+     * remove <i>all</i> occurrences of every object contained in the 
+     * given collection.
+     *
+     * @param coll  the collection to remove
+     * @return <code>true</code> if this call changed the collection
+     */
+    boolean removeAll(Collection coll);
+
+    /**
+     * <i>(Violation)</i>
+     * Remove any members of the bag that are not in the given
+     * collection, respecting cardinality.  That is, if the given
+     * collection <code>coll</code> contains <code>n</code> copies of a
+     * given object and the bag has <code>m &gt; n</code> copies, then
+     * delete <code>m - n</code> copies from the bag.  In addition, if
+     * <code>e</code> is an object in the bag but
+     * <code>!coll.contains(e)</code>, then remove <code>e</code> and any
+     * of its copies.
+     *
+     * <P>The {@link Collection#retainAll(Collection)} method specifies
+     * that cardinality should <i>not</i> be respected; this method should
+     * keep <i>all</i> occurrences of every object contained in the 
+     * given collection.
+     *
+     * @param coll  the collection to retain
+     * @return <code>true</code> if this call changed the collection
+     */
+    boolean retainAll(Collection coll);
+
+    /**
+     * Returns an {@link Iterator} over the entire set of members,
+     * including copies due to cardinality. This iterator is fail-fast
+     * and will not tolerate concurrent modifications.
+     * 
+     * @return iterator over all elements in the Bag
+     */
+    Iterator iterator();
+
+    // The following is not part of the formal Bag interface, however where possible
+    // Bag implementations should follow these comments.
+//    /**
+//     * Compares this Bag to another.
+//     * This Bag equals another Bag if it contains the same number of occurrences of
+//     * the same elements.
+//     * This equals definition is compatible with the Set interface.
+//     * 
+//     * @param obj  the Bag to compare to
+//     * @return true if equal
+//     */
+//    boolean equals(Object obj);
+//
+//    /**
+//     * Gets a hash code for the Bag compatible with the definition of equals.
+//     * The hash code is defined as the sum total of a hash code for each element.
+//     * The per element hash code is defined as
+//     * <code>(e==null ? 0 : e.hashCode()) ^ noOccurances)</code>.
+//     * This hash code definition is compatible with the Set interface.
+//     * 
+//     * @return the hash code of the Bag
+//     */
+//    int hashCode();
+    
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BagUtils.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BagUtils.java
new file mode 100755
index 0000000..9ad377c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BagUtils.java
@@ -0,0 +1,243 @@
+/*
+ *  Copyright 2002-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import org.apache.commons.collections.bag.HashBag;
+import org.apache.commons.collections.bag.PredicatedBag;
+import org.apache.commons.collections.bag.PredicatedSortedBag;
+import org.apache.commons.collections.bag.SynchronizedBag;
+import org.apache.commons.collections.bag.SynchronizedSortedBag;
+import org.apache.commons.collections.bag.TransformedBag;
+import org.apache.commons.collections.bag.TransformedSortedBag;
+import org.apache.commons.collections.bag.TreeBag;
+import org.apache.commons.collections.bag.TypedBag;
+import org.apache.commons.collections.bag.TypedSortedBag;
+import org.apache.commons.collections.bag.UnmodifiableBag;
+import org.apache.commons.collections.bag.UnmodifiableSortedBag;
+
+/**
+ * Provides utility methods and decorators for
+ * {@link Bag} and {@link SortedBag} instances.
+ *
+ * @since Commons Collections 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ * 
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ * @author Andrew Freeman
+ * @author Matthew Hawthorne
+ */
+public class BagUtils {
+
+    /**
+     * An empty unmodifiable bag.
+     */
+    public static final Bag EMPTY_BAG = UnmodifiableBag.decorate(new HashBag());
+
+    /**
+     * An empty unmodifiable sorted bag.
+     */
+    public static final Bag EMPTY_SORTED_BAG = UnmodifiableSortedBag.decorate(new TreeBag());
+
+    /**
+     * Instantiation of BagUtils is not intended or required.
+     * However, some tools require an instance to operate.
+     */
+    public BagUtils() {
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Returns a synchronized (thread-safe) bag backed by the given bag.
+     * In order to guarantee serial access, it is critical that all 
+     * access to the backing bag is accomplished through the returned bag.
+     * <p>
+     * It is imperative that the user manually synchronize on the returned
+     * bag when iterating over it:
+     *
+     * <pre>
+     * Bag bag = BagUtils.synchronizedBag(new HashBag());
+     * ...
+     * synchronized(bag) {
+     *     Iterator i = bag.iterator(); // Must be in synchronized block
+     *     while (i.hasNext())
+     *         foo(i.next());
+     *     }
+     * }
+     * </pre>
+     *
+     * Failure to follow this advice may result in non-deterministic 
+     * behavior.
+     *
+     * @param bag  the bag to synchronize, must not be null
+     * @return a synchronized bag backed by that bag
+     * @throws IllegalArgumentException  if the Bag is null
+     */
+    public static Bag synchronizedBag(Bag bag) {
+        return SynchronizedBag.decorate(bag);
+    }
+
+    /**
+     * Returns an unmodifiable view of the given bag.  Any modification
+     * attempts to the returned bag will raise an 
+     * {@link UnsupportedOperationException}.
+     *
+     * @param bag  the bag whose unmodifiable view is to be returned, must not be null
+     * @return an unmodifiable view of that bag
+     * @throws IllegalArgumentException  if the Bag is null
+     */
+    public static Bag unmodifiableBag(Bag bag) {
+        return UnmodifiableBag.decorate(bag);
+    }
+    
+    /**
+     * Returns a predicated (validating) bag backed by the given bag.
+     * <p>
+     * Only objects that pass the test in the given predicate can be added to the bag.
+     * Trying to add an invalid object results in an IllegalArgumentException.
+     * It is important not to use the original bag after invoking this method,
+     * as it is a backdoor for adding invalid objects.
+     *
+     * @param bag  the bag to predicate, must not be null
+     * @param predicate  the predicate for the bag, must not be null
+     * @return a predicated bag backed by the given bag
+     * @throws IllegalArgumentException  if the Bag or Predicate is null
+     */
+    public static Bag predicatedBag(Bag bag, Predicate predicate) {
+        return PredicatedBag.decorate(bag, predicate);
+    }
+    
+    /**
+     * Returns a typed bag backed by the given bag.
+     * <p>
+     * Only objects of the specified type can be added to the bag.
+     * 
+     * @param bag  the bag to limit to a specific type, must not be null
+     * @param type  the type of objects which may be added to the bag
+     * @return a typed bag backed by the specified bag
+     */
+    public static Bag typedBag(Bag bag, Class type) {
+        return TypedBag.decorate(bag, type);
+    }
+    
+    /**
+     * Returns a transformed bag backed by the given bag.
+     * <p>
+     * Each object is passed through the transformer as it is added to the
+     * Bag. It is important not to use the original bag after invoking this 
+     * method, as it is a backdoor for adding untransformed objects.
+     *
+     * @param bag  the bag to predicate, must not be null
+     * @param transformer  the transformer for the bag, must not be null
+     * @return a transformed bag backed by the given bag
+     * @throws IllegalArgumentException  if the Bag or Transformer is null
+     */
+    public static Bag transformedBag(Bag bag, Transformer transformer) {
+        return TransformedBag.decorate(bag, transformer);
+    }
+    
+    //-----------------------------------------------------------------------
+    /**
+     * Returns a synchronized (thread-safe) sorted bag backed by the given 
+     * sorted bag.
+     * In order to guarantee serial access, it is critical that all 
+     * access to the backing bag is accomplished through the returned bag.
+     * <p>
+     * It is imperative that the user manually synchronize on the returned
+     * bag when iterating over it:
+     *
+     * <pre>
+     * SortedBag bag = BagUtils.synchronizedSortedBag(new TreeBag());
+     * ...
+     * synchronized(bag) {
+     *     Iterator i = bag.iterator(); // Must be in synchronized block
+     *     while (i.hasNext())
+     *         foo(i.next());
+     *     }
+     * }
+     * </pre>
+     *
+     * Failure to follow this advice may result in non-deterministic 
+     * behavior.
+     *
+     * @param bag  the bag to synchronize, must not be null
+     * @return a synchronized bag backed by that bag
+     * @throws IllegalArgumentException  if the SortedBag is null
+     */
+    public static SortedBag synchronizedSortedBag(SortedBag bag) {
+        return SynchronizedSortedBag.decorate(bag);
+    }
+    
+    /**
+     * Returns an unmodifiable view of the given sorted bag.  Any modification
+     * attempts to the returned bag will raise an 
+     * {@link UnsupportedOperationException}.
+     *
+     * @param bag  the bag whose unmodifiable view is to be returned, must not be null
+     * @return an unmodifiable view of that bag
+     * @throws IllegalArgumentException  if the SortedBag is null
+     */
+    public static SortedBag unmodifiableSortedBag(SortedBag bag) {
+        return UnmodifiableSortedBag.decorate(bag);
+    }
+    
+    /**
+     * Returns a predicated (validating) sorted bag backed by the given sorted bag.
+     * <p>
+     * Only objects that pass the test in the given predicate can be added to the bag.
+     * Trying to add an invalid object results in an IllegalArgumentException.
+     * It is important not to use the original bag after invoking this method,
+     * as it is a backdoor for adding invalid objects.
+     *
+     * @param bag  the sorted bag to predicate, must not be null
+     * @param predicate  the predicate for the bag, must not be null
+     * @return a predicated bag backed by the given bag
+     * @throws IllegalArgumentException  if the SortedBag or Predicate is null
+     */
+    public static SortedBag predicatedSortedBag(SortedBag bag, Predicate predicate) {
+        return PredicatedSortedBag.decorate(bag, predicate);
+    }
+    
+    /**
+     * Returns a typed sorted bag backed by the given bag.
+     * <p>
+     * Only objects of the specified type can be added to the bag.
+     * 
+     * @param bag  the bag to limit to a specific type, must not be null
+     * @param type  the type of objects which may be added to the bag
+     * @return a typed bag backed by the specified bag
+     */
+    public static SortedBag typedSortedBag(SortedBag bag, Class type) {
+        return TypedSortedBag.decorate(bag, type);
+    }
+    
+    /**
+     * Returns a transformed sorted bag backed by the given bag.
+     * <p>
+     * Each object is passed through the transformer as it is added to the
+     * Bag. It is important not to use the original bag after invoking this 
+     * method, as it is a backdoor for adding untransformed objects.
+     *
+     * @param bag  the bag to predicate, must not be null
+     * @param transformer  the transformer for the bag, must not be null
+     * @return a transformed bag backed by the given bag
+     * @throws IllegalArgumentException  if the Bag or Transformer is null
+     */
+    public static SortedBag transformedSortedBag(SortedBag bag, Transformer transformer) {
+        return TransformedSortedBag.decorate(bag, transformer);
+    }
+    
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BeanMap.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BeanMap.java
new file mode 100755
index 0000000..42be963
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BeanMap.java
@@ -0,0 +1,803 @@
+/*
+ *  Copyright 2001-2005 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.commons.collections.list.UnmodifiableList;
+import org.apache.commons.collections.keyvalue.AbstractMapEntry;
+import org.apache.commons.collections.set.UnmodifiableSet;
+
+/** 
+ * An implementation of Map for JavaBeans which uses introspection to
+ * get and put properties in the bean.
+ * <p>
+ * If an exception occurs during attempts to get or set a property then the
+ * property is considered non existent in the Map
+ *
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ * 
+ * @author James Strachan
+ * @author Stephen Colebourne
+ * @author Dimiter Dimitrov
+ * 
+ * @deprecated Identical class now available in commons-beanutils (full jar version).
+ * This version is due to be removed in collections v4.0.
+ */
+public class BeanMap extends AbstractMap implements Cloneable {
+
+    private transient Object bean;
+
+    private transient HashMap readMethods = new HashMap();
+    private transient HashMap writeMethods = new HashMap();
+    private transient HashMap types = new HashMap();
+
+    /**
+     * An empty array.  Used to invoke accessors via reflection.
+     */
+    public static final Object[] NULL_ARGUMENTS = {};
+
+    /**
+     * Maps primitive Class types to transformers.  The transformer
+     * transform strings into the appropriate primitive wrapper.
+     */
+    public static HashMap defaultTransformers = new HashMap();
+    
+    static {
+        defaultTransformers.put( 
+            Boolean.TYPE, 
+            new Transformer() {
+                public Object transform( Object input ) {
+                    return Boolean.valueOf( input.toString() );
+                }
+            }
+        );
+        defaultTransformers.put( 
+            Character.TYPE, 
+            new Transformer() {
+                public Object transform( Object input ) {
+                    return new Character( input.toString().charAt( 0 ) );
+                }
+            }
+        );
+        defaultTransformers.put( 
+            Byte.TYPE, 
+            new Transformer() {
+                public Object transform( Object input ) {
+                    return Byte.valueOf( input.toString() );
+                }
+            }
+        );
+        defaultTransformers.put( 
+            Short.TYPE, 
+            new Transformer() {
+                public Object transform( Object input ) {
+                    return Short.valueOf( input.toString() );
+                }
+            }
+        );
+        defaultTransformers.put( 
+            Integer.TYPE, 
+            new Transformer() {
+                public Object transform( Object input ) {
+                    return Integer.valueOf( input.toString() );
+                }
+            }
+        );
+        defaultTransformers.put( 
+            Long.TYPE, 
+            new Transformer() {
+                public Object transform( Object input ) {
+                    return Long.valueOf( input.toString() );
+                }
+            }
+        );
+        defaultTransformers.put( 
+            Float.TYPE, 
+            new Transformer() {
+                public Object transform( Object input ) {
+                    return Float.valueOf( input.toString() );
+                }
+            }
+        );
+        defaultTransformers.put( 
+            Double.TYPE, 
+            new Transformer() {
+                public Object transform( Object input ) {
+                    return Double.valueOf( input.toString() );
+                }
+            }
+        );
+    }
+    
+    
+    // Constructors
+    //-------------------------------------------------------------------------
+
+    /**
+     * Constructs a new empty <code>BeanMap</code>.
+     */
+    public BeanMap() {
+    }
+
+    /**
+     * Constructs a new <code>BeanMap</code> that operates on the 
+     * specified bean.  If the given bean is <code>null</code>, then
+     * this map will be empty.
+     *
+     * @param bean  the bean for this map to operate on
+     */
+    public BeanMap(Object bean) {
+        this.bean = bean;
+        initialise();
+    }
+
+    // Map interface
+    //-------------------------------------------------------------------------
+
+    public String toString() {
+        return "BeanMap<" + String.valueOf(bean) + ">";
+    }
+    
+    /**
+     * Clone this bean map using the following process: 
+     *
+     * <ul>
+     * <li>If there is no underlying bean, return a cloned BeanMap without a
+     * bean.
+     *
+     * <li>Since there is an underlying bean, try to instantiate a new bean of
+     * the same type using Class.newInstance().
+     * 
+     * <li>If the instantiation fails, throw a CloneNotSupportedException
+     *
+     * <li>Clone the bean map and set the newly instantiated bean as the
+     * underlying bean for the bean map.
+     *
+     * <li>Copy each property that is both readable and writable from the
+     * existing object to a cloned bean map.  
+     *
+     * <li>If anything fails along the way, throw a
+     * CloneNotSupportedException.
+     *
+     * <ul>
+     */
+    public Object clone() throws CloneNotSupportedException {
+        BeanMap newMap = (BeanMap)super.clone();
+
+        if(bean == null) {
+            // no bean, just an empty bean map at the moment.  return a newly
+            // cloned and empty bean map.
+            return newMap;
+        }
+
+        Object newBean = null;            
+        Class beanClass = null;
+        try {
+            beanClass = bean.getClass();
+            newBean = beanClass.newInstance();
+        } catch (Exception e) {
+            // unable to instantiate
+            throw new CloneNotSupportedException
+                ("Unable to instantiate the underlying bean \"" +
+                 beanClass.getName() + "\": " + e);
+        }
+            
+        try {
+            newMap.setBean(newBean);
+        } catch (Exception exception) {
+            throw new CloneNotSupportedException
+                ("Unable to set bean in the cloned bean map: " + 
+                 exception);
+        }
+            
+        try {
+            // copy only properties that are readable and writable.  If its
+            // not readable, we can't get the value from the old map.  If
+            // its not writable, we can't write a value into the new map.
+            Iterator readableKeys = readMethods.keySet().iterator();
+            while(readableKeys.hasNext()) {
+                Object key = readableKeys.next();
+                if(getWriteMethod(key) != null) {
+                    newMap.put(key, get(key));
+                }
+            }
+        } catch (Exception exception) {
+            throw new CloneNotSupportedException
+                ("Unable to copy bean values to cloned bean map: " +
+                 exception);
+        }
+
+        return newMap;
+    }
+
+    /**
+     * Puts all of the writable properties from the given BeanMap into this
+     * BeanMap. Read-only and Write-only properties will be ignored.
+     *
+     * @param map  the BeanMap whose properties to put
+     */
+    public void putAllWriteable(BeanMap map) {
+        Iterator readableKeys = map.readMethods.keySet().iterator();
+        while (readableKeys.hasNext()) {
+            Object key = readableKeys.next();
+            if (getWriteMethod(key) != null) {
+                this.put(key, map.get(key));
+            }
+        }
+    }
+
+
+    /**
+     * This method reinitializes the bean map to have default values for the
+     * bean's properties.  This is accomplished by constructing a new instance
+     * of the bean which the map uses as its underlying data source.  This
+     * behavior for <code>clear()</code> differs from the Map contract in that
+     * the mappings are not actually removed from the map (the mappings for a
+     * BeanMap are fixed).
+     */
+    public void clear() {
+        if(bean == null) return;
+
+        Class beanClass = null;
+        try {
+            beanClass = bean.getClass();
+            bean = beanClass.newInstance();
+        }
+        catch (Exception e) {
+            throw new UnsupportedOperationException( "Could not create new instance of class: " + beanClass );
+        }
+    }
+
+    /**
+     * Returns true if the bean defines a property with the given name.
+     * <p>
+     * The given name must be a <code>String</code>; if not, this method
+     * returns false. This method will also return false if the bean
+     * does not define a property with that name.
+     * <p>
+     * Write-only properties will not be matched as the test operates against
+     * property read methods.
+     *
+     * @param name  the name of the property to check
+     * @return false if the given name is null or is not a <code>String</code>;
+     *   false if the bean does not define a property with that name; or
+     *   true if the bean does define a property with that name
+     */
+    public boolean containsKey(Object name) {
+        Method method = getReadMethod(name);
+        return method != null;
+    }
+
+    /**
+     * Returns true if the bean defines a property whose current value is
+     * the given object.
+     *
+     * @param value  the value to check
+     * @return false  true if the bean has at least one property whose 
+     *   current value is that object, false otherwise
+     */
+    public boolean containsValue(Object value) {
+        // use default implementation
+        return super.containsValue(value);
+    }
+
+    /**
+     * Returns the value of the bean's property with the given name.
+     * <p>
+     * The given name must be a {@link String} and must not be 
+     * null; otherwise, this method returns <code>null</code>.
+     * If the bean defines a property with the given name, the value of
+     * that property is returned.  Otherwise, <code>null</code> is 
+     * returned.
+     * <p>
+     * Write-only properties will not be matched as the test operates against
+     * property read methods.
+     *
+     * @param name  the name of the property whose value to return
+     * @return  the value of the property with that name
+     */
+    public Object get(Object name) {
+        if ( bean != null ) {
+            Method method = getReadMethod( name );
+            if ( method != null ) {
+                try {
+                    return method.invoke( bean, NULL_ARGUMENTS );
+                }
+                catch (  IllegalAccessException e ) {
+                    logWarn( e );
+                }
+                catch ( IllegalArgumentException e ) {
+                    logWarn(  e );
+                }
+                catch ( InvocationTargetException e ) {
+                    logWarn(  e );
+                }
+                catch ( NullPointerException e ) {
+                    logWarn(  e );
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Sets the bean property with the given name to the given value.
+     *
+     * @param name  the name of the property to set
+     * @param value  the value to set that property to
+     * @return  the previous value of that property
+     * @throws IllegalArgumentException  if the given name is null;
+     *   if the given name is not a {@link String}; if the bean doesn't
+     *   define a property with that name; or if the bean property with
+     *   that name is read-only
+     */
+    public Object put(Object name, Object value) throws IllegalArgumentException, ClassCastException {
+        if ( bean != null ) {
+            Object oldValue = get( name );
+            Method method = getWriteMethod( name );
+            if ( method == null ) {
+                throw new IllegalArgumentException( "The bean of type: "+ bean.getClass().getName() + " has no property called: " + name );
+            }
+            try {
+                Object[] arguments = createWriteMethodArguments( method, value );
+                method.invoke( bean, arguments );
+
+                Object newValue = get( name );
+                firePropertyChange( name, oldValue, newValue );
+            }
+            catch ( InvocationTargetException e ) {
+                logInfo( e );
+                throw new IllegalArgumentException( e.getMessage() );
+            }
+            catch ( IllegalAccessException e ) {
+                logInfo( e );
+                throw new IllegalArgumentException( e.getMessage() );
+            }
+            return oldValue;
+        }
+        return null;
+    }
+                    
+    /**
+     * Returns the number of properties defined by the bean.
+     *
+     * @return  the number of properties defined by the bean
+     */
+    public int size() {
+        return readMethods.size();
+    }
+
+    
+    /**
+     * Get the keys for this BeanMap.
+     * <p>
+     * Write-only properties are <b>not</b> included in the returned set of
+     * property names, although it is possible to set their value and to get 
+     * their type.
+     * 
+     * @return BeanMap keys.  The Set returned by this method is not
+     *        modifiable.
+     */
+    public Set keySet() {
+        return UnmodifiableSet.decorate(readMethods.keySet());
+    }
+
+    /**
+     * Gets a Set of MapEntry objects that are the mappings for this BeanMap.
+     * <p>
+     * Each MapEntry can be set but not removed.
+     * 
+     * @return the unmodifiable set of mappings
+     */
+    public Set entrySet() {
+        return UnmodifiableSet.decorate(new AbstractSet() {
+            public Iterator iterator() {
+                return entryIterator();
+            }
+            public int size() {
+              return BeanMap.this.readMethods.size();
+            }
+        });
+    }
+
+    /**
+     * Returns the values for the BeanMap.
+     * 
+     * @return values for the BeanMap.  The returned collection is not
+     *        modifiable.
+     */
+    public Collection values() {
+        ArrayList answer = new ArrayList( readMethods.size() );
+        for ( Iterator iter = valueIterator(); iter.hasNext(); ) {
+            answer.add( iter.next() );
+        }
+        return UnmodifiableList.decorate(answer);
+    }
+
+
+    // Helper methods
+    //-------------------------------------------------------------------------
+
+    /**
+     * Returns the type of the property with the given name.
+     *
+     * @param name  the name of the property
+     * @return  the type of the property, or <code>null</code> if no such
+     *  property exists
+     */
+    public Class getType(String name) {
+        return (Class) types.get( name );
+    }
+
+    /**
+     * Convenience method for getting an iterator over the keys.
+     * <p>
+     * Write-only properties will not be returned in the iterator.
+     *
+     * @return an iterator over the keys
+     */
+    public Iterator keyIterator() {
+        return readMethods.keySet().iterator();
+    }
+
+    /**
+     * Convenience method for getting an iterator over the values.
+     *
+     * @return an iterator over the values
+     */
+    public Iterator valueIterator() {
+        final Iterator iter = keyIterator();
+        return new Iterator() {            
+            public boolean hasNext() {
+                return iter.hasNext();
+            }
+            public Object next() {
+                Object key = iter.next();
+                return get(key);
+            }
+            public void remove() {
+                throw new UnsupportedOperationException( "remove() not supported for BeanMap" );
+            }
+        };
+    }
+
+    /**
+     * Convenience method for getting an iterator over the entries.
+     *
+     * @return an iterator over the entries
+     */
+    public Iterator entryIterator() {
+        final Iterator iter = keyIterator();
+        return new Iterator() {            
+            public boolean hasNext() {
+                return iter.hasNext();
+            }            
+            public Object next() {
+                Object key = iter.next();
+                Object value = get(key);
+                return new MyMapEntry( BeanMap.this, key, value );
+            }            
+            public void remove() {
+                throw new UnsupportedOperationException( "remove() not supported for BeanMap" );
+            }
+        };
+    }
+
+
+    // Properties
+    //-------------------------------------------------------------------------
+
+    /**
+     * Returns the bean currently being operated on.  The return value may
+     * be null if this map is empty.
+     *
+     * @return the bean being operated on by this map
+     */
+    public Object getBean() {
+        return bean;
+    }
+
+    /**
+     * Sets the bean to be operated on by this map.  The given value may
+     * be null, in which case this map will be empty.
+     *
+     * @param newBean  the new bean to operate on
+     */
+    public void setBean( Object newBean ) {
+        bean = newBean;
+        reinitialise();
+    }
+
+    /**
+     * Returns the accessor for the property with the given name.
+     *
+     * @param name  the name of the property 
+     * @return the accessor method for the property, or null
+     */
+    public Method getReadMethod(String name) {
+        return (Method) readMethods.get(name);
+    }
+
+    /**
+     * Returns the mutator for the property with the given name.
+     *
+     * @param name  the name of the property
+     * @return the mutator method for the property, or null
+     */
+    public Method getWriteMethod(String name) {
+        return (Method) writeMethods.get(name);
+    }
+
+
+    // Implementation methods
+    //-------------------------------------------------------------------------
+
+    /**
+     * Returns the accessor for the property with the given name.
+     *
+     * @param name  the name of the property 
+     * @return null if the name is null; null if the name is not a 
+     * {@link String}; null if no such property exists; or the accessor
+     *  method for that property
+     */
+    protected Method getReadMethod( Object name ) {
+        return (Method) readMethods.get( name );
+    }
+
+    /**
+     * Returns the mutator for the property with the given name.
+     *
+     * @param name  the name of the 
+     * @return null if the name is null; null if the name is not a 
+     * {@link String}; null if no such property exists; null if the 
+     * property is read-only; or the mutator method for that property
+     */
+    protected Method getWriteMethod( Object name ) {
+        return (Method) writeMethods.get( name );
+    }
+
+    /**
+     * Reinitializes this bean.  Called during {@link #setBean(Object)}.
+     * Does introspection to find properties.
+     */
+    protected void reinitialise() {
+        readMethods.clear();
+        writeMethods.clear();
+        types.clear();
+        initialise();
+    }
+
+    private void initialise() {
+        if(getBean() == null) return;
+
+        Class  beanClass = getBean().getClass();
+        try {
+            //BeanInfo beanInfo = Introspector.getBeanInfo( bean, null );
+            BeanInfo beanInfo = Introspector.getBeanInfo( beanClass );
+            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+            if ( propertyDescriptors != null ) {
+                for ( int i = 0; i < propertyDescriptors.length; i++ ) {
+                    PropertyDescriptor propertyDescriptor = propertyDescriptors[i];
+                    if ( propertyDescriptor != null ) {
+                        String name = propertyDescriptor.getName();
+                        Method readMethod = propertyDescriptor.getReadMethod();
+                        Method writeMethod = propertyDescriptor.getWriteMethod();
+                        Class aType = propertyDescriptor.getPropertyType();
+
+                        if ( readMethod != null ) {
+                            readMethods.put( name, readMethod );
+                        }
+                        if ( writeMethod != null ) {
+                            writeMethods.put( name, writeMethod );
+                        }
+                        types.put( name, aType );
+                    }
+                }
+            }
+        }
+        catch ( IntrospectionException e ) {
+            logWarn(  e );
+        }
+    }
+
+    /**
+     * Called during a successful {@link #put(Object,Object)} operation.
+     * Default implementation does nothing.  Override to be notified of
+     * property changes in the bean caused by this map.
+     *
+     * @param key  the name of the property that changed
+     * @param oldValue  the old value for that property
+     * @param newValue  the new value for that property
+     */
+    protected void firePropertyChange( Object key, Object oldValue, Object newValue ) {
+    }
+
+    // Implementation classes
+    //-------------------------------------------------------------------------
+
+    /**
+     * Map entry used by {@link BeanMap}.
+     */
+    protected static class MyMapEntry extends AbstractMapEntry {        
+        private BeanMap owner;
+        
+        /**
+         * Constructs a new <code>MyMapEntry</code>.
+         *
+         * @param owner  the BeanMap this entry belongs to
+         * @param key  the key for this entry
+         * @param value  the value for this entry
+         */
+        protected MyMapEntry( BeanMap owner, Object key, Object value ) {
+            super( key, value );
+            this.owner = owner;
+        }
+
+        /**
+         * Sets the value.
+         *
+         * @param value  the new value for the entry
+         * @return the old value for the entry
+         */
+        public Object setValue(Object value) {
+            Object key = getKey();
+            Object oldValue = owner.get( key );
+
+            owner.put( key, value );
+            Object newValue = owner.get( key );
+            super.setValue( newValue );
+            return oldValue;
+        }
+    }
+
+    /**
+     * Creates an array of parameters to pass to the given mutator method.
+     * If the given object is not the right type to pass to the method 
+     * directly, it will be converted using {@link #convertType(Class,Object)}.
+     *
+     * @param method  the mutator method
+     * @param value  the value to pass to the mutator method
+     * @return an array containing one object that is either the given value
+     *   or a transformed value
+     * @throws IllegalAccessException if {@link #convertType(Class,Object)}
+     *   raises it
+     * @throws IllegalArgumentException if any other exception is raised
+     *   by {@link #convertType(Class,Object)}
+     */
+    protected Object[] createWriteMethodArguments( Method method, Object value ) throws IllegalAccessException, ClassCastException {            
+        try {
+            if ( value != null ) {
+                Class[] types = method.getParameterTypes();
+                if ( types != null && types.length > 0 ) {
+                    Class paramType = types[0];
+                    if ( ! paramType.isAssignableFrom( value.getClass() ) ) {
+                        value = convertType( paramType, value );
+                    }
+                }
+            }
+            Object[] answer = { value };
+            return answer;
+        }
+        catch ( InvocationTargetException e ) {
+            logInfo( e );
+            throw new IllegalArgumentException( e.getMessage() );
+        }
+        catch ( InstantiationException e ) {
+            logInfo( e );
+            throw new IllegalArgumentException( e.getMessage() );
+        }
+    }
+
+    /**
+     * Converts the given value to the given type.  First, reflection is
+     * is used to find a public constructor declared by the given class 
+     * that takes one argument, which must be the precise type of the 
+     * given value.  If such a constructor is found, a new object is
+     * created by passing the given value to that constructor, and the
+     * newly constructed object is returned.<P>
+     *
+     * If no such constructor exists, and the given type is a primitive
+     * type, then the given value is converted to a string using its 
+     * {@link Object#toString() toString()} method, and that string is
+     * parsed into the correct primitive type using, for instance, 
+     * {@link Integer#valueOf(String)} to convert the string into an
+     * <code>int</code>.<P>
+     *
+     * If no special constructor exists and the given type is not a 
+     * primitive type, this method returns the original value.
+     *
+     * @param newType  the type to convert the value to
+     * @param value  the value to convert
+     * @return the converted value
+     * @throws NumberFormatException if newType is a primitive type, and 
+     *  the string representation of the given value cannot be converted
+     *  to that type
+     * @throws InstantiationException  if the constructor found with 
+     *  reflection raises it
+     * @throws InvocationTargetException  if the constructor found with
+     *  reflection raises it
+     * @throws IllegalAccessException  never
+     * @throws IllegalArgumentException  never
+     */
+    protected Object convertType( Class newType, Object value ) 
+        throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+        
+        // try call constructor
+        Class[] types = { value.getClass() };
+        try {
+            Constructor constructor = newType.getConstructor( types );        
+            Object[] arguments = { value };
+            return constructor.newInstance( arguments );
+        }
+        catch ( NoSuchMethodException e ) {
+            // try using the transformers
+            Transformer transformer = getTypeTransformer( newType );
+            if ( transformer != null ) {
+                return transformer.transform( value );
+            }
+            return value;
+        }
+    }
+
+    /**
+     * Returns a transformer for the given primitive type.
+     *
+     * @param aType  the primitive type whose transformer to return
+     * @return a transformer that will convert strings into that type,
+     *  or null if the given type is not a primitive type
+     */
+    protected Transformer getTypeTransformer( Class aType ) {
+        return (Transformer) defaultTransformers.get( aType );
+    }
+
+    /**
+     * Logs the given exception to <code>System.out</code>.  Used to display
+     * warnings while accessing/mutating the bean.
+     *
+     * @param ex  the exception to log
+     */
+    protected void logInfo(Exception ex) {
+        // Deliberately do not use LOG4J or Commons Logging to avoid dependencies
+        System.out.println( "INFO: Exception: " + ex );
+    }
+
+    /**
+     * Logs the given exception to <code>System.err</code>.  Used to display
+     * errors while accessing/mutating the bean.
+     *
+     * @param ex  the exception to log
+     */
+    protected void logWarn(Exception ex) {
+        // Deliberately do not use LOG4J or Commons Logging to avoid dependencies
+        System.out.println( "WARN: Exception: " + ex );
+        ex.printStackTrace();
+    }
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BidiMap.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BidiMap.java
new file mode 100755
index 0000000..184fee2f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BidiMap.java
@@ -0,0 +1,145 @@
+/*
+ *  Copyright 2003-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+/**
+ * Defines a map that allows bidirectional lookup between key and values.
+ * <p>
+ * This extended <code>Map</code> represents a mapping where a key may
+ * lookup a value and a value may lookup a key with equal ease.
+ * This interface extends <code>Map</code> and so may be used anywhere a map
+ * is required. The interface provides an inverse map view, enabling
+ * full access to both directions of the <code>BidiMap</code>.
+ * <p>
+ * Implementations should allow a value to be looked up from a key and
+ * a key to be looked up from a value with equal performance.
+ * <p>
+ * This map enforces the restriction that there is a 1:1 relation between
+ * keys and values, meaning that multiple keys cannot map to the same value. 
+ * This is required so that "inverting" the map results in a map without 
+ * duplicate keys. See the {@link #put} method description for more information.
+ * 
+ * @since Commons Collections 3.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Stephen Colebourne
+ */
+public interface BidiMap extends IterableMap {
+
+    /**
+     * Obtains a <code>MapIterator</code> over the map.
+     * <p>
+     * A map iterator is an efficient way of iterating over maps.
+     * It does not require that the map is stored using Map Entry objects
+     * which can increase performance.
+     * <pre>
+     * BidiMap map = new DualHashBidiMap();
+     * MapIterator it = map.mapIterator();
+     * while (it.hasNext()) {
+     *   Object key = it.next();
+     *   Object value = it.getValue();
+     *   it.setValue("newValue");
+     * }
+     * </pre>
+     * 
+     * @return a map iterator
+     */
+    MapIterator mapIterator();
+    
+    /**
+     * Puts the key-value pair into the map, replacing any previous pair.
+     * <p>
+     * When adding a key-value pair, the value may already exist in the map
+     * against a different key. That mapping is removed, to ensure that the
+     * value only occurs once in the inverse map.
+     * <pre>
+     *  BidiMap map1 = new DualHashBidiMap();
+     *  map.put("A","B");  // contains A mapped to B, as per Map
+     *  map.put("A","C");  // contains A mapped to C, as per Map
+     * 
+     *  BidiMap map2 = new DualHashBidiMap();
+     *  map.put("A","B");  // contains A mapped to B, as per Map
+     *  map.put("C","B");  // contains C mapped to B, key A is removed
+     * </pre>
+     *
+     * @param key  the key to store
+     * @param value  the value to store
+     * @return the previous value mapped to this key
+     * 
+     * @throws UnsupportedOperationException if the <code>put</code> method is not supported
+     * @throws ClassCastException (optional) if the map limits the type of the 
+     *  value and the specified value is inappropriate
+     * @throws IllegalArgumentException (optional) if the map limits the values
+     *  in some way and the value was invalid
+     * @throws NullPointerException (optional) if the map limits the values to
+     *  non-null and null was specified
+     */
+    Object put(Object key, Object value);
+    
+    /**
+     * Gets the key that is currently mapped to the specified value.
+     * <p>
+     * If the value is not contained in the map, <code>null</code> is returned.
+     * <p>
+     * Implementations should seek to make this method perform equally as well
+     * as <code>get(Object)</code>.
+     *
+     * @param value  the value to find the key for
+     * @return the mapped key, or <code>null</code> if not found
+     * 
+     * @throws ClassCastException (optional) if the map limits the type of the 
+     *  value and the specified value is inappropriate
+     * @throws NullPointerException (optional) if the map limits the values to
+     *  non-null and null was specified
+     */
+    Object getKey(Object value);
+    
+    /**
+     * Removes the key-value pair that is currently mapped to the specified
+     * value (optional operation).
+     * <p>
+     * If the value is not contained in the map, <code>null</code> is returned.
+     * <p>
+     * Implementations should seek to make this method perform equally as well
+     * as <code>remove(Object)</code>.
+     *
+     * @param value  the value to find the key-value pair for
+     * @return the key that was removed, <code>null</code> if nothing removed
+     * 
+     * @throws ClassCastException (optional) if the map limits the type of the 
+     *  value and the specified value is inappropriate
+     * @throws NullPointerException (optional) if the map limits the values to
+     *  non-null and null was specified
+     * @throws UnsupportedOperationException if this method is not supported
+     *  by the implementation
+     */
+    Object removeValue(Object value);
+    
+    /**
+     * Gets a view of this map where the keys and values are reversed.
+     * <p>
+     * Changes to one map will be visible in the other and vice versa.
+     * This enables both directions of the map to be accessed as a <code>Map</code>.
+     * <p>
+     * Implementations should seek to avoid creating a new object every time this
+     * method is called. See <code>AbstractMap.values()</code> etc. Calling this
+     * method on the inverse map should return the original.
+     *
+     * @return an inverted bidirectional map
+     */
+    BidiMap inverseBidiMap();
+    
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BinaryHeap.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BinaryHeap.java
new file mode 100755
index 0000000..9f44182
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BinaryHeap.java
@@ -0,0 +1,564 @@
+/*
+ *  Copyright 2001-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.AbstractCollection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Binary heap implementation of <code>PriorityQueue</code>.
+ * <p>
+ * The <code>PriorityQueue</code> interface has now been replaced for most uses
+ * by the <code>Buffer</code> interface. This class and the interface are
+ * retained for backwards compatibility. The intended replacement is
+ * {@link org.apache.commons.collections.buffer.PriorityBuffer PriorityBuffer}.
+ * <p>
+ * The removal order of a binary heap is based on either the natural sort
+ * order of its elements or a specified {@link Comparator}.  The 
+ * {@link #pop()} method always returns the first element as determined
+ * by the sort order.  (The <code>isMinHeap</code> flag in the constructors
+ * can be used to reverse the sort order, in which case {@link #pop()}
+ * will always remove the last element.)  The removal order is 
+ * <i>not</i> the same as the order of iteration; elements are
+ * returned by the iterator in no particular order.
+ * <p>
+ * The {@link #insert(Object)} and {@link #pop()} operations perform
+ * in logarithmic time.  The {@link #peek()} operation performs in constant
+ * time.  All other operations perform in linear time or worse.
+ * <p>
+ * Note that this implementation is not synchronized.  Use SynchronizedPriorityQueue
+ * to provide synchronized access to a <code>BinaryHeap</code>:
+ *
+ * <pre>
+ * PriorityQueue heap = new SynchronizedPriorityQueue(new BinaryHeap());
+ * </pre>
+ *
+ * @deprecated Replaced by PriorityBuffer in buffer subpackage.
+ *  Due to be removed in v4.0.
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ * 
+ * @author Peter Donald
+ * @author Ram Chidambaram
+ * @author Michael A. Smith
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public final class BinaryHeap extends AbstractCollection
+        implements PriorityQueue, Buffer {
+
+    /**
+     * The default capacity for a binary heap.
+     */
+    private final static int DEFAULT_CAPACITY = 13;
+    /**
+     * The number of elements currently in this heap.
+     */
+    int m_size;  // package scoped for testing
+    /**
+     * The elements in this heap.
+     */
+    Object[] m_elements;  // package scoped for testing
+    /**
+     * If true, the first element as determined by the sort order will 
+     * be returned.  If false, the last element as determined by the
+     * sort order will be returned.
+     */
+    boolean m_isMinHeap;  // package scoped for testing
+    /**
+     * The comparator used to order the elements
+     */
+    Comparator m_comparator;  // package scoped for testing
+
+    /**
+     * Constructs a new minimum binary heap.
+     */
+    public BinaryHeap() {
+        this(DEFAULT_CAPACITY, true);
+    }
+
+    /**
+     * Constructs a new <code>BinaryHeap</code> that will use the given
+     * comparator to order its elements.
+     * 
+     * @param comparator  the comparator used to order the elements, null
+     *  means use natural order
+     */
+    public BinaryHeap(Comparator comparator) {
+        this();
+        m_comparator = comparator;
+    }
+    
+    /**
+     * Constructs a new minimum binary heap with the specified initial capacity.
+     *  
+     * @param capacity  The initial capacity for the heap.  This value must
+     *  be greater than zero.
+     * @throws IllegalArgumentException  
+     *  if <code>capacity</code> is &lt;= <code>0</code>
+     */
+    public BinaryHeap(int capacity) {
+        this(capacity, true);
+    }
+
+    /**
+     * Constructs a new <code>BinaryHeap</code>.
+     *
+     * @param capacity  the initial capacity for the heap
+     * @param comparator  the comparator used to order the elements, null
+     *  means use natural order
+     * @throws IllegalArgumentException  
+     *  if <code>capacity</code> is &lt;= <code>0</code>
+     */
+    public BinaryHeap(int capacity, Comparator comparator) {
+        this(capacity);
+        m_comparator = comparator;
+    }
+
+    /**
+     * Constructs a new minimum or maximum binary heap
+     *
+     * @param isMinHeap  if <code>true</code> the heap is created as a 
+     * minimum heap; otherwise, the heap is created as a maximum heap
+     */
+    public BinaryHeap(boolean isMinHeap) {
+        this(DEFAULT_CAPACITY, isMinHeap);
+    }
+
+    /**
+     * Constructs a new <code>BinaryHeap</code>.
+     *
+     * @param isMinHeap  true to use the order imposed by the given 
+     *   comparator; false to reverse that order
+     * @param comparator  the comparator used to order the elements, null
+     *  means use natural order
+     */
+    public BinaryHeap(boolean isMinHeap, Comparator comparator) {
+        this(isMinHeap);
+        m_comparator = comparator;
+    }
+
+    /**
+     * Constructs a new minimum or maximum binary heap with the specified 
+     * initial capacity.
+     *
+     * @param capacity the initial capacity for the heap.  This value must 
+     * be greater than zero.
+     * @param isMinHeap if <code>true</code> the heap is created as a 
+     *  minimum heap; otherwise, the heap is created as a maximum heap.
+     * @throws IllegalArgumentException 
+     *  if <code>capacity</code> is <code>&lt;= 0</code>
+     */
+    public BinaryHeap(int capacity, boolean isMinHeap) {
+        if (capacity <= 0) {
+            throw new IllegalArgumentException("invalid capacity");
+        }
+        m_isMinHeap = isMinHeap;
+
+        //+1 as 0 is noop
+        m_elements = new Object[capacity + 1];
+    }
+
+    /**
+     * Constructs a new <code>BinaryHeap</code>.
+     *
+     * @param capacity  the initial capacity for the heap
+     * @param isMinHeap  true to use the order imposed by the given 
+     *   comparator; false to reverse that order
+     * @param comparator  the comparator used to order the elements, null
+     *  means use natural order
+     * @throws IllegalArgumentException 
+     *  if <code>capacity</code> is <code>&lt;= 0</code>
+     */
+    public BinaryHeap(int capacity, boolean isMinHeap, Comparator comparator) {
+        this(capacity, isMinHeap);
+        m_comparator = comparator;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Clears all elements from queue.
+     */
+    public void clear() {
+        m_elements = new Object[m_elements.length];  // for gc
+        m_size = 0;
+    }
+
+    /**
+     * Tests if queue is empty.
+     *
+     * @return <code>true</code> if queue is empty; <code>false</code> 
+     *  otherwise.
+     */
+    public boolean isEmpty() {
+        return m_size == 0;
+    }
+
+    /**
+     * Tests if queue is full.
+     *
+     * @return <code>true</code> if queue is full; <code>false</code>
+     *  otherwise.
+     */
+    public boolean isFull() {
+        //+1 as element 0 is noop
+        return m_elements.length == m_size + 1;
+    }
+
+    /**
+     * Inserts an element into queue.
+     *
+     * @param element  the element to be inserted
+     */
+    public void insert(Object element) {
+        if (isFull()) {
+            grow();
+        }
+        //percolate element to it's place in tree
+        if (m_isMinHeap) {
+            percolateUpMinHeap(element);
+        } else {
+            percolateUpMaxHeap(element);
+        }
+    }
+
+    /**
+     * Returns the element on top of heap but don't remove it.
+     *
+     * @return the element at top of heap
+     * @throws NoSuchElementException  if <code>isEmpty() == true</code>
+     */
+    public Object peek() throws NoSuchElementException {
+        if (isEmpty()) {
+            throw new NoSuchElementException();
+        } else {
+            return m_elements[1];
+        }
+    }
+
+    /**
+     * Returns the element on top of heap and remove it.
+     *
+     * @return the element at top of heap
+     * @throws NoSuchElementException  if <code>isEmpty() == true</code>
+     */
+    public Object pop() throws NoSuchElementException {
+        final Object result = peek();
+        m_elements[1] = m_elements[m_size--];
+
+        // set the unused element to 'null' so that the garbage collector
+        // can free the object if not used anywhere else.(remove reference)
+        m_elements[m_size + 1] = null;
+
+        if (m_size != 0) {
+            // percolate top element to it's place in tree
+            if (m_isMinHeap) {
+                percolateDownMinHeap(1);
+            } else {
+                percolateDownMaxHeap(1);
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Percolates element down heap from the position given by the index.
+     * <p>
+     * Assumes it is a minimum heap.
+     *
+     * @param index the index for the element
+     */
+    protected void percolateDownMinHeap(final int index) {
+        final Object element = m_elements[index];
+        int hole = index;
+
+        while ((hole * 2) <= m_size) {
+            int child = hole * 2;
+
+            // if we have a right child and that child can not be percolated
+            // up then move onto other child
+            if (child != m_size && compare(m_elements[child + 1], m_elements[child]) < 0) {
+                child++;
+            }
+
+            // if we found resting place of bubble then terminate search
+            if (compare(m_elements[child], element) >= 0) {
+                break;
+            }
+
+            m_elements[hole] = m_elements[child];
+            hole = child;
+        }
+
+        m_elements[hole] = element;
+    }
+
+    /**
+     * Percolates element down heap from the position given by the index.
+     * <p>
+     * Assumes it is a maximum heap.
+     *
+     * @param index the index of the element
+     */
+    protected void percolateDownMaxHeap(final int index) {
+        final Object element = m_elements[index];
+        int hole = index;
+
+        while ((hole * 2) <= m_size) {
+            int child = hole * 2;
+
+            // if we have a right child and that child can not be percolated
+            // up then move onto other child
+            if (child != m_size && compare(m_elements[child + 1], m_elements[child]) > 0) {
+                child++;
+            }
+
+            // if we found resting place of bubble then terminate search
+            if (compare(m_elements[child], element) <= 0) {
+                break;
+            }
+
+            m_elements[hole] = m_elements[child];
+            hole = child;
+        }
+
+        m_elements[hole] = element;
+    }
+
+    /**
+     * Percolates element up heap from the position given by the index.
+     * <p>
+     * Assumes it is a minimum heap.
+     *
+     * @param index the index of the element to be percolated up
+     */
+    protected void percolateUpMinHeap(final int index) {
+        int hole = index;
+        Object element = m_elements[hole];
+        while (hole > 1 && compare(element, m_elements[hole / 2]) < 0) {
+            // save element that is being pushed down
+            // as the element "bubble" is percolated up
+            final int next = hole / 2;
+            m_elements[hole] = m_elements[next];
+            hole = next;
+        }
+        m_elements[hole] = element;
+    }
+
+    /**
+     * Percolates a new element up heap from the bottom.
+     * <p>
+     * Assumes it is a minimum heap.
+     *
+     * @param element the element
+     */
+    protected void percolateUpMinHeap(final Object element) {
+        m_elements[++m_size] = element;
+        percolateUpMinHeap(m_size);
+    }
+
+    /**
+     * Percolates element up heap from from the position given by the index.
+     * <p>
+     * Assume it is a maximum heap.
+     *
+     * @param index the index of the element to be percolated up
+     */
+    protected void percolateUpMaxHeap(final int index) {
+        int hole = index;
+        Object element = m_elements[hole];
+        
+        while (hole > 1 && compare(element, m_elements[hole / 2]) > 0) {
+            // save element that is being pushed down
+            // as the element "bubble" is percolated up
+            final int next = hole / 2;
+            m_elements[hole] = m_elements[next];
+            hole = next;
+        }
+
+        m_elements[hole] = element;
+    }
+    
+    /**
+     * Percolates a new element up heap from the bottom.
+     * <p>
+     * Assume it is a maximum heap.
+     *
+     * @param element the element
+     */
+    protected void percolateUpMaxHeap(final Object element) {
+        m_elements[++m_size] = element;
+        percolateUpMaxHeap(m_size);
+    }
+    
+    /**
+     * Compares two objects using the comparator if specified, or the
+     * natural order otherwise.
+     * 
+     * @param a  the first object
+     * @param b  the second object
+     * @return -ve if a less than b, 0 if they are equal, +ve if a greater than b
+     */
+    private int compare(Object a, Object b) {
+        if (m_comparator != null) {
+            return m_comparator.compare(a, b);
+        } else {
+            return ((Comparable) a).compareTo(b);
+        }
+    }
+
+    /**
+     * Increases the size of the heap to support additional elements
+     */
+    protected void grow() {
+        final Object[] elements = new Object[m_elements.length * 2];
+        System.arraycopy(m_elements, 0, elements, 0, m_elements.length);
+        m_elements = elements;
+    }
+
+    /**
+     * Returns a string representation of this heap.  The returned string
+     * is similar to those produced by standard JDK collections.
+     *
+     * @return a string representation of this heap
+     */
+    public String toString() {
+        final StringBuffer sb = new StringBuffer();
+
+        sb.append("[ ");
+
+        for (int i = 1; i < m_size + 1; i++) {
+            if (i != 1) {
+                sb.append(", ");
+            }
+            sb.append(m_elements[i]);
+        }
+
+        sb.append(" ]");
+
+        return sb.toString();
+    }
+
+
+    /**
+     * Returns an iterator over this heap's elements.
+     *
+     * @return an iterator over this heap's elements
+     */
+    public Iterator iterator() {
+        return new Iterator() {
+
+            private int index = 1;
+            private int lastReturnedIndex = -1;
+
+            public boolean hasNext() {
+                return index <= m_size;
+            }
+
+            public Object next() {
+                if (!hasNext()) throw new NoSuchElementException();
+                lastReturnedIndex = index;
+                index++;
+                return m_elements[lastReturnedIndex];
+            }
+
+            public void remove() {
+                if (lastReturnedIndex == -1) {
+                    throw new IllegalStateException();
+                }
+                m_elements[ lastReturnedIndex ] = m_elements[ m_size ];
+                m_elements[ m_size ] = null;
+                m_size--;  
+                if( m_size != 0 && lastReturnedIndex <= m_size) {
+                    int compareToParent = 0;
+                    if (lastReturnedIndex > 1) {
+                        compareToParent = compare(m_elements[lastReturnedIndex], 
+                            m_elements[lastReturnedIndex / 2]);  
+                    }
+                    if (m_isMinHeap) {
+                        if (lastReturnedIndex > 1 && compareToParent < 0) {
+                            percolateUpMinHeap(lastReturnedIndex); 
+                        } else {
+                            percolateDownMinHeap(lastReturnedIndex);
+                        }
+                    } else {  // max heap
+                        if (lastReturnedIndex > 1 && compareToParent > 0) {
+                            percolateUpMaxHeap(lastReturnedIndex); 
+                        } else {
+                            percolateDownMaxHeap(lastReturnedIndex);
+                        }
+                    }          
+                }
+                index--;
+                lastReturnedIndex = -1; 
+            }
+
+        };
+    }
+
+
+    /**
+     * Adds an object to this heap. Same as {@link #insert(Object)}.
+     *
+     * @param object  the object to add
+     * @return true, always
+     */
+    public boolean add(Object object) {
+        insert(object);
+        return true;
+    }
+
+    /**
+     * Returns the priority element. Same as {@link #peek()}.
+     *
+     * @return the priority element
+     * @throws BufferUnderflowException if this heap is empty
+     */
+    public Object get() {
+        try {
+            return peek();
+        } catch (NoSuchElementException e) {
+            throw new BufferUnderflowException();
+        }
+    }
+
+    /**
+     * Removes the priority element. Same as {@link #pop()}.
+     *
+     * @return the removed priority element
+     * @throws BufferUnderflowException if this heap is empty
+     */
+    public Object remove() {
+        try {
+            return pop();
+        } catch (NoSuchElementException e) {
+            throw new BufferUnderflowException();
+        }
+    }
+
+    /**
+     * Returns the number of elements in this heap.
+     *
+     * @return the number of elements in this heap
+     */
+    public int size() {
+        return m_size;
+    }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedCollection.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedCollection.java
new file mode 100755
index 0000000..191c467
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedCollection.java
@@ -0,0 +1,52 @@
+/*
+ *  Copyright 2002-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.Collection;
+
+/**
+ * Defines a collection that is bounded in size.
+ * <p>
+ * The size of the collection can vary, but it can never exceed a preset 
+ * maximum number of elements. This interface allows the querying of details
+ * associated with the maximum number of elements.
+ *
+ * @see CollectionUtils#isFull
+ * @see CollectionUtils#maxSize
+ *
+ * @since Commons Collections 3.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ * 
+ * @author Herve Quiroz
+ * @author Stephen Colebourne
+ */
+public interface BoundedCollection extends Collection {
+
+    /**
+     * Returns true if this collection is full and no new elements can be added.
+     *
+     * @return <code>true</code> if the collection is full
+     */
+    boolean isFull();
+
+    /**
+     * Gets the maximum size of the collection (the bound).
+     *
+     * @return the maximum number of elements the collection can hold
+     */
+    int maxSize();
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedFifoBuffer.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedFifoBuffer.java
new file mode 100755
index 0000000..70dd9d4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedFifoBuffer.java
@@ -0,0 +1,310 @@
+/*
+ *  Copyright 2002-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.AbstractCollection;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * The BoundedFifoBuffer is a very efficient implementation of
+ * Buffer that does not alter the size of the buffer at runtime.
+ * <p>
+ * The removal order of a <code>BoundedFifoBuffer</code> is based on the 
+ * insertion order; elements are removed in the same order in which they
+ * were added.  The iteration order is the same as the removal order.
+ * <p>
+ * The {@link #add(Object)}, {@link #remove()} and {@link #get()} operations
+ * all perform in constant time.  All other operations perform in linear
+ * time or worse.
+ * <p>
+ * Note that this implementation is not synchronized.  The following can be
+ * used to provide synchronized access to your <code>BoundedFifoBuffer</code>:
+ * <pre>
+ *   Buffer fifo = BufferUtils.synchronizedBuffer(new BoundedFifoBuffer());
+ * </pre>
+ * <p>
+ * This buffer prevents null objects from being added.
+ *
+ * @deprecated Moved to buffer subpackage. Due to be removed in v4.0.
+ * @since 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ * 
+ * @author Avalon
+ * @author Berin Loritsch
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ * @author Herve Quiroz
+ */
+public class BoundedFifoBuffer extends AbstractCollection
+        implements Buffer, BoundedCollection {
+            
+    private final Object[] m_elements;
+    private int m_start = 0;
+    private int m_end = 0;
+    private boolean m_full = false;
+    private final int maxElements;
+
+    /**
+     * Constructs a new <code>BoundedFifoBuffer</code> big enough to hold
+     * 32 elements.
+     */
+    public BoundedFifoBuffer() {
+        this(32);
+    }
+
+    /**
+     * Constructs a new <code>BoundedFifoBuffer</code> big enough to hold
+     * the specified number of elements.
+     *
+     * @param size  the maximum number of elements for this fifo
+     * @throws IllegalArgumentException  if the size is less than 1
+     */
+    public BoundedFifoBuffer(int size) {
+        if (size <= 0) {
+            throw new IllegalArgumentException("The size must be greater than 0");
+        }
+        m_elements = new Object[size];
+        maxElements = m_elements.length;
+    }
+
+    /**
+     * Constructs a new <code>BoundedFifoBuffer</code> big enough to hold all
+     * of the elements in the specified collection. That collection's
+     * elements will also be added to the buffer.
+     *
+     * @param coll  the collection whose elements to add, may not be null
+     * @throws NullPointerException if the collection is null
+     */
+    public BoundedFifoBuffer(Collection coll) {
+        this(coll.size());
+        addAll(coll);
+    }
+
+    /**
+     * Returns the number of elements stored in the buffer.
+     *
+     * @return this buffer's size
+     */
+    public int size() {
+        int size = 0;
+
+        if (m_end < m_start) {
+            size = maxElements - m_start + m_end;
+        } else if (m_end == m_start) {
+            size = (m_full ? maxElements : 0);
+        } else {
+            size = m_end - m_start;
+        }
+
+        return size;
+    }
+
+    /**
+     * Returns true if this buffer is empty; false otherwise.
+     *
+     * @return true if this buffer is empty
+     */
+    public boolean isEmpty() {
+        return size() == 0;
+    }
+
+    /**
+     * Returns true if this collection is full and no new elements can be added.
+     *
+     * @return <code>true</code> if the collection is full
+     */
+    public boolean isFull() {
+        return size() == maxElements;
+    }
+    
+    /**
+     * Gets the maximum size of the collection (the bound).
+     *
+     * @return the maximum number of elements the collection can hold
+     */
+    public int maxSize() {
+        return maxElements;
+    }
+    
+    /**
+     * Clears this buffer.
+     */
+    public void clear() {
+        m_full = false;
+        m_start = 0;
+        m_end = 0;
+        Arrays.fill(m_elements, null);
+    }
+
+    /**
+     * Adds the given element to this buffer.
+     *
+     * @param element  the element to add
+     * @return true, always
+     * @throws NullPointerException  if the given element is null
+     * @throws BufferOverflowException  if this buffer is full
+     */
+    public boolean add(Object element) {
+        if (null == element) {
+            throw new NullPointerException("Attempted to add null object to buffer");
+        }
+
+        if (m_full) {
+            throw new BufferOverflowException("The buffer cannot hold more than " + maxElements + " objects.");
+        }
+
+        m_elements[m_end++] = element;
+
+        if (m_end >= maxElements) {
+            m_end = 0;
+        }
+
+        if (m_end == m_start) {
+            m_full = true;
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns the least recently inserted element in this buffer.
+     *
+     * @return the least recently inserted element
+     * @throws BufferUnderflowException  if the buffer is empty
+     */
+    public Object get() {
+        if (isEmpty()) {
+            throw new BufferUnderflowException("The buffer is already empty");
+        }
+
+        return m_elements[m_start];
+    }
+
+    /**
+     * Removes the least recently inserted element from this buffer.
+     *
+     * @return the least recently inserted element
+     * @throws BufferUnderflowException  if the buffer is empty
+     */
+    public Object remove() {
+        if (isEmpty()) {
+            throw new BufferUnderflowException("The buffer is already empty");
+        }
+
+        Object element = m_elements[m_start];
+
+        if (null != element) {
+            m_elements[m_start++] = null;
+
+            if (m_start >= maxElements) {
+                m_start = 0;
+            }
+
+            m_full = false;
+        }
+
+        return element;
+    }
+
+    /**
+     * Increments the internal index.
+     * 
+     * @param index  the index to increment
+     * @return the updated index
+     */
+    private int increment(int index) {
+        index++; 
+        if (index >= maxElements) {
+            index = 0;
+        }
+        return index;
+    }
+
+    /**
+     * Decrements the internal index.
+     * 
+     * @param index  the index to decrement
+     * @return the updated index
+     */
+    private int decrement(int index) {
+        index--;
+        if (index < 0) {
+            index = maxElements - 1;
+        }
+        return index;
+    }
+
+    /**
+     * Returns an iterator over this buffer's elements.
+     *
+     * @return an iterator over this buffer's elements
+     */
+    public Iterator iterator() {
+        return new Iterator() {
+
+            private int index = m_start;
+            private int lastReturnedIndex = -1;
+            private boolean isFirst = m_full;
+
+            public boolean hasNext() {
+                return isFirst || (index != m_end);
+                
+            }
+
+            public Object next() {
+                if (!hasNext()) throw new NoSuchElementException();
+                isFirst = false;
+                lastReturnedIndex = index;
+                index = increment(index);
+                return m_elements[lastReturnedIndex];
+            }
+
+            public void remove() {
+                if (lastReturnedIndex == -1) throw new IllegalStateException();
+
+                // First element can be removed quickly
+                if (lastReturnedIndex == m_start) {
+                    BoundedFifoBuffer.this.remove();
+                    lastReturnedIndex = -1;
+                    return;
+                }
+
+                // Other elements require us to shift the subsequent elements
+                int i = lastReturnedIndex + 1;
+                while (i != m_end) {
+                    if (i >= maxElements) {
+                        m_elements[i - 1] = m_elements[0];
+                        i = 0;
+                    } else {
+                        m_elements[i - 1] = m_elements[i];
+                        i++;
+                    }
+                }
+
+                lastReturnedIndex = -1;
+                m_end = decrement(m_end);
+                m_elements[m_end] = null;
+                m_full = false;
+                index = decrement(index);
+            }
+
+        };
+    }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedMap.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedMap.java
new file mode 100755
index 0000000..a7a82f6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedMap.java
@@ -0,0 +1,48 @@
+/*
+ *  Copyright 2003-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.Map;
+
+/**
+ * Defines a map that is bounded in size.
+ * <p>
+ * The size of the map can vary, but it can never exceed a preset 
+ * maximum number of elements. This interface allows the querying of details
+ * associated with the maximum number of elements.
+ *
+ * @since Commons Collections 3.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ * 
+ * @author Stephen Colebourne
+ */
+public interface BoundedMap extends Map {
+
+    /**
+     * Returns true if this map is full and no new elements can be added.
+     *
+     * @return <code>true</code> if the map is full
+     */
+    boolean isFull();
+
+    /**
+     * Gets the maximum size of the map (the bound).
+     *
+     * @return the maximum number of elements the map can hold
+     */
+    int maxSize();
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Buffer.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Buffer.java
new file mode 100755
index 0000000..bbf3264
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Buffer.java
@@ -0,0 +1,63 @@
+/*
+ *  Copyright 2002-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.Collection;
+
+/**
+ * Defines a collection that allows objects to be removed in some well-defined order.
+ * <p>
+ * The removal order can be based on insertion order (eg, a FIFO queue or a
+ * LIFO stack), on access order (eg, an LRU cache), on some arbitrary comparator
+ * (eg, a priority queue) or on any other well-defined ordering.
+ * <p>
+ * Note that the removal order is not necessarily the same as the iteration
+ * order.  A <code>Buffer</code> implementation may have equivalent removal
+ * and iteration orders, but this is not required.
+ * <p>
+ * This interface does not specify any behavior for 
+ * {@link Object#equals(Object)} and {@link Object#hashCode} methods.  It
+ * is therefore possible for a <code>Buffer</code> implementation to also
+ * also implement {@link java.util.List}, {@link java.util.Set} or 
+ * {@link Bag}.
+ *
+ * @since Commons Collections 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ * 
+ * @author Avalon
+ * @author Berin Loritsch
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public interface Buffer extends Collection {
+
+    /**
+     * Gets and removes the next object from the buffer.
+     *
+     * @return the next object in the buffer, which is also removed
+     * @throws BufferUnderflowException if the buffer is already empty
+     */
+    Object remove();
+
+    /**
+     * Gets the next object from the buffer without removing it.
+     *
+     * @return the next object in the buffer, which is not removed
+     * @throws BufferUnderflowException if the buffer is empty
+     */
+    Object get();
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferOverflowException.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferOverflowException.java
new file mode 100755
index 0000000..4f8e233
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferOverflowException.java
@@ -0,0 +1,73 @@
+/*
+ *  Copyright 2002-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+/**
+ * The BufferOverflowException is used when the buffer's capacity has been
+ * exceeded.
+ *
+ * @since Commons Collections 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ * 
+ * @author Avalon
+ * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
+ * @author <a href="mailto:jefft@apache.org">Jeff Turner</a>
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public class BufferOverflowException extends RuntimeException {
+    
+    /** The root cause throwable */
+    private final Throwable throwable;
+
+    /**
+     * Constructs a new <code>BufferOverflowException</code>.
+     */
+    public BufferOverflowException() {
+        super();
+        throwable = null;
+    }
+
+    /** 
+     * Construct a new <code>BufferOverflowException</code>.
+     * 
+     * @param message  the detail message for this exception
+     */
+    public BufferOverflowException(String message) {
+        this(message, null);
+    }
+
+    /** 
+     * Construct a new <code>BufferOverflowException</code>.
+     * 
+     * @param message  the detail message for this exception
+     * @param exception  the root cause of the exception
+     */
+    public BufferOverflowException(String message, Throwable exception) {
+        super(message);
+        throwable = exception;
+    }
+
+    /**
+     * Gets the root cause of the exception.
+     *
+     * @return the root cause
+     */
+    public final Throwable getCause() {
+        return throwable;
+    }
+    
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferUnderflowException.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferUnderflowException.java
new file mode 100755
index 0000000..8e3a192
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferUnderflowException.java
@@ -0,0 +1,76 @@
+/*
+ *  Copyright 2002-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.NoSuchElementException;
+
+/**
+ * The BufferUnderflowException is used when the buffer is already empty.
+ * <p>
+ * NOTE: From version 3.0, this exception extends NoSuchElementException.
+ * 
+ * @since Commons Collections 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Avalon
+ * @author Berin Loritsch
+ * @author Jeff Turner
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public class BufferUnderflowException extends NoSuchElementException {
+    
+    /** The root cause throwable */
+    private final Throwable throwable;
+
+    /**
+     * Constructs a new <code>BufferUnderflowException</code>.
+     */
+    public BufferUnderflowException() {
+        super();
+        throwable = null;
+    }
+
+    /** 
+     * Construct a new <code>BufferUnderflowException</code>.
+     * 
+     * @param message  the detail message for this exception
+     */
+    public BufferUnderflowException(String message) {
+        this(message, null);
+    }
+
+    /** 
+     * Construct a new <code>BufferUnderflowException</code>.
+     * 
+     * @param message  the detail message for this exception
+     * @param exception  the root cause of the exception
+     */
+    public BufferUnderflowException(String message, Throwable exception) {
+        super(message);
+        throwable = exception;
+    }
+
+    /**
+     * Gets the root cause of the exception.
+     *
+     * @return the root cause
+     */
+    public final Throwable getCause() {
+        return throwable;
+    }
+    
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferUtils.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferUtils.java
new file mode 100755
index 0000000..31f6a61
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferUtils.java
@@ -0,0 +1,200 @@
+/*
+ *  Copyright 2002-2005 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import org.apache.commons.collections.buffer.BlockingBuffer;
+import org.apache.commons.collections.buffer.PredicatedBuffer;
+import org.apache.commons.collections.buffer.SynchronizedBuffer;
+import org.apache.commons.collections.buffer.TransformedBuffer;
+import org.apache.commons.collections.buffer.TypedBuffer;
+import org.apache.commons.collections.buffer.UnmodifiableBuffer;
+import org.apache.commons.collections.buffer.BoundedBuffer;
+
+/**
+ * Provides utility methods and decorators for {@link Buffer} instances.
+ *
+ * @since Commons Collections 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public class BufferUtils {
+
+    /**
+     * An empty unmodifiable buffer.
+     */
+    public static final Buffer EMPTY_BUFFER = UnmodifiableBuffer.decorate(new ArrayStack(1));
+
+    /**
+     * <code>BufferUtils</code> should not normally be instantiated.
+     */
+    public BufferUtils() {
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Returns a synchronized buffer backed by the given buffer.
+     * Much like the synchronized collections returned by
+     * {@link java.util.Collections}, you must manually synchronize on
+     * the returned buffer's iterator to avoid non-deterministic behavior:
+     *
+     * <pre>
+     * Buffer b = BufferUtils.synchronizedBuffer(myBuffer);
+     * synchronized (b) {
+     *     Iterator i = b.iterator();
+     *     while (i.hasNext()) {
+     *         process (i.next());
+     *     }
+     * }
+     * </pre>
+     *
+     * @param buffer  the buffer to synchronize, must not be null
+     * @return a synchronized buffer backed by that buffer
+     * @throws IllegalArgumentException  if the Buffer is null
+     */
+    public static Buffer synchronizedBuffer(Buffer buffer) {
+        return SynchronizedBuffer.decorate(buffer);
+    }
+
+    /**
+     * Returns a synchronized buffer backed by the given buffer that will
+     * block on {@link Buffer#get()} and {@link Buffer#remove()} operations.
+     * If the buffer is empty, then the {@link Buffer#get()} and
+     * {@link Buffer#remove()} operations will block until new elements
+     * are added to the buffer, rather than immediately throwing a
+     * <code>BufferUnderflowException</code>.
+     *
+     * @param buffer  the buffer to synchronize, must not be null
+     * @return a blocking buffer backed by that buffer
+     * @throws IllegalArgumentException  if the Buffer is null
+     */
+    public static Buffer blockingBuffer(Buffer buffer) {
+        return BlockingBuffer.decorate(buffer);
+    }
+
+    /**
+     * Returns a synchronized buffer backed by the given buffer that will
+     * block on {@link Buffer#get()} and {@link Buffer#remove()} operations
+     * until <code>timeout</code> expires.  If the buffer is empty, then the
+     * {@link Buffer#get()} and {@link Buffer#remove()} operations will block
+     * until new elements are added to the buffer, rather than immediately
+     * throwing a <code>BufferUnderflowException</code>.
+     *
+     * @param buffer  the buffer to synchronize, must not be null
+     * @param timeoutMillis  the timeout value in milliseconds, zero or less for no timeout
+     * @return a blocking buffer backed by that buffer
+     * @throws IllegalArgumentException  if the Buffer is null
+     * @since Commons Collections 3.2
+     */
+    public static Buffer blockingBuffer(Buffer buffer, long timeoutMillis) {
+        return BlockingBuffer.decorate(buffer, timeoutMillis);
+    }
+
+    /**
+     * Returns a synchronized buffer backed by the given buffer that will
+     * block on {@link Buffer#add(Object)} and
+     * {@link Buffer#addAll(java.util.Collection)} until enough object(s) are
+     * removed from the buffer to allow the object(s) to be added and still
+     * maintain the maximum size.
+     *
+     * @param buffer  the buffer to make bounded,  must not be null
+     * @param maximumSize  the maximum size
+     * @return a bounded buffer backed by the given buffer
+     * @throws IllegalArgumentException if the given buffer is null
+     * @since Commons Collections 3.2
+     */
+    public static Buffer boundedBuffer(Buffer buffer, int maximumSize) {
+        return BoundedBuffer.decorate(buffer, maximumSize);
+    }
+
+    /**
+     * Returns a synchronized buffer backed by the given buffer that will
+     * block on {@link Buffer#add(Object)} and
+     * {@link Buffer#addAll(java.util.Collection)} until enough object(s) are
+     * removed from the buffer to allow the object(s) to be added and still
+     * maintain the maximum size or the timeout expires.
+     *
+     * @param buffer the buffer to make bounded, must not be null
+     * @param maximumSize the maximum size
+     * @param timeoutMillis  the timeout value in milliseconds, zero or less for no timeout
+     * @return a bounded buffer backed by the given buffer
+     * @throws IllegalArgumentException if the given buffer is null
+     * @since Commons Collections 3.2
+     */
+    public static Buffer boundedBuffer(Buffer buffer, int maximumSize, long timeoutMillis) {
+        return BoundedBuffer.decorate(buffer, maximumSize, timeoutMillis);
+    }
+
+    /**
+     * Returns an unmodifiable buffer backed by the given buffer.
+     *
+     * @param buffer  the buffer to make unmodifiable, must not be null
+     * @return an unmodifiable buffer backed by that buffer
+     * @throws IllegalArgumentException  if the Buffer is null
+     */
+    public static Buffer unmodifiableBuffer(Buffer buffer) {
+        return UnmodifiableBuffer.decorate(buffer);
+    }
+
+    /**
+     * Returns a predicated (validating) buffer backed by the given buffer.
+     * <p>
+     * Only objects that pass the test in the given predicate can be added to the buffer.
+     * Trying to add an invalid object results in an IllegalArgumentException.
+     * It is important not to use the original buffer after invoking this method,
+     * as it is a backdoor for adding invalid objects.
+     *
+     * @param buffer  the buffer to predicate, must not be null
+     * @param predicate  the predicate used to evaluate new elements, must not be null
+     * @return a predicated buffer
+     * @throws IllegalArgumentException  if the Buffer or Predicate is null
+     */
+    public static Buffer predicatedBuffer(Buffer buffer, Predicate predicate) {
+        return PredicatedBuffer.decorate(buffer, predicate);
+    }
+
+    /**
+     * Returns a typed buffer backed by the given buffer.
+     * <p>
+     * Only elements of the specified type can be added to the buffer.
+     *
+     * @param buffer  the buffer to predicate, must not be null
+     * @param type  the type to allow into the buffer, must not be null
+     * @return a typed buffer
+     * @throws IllegalArgumentException  if the buffer or type is null
+     */
+    public static Buffer typedBuffer(Buffer buffer, Class type) {
+        return TypedBuffer.decorate(buffer, type);
+    }
+
+    /**
+     * Returns a transformed buffer backed by the given buffer.
+     * <p>
+     * Each object is passed through the transformer as it is added to the
+     * Buffer. It is important not to use the original buffer after invoking this 
+     * method, as it is a backdoor for adding untransformed objects.
+     *
+     * @param buffer  the buffer to predicate, must not be null
+     * @param transformer  the transformer for the buffer, must not be null
+     * @return a transformed buffer backed by the given buffer
+     * @throws IllegalArgumentException  if the Buffer or Transformer is null
+     */
+    public static Buffer transformedBuffer(Buffer buffer, Transformer transformer) {
+        return TransformedBuffer.decorate(buffer, transformer);
+    }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Closure.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Closure.java
new file mode 100755
index 0000000..e86d77c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Closure.java
@@ -0,0 +1,46 @@
+/*
+ *  Copyright 2001-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+/**
+ * Defines a functor interface implemented by classes that do something.
+ * <p>
+ * A <code>Closure</code> represents a block of code which is executed from
+ * inside some block, function or iteration. It operates an input object.
+ * <p>
+ * Standard implementations of common closures are provided by
+ * {@link ClosureUtils}. These include method invokation and for/while loops.
+ *  
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ *
+ * @author James Strachan
+ * @author Nicola Ken Barozzi
+ * @author Stephen Colebourne
+ */
+public interface Closure {
+
+    /**
+     * Performs an action on the specified input object.
+     *
+     * @param input  the input to execute on
+     * @throws ClassCastException (runtime) if the input is the wrong class
+     * @throws IllegalArgumentException (runtime) if the input is invalid
+     * @throws FunctorException (runtime) if any other error occurs
+     */
+    public void execute(Object input);
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ClosureUtils.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ClosureUtils.java
new file mode 100755
index 0000000..a494333
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ClosureUtils.java
@@ -0,0 +1,369 @@
+/*
+ *  Copyright 2002-2004,2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.commons.collections.functors.ChainedClosure;
+import org.apache.commons.collections.functors.EqualPredicate;
+import org.apache.commons.collections.functors.ExceptionClosure;
+import org.apache.commons.collections.functors.ForClosure;
+import org.apache.commons.collections.functors.IfClosure;
+import org.apache.commons.collections.functors.InvokerTransformer;
+import org.apache.commons.collections.functors.NOPClosure;
+import org.apache.commons.collections.functors.SwitchClosure;
+import org.apache.commons.collections.functors.TransformerClosure;
+import org.apache.commons.collections.functors.WhileClosure;
+
+/**
+ * <code>ClosureUtils</code> provides reference implementations and utilities
+ * for the Closure functor interface. The supplied closures are:
+ * <ul>
+ * <li>Invoker - invokes a method on the input object
+ * <li>For - repeatedly calls a closure for a fixed number of times
+ * <li>While - repeatedly calls a closure while a predicate is true
+ * <li>DoWhile - repeatedly calls a closure while a predicate is true
+ * <li>Chained - chains two or more closures together
+ * <li>Switch - calls one closure based on one or more predicates
+ * <li>SwitchMap - calls one closure looked up from a Map
+ * <li>Transformer - wraps a Transformer as a Closure
+ * <li>NOP - does nothing
+ * <li>Exception - always throws an exception
+ * </ul>
+ * All the supplied closures are Serializable.
+ * 
+ * @since Commons Collections 3.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Stephen Colebourne
+ * @author Matt Benson
+ */
+public class ClosureUtils {
+
+    /**
+     * This class is not normally instantiated.
+     */
+    public ClosureUtils() {
+        super();
+    }
+
+    /**
+     * Gets a Closure that always throws an exception.
+     * This could be useful during testing as a placeholder.
+     *
+     * @see org.apache.commons.collections.functors.ExceptionClosure
+     * 
+     * @return the closure
+     */
+    public static Closure exceptionClosure() {
+        return ExceptionClosure.INSTANCE;
+    }
+
+    /**
+     * Gets a Closure that will do nothing.
+     * This could be useful during testing as a placeholder.
+     *
+     * @see org.apache.commons.collections.functors.NOPClosure
+     * 
+     * @return the closure
+     */
+    public static Closure nopClosure() {
+        return NOPClosure.INSTANCE;
+    }
+
+    /**
+     * Creates a Closure that calls a Transformer each time it is called.
+     * The transformer will be called using the closure's input object.
+     * The transformer's result will be ignored.
+     *
+     * @see org.apache.commons.collections.functors.TransformerClosure
+     * 
+     * @param transformer  the transformer to run each time in the closure, null means nop
+     * @return the closure
+     */
+    public static Closure asClosure(Transformer transformer) {
+        return TransformerClosure.getInstance(transformer);
+    }
+
+    /**
+     * Creates a Closure that will call the closure <code>count</code> times.
+     * <p>
+     * A null closure or zero count returns the <code>NOPClosure</code>.
+     *
+     * @see org.apache.commons.collections.functors.ForClosure
+     * 
+     * @param count  the number of times to loop
+     * @param closure  the closure to call repeatedly
+     * @return the <code>for</code> closure
+     */
+    public static Closure forClosure(int count, Closure closure) {
+        return ForClosure.getInstance(count, closure);
+    }
+
+    /**
+     * Creates a Closure that will call the closure repeatedly until the 
+     * predicate returns false.
+     *
+     * @see org.apache.commons.collections.functors.WhileClosure
+     * 
+     * @param predicate  the predicate to use as an end of loop test, not null
+     * @param closure  the closure to call repeatedly, not null
+     * @return the <code>while</code> closure
+     * @throws IllegalArgumentException if either argument is null
+     */
+    public static Closure whileClosure(Predicate predicate, Closure closure) {
+        return WhileClosure.getInstance(predicate, closure, false);
+    }
+
+    /**
+     * Creates a Closure that will call the closure once and then repeatedly
+     * until the predicate returns false.
+     *
+     * @see org.apache.commons.collections.functors.WhileClosure
+     * 
+     * @param closure  the closure to call repeatedly, not null
+     * @param predicate  the predicate to use as an end of loop test, not null
+     * @return the <code>do-while</code> closure
+     * @throws IllegalArgumentException if either argument is null
+     */
+    public static Closure doWhileClosure(Closure closure, Predicate predicate) {
+        return WhileClosure.getInstance(predicate, closure, true);
+    }
+
+    /**
+     * Creates a Closure that will invoke a specific method on the closure's
+     * input object by reflection.
+     *
+     * @see org.apache.commons.collections.functors.InvokerTransformer
+     * @see org.apache.commons.collections.functors.TransformerClosure
+     * 
+     * @param methodName  the name of the method
+     * @return the <code>invoker</code> closure
+     * @throws IllegalArgumentException if the method name is null
+     */
+    public static Closure invokerClosure(String methodName) {
+        // reuse transformer as it has caching - this is lazy really, should have inner class here
+        return asClosure(InvokerTransformer.getInstance(methodName));
+    }
+
+    /**
+     * Creates a Closure that will invoke a specific method on the closure's
+     * input object by reflection.
+     *
+     * @see org.apache.commons.collections.functors.InvokerTransformer
+     * @see org.apache.commons.collections.functors.TransformerClosure
+     * 
+     * @param methodName  the name of the method
+     * @param paramTypes  the parameter types
+     * @param args  the arguments
+     * @return the <code>invoker</code> closure
+     * @throws IllegalArgumentException if the method name is null
+     * @throws IllegalArgumentException if the paramTypes and args don't match
+     */
+    public static Closure invokerClosure(String methodName, Class[] paramTypes, Object[] args) {
+        // reuse transformer as it has caching - this is lazy really, should have inner class here
+        return asClosure(InvokerTransformer.getInstance(methodName, paramTypes, args));
+    }
+
+    /**
+     * Create a new Closure that calls two Closures, passing the result of
+     * the first into the second.
+     * 
+     * @see org.apache.commons.collections.functors.ChainedClosure
+     * 
+     * @param closure1  the first closure
+     * @param closure2  the second closure
+     * @return the <code>chained</code> closure
+     * @throws IllegalArgumentException if either closure is null
+     */
+    public static Closure chainedClosure(Closure closure1, Closure closure2) {
+        return ChainedClosure.getInstance(closure1, closure2);
+    }
+
+    /**
+     * Create a new Closure that calls each closure in turn, passing the 
+     * result into the next closure.
+     * 
+     * @see org.apache.commons.collections.functors.ChainedClosure
+     * 
+     * @param closures  an array of closures to chain
+     * @return the <code>chained</code> closure
+     * @throws IllegalArgumentException if the closures array is null
+     * @throws IllegalArgumentException if any closure in the array is null
+     */
+    public static Closure chainedClosure(Closure[] closures) {
+        return ChainedClosure.getInstance(closures);
+    }
+
+    /**
+     * Create a new Closure that calls each closure in turn, passing the 
+     * result into the next closure. The ordering is that of the iterator()
+     * method on the collection.
+     * 
+     * @see org.apache.commons.collections.functors.ChainedClosure
+     * 
+     * @param closures  a collection of closures to chain
+     * @return the <code>chained</code> closure
+     * @throws IllegalArgumentException if the closures collection is null
+     * @throws IllegalArgumentException if the closures collection is empty
+     * @throws IllegalArgumentException if any closure in the collection is null
+     */
+    public static Closure chainedClosure(Collection closures) {
+        return ChainedClosure.getInstance(closures);
+    }
+
+    /**
+     * Create a new Closure that calls another closure based on the
+     * result of the specified predicate.
+     * 
+     * @see org.apache.commons.collections.functors.IfClosure
+     * 
+     * @param predicate  the validating predicate
+     * @param trueClosure  the closure called if the predicate is true
+     * @return the <code>if</code> closure
+     * @throws IllegalArgumentException if the predicate is null
+     * @throws IllegalArgumentException if the closure is null
+     * @since Commons Collections 3.2
+     */
+    public static Closure ifClosure(Predicate predicate, Closure trueClosure) {
+        return IfClosure.getInstance(predicate, trueClosure);
+    }
+
+    /**
+     * Create a new Closure that calls one of two closures depending 
+     * on the specified predicate.
+     * 
+     * @see org.apache.commons.collections.functors.IfClosure
+     * 
+     * @param predicate  the predicate to switch on
+     * @param trueClosure  the closure called if the predicate is true
+     * @param falseClosure  the closure called if the predicate is false
+     * @return the <code>switch</code> closure
+     * @throws IllegalArgumentException if the predicate is null
+     * @throws IllegalArgumentException if either closure is null
+     */
+    public static Closure ifClosure(Predicate predicate, Closure trueClosure, Closure falseClosure) {
+        return IfClosure.getInstance(predicate, trueClosure, falseClosure);
+    }
+
+    /**
+     * Create a new Closure that calls one of the closures depending 
+     * on the predicates.
+     * <p>
+     * The closure at array location 0 is called if the predicate at array 
+     * location 0 returned true. Each predicate is evaluated
+     * until one returns true.
+     * 
+     * @see org.apache.commons.collections.functors.SwitchClosure
+     * 
+     * @param predicates  an array of predicates to check, not null
+     * @param closures  an array of closures to call, not null
+     * @return the <code>switch</code> closure
+     * @throws IllegalArgumentException if the either array is null
+     * @throws IllegalArgumentException if any element in the arrays is null
+     * @throws IllegalArgumentException if the arrays are different sizes
+     */
+    public static Closure switchClosure(Predicate[] predicates, Closure[] closures) {
+        return SwitchClosure.getInstance(predicates, closures, null);
+    }
+
+    /**
+     * Create a new Closure that calls one of the closures depending 
+     * on the predicates.
+     * <p>
+     * The closure at array location 0 is called if the predicate at array
+     * location 0 returned true. Each predicate is evaluated
+     * until one returns true. If no predicates evaluate to true, the default
+     * closure is called.
+     * 
+     * @see org.apache.commons.collections.functors.SwitchClosure
+     * 
+     * @param predicates  an array of predicates to check, not null
+     * @param closures  an array of closures to call, not null
+     * @param defaultClosure  the default to call if no predicate matches
+     * @return the <code>switch</code> closure
+     * @throws IllegalArgumentException if the either array is null
+     * @throws IllegalArgumentException if any element in the arrays is null
+     * @throws IllegalArgumentException if the arrays are different sizes
+     */
+    public static Closure switchClosure(Predicate[] predicates, Closure[] closures, Closure defaultClosure) {
+        return SwitchClosure.getInstance(predicates, closures, defaultClosure);
+    }
+    
+    /**
+     * Create a new Closure that calls one of the closures depending 
+     * on the predicates. 
+     * <p>
+     * The Map consists of Predicate keys and Closure values. A closure 
+     * is called if its matching predicate returns true. Each predicate is evaluated
+     * until one returns true. If no predicates evaluate to true, the default
+     * closure is called. The default closure is set in the map with a 
+     * null key. The ordering is that of the iterator() method on the entryset 
+     * collection of the map.
+     * 
+     * @see org.apache.commons.collections.functors.SwitchClosure
+     * 
+     * @param predicatesAndClosures  a map of predicates to closures
+     * @return the <code>switch</code> closure
+     * @throws IllegalArgumentException if the map is null
+     * @throws IllegalArgumentException if the map is empty
+     * @throws IllegalArgumentException if any closure in the map is null
+     * @throws ClassCastException  if the map elements are of the wrong type
+     */
+    public static Closure switchClosure(Map predicatesAndClosures) {
+        return SwitchClosure.getInstance(predicatesAndClosures);
+    }
+
+    /**
+     * Create a new Closure that uses the input object as a key to find the
+     * closure to call. 
+     * <p>
+     * The Map consists of object keys and Closure values. A closure 
+     * is called if the input object equals the key. If there is no match, the
+     * default closure is called. The default closure is set in the map
+     * using a null key.
+     * 
+     * @see org.apache.commons.collections.functors.SwitchClosure
+     * 
+     * @param objectsAndClosures  a map of objects to closures
+     * @return the closure
+     * @throws IllegalArgumentException if the map is null
+     * @throws IllegalArgumentException if the map is empty
+     * @throws IllegalArgumentException if any closure in the map is null
+     */
+    public static Closure switchMapClosure(Map objectsAndClosures) {
+        Closure[] trs = null;
+        Predicate[] preds = null;
+        if (objectsAndClosures == null) {
+            throw new IllegalArgumentException("The object and closure map must not be null");
+        }
+        Closure def = (Closure) objectsAndClosures.remove(null);
+        int size = objectsAndClosures.size();
+        trs = new Closure[size];
+        preds = new Predicate[size];
+        int i = 0;
+        for (Iterator it = objectsAndClosures.entrySet().iterator(); it.hasNext();) {
+            Map.Entry entry = (Map.Entry) it.next();
+            preds[i] = EqualPredicate.getInstance(entry.getKey());
+            trs[i] = (Closure) entry.getValue();
+            i++;
+        }
+        return switchClosure(preds, trs, def);
+    }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/CollectionUtils.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/CollectionUtils.java
new file mode 100755
index 0000000..0f739da
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/CollectionUtils.java
@@ -0,0 +1,1210 @@
+/*
+ *  Copyright 2001-2005 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.collections.collection.PredicatedCollection;
+import org.apache.commons.collections.collection.SynchronizedCollection;
+import org.apache.commons.collections.collection.TransformedCollection;
+import org.apache.commons.collections.collection.TypedCollection;
+import org.apache.commons.collections.collection.UnmodifiableBoundedCollection;
+import org.apache.commons.collections.collection.UnmodifiableCollection;
+
+/**
+ * Provides utility methods and decorators for {@link Collection} instances.
+ *
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ * 
+ * @author Rodney Waldhoff
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ * @author Steve Downey
+ * @author Herve Quiroz
+ * @author Peter KoBek
+ * @author Matthew Hawthorne
+ * @author Janek Bogucki
+ * @author Phil Steitz
+ * @author Steven Melzer
+ * @author Jon Schewe
+ * @author Neil O'Toole
+ * @author Stephen Smith
+ */
+public class CollectionUtils {
+
+    /** Constant to avoid repeated object creation */
+    private static Integer INTEGER_ONE = new Integer(1);
+
+    /**
+     * An empty unmodifiable collection.
+     * The JDK provides empty Set and List implementations which could be used for
+     * this purpose. However they could be cast to Set or List which might be
+     * undesirable. This implementation only implements Collection.
+     */
+    public static final Collection EMPTY_COLLECTION = UnmodifiableCollection.decorate(new ArrayList());
+
+    /**
+     * <code>CollectionUtils</code> should not normally be instantiated.
+     */
+    public CollectionUtils() {
+    }
+
+    /**
+     * Returns a {@link Collection} containing the union
+     * of the given {@link Collection}s.
+     * <p>
+     * The cardinality of each element in the returned {@link Collection}
+     * will be equal to the maximum of the cardinality of that element
+     * in the two given {@link Collection}s.
+     *
+     * @param a  the first collection, must not be null
+     * @param b  the second collection, must not be null
+     * @return  the union of the two collections
+     * @see Collection#addAll
+     */
+    public static Collection union(final Collection a, final Collection b) {
+        ArrayList list = new ArrayList();
+        Map mapa = getCardinalityMap(a);
+        Map mapb = getCardinalityMap(b);
+        Set elts = new HashSet(a);
+        elts.addAll(b);
+        Iterator it = elts.iterator();
+        while(it.hasNext()) {
+            Object obj = it.next();
+            for(int i=0,m=Math.max(getFreq(obj,mapa),getFreq(obj,mapb));i<m;i++) {
+                list.add(obj);
+            }
+        }
+        return list;
+    }
+
+    /**
+     * Returns a {@link Collection} containing the intersection
+     * of the given {@link Collection}s.
+     * <p>
+     * The cardinality of each element in the returned {@link Collection}
+     * will be equal to the minimum of the cardinality of that element
+     * in the two given {@link Collection}s.
+     *
+     * @param a  the first collection, must not be null
+     * @param b  the second collection, must not be null
+     * @return the intersection of the two collections
+     * @see Collection#retainAll
+     * @see #containsAny
+     */
+    public static Collection intersection(final Collection a, final Collection b) {
+        ArrayList list = new ArrayList();
+        Map mapa = getCardinalityMap(a);
+        Map mapb = getCardinalityMap(b);
+        Set elts = new HashSet(a);
+        elts.addAll(b);
+        Iterator it = elts.iterator();
+        while(it.hasNext()) {
+            Object obj = it.next();
+            for(int i=0,m=Math.min(getFreq(obj,mapa),getFreq(obj,mapb));i<m;i++) {
+                list.add(obj);
+            }
+        }
+        return list;
+    }
+
+    /**
+     * Returns a {@link Collection} containing the exclusive disjunction
+     * (symmetric difference) of the given {@link Collection}s.
+     * <p>
+     * The cardinality of each element <i>e</i> in the returned {@link Collection}
+     * will be equal to
+     * <tt>max(cardinality(<i>e</i>,<i>a</i>),cardinality(<i>e</i>,<i>b</i>)) - min(cardinality(<i>e</i>,<i>a</i>),cardinality(<i>e</i>,<i>b</i>))</tt>.
+     * <p>
+     * This is equivalent to
+     * <tt>{@link #subtract subtract}({@link #union union(a,b)},{@link #intersection intersection(a,b)})</tt>
+     * or
+     * <tt>{@link #union union}({@link #subtract subtract(a,b)},{@link #subtract subtract(b,a)})</tt>.
+     *
+     * @param a  the first collection, must not be null
+     * @param b  the second collection, must not be null
+     * @return the symmetric difference of the two collections
+     */
+    public static Collection disjunction(final Collection a, final Collection b) {
+        ArrayList list = new ArrayList();
+        Map mapa = getCardinalityMap(a);
+        Map mapb = getCardinalityMap(b);
+        Set elts = new HashSet(a);
+        elts.addAll(b);
+        Iterator it = elts.iterator();
+        while(it.hasNext()) {
+            Object obj = it.next();
+            for(int i=0,m=((Math.max(getFreq(obj,mapa),getFreq(obj,mapb)))-(Math.min(getFreq(obj,mapa),getFreq(obj,mapb))));i<m;i++) {
+                list.add(obj);
+            }
+        }
+        return list;
+    }
+
+    /**
+     * Returns a new {@link Collection} containing <tt><i>a</i> - <i>b</i></tt>.
+     * The cardinality of each element <i>e</i> in the returned {@link Collection}
+     * will be the cardinality of <i>e</i> in <i>a</i> minus the cardinality
+     * of <i>e</i> in <i>b</i>, or zero, whichever is greater.
+     *
+     * @param a  the collection to subtract from, must not be null
+     * @param b  the collection to subtract, must not be null
+     * @return a new collection with the results
+     * @see Collection#removeAll
+     */
+    public static Collection subtract(final Collection a, final Collection b) {
+        ArrayList list = new ArrayList( a );
+        for (Iterator it = b.iterator(); it.hasNext();) {
+            list.remove(it.next());
+        }
+        return list;
+    }
+
+    /**
+     * Returns <code>true</code> iff at least one element is in both collections.
+     * <p>
+     * In other words, this method returns <code>true</code> iff the
+     * {@link #intersection} of <i>coll1</i> and <i>coll2</i> is not empty.
+     * 
+     * @param coll1  the first collection, must not be null
+     * @param coll2  the first collection, must not be null
+     * @return <code>true</code> iff the intersection of the collections is non-empty
+     * @since 2.1
+     * @see #intersection
+     */
+    public static boolean containsAny(final Collection coll1, final Collection coll2) {
+        if (coll1.size() < coll2.size()) {
+            for (Iterator it = coll1.iterator(); it.hasNext();) {
+                if (coll2.contains(it.next())) {
+                    return true;
+                }
+            }
+        } else {
+            for (Iterator it = coll2.iterator(); it.hasNext();) {
+                if (coll1.contains(it.next())) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Returns a {@link Map} mapping each unique element in the given
+     * {@link Collection} to an {@link Integer} representing the number
+     * of occurrences of that element in the {@link Collection}.
+     * <p>
+     * Only those elements present in the collection will appear as
+     * keys in the map.
+     * 
+     * @param coll  the collection to get the cardinality map for, must not be null
+     * @return the populated cardinality map
+     */
+    public static Map getCardinalityMap(final Collection coll) {
+        Map count = new HashMap();
+        for (Iterator it = coll.iterator(); it.hasNext();) {
+            Object obj = it.next();
+            Integer c = (Integer) (count.get(obj));
+            if (c == null) {
+                count.put(obj,INTEGER_ONE);
+            } else {
+                count.put(obj,new Integer(c.intValue() + 1));
+            }
+        }
+        return count;
+    }
+
+    /**
+     * Returns <tt>true</tt> iff <i>a</i> is a sub-collection of <i>b</i>,
+     * that is, iff the cardinality of <i>e</i> in <i>a</i> is less
+     * than or equal to the cardinality of <i>e</i> in <i>b</i>,
+     * for each element <i>e</i> in <i>a</i>.
+     *
+     * @param a  the first (sub?) collection, must not be null
+     * @param b  the second (super?) collection, must not be null
+     * @return <code>true</code> iff <i>a</i> is a sub-collection of <i>b</i>
+     * @see #isProperSubCollection
+     * @see Collection#containsAll
+     */
+    public static boolean isSubCollection(final Collection a, final Collection b) {
+        Map mapa = getCardinalityMap(a);
+        Map mapb = getCardinalityMap(b);
+        Iterator it = a.iterator();
+        while (it.hasNext()) {
+            Object obj = it.next();
+            if (getFreq(obj, mapa) > getFreq(obj, mapb)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Returns <tt>true</tt> iff <i>a</i> is a <i>proper</i> sub-collection of <i>b</i>,
+     * that is, iff the cardinality of <i>e</i> in <i>a</i> is less
+     * than or equal to the cardinality of <i>e</i> in <i>b</i>,
+     * for each element <i>e</i> in <i>a</i>, and there is at least one
+     * element <i>f</i> such that the cardinality of <i>f</i> in <i>b</i>
+     * is strictly greater than the cardinality of <i>f</i> in <i>a</i>.
+     * <p>
+     * The implementation assumes
+     * <ul>
+     *    <li><code>a.size()</code> and <code>b.size()</code> represent the 
+     *    total cardinality of <i>a</i> and <i>b</i>, resp. </li>
+     *    <li><code>a.size() < Integer.MAXVALUE</code></li>
+     * </ul>
+     *
+     * @param a  the first (sub?) collection, must not be null
+     * @param b  the second (super?) collection, must not be null
+     * @return <code>true</code> iff <i>a</i> is a <i>proper</i> sub-collection of <i>b</i>
+     * @see #isSubCollection
+     * @see Collection#containsAll
+     */
+    public static boolean isProperSubCollection(final Collection a, final Collection b) {
+        return (a.size() < b.size()) && CollectionUtils.isSubCollection(a,b);
+    }
+
+    /**
+     * Returns <tt>true</tt> iff the given {@link Collection}s contain
+     * exactly the same elements with exactly the same cardinalities.
+     * <p>
+     * That is, iff the cardinality of <i>e</i> in <i>a</i> is
+     * equal to the cardinality of <i>e</i> in <i>b</i>,
+     * for each element <i>e</i> in <i>a</i> or <i>b</i>.
+     *
+     * @param a  the first collection, must not be null
+     * @param b  the second collection, must not be null
+     * @return <code>true</code> iff the collections contain the same elements with the same cardinalities.
+     */
+    public static boolean isEqualCollection(final Collection a, final Collection b) {
+        if(a.size() != b.size()) {
+            return false;
+        } else {
+            Map mapa = getCardinalityMap(a);
+            Map mapb = getCardinalityMap(b);
+            if(mapa.size() != mapb.size()) {
+                return false;
+            } else {
+                Iterator it = mapa.keySet().iterator();
+                while(it.hasNext()) {
+                    Object obj = it.next();
+                    if(getFreq(obj,mapa) != getFreq(obj,mapb)) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+        }
+    }
+
+    /**
+     * Returns the number of occurrences of <i>obj</i> in <i>coll</i>.
+     *
+     * @param obj  the object to find the cardinality of
+     * @param coll  the collection to search
+     * @return the the number of occurrences of obj in coll
+     */
+    public static int cardinality(Object obj, final Collection coll) {
+        if (coll instanceof Set) {
+            return (coll.contains(obj) ? 1 : 0);
+        }
+        if (coll instanceof Bag) {
+            return ((Bag) coll).getCount(obj);
+        }
+        int count = 0;
+        if (obj == null) {
+            for (Iterator it = coll.iterator();it.hasNext();) {
+                if (it.next() == null) {
+                    count++;
+                }
+            }
+        } else {
+            for (Iterator it = coll.iterator();it.hasNext();) {
+                if (obj.equals(it.next())) {
+                    count++;
+                }
+            }
+        }
+        return count;
+    }
+
+    /** 
+     * Finds the first element in the given collection which matches the given predicate.
+     * <p>
+     * If the input collection or predicate is null, or no element of the collection 
+     * matches the predicate, null is returned.
+     *
+     * @param collection  the collection to search, may be null
+     * @param predicate  the predicate to use, may be null
+     * @return the first element of the collection which matches the predicate or null if none could be found
+     */
+    public static Object find(Collection collection, Predicate predicate) {
+        if (collection != null && predicate != null) {
+            for (Iterator iter = collection.iterator(); iter.hasNext();) {
+                Object item = iter.next();
+                if (predicate.evaluate(item)) {
+                    return item;
+                }
+            }
+        }
+        return null;
+    }
+    
+    /** 
+     * Executes the given closure on each element in the collection.
+     * <p>
+     * If the input collection or closure is null, there is no change made.
+     * 
+     * @param collection  the collection to get the input from, may be null
+     * @param closure  the closure to perform, may be null
+     */
+    public static void forAllDo(Collection collection, Closure closure) {
+        if (collection != null && closure != null) {
+            for (Iterator it = collection.iterator(); it.hasNext();) {
+                closure.execute(it.next());
+            }
+        }
+    }
+
+    /** 
+     * Filter the collection by applying a Predicate to each element. If the
+     * predicate returns false, remove the element.
+     * <p>
+     * If the input collection or predicate is null, there is no change made.
+     * 
+     * @param collection  the collection to get the input from, may be null
+     * @param predicate  the predicate to use as a filter, may be null
+     */
+    public static void filter(Collection collection, Predicate predicate) {
+        if (collection != null && predicate != null) {
+            for (Iterator it = collection.iterator(); it.hasNext();) {
+                if (predicate.evaluate(it.next()) == false) {
+                    it.remove();
+                }
+            }
+        }
+    }
+
+    /** 
+     * Transform the collection by applying a Transformer to each element.
+     * <p>
+     * If the input collection or transformer is null, there is no change made.
+     * <p>
+     * This routine is best for Lists, for which set() is used to do the 
+     * transformations "in place."  For other Collections, clear() and addAll()
+     * are used to replace elements.  
+     * <p>
+     * If the input collection controls its input, such as a Set, and the
+     * Transformer creates duplicates (or are otherwise invalid), the 
+     * collection may reduce in size due to calling this method.
+     * 
+     * @param collection  the collection to get the input from, may be null
+     * @param transformer  the transformer to perform, may be null
+     */
+    public static void transform(Collection collection, Transformer transformer) {
+        if (collection != null && transformer != null) {
+            if (collection instanceof List) {
+                List list = (List) collection;
+                for (ListIterator it = list.listIterator(); it.hasNext();) {
+                    it.set(transformer.transform(it.next()));
+                }
+            } else {
+                Collection resultCollection = collect(collection, transformer);
+                collection.clear();
+                collection.addAll(resultCollection);
+            }
+        }
+    }
+
+    /** 
+     * Counts the number of elements in the input collection that match the predicate.
+     * <p>
+     * A <code>null</code> collection or predicate matches no elements.
+     * 
+     * @param inputCollection  the collection to get the input from, may be null
+     * @param predicate  the predicate to use, may be null
+     * @return the number of matches for the predicate in the collection
+     */
+    public static int countMatches(Collection inputCollection, Predicate predicate) {
+        int count = 0;
+        if (inputCollection != null && predicate != null) {
+            for (Iterator it = inputCollection.iterator(); it.hasNext();) {
+                if (predicate.evaluate(it.next())) {
+                    count++;
+                }
+            }
+        }
+        return count;
+    }
+
+    /** 
+     * Answers true if a predicate is true for at least one element of a collection.
+     * <p>
+     * A <code>null</code> collection or predicate returns false.
+     * 
+     * @param collection the collection to get the input from, may be null
+     * @param predicate the predicate to use, may be null
+     * @return true if at least one element of the collection matches the predicate
+     */
+    public static boolean exists(Collection collection, Predicate predicate) {
+        if (collection != null && predicate != null) {
+            for (Iterator it = collection.iterator(); it.hasNext();) {
+                if (predicate.evaluate(it.next())) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /** 
+     * Selects all elements from input collection which match the given predicate
+     * into an output collection.
+     * <p>
+     * A <code>null</code> predicate matches no elements.
+     * 
+     * @param inputCollection  the collection to get the input from, may not be null
+     * @param predicate  the predicate to use, may be null
+     * @return the elements matching the predicate (new list)
+     * @throws NullPointerException if the input collection is null
+     */
+    public static Collection select(Collection inputCollection, Predicate predicate) {
+        ArrayList answer = new ArrayList(inputCollection.size());
+        select(inputCollection, predicate, answer);
+        return answer;
+    }
+
+    /** 
+     * Selects all elements from input collection which match the given predicate
+     * and adds them to outputCollection.
+     * <p>
+     * If the input collection or predicate is null, there is no change to the 
+     * output collection.
+     * 
+     * @param inputCollection  the collection to get the input from, may be null
+     * @param predicate  the predicate to use, may be null
+     * @param outputCollection  the collection to output into, may not be null
+     */
+    public static void select(Collection inputCollection, Predicate predicate, Collection outputCollection) {
+        if (inputCollection != null && predicate != null) {
+            for (Iterator iter = inputCollection.iterator(); iter.hasNext();) {
+                Object item = iter.next();
+                if (predicate.evaluate(item)) {
+                    outputCollection.add(item);
+                }
+            }
+        }
+    }
+    
+    /**
+     * Selects all elements from inputCollection which don't match the given predicate
+     * into an output collection.
+     * <p>
+     * If the input predicate is <code>null</code>, the result is an empty list.
+     * 
+     * @param inputCollection  the collection to get the input from, may not be null
+     * @param predicate  the predicate to use, may be null
+     * @return the elements <b>not</b> matching the predicate (new list)
+     * @throws NullPointerException if the input collection is null
+     */
+    public static Collection selectRejected(Collection inputCollection, Predicate predicate) {
+        ArrayList answer = new ArrayList(inputCollection.size());
+        selectRejected(inputCollection, predicate, answer);
+        return answer;
+    }
+    
+    /** 
+     * Selects all elements from inputCollection which don't match the given predicate
+     * and adds them to outputCollection.
+     * <p>
+     * If the input predicate is <code>null</code>, no elements are added to <code>outputCollection</code>.
+     * 
+     * @param inputCollection  the collection to get the input from, may be null
+     * @param predicate  the predicate to use, may be null
+     * @param outputCollection  the collection to output into, may not be null
+     */
+    public static void selectRejected(Collection inputCollection, Predicate predicate, Collection outputCollection) {
+        if (inputCollection != null && predicate != null) {
+            for (Iterator iter = inputCollection.iterator(); iter.hasNext();) {
+                Object item = iter.next();
+                if (predicate.evaluate(item) == false) {
+                    outputCollection.add(item);
+                }
+            }
+        }
+    }
+    
+    /** 
+     * Returns a new Collection consisting of the elements of inputCollection transformed
+     * by the given transformer.
+     * <p>
+     * If the input transformer is null, the result is an empty list.
+     * 
+     * @param inputCollection  the collection to get the input from, may not be null
+     * @param transformer  the transformer to use, may be null
+     * @return the transformed result (new list)
+     * @throws NullPointerException if the input collection is null
+     */
+    public static Collection collect(Collection inputCollection, Transformer transformer) {
+        ArrayList answer = new ArrayList(inputCollection.size());
+        collect(inputCollection, transformer, answer);
+        return answer;
+    }
+    
+    /** 
+     * Transforms all elements from the inputIterator with the given transformer 
+     * and adds them to the outputCollection.
+     * <p>
+     * If the input iterator or transformer is null, the result is an empty list.
+     * 
+     * @param inputIterator  the iterator to get the input from, may be null
+     * @param transformer  the transformer to use, may be null
+     * @return the transformed result (new list)
+     */
+    public static Collection collect(Iterator inputIterator, Transformer transformer) {
+        ArrayList answer = new ArrayList();
+        collect(inputIterator, transformer, answer);
+        return answer;
+    }
+    
+    /** 
+     * Transforms all elements from inputCollection with the given transformer 
+     * and adds them to the outputCollection.
+     * <p>
+     * If the input collection or transformer is null, there is no change to the 
+     * output collection.
+     *
+     * @param inputCollection  the collection to get the input from, may be null
+     * @param transformer  the transformer to use, may be null
+     * @param outputCollection  the collection to output into, may not be null
+     * @return the outputCollection with the transformed input added
+     * @throws NullPointerException if the output collection is null
+     */
+    public static Collection collect(Collection inputCollection, final Transformer transformer, final Collection outputCollection) {
+        if (inputCollection != null) {
+            return collect(inputCollection.iterator(), transformer, outputCollection);
+        }
+        return outputCollection;
+    }
+
+    /** 
+     * Transforms all elements from the inputIterator with the given transformer 
+     * and adds them to the outputCollection.
+     * <p>
+     * If the input iterator or transformer is null, there is no change to the 
+     * output collection.
+     *
+     * @param inputIterator  the iterator to get the input from, may be null
+     * @param transformer  the transformer to use, may be null
+     * @param outputCollection  the collection to output into, may not be null
+     * @return the outputCollection with the transformed input added
+     * @throws NullPointerException if the output collection is null
+     */
+    public static Collection collect(Iterator inputIterator, final Transformer transformer, final Collection outputCollection) {
+        if (inputIterator != null && transformer != null) {
+            while (inputIterator.hasNext()) {
+                Object item = inputIterator.next();
+                Object value = transformer.transform(item);
+                outputCollection.add(value);
+            }
+        }
+        return outputCollection;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Adds an element to the collection unless the element is null.
+     * 
+     * @param collection  the collection to add to, must not be null
+     * @param object  the object to add, if null it will not be added
+     * @return true if the collection changed
+     * @throws NullPointerException if the collection is null
+     * @since Commons Collections 3.2
+     */
+    public static boolean addIgnoreNull(Collection collection, Object object) {
+        return (object == null ? false : collection.add(object));
+    }
+    
+    /**
+     * Adds all elements in the iteration to the given collection.
+     * 
+     * @param collection  the collection to add to, must not be null
+     * @param iterator  the iterator of elements to add, must not be null
+     * @throws NullPointerException if the collection or iterator is null
+     */
+    public static void addAll(Collection collection, Iterator iterator) {
+        while (iterator.hasNext()) {
+            collection.add(iterator.next());
+        }
+    }
+    
+    /**
+     * Adds all elements in the enumeration to the given collection.
+     * 
+     * @param collection  the collection to add to, must not be null
+     * @param enumeration  the enumeration of elements to add, must not be null
+     * @throws NullPointerException if the collection or enumeration is null
+     */
+    public static void addAll(Collection collection, Enumeration enumeration) {
+        while (enumeration.hasMoreElements()) {
+            collection.add(enumeration.nextElement());
+        }
+    }    
+    
+    /** 
+     * Adds all elements in the array to the given collection.
+     * 
+     * @param collection  the collection to add to, must not be null
+     * @param elements  the array of elements to add, must not be null
+     * @throws NullPointerException if the collection or array is null
+     */
+    public static void addAll(Collection collection, Object[] elements) {
+        for (int i = 0, size = elements.length; i < size; i++) {
+            collection.add(elements[i]);
+        }
+    }    
+    
+    /**
+     * Given an Object, and an index, returns the nth value in the
+     * object.
+     * <ul>
+     * <li>If obj is a Map, returns the nth value from the <b>keySet</b> iterator, unless 
+     *     the Map contains an Integer key with integer value = idx, in which case the
+     *     corresponding map entry value is returned.  If idx exceeds the number of entries in
+     *     the map, an empty Iterator is returned.
+     * <li>If obj is a List or an array, returns the nth value, throwing IndexOutOfBoundsException,
+     *     ArrayIndexOutOfBoundsException, resp. if the nth value does not exist.
+     * <li>If obj is an iterator, enumeration or Collection, returns the nth value from the iterator,
+     *     returning an empty Iterator (resp. Enumeration) if the nth value does not exist.
+     * <li>Returns the original obj if it is null or not a Collection or Iterator.
+     * </ul>
+     * 
+     * @param obj  the object to get an index of, may be null
+     * @param idx  the index to get
+     * @throws IndexOutOfBoundsException
+     * @throws ArrayIndexOutOfBoundsException
+     *
+     * @deprecated use {@link #get(Object, int)} instead. Will be removed in v4.0
+     */
+    public static Object index(Object obj, int idx) {
+        return index(obj, new Integer(idx));
+    }
+    
+    /**
+     * Given an Object, and a key (index), returns the value associated with
+     * that key in the Object. The following checks are made:
+     * <ul>
+     * <li>If obj is a Map, use the index as a key to get a value. If no match continue.
+     * <li>Check key is an Integer. If not, return the object passed in.
+     * <li>If obj is a Map, get the nth value from the <b>keySet</b> iterator.
+     *     If the Map has fewer than n entries, return an empty Iterator.
+     * <li>If obj is a List or an array, get the nth value, throwing IndexOutOfBoundsException,
+     *     ArrayIndexOutOfBoundsException, resp. if the nth value does not exist.
+     * <li>If obj is an iterator, enumeration or Collection, get the nth value from the iterator,
+     *     returning an empty Iterator (resp. Enumeration) if the nth value does not exist.
+     * <li>Return the original obj.
+     * </ul>
+     * 
+     * @param obj  the object to get an index of
+     * @param index  the index to get
+     * @return the object at the specified index
+     * @throws IndexOutOfBoundsException
+     * @throws ArrayIndexOutOfBoundsException
+     *
+     * @deprecated use {@link #get(Object, int)} instead. Will be removed in v4.0
+     */
+    public static Object index(Object obj, Object index) {
+        if(obj instanceof Map) {
+            Map map = (Map)obj;
+            if(map.containsKey(index)) {
+                return map.get(index);
+            }
+        }
+        int idx = -1;
+        if(index instanceof Integer) {
+            idx = ((Integer)index).intValue();
+        }
+        if(idx < 0) {
+            return obj;
+        } 
+        else if(obj instanceof Map) {
+            Map map = (Map)obj;
+            Iterator iterator = map.keySet().iterator();
+            return index(iterator, idx);
+        } 
+        else if(obj instanceof List) {
+            return ((List)obj).get(idx);
+        } 
+        else if(obj instanceof Object[]) {
+            return ((Object[])obj)[idx];
+        } 
+        else if(obj instanceof Enumeration) {
+            Enumeration it = (Enumeration)obj;
+            while(it.hasMoreElements()) {
+                idx--;
+                if(idx == -1) {
+                    return it.nextElement();
+                } else {
+                    it.nextElement();
+                }
+            }
+        } 
+        else if(obj instanceof Iterator) {
+            return index((Iterator)obj, idx);
+        }
+        else if(obj instanceof Collection) {
+            Iterator iterator = ((Collection)obj).iterator();
+            return index(iterator, idx);
+        }
+        return obj;
+    }
+
+    private static Object index(Iterator iterator, int idx) {
+        while(iterator.hasNext()) {
+            idx--;
+            if(idx == -1) {
+                return iterator.next();
+            } else {
+                iterator.next();
+            }
+        }
+        return iterator;
+    }
+    
+    /**
+     * Returns the <code>index</code>-th value in <code>object</code>, throwing
+     * <code>IndexOutOfBoundsException</code> if there is no such element or 
+     * <code>IllegalArgumentException</code> if <code>object</code> is not an 
+     * instance of one of the supported types.
+     * <p>
+     * The supported types, and associated semantics are:
+     * <ul>
+     * <li> Map -- the value returned is the <code>Map.Entry</code> in position 
+     *      <code>index</code> in the map's <code>entrySet</code> iterator, 
+     *      if there is such an entry.</li>
+     * <li> List -- this method is equivalent to the list's get method.</li>
+     * <li> Array -- the <code>index</code>-th array entry is returned, 
+     *      if there is such an entry; otherwise an <code>IndexOutOfBoundsException</code>
+     *      is thrown.</li>
+     * <li> Collection -- the value returned is the <code>index</code>-th object 
+     *      returned by the collection's default iterator, if there is such an element.</li>
+     * <li> Iterator or Enumeration -- the value returned is the
+     *      <code>index</code>-th object in the Iterator/Enumeration, if there
+     *      is such an element.  The Iterator/Enumeration is advanced to 
+     *      <code>index</code> (or to the end, if <code>index</code> exceeds the 
+     *      number of entries) as a side effect of this method.</li>
+     * </ul>
+     * 
+     * @param object  the object to get a value from
+     * @param index  the index to get
+     * @return the object at the specified index
+     * @throws IndexOutOfBoundsException if the index is invalid
+     * @throws IllegalArgumentException if the object type is invalid
+     */
+    public static Object get(Object object, int index) {
+        if (index < 0) {
+            throw new IndexOutOfBoundsException("Index cannot be negative: " + index);
+        }
+        if (object instanceof Map) {
+            Map map = (Map) object;
+            Iterator iterator = map.entrySet().iterator();
+            return get(iterator, index);
+        } else if (object instanceof List) {
+            return ((List) object).get(index);
+        } else if (object instanceof Object[]) {
+            return ((Object[]) object)[index];
+        } else if (object instanceof Iterator) {
+            Iterator it = (Iterator) object;
+            while (it.hasNext()) {
+                index--;
+                if (index == -1) {
+                    return it.next();
+                } else {
+                    it.next();
+                }
+            }
+            throw new IndexOutOfBoundsException("Entry does not exist: " + index);
+        } else if (object instanceof Collection) {
+            Iterator iterator = ((Collection) object).iterator();
+            return get(iterator, index);
+        } else if (object instanceof Enumeration) {
+            Enumeration it = (Enumeration) object;
+            while (it.hasMoreElements()) {
+                index--;
+                if (index == -1) {
+                    return it.nextElement();
+                } else {
+                    it.nextElement();
+                }
+            }
+            throw new IndexOutOfBoundsException("Entry does not exist: " + index);
+        } else if (object == null) {
+            throw new IllegalArgumentException("Unsupported object type: null");
+        } else {
+            try {
+                return Array.get(object, index);
+            } catch (IllegalArgumentException ex) {
+                throw new IllegalArgumentException("Unsupported object type: " + object.getClass().getName());
+            }
+        }
+    }
+    
+    /** 
+     * Gets the size of the collection/iterator specified.
+     * <p>
+     * This method can handles objects as follows
+     * <ul>
+     * <li>Collection - the collection size
+     * <li>Map - the map size
+     * <li>Array - the array size
+     * <li>Iterator - the number of elements remaining in the iterator
+     * <li>Enumeration - the number of elements remaining in the enumeration
+     * </ul>
+     * 
+     * @param object  the object to get the size of
+     * @return the size of the specified collection
+     * @throws IllegalArgumentException thrown if object is not recognised or null
+     * @since Commons Collections 3.1
+     */
+    public static int size(Object object) {
+        int total = 0;
+        if (object instanceof Map) {
+            total = ((Map) object).size();
+        } else if (object instanceof Collection) {
+            total = ((Collection) object).size();
+        } else if (object instanceof Object[]) {
+            total = ((Object[]) object).length;
+        } else if (object instanceof Iterator) {
+            Iterator it = (Iterator) object;
+            while (it.hasNext()) {
+                total++;
+                it.next();
+            }
+        } else if (object instanceof Enumeration) {
+            Enumeration it = (Enumeration) object;
+            while (it.hasMoreElements()) {
+                total++;
+                it.nextElement();
+            }
+        } else if (object == null) {
+            throw new IllegalArgumentException("Unsupported object type: null");
+        } else {
+            try {
+                total = Array.getLength(object);
+            } catch (IllegalArgumentException ex) {
+                throw new IllegalArgumentException("Unsupported object type: " + object.getClass().getName());
+            }
+        }
+        return total;
+    }
+    
+    /**
+     * Checks if the specified collection/array/iterator is empty.
+     * <p>
+     * This method can handles objects as follows
+     * <ul>
+     * <li>Collection - via collection isEmpty
+     * <li>Map - via map isEmpty
+     * <li>Array - using array size
+     * <li>Iterator - via hasNext
+     * <li>Enumeration - via hasMoreElements
+     * </ul>
+     * <p>
+     * Note: This method is named to avoid clashing with
+     * {@link #isEmpty(Collection)}.
+     * 
+     * @param object  the object to get the size of, not null
+     * @return true if empty
+     * @throws IllegalArgumentException thrown if object is not recognised or null
+     * @since Commons Collections 3.2
+     */
+    public static boolean sizeIsEmpty(Object object) {
+        if (object instanceof Collection) {
+            return ((Collection) object).isEmpty();
+        } else if (object instanceof Map) {
+            return ((Map) object).isEmpty();
+        } else if (object instanceof Object[]) {
+            return ((Object[]) object).length == 0;
+        } else if (object instanceof Iterator) {
+            return ((Iterator) object).hasNext() == false;
+        } else if (object instanceof Enumeration) {
+            return ((Enumeration) object).hasMoreElements() == false;
+        } else if (object == null) {
+            throw new IllegalArgumentException("Unsupported object type: null");
+        } else {
+            try {
+                return Array.getLength(object) == 0;
+            } catch (IllegalArgumentException ex) {
+                throw new IllegalArgumentException("Unsupported object type: " + object.getClass().getName());
+            }
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Null-safe check if the specified collection is empty.
+     * <p>
+     * Null returns true.
+     * 
+     * @param coll  the collection to check, may be null
+     * @return true if empty or null
+     * @since Commons Collections 3.2
+     */
+    public static boolean isEmpty(Collection coll) {
+        return (coll == null || coll.isEmpty());
+    }
+
+    /**
+     * Null-safe check if the specified collection is not empty.
+     * <p>
+     * Null returns false.
+     * 
+     * @param coll  the collection to check, may be null
+     * @return true if non-null and non-empty
+     * @since Commons Collections 3.2
+     */
+    public static boolean isNotEmpty(Collection coll) {
+        return !CollectionUtils.isEmpty(coll);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Reverses the order of the given array.
+     * 
+     * @param array  the array to reverse
+     */
+    public static void reverseArray(Object[] array) {
+        int i = 0;
+        int j = array.length - 1;
+        Object tmp;
+
+        while (j > i) {
+            tmp = array[j];
+            array[j] = array[i];
+            array[i] = tmp;
+            j--;
+            i++;
+        }
+    }
+
+    private static final int getFreq(final Object obj, final Map freqMap) {
+        Integer count = (Integer) freqMap.get(obj);
+        if (count != null) {
+            return count.intValue();
+        }
+        return 0;
+    }
+
+    /**
+     * Returns true if no more elements can be added to the Collection.
+     * <p>
+     * This method uses the {@link BoundedCollection} interface to determine the
+     * full status. If the collection does not implement this interface then
+     * false is returned.
+     * <p>
+     * The collection does not have to implement this interface directly.
+     * If the collection has been decorated using the decorators subpackage
+     * then these will be removed to access the BoundedCollection.
+     *
+     * @param coll  the collection to check
+     * @return true if the BoundedCollection is full
+     * @throws NullPointerException if the collection is null
+     */
+    public static boolean isFull(Collection coll) {
+        if (coll == null) {
+            throw new NullPointerException("The collection must not be null");
+        }
+        if (coll instanceof BoundedCollection) {
+            return ((BoundedCollection) coll).isFull();
+        }
+        try {
+            BoundedCollection bcoll = UnmodifiableBoundedCollection.decorateUsing(coll);
+            return bcoll.isFull();
+            
+        } catch (IllegalArgumentException ex) {
+            return false;
+        }
+    }
+
+    /**
+     * Get the maximum number of elements that the Collection can contain.
+     * <p>
+     * This method uses the {@link BoundedCollection} interface to determine the
+     * maximum size. If the collection does not implement this interface then
+     * -1 is returned.
+     * <p>
+     * The collection does not have to implement this interface directly.
+     * If the collection has been decorated using the decorators subpackage
+     * then these will be removed to access the BoundedCollection.
+     *
+     * @param coll  the collection to check
+     * @return the maximum size of the BoundedCollection, -1 if no maximum size
+     * @throws NullPointerException if the collection is null
+     */
+    public static int maxSize(Collection coll) {
+        if (coll == null) {
+            throw new NullPointerException("The collection must not be null");
+        }
+        if (coll instanceof BoundedCollection) {
+            return ((BoundedCollection) coll).maxSize();
+        }
+        try {
+            BoundedCollection bcoll = UnmodifiableBoundedCollection.decorateUsing(coll);
+            return bcoll.maxSize();
+            
+        } catch (IllegalArgumentException ex) {
+            return -1;
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Returns a collection containing all the elements in <code>collection</code>
+     * that are also in <code>retain</code>. The cardinality of an element <code>e</code>
+     * in the returned collection is the same as the cardinality of <code>e</code>
+     * in <code>collection</code> unless <code>retain</code> does not contain <code>e</code>, in which
+     * case the cardinality is zero. This method is useful if you do not wish to modify
+     * the collection <code>c</code> and thus cannot call <code>c.retainAll(retain);</code>.
+     * 
+     * @param collection  the collection whose contents are the target of the #retailAll operation
+     * @param retain  the collection containing the elements to be retained in the returned collection
+     * @return a <code>Collection</code> containing all the elements of <code>collection</code>
+     * that occur at least once in <code>retain</code>.
+     * @throws NullPointerException if either parameter is null
+     * @since Commons Collections 3.2
+     */
+    public static Collection retainAll(Collection collection, Collection retain) {
+        return ListUtils.retainAll(collection, retain);
+    }
+
+    /**
+     * Removes the elements in <code>remove</code> from <code>collection</code>. That is, this
+     * method returns a collection containing all the elements in <code>c</code>
+     * that are not in <code>remove</code>. The cardinality of an element <code>e</code>
+     * in the returned collection is the same as the cardinality of <code>e</code>
+     * in <code>collection</code> unless <code>remove</code> contains <code>e</code>, in which
+     * case the cardinality is zero. This method is useful if you do not wish to modify
+     * the collection <code>c</code> and thus cannot call <code>collection.removeAll(remove);</code>.
+     * 
+     * @param collection  the collection from which items are removed (in the returned collection)
+     * @param remove  the items to be removed from the returned <code>collection</code>
+     * @return a <code>Collection</code> containing all the elements of <code>collection</code> except
+     * any elements that also occur in <code>remove</code>.
+     * @throws NullPointerException if either parameter is null
+     * @since Commons Collections 3.2
+     */
+    public static Collection removeAll(Collection collection, Collection remove) {
+        return ListUtils.retainAll(collection, remove);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Returns a synchronized collection backed by the given collection.
+     * <p>
+     * You must manually synchronize on the returned buffer's iterator to 
+     * avoid non-deterministic behavior:
+     *  
+     * <pre>
+     * Collection c = CollectionUtils.synchronizedCollection(myCollection);
+     * synchronized (c) {
+     *     Iterator i = c.iterator();
+     *     while (i.hasNext()) {
+     *         process (i.next());
+     *     }
+     * }
+     * </pre>
+     * 
+     * This method uses the implementation in the decorators subpackage.
+     * 
+     * @param collection  the collection to synchronize, must not be null
+     * @return a synchronized collection backed by the given collection
+     * @throws IllegalArgumentException  if the collection is null
+     */
+    public static Collection synchronizedCollection(Collection collection) {
+        return SynchronizedCollection.decorate(collection);
+    }
+
+    /**
+     * Returns an unmodifiable collection backed by the given collection.
+     * <p>
+     * This method uses the implementation in the decorators subpackage.
+     *
+     * @param collection  the collection to make unmodifiable, must not be null
+     * @return an unmodifiable collection backed by the given collection
+     * @throws IllegalArgumentException  if the collection is null
+     */
+    public static Collection unmodifiableCollection(Collection collection) {
+        return UnmodifiableCollection.decorate(collection);
+    }
+
+    /**
+     * Returns a predicated (validating) collection backed by the given collection.
+     * <p>
+     * Only objects that pass the test in the given predicate can be added to the collection.
+     * Trying to add an invalid object results in an IllegalArgumentException.
+     * It is important not to use the original collection after invoking this method,
+     * as it is a backdoor for adding invalid objects.
+     *
+     * @param collection  the collection to predicate, must not be null
+     * @param predicate  the predicate for the collection, must not be null
+     * @return a predicated collection backed by the given collection
+     * @throws IllegalArgumentException  if the Collection is null
+     */
+    public static Collection predicatedCollection(Collection collection, Predicate predicate) {
+        return PredicatedCollection.decorate(collection, predicate);
+    }
+
+    /**
+     * Returns a typed collection backed by the given collection.
+     * <p>
+     * Only objects of the specified type can be added to the collection.
+     * 
+     * @param collection  the collection to limit to a specific type, must not be null
+     * @param type  the type of objects which may be added to the collection
+     * @return a typed collection backed by the specified collection
+     */
+    public static Collection typedCollection(Collection collection, Class type) {
+        return TypedCollection.decorate(collection, type);
+    }
+    
+    /**
+     * Returns a transformed bag backed by the given collection.
+     * <p>
+     * Each object is passed through the transformer as it is added to the
+     * Collection. It is important not to use the original collection after invoking this 
+     * method, as it is a backdoor for adding untransformed objects.
+     *
+     * @param collection  the collection to predicate, must not be null
+     * @param transformer  the transformer for the collection, must not be null
+     * @return a transformed collection backed by the given collection
+     * @throws IllegalArgumentException  if the Collection or Transformer is null
+     */
+    public static Collection transformedCollection(Collection collection, Transformer transformer) {
+        return TransformedCollection.decorate(collection, transformer);
+    }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ComparatorUtils.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ComparatorUtils.java
new file mode 100755
index 0000000..a82f07f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ComparatorUtils.java
@@ -0,0 +1,240 @@
+/*
+ *  Copyright 2002-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.Collection;
+import java.util.Comparator;
+
+import org.apache.commons.collections.comparators.BooleanComparator;
+import org.apache.commons.collections.comparators.ComparableComparator;
+import org.apache.commons.collections.comparators.ComparatorChain;
+import org.apache.commons.collections.comparators.NullComparator;
+import org.apache.commons.collections.comparators.ReverseComparator;
+import org.apache.commons.collections.comparators.TransformingComparator;
+
+/**
+ * Provides convenient static utility methods for <Code>Comparator</Code>
+ * objects.
+ * <p>
+ * Most of the functionality in this class can also be found in the 
+ * <code>comparators</code> package. This class merely provides a 
+ * convenient central place if you have use for more than one class
+ * in the <code>comparators</code> subpackage.
+ *
+ * @since Commons Collections 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ * 
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public class ComparatorUtils {
+
+    /**
+     * ComparatorUtils should not normally be instantiated.
+     */
+    public ComparatorUtils() {
+    }
+
+    /**
+     * Comparator for natural sort order.
+     *
+     * @see ComparableComparator#getInstance
+     */
+    public static final Comparator NATURAL_COMPARATOR = ComparableComparator.getInstance();
+
+    /**
+     * Gets a comparator that uses the natural order of the objects.
+     *
+     * @return  a comparator which uses natural order
+     */
+    public static Comparator naturalComparator() {
+        return NATURAL_COMPARATOR;
+    }
+
+    /**
+     * Gets a comparator that compares using two {@link Comparator}s.
+     * <p>
+     * The second comparator is used if the first comparator returns equal.
+     *
+     * @param comparator1  the first comparator to use, not null
+     * @param comparator2  the first comparator to use, not null
+     * @return a {@link ComparatorChain} formed from the two comparators
+     * @throws NullPointerException if either comparator is null
+     * @see ComparatorChain
+     */
+    public static Comparator chainedComparator(Comparator comparator1, Comparator comparator2) {
+        return chainedComparator(new Comparator[] {comparator1, comparator2});
+    }
+
+    /**
+     * Gets a comparator that compares using an array of {@link Comparator}s, applied
+     * in sequence until one returns not equal or the array is exhausted.
+     *
+     * @param comparators  the comparators to use, not null or empty or containing nulls
+     * @return a {@link ComparatorChain} formed from the input comparators
+     * @throws NullPointerException if comparators array is null or contains a null
+     * @see ComparatorChain
+     */
+    public static Comparator chainedComparator(Comparator[] comparators) {
+        ComparatorChain chain = new ComparatorChain();
+        for (int i = 0; i < comparators.length; i++) {
+            if (comparators[i] == null) {
+                throw new NullPointerException("Comparator cannot be null");
+            }
+            chain.addComparator(comparators[i]);
+        }
+        return chain;
+    }
+
+    /**
+     * Gets a comparator that compares using a collection of {@link Comparator}s,
+     * applied in (default iterator) sequence until one returns not equal or the 
+     * collection is exhausted.
+     *
+     * @param comparators  the comparators to use, not null or empty or containing nulls
+     * @return a {@link ComparatorChain} formed from the input comparators
+     * @throws NullPointerException if comparators collection is null or contains a null
+     * @throws ClassCastException if the comparators collection contains the wrong object type
+     * @see ComparatorChain
+     */
+    public static Comparator chainedComparator(Collection comparators) {
+        return chainedComparator(
+            (Comparator[]) comparators.toArray(new Comparator[comparators.size()])
+        );
+    }
+
+    /**
+     * Gets a comparator that reverses the order of the given comparator.
+     *
+     * @param comparator  the comparator to reverse
+     * @return  a comparator that reverses the order of the input comparator
+     * @see ReverseComparator
+     */
+    public static Comparator reversedComparator(Comparator comparator) {
+        if (comparator == null) {
+            comparator = NATURAL_COMPARATOR;
+        }
+        return new ReverseComparator(comparator);
+    }
+
+    /**
+     * Gets a Comparator that can sort Boolean objects.
+     * <p>
+     * The parameter specifies whether true or false is sorted first.
+     * <p>
+     * The comparator throws NullPointerException if a null value is compared.
+     * 
+     * @param trueFirst  when <code>true</code>, sort 
+     *        <code>true</code> {@link Boolean}s before
+     *        <code>false</code> {@link Boolean}s.
+     * @return  a comparator that sorts booleans
+     */
+    public static Comparator booleanComparator(boolean trueFirst) {
+        return BooleanComparator.getBooleanComparator(trueFirst);
+    }
+    
+    /**
+     * Gets a Comparator that controls the comparison of <code>null</code> values.
+     * <p>
+     * The returned comparator will consider a null value to be less than
+     * any nonnull value, and equal to any other null value.  Two nonnull
+     * values will be evaluated with the given comparator.
+     *
+     * @param comparator the comparator that wants to allow nulls
+     * @return  a version of that comparator that allows nulls
+     * @see NullComparator
+     */
+    public static Comparator nullLowComparator(Comparator comparator) {
+        if (comparator == null) {
+            comparator = NATURAL_COMPARATOR;
+        }
+        return new NullComparator(comparator, false);
+    }
+
+    /**
+     * Gets a Comparator that controls the comparison of <code>null</code> values.
+     * <p>
+     * The returned comparator will consider a null value to be greater than
+     * any nonnull value, and equal to any other null value.  Two nonnull
+     * values will be evaluated with the given comparator.
+     *
+     * @param comparator the comparator that wants to allow nulls
+     * @return  a version of that comparator that allows nulls
+     * @see NullComparator
+     */
+    public static Comparator nullHighComparator(Comparator comparator) {
+        if (comparator == null) {
+            comparator = NATURAL_COMPARATOR;
+        }
+        return new NullComparator(comparator, true);
+    }
+
+    /**
+     * Gets a Comparator that passes transformed objects to the given comparator.
+     * <p>
+     * Objects passed to the returned comparator will first be transformed
+     * by the given transformer before they are compared by the given
+     * comparator.
+     *
+     * @param comparator  the sort order to use
+     * @param transformer  the transformer to use
+     * @return  a comparator that transforms its input objects before comparing them
+     * @see  TransformingComparator
+     */
+    public static Comparator transformedComparator(Comparator comparator, Transformer transformer) {
+        if (comparator == null) {
+            comparator = NATURAL_COMPARATOR;
+        }
+        return new TransformingComparator(transformer, comparator);
+    }
+
+    /**
+     *  Returns the smaller of the given objects according to the given 
+     *  comparator, returning the second object if the comparator
+     *  returns equal.
+     * 
+     *  @param o1  the first object to compare
+     *  @param o2  the second object to compare
+     *  @param comparator  the sort order to use
+     *  @return  the smaller of the two objects
+     */
+    public static Object min(Object o1, Object o2, Comparator comparator) {
+        if (comparator == null) {
+            comparator = NATURAL_COMPARATOR;
+        }
+        int c = comparator.compare(o1, o2);
+        return (c < 0) ? o1 : o2;
+    }
+
+    /**
+     *  Returns the larger of the given objects according to the given 
+     *  comparator, returning the second object if the comparator 
+     *  returns equal.
+     * 
+     *  @param o1  the first object to compare
+     *  @param o2  the second object to compare
+     *  @param comparator  the sort order to use
+     *  @return  the larger of the two objects
+     */
+    public static Object max(Object o1, Object o2, Comparator comparator) {
+        if (comparator == null) {
+            comparator = NATURAL_COMPARATOR;
+        }
+        int c = comparator.compare(o1, o2);
+        return (c > 0) ? o1 : o2;
+    }
+    
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/CursorableLinkedList.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/CursorableLinkedList.java
new file mode 100755
index 0000000..c083992
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/CursorableLinkedList.java
@@ -0,0 +1,1467 @@
+/*
+ *  Copyright 2002-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+import java.lang.ref.WeakReference;
+
+/**
+ * A doubly-linked list implementation of the {@link List} interface,
+ * supporting a {@link ListIterator} that allows concurrent modifications
+ * to the underlying list.
+ * <p>
+ * Implements all of the optional {@link List} operations, the
+ * stack/queue/dequeue operations available in {@link java.util.LinkedList}
+ * and supports a {@link ListIterator} that allows concurrent modifications
+ * to the underlying list (see {@link #cursor}).
+ * <p>
+ * <b>Note that this implementation is not synchronized.</b>
+ *
+ * @deprecated Use new version in list subpackage, which has been rewritten
+ *  and now returns the cursor from the listIterator method. Will be removed in v4.0
+ * @see java.util.LinkedList
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ * 
+ * @author Rodney Waldhoff
+ * @author Janek Bogucki
+ * @author Simon Kitching
+ */
+public class CursorableLinkedList implements List, Serializable {
+    /** Ensure serialization compatibility */    
+    private static final long serialVersionUID = 8836393098519411393L;
+
+    //--- public methods ---------------------------------------------
+
+    /**
+     * Appends the specified element to the end of this list.
+     *
+     * @param o element to be appended to this list.
+     * @return <tt>true</tt>
+     */
+    public boolean add(Object o) {
+        insertListable(_head.prev(),null,o);
+        return true;
+    }
+
+    /**
+     * Inserts the specified element at the specified position in this list.
+     * Shifts the element currently at that position (if any) and any subsequent
+     *  elements to the right (adds one to their indices).
+     *
+     * @param index index at which the specified element is to be inserted.
+     * @param element element to be inserted.
+     *
+     * @throws ClassCastException if the class of the specified element
+     * 		  prevents it from being added to this list.
+     * @throws IllegalArgumentException if some aspect of the specified
+     *		     element prevents it from being added to this list.
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *		     (index &lt; 0 || index &gt; size()).
+     */
+    public void add(int index, Object element) {
+        if(index == _size) {
+            add(element);
+        } else {
+            if(index < 0 || index > _size) {
+                throw new IndexOutOfBoundsException(String.valueOf(index) + " < 0 or " + String.valueOf(index) + " > " + _size);
+            }
+            Listable succ = (isEmpty() ? null : getListableAt(index));
+            Listable pred = (null == succ ? null : succ.prev());
+            insertListable(pred,succ,element);
+        }
+    }
+
+    /**
+     * Appends all of the elements in the specified collection to the end of
+     * this list, in the order that they are returned by the specified
+     * {@link Collection}'s {@link Iterator}.  The behavior of this operation is
+     * unspecified if the specified collection is modified while
+     * the operation is in progress.  (Note that this will occur if the
+     * specified collection is this list, and it's nonempty.)
+     *
+     * @param c collection whose elements are to be added to this list.
+     * @return <tt>true</tt> if this list changed as a result of the call.
+     *
+     * @throws ClassCastException if the class of an element in the specified
+     * 	     collection prevents it from being added to this list.
+     * @throws IllegalArgumentException if some aspect of an element in the
+     *         specified collection prevents it from being added to this
+     *         list.
+     */
+    public boolean addAll(Collection c) {
+        if(c.isEmpty()) {
+            return false;
+        }
+        Iterator it = c.iterator();
+        while(it.hasNext()) {
+            insertListable(_head.prev(),null,it.next());
+        }
+        return true;
+    }
+
+    /**
+     * Inserts all of the elements in the specified collection into this
+     * list at the specified position.  Shifts the element currently at
+     * that position (if any) and any subsequent elements to the right
+     * (increases their indices).  The new elements will appear in this
+     * list in the order that they are returned by the specified
+     * {@link Collection}'s {@link Iterator}.  The behavior of this operation is
+     * unspecified if the specified collection is modified while the
+     * operation is in progress.  (Note that this will occur if the specified
+     * collection is this list, and it's nonempty.)
+     *
+     * @param index index at which to insert first element from the specified
+     *	            collection.
+     * @param c elements to be inserted into this list.
+     * @return <tt>true</tt> if this list changed as a result of the call.
+     *
+     * @throws ClassCastException if the class of one of elements of the
+     * 		   specified collection prevents it from being added to this
+     * 		   list.
+     * @throws IllegalArgumentException if some aspect of one of elements of
+     *         the specified collection prevents it from being added to
+     *         this list.
+     * @throws IndexOutOfBoundsException if the index is out of range (index
+     *	      &lt; 0 || index &gt; size()).
+     */
+    public boolean addAll(int index, Collection c) {
+        if(c.isEmpty()) {
+            return false;
+        } else if(_size == index || _size == 0) {
+            return addAll(c);
+        } else {
+            Listable succ = getListableAt(index);
+            Listable pred = (null == succ) ? null : succ.prev();
+            Iterator it = c.iterator();
+            while(it.hasNext()) {
+                pred = insertListable(pred,succ,it.next());
+            }
+            return true;
+        }
+    }
+
+    /**
+     * Inserts the specified element at the beginning of this list.
+     * (Equivalent to {@link #add(int,java.lang.Object) <tt>add(0,o)</tt>}).
+     *
+     * @param o element to be prepended to this list.
+     * @return <tt>true</tt>
+     */
+    public boolean addFirst(Object o) {
+        insertListable(null,_head.next(),o);
+        return true;
+    }
+
+    /**
+     * Inserts the specified element at the end of this list.
+     * (Equivalent to {@link #add(java.lang.Object)}).
+     *
+     * @param o element to be appended to this list.
+     * @return <tt>true</tt>
+     */
+    public boolean addLast(Object o) {
+        insertListable(_head.prev(),null,o);
+        return true;
+    }
+
+    /**
+     * Removes all of the elements from this list.  This
+     * list will be empty after this call returns (unless
+     * it throws an exception).
+     */
+    public void clear() {
+        /*
+        // this is the quick way, but would force us
+        // to break all the cursors
+        _modCount++;
+        _head.setNext(null);
+        _head.setPrev(null);
+        _size = 0;
+        */
+        Iterator it = iterator();
+        while(it.hasNext()) {
+            it.next();
+            it.remove();
+        }
+    }
+
+    /**
+     * Returns <tt>true</tt> if this list contains the specified element.
+     * More formally, returns <tt>true</tt> if and only if this list contains
+     * at least one element <tt>e</tt> such that
+     * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
+     *
+     * @param o element whose presence in this list is to be tested.
+     * @return <tt>true</tt> if this list contains the specified element.
+     */
+    public boolean contains(Object o) {
+        for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+            if((null == o && null == elt.value()) || 
+               (o != null && o.equals(elt.value()))) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Returns <tt>true</tt> if this list contains all of the elements of the
+     * specified collection.
+     *
+     * @param c collection to be checked for containment in this list.
+     * @return <tt>true</tt> if this list contains all of the elements of the
+     *         specified collection.
+     */
+    public boolean containsAll(Collection c) {
+        Iterator it = c.iterator();
+        while(it.hasNext()) {
+            if(!this.contains(it.next())) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Returns a {@link ListIterator} for iterating through the
+     * elements of this list. Unlike {@link #iterator}, a cursor
+     * is not bothered by concurrent modifications to the
+     * underlying list.
+     * <p>
+     * Specifically, when elements are added to the list before or
+     * after the cursor, the cursor simply picks them up automatically.
+     * When the "current" (i.e., last returned by {@link ListIterator#next}
+     * or {@link ListIterator#previous}) element of the list is removed,
+     * the cursor automatically adjusts to the change (invalidating the
+     * last returned value--i.e., it cannot be removed).
+     * <p>
+     * Note that the returned {@link ListIterator} does not support the
+     * {@link ListIterator#nextIndex} and {@link ListIterator#previousIndex}
+     * methods (they throw {@link UnsupportedOperationException} when invoked.
+     * <p>
+     * Historical Note: In previous versions of this class, the object 
+     * returned from this method was required to be explicitly closed. This 
+     * is no longer necessary.
+     *
+     * @see #cursor(int)
+     * @see #listIterator
+     * @see CursorableLinkedList.Cursor
+     */
+    public CursorableLinkedList.Cursor cursor() {
+        return new Cursor(0);
+    }
+
+    /**
+     * Returns a {@link ListIterator} for iterating through the
+     * elements of this list, initialized such that
+     * {@link ListIterator#next} will return the element at
+     * the specified index (if any) and {@link ListIterator#previous}
+     * will return the element immediately preceding it (if any).
+     * Unlike {@link #iterator}, a cursor
+     * is not bothered by concurrent modifications to the
+     * underlying list.
+     *
+     * @see #cursor
+     * @see #listIterator(int)
+     * @see CursorableLinkedList.Cursor
+     * @throws IndexOutOfBoundsException if the index is out of range (index
+     *	        &lt; 0 || index &gt; size()).
+     */
+    public CursorableLinkedList.Cursor cursor(int i) {
+        return new Cursor(i);
+    }
+
+    /**
+     * Compares the specified object with this list for equality.  Returns
+     * <tt>true</tt> if and only if the specified object is also a list, both
+     * lists have the same size, and all corresponding pairs of elements in
+     * the two lists are <i>equal</i>.  (Two elements <tt>e1</tt> and
+     * <tt>e2</tt> are <i>equal</i> if <tt>(e1==null ? e2==null :
+     * e1.equals(e2))</tt>.)  In other words, two lists are defined to be
+     * equal if they contain the same elements in the same order.  This
+     * definition ensures that the equals method works properly across
+     * different implementations of the <tt>List</tt> interface.
+     *
+     * @param o the object to be compared for equality with this list.
+     * @return <tt>true</tt> if the specified object is equal to this list.
+     */
+    public boolean equals(Object o) {
+        if(o == this) {
+            return true;
+        } else if(!(o instanceof List)) {
+            return false;
+        }
+        Iterator it = ((List)o).listIterator();
+        for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+            if(!it.hasNext() || (null == elt.value() ? null != it.next() : !(elt.value().equals(it.next()))) ) {
+                return false;
+            }
+        }
+        return !it.hasNext();
+    }
+
+    /**
+     * Returns the element at the specified position in this list.
+     *
+     * @param index index of element to return.
+     * @return the element at the specified position in this list.
+     *
+     * @throws IndexOutOfBoundsException if the index is out of range (index
+     * 		  &lt; 0 || index &gt;= size()).
+     */
+    public Object get(int index) {
+        return getListableAt(index).value();
+    }
+
+    /**
+     * Returns the element at the beginning of this list.
+     */
+    public Object getFirst() {
+        try {
+            return _head.next().value();
+        } catch(NullPointerException e) {
+            throw new NoSuchElementException();
+        }
+    }
+
+    /**
+     * Returns the element at the end of this list.
+     */
+    public Object getLast() {
+        try {
+            return _head.prev().value();
+        } catch(NullPointerException e) {
+            throw new NoSuchElementException();
+        }
+    }
+
+    /**
+     * Returns the hash code value for this list.  The hash code of a list
+     * is defined to be the result of the following calculation:
+     * <pre>
+     *  hashCode = 1;
+     *  Iterator i = list.iterator();
+     *  while (i.hasNext()) {
+     *      Object obj = i.next();
+     *      hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
+     *  }
+     * </pre>
+     * This ensures that <tt>list1.equals(list2)</tt> implies that
+     * <tt>list1.hashCode()==list2.hashCode()</tt> for any two lists,
+     * <tt>list1</tt> and <tt>list2</tt>, as required by the general
+     * contract of <tt>Object.hashCode</tt>.
+     *
+     * @return the hash code value for this list.
+     * @see Object#hashCode()
+     * @see Object#equals(Object)
+     * @see #equals(Object)
+     */
+    public int hashCode() {
+        int hash = 1;
+        for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+            hash = 31*hash + (null == elt.value() ? 0 : elt.value().hashCode());
+        }
+        return hash;
+    }
+
+    /**
+     * Returns the index in this list of the first occurrence of the specified
+     * element, or -1 if this list does not contain this element.
+     * More formally, returns the lowest index <tt>i</tt> such that
+     * <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt>,
+     * or -1 if there is no such index.
+     *
+     * @param o element to search for.
+     * @return the index in this list of the first occurrence of the specified
+     *         element, or -1 if this list does not contain this element.
+     */
+    public int indexOf(Object o) {
+        int ndx = 0;
+
+        // perform the null check outside of the loop to save checking every
+        // single time through the loop.
+        if (null == o) {
+            for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+                if (null == elt.value()) {
+                    return ndx;
+                }
+                ndx++;
+            }
+        } else {
+
+            for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+                if (o.equals(elt.value())) {
+                    return ndx;
+                }
+                ndx++;
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Returns <tt>true</tt> if this list contains no elements.
+     * @return <tt>true</tt> if this list contains no elements.
+     */
+    public boolean isEmpty() {
+        return(0 == _size);
+    }
+
+    /**
+     * Returns a fail-fast iterator.
+     * @see List#iterator
+     */
+    public Iterator iterator() {
+        return listIterator(0);
+    }
+
+    /**
+     * Returns the index in this list of the last occurrence of the specified
+     * element, or -1 if this list does not contain this element.
+     * More formally, returns the highest index <tt>i</tt> such that
+     * <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt>,
+     * or -1 if there is no such index.
+     *
+     * @param o element to search for.
+     * @return the index in this list of the last occurrence of the specified
+     * 	       element, or -1 if this list does not contain this element.
+     */
+    public int lastIndexOf(Object o) {
+        int ndx = _size-1;
+
+        // perform the null check outside of the loop to save checking every
+        // single time through the loop.
+        if (null == o) {
+            for(Listable elt = _head.prev(), past = null; null != elt && past != _head.next(); elt = (past = elt).prev()) {
+                if (null == elt.value()) {
+                    return ndx;
+                }
+                ndx--;
+            }
+        } else {
+            for(Listable elt = _head.prev(), past = null; null != elt && past != _head.next(); elt = (past = elt).prev()) {
+                if (o.equals(elt.value())) {
+                    return ndx;
+                }
+                ndx--;
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Returns a fail-fast ListIterator.
+     * @see List#listIterator
+     */
+    public ListIterator listIterator() {
+        return listIterator(0);
+    }
+
+    /**
+     * Returns a fail-fast ListIterator.
+     * @see List#listIterator(int)
+     */
+    public ListIterator listIterator(int index) {
+        if(index<0 || index > _size) {
+            throw new IndexOutOfBoundsException(index + " < 0 or > " + _size);
+        }
+        return new ListIter(index);
+    }
+
+    /**
+     * Removes the first occurrence in this list of the specified element.
+     * If this list does not contain the element, it is
+     * unchanged.  More formally, removes the element with the lowest index i
+     * such that <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt> (if
+     * such an element exists).
+     *
+     * @param o element to be removed from this list, if present.
+     * @return <tt>true</tt> if this list contained the specified element.
+     */
+    public boolean remove(Object o) {
+        for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+            if(null == o && null == elt.value()) {
+                removeListable(elt);
+                return true;
+            } else if(o != null && o.equals(elt.value())) {
+                removeListable(elt);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Removes the element at the specified position in this list (optional
+     * operation).  Shifts any subsequent elements to the left (subtracts one
+     * from their indices).  Returns the element that was removed from the
+     * list.
+     *
+     * @param index the index of the element to removed.
+     * @return the element previously at the specified position.
+     *
+     * @throws IndexOutOfBoundsException if the index is out of range (index
+     *            &lt; 0 || index &gt;= size()).
+     */
+    public Object remove(int index) {
+        Listable elt = getListableAt(index);
+        Object ret = elt.value();
+        removeListable(elt);
+        return ret;
+    }
+
+    /**
+     * Removes from this list all the elements that are contained in the
+     * specified collection.
+     *
+     * @param c collection that defines which elements will be removed from
+     *          this list.
+     * @return <tt>true</tt> if this list changed as a result of the call.
+     */
+    public boolean removeAll(Collection c) {
+        if(0 == c.size() || 0 == _size) {
+            return false;
+        } else {
+            boolean changed = false;
+            Iterator it = iterator();
+            while(it.hasNext()) {
+                if(c.contains(it.next())) {
+                    it.remove();
+                    changed = true;
+                }
+            }
+            return changed;
+        }
+    }
+
+    /**
+     * Removes the first element of this list, if any.
+     */
+    public Object removeFirst() {
+        if(_head.next() != null) {
+            Object val = _head.next().value();
+            removeListable(_head.next());
+            return val;
+        } else {
+            throw new NoSuchElementException();
+        }
+    }
+
+    /**
+     * Removes the last element of this list, if any.
+     */
+    public Object removeLast() {
+        if(_head.prev() != null) {
+            Object val = _head.prev().value();
+            removeListable(_head.prev());
+            return val;
+        } else {
+            throw new NoSuchElementException();
+        }
+    }
+
+    /**
+     * Retains only the elements in this list that are contained in the
+     * specified collection.  In other words, removes
+     * from this list all the elements that are not contained in the specified
+     * collection.
+     *
+     * @param c collection that defines which elements this set will retain.
+     *
+     * @return <tt>true</tt> if this list changed as a result of the call.
+     */
+    public boolean retainAll(Collection c) {
+        boolean changed = false;
+        Iterator it = iterator();
+        while(it.hasNext()) {
+            if(!c.contains(it.next())) {
+                it.remove();
+                changed = true;
+            }
+        }
+        return changed;
+    }
+
+    /**
+     * Replaces the element at the specified position in this list with the
+     * specified element.
+     *
+     * @param index index of element to replace.
+     * @param element element to be stored at the specified position.
+     * @return the element previously at the specified position.
+     *
+     * @throws ClassCastException if the class of the specified element
+     * 		  prevents it from being added to this list.
+     * @throws IllegalArgumentException if some aspect of the specified
+     *	        element prevents it from being added to this list.
+     * @throws IndexOutOfBoundsException if the index is out of range
+     *		     (index &lt; 0 || index &gt;= size()).
+     */
+    public Object set(int index, Object element) {
+        Listable elt = getListableAt(index);
+        Object val = elt.setValue(element);
+        broadcastListableChanged(elt);
+        return val;
+    }
+
+    /**
+     * Returns the number of elements in this list.
+     * @return the number of elements in this list.
+     */
+    public int size() {
+        return _size;
+    }
+
+    /**
+     * Returns an array containing all of the elements in this list in proper
+     * sequence.  Obeys the general contract of the {@link Collection#toArray} method.
+     *
+     * @return an array containing all of the elements in this list in proper
+     *         sequence.
+     */
+    public Object[] toArray() {
+        Object[] array = new Object[_size];
+        int i = 0;
+        for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+            array[i++] = elt.value();
+        }
+        return array;
+    }
+
+    /**
+     * Returns an array containing all of the elements in this list in proper
+     * sequence; the runtime type of the returned array is that of the
+     * specified array. Obeys the general contract of the
+     * {@link Collection#toArray} method.
+     *
+     * @param a      the array into which the elements of this list are to
+     *               be stored, if it is big enough; otherwise, a new array of the
+     *               same runtime type is allocated for this purpose.
+     * @return an array containing the elements of this list.
+     * @exception ArrayStoreException
+     *                   if the runtime type of the specified array
+     *                   is not a supertype of the runtime type of every element in
+     *                   this list.
+     */
+    public Object[] toArray(Object a[]) {
+        if(a.length < _size) {
+            a = (Object[])Array.newInstance(a.getClass().getComponentType(), _size);
+        }
+        int i = 0;
+        for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+            a[i++] = elt.value();
+        }
+        if(a.length > _size) {
+            a[_size] = null; // should we null out the rest of the array also? java.util.LinkedList doesn't
+        }
+        return a;
+    }
+
+    /**
+     * Returns a {@link String} representation of this list, suitable for debugging.
+     * @return a {@link String} representation of this list, suitable for debugging.
+     */
+    public String toString() {
+        StringBuffer buf = new StringBuffer();
+        buf.append("[");
+        for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+            if(_head.next() != elt) {
+                buf.append(", ");
+            }
+            buf.append(elt.value());
+        }
+        buf.append("]");
+        return buf.toString();
+    }
+
+    /**
+     * Returns a fail-fast sublist.
+     * @see List#subList(int,int)
+     */
+    public List subList(int i, int j) {
+        if(i < 0 || j > _size || i > j) {
+            throw new IndexOutOfBoundsException();
+        } else if(i == 0 && j == _size) {
+            return this;
+        } else {
+            return new CursorableSubList(this,i,j);
+        }
+    }
+
+    //--- protected methods ------------------------------------------
+
+    /**
+     * Inserts a new <i>value</i> into my
+     * list, after the specified <i>before</i> element, and before the
+     * specified <i>after</i> element
+     *
+     * @return the newly created 
+     * {@link org.apache.commons.collections.CursorableLinkedList.Listable}
+     */
+    protected Listable insertListable(Listable before, Listable after, Object value) {
+        _modCount++;
+        _size++;
+        Listable elt = new Listable(before,after,value);
+        if(null != before) {
+            before.setNext(elt);
+        } else {
+            _head.setNext(elt);
+        }
+
+        if(null != after) {
+            after.setPrev(elt);
+        } else {
+            _head.setPrev(elt);
+        }
+        broadcastListableInserted(elt);
+        return elt;
+    }
+
+    /**
+     * Removes the given 
+     * {@link org.apache.commons.collections.CursorableLinkedList.Listable} 
+     * from my list.
+     */
+    protected void removeListable(Listable elt) {
+        _modCount++;
+        _size--;
+        if(_head.next() == elt) {
+            _head.setNext(elt.next());
+        }
+        if(null != elt.next()) {
+            elt.next().setPrev(elt.prev());
+        }
+        if(_head.prev() == elt) {
+            _head.setPrev(elt.prev());
+        }
+        if(null != elt.prev()) {
+            elt.prev().setNext(elt.next());
+        }
+        broadcastListableRemoved(elt);
+    }
+
+    /**
+     * Returns the 
+     * {@link org.apache.commons.collections.CursorableLinkedList.Listable} 
+     * at the specified index.
+     *
+     * @throws IndexOutOfBoundsException if index is less than zero or
+     *         greater than or equal to the size of this list.
+     */
+    protected Listable getListableAt(int index) {
+        if(index < 0 || index >= _size) {
+            throw new IndexOutOfBoundsException(String.valueOf(index) + " < 0 or " + String.valueOf(index) + " >= " + _size);
+        }
+        if(index <=_size/2) {
+            Listable elt = _head.next();
+            for(int i = 0; i < index; i++) {
+                elt = elt.next();
+            }
+            return elt;
+        } else {
+            Listable elt = _head.prev();
+            for(int i = (_size-1); i > index; i--) {
+                elt = elt.prev();
+            }
+            return elt;
+        }
+    }
+
+    /**
+     * Registers a {@link CursorableLinkedList.Cursor} to be notified
+     * of changes to this list.
+     */
+    protected void registerCursor(Cursor cur) {
+        // We take this opportunity to clean the _cursors list
+        // of WeakReference objects to garbage-collected cursors.
+        for (Iterator it = _cursors.iterator(); it.hasNext(); ) {
+            WeakReference ref = (WeakReference) it.next();
+            if (ref.get() == null) {
+                it.remove();
+            }
+        }
+        
+        _cursors.add( new WeakReference(cur) );
+    }
+
+    /**
+     * Removes a {@link CursorableLinkedList.Cursor} from
+     * the set of cursors to be notified of changes to this list.
+     */
+    protected void unregisterCursor(Cursor cur) {
+        for (Iterator it = _cursors.iterator(); it.hasNext(); ) {
+            WeakReference ref = (WeakReference) it.next();
+            Cursor cursor = (Cursor) ref.get();
+            if (cursor == null) {
+                // some other unrelated cursor object has been 
+                // garbage-collected; let's take the opportunity to
+                // clean up the cursors list anyway..
+                it.remove();
+                
+            } else if (cursor == cur) {
+                ref.clear();
+                it.remove();
+                break;
+            }
+        }
+    }
+
+    /**
+     * Informs all of my registered cursors that they are now
+     * invalid.
+     */
+    protected void invalidateCursors() {
+        Iterator it = _cursors.iterator();
+        while (it.hasNext()) {
+            WeakReference ref = (WeakReference) it.next();
+            Cursor cursor = (Cursor) ref.get();
+            if (cursor != null) {
+                // cursor is null if object has been garbage-collected
+                cursor.invalidate();
+                ref.clear();
+            }
+            it.remove();
+        }
+    }
+
+    /**
+     * Informs all of my registered cursors that the specified
+     * element was changed.
+     * @see #set(int,java.lang.Object)
+     */
+    protected void broadcastListableChanged(Listable elt) {
+        Iterator it = _cursors.iterator();
+        while (it.hasNext()) {
+            WeakReference ref = (WeakReference) it.next();
+            Cursor cursor = (Cursor) ref.get();
+            if (cursor == null) {
+                it.remove(); // clean up list
+            } else {
+                cursor.listableChanged(elt);
+            }
+        }
+    }
+
+    /**
+     * Informs all of my registered cursors that the specified
+     * element was just removed from my list.
+     */
+    protected void broadcastListableRemoved(Listable elt) {
+        Iterator it = _cursors.iterator();
+        while (it.hasNext()) {
+            WeakReference ref = (WeakReference) it.next();
+            Cursor cursor = (Cursor) ref.get();
+            if (cursor == null) {
+                it.remove(); // clean up list
+            } else {
+                cursor.listableRemoved(elt);
+            }
+        }
+    }
+
+    /**
+     * Informs all of my registered cursors that the specified
+     * element was just added to my list.
+     */
+    protected void broadcastListableInserted(Listable elt) {
+        Iterator it = _cursors.iterator();
+        while (it.hasNext()) {
+            WeakReference ref = (WeakReference) it.next();
+            Cursor cursor = (Cursor) ref.get();
+            if (cursor == null) {
+                it.remove();  // clean up list
+            } else {
+                cursor.listableInserted(elt);
+            }
+        }
+    }
+
+    private void writeObject(ObjectOutputStream out) throws IOException {
+        out.defaultWriteObject();
+        out.writeInt(_size);
+        Listable cur = _head.next();
+        while (cur != null) {
+            out.writeObject(cur.value());
+            cur = cur.next();
+        }
+    }
+
+    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+        in.defaultReadObject();
+        _size = 0;
+        _modCount = 0;
+        _cursors = new ArrayList();
+        _head = new Listable(null,null,null);
+        int size = in.readInt();
+        for (int i=0;i<size;i++) {
+            this.add(in.readObject());
+        }
+    }
+
+    //--- protected attributes ---------------------------------------
+
+    /** The number of elements in me. */
+    protected transient int _size = 0;
+
+    /**
+     * A sentry node.
+     * <p>
+     * <tt>_head.next()</tt> points to the first element in the list,
+     * <tt>_head.prev()</tt> to the last. Note that it is possible for
+     * <tt>_head.next().prev()</tt> and <tt>_head.prev().next()</tt> to be
+     * non-null, as when I am a sublist for some larger list.
+     * Use <tt>== _head.next()</tt> and <tt>== _head.prev()</tt> to determine
+     * if a given 
+     * {@link org.apache.commons.collections.CursorableLinkedList.Listable} 
+     * is the first or last element in the list.
+     */
+    protected transient Listable _head = new Listable(null,null,null);
+
+    /** Tracks the number of structural modifications to me. */
+    protected transient int _modCount = 0;
+
+    /**
+     * A list of the currently {@link CursorableLinkedList.Cursor}s currently
+     * open in this list.
+     */
+    protected transient List _cursors = new ArrayList();
+
+    //--- inner classes ----------------------------------------------
+
+    static class Listable implements Serializable {
+        private Listable _prev = null;
+        private Listable _next = null;
+        private Object _val = null;
+
+        Listable(Listable prev, Listable next, Object val) {
+            _prev = prev;
+            _next = next;
+            _val = val;
+        }
+
+        Listable next() {
+            return _next;
+        }
+
+        Listable prev() {
+            return _prev;
+        }
+
+        Object value() {
+            return _val;
+        }
+
+        void setNext(Listable next) {
+            _next = next;
+        }
+
+        void setPrev(Listable prev) {
+            _prev = prev;
+        }
+
+        Object setValue(Object val) {
+            Object temp = _val;
+            _val = val;
+            return temp;
+        }
+    }
+
+    class ListIter implements ListIterator {
+        Listable _cur = null;
+        Listable _lastReturned = null;
+        int _expectedModCount = _modCount;
+        int _nextIndex = 0;
+
+        ListIter(int index) {
+            if(index == 0) {
+                _cur = new Listable(null,_head.next(),null);
+                _nextIndex = 0;
+            } else if(index == _size) {
+                _cur = new Listable(_head.prev(),null,null);
+                _nextIndex = _size;
+            } else {
+                Listable temp = getListableAt(index);
+                _cur = new Listable(temp.prev(),temp,null);
+                _nextIndex = index;
+            }
+        }
+
+        public Object previous() {
+            checkForComod();
+            if(!hasPrevious()) {
+                throw new NoSuchElementException();
+            } else {
+                Object ret = _cur.prev().value();
+                _lastReturned = _cur.prev();
+                _cur.setNext(_cur.prev());
+                _cur.setPrev(_cur.prev().prev());
+                _nextIndex--;
+                return ret;
+            }
+        }
+
+        public boolean hasNext() {
+            checkForComod();
+            return(null != _cur.next() && _cur.prev() != _head.prev());
+        }
+
+        public Object next() {
+            checkForComod();
+            if(!hasNext()) {
+                throw new NoSuchElementException();
+            } else {
+                Object ret = _cur.next().value();
+                _lastReturned = _cur.next();
+                _cur.setPrev(_cur.next());
+                _cur.setNext(_cur.next().next());
+                _nextIndex++;
+                return ret;
+            }
+        }
+
+        public int previousIndex() {
+            checkForComod();
+            if(!hasPrevious()) {
+                return -1;
+            }
+            return _nextIndex-1;
+        }
+
+        public boolean hasPrevious() {
+            checkForComod();
+            return(null != _cur.prev() && _cur.next() != _head.next());
+        }
+
+        public void set(Object o) {
+            checkForComod();
+            try {
+                _lastReturned.setValue(o);
+            } catch(NullPointerException e) {
+                throw new IllegalStateException();
+            }
+        }
+
+        public int nextIndex() {
+            checkForComod();
+            if(!hasNext()) {
+                return size();
+            }
+            return _nextIndex;
+        }
+
+        public void remove() {
+            checkForComod();
+            if(null == _lastReturned) {
+                throw new IllegalStateException();
+            } else {
+                _cur.setNext(_lastReturned == _head.prev() ? null : _lastReturned.next());
+                _cur.setPrev(_lastReturned == _head.next() ? null : _lastReturned.prev());
+                removeListable(_lastReturned);
+                _lastReturned = null;
+                _nextIndex--;
+                _expectedModCount++;
+            }
+        }
+
+        public void add(Object o) {
+            checkForComod();
+            _cur.setPrev(insertListable(_cur.prev(),_cur.next(),o));
+            _lastReturned = null;
+            _nextIndex++;
+            _expectedModCount++;
+        }
+
+        protected void checkForComod() {
+            if(_expectedModCount != _modCount) {
+                throw new ConcurrentModificationException();
+            }
+        }
+    }
+
+    public class Cursor extends ListIter implements ListIterator {
+        boolean _valid = false;
+
+        Cursor(int index) {
+            super(index);
+            _valid = true;
+            registerCursor(this);
+        }
+
+        public int previousIndex() {
+            throw new UnsupportedOperationException();
+        }
+
+        public int nextIndex() {
+            throw new UnsupportedOperationException();
+        }
+
+        public void add(Object o) {
+            checkForComod();
+            Listable elt = insertListable(_cur.prev(),_cur.next(),o);
+            _cur.setPrev(elt);
+            _cur.setNext(elt.next());
+            _lastReturned = null;
+            _nextIndex++;
+            _expectedModCount++;
+        }
+
+        protected void listableRemoved(Listable elt) {
+            if(null == _head.prev()) {
+                _cur.setNext(null);
+            } else if(_cur.next() == elt) {
+                _cur.setNext(elt.next());
+            }
+            if(null == _head.next()) {
+                _cur.setPrev(null);
+            } else if(_cur.prev() == elt) {
+                _cur.setPrev(elt.prev());
+            }
+            if(_lastReturned == elt) {
+                _lastReturned = null;
+            }
+        }
+
+        protected void listableInserted(Listable elt) {
+            if(null == _cur.next() && null == _cur.prev()) {
+                _cur.setNext(elt);
+            } else if(_cur.prev() == elt.prev()) {
+                _cur.setNext(elt);
+            }
+            if(_cur.next() == elt.next()) {
+                _cur.setPrev(elt);
+            }
+            if(_lastReturned == elt) {
+                _lastReturned = null;
+            }
+        }
+
+        protected void listableChanged(Listable elt) {
+            if(_lastReturned == elt) {
+                _lastReturned = null;
+            }
+        }
+
+        protected void checkForComod() {
+            if(!_valid) {
+                throw new ConcurrentModificationException();
+            }
+        }
+
+        protected void invalidate() {
+            _valid = false;
+        }
+
+        /**
+         * Mark this cursor as no longer being needed. Any resources
+         * associated with this cursor are immediately released.
+         * In previous versions of this class, it was mandatory to close
+         * all cursor objects to avoid memory leaks. It is <i>no longer</i>
+         * necessary to call this close method; an instance of this class
+         * can now be treated exactly like a normal iterator.
+         */
+        public void close() {
+            if(_valid) {
+                _valid = false;
+                unregisterCursor(this);
+            }
+        }
+    }
+
+}
+
+/**
+ * @deprecated Use new version in list subpackage, which has been rewritten
+ *  and now returns the cursor from the listIterator method. Will be removed in v4.0
+ */
+class CursorableSubList extends CursorableLinkedList implements List {
+
+    //--- constructors -----------------------------------------------
+
+    CursorableSubList(CursorableLinkedList list, int from, int to) {
+        if(0 > from || list.size() < to) {
+            throw new IndexOutOfBoundsException();
+        } else if(from > to) {
+            throw new IllegalArgumentException();
+        }
+        _list = list;
+        if(from < list.size()) {
+            _head.setNext(_list.getListableAt(from));
+            _pre = (null == _head.next()) ? null : _head.next().prev();
+        } else {
+            _pre = _list.getListableAt(from-1);
+        }
+        if(from == to) {
+            _head.setNext(null);
+            _head.setPrev(null);
+            if(to < list.size()) {
+                _post = _list.getListableAt(to);
+            } else {
+                _post = null;
+            }
+        } else {
+            _head.setPrev(_list.getListableAt(to-1));
+            _post = _head.prev().next();
+        }
+        _size = to - from;
+        _modCount = _list._modCount;
+    }
+
+    //--- public methods ------------------------------------------
+
+    public void clear() {
+        checkForComod();
+        Iterator it = iterator();
+        while(it.hasNext()) {
+            it.next();
+            it.remove();
+        }
+    }
+
+    public Iterator iterator() {
+        checkForComod();
+        return super.iterator();
+    }
+
+    public int size() {
+        checkForComod();
+        return super.size();
+    }
+
+    public boolean isEmpty() {
+        checkForComod();
+        return super.isEmpty();
+    }
+
+    public Object[] toArray() {
+        checkForComod();
+        return super.toArray();
+    }
+
+    public Object[] toArray(Object a[]) {
+        checkForComod();
+        return super.toArray(a);
+    }
+
+    public boolean contains(Object o) {
+        checkForComod();
+        return super.contains(o);
+    }
+
+    public boolean remove(Object o) {
+        checkForComod();
+        return super.remove(o);
+    }
+
+    public Object removeFirst() {
+        checkForComod();
+        return super.removeFirst();
+    }
+
+    public Object removeLast() {
+        checkForComod();
+        return super.removeLast();
+    }
+
+    public boolean addAll(Collection c) {
+        checkForComod();
+        return super.addAll(c);
+    }
+
+    public boolean add(Object o) {
+        checkForComod();
+        return super.add(o);
+    }
+
+    public boolean addFirst(Object o) {
+        checkForComod();
+        return super.addFirst(o);
+    }
+
+    public boolean addLast(Object o) {
+        checkForComod();
+        return super.addLast(o);
+    }
+
+    public boolean removeAll(Collection c) {
+        checkForComod();
+        return super.removeAll(c);
+    }
+
+    public boolean containsAll(Collection c) {
+        checkForComod();
+        return super.containsAll(c);
+    }
+
+    public boolean addAll(int index, Collection c) {
+        checkForComod();
+        return super.addAll(index,c);
+    }
+
+    public int hashCode() {
+        checkForComod();
+        return super.hashCode();
+    }
+
+    public boolean retainAll(Collection c) {
+        checkForComod();
+        return super.retainAll(c);
+    }
+
+    public Object set(int index, Object element) {
+        checkForComod();
+        return super.set(index,element);
+    }
+
+    public boolean equals(Object o) {
+        checkForComod();
+        return super.equals(o);
+    }
+
+    public Object get(int index) {
+        checkForComod();
+        return super.get(index);
+    }
+
+    public Object getFirst() {
+        checkForComod();
+        return super.getFirst();
+    }
+
+    public Object getLast() {
+        checkForComod();
+        return super.getLast();
+    }
+
+    public void add(int index, Object element) {
+        checkForComod();
+        super.add(index,element);
+    }
+
+    public ListIterator listIterator(int index) {
+        checkForComod();
+        return super.listIterator(index);
+    }
+
+    public Object remove(int index) {
+        checkForComod();
+        return super.remove(index);
+    }
+
+    public int indexOf(Object o) {
+        checkForComod();
+        return super.indexOf(o);
+    }
+
+    public int lastIndexOf(Object o) {
+        checkForComod();
+        return super.lastIndexOf(o);
+    }
+
+    public ListIterator listIterator() {
+        checkForComod();
+        return super.listIterator();
+    }
+
+    public List subList(int fromIndex, int toIndex) {
+        checkForComod();
+        return super.subList(fromIndex,toIndex);
+    }
+
+    //--- protected methods ------------------------------------------
+
+    /**
+     * Inserts a new <i>value</i> into my
+     * list, after the specified <i>before</i> element, and before the
+     * specified <i>after</i> element
+     *
+     * @return the newly created {@link CursorableLinkedList.Listable}
+     */
+    protected Listable insertListable(Listable before, Listable after, Object value) {
+        _modCount++;
+        _size++;
+        Listable elt = _list.insertListable((null == before ? _pre : before), (null == after ? _post : after),value);
+        if(null == _head.next()) {
+            _head.setNext(elt);
+            _head.setPrev(elt);
+        }
+        if(before == _head.prev()) {
+            _head.setPrev(elt);
+        }
+        if(after == _head.next()) {
+            _head.setNext(elt);
+        }
+        broadcastListableInserted(elt);
+        return elt;
+    }
+
+    /**
+     * Removes the given {@link CursorableLinkedList.Listable} from my list.
+     */
+    protected void removeListable(Listable elt) {
+        _modCount++;
+        _size--;
+        if(_head.next() == elt && _head.prev() == elt) {
+            _head.setNext(null);
+            _head.setPrev(null);
+        }
+        if(_head.next() == elt) {
+            _head.setNext(elt.next());
+        }
+        if(_head.prev() == elt) {
+            _head.setPrev(elt.prev());
+        }
+        _list.removeListable(elt);
+        broadcastListableRemoved(elt);
+    }
+
+    /**
+     * Test to see if my underlying list has been modified
+     * by some other process.  If it has, throws a
+     * {@link ConcurrentModificationException}, otherwise
+     * quietly returns.
+     *
+     * @throws ConcurrentModificationException
+     */
+    protected void checkForComod() throws ConcurrentModificationException {
+        if(_modCount != _list._modCount) {
+            throw new ConcurrentModificationException();
+        }
+    }
+
+    //--- protected attributes ---------------------------------------
+
+    /** My underlying list */
+    protected CursorableLinkedList _list = null;
+
+    /** The element in my underlying list preceding the first element in my list. */
+    protected Listable _pre = null;
+
+    /** The element in my underlying list following the last element in my list. */
+    protected Listable _post = null;
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DefaultMapBag.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DefaultMapBag.java
new file mode 100755
index 0000000..2701f9d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DefaultMapBag.java
@@ -0,0 +1,454 @@
+/*
+ *  Copyright 2002-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.collections.set.UnmodifiableSet;
+
+/**
+ * A skeletal implementation of the {@link Bag}
+ * interface to minimize the effort required for target implementations.
+ * Subclasses need only to call <code>setMap(Map)</code> in their constructor 
+ * (or invoke the Map constructor) specifying a map instance that will be used
+ * to store the contents of the bag.
+ * <p>
+ * The map will be used to map bag elements to a number; the number represents
+ * the number of occurrences of that element in the bag.
+ *
+ * @deprecated Moved to bag subpackage as AbstractMapBag. Due to be removed in v4.0.
+ * @since Commons Collections 2.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ * 
+ * @author Chuck Burdick
+ * @author Michael A. Smith
+ * @author Stephen Colebourne
+ * @author Janek Bogucki
+ */
+public abstract class DefaultMapBag implements Bag {
+    private Map _map = null;
+    private int _total = 0;
+    private int _mods = 0;
+
+    /**
+     * No-argument constructor.  
+     * Subclasses should invoke <code>setMap(Map)</code> in
+     * their constructors.
+     */
+    public DefaultMapBag() {
+    }
+
+    /**
+     * Constructor that assigns the specified Map as the backing store.
+     * The map must be empty.
+     * 
+     * @param map  the map to assign
+     */
+    protected DefaultMapBag(Map map) {
+        setMap(map);
+    }
+
+    /**
+     * Adds a new element to the bag by incrementing its count in the 
+     * underlying map.
+     *
+     * @param object  the object to add
+     * @return <code>true</code> if the object was not already in the <code>uniqueSet</code>
+     */
+    public boolean add(Object object) {
+        return add(object, 1);
+    }
+
+    /**
+     * Adds a new element to the bag by incrementing its count in the map.
+     *
+     * @param object  the object to search for
+     * @param nCopies  the number of copies to add
+     * @return <code>true</code> if the object was not already in the <code>uniqueSet</code>
+     */
+    public boolean add(Object object, int nCopies) {
+        _mods++;
+        if (nCopies > 0) {
+            int count = (nCopies + getCount(object));
+            _map.put(object, new Integer(count));
+            _total += nCopies;
+            return (count == nCopies);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Invokes {@link #add(Object)} for each element in the given collection.
+     *
+     * @param coll  the collection to add
+     * @return <code>true</code> if this call changed the bag
+     */
+    public boolean addAll(Collection coll) {
+        boolean changed = false;
+        Iterator i = coll.iterator();
+        while (i.hasNext()) {
+            boolean added = add(i.next());
+            changed = changed || added;
+        }
+        return changed;
+    }
+
+    /**
+     * Clears the bag by clearing the underlying map.
+     */
+    public void clear() {
+        _mods++;
+        _map.clear();
+        _total = 0;
+    }
+
+    /**
+     * Determines if the bag contains the given element by checking if the
+     * underlying map contains the element as a key.
+     *
+     * @param object  the object to search for
+     * @return true if the bag contains the given element
+     */
+    public boolean contains(Object object) {
+        return _map.containsKey(object);
+    }
+
+    /**
+     * Determines if the bag contains the given elements.
+     * 
+     * @param coll  the collection to check against
+     * @return <code>true</code> if the Bag contains all the collection
+     */
+    public boolean containsAll(Collection coll) {
+        return containsAll(new HashBag(coll));
+    }
+
+    /**
+     * Returns <code>true</code> if the bag contains all elements in
+     * the given collection, respecting cardinality.
+     * 
+     * @param other  the bag to check against
+     * @return <code>true</code> if the Bag contains all the collection
+     */
+    public boolean containsAll(Bag other) {
+        boolean result = true;
+        Iterator i = other.uniqueSet().iterator();
+        while (i.hasNext()) {
+            Object current = i.next();
+            boolean contains = getCount(current) >= other.getCount(current);
+            result = result && contains;
+        }
+        return result;
+    }
+
+    /**
+     * Returns true if the given object is not null, has the precise type 
+     * of this bag, and contains the same number of occurrences of all the
+     * same elements.
+     *
+     * @param object  the object to test for equality
+     * @return true if that object equals this bag
+     */
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (object instanceof Bag == false) {
+            return false;
+        }
+        Bag other = (Bag) object;
+        if (other.size() != size()) {
+            return false;
+        }
+        for (Iterator it = _map.keySet().iterator(); it.hasNext();) {
+            Object element = it.next();
+            if (other.getCount(element) != getCount(element)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Returns the hash code of the underlying map.
+     *
+     * @return the hash code of the underlying map
+     */
+    public int hashCode() {
+        return _map.hashCode();
+    }
+
+    /**
+     * Returns true if the underlying map is empty.
+     *
+     * @return true if there are no elements in this bag
+     */
+    public boolean isEmpty() {
+        return _map.isEmpty();
+    }
+
+    public Iterator iterator() {
+        return new BagIterator(this, extractList().iterator());
+    }
+
+    static class BagIterator implements Iterator {
+        private DefaultMapBag _parent = null;
+        private Iterator _support = null;
+        private Object _current = null;
+        private int _mods = 0;
+
+        public BagIterator(DefaultMapBag parent, Iterator support) {
+            _parent = parent;
+            _support = support;
+            _current = null;
+            _mods = parent.modCount();
+        }
+
+        public boolean hasNext() {
+            return _support.hasNext();
+        }
+
+        public Object next() {
+            if (_parent.modCount() != _mods) {
+                throw new ConcurrentModificationException();
+            }
+            _current = _support.next();
+            return _current;
+        }
+
+        public void remove() {
+            if (_parent.modCount() != _mods) {
+                throw new ConcurrentModificationException();
+            }
+            _support.remove();
+            _parent.remove(_current, 1);
+            _mods++;
+        }
+    }
+
+    public boolean remove(Object object) {
+        return remove(object, getCount(object));
+    }
+
+    public boolean remove(Object object, int nCopies) {
+        _mods++;
+        boolean result = false;
+        int count = getCount(object);
+        if (nCopies <= 0) {
+            result = false;
+        } else if (count > nCopies) {
+            _map.put(object, new Integer(count - nCopies));
+            result = true;
+            _total -= nCopies;
+        } else { // count > 0 && count <= i  
+            // need to remove all
+            result = (_map.remove(object) != null);
+            _total -= count;
+        }
+        return result;
+    }
+
+    public boolean removeAll(Collection coll) {
+        boolean result = false;
+        if (coll != null) {
+            Iterator i = coll.iterator();
+            while (i.hasNext()) {
+                boolean changed = remove(i.next(), 1);
+                result = result || changed;
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Remove any members of the bag that are not in the given
+     * bag, respecting cardinality.
+     *
+     * @param coll  the collection to retain
+     * @return true if this call changed the collection
+     */
+    public boolean retainAll(Collection coll) {
+        return retainAll(new HashBag(coll));
+    }
+
+    /**
+     * Remove any members of the bag that are not in the given
+     * bag, respecting cardinality.
+     * @see #retainAll(Collection)
+     * 
+     * @param other  the bag to retain
+     * @return <code>true</code> if this call changed the collection
+     */
+    public boolean retainAll(Bag other) {
+        boolean result = false;
+        Bag excess = new HashBag();
+        Iterator i = uniqueSet().iterator();
+        while (i.hasNext()) {
+            Object current = i.next();
+            int myCount = getCount(current);
+            int otherCount = other.getCount(current);
+            if (1 <= otherCount && otherCount <= myCount) {
+                excess.add(current, myCount - otherCount);
+            } else {
+                excess.add(current, myCount);
+            }
+        }
+        if (!excess.isEmpty()) {
+            result = removeAll(excess);
+        }
+        return result;
+    }
+
+    /**
+     * Returns an array of all of this bag's elements.
+     *
+     * @return an array of all of this bag's elements
+     */
+    public Object[] toArray() {
+        return extractList().toArray();
+    }
+
+    /**
+     * Returns an array of all of this bag's elements.
+     *
+     * @param array  the array to populate
+     * @return an array of all of this bag's elements
+     */
+    public Object[] toArray(Object[] array) {
+        return extractList().toArray(array);
+    }
+
+    /**
+     * Returns the number of occurrence of the given element in this bag
+     * by looking up its count in the underlying map.
+     *
+     * @param object  the object to search for
+     * @return the number of occurrences of the object, zero if not found
+     */
+    public int getCount(Object object) {
+        int result = 0;
+        Integer count = MapUtils.getInteger(_map, object);
+        if (count != null) {
+            result = count.intValue();
+        }
+        return result;
+    }
+
+    /**
+     * Returns an unmodifiable view of the underlying map's key set.
+     *
+     * @return the set of unique elements in this bag
+     */
+    public Set uniqueSet() {
+        return UnmodifiableSet.decorate(_map.keySet());
+    }
+
+    /**
+     * Returns the number of elements in this bag.
+     *
+     * @return the number of elements in this bag
+     */
+    public int size() {
+        return _total;
+    }
+
+    /**
+     * Actually walks the bag to make sure the count is correct and
+     * resets the running total
+     * 
+     * @return the current total size
+     */
+    protected int calcTotalSize() {
+        _total = extractList().size();
+        return _total;
+    }
+
+    /**
+     * Utility method for implementations to set the map that backs
+     * this bag. Not intended for interactive use outside of
+     * subclasses.
+     */
+    protected void setMap(Map map) {
+        if (map == null || map.isEmpty() == false) {
+            throw new IllegalArgumentException("The map must be non-null and empty");
+        }
+        _map = map;
+    }
+
+    /**
+     * Utility method for implementations to access the map that backs
+     * this bag. Not intended for interactive use outside of
+     * subclasses.
+     */
+    protected Map getMap() {
+        return _map;
+    }
+
+    /**
+     * Create a list for use in iteration, etc.
+     */
+    private List extractList() {
+        List result = new ArrayList();
+        Iterator i = uniqueSet().iterator();
+        while (i.hasNext()) {
+            Object current = i.next();
+            for (int index = getCount(current); index > 0; index--) {
+                result.add(current);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Return number of modifications for iterator.
+     * 
+     * @return the modification count
+     */
+    private int modCount() {
+        return _mods;
+    }
+
+    /**
+     * Implement a toString() method suitable for debugging.
+     * 
+     * @return a debugging toString
+     */
+    public String toString() {
+        StringBuffer buf = new StringBuffer();
+        buf.append("[");
+        Iterator i = uniqueSet().iterator();
+        while (i.hasNext()) {
+            Object current = i.next();
+            int count = getCount(current);
+            buf.append(count);
+            buf.append(":");
+            buf.append(current);
+            if (i.hasNext()) {
+                buf.append(",");
+            }
+        }
+        buf.append("]");
+        return buf.toString();
+    }
+    
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DefaultMapEntry.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DefaultMapEntry.java
new file mode 100755
index 0000000..464a29d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DefaultMapEntry.java
@@ -0,0 +1,162 @@
+/*
+ *  Copyright 2001-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.Map;
+
+/**
+ * A default implementation of {@link java.util.Map.Entry}
+ *
+ * @deprecated Use the version in the keyvalue subpackage. Will be removed in v4.0
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ * 
+ * @author James Strachan
+ * @author Michael A. Smith
+ * @author Neil O'Toole
+ * @author Stephen Colebourne
+ */
+public class DefaultMapEntry implements Map.Entry, KeyValue {
+    
+    /** The key */
+    private Object key;
+    /** The value */
+    private Object value;
+    
+    /**
+     * Constructs a new <code>DefaultMapEntry</code> with a null key
+     * and null value.
+     */
+    public DefaultMapEntry() {
+        super();
+    }
+
+    /**
+     * Constructs a new <code>DefaultMapEntry</code> with the given
+     * key and given value.
+     *
+     * @param entry  the entry to copy, must not be null
+     * @throws NullPointerException if the entry is null
+     */
+    public DefaultMapEntry(Map.Entry entry) {
+        super();
+        this.key = entry.getKey();
+        this.value = entry.getValue();
+    }
+
+    /**
+     * Constructs a new <code>DefaultMapEntry</code> with the given
+     * key and given value.
+     *
+     * @param key  the key for the entry, may be null
+     * @param value  the value for the entry, may be null
+     */
+    public DefaultMapEntry(Object key, Object value) {
+        super();
+        this.key = key;
+        this.value = value;
+    }
+
+    // Map.Entry interface
+    //-------------------------------------------------------------------------
+    /**
+     * Gets the key from the Map Entry.
+     *
+     * @return the key 
+     */
+    public Object getKey() {
+        return key;
+    }
+
+    /**
+     * Sets the key stored in this Map Entry.
+     * <p>
+     * This Map Entry is not connected to a Map, so only the local data is changed.
+     *
+     * @param key  the new key
+     */
+    public void setKey(Object key) {
+        this.key = key;
+    }
+    
+    /**
+     * Gets the value from the Map Entry.
+     *
+     * @return the value
+     */
+    public Object getValue() {
+        return value;
+    }
+
+    /** 
+     * Sets the value stored in this Map Entry.
+     * <p>
+     * This Map Entry is not connected to a Map, so only the local data is changed.
+     *
+     * @param value  the new value
+     * @return the previous value
+     */
+    public Object setValue(Object value) {
+        Object answer = this.value;
+        this.value = value;
+        return answer;
+    }
+
+    // Basics
+    //-----------------------------------------------------------------------
+    /**
+     * Compares this Map Entry with another Map Entry.
+     * <p>
+     * Implemented per API documentation of {@link java.util.Map.Entry#equals(Object)}
+     * 
+     * @param obj  the object to compare to
+     * @return true if equal key and value
+     */
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (obj instanceof Map.Entry == false) {
+            return false;
+        }
+        Map.Entry other = (Map.Entry) obj;
+        return
+            (getKey() == null ? other.getKey() == null : getKey().equals(other.getKey())) &&
+            (getValue() == null ? other.getValue() == null : getValue().equals(other.getValue()));
+    }
+     
+    /**
+     * Gets a hashCode compatible with the equals method.
+     * <p>
+     * Implemented per API documentation of {@link java.util.Map.Entry#hashCode()}
+     * 
+     * @return a suitable hash code
+     */
+    public int hashCode() {
+        return (getKey() == null ? 0 : getKey().hashCode()) ^
+               (getValue() == null ? 0 : getValue().hashCode()); 
+    }
+
+    /**
+     * Written to match the output of the Map.Entry's used in 
+     * a {@link java.util.HashMap}. 
+     * @since 3.0
+     */
+    public String toString() {
+        return ""+getKey()+"="+getValue();
+    }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DoubleOrderedMap.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DoubleOrderedMap.java
new file mode 100755
index 0000000..0b73668
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DoubleOrderedMap.java
@@ -0,0 +1,1994 @@
+/*
+ *  Copyright 2002-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.commons.collections;
+
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+/**
+ * Red-Black tree-based implementation of Map. This class guarantees
+ * that the map will be in both ascending key order and ascending
+ * value order, sorted according to the natural order for the key's
+ * and value's classes.
+ * <p>
+ * This Map is intended for applications that need to be able to look
+ * up a key-value pairing by either key or value, and need to do so
+ * with equal efficiency.
+ * <p>
+ * While that goal could be accomplished by taking a pair of TreeMaps
+ * and redirecting requests to the appropriate TreeMap (e.g.,
+ * containsKey would be directed to the TreeMap that maps values to
+ * keys, containsValue would be directed to the TreeMap that maps keys
+ * to values), there are problems with that implementation,
+ * particularly when trying to keep the two TreeMaps synchronized with
+ * each other. And if the data contained in the TreeMaps is large, the
+ * cost of redundant storage becomes significant. (See also the new
+ * {@link org.apache.commons.collections.bidimap.DualTreeBidiMap DualTreeBidiMap} and
+ * {@link org.apache.commons.collections.bidimap.DualHashBidiMap DualHashBidiMap}
+ * implementations.)
+ * <p>
+ * This solution keeps the data properly synchronized and minimizes
+ * the data storage. The red-black algorithm is based on TreeMap's,
+ * but has been modified to simultaneously map a tree node by key and
+ * by value. This doubles the cost of put operations (but so does
+ * using two TreeMaps), and nearly doubles the cost of remove
+ * operations (there is a savings in that the lookup of the node to be
+ * removed only has to be performed once). And since only one node
+ * contains the key and value, storage is significantly less than that
+ * required by two TreeMaps.
+ * <p>
+ * There are some limitations placed on data kept in this Map. The
+ * biggest one is this:
+ * <p>
+ * When performing a put operation, neither the key nor the value may
+ * already exist in the Map. In the java.util Map implementations
+ * (HashMap, TreeMap), you can perform a put with an already mapped
+ * key, and neither cares about duplicate values at all ... but this
+ * implementation's put method with throw an IllegalArgumentException
+ * if either the key or the value is already in the Map.
+ * <p>
+ * Obviously, that same restriction (and consequence of failing to
+ * heed that restriction) applies to the putAll method.
+ * <p>
+ * The Map.Entry instances returned by the appropriate methods will
+ * not allow setValue() and will throw an
+ * UnsupportedOperationException on attempts to call that method.
+ * <p>
+ * New methods are added to take advantage of the fact that values are
+ * kept sorted independently of their keys:
+ * <p>
+ * Object getKeyForValue(Object value) is the opposite of get; it
+ * takes a value and returns its key, if any.
+ * <p>
+ * Object removeValue(Object value) finds and removes the specified
+ * value and returns the now un-used key.
+ * <p>
+ * Set entrySetByValue() returns the Map.Entry's in a Set whose
+ * iterator will iterate over the Map.Entry's in ascending order by
+ * their corresponding values.
+ * <p>
+ * Set keySetByValue() returns the keys in a Set whose iterator will
+ * iterate over the keys in ascending order by their corresponding
+ * values.
+ * <p>
+ * Collection valuesByValue() returns the values in a Collection whose
+ * iterator will iterate over the values in ascending order.
+ *
+ * @deprecated Replaced by TreeBidiMap in bidimap subpackage. Due to be removed in v4.0.
+ * @see BidiMap
+ * @see org.apache.commons.collections.bidimap.DualTreeBidiMap
+ * @see org.apache.commons.collections.bidimap.DualHashBidiMap
+ * @since Commons Collections 2.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ * 
+ * @author Marc Johnson
+ */
+public final class DoubleOrderedMap extends AbstractMap {
+//  final for performance
+
+    private static final int KEY = 0;
+    private static final int VALUE = 1;
+    private static final int SUM_OF_INDICES = KEY + VALUE;
+    private static final int FIRST_INDEX = 0;
+    private static final int NUMBER_OF_INDICES = 2;
+    private static final String[] dataName = new String[] { "key", "value" };
+    
+    private Node[] rootNode = new Node[] { null, null };
+    private int nodeCount = 0;
+    private int modifications = 0;
+    private Set[] setOfKeys = new Set[] { null, null };
+    private Set[] setOfEntries = new Set[] { null, null };
+    private Collection[] collectionOfValues = new Collection[] { null, null };
+
+    /**
+     * Construct a new DoubleOrderedMap
+     */
+    public DoubleOrderedMap() {
+    }
+
+    /**
+     * Constructs a new DoubleOrderedMap from an existing Map, with keys and
+     * values sorted
+     *
+     * @param map the map whose mappings are to be placed in this map.
+     *
+     * @throws ClassCastException if the keys in the map are not
+     *                               Comparable, or are not mutually
+     *                               comparable; also if the values in
+     *                               the map are not Comparable, or
+     *                               are not mutually Comparable
+     * @throws NullPointerException if any key or value in the map
+     *                                 is null
+     * @throws IllegalArgumentException if there are duplicate keys
+     *                                     or duplicate values in the
+     *                                     map
+     */
+    public DoubleOrderedMap(final Map map)
+            throws ClassCastException, NullPointerException,
+                   IllegalArgumentException {
+        putAll(map);
+    }
+
+    /**
+     * Returns the key to which this map maps the specified value.
+     * Returns null if the map contains no mapping for this value.
+     *
+     * @param value value whose associated key is to be returned.
+     *
+     * @return the key to which this map maps the specified value, or
+     *         null if the map contains no mapping for this value.
+     *
+     * @throws ClassCastException if the value is of an
+     *                               inappropriate type for this map.
+     * @throws NullPointerException if the value is null
+     */
+    public Object getKeyForValue(final Object value)
+            throws ClassCastException, NullPointerException {
+        return doGet((Comparable) value, VALUE);
+    }
+
+    /**
+     * Removes the mapping for this value from this map if present
+     *
+     * @param value value whose mapping is to be removed from the map.
+     *
+     * @return previous key associated with specified value, or null
+     *         if there was no mapping for value.
+     */
+    public Object removeValue(final Object value) {
+        return doRemove((Comparable) value, VALUE);
+    }
+
+    /**
+     * Returns a set view of the mappings contained in this map. Each
+     * element in the returned set is a Map.Entry. The set is backed
+     * by the map, so changes to the map are reflected in the set, and
+     * vice-versa.  If the map is modified while an iteration over the
+     * set is in progress, the results of the iteration are
+     * undefined. The set supports element removal, which removes the
+     * corresponding mapping from the map, via the Iterator.remove,
+     * Set.remove, removeAll, retainAll and clear operations.  It does
+     * not support the add or addAll operations.<p>
+     *
+     * The difference between this method and entrySet is that
+     * entrySet's iterator() method returns an iterator that iterates
+     * over the mappings in ascending order by key. This method's
+     * iterator method iterates over the mappings in ascending order
+     * by value.
+     *
+     * @return a set view of the mappings contained in this map.
+     */
+    public Set entrySetByValue() {
+
+        if (setOfEntries[VALUE] == null) {
+            setOfEntries[VALUE] = new AbstractSet() {
+
+                public Iterator iterator() {
+
+                    return new DoubleOrderedMapIterator(VALUE) {
+
+                        protected Object doGetNext() {
+                            return lastReturnedNode;
+                        }
+                    };
+                }
+
+                public boolean contains(Object o) {
+
+                    if (!(o instanceof Map.Entry)) {
+                        return false;
+                    }
+
+                    Map.Entry entry = (Map.Entry) o;
+                    Object    key   = entry.getKey();
+                    Node      node  = lookup((Comparable) entry.getValue(),
+                                             VALUE);
+
+                    return (node != null) && node.getData(KEY).equals(key);
+                }
+
+                public boolean remove(Object o) {
+
+                    if (!(o instanceof Map.Entry)) {
+                        return false;
+                    }
+
+                    Map.Entry entry = (Map.Entry) o;
+                    Object    key   = entry.getKey();
+                    Node      node  = lookup((Comparable) entry.getValue(),
+                                             VALUE);
+
+                    if ((node != null) && node.getData(KEY).equals(key)) {
+                        doRedBlackDelete(node);
+
+                        return true;
+                    }
+
+                    return false;
+                }
+
+                public int size() {
+                    return DoubleOrderedMap.this.size();
+                }
+
+                public void clear() {
+                    DoubleOrderedMap.this.clear();
+                }
+            };
+        }
+
+        return setOfEntries[VALUE];
+    }
+
+    /**
+     * Returns a set view of the keys contained in this map.  The set
+     * is backed by the map, so changes to the map are reflected in
+     * the set, and vice-versa. If the map is modified while an
+     * iteration over the set is in progress, the results of the
+     * iteration are undefined. The set supports element removal,
+     * which removes the corresponding mapping from the map, via the
+     * Iterator.remove, Set.remove, removeAll, retainAll, and clear
+     * operations. It does not support the add or addAll
+     * operations.<p>
+     *
+     * The difference between this method and keySet is that keySet's
+     * iterator() method returns an iterator that iterates over the
+     * keys in ascending order by key. This method's iterator method
+     * iterates over the keys in ascending order by value.
+     *
+     * @return a set view of the keys contained in this map.
+     */
+    public Set keySetByValue() {
+
+        if (setOfKeys[VALUE] == null) {
+            setOfKeys[VALUE] = new AbstractSet() {
+
+                public Iterator iterator() {
+
+                    return new DoubleOrderedMapIterator(VALUE) {
+
+                        protected Object doGetNext() {
+                            return lastReturnedNode.getData(KEY);
+                        }
+                    };
+                }
+
+                public int size() {
+                    return DoubleOrderedMap.this.size();
+                }
+
+                public boolean contains(Object o) {
+                    return containsKey(o);
+                }
+
+                public boolean remove(Object o) {
+
+                    int oldnodeCount = nodeCount;
+
+                    DoubleOrderedMap.this.remove(o);
+
+                    return nodeCount != oldnodeCount;
+                }
+
+                public void clear() {
+                    DoubleOrderedMap.this.clear();
+                }
+            };
+        }
+
+        return setOfKeys[VALUE];
+    }
+
+    /**
+     * Returns a collection view of the values contained in this
+     * map. The collection is backed by the map, so changes to the map
+     * are reflected in the collection, and vice-versa. If the map is
+     * modified while an iteration over the collection is in progress,
+     * the results of the iteration are undefined. The collection
+     * supports element removal, which removes the corresponding
+     * mapping from the map, via the Iterator.remove,
+     * Collection.remove, removeAll, retainAll and clear operations.
+     * It does not support the add or addAll operations.<p>
+     *
+     * The difference between this method and values is that values's
+     * iterator() method returns an iterator that iterates over the
+     * values in ascending order by key. This method's iterator method
+     * iterates over the values in ascending order by key.
+     *
+     * @return a collection view of the values contained in this map.
+     */
+    public Collection valuesByValue() {
+
+        if (collectionOfValues[VALUE] == null) {
+            collectionOfValues[VALUE] = new AbstractCollection() {
+
+                public Iterator iterator() {
+
+                    return new DoubleOrderedMapIterator(VALUE) {
+
+                        protected Object doGetNext() {
+                            return lastReturnedNode.getData(VALUE);
+                        }
+                    };
+                }
+
+                public int size() {
+                    return DoubleOrderedMap.this.size();
+                }
+
+                public boolean contains(Object o) {
+                    return containsValue(o);
+                }
+
+                public boolean remove(Object o) {
+
+                    int oldnodeCount = nodeCount;
+
+                    removeValue(o);
+
+                    return nodeCount != oldnodeCount;
+                }
+
+                public boolean removeAll(Collection c) {
+
+                    boolean  modified = false;
+                    Iterator iter     = c.iterator();
+
+                    while (iter.hasNext()) {
+                        if (removeValue(iter.next()) != null) {
+                            modified = true;
+                        }
+                    }
+
+                    return modified;
+                }
+
+                public void clear() {
+                    DoubleOrderedMap.this.clear();
+                }
+            };
+        }
+
+        return collectionOfValues[VALUE];
+    }
+
+    /**
+     * common remove logic (remove by key or remove by value)
+     *
+     * @param o the key, or value, that we're looking for
+     * @param index KEY or VALUE
+     *
+     * @return the key, if remove by value, or the value, if remove by
+     *         key. null if the specified key or value could not be
+     *         found
+     */
+    private Object doRemove(final Comparable o, final int index) {
+
+        Node   node = lookup(o, index);
+        Object rval = null;
+
+        if (node != null) {
+            rval = node.getData(oppositeIndex(index));
+
+            doRedBlackDelete(node);
+        }
+
+        return rval;
+    }
+
+    /**
+     * common get logic, used to get by key or get by value
+     *
+     * @param o the key or value that we're looking for
+     * @param index KEY or VALUE
+     *
+     * @return the key (if the value was mapped) or the value (if the
+     *         key was mapped); null if we couldn't find the specified
+     *         object
+     */
+    private Object doGet(final Comparable o, final int index) {
+
+        checkNonNullComparable(o, index);
+
+        Node node = lookup(o, index);
+
+        return ((node == null)
+                ? null
+                : node.getData(oppositeIndex(index)));
+    }
+
+    /**
+     * Get the opposite index of the specified index
+     *
+     * @param index KEY or VALUE
+     *
+     * @return VALUE (if KEY was specified), else KEY
+     */
+    private int oppositeIndex(final int index) {
+
+        // old trick ... to find the opposite of a value, m or n,
+        // subtract the value from the sum of the two possible
+        // values. (m + n) - m = n; (m + n) - n = m
+        return SUM_OF_INDICES - index;
+    }
+
+    /**
+     * do the actual lookup of a piece of data
+     *
+     * @param data the key or value to be looked up
+     * @param index KEY or VALUE
+     *
+     * @return the desired Node, or null if there is no mapping of the
+     *         specified data
+     */
+    private Node lookup(final Comparable data, final int index) {
+
+        Node rval = null;
+        Node node = rootNode[index];
+
+        while (node != null) {
+            int cmp = compare(data, node.getData(index));
+
+            if (cmp == 0) {
+                rval = node;
+
+                break;
+            } else {
+                node = (cmp < 0)
+                       ? node.getLeft(index)
+                       : node.getRight(index);
+            }
+        }
+
+        return rval;
+    }
+
+    /**
+     * Compare two objects
+     *
+     * @param o1 the first object
+     * @param o2 the second object
+     *
+     * @return negative value if o1 < o2; 0 if o1 == o2; positive
+     *         value if o1 > o2
+     */
+    private static int compare(final Comparable o1, final Comparable o2) {
+        return o1.compareTo(o2);
+    }
+
+    /**
+     * find the least node from a given node. very useful for starting
+     * a sorting iterator ...
+     *
+     * @param node the node from which we will start searching
+     * @param index KEY or VALUE
+     *
+     * @return the smallest node, from the specified node, in the
+     *         specified mapping
+     */
+    private static Node leastNode(final Node node, final int index) {
+
+        Node rval = node;
+
+        if (rval != null) {
+            while (rval.getLeft(index) != null) {
+                rval = rval.getLeft(index);
+            }
+        }
+
+        return rval;
+    }
+
+    /**
+     * get the next larger node from the specified node
+     *
+     * @param node the node to be searched from
+     * @param index KEY or VALUE
+     *
+     * @return the specified node
+     */
+    private Node nextGreater(final Node node, final int index) {
+
+        Node rval = null;
+
+        if (node == null) {
+            rval = null;
+        } else if (node.getRight(index) != null) {
+
+            // everything to the node's right is larger. The least of
+            // the right node's descendants is the next larger node
+            rval = leastNode(node.getRight(index), index);
+        } else {
+
+            // traverse up our ancestry until we find an ancestor that
+            // is null or one whose left child is our ancestor. If we
+            // find a null, then this node IS the largest node in the
+            // tree, and there is no greater node. Otherwise, we are
+            // the largest node in the subtree on that ancestor's left
+            // ... and that ancestor is the next greatest node
+            Node parent = node.getParent(index);
+            Node child  = node;
+
+            while ((parent != null) && (child == parent.getRight(index))) {
+                child  = parent;
+                parent = parent.getParent(index);
+            }
+
+            rval = parent;
+        }
+
+        return rval;
+    }
+
+    /**
+     * copy the color from one node to another, dealing with the fact
+     * that one or both nodes may, in fact, be null
+     *
+     * @param from the node whose color we're copying; may be null
+     * @param to the node whose color we're changing; may be null
+     * @param index KEY or VALUE
+     */
+    private static void copyColor(final Node from, final Node to,
+                                  final int index) {
+
+        if (to != null) {
+            if (from == null) {
+
+                // by default, make it black
+                to.setBlack(index);
+            } else {
+                to.copyColor(from, index);
+            }
+        }
+    }
+
+    /**
+     * is the specified node red? if the node does not exist, no, it's
+     * black, thank you
+     *
+     * @param node the node (may be null) in question
+     * @param index KEY or VALUE
+     */
+    private static boolean isRed(final Node node, final int index) {
+
+        return ((node == null)
+                ? false
+                : node.isRed(index));
+    }
+
+    /**
+     * is the specified black red? if the node does not exist, sure,
+     * it's black, thank you
+     *
+     * @param node the node (may be null) in question
+     * @param index KEY or VALUE
+     */
+    private static boolean isBlack(final Node node, final int index) {
+
+        return ((node == null)
+                ? true
+                : node.isBlack(index));
+    }
+
+    /**
+     * force a node (if it exists) red
+     *
+     * @param node the node (may be null) in question
+     * @param index KEY or VALUE
+     */
+    private static void makeRed(final Node node, final int index) {
+
+        if (node != null) {
+            node.setRed(index);
+        }
+    }
+
+    /**
+     * force a node (if it exists) black
+     *
+     * @param node the node (may be null) in question
+     * @param index KEY or VALUE
+     */
+    private static void makeBlack(final Node node, final int index) {
+
+        if (node != null) {
+            node.setBlack(index);
+        }
+    }
+
+    /**
+     * get a node's grandparent. mind you, the node, its parent, or
+     * its grandparent may not exist. no problem
+     *
+     * @param node the node (may be null) in question
+     * @param index KEY or VALUE
+     */
+    private static Node getGrandParent(final Node node, final int index) {
+        return getParent(getParent(node, index), index);
+    }
+
+    /**
+     * get a node's parent. mind you, the node, or its parent, may not
+     * exist. no problem
+     *
+     * @param node the node (may be null) in question
+     * @param index KEY or VALUE
+     */
+    private static Node getParent(final Node node, final int index) {
+
+        return ((node == null)
+                ? null
+                : node.getParent(index));
+    }
+
+    /**
+     * get a node's right child. mind you, the node may not exist. no
+     * problem
+     *
+     * @param node the node (may be null) in question
+     * @param index KEY or VALUE
+     */
+    private static Node getRightChild(final Node node, final int index) {
+
+        return (node == null)
+               ? null
+               : node.getRight(index);
+    }
+
+    /**
+     * get a node's left child. mind you, the node may not exist. no
+     * problem
+     *
+     * @param node the node (may be null) in question
+     * @param index KEY or VALUE
+     */
+    private static Node getLeftChild(final Node node, final int index) {
+
+        return (node == null)
+               ? null
+               : node.getLeft(index);
+    }
+
+    /**
+     * is this node its parent's left child? mind you, the node, or
+     * its parent, may not exist. no problem. if the node doesn't
+     * exist ... it's its non-existent parent's left child. If the
+     * node does exist but has no parent ... no, we're not the
+     * non-existent parent's left child. Otherwise (both the specified
+     * node AND its parent exist), check.
+     *
+     * @param node the node (may be null) in question
+     * @param index KEY or VALUE
+     */
+    private static boolean isLeftChild(final Node node, final int index) {
+
+        return (node == null)
+               ? true
+               : ((node.getParent(index) == null)
+                  ? false
+                  : (node == node.getParent(index).getLeft(index)));
+    }
+
+    /**
+     * is this node its parent's right child? mind you, the node, or
+     * its parent, may not exist. no problem. if the node doesn't
+     * exist ... it's its non-existent parent's right child. If the
+     * node does exist but has no parent ... no, we're not the
+     * non-existent parent's right child. Otherwise (both the
+     * specified node AND its parent exist), check.
+     *
+     * @param node the node (may be null) in question
+     * @param index KEY or VALUE
+     */
+    private static boolean isRightChild(final Node node, final int index) {
+
+        return (node == null)
+               ? true
+               : ((node.getParent(index) == null)
+                  ? false
+                  : (node == node.getParent(index).getRight(index)));
+    }
+
+    /**
+     * do a rotate left. standard fare in the world of balanced trees
+     *
+     * @param node the node to be rotated
+     * @param index KEY or VALUE
+     */
+    private void rotateLeft(final Node node, final int index) {
+
+        Node rightChild = node.getRight(index);
+
+        node.setRight(rightChild.getLeft(index), index);
+
+        if (rightChild.getLeft(index) != null) {
+            rightChild.getLeft(index).setParent(node, index);
+        }
+
+        rightChild.setParent(node.getParent(index), index);
+
+        if (node.getParent(index) == null) {
+
+            // node was the root ... now its right child is the root
+            rootNode[index] = rightChild;
+        } else if (node.getParent(index).getLeft(index) == node) {
+            node.getParent(index).setLeft(rightChild, index);
+        } else {
+            node.getParent(index).setRight(rightChild, index);
+        }
+
+        rightChild.setLeft(node, index);
+        node.setParent(rightChild, index);
+    }
+
+    /**
+     * do a rotate right. standard fare in the world of balanced trees
+     *
+     * @param node the node to be rotated
+     * @param index KEY or VALUE
+     */
+    private void rotateRight(final Node node, final int index) {
+
+        Node leftChild = node.getLeft(index);
+
+        node.setLeft(leftChild.getRight(index), index);
+
+        if (leftChild.getRight(index) != null) {
+            leftChild.getRight(index).setParent(node, index);
+        }
+
+        leftChild.setParent(node.getParent(index), index);
+
+        if (node.getParent(index) == null) {
+
+            // node was the root ... now its left child is the root
+            rootNode[index] = leftChild;
+        } else if (node.getParent(index).getRight(index) == node) {
+            node.getParent(index).setRight(leftChild, index);
+        } else {
+            node.getParent(index).setLeft(leftChild, index);
+        }
+
+        leftChild.setRight(node, index);
+        node.setParent(leftChild, index);
+    }
+
+    /**
+     * complicated red-black insert stuff. Based on Sun's TreeMap
+     * implementation, though it's barely recognizable any more
+     *
+     * @param insertedNode the node to be inserted
+     * @param index KEY or VALUE
+     */
+    private void doRedBlackInsert(final Node insertedNode, final int index) {
+
+        Node currentNode = insertedNode;
+
+        makeRed(currentNode, index);
+
+        while ((currentNode != null) && (currentNode != rootNode[index])
+                && (isRed(currentNode.getParent(index), index))) {
+            if (isLeftChild(getParent(currentNode, index), index)) {
+                Node y = getRightChild(getGrandParent(currentNode, index),
+                                       index);
+
+                if (isRed(y, index)) {
+                    makeBlack(getParent(currentNode, index), index);
+                    makeBlack(y, index);
+                    makeRed(getGrandParent(currentNode, index), index);
+
+                    currentNode = getGrandParent(currentNode, index);
+                } else {
+                    if (isRightChild(currentNode, index)) {
+                        currentNode = getParent(currentNode, index);
+
+                        rotateLeft(currentNode, index);
+                    }
+
+                    makeBlack(getParent(currentNode, index), index);
+                    makeRed(getGrandParent(currentNode, index), index);
+
+                    if (getGrandParent(currentNode, index) != null) {
+                        rotateRight(getGrandParent(currentNode, index),
+                                    index);
+                    }
+                }
+            } else {
+
+                // just like clause above, except swap left for right
+                Node y = getLeftChild(getGrandParent(currentNode, index),
+                                      index);
+
+                if (isRed(y, index)) {
+                    makeBlack(getParent(currentNode, index), index);
+                    makeBlack(y, index);
+                    makeRed(getGrandParent(currentNode, index), index);
+
+                    currentNode = getGrandParent(currentNode, index);
+                } else {
+                    if (isLeftChild(currentNode, index)) {
+                        currentNode = getParent(currentNode, index);
+
+                        rotateRight(currentNode, index);
+                    }
+
+                    makeBlack(getParent(currentNode, index), index);
+                    makeRed(getGrandParent(currentNode, index), index);
+
+                    if (getGrandParent(currentNode, index) != null) {
+                        rotateLeft(getGrandParent(currentNode, index), index);
+                    }
+                }
+            }
+        }
+
+        makeBlack(rootNode[index], index);
+    }
+
+    /**
+     * complicated red-black delete stuff. Based on Sun's TreeMap
+     * implementation, though it's barely recognizable any more
+     *
+     * @param deletedNode the node to be deleted
+     */
+    private void doRedBlackDelete(final Node deletedNode) {
+
+        for (int index = FIRST_INDEX; index < NUMBER_OF_INDICES; index++) {
+
+            // if deleted node has both left and children, swap with
+            // the next greater node
+            if ((deletedNode.getLeft(index) != null)
+                    && (deletedNode.getRight(index) != null)) {
+                swapPosition(nextGreater(deletedNode, index), deletedNode,
+                             index);
+            }
+
+            Node replacement = ((deletedNode.getLeft(index) != null)
+                                ? deletedNode.getLeft(index)
+                                : deletedNode.getRight(index));
+
+            if (replacement != null) {
+                replacement.setParent(deletedNode.getParent(index), index);
+
+                if (deletedNode.getParent(index) == null) {
+                    rootNode[index] = replacement;
+                } else if (deletedNode
+                           == deletedNode.getParent(index).getLeft(index)) {
+                    deletedNode.getParent(index).setLeft(replacement, index);
+                } else {
+                    deletedNode.getParent(index).setRight(replacement, index);
+                }
+
+                deletedNode.setLeft(null, index);
+                deletedNode.setRight(null, index);
+                deletedNode.setParent(null, index);
+
+                if (isBlack(deletedNode, index)) {
+                    doRedBlackDeleteFixup(replacement, index);
+                }
+            } else {
+
+                // replacement is null
+                if (deletedNode.getParent(index) == null) {
+
+                    // empty tree
+                    rootNode[index] = null;
+                } else {
+
+                    // deleted node had no children
+                    if (isBlack(deletedNode, index)) {
+                        doRedBlackDeleteFixup(deletedNode, index);
+                    }
+
+                    if (deletedNode.getParent(index) != null) {
+                        if (deletedNode
+                                == deletedNode.getParent(index)
+                                    .getLeft(index)) {
+                            deletedNode.getParent(index).setLeft(null, index);
+                        } else {
+                            deletedNode.getParent(index).setRight(null,
+                                                  index);
+                        }
+
+                        deletedNode.setParent(null, index);
+                    }
+                }
+            }
+        }
+
+        shrink();
+    }
+
+    /**
+     * complicated red-black delete stuff. Based on Sun's TreeMap
+     * implementation, though it's barely recognizable any more. This
+     * rebalances the tree (somewhat, as red-black trees are not
+     * perfectly balanced -- perfect balancing takes longer)
+     *
+     * @param replacementNode the node being replaced
+     * @param index KEY or VALUE
+     */
+    private void doRedBlackDeleteFixup(final Node replacementNode,
+                                       final int index) {
+
+        Node currentNode = replacementNode;
+
+        while ((currentNode != rootNode[index])
+                && (isBlack(currentNode, index))) {
+            if (isLeftChild(currentNode, index)) {
+                Node siblingNode =
+                    getRightChild(getParent(currentNode, index), index);
+
+                if (isRed(siblingNode, index)) {
+                    makeBlack(siblingNode, index);
+                    makeRed(getParent(currentNode, index), index);
+                    rotateLeft(getParent(currentNode, index), index);
+
+                    siblingNode = getRightChild(getParent(currentNode, index), index);
+                }
+
+                if (isBlack(getLeftChild(siblingNode, index), index)
+                        && isBlack(getRightChild(siblingNode, index),
+                                   index)) {
+                    makeRed(siblingNode, index);
+
+                    currentNode = getParent(currentNode, index);
+                } else {
+                    if (isBlack(getRightChild(siblingNode, index), index)) {
+                        makeBlack(getLeftChild(siblingNode, index), index);
+                        makeRed(siblingNode, index);
+                        rotateRight(siblingNode, index);
+
+                        siblingNode =
+                            getRightChild(getParent(currentNode, index), index);
+                    }
+
+                    copyColor(getParent(currentNode, index), siblingNode,
+                              index);
+                    makeBlack(getParent(currentNode, index), index);
+                    makeBlack(getRightChild(siblingNode, index), index);
+                    rotateLeft(getParent(currentNode, index), index);
+
+                    currentNode = rootNode[index];
+                }
+            } else {
+                Node siblingNode = getLeftChild(getParent(currentNode, index), index);
+
+                if (isRed(siblingNode, index)) {
+                    makeBlack(siblingNode, index);
+                    makeRed(getParent(currentNode, index), index);
+                    rotateRight(getParent(currentNode, index), index);
+
+                    siblingNode = getLeftChild(getParent(currentNode, index), index);
+                }
+
+                if (isBlack(getRightChild(siblingNode, index), index)
+                        && isBlack(getLeftChild(siblingNode, index), index)) {
+                    makeRed(siblingNode, index);
+
+                    currentNode = getParent(currentNode, index);
+                } else {
+                    if (isBlack(getLeftChild(siblingNode, index), index)) {
+                        makeBlack(getRightChild(siblingNode, index), index);
+                        makeRed(siblingNode, index);
+                        rotateLeft(siblingNode, index);
+
+                        siblingNode =
+                            getLeftChild(getParent(currentNode, index), index);
+                    }
+
+                    copyColor(getParent(currentNode, index), siblingNode,
+                              index);
+                    makeBlack(getParent(currentNode, index), index);
+                    makeBlack(getLeftChild(siblingNode, index), index);
+                    rotateRight(getParent(currentNode, index), index);
+
+                    currentNode = rootNode[index];
+                }
+            }
+        }
+
+        makeBlack(currentNode, index);
+    }
+
+    /**
+     * swap two nodes (except for their content), taking care of
+     * special cases where one is the other's parent ... hey, it
+     * happens.
+     *
+     * @param x one node
+     * @param y another node
+     * @param index KEY or VALUE
+     */
+    private void swapPosition(final Node x, final Node y, final int index) {
+
+        // Save initial values.
+        Node    xFormerParent     = x.getParent(index);
+        Node    xFormerLeftChild  = x.getLeft(index);
+        Node    xFormerRightChild = x.getRight(index);
+        Node    yFormerParent     = y.getParent(index);
+        Node    yFormerLeftChild  = y.getLeft(index);
+        Node    yFormerRightChild = y.getRight(index);
+        boolean xWasLeftChild     =
+            (x.getParent(index) != null)
+            && (x == x.getParent(index).getLeft(index));
+        boolean yWasLeftChild     =
+            (y.getParent(index) != null)
+            && (y == y.getParent(index).getLeft(index));
+
+        // Swap, handling special cases of one being the other's parent.
+        if (x == yFormerParent) {    // x was y's parent
+            x.setParent(y, index);
+
+            if (yWasLeftChild) {
+                y.setLeft(x, index);
+                y.setRight(xFormerRightChild, index);
+            } else {
+                y.setRight(x, index);
+                y.setLeft(xFormerLeftChild, index);
+            }
+        } else {
+            x.setParent(yFormerParent, index);
+
+            if (yFormerParent != null) {
+                if (yWasLeftChild) {
+                    yFormerParent.setLeft(x, index);
+                } else {
+                    yFormerParent.setRight(x, index);
+                }
+            }
+
+            y.setLeft(xFormerLeftChild, index);
+            y.setRight(xFormerRightChild, index);
+        }
+
+        if (y == xFormerParent) {    // y was x's parent
+            y.setParent(x, index);
+
+            if (xWasLeftChild) {
+                x.setLeft(y, index);
+                x.setRight(yFormerRightChild, index);
+            } else {
+                x.setRight(y, index);
+                x.setLeft(yFormerLeftChild, index);
+            }
+        } else {
+            y.setParent(xFormerParent, index);
+
+            if (xFormerParent != null) {
+                if (xWasLeftChild) {
+                    xFormerParent.setLeft(y, index);
+                } else {
+                    xFormerParent.setRight(y, index);
+                }
+            }
+
+            x.setLeft(yFormerLeftChild, index);
+            x.setRight(yFormerRightChild, index);
+        }
+
+        // Fix children's parent pointers
+        if (x.getLeft(index) != null) {
+            x.getLeft(index).setParent(x, index);
+        }
+
+        if (x.getRight(index) != null) {
+            x.getRight(index).setParent(x, index);
+        }
+
+        if (y.getLeft(index) != null) {
+            y.getLeft(index).setParent(y, index);
+        }
+
+        if (y.getRight(index) != null) {
+            y.getRight(index).setParent(y, index);
+        }
+
+        x.swapColors(y, index);
+
+        // Check if root changed
+        if (rootNode[index] == x) {
+            rootNode[index] = y;
+        } else if (rootNode[index] == y) {
+            rootNode[index] = x;
+        }
+    }
+
+    /**
+     * check if an object is fit to be proper input ... has to be
+     * Comparable and non-null
+     *
+     * @param o the object being checked
+     * @param index KEY or VALUE (used to put the right word in the
+     *              exception message)
+     *
+     * @throws NullPointerException if o is null
+     * @throws ClassCastException if o is not Comparable
+     */
+    private static void checkNonNullComparable(final Object o,
+                                               final int index) {
+
+        if (o == null) {
+            throw new NullPointerException(dataName[index]
+                                           + " cannot be null");
+        }
+
+        if (!(o instanceof Comparable)) {
+            throw new ClassCastException(dataName[index]
+                                         + " must be Comparable");
+        }
+    }
+
+    /**
+     * check a key for validity (non-null and implements Comparable)
+     *
+     * @param key the key to be checked
+     *
+     * @throws NullPointerException if key is null
+     * @throws ClassCastException if key is not Comparable
+     */
+    private static void checkKey(final Object key) {
+        checkNonNullComparable(key, KEY);
+    }
+
+    /**
+     * check a value for validity (non-null and implements Comparable)
+     *
+     * @param value the value to be checked
+     *
+     * @throws NullPointerException if value is null
+     * @throws ClassCastException if value is not Comparable
+     */
+    private static void checkValue(final Object value) {
+        checkNonNullComparable(value, VALUE);
+    }
+
+    /**
+     * check a key and a value for validity (non-null and implements
+     * Comparable)
+     *
+     * @param key the key to be checked
+     * @param value the value to be checked
+     *
+     * @throws NullPointerException if key or value is null
+     * @throws ClassCastException if key or value is not Comparable
+     */
+    private static void checkKeyAndValue(final Object key,
+                                         final Object value) {
+        checkKey(key);
+        checkValue(value);
+    }
+
+    /**
+     * increment the modification count -- used to check for
+     * concurrent modification of the map through the map and through
+     * an Iterator from one of its Set or Collection views
+     */
+    private void modify() {
+        modifications++;
+    }
+
+    /**
+     * bump up the size and note that the map has changed
+     */
+    private void grow() {
+
+        modify();
+
+        nodeCount++;
+    }
+
+    /**
+     * decrement the size and note that the map has changed
+     */
+    private void shrink() {
+
+        modify();
+
+        nodeCount--;
+    }
+
+    /**
+     * insert a node by its value
+     *
+     * @param newNode the node to be inserted
+     *
+     * @throws IllegalArgumentException if the node already exists
+     *                                     in the value mapping
+     */
+    private void insertValue(final Node newNode)
+            throws IllegalArgumentException {
+
+        Node node = rootNode[VALUE];
+
+        while (true) {
+            int cmp = compare(newNode.getData(VALUE), node.getData(VALUE));
+
+            if (cmp == 0) {
+                throw new IllegalArgumentException(
+                    "Cannot store a duplicate value (\""
+                    + newNode.getData(VALUE) + "\") in this Map");
+            } else if (cmp < 0) {
+                if (node.getLeft(VALUE) != null) {
+                    node = node.getLeft(VALUE);
+                } else {
+                    node.setLeft(newNode, VALUE);
+                    newNode.setParent(node, VALUE);
+                    doRedBlackInsert(newNode, VALUE);
+
+                    break;
+                }
+            } else {    // cmp > 0
+                if (node.getRight(VALUE) != null) {
+                    node = node.getRight(VALUE);
+                } else {
+                    node.setRight(newNode, VALUE);
+                    newNode.setParent(node, VALUE);
+                    doRedBlackInsert(newNode, VALUE);
+
+                    break;
+                }
+            }
+        }
+    }
+
+    /* ********** START implementation of Map ********** */
+
+    /**
+     * Returns the number of key-value mappings in this map. If the
+     * map contains more than Integer.MAXVALUE elements, returns
+     * Integer.MAXVALUE.
+     *
+     * @return the number of key-value mappings in this map.
+     */
+    public int size() {
+        return nodeCount;
+    }
+
+    /**
+     * Returns true if this map contains a mapping for the specified
+     * key.
+     *
+     * @param key key whose presence in this map is to be tested.
+     *
+     * @return true if this map contains a mapping for the specified
+     *         key.
+     *
+     * @throws ClassCastException if the key is of an inappropriate
+     *                               type for this map.
+     * @throws NullPointerException if the key is null
+     */
+    public boolean containsKey(final Object key)
+            throws ClassCastException, NullPointerException {
+
+        checkKey(key);
+
+        return lookup((Comparable) key, KEY) != null;
+    }
+
+    /**
+     * Returns true if this map maps one or more keys to the
+     * specified value.
+     *
+     * @param value value whose presence in this map is to be tested.
+     *
+     * @return true if this map maps one or more keys to the specified
+     *         value.
+     */
+    public boolean containsValue(final Object value) {
+
+        checkValue(value);
+
+        return lookup((Comparable) value, VALUE) != null;
+    }
+
+    /**
+     * Returns the value to which this map maps the specified
+     * key. Returns null if the map contains no mapping for this key.
+     *
+     * @param key key whose associated value is to be returned.
+     *
+     * @return the value to which this map maps the specified key, or
+     *         null if the map contains no mapping for this key.
+     *
+     * @throws ClassCastException if the key is of an inappropriate
+     *                               type for this map.
+     * @throws NullPointerException if the key is null
+     */
+    public Object get(final Object key)
+            throws ClassCastException, NullPointerException {
+        return doGet((Comparable) key, KEY);
+    }
+
+    /**
+     * Associates the specified value with the specified key in this
+     * map.
+     *
+     * @param key key with which the specified value is to be
+     *            associated.
+     * @param value value to be associated with the specified key.
+     *
+     * @return null
+     *
+     * @throws ClassCastException if the class of the specified key
+     *                               or value prevents it from being
+     *                               stored in this map.
+     * @throws NullPointerException if the specified key or value
+     *                                 is null
+     * @throws IllegalArgumentException if the key duplicates an
+     *                                     existing key, or if the
+     *                                     value duplicates an
+     *                                     existing value
+     */
+    public Object put(final Object key, final Object value)
+            throws ClassCastException, NullPointerException,
+                   IllegalArgumentException {
+
+        checkKeyAndValue(key, value);
+
+        Node node = rootNode[KEY];
+
+        if (node == null) {
+            Node root = new Node((Comparable) key, (Comparable) value);
+
+            rootNode[KEY]   = root;
+            rootNode[VALUE] = root;
+
+            grow();
+        } else {
+            while (true) {
+                int cmp = compare((Comparable) key, node.getData(KEY));
+
+                if (cmp == 0) {
+                    throw new IllegalArgumentException(
+                        "Cannot store a duplicate key (\"" + key
+                        + "\") in this Map");
+                } else if (cmp < 0) {
+                    if (node.getLeft(KEY) != null) {
+                        node = node.getLeft(KEY);
+                    } else {
+                        Node newNode = new Node((Comparable) key,
+                                                (Comparable) value);
+
+                        insertValue(newNode);
+                        node.setLeft(newNode, KEY);
+                        newNode.setParent(node, KEY);
+                        doRedBlackInsert(newNode, KEY);
+                        grow();
+
+                        break;
+                    }
+                } else {    // cmp > 0
+                    if (node.getRight(KEY) != null) {
+                        node = node.getRight(KEY);
+                    } else {
+                        Node newNode = new Node((Comparable) key,
+                                                (Comparable) value);
+
+                        insertValue(newNode);
+                        node.setRight(newNode, KEY);
+                        newNode.setParent(node, KEY);
+                        doRedBlackInsert(newNode, KEY);
+                        grow();
+
+                        break;
+                    }
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Removes the mapping for this key from this map if present
+     *
+     * @param key key whose mapping is to be removed from the map.
+     *
+     * @return previous value associated with specified key, or null
+     *         if there was no mapping for key.
+     */
+    public Object remove(final Object key) {
+        return doRemove((Comparable) key, KEY);
+    }
+
+    /**
+     * Removes all mappings from this map
+     */
+    public void clear() {
+
+        modify();
+
+        nodeCount   = 0;
+        rootNode[KEY]   = null;
+        rootNode[VALUE] = null;
+    }
+
+    /**
+     * Returns a set view of the keys contained in this map.  The set
+     * is backed by the map, so changes to the map are reflected in
+     * the set, and vice-versa. If the map is modified while an
+     * iteration over the set is in progress, the results of the
+     * iteration are undefined. The set supports element removal,
+     * which removes the corresponding mapping from the map, via the
+     * Iterator.remove, Set.remove, removeAll, retainAll, and clear
+     * operations.  It does not support the add or addAll operations.
+     *
+     * @return a set view of the keys contained in this map.
+     */
+    public Set keySet() {
+
+        if (setOfKeys[KEY] == null) {
+            setOfKeys[KEY] = new AbstractSet() {
+
+                public Iterator iterator() {
+
+                    return new DoubleOrderedMapIterator(KEY) {
+
+                        protected Object doGetNext() {
+                            return lastReturnedNode.getData(KEY);
+                        }
+                    };
+                }
+
+                public int size() {
+                    return DoubleOrderedMap.this.size();
+                }
+
+                public boolean contains(Object o) {
+                    return containsKey(o);
+                }
+
+                public boolean remove(Object o) {
+
+                    int oldNodeCount = nodeCount;
+
+                    DoubleOrderedMap.this.remove(o);
+
+                    return nodeCount != oldNodeCount;
+                }
+
+                public void clear() {
+                    DoubleOrderedMap.this.clear();
+                }
+            };
+        }
+
+        return setOfKeys[KEY];
+    }
+
+    /**
+     * Returns a collection view of the values contained in this
+     * map. The collection is backed by the map, so changes to the map
+     * are reflected in the collection, and vice-versa. If the map is
+     * modified while an iteration over the collection is in progress,
+     * the results of the iteration are undefined. The collection
+     * supports element removal, which removes the corresponding
+     * mapping from the map, via the Iterator.remove,
+     * Collection.remove, removeAll, retainAll and clear operations.
+     * It does not support the add or addAll operations.
+     *
+     * @return a collection view of the values contained in this map.
+     */
+    public Collection values() {
+
+        if (collectionOfValues[KEY] == null) {
+            collectionOfValues[KEY] = new AbstractCollection() {
+
+                public Iterator iterator() {
+
+                    return new DoubleOrderedMapIterator(KEY) {
+
+                        protected Object doGetNext() {
+                            return lastReturnedNode.getData(VALUE);
+                        }
+                    };
+                }
+
+                public int size() {
+                    return DoubleOrderedMap.this.size();
+                }
+
+                public boolean contains(Object o) {
+                    return containsValue(o);
+                }
+
+                public boolean remove(Object o) {
+
+                    int oldNodeCount = nodeCount;
+
+                    removeValue(o);
+
+                    return nodeCount != oldNodeCount;
+                }
+
+                public boolean removeAll(Collection c) {
+
+                    boolean  modified = false;
+                    Iterator iter     = c.iterator();
+
+                    while (iter.hasNext()) {
+                        if (removeValue(iter.next()) != null) {
+                            modified = true;
+                        }
+                    }
+
+                    return modified;
+                }
+
+                public void clear() {
+                    DoubleOrderedMap.this.clear();
+                }
+            };
+        }
+
+        return collectionOfValues[KEY];
+    }
+
+    /**
+     * Returns a set view of the mappings contained in this map. Each
+     * element in the returned set is a Map.Entry. The set is backed
+     * by the map, so changes to the map are reflected in the set, and
+     * vice-versa.  If the map is modified while an iteration over the
+     * set is in progress, the results of the iteration are
+     * undefined.
+     * <p>
+     * The set supports element removal, which removes the corresponding
+     * mapping from the map, via the Iterator.remove, Set.remove, removeAll,
+     * retainAll and clear operations.
+     * It does not support the add or addAll operations.
+     * The setValue method is not supported on the Map Entry.
+     *
+     * @return a set view of the mappings contained in this map.
+     */
+    public Set entrySet() {
+
+        if (setOfEntries[KEY] == null) {
+            setOfEntries[KEY] = new AbstractSet() {
+
+                public Iterator iterator() {
+
+                    return new DoubleOrderedMapIterator(KEY) {
+
+                        protected Object doGetNext() {
+                            return lastReturnedNode;
+                        }
+                    };
+                }
+
+                public boolean contains(Object o) {
+
+                    if (!(o instanceof Map.Entry)) {
+                        return false;
+                    }
+
+                    Map.Entry entry = (Map.Entry) o;
+                    Object    value = entry.getValue();
+                    Node      node  = lookup((Comparable) entry.getKey(),
+                                             KEY);
+
+                    return (node != null)
+                           && node.getData(VALUE).equals(value);
+                }
+
+                public boolean remove(Object o) {
+
+                    if (!(o instanceof Map.Entry)) {
+                        return false;
+                    }
+
+                    Map.Entry entry = (Map.Entry) o;
+                    Object    value = entry.getValue();
+                    Node      node  = lookup((Comparable) entry.getKey(),
+                                             KEY);
+
+                    if ((node != null) && node.getData(VALUE).equals(value)) {
+                        doRedBlackDelete(node);
+
+                        return true;
+                    }
+
+                    return false;
+                }
+
+                public int size() {
+                    return DoubleOrderedMap.this.size();
+                }
+
+                public void clear() {
+                    DoubleOrderedMap.this.clear();
+                }
+            };
+        }
+
+        return setOfEntries[KEY];
+    }
+
+    /* **********  END  implementation of Map ********** */
+    private abstract class DoubleOrderedMapIterator implements Iterator {
+
+        private int    expectedModifications;
+        protected Node lastReturnedNode;
+        private Node   nextNode;
+        private int    iteratorType;
+
+        /**
+         * Constructor
+         *
+         * @param type
+         */
+        DoubleOrderedMapIterator(final int type) {
+
+            iteratorType          = type;
+            expectedModifications = DoubleOrderedMap.this.modifications;
+            lastReturnedNode      = null;
+            nextNode              = leastNode(rootNode[iteratorType],
+                                              iteratorType);
+        }
+
+        /**
+         * @return 'next', whatever that means for a given kind of
+         *         DoubleOrderedMapIterator
+         */
+        protected abstract Object doGetNext();
+
+        /* ********** START implementation of Iterator ********** */
+
+        /**
+         * @return true if the iterator has more elements.
+         */
+        public final boolean hasNext() {
+            return nextNode != null;
+        }
+
+        /**
+         * @return the next element in the iteration.
+         *
+         * @throws NoSuchElementException if iteration has no more
+         *                                   elements.
+         * @throws ConcurrentModificationException if the
+         *                                            DoubleOrderedMap is
+         *                                            modified behind
+         *                                            the iterator's
+         *                                            back
+         */
+        public final Object next()
+                throws NoSuchElementException,
+                       ConcurrentModificationException {
+
+            if (nextNode == null) {
+                throw new NoSuchElementException();
+            }
+
+            if (modifications != expectedModifications) {
+                throw new ConcurrentModificationException();
+            }
+
+            lastReturnedNode = nextNode;
+            nextNode         = nextGreater(nextNode, iteratorType);
+
+            return doGetNext();
+        }
+
+        /**
+         * Removes from the underlying collection the last element
+         * returned by the iterator. This method can be called only
+         * once per call to next. The behavior of an iterator is
+         * unspecified if the underlying collection is modified while
+         * the iteration is in progress in any way other than by
+         * calling this method.
+         *
+         * @throws IllegalStateException if the next method has not
+         *                                  yet been called, or the
+         *                                  remove method has already
+         *                                  been called after the last
+         *                                  call to the next method.
+         * @throws ConcurrentModificationException if the
+         *                                            DoubleOrderedMap is
+         *                                            modified behind
+         *                                            the iterator's
+         *                                            back
+         */
+        public final void remove()
+                throws IllegalStateException,
+                       ConcurrentModificationException {
+
+            if (lastReturnedNode == null) {
+                throw new IllegalStateException();
+            }
+
+            if (modifications != expectedModifications) {
+                throw new ConcurrentModificationException();
+            }
+
+            doRedBlackDelete(lastReturnedNode);
+
+            expectedModifications++;
+
+            lastReturnedNode = null;
+        }
+
+        /* **********  END  implementation of Iterator ********** */
+    }    // end private abstract class DoubleOrderedMapIterator
+
+    // final for performance
+    private static final class Node implements Map.Entry, KeyValue {
+
+        private Comparable[] data;
+        private Node[]       leftNode;
+        private Node[]       rightNode;
+        private Node[]       parentNode;
+        private boolean[]    blackColor;
+        private int          hashcodeValue;
+        private boolean      calculatedHashCode;
+
+        /**
+         * Make a new cell with given key and value, and with null
+         * links, and black (true) colors.
+         *
+         * @param key
+         * @param value
+         */
+        Node(final Comparable key, final Comparable value) {
+
+            data               = new Comparable[]{ key, value };
+            leftNode           = new Node[]{ null, null };
+            rightNode          = new Node[]{ null, null };
+            parentNode         = new Node[]{ null, null };
+            blackColor         = new boolean[]{ true, true };
+            calculatedHashCode = false;
+        }
+
+        /**
+         * get the specified data
+         *
+         * @param index KEY or VALUE
+         *
+         * @return the key or value
+         */
+        private Comparable getData(final int index) {
+            return data[index];
+        }
+
+        /**
+         * Set this node's left node
+         *
+         * @param node the new left node
+         * @param index KEY or VALUE
+         */
+        private void setLeft(final Node node, final int index) {
+            leftNode[index] = node;
+        }
+
+        /**
+         * get the left node
+         *
+         * @param index KEY or VALUE
+         *
+         * @return the left node -- may be null
+         */
+        private Node getLeft(final int index) {
+            return leftNode[index];
+        }
+
+        /**
+         * Set this node's right node
+         *
+         * @param node the new right node
+         * @param index KEY or VALUE
+         */
+        private void setRight(final Node node, final int index) {
+            rightNode[index] = node;
+        }
+
+        /**
+         * get the right node
+         *
+         * @param index KEY or VALUE
+         *
+         * @return the right node -- may be null
+         */
+        private Node getRight(final int index) {
+            return rightNode[index];
+        }
+
+        /**
+         * Set this node's parent node
+         *
+         * @param node the new parent node
+         * @param index KEY or VALUE
+         */
+        private void setParent(final Node node, final int index) {
+            parentNode[index] = node;
+        }
+
+        /**
+         * get the parent node
+         *
+         * @param index KEY or VALUE
+         *
+         * @return the parent node -- may be null
+         */
+        private Node getParent(final int index) {
+            return parentNode[index];
+        }
+
+        /**
+         * exchange colors with another node
+         *
+         * @param node the node to swap with
+         * @param index KEY or VALUE
+         */
+        private void swapColors(final Node node, final int index) {
+
+            // Swap colors -- old hacker's trick
+            blackColor[index]      ^= node.blackColor[index];
+            node.blackColor[index] ^= blackColor[index];
+            blackColor[index]      ^= node.blackColor[index];
+        }
+
+        /**
+         * is this node black?
+         *
+         * @param index KEY or VALUE
+         *
+         * @return true if black (which is represented as a true boolean)
+         */
+        private boolean isBlack(final int index) {
+            return blackColor[index];
+        }
+
+        /**
+         * is this node red?
+         *
+         * @param index KEY or VALUE
+         *
+         * @return true if non-black
+         */
+        private boolean isRed(final int index) {
+            return !blackColor[index];
+        }
+
+        /**
+         * make this node black
+         *
+         * @param index KEY or VALUE
+         */
+        private void setBlack(final int index) {
+            blackColor[index] = true;
+        }
+
+        /**
+         * make this node red
+         *
+         * @param index KEY or VALUE
+         */
+        private void setRed(final int index) {
+            blackColor[index] = false;
+        }
+
+        /**
+         * make this node the same color as another
+         *
+         * @param node the node whose color we're adopting
+         * @param index KEY or VALUE
+         */
+        private void copyColor(final Node node, final int index) {
+            blackColor[index] = node.blackColor[index];
+        }
+
+        /* ********** START implementation of Map.Entry ********** */
+
+        /**
+         * @return the key corresponding to this entry.
+         */
+        public Object getKey() {
+            return data[KEY];
+        }
+
+        /**
+         * @return the value corresponding to this entry.
+         */
+        public Object getValue() {
+            return data[VALUE];
+        }
+
+        /**
+         * Optional operation that is not permitted in this
+         * implementation
+         *
+         * @param ignored
+         *
+         * @return does not return
+         *
+         * @throws UnsupportedOperationException
+         */
+        public Object setValue(Object ignored)
+                throws UnsupportedOperationException {
+            throw new UnsupportedOperationException(
+                "Map.Entry.setValue is not supported");
+        }
+
+        /**
+         * Compares the specified object with this entry for equality.
+         * Returns true if the given object is also a map entry and
+         * the two entries represent the same mapping.
+         *
+         * @param o object to be compared for equality with this map
+         *          entry.
+         * @return true if the specified object is equal to this map
+         *         entry.
+         */
+        public boolean equals(Object o) {
+
+            if (this == o) {
+                return true;
+            }
+
+            if (!(o instanceof Map.Entry)) {
+                return false;
+            }
+