Add tools version of Proguard
This adds a new prebuilt (Proguard 4.7) in the prebuilt/tools
repository which will be distributed with the tools (instead of the
platform version of Proguard in external/. This will allow us to
independently update Proguard intended for tools users without
affecting the platform.
Change-Id: I5f190a27bbc3e219a51d754d258c7c7c5b7750b7
diff --git a/common/proguard/MODULE_LICENSE_GPL b/common/proguard/MODULE_LICENSE_GPL
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/common/proguard/MODULE_LICENSE_GPL
diff --git a/common/proguard/README b/common/proguard/README
new file mode 100644
index 0000000..f0415b6
--- /dev/null
+++ b/common/proguard/README
@@ -0,0 +1,39 @@
+There are two distributions of Proguard in the tree:
+
+* external/proguard, which is used by the platform
+
+* prebuilts/tools/common/proguard, which is used by the tools (and
+ distributed to users in the tools/ folder)
+
+These are updated independently since one evolves with the platform,
+and the other with the tools.
+
+Even though there is a MODULE_LICENSE_GPL license marker in this
+directory, note that the Android SDK has an explicit exemption as
+described in the license.html file.
+
+The proguard4.7 directory contains the unzipped contents of the
+official Proguard 4.7 zip file, available from
+ http://proguard.sourceforge.net/index.html
+
+The .zip file is also included here such that the source code can
+easily be used (when debugging) or the distribution rebuilt from
+source (if for some reason the above repository should be
+unavailable).
+
+The sdk/build/tools.atree script will copy part of the proguard4.7
+tree into the tools/ directory. It skips the src/ directory (except
+for task.properties) and build/. Therefore, we removed the following
+two lines from the README file:
+ - src : the source code
+ - build : various alternative build scripts
+such that the copied README reflects the actual contents of the
+distributed tree.
+
+In addition, we added a paragraph to state that the distribution was
+slightly modified.
+
+In addition, the sdk/build/tools.atree will copy in the license.html
+file, which was obtained via
+ wget http://proguard.sourceforge.net/license.html
+ (and the JavaScript redirect element in the <head> was removed)
diff --git a/common/proguard/license.html b/common/proguard/license.html
new file mode 100644
index 0000000..5134165
--- /dev/null
+++ b/common/proguard/license.html
@@ -0,0 +1,49 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard License</title>
+</head>
+<body>
+
+<h2>License</h2>
+
+<b>ProGuard</b> is free. You can use it freely for processing your
+applications, commercial or not. Your code obviously remains yours after
+having been processed, and its license can remain the same.
+<p>
+
+<b>ProGuard</b> itself is copyrighted, but its distribution license provides
+you with some rights for modifying and redistributing its code and its
+documentation. More specifically, <b>ProGuard</b> is distributed under the
+terms of the <a href="GPL.html">GNU General Public License</a> (GPL), version
+2, as published by the <a href="http://www.fsf.org/" target="other">Free
+Software Foundation</a> (FSF). In short, this means that you may freely
+redistribute the program, modified or as is, on the condition that you make
+the complete source code available as well. If you develop a program that is
+linked with
+<b>ProGuard</b>, the program as a whole has to be distributed at no charge
+under the GPL. I am granting a <a href="GPL_exception.html">special
+exception</a> to the latter clause (in wording suggested by
+the <a href="http://www.gnu.org/copyleft/gpl-faq.html#GPLIncompatibleLibs"
+target="other">FSF</a>), for combinations with the following stand-alone
+applications: Apache Ant, Apache Maven, the Google Android SDK, the Eclipse
+ProGuardDT GUI, the EclipseME JME IDE, the Oracle NetBeans Java IDE, the Oracle
+JME Wireless Toolkit, the Simple Build Tool for Scala, the NeoMAD Tools by
+Neomades, the Javaground Tools, and the Sanaware Tools.
+
+<p>
+The <b>ProGuard user documentation</b> represents an important part of this
+work. It may only be redistributed without changes, along with the unmodified
+version of the code.
+
+<hr />
+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7.zip b/common/proguard/proguard4.7.zip
new file mode 100644
index 0000000..87e9b47
--- /dev/null
+++ b/common/proguard/proguard4.7.zip
Binary files differ
diff --git a/common/proguard/proguard4.7/README b/common/proguard/proguard4.7/README
new file mode 100644
index 0000000..a8fd359
--- /dev/null
+++ b/common/proguard/proguard4.7/README
@@ -0,0 +1,41 @@
+ProGuard, Java class file shrinker, optimizer, obfuscator, and preverifier
+==========================================================================
+
+This distribution contains the following directories:
+
+- bin : simple wrapper scripts to run ProGuard, its GUI, and ReTrace
+- lib : the main jars, compiled and ready to use with "java -jar ...."
+- docs : the complete documentation, licenses, etc. in html format
+- examples : some example configuration files
+
+The best place to start is docs/index.html
+
+Example
+=======
+
+If you want to give ProGuard a spin right away, try processing the ProGuard
+jar itself:
+
+ cd examples
+ java -jar ../lib/proguard.jar @proguard.pro
+
+The resulting proguard_out.jar contains the same application, but it's a lot
+smaller.
+
+Enjoy!
+
+http://proguard.sourceforge.net/
+
+Copyright (c) 2002-2011 Eric Lafortune (eric@graphics.cornell.edu)
+
+Android Addendum:
+=================
+NOTE: This distribution is identical to the official Proguard 4.7 release,
+with the following modifications:
+- the "src" and "build" directories were deleted (for space considerations)
+- the task.properties file was moved from src/ into ant/ (to be compatible
+ with the directory structure of earlier bundled versions of ProGuard
+- this README file was updated to reflect the above changes
+
+You can download the original proguard4.7.zip, containing the source code,
+from http://proguard.sourceforge.net/.
diff --git a/common/proguard/proguard4.7/bin/proguard.bat b/common/proguard/proguard4.7/bin/proguard.bat
new file mode 100644
index 0000000..73cb313
--- /dev/null
+++ b/common/proguard/proguard4.7/bin/proguard.bat
@@ -0,0 +1,14 @@
+@ECHO OFF
+
+REM Start-up script for ProGuard -- free class file shrinker, optimizer,
+REM obfuscator, and preverifier for Java bytecode.
+REM
+REM Note: when passing file names containing spaces to this script,
+REM you'll have to add escaped quotes around them, e.g.
+REM "\"C:/My Directory/My File.txt\""
+
+IF EXIST "%PROGUARD_HOME%" GOTO home
+SET PROGUARD_HOME=..
+:home
+
+java -jar "%PROGUARD_HOME%"\lib\proguard.jar %*
diff --git a/common/proguard/proguard4.7/bin/proguard.sh b/common/proguard/proguard4.7/bin/proguard.sh
new file mode 100755
index 0000000..5adc047
--- /dev/null
+++ b/common/proguard/proguard4.7/bin/proguard.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+#
+# Start-up script for ProGuard -- free class file shrinker, optimizer,
+# obfuscator, and preverifier for Java bytecode.
+#
+# Note: when passing file names containing spaces to this script,
+# you'll have to add escaped quotes around them, e.g.
+# "\"/My Directory/My File.txt\""
+
+PROGUARD_HOME=`dirname "$0"`/..
+
+java -jar $PROGUARD_HOME/lib/proguard.jar "$@"
diff --git a/common/proguard/proguard4.7/bin/proguardgui.bat b/common/proguard/proguard4.7/bin/proguardgui.bat
new file mode 100644
index 0000000..4aa9aeb
--- /dev/null
+++ b/common/proguard/proguard4.7/bin/proguardgui.bat
@@ -0,0 +1,14 @@
+@ECHO OFF
+
+REM Start-up script for the GUI of ProGuard -- free class file shrinker,
+REM optimizer, obfuscator, and preverifier for Java bytecode.
+REM
+REM Note: when passing file names containing spaces to this script,
+REM you'll have to add escaped quotes around them, e.g.
+REM "\"C:/My Directory/My File.txt\""
+
+IF EXIST "%PROGUARD_HOME%" GOTO home
+SET PROGUARD_HOME=..
+:home
+
+java -jar "%PROGUARD_HOME%"\lib\proguardgui.jar %*
diff --git a/common/proguard/proguard4.7/bin/proguardgui.sh b/common/proguard/proguard4.7/bin/proguardgui.sh
new file mode 100755
index 0000000..c734906
--- /dev/null
+++ b/common/proguard/proguard4.7/bin/proguardgui.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# Start-up script for the GUI of ProGuard -- free class file shrinker,
+# optimizer, obfuscator, and preverifier for Java bytecode.
+#
+# Note: when passing file names containing spaces to this script,
+# you'll have to add escaped quotes around them, e.g.
+# "\"/My Directory/My File.txt\""
+
+PROGUARD_HOME=`dirname "$0"`/..
+
+# On Linux, Java 1.6.0_24 and higher hang when starting the GUI:
+# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7027598
+# We're using the -D option as a workaround.
+java -DsuppressSwingDropSupport=true -jar $PROGUARD_HOME/lib/proguardgui.jar "$@"
diff --git a/common/proguard/proguard4.7/bin/retrace.bat b/common/proguard/proguard4.7/bin/retrace.bat
new file mode 100644
index 0000000..c13b766
--- /dev/null
+++ b/common/proguard/proguard4.7/bin/retrace.bat
@@ -0,0 +1,14 @@
+@ECHO OFF
+
+REM Start-up script for Retrace -- companion tool for ProGuard, free class file
+REM shrinker, optimizer, obfuscator, and preverifier for Java bytecode.
+REM
+REM Note: when passing file names containing spaces to this script,
+REM you'll have to add escaped quotes around them, e.g.
+REM "\"C:/My Directory/My File.txt\""
+
+IF EXIST "%PROGUARD_HOME%" GOTO home
+SET PROGUARD_HOME=..
+:home
+
+java -jar "%PROGUARD_HOME%"\lib\retrace.jar %*
diff --git a/common/proguard/proguard4.7/bin/retrace.sh b/common/proguard/proguard4.7/bin/retrace.sh
new file mode 100755
index 0000000..85fd314
--- /dev/null
+++ b/common/proguard/proguard4.7/bin/retrace.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+#
+# Start-up script for Retrace -- companion tool for ProGuard, free class file
+# shrinker, optimizer, obfuscator, and preverifier for Java bytecode.
+#
+# Note: when passing file names containing spaces to this script,
+# you'll have to add escaped quotes around them, e.g.
+# "\"/My Directory/My File.txt\""
+
+PROGUARD_HOME=`dirname "$0"`/..
+
+java -jar $PROGUARD_HOME/lib/retrace.jar "$@"
diff --git a/common/proguard/proguard4.7/build/build.sh b/common/proguard/proguard4.7/build/build.sh
new file mode 100755
index 0000000..eb5fcf7
--- /dev/null
+++ b/common/proguard/proguard4.7/build/build.sh
@@ -0,0 +1,94 @@
+#!/bin/bash
+#
+# GNU/Linux build script for ProGuard.
+
+#
+# Configuration.
+#
+
+ANT_HOME=${ANT_HOME:-/usr/local/java/ant}
+WTK_HOME=${WTK_HOME:-/usr/local/java/wtk}
+
+if [ -z $PROGUARD_HOME ]; then
+ PROGUARD_HOME=$(which "$0")
+ PROGUARD_HOME=$(dirname "$0")/..
+fi
+
+cd "$PROGUARD_HOME"
+
+SRC=src
+CLASSES=classes
+LIB=lib
+
+PROGUARD=proguard/ProGuard
+PROGUARD_GUI=proguard/gui/ProGuardGUI
+RETRACE=proguard/retrace/ReTrace
+ANT_TASK=proguard/ant/ProGuardTask
+WTK_PLUGIN=proguard/wtk/ProGuardObfuscator
+
+ANT_JAR=$ANT_HOME/lib/ant.jar
+WTK_JAR=$WTK_HOME/wtklib/kenv.zip
+
+PROGUARD_JAR=$LIB/proguard.jar
+PROGUARD_GUI_JAR=$LIB/proguardgui.jar
+RETRACE_JAR=$LIB/retrace.jar
+
+#
+# Function definitions.
+#
+
+function compile {
+ # Compile java source files.
+ echo "Compiling ${1//\//.} ..."
+ javac -nowarn -Xlint:none -sourcepath "$SRC" -d "$CLASSES" \
+ "$SRC/$1.java" 2>&1 \
+ | sed -e 's|^| |'
+
+ # Copy resource files.
+ (cd "$SRC"; find $(dirname $1) -maxdepth 1 \
+ \( -name \*.properties -o -name \*.png -o -name \*.gif -o -name \*.pro \) \
+ -exec cp --parents {} "../$CLASSES" \; )
+}
+
+function createjar {
+ echo "Creating $2..."
+ jar -cfm "$2" "$SRC/$(dirname $1)/MANIFEST.MF" -C "$CLASSES" $(dirname $1)
+}
+
+function updatejar {
+ echo "Updating $PROGUARD_JAR..."
+ jar -uf "$PROGUARD_JAR" -C "$CLASSES" $(dirname $1)
+}
+
+#
+# Main script body.
+#
+
+mkdir -p "$CLASSES"
+
+compile $PROGUARD
+createjar $PROGUARD "$PROGUARD_JAR"
+
+compile $PROGUARD_GUI
+createjar $PROGUARD_GUI "$PROGUARD_GUI_JAR"
+
+compile $RETRACE
+createjar $RETRACE "$RETRACE_JAR"
+
+if [ -f "$ANT_JAR" ]; then
+ export CLASSPATH=$ANT_JAR
+ compile $ANT_TASK
+ updatejar $ANT_TASK
+else
+ echo "Please make sure the environment variable ANT_HOME is set correctly,"
+ echo "if you want to compile the optional ProGuard Ant task."
+fi
+
+if [ -f "$WTK_JAR" ]; then
+ export CLASSPATH=$WTK_JAR
+ compile $WTK_PLUGIN
+ updatejar $WTK_PLUGIN
+else
+ echo "Please make sure the environment variable WTK_HOME is set correctly,"
+ echo "if you want to compile the optional ProGuard WTK plugin."
+fi
diff --git a/common/proguard/proguard4.7/build/build.xml b/common/proguard/proguard4.7/build/build.xml
new file mode 100644
index 0000000..a592945
--- /dev/null
+++ b/common/proguard/proguard4.7/build/build.xml
@@ -0,0 +1,171 @@
+<!-- Ant build script for ProGuard. -->
+
+<project name = "proguard"
+ default = "all"
+ basedir = "..">
+
+ <property file = "build/build.properties"/>
+ <property name = "src" value = "src"/>
+ <property name = "classes" value = "classes"/>
+ <property name = "lib" value = "lib"/>
+
+ <property name = "ant.jar" value = "${ant.home}/lib/ant.jar"/>
+ <property name = "wtk.jar" value = "${wtk.home}/wtklib/kenv.jar"/>
+
+ <target name = "all" depends = "basic,options"/>
+ <target name = "basic" depends = "proguard,proguardgui,retrace"/>
+ <target name = "options" depends = "anttask,wtkplugin"/>
+
+ <target name = "proguard" depends = "classes,lib">
+ <javac nowarn = "true"
+ deprecation = "false"
+ srcdir = "${src}"
+ destdir = "${classes}"
+ includes = "proguard/ProGuard.java">
+ <compilerarg value = "-Xlint:none"/>
+ </javac>
+
+ <copy todir = "${classes}">
+ <fileset dir = "${src}">
+ <include name = "proguard/*.properties"/>
+ <include name = "proguard/*.png"/>
+ <include name = "proguard/*.gif"/>
+ <include name = "proguard/*.pro"/>
+ </fileset>
+ </copy>
+
+ <jar jarfile = "${lib}/proguard.jar"
+ manifest = "${src}/proguard/MANIFEST.MF"
+ basedir = "${classes}"
+ includes = "proguard/**"/>
+ </target>
+
+ <target name = "proguardgui" depends = "proguard">
+ <javac nowarn = "true"
+ deprecation = "false"
+ srcdir = "${src}"
+ destdir = "${classes}"
+ includes = "proguard/gui/ProGuardGUI.java">
+ <compilerarg value = "-Xlint:none"/>
+ </javac>
+
+ <copy todir = "${classes}">
+ <fileset dir = "${src}">
+ <include name = "proguard/gui/*.properties"/>
+ <include name = "proguard/gui/*.png"/>
+ <include name = "proguard/gui/*.gif"/>
+ <include name = "proguard/gui/*.pro"/>
+ </fileset>
+ </copy>
+
+ <jar jarfile = "${lib}/proguardgui.jar"
+ manifest = "${src}/proguard/gui/MANIFEST.MF"
+ basedir = "${classes}"
+ includes = "proguard/gui/**"/>
+ </target>
+
+ <target name = "retrace" depends = "classes,lib">
+ <javac nowarn = "true"
+ deprecation = "false"
+ srcdir = "${src}"
+ destdir = "${classes}"
+ includes = "proguard/retrace/ReTrace.java">
+ <compilerarg value = "-Xlint:none"/>
+ </javac>
+
+ <copy todir = "${classes}">
+ <fileset dir = "${src}">
+ <include name = "proguard/retrace/*.properties"/>
+ <include name = "proguard/retrace/*.png"/>
+ <include name = "proguard/retrace/*.gif"/>
+ <include name = "proguard/retrace/*.pro"/>
+ </fileset>
+ </copy>
+
+ <jar jarfile = "${lib}/retrace.jar"
+ manifest = "${src}/proguard/retrace/MANIFEST.MF"
+ basedir = "${classes}"
+ includes = "proguard/retrace/**"/>
+ </target>
+
+ <target name = "anttask" depends = "proguard">
+ <fail message="Please set the value of the property ant.home in the file build/build.properties, if you want to build the optional ProGuard Ant task.">
+ <condition>
+ <not>
+ <available file="${ant.jar}"/>
+ </not>
+ </condition>
+ </fail>
+
+ <javac nowarn = "true"
+ deprecation = "false"
+ classpath = "${ant.jar}"
+ srcdir = "${src}"
+ destdir = "${classes}"
+ includes = "proguard/ant/ProGuardTask.java">
+ <compilerarg value = "-Xlint:none"/>
+ </javac>
+
+ <copy todir = "${classes}">
+ <fileset dir = "${src}">
+ <include name = "proguard/ant/*.properties"/>
+ <include name = "proguard/ant/*.png"/>
+ <include name = "proguard/ant/*.gif"/>
+ <include name = "proguard/ant/*.pro"/>
+ </fileset>
+ </copy>
+
+ <jar jarfile = "${lib}/proguard.jar"
+ update = "true"
+ basedir = "${classes}"
+ includes = "proguard/ant/**"/>
+ </target>
+
+ <target name = "wtkplugin" depends = "proguard">
+ <fail message="Please set the value of the property wtk.home in the file build/build.properties, if you want to build the optional ProGuard WTK plugin.">
+ <condition>
+ <not>
+ <available file="${wtk.jar}"/>
+ </not>
+ </condition>
+ </fail>
+
+ <javac nowarn = "true"
+ deprecation = "false"
+ classpath = "${wtk.jar}"
+ srcdir = "${src}"
+ destdir = "${classes}"
+ includes = "proguard/wtk/ProGuardObfuscator.java">
+ <compilerarg value = "-Xlint:none"/>
+ </javac>
+
+ <copy todir = "${classes}">
+ <fileset dir = "${src}">
+ <include name = "proguard/wtk/*.properties"/>
+ <include name = "proguard/wtk/*.png"/>
+ <include name = "proguard/wtk/*.gif"/>
+ <include name = "proguard/wtk/*.pro"/>
+ </fileset>
+ </copy>
+
+ <jar jarfile = "${lib}/proguard.jar"
+ update = "true"
+ basedir = "${classes}"
+ includes = "proguard/wtk/**"/>
+ </target>
+
+ <target name = "classes">
+ <mkdir dir = "${classes}"/>
+ </target>
+
+ <target name = "lib">
+ <mkdir dir = "${lib}"/>
+ </target>
+
+ <target name = "clean">
+ <delete>
+ <fileset dir = "${classes}"/>
+ <fileset dir = "${lib}"/>
+ </delete>
+ </target>
+</project>
diff --git a/common/proguard/proguard4.7/build/makefile b/common/proguard/proguard4.7/build/makefile
new file mode 100644
index 0000000..0508eb4
--- /dev/null
+++ b/common/proguard/proguard4.7/build/makefile
@@ -0,0 +1,94 @@
+# GNU/Linux makefile for ProGuard.
+
+ANT_HOME = /usr/local/java/ant
+WTK_HOME = /usr/local/java/wtk
+
+PROGUARD_HOME := $(subst ./..,..,$(subst /build/..,/,$(dir $(MAKEFILE_LIST))..))
+SRC = $(PROGUARD_HOME)/src
+CLASSES = $(PROGUARD_HOME)/classes
+LIB = $(PROGUARD_HOME)/lib
+
+ANT_JAR = $(ANT_HOME)/lib/ant.jar
+WTK_JAR = $(WTK_HOME)/wtklib/kenv.zip
+
+CLASSPATH = $(ANT_JAR):$(WTK_JAR)
+
+PROGUARD = proguard/ProGuard
+PROGUARD_GUI = proguard/gui/ProGuardGUI
+RETRACE = proguard/retrace/ReTrace
+ANT_TASK = proguard/ant/ProGuardTask
+WTK_PLUGIN = proguard/wtk/ProGuardObfuscator
+
+TARGETS = $(PROGUARD) $(PROGUARD_GUI) $(RETRACE) $(ANT_TASK) $(WTK_PLUGIN)
+
+JAVAC_OPTIONS = -nowarn -Xlint:none -classpath $(CLASSPATH) -sourcepath $(SRC) -d $(CLASSES)
+
+# Command sequence definitions for creating jars.
+
+define createjar
+ jar -cfm $(LIB)/$@.jar $(SRC)/$(dir $<)MANIFEST.MF \
+ -C $(CLASSES) $(dir $<)
+endef
+
+define updatejar
+ jar -uf $(LIB)/proguard.jar \
+ -C $(CLASSES) $(dir $<)
+endef
+
+# The various targets.
+
+all: basic options
+basic: proguard proguardgui retrace
+options: anttask wtkplugin
+
+proguard: $(PROGUARD)
+ $(createjar)
+
+proguardgui: proguard
+proguardgui: $(PROGUARD_GUI)
+ $(createjar)
+
+retrace: $(RETRACE)
+ $(createjar)
+
+anttask: $(ANT_JAR)
+anttask: $(PROGUARD)
+anttask: $(ANT_TASK)
+ $(updatejar)
+
+wtkplugin: $(WTK_JAR)
+wtkplugin: $(PROGUARD)
+wtkplugin: $(WTK_PLUGIN)
+ $(updatejar)
+
+clean:
+ -rm -fr $(CLASSES) $(LIB)
+
+
+define RESOURCES
+ $(shell find $(SRC)/$(dir $(1)) -maxdepth 1 \( -name \*.properties -o -name \*.png -o -name \*.gif -o -name \*.pro \) -printf $(CLASSES)/$(dir $(1))%P\\n)
+endef
+
+define TARGETRULE
+ $(1): $(CLASSES) $(CLASSES)/$(1).class $(call RESOURCES,$(1)) $(LIB)
+endef
+
+$(foreach TARGET,$(TARGETS),$(eval $(call TARGETRULE,$(TARGET))))
+
+$(CLASSES) $(LIB):
+ -mkdir -p $@
+
+$(CLASSES)/%.class: $(SRC)/%.java
+ javac $(JAVAC_OPTIONS) $^
+
+$(CLASSES)/%.properties $(CLASSES)/%.png $(CLASSES)/%.gif $(CLASSES)/%.pro:
+ cp $(subst $(CLASSES),$(SRC),$@) $@
+
+%.jar %.zip:
+ echo "Please make sure the path to $@ is set"
+ echo "correctly in this $(strip $(MAKEFILE_LIST))."
+ echo "Alternatively, if you don't need the corresponding option,"
+ echo "you can run `make' with the option -k."
+ find $@
+
+.PHONY: all basic options proguard proguardgui retrace anttask wtkplugin clean $(TARGETS) $(OPTIONAL_TARGETS)
diff --git a/common/proguard/proguard4.7/docs/FAQ.html b/common/proguard/proguard4.7/docs/FAQ.html
new file mode 100644
index 0000000..bdc9c04
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/FAQ.html
@@ -0,0 +1,253 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard FAQ</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Frequently Asked Questions</h2>
+
+<h3>Contents</h3>
+
+<ol>
+<li><a href="#shrinking">What is shrinking?</a></li>
+<li><a href="#obfuscation">What is obfuscation?</a></li>
+<li><a href="#preverification">What is preverification?</a></li>
+<li><a href="#optimization">What kind of optimizations does <b>ProGuard</b>
+ support?</a></li>
+<li><a href="#commercial">Can I use <b>ProGuard</b> to process my commercial
+ application?</a></li>
+<li><a href="#jdk1.4">Does <b>ProGuard</b> work with Java 2? Java 5? Java
+ 6?</a></li>
+<li><a href="#jme">Does <b>ProGuard</b> work with Java Micro Edition?</a></li>
+<li><a href="#android">Does <b>ProGuard</b> work for Google Android
+ code?</a></li>
+<li><a href="#blackberry">Does <b>ProGuard</b> work for Blackberry
+ code?</a></li>
+<li><a href="#ant">Does <b>ProGuard</b> have support for Ant?</a></li>
+<li><a href="#gui">Does <b>ProGuard</b> come with a GUI?</a></li>
+<li><a href="#forname">Does <b>ProGuard</b> handle <code>Class.forName</code>
+ calls?</a></li>
+<li><a href="#resource">Does <b>ProGuard</b> handle resource files?</a></li>
+<li><a href="#encrypt">Does <b>ProGuard</b> encrypt strings constants?</a></li>
+<li><a href="#flow">Does <b>ProGuard</b> perform control flow
+ obfuscation?</a></li>
+<li><a href="#incremental">Does <b>ProGuard</b> support incremental
+ obfuscation?</a></li>
+<li><a href="#keywords">Can <b>ProGuard</b> obfuscate using reserved
+ keywords?</a></li>
+<li><a href="#stacktrace">Can <b>ProGuard</b> reconstruct obfuscated stack
+ traces?</a></li>
+</ol>
+
+<h3><a name="shrinking">What is shrinking?</a></h3>
+
+Java source code (.java files) is typically compiled to bytecode (.class
+files). Bytecode is more compact than Java source code, but it may still
+contain a lot of unused code, especially if it includes program libraries.
+Shrinking programs such as <b>ProGuard</b> can analyze bytecode and remove
+unused classes, fields, and methods. The program remains functionally
+equivalent, including the information given in exception stack traces.
+
+<h3><a name="obfuscation">What is obfuscation?</a></h3>
+
+By default, compiled bytecode still contains a lot of debugging information:
+source file names, line numbers, field names, method names, argument names,
+variable names, etc. This information makes it straightforward to decompile
+the bytecode and reverse-engineer entire programs. Sometimes, this is not
+desirable. Obfuscators such as <b>ProGuard</b> can remove the debugging
+information and replace all names by meaningless character sequences, making
+it much harder to reverse-engineer the code. It further compacts the code as a
+bonus. The program remains functionally equivalent, except for the class
+names, method names, and line numbers given in exception stack traces.
+
+<h3><a name="preverification">What is preverification?</a></h3>
+
+When loading class files, the class loader performs some sophisticated
+verification of the byte code. This analysis makes sure the code can't
+accidentally or intentionally break out of the sandbox of the virtual machine.
+Java Micro Edition and Java 6 introduced split verification. This means that
+the JME preverifier and the Java 6 compiler add preverification information to
+the class files (StackMap and StackMapTable attributes, respectively), in order
+to simplify the actual verification step for the class loader. Class files can
+then be loaded faster and in a more memory-efficient way. <b>ProGuard</b> can
+perform the preverification step too, for instance allowing to retarget older
+class files at Java 6.
+
+<h3><a name="optimization">What kind of optimizations does <b>ProGuard</b> support?</a></h3>
+
+Apart from removing unused classes, fields, and methods in the shrinking step,
+<b>ProGuard</b> can also perform optimizations at the bytecode level, inside
+and across methods. Thanks to techniques like control flow analysis, data flow
+analysis, partial evaluation, static single assignment, global value numbering,
+and liveness analysis, <b>ProGuard</b> can:
+
+<ul>
+<li>Evaluate constant expressions.</li>
+<li>Remove unnecessary field accesses and method calls.</li>
+<li>Remove unnecessary branches.</li>
+<li>Remove unnecessary comparisons and instanceof tests.</li>
+<li>Remove unused code blocks.</li>
+<li>Merge identical code blocks.</li>
+<li>Reduce variable allocation.</li>
+<li>Remove write-only fields and unused method parameters.</li>
+<li>Inline constant fields, method parameters, and return values.</li>
+<li>Inline methods that are short or only called once.</li>
+<li>Simplify tail recursion calls.</li>
+<li>Merge classes and interfaces.</li>
+<li>Make methods private, static, and final when possible.</li>
+<li>Make classes static and final when possible.</li>
+<li>Replace interfaces that have single implementations.</li>
+<li>Perform over 200 peephole optimizations, like replacing ...*2 by
+ ...<<1.</li>
+<li>Optionally remove logging code.</li>
+</ul>
+The positive effects of these optimizations will depend on your code and on
+the virtual machine on which the code is executed. Simple virtual machines may
+benefit more than advanced virtual machines with sophisticated JIT compilers.
+At the very least, your bytecode may become a bit smaller.
+<p>
+Some notable optimizations that aren't supported yet:
+<ul>
+<li>Moving constant expressions out of loops.</li>
+<li>Optimizations that require escape analysis.</li>
+</ul>
+
+<h3><a name="commercial">Can I use <b>ProGuard</b> to process my commercial application?</a></h3>
+
+Yes, you can. <b>ProGuard</b> itself is distributed under the GPL, but this
+doesn't affect the programs that you process. Your code remains yours, and
+its license can remain the same.
+
+<h3><a name="jdk1.4">Does <b>ProGuard</b> work with Java 2? Java 5? Java 6? Java 7?</a></h3>
+
+Yes, <b>ProGuard</b> supports all JDKs from 1.1 up to and including 7.0. Java 2
+introduced some small differences in the class file format. Java 5 added
+attributes for generics and for annotations. Java 6 introduced optional
+preverification attributes. Java 7 made preverification obligatory and
+introduced support for dynamic languages. <b>ProGuard</b> handles all versions
+correctly.
+
+<h3><a name="jme">Does <b>ProGuard</b> work with Java Micro Edition?</a></h3>
+
+Yes. <b>ProGuard</b> itself runs in Java Standard Edition, but you can freely
+specify the run-time environment at which your programs are targeted,
+including Java Micro Edition. <b>ProGuard</b> then also performs the required
+preverification, producing more compact results than the traditional external
+preverifier.
+<p>
+<b>ProGuard</b> also comes with an obfuscator plug-in for the JME Wireless
+Toolkit.
+
+<h3><a name="android">Does <b>ProGuard</b> work for Google Android code?</a></h3>
+
+Yes. Google's <code>dx</code> compiler converts ordinary jar files into files
+that run on Android devices. By preprocessing the original jar files,
+<b>ProGuard</b> can significantly reduce the file sizes and boost the run-time
+performance of the code.
+
+<h3><a name="blackberry">Does <b>ProGuard</b> work for Blackberry code?</a></h3>
+
+It should. RIM's proprietary <code>rapc</code> compiler converts ordinary JME
+jar files into cod files that run on Blackberry devices. The compiler performs
+quite a few optimizations, but preprocessing the jar files with
+<b>ProGuard</b> can generally still reduce the final code size by a few
+percent. However, the <code>rapc</code> compiler also seems to contain some
+bugs. It sometimes fails on obfuscated code that is valid and accepted by other
+JME tools and VMs. Your mileage may therefore vary.
+
+<h3><a name="ant">Does <b>ProGuard</b> have support for Ant?</a></h3>
+
+Yes. <b>ProGuard</b> provides an Ant task, so that it integrates seamlessly
+into your Ant build processes. You can still use configurations in
+<b>ProGuard</b>'s own readable format. Alternatively, if you prefer XML, you
+can specify the equivalent XML configuration.
+
+<h3><a name="gui">Does <b>ProGuard</b> come with a GUI?</a></h3>
+
+Yes. First of all, <b>ProGuard</b> is perfectly usable as a command-line tool
+that can easily be integrated into any automatic build process. For casual
+users, there's also a graphical user interface that simplifies creating,
+loading, editing, executing, and saving ProGuard configurations.
+
+<h3><a name="forname">Does <b>ProGuard</b> handle <code>Class.forName</code> calls?</a></h3>
+
+Yes. <b>ProGuard</b> automatically handles constructs like
+<code>Class.forName("SomeClass")</code> and <code>SomeClass.class</code>. The
+referenced classes are preserved in the shrinking phase, and the string
+arguments are properly replaced in the obfuscation phase.
+<p>
+With variable string arguments, it's generally not possible to determine their
+possible values. They might be read from a configuration file, for instance.
+However, <b>ProGuard</b> will note a number of constructs like
+"<code>(SomeClass)Class.forName(variable).newInstance()</code>". These might
+be an indication that the class or interface <code>SomeClass</code> and/or its
+implementations may need to be preserved. The user can adapt his configuration
+accordingly.
+
+<h3><a name="resource">Does <b>ProGuard</b> handle resource files?</a></h3>
+
+Yes. <b>ProGuard</b> copies all non-class resource files, optionally adapting
+their names and their contents to the obfuscation that has been applied.
+
+<h3><a name="encrypt">Does <b>ProGuard</b> encrypt strings constants?</a></h3>
+
+No. Storing encrypted string constants in program code is fairly futile, since
+the encryption has to be perfectly reversible by definition. Moreover, the
+decryption costs additional memory and computation at run-time. If this feature
+is ever incorporated, I'll provide a tool to decrypt the strings as well.
+
+<h3><a name="flow">Does <b>ProGuard</b> perform flow obfuscation?</a></h3>
+
+Not explicitly. Control flow obfuscation injects additional branches into the
+bytecode, in an attempt to fool decompilers. <b>ProGuard</b> does not do this,
+in order to avoid any negative effects on performance and size. However, the
+optimization step often already restructures the code to the point where most
+decompilers get confused.
+
+<h3><a name="incremental">Does <b>ProGuard</b> support incremental obfuscation?</a></h3>
+
+Yes. This feature allows you to specify a previous obfuscation mapping file in
+a new obfuscation step, in order to produce add-ons or patches for obfuscated
+code.
+
+<h3><a name="keywords">Can <b>ProGuard</b> obfuscate using reserved keywords?</a></h3>
+
+Yes. You can specify your own obfuscation dictionary, such as a list of
+reserved key words, identifiers with foreign characters, random source files,
+or a text by Shakespeare. Note that this hardly improves the obfuscation.
+Decent decompilers can automatically replace reserved keywords, and the effect
+can be undone fairly easily, by obfuscating again with simpler names.
+
+<h3><a name="stacktrace">Can <b>ProGuard</b> reconstruct obfuscated stack traces?</a></h3>
+
+Yes. <b>ProGuard</b> comes with a companion tool, <b>ReTrace</b>, that can
+'de-obfuscate' stack traces produced by obfuscated applications. The
+reconstruction is based on the mapping file that <b>ProGuard</b> can write
+out. If line numbers have been obfuscated away, a list of alternative method
+names is presented for each obfuscated method name that has an ambiguous
+reverse mapping. Please refer to the <a href="manual/index.html">ProGuard User
+Manual</a> for more details.
+
+<hr />
+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/GPL.html b/common/proguard/proguard4.7/docs/GPL.html
new file mode 100644
index 0000000..c7a2458
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/GPL.html
@@ -0,0 +1,406 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>GNU General Public License</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
+<H1>GNU General Public License</H1>
+<H2>Table of Contents</H2>
+<UL>
+
+ <LI><A NAME="TOC1" HREF="#SEC1">GNU GENERAL PUBLIC LICENSE</A>
+<UL>
+<LI><A NAME="TOC2" HREF="#SEC2">Preamble</A>
+<LI><A NAME="TOC3" HREF="#SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A>
+
+</UL>
+</UL>
+
+<P>
+
+<HR>
+
+<P>
+
+
+
+<H2><A NAME="SEC1" HREF="#TOC1">GNU GENERAL PUBLIC LICENSE</A></H2>
+<P>
+Version 2, June 1991
+
+</P>
+
+<PRE>
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+</PRE>
+
+
+
+<H2><A NAME="SEC2" HREF="#TOC2">Preamble</A></H2>
+
+<P>
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+</P>
+<P>
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+</P>
+<P>
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+</P>
+<P>
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+</P>
+<P>
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+</P>
+<P>
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+</P>
+<P>
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+</P>
+<P>
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+</P>
+
+
+<H2><A NAME="SEC3" HREF="#TOC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A></H2>
+
+
+<P>
+
+<STRONG>0.</STRONG>
+ This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+<P>
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+<P>
+
+<STRONG>1.</STRONG>
+ You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+<P>
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+<P>
+
+<STRONG>2.</STRONG>
+ You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+<P>
+
+<UL>
+
+<LI><STRONG>a)</STRONG>
+ You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+<P>
+<LI><STRONG>b)</STRONG>
+ You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+<P>
+<LI><STRONG>c)</STRONG>
+ If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+</UL>
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+<P>
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+<P>
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+<P>
+
+<STRONG>3.</STRONG>
+ You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+
+<!-- we use this doubled UL to get the sub-sections indented, -->
+<!-- while making the bullets as unobvious as possible. -->
+<UL>
+
+<LI><STRONG>a)</STRONG>
+ Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+<P>
+<LI><STRONG>b)</STRONG>
+ Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+<P>
+<LI><STRONG>c)</STRONG>
+ Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+</UL>
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+<P>
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+<P>
+
+<STRONG>4.</STRONG>
+ You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+<P>
+
+<STRONG>5.</STRONG>
+ You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+<P>
+
+<STRONG>6.</STRONG>
+ Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+<P>
+
+<STRONG>7.</STRONG>
+ If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+<P>
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+<P>
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+<P>
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+<P>
+
+<STRONG>8.</STRONG>
+ If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+<P>
+
+<STRONG>9.</STRONG>
+ The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+<P>
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+<P>
+
+
+<STRONG>10.</STRONG>
+ If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+
+
+<P><STRONG>NO WARRANTY</STRONG></P>
+
+<P>
+
+<STRONG>11.</STRONG>
+ BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+<P>
+
+<STRONG>12.</STRONG>
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+<P>
+
+
+<H2>END OF TERMS AND CONDITIONS</H2>
+</BODY>
+</HTML>
diff --git a/common/proguard/proguard4.7/docs/GPL_exception.html b/common/proguard/proguard4.7/docs/GPL_exception.html
new file mode 100644
index 0000000..0a1cd4f
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/GPL_exception.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<HTML>
+<HEAD>
+<TITLE>Special Exception to the GNU General Public License</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD">
+<H1>Special Exception to the GNU General Public License</H1>
+
+<P>
+Copyright © 2002-2011 Eric Lafortune
+</P>
+
+<P>
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+</P>
+
+<P>
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+</P>
+
+<P>
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place, Suite 330, Boston, MA 02111-1307 USA
+</P>
+
+<P>
+In addition, as a special exception, Eric Lafortune gives permission to link
+the code of this program with the following stand-alone applications:
+<ul>
+<li>Apache Ant,</li>
+<li>Apache Maven,</li>
+<li>the Google Android SDK,</li>
+<li>the Eclipse ProGuardDT GUI,</li>
+<li>the EclipseME JME IDE,</li>
+<li>the Oracle NetBeans Java IDE,</li>
+<li>the Oracle JME Wireless Toolkit,</li>
+<li>the Simple Build Tool for Scala (and its scripts),</li>
+<li>the NeoMAD Tools by Neomades,</li>
+<li>the Javaground Tools, and</li>
+<li>the Sanaware Tools,</li>
+</ul>
+and distribute linked combinations including the two. You must obey the GNU
+General Public License in all respects for all of the code used other than
+these programs. If you modify this file, you may extend this exception to your
+version of the file, but you are not obligated to do so. If you do not wish to
+do so, delete this exception statement from your version.
+</P>
+
+</BODY>
+</HTML>
diff --git a/common/proguard/proguard4.7/docs/acknowledgements.html b/common/proguard/proguard4.7/docs/acknowledgements.html
new file mode 100644
index 0000000..96ed635
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/acknowledgements.html
@@ -0,0 +1,76 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Acknowledgements</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Acknowledgements</h2>
+
+The first versions of <b>ProGuard</b> grew out of <b>RetroGuard</b>, which its
+author Mark Welsh kindly made available under the GNU Lesser General Public
+License. <b>RetroGuard</b> is a very nice piece of code, but it only performed
+obfuscation. I started from the class file parsing code and wrote my own
+shrinker, optimizer, obfuscator, and preverifier. As of version 4.0, all of the
+original code has been rewritten, so the most obvious remaining similarity are
+the program names.
+<p>
+
+Dirk Schnelle has contributed and maintained the first versions of the Ant
+task. I have rewritten the implementation for version 3.0, but the XML schema
+is still based on his work.
+<p>
+
+Since its first public release, many people have expressed their enthusiasm and
+have chimed in with interesting ideas, bug reports, and bug fixes: Thorsten
+Heit, Oliver Retzl, Jonathan Knudsen, Tarcisio Camara, Bob Drury, Dave Jarvis,
+Marc Chapman, Dave Morehouse, Richard Osbaldeston, Peter Hawkins, Mark
+Sherington, David Sitsky, James Manning, Ptolemy Oberin, Frank-Michael Moser,
+QZ Shines, Thomas Singer, Michele Puccini, Roman Bednarek, Natalia Pujol,
+Daniel Sjöblom, Jan Filipsky, Charles Smith, Gerrit Telkamp, Noel
+Grandin, Torbjörn Söderstedt, Clemens Eisserer, Clark Bassett,
+Eduard Welch, Dawid Weiss, Andrew Wilson, Sean Owen, Niels Gron, Ishan Mehta,
+Steven Adams, Xavier Kral, Stefan Martin, Toby Reyelts,
+and many others. Thanks! Your feedback has been invaluable.
+<p>
+
+<a href="http://www.saikoa.com/" target="_top">Saikoa</a> is providing the
+financial resources for this project.
+<p>
+
+<a href="http://sourceforge.net/projects/proguard/"
+target="other">SourceForge</a> is providing the resources for hosting this
+project and many other projects.
+<p>
+
+The code and these web pages were written using Oracle/Sun's JDKs, Linux,
+IntelliJ IDEA, GNU emacs, bash, sed, awk, and a whole host of other tools that
+continue to make programming interesting.
+<p>
+
+And finally, I'm a great fan of Sanaware's <a
+href="http://www.javadocking.com/" target="other">Java Docking Library</a>.
+
+<hr />
+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/alternatives.html b/common/proguard/proguard4.7/docs/alternatives.html
new file mode 100644
index 0000000..f235692
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/alternatives.html
@@ -0,0 +1,699 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Alternatives</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Alternatives</h2>
+
+There are quite a few Java class file shrinkers, optimizers, obfuscators, and
+preverifiers out there. Users of <b>ProGuard</b> tell me it easily compares
+with the best of them. However, you may want to check that out yourself.
+<p>
+This is a list of the programs of which I'm aware. Obviously, I've never
+personally tested all of them. Many programs, even commercial ones, have been
+abandoned. Please drop me a note if you know of any other shrinkers,
+optimizers, obfuscators, or preverifiers, or if some information provided
+below is incorrect.
+<p>
+
+<table>
+
+<tr>
+<th>Author/Company</th>
+<th>Program</th>
+<th>Shrink.</th>
+<th>Optim.</th>
+<th>Obfusc.</th>
+<th>Preverif.</th>
+<th>License</th>
+</tr>
+
+<tr>
+<td><a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a></td>
+<td><a target="_top" href="http://proguard.sourceforge.net/">ProGuard</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td>Free (GPL)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.informatik.uni-oldenburg.de/leute/hoenicke.html">Jochen Hoenicke</a></td>
+<td><a target="other" href="http://jode.sourceforge.net/">Jode</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Free (GPL)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.cs.cornell.edu/nystrom/">Nate Nystrom</a></td>
+<td><a target="other" href="http://www.cs.purdue.edu/homes/hosking/bloat/">Bloat</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>Free</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://sourceforge.net/users/hchacha/">Hidetoshi Ohuchi</a></td>
+<td><a target="other" href="http://jarg.sourceforge.net/">Jarg</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Free (BSD)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.yworks.com/">yWorks</a></td>
+<td><a target="other" href="http://www.yworks.com/en/products_yguard_about.htm">yGuard</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Free (no source)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://mojo.codehaus.org/">Mojo</a></td>
+<td><a target="other" href="http://mojo.codehaus.org/minijar-maven-plugin/">Minijar</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>Free (Apache)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.riggshill.com/">RiggsHill Software</a></td>
+<td><a target="other" href="http://genjar.sourceforge.net/">GenJar</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>Free (Apache)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://ant.apache.org/">Apache</a></td>
+<td><a target="other" href="http://ant.apache.org/manual/Types/classfileset.html">Ant Classfileset</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>Free (Apache)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.celton.mobi/">Carsten Elton Sørensen</a></td>
+<td><a target="other" href="http://code.google.com/p/treeshaker/">Treeshaker</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>Free (Apache)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.ucdetector.org/">Jörg Spieler</a></td>
+<td><a target="other" href="http://www.ucdetector.org/">UCDetector</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>Free (EPL)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.curious-creature.org/">Romain Guy</a></td>
+<td><a target="other" href="http://www.jroller.com/gfx/entry/get_what_you_need_from">Harvester</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>Free (BSD)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://java.net/projects/dcd/">Emeric Vernat</a></td>
+<td><a target="other" href="http://java.net/projects/dcd/">DCD</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>Free (LGPL)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://sadun-util.sourceforge.net/">Cristiano Sadun</a></td>
+<td><a target="other" href="http://sadun-util.sourceforge.net/pack.html">Pack</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>Free (LGPL)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td>
+<td><a target="other" href="http://www.sable.mcgill.ca/soot/">Soot</a></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>Free (LGPL)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.garret.ru/~knizhnik/">Konstantin Knizhnik</a></td>
+<td><a target="other" href="http://www.garret.ru/~knizhnik/javago/ReadMe.htm">JavaGO</a></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>Free</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.sable.mcgill.ca/">Sable</a></td>
+<td><a target="other" href="http://www.sable.mcgill.ca/JBCO/">JBCO</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Free (LGPL)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://sourceforge.net/users/glurk/">Thorsten Heit</a></td>
+<td><a target="other" href="http://sourceforge.net/projects/javaguard/">JavaGuard</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Free (LGPL)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://mwobfu.sourceforge.net/">Patrick Mueller</a></td>
+<td><a target="other" href="http://mwobfu.sourceforge.net/">Mwobfu</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Free (GPL)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.bebbosoft.de/">BebboSoft</a></td>
+<td><a target="other" href="http://www.bebbosoft.de/#java/mug/index.wiki">Bb_mug</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Free (no source)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://github.com/v6ak">Vít Šesták</a></td>
+<td><a target="other" href="http://github.com/v6ak/Preverifier/">Preverifier</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td>Free (EPL)</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.preemptive.com/">PreEmptive</a></td>
+<td><a target="other" href="http://www.preemptive.com/products/dasho/index.html">DashOPro</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.zelix.com/">Zelix</a></td>
+<td><a target="other" href="http://www.zelix.com/klassmaster/index.html">KlassMaster</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.s-cradle.com/english/index.html">Sophia Cradle</a></td>
+<td><a target="other" href="http://www.s-cradle.com/english/products/sophiacompress_java/index.html">SophiaCompress</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.e-t.com/">Eastridge Technology</a></td>
+<td><a target="other" href="http://www.e-t.com/jshrink.html">Jshrink</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.leesw.com/">LeeSoftware</a></td>
+<td><a target="other" href="http://www.leesw.com/">Smokescreen Obfuscator</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.innaworks.com/">Innaworks</a></td>
+<td><a target="other" href="http://www.innaworks.com/mBooster">mBooster</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.uni-vologda.ac.ru/~c3c/">Sergey Sverdlov</a></td>
+<td><a target="other" href="http://www.uni-vologda.ac.ru/~c3c/jco/">J.Class Optimizer</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.smardec.com/">Smardec</a></td>
+<td><a target="other" href="http://www.allatori.com/">Allatori</a></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://cs.arizona.edu/">U. of Arizona</a></td>
+<td><a target="other" href="http://sandmark.cs.arizona.edu/">SandMark</a></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.force5.com/">Force 5</a></td>
+<td><a target="other" href="http://www.force5.com/JCloak/ProductJCloak.html">JCloak</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.semdesigns.com/">Semantic Designs</a></td>
+<td><a target="other" href="http://www.semdesigns.com/Products/Obfuscators/JavaObfuscator.html">Obfuscator</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.duckware.com/">Duckware</a></td>
+<td><a target="other" href="http://www.duckware.com/jobfuscate/">Jobfuscate</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.arxan.com/">Arxan</a></td>
+<td><a target="other" href="http://www.arxan.com/software-protection-products/java-GuardIt/index.php">GuardIT</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial</td>
+</tr>
+
+<tr>
+<td><a target="other" rel="nofollow" href="http://www.chez.com/vasile/">Vasile Calmatui</a></td>
+<td><a target="other" href="http://www.chez.com/vasile/obfu/VasObfuLite.html">VasObfuLite</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Free</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.alphaworks.ibm.com/">IBM AlphaWorks</a></td>
+<td><a target="other" href="http://www.research.ibm.com/jax/">JAX</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>(discontinued)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.nq4.de/">NQ4</a></td>
+<td><a target="other" rel="nofollow" href="http://www.nq4.de/">Joga</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>(discontinued?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www-i2.informatik.rwth-aachen.de/~markusj/">Markus Jansen</a></td>
+<td><a target="other" rel="nofollow" href="http://www-i2.informatik.rwth-aachen.de/~markusj/jopt/">Jopt</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>(disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.geocities.com/CapeCanaveral/Hall/2334/resume.html">Alexander Shvets</a></td>
+<td><a target="other" rel="nofollow" href="http://www.geocities.com/CapeCanaveral/Hall/2334/Programs/cafebabe.html">CafeBabe</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>(disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://darcs.brianweb.net/">Brian Alliet</a></td>
+<td><a target="other" rel="nofollow" href="http://darcs.brianweb.net/gcclass/">Gcclass</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>(disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.cs.purdue.edu/homes/grothoff/">Christian Grothoff</a></td>
+<td><a target="other" rel="nofollow" href="http://www.ovmj.org/jamit/">Jamit</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td>(disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">Haruaki Tamada</a></td>
+<td><a target="other" rel="nofollow" href="http://donquixote.cafebabe.jp/">DonQuixote</a></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>(disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/">Bajie</a></td>
+<td><a target="other" rel="nofollow" href="http://www.utdallas.edu/~gxz014000/jcmp/">JCMP</a></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>(disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.elegant-software.com/">Elegant Software</a></td>
+<td><a target="other" rel="nofollow" href="http://www.elegant-software.com/software/jmangle/">JMangle</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>(disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.primenet.com/~ej">Eron Jokipii</a></td>
+<td><a target="other" rel="nofollow" href="http://www.primenet.com/~ej">Jobe</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>(disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://jrc.krdl.org.sg/">JRC</a></td>
+<td><a target="other" rel="nofollow" href="http://jrc.krdl.org.sg/decaf/">DeCaf</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>(disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.drjava.de/">Dr. Java</a></td>
+<td><a target="other" rel="nofollow" href="http://www.drjava.de/obfuscator/">Marvin Obfuscator</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>(disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.ibm.com/">IBM</a></td>
+<td><a target="other" rel="nofollow" href="http://www-306.ibm.com/software/wireless/wsdd/">WSDD</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (discontinued?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.s5systems.com/">S5 Systems</a></td>
+<td><a target="other" rel="nofollow" href="http://www.s5systems.com/jPresto.htm">jPresto</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (discontinued?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.plumbdesign.com/">Plumb Design</a></td>
+<td><a target="other" rel="nofollow" href="http://www.condensity.com/">Condensity</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (discontinued)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.4thpass.com/">4th Pass</a></td>
+<td><a target="other" rel="nofollow" href="http://www.4thpass.com/">SourceGuard</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (discontinued?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.codingart.com/">CodingArt</a></td>
+<td><a target="other" rel="nofollow" href="http://www.codingart.com/codeshield.html">CodeShield</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (discontinued?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.software4j.com/">Software4j</a></td>
+<td><a target="other" rel="nofollow" href="http://www.software4j.com/obfuscate4j/">Obfuscate4j</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (discontinued?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.jammconsulting.com/">JAMM Consulting</a></td>
+<td><a target="other" rel="nofollow" href="http://www.jammconsulting.com/jamm/servlet/com.jammconsulting.servlet.JAMMServlet?pageId=ObfuscateProPage">ObfuscatePro</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (discontinued?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.jdevelop.com/">JDevelop</a></td>
+<td><a target="other" rel="nofollow" href="http://www.jdevelop.com/best-java-obfuscator.html">JSCO</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (discontinued?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.4fang.net/">4Fang</a></td>
+<td><a target="other" rel="nofollow" href="http://www.4fang.net/jmix/">JMix</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (discontinued?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.retrologic.com/">RetroLogic</a></td>
+<td><a target="other" rel="nofollow" href="http://www.retrologic.com/">RetroGuard</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.helseth.com/">Helseth</a></td>
+<td><a target="other" rel="nofollow" href="http://www.helseth.com/HJO.htm">JObfuscator</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.vegatech.com/">Vega Technologies</a></td>
+<td><a target="other" rel="nofollow" href="http://www.vegatech.com/jzipper/">JZipper</a></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td>
+<td><a target="other" rel="nofollow" href="http://www.jproof.com/">JProof</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.chainkey.com/">ChainKey</a></td>
+<td><a target="other" rel="nofollow" href="http://www.chainkey.com/en/jcp/">Java Code Protector</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.2lkit.com/">2LKit</a></td>
+<td><a target="other" rel="nofollow" href="http://www.2lkit.com/products/2LKitObf/index.htm">2LKit Obfuscator</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.wingsoft.com/">WingSoft</a></td>
+<td><a target="other" rel="nofollow" href="http://www.wingsoft.com/wingguard.html">WingGuard</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td>
+<td><a target="other" rel="nofollow" href="http://www.sbktech.org/">HashJava</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (disappeared?)</td>
+</tr>
+
+<tr class="disappeared">
+<td><a target="other" rel="nofollow" href="http://www.solutia.ro/">GITS</a></td>
+<td><a target="other" rel="nofollow" href="http://www.solutia.ro/pages/javadc/">Blurfuscator</a></td>
+<td align="center"><br /></td>
+<td align="center"><br /></td>
+<td align="center"><img src="checkmark.gif" width="11" height="11" alt="x" /></td>
+<td align="center"><br /></td>
+<td>Commercial (disappeared?)</td>
+</tr>
+
+</table>
+<p>
+All trademarks are property of their respective holders.
+
+<hr />
+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/checkmark.gif b/common/proguard/proguard4.7/docs/checkmark.gif
new file mode 100644
index 0000000..8afa677
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/checkmark.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/downloads.html b/common/proguard/proguard4.7/docs/downloads.html
new file mode 100644
index 0000000..e322ca6
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/downloads.html
@@ -0,0 +1,623 @@
+
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Downloads</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Downloads</h2>
+
+<b>ProGuard</b> is distributed under the terms of the GNU General Public
+License. Please consult the <a href="license.html">license page</a> for more
+details.
+<p>
+<b>ProGuard</b> is written in Java, so it requires a Java Runtime Environment
+ (JRE 1.4 or higher).
+<p>
+You can download the latest release (containing the program jar, the
+documentation you're reading now, examples, and the source code) from this
+location:
+<p>
+<center><a href="http://sourceforge.net/project/showfiles.php?group_id=54750"
+target="other">Download section</a> (at <a
+href="http://sourceforge.net/projects/proguard/"
+target="other">SourceForge</a>)</center>
+<p>
+
+If you're still working with an older version of <b>ProGuard</b>, check out
+the summary of changes below, to see if you're missing something essential.
+Better look at the up-to-date <a
+href="http://proguard.sourceforge.net/downloads.html">on-line version</a> if
+you're reading a local copy of this page.
+<p>
+The download section may also contain updates with sub-minor version numbers.
+These versions are typically released shortly after their parent versions, for
+applying emergency fixes. Please make sure to look at those if you are
+encountering any problems with recent releases.
+<p>
+Finally, there may be beta versions of upcoming releases. They may be of
+interest too, because they typically contain any less urgent bug fixes
+collected since the previous release.
+<p>
+
+<h3><div>Dec 2011</div> Version 4.7</h3>
+<ul>
+<li>Added support for Java 7.
+<li>Parsing unquoted file names with special characters more leniently.
+<li>Added support for instance methods overriding class methods.
+<li>Added removal of unused parameterless constructors.
+<li>Added removal of empty class initializers.
+<li>Added peephole optimizations for constant strings.
+<li>Avoiding idle optimization passes.
+<li>Improved removal of unused constants after obfuscation.
+<li>Fixed removal of unused classes referenced by annotations.
+<li>Fixed simplifying parameters of constructors that should actually be
+ preserved.
+<li>Fixed simplifying parameters of large numbers of similar constructors.
+<li>Fixed exceptions in optimization of unusual obfuscated code.
+<li>Fixed NullPointerException when specifying <code>-keepclassmembers</code>
+ without specific class or class members.
+<li>Fixed potential problems with mixed-case class name dictionaries when not
+ allowing mixed-case class names.
+<li>Fixed obfuscation of classes with EnclosingMethod attributes that don't
+ specify methods.
+<li>Fixed preverification of returning try blocks with finally blocks, inside
+ try blocks, when compiled with JDK 1.4.
+<li>Fixed sorting of interfaces containing generics.
+<li>Fixed paths in shell scripts.
+<li>Fixed filling in of text fields showing class obfuscation dictionary and
+ package obfuscation dictionary from configuration in GUI.
+<li>Worked around Oracle Java 6/7 bug #7027598 that locked the GUI on Linux.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Feb 2011</div> Version 4.6</h3>
+<ul>
+<li>Added support for synthetic, bridge, and varargs modifiers in configuration.
+<li>Added detection of atomic updater construction with constant arguments.
+<li>Fixed merging of package visible classes.
+<li>Fixed optimization of fields that are only accessed by reflection.
+<li>Fixed optimization of read-only or write-only fields that are volatile.
+<li>Fixed handling of side-effects due to static initializers.
+<li>Fixed handling of bridge flags in obfuscation step.
+<li>Fixed handling of super flag when merging classes.
+<li>Fixed updating of variable tables when optimizing variables.
+<li>Fixed removal of unused parameters with 32 or more parameters.
+<li>Fixed incorrect removal of exception handler for instanceof instruction.
+<li>Fixed inlining of methods with unusual exception handlers.
+<li>Fixed optimization of unusual code causing stack underflow.
+<li>Fixed keeping of constructor parameter names.
+<li>Fixed unwanted wrapping of non-standard META-INF files.
+<li>Fixed filtering of warnings about references to array types.
+<li>Fixed overriding of warning option and note option in Ant task.
+<li>Improved detection of file name extensions for canonical paths.
+<li>Improved printing of seeds specified by <code>-keep</code> options.
+<li>Improved printing of notes about unkept classes.
+<li>Improved checking whether output is up to date.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Jun 2010</div> Version 4.5</h3>
+<ul>
+<li>Added option <code>-keepparameternames</code>.
+<li><code>-dontskipnonpubliclibraryclasses</code> is now set by default. Added
+ <code>-skipnonpubliclibraryclasses</code> as an option.
+<li>Made processing independent of order of input classes to get even more
+ deterministic output.
+<li>Improved constant field propagation.
+<li>Improved renaming of resource files in subdirectories of packages.
+<li>Avoiding making fields in interfaces private.
+<li>Optimizing exception handlers for monitorexit instruction.
+<li>Reduced maximum allowed code length after inlining from 8000 bytes to
+ 7000 bytes.
+<li>Fixed missing warnings about missing library classes.
+<li>Fixed shrinking of annotations with arrays of length 0.
+<li>Fixed handling of -0.0 and NaN values when simplifying expressions.
+<li>Fixed copying of exception handlers when simplifying tail recursion calls.
+<li>Fixed optimization of introspected fields.
+<li>Fixed simplification of unnecessary variable initializations.
+<li>Fixed evaluation of subroutines in pre-JDK 1.5 code.
+<li>Fixed updating of access flags in inner classes information.
+<li>Fixed disabling of field privatization.
+<li>Fixed invocations of privatized methods.
+<li>Fixed updating of local variable debug information in optimization step.
+<li>Fixed print settings without file name in GUI.
+<li>Fixed field privatization setting in GUI.
+<li>Fixed saving incorrectly quoted arguments in GUI.
+<li>Fixed handling of regular expressions with only negators.
+<li>Fixed unwanted wrapping of non-standard META-INF files.
+<li>Fixed regular expression pattern for constructors in ReTrace.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Jul 2009</div> Version 4.4</h3>
+<ul>
+<li>Added new peephole optimizations.
+<li>Added option <code>-optimizations</code> for fine-grained configuration of
+ optimizations.
+<li>Added option <code>-adaptclassstrings</code> for adapting string constants
+ that correspond to obfuscated classes.
+<li>Added option <code>-keeppackagenames</code> for keeping specified package
+ names from being obfuscated.
+<li>Added option <code>-keepdirectories</code> for keeping specified directory
+ entries in output jars.
+<li>Extended options <code>-dontnote</code> and <code>-dontwarn</code> for
+ fine-grained configuration of notes and warnings.
+<li>Added option <code>-regex</code> in ReTrace, for specifying alternative
+ regular expressions to parse stack traces.
+<li>Extended renaming of resource files based on obfuscation.
+<li>Improved inlining of constant parameters and removal of unused parameters.
+<li>Avoiding bug in IBM's JVM for JSE, in optimization step.
+<li>Avoiding ArrayIndexOutOfBoundsException in optimization step.
+<li>Fixed configuration with annotations that are not preserved themselves.
+<li>Fixed preverification of invocations of super constructors with arguments
+ containing ternary operators.
+<li>Fixed processing of unreachable exception handlers.
+<li>Fixed merging of exception classes.
+<li>Fixed repeated method inlining.
+<li>Fixed inlining of finally blocks surrounded by large try blocks, compiled
+ with JDK 1.4 or earlier.
+<li>Fixed optimization of complex finally blocks, compiled with JDK 1.4 or
+ earlier.
+<li>Fixed obfuscation of anonymous class names, if <code>EnclosingMethod</code>
+ attributes are being kept.
+<li>Fixed obfuscation of inner class names in generic types.
+<li>Fixed decoding of UTF-8 strings containing special characters.
+<li>Fixed copying of debug information and annotations when merging classes.
+<li>Fixed writing out of unknown attributes.
+<li>Fixed updating manifest files with split lines.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Dec 2008</div> Version 4.3</h3>
+<ul>
+<li>Added class merging.
+<li>Added static single assignment analysis.
+<li>Added support for annotation and enumeration class types in configuration.
+<li>Refined shrinking of fields in case of unusual
+ <code>-keepclassmembers</code> options.
+<li>Added simplification of tail recursion calls.
+<li>Added new peephole optimizations.
+<li>Fixed optimization of unused variable initializations causing negative
+ stack sizes.
+<li>Fixed optimization of unusual initialization code causing
+ NullPointerExceptions.
+<li>Fixed optimization of half-used long and double parameters.
+<li>Fixed processing of complex generics signatures.
+<li>Working around suspected java compiler bug with parameter annotations on
+ constructors of non-static inner classes.
+<li>Fixed obfuscation of classes with inner classes whose names are preserved.
+<li>Fixed access of protected methods in repackaged classes.
+<li>Added options <code>-classobfuscationdictionary</code> and
+ <code>-packageobfuscationdictionary</code>.
+<li>Adapting more types of resource file names based on obfuscation.
+<li>Extended warnings about incorrect dependencies.
+<li>Added start-up scripts and build scripts.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Mar 2008</div> Version 4.2</h3>
+<ul>
+<li>Refined data flow analysis in optimization step.
+<li>Fixed handling of exceptions when inlining subroutines.
+<li>Fixed inlining of incompatible code constructs between different java
+ versions.
+<li>Fixed computation of local variable frame size.
+<li>Fixed optimization of infinite loops.
+<li>Fixed optimization of subroutine invocations.
+<li>Fixed optimization of floating point remainder computations.
+<li>Fixed removal of unused parameters in method descriptors containing arrays
+ of longs or doubles.
+<li>Added undocumented java system properties
+ <code>maximum.inlined.code.length</code> (default is 8) and
+ <code>maximum.resulting.code.length</code> (defaults are 8000 for JSE and
+ 2000 for JME), for expert users who read release notes.
+<li>Fixed processing of generic types in Signature attributes in shrinking and
+ optimization steps.
+<li>Fixed processing of inner class names in Signature attributes in obfuscation
+ step.
+<li>Improved adapting resource file names following obfuscated class names.
+<li>Fixed interpretation of package names in GUI.
+<li>Fixed default settings for Xlets in GUI.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Dec 2007</div> Version 4.1</h3>
+<ul>
+<li>Fixed shrinking of default annotation element values.
+<li>Fixed optimization of invocations of methods in same class that are
+ accessed through extensions.
+<li>Fixed optimization of invocations of synchronized methods without other
+ side-effects.
+<li>Fixed optimization of some non-returning subroutines.
+<li>Fixed handling of local variable debug information when inlining methods.
+<li>Avoiding StackOverflowErrors during optimization of complex methods.
+<li>Fixed obfuscation of potentially ambiguous non-primitive constants in
+ interfaces.
+<li>Fixed preverification of some code constructs involving String, Class, and
+ exception types.
+<li>The Ant task now allows empty <code><injars></code> and
+ <code><libraryjars></code> elements.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Sep 2007</div> Version 4.0</h3>
+<ul>
+<li>Added preverifier for Java 6 and Java Micro Edition, with new options
+ <code>-microedition</code> and <code>-dontpreverify</code>.
+<li>Added new option <code>-target</code> to modify java version of processed
+ class files.
+<li>Made <code>-keep</code> options more orthogonal and flexible, with option
+ modifiers <code>allowshrinking</code>, <code>allowoptimization</code>, and
+ <code>allowobfuscation</code>.
+<li>Added new wildcards for class member descriptors: "<code>***</code>",
+ matching any type, and "<code>...</code>", matching any number of
+ arguments.
+<li>Added support for configuration by means of annotations.
+<li>Improved shrinking of unused annotations.
+<li>Added check on modification times of input and output, to avoid unnecessary
+ processing, with new option <code>-forceprocessing</code>.
+<li>Added new options <code>-flattenpackagehierarchy</code> and
+ <code>-repackageclasses</code> (replacing <code>-defaultpackage</code>) to
+ control obfuscation of package names.
+<li>Added new options <code>-adaptresourcefilenames</code> and
+ <code>-adaptresourcefilecontents</code>, with file filters, to update
+ resource files corresponding to obfuscated class names.
+<li>Added detection of dynamically accessed fields and methods.
+<li>Now treating <code>Exceptions</code> attributes as optional.
+<li>Now respecting naming rule for nested class names
+ (<code>EnclosingClass$InnerClass</code>) in obfuscation step, if
+ <code>InnerClasses</code> attributes or <code>EnclosingMethod</code>
+ attributes are being kept.
+<li>Added new inter-procedural optimizations: method inlining and propagation
+ of constant fields, constant arguments, and constant return values.
+<li>Added optimized local variable allocation.
+<li>Added more than 250 new peephole optimizations.
+<li>Improved making classes and class members public or protected.
+<li>Now printing notes on suspiciously unkept classes in parameters of
+ specified methods.
+<li>Now printing notes for class names that don't seem to be fully qualified.
+<li>Added support for uppercase filename extensions.
+<li>Added tool tips to the GUI.
+<li>Rewritten class file I/O code.
+<li>Updated documentation and examples.
+</ul>
+Upgrade considerations:
+<ul>
+
+<li>Since ProGuard now treats the <code>Exceptions</code> attribute as
+ optional, you may have to specify <code>-keepattributes Exceptions</code>,
+ notably when processing code that is to be used as a library.
+
+<li>ProGuard now preverifies code for Java Micro Edition, if you specify the
+ option <code>-microedition</code>. You then no longer need to process the
+ code with an external preverifier.
+
+<li>You should preferably specify <code>-repackageclasses</code> instead of the
+ old option name <code>-defaultpackage</code>.
+</ul>
+
+<h3><div>Dec 2007</div> Version 3.11</h3>
+<ul>
+<li>Fixed optimization of invocations of methods in same class that are
+ accessed through extensions.
+<li>Fixed optimization of invocations of synchronized methods without other
+ side-effects.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Aug 2007</div> Version 3.10</h3>
+<ul>
+<li>Now handling mixed-case input class names when
+ <code>-dontusemixedcaseclassnames</code> is specified.
+<li>Fixed optimization of synchronization on classes, as compiled by Eclipse
+ and Jikes.
+<li>Fixed optimization of switch statements with unreachable cases.
+<li>Avoiding merging subsequent identically named files.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Jun 2007</div> Version 3.9</h3>
+<ul>
+<li>Fixed processing of .class constructs in Java 6.
+<li>Fixed repeated processing of .class constructs.
+<li>Fixed possible division by 0 in optimization step.
+<li>Fixed handling of variable instructions with variable indices larger than
+ 255.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Mar 2007</div> Version 3.8</h3>
+<ul>
+<li>Fixed optimization of parameters used as local variables.
+<li>Fixed obfuscation with conflicting class member names.
+<li>Fixed incremental obfuscation with incomplete mapping file for library jars.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Dec 2006</div> Version 3.7</h3>
+<ul>
+<li>Now accepting Java 6 class files.
+<li>Fixed shrinking of partially used annotations.
+<li>Improved incremental obfuscation, with new option
+ <code>-useuniqueclassmembernames</code>.
+<li>Printing more information in case of conflicting configuration and input.
+<li>Fixed optimization of repeated array length instruction.
+<li>Fixed optimization of subsequent try/catch/finally blocks with return
+ statements.
+<li>Fixed optimization of complex stack operations.
+<li>Fixed optimization of simple infinite loops.
+<li>Fixed optimization of expressions with constant doubles.
+<li>Tuned optimization to improve size reduction after preverification.
+<li>Fixed overflows of offsets in long code blocks.
+<li>Now allowing class names containing dashes.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>May 2006</div> Version 3.6</h3>
+<ul>
+<li>No longer automatically keeping classes in parameters of specified methods
+ from obfuscation and optimization (introduced in version 3.4).
+<li>Fixed inlining of interfaces that are used in .class constructs.
+<li>Fixed removal of busy-waiting loops reading volatile fields.
+<li>Fixed optimization of comparisons of known integers.
+<li>Fixed optimization of known branches.
+<li>Fixed optimization of method calls on arrays of interfaces.
+<li>Fixed optimization of method calls without side-effects.
+<li>Fixed optimization of nested try/catch/finally blocks with return
+ statements.
+<li>Fixed initialization of library classes that only appear in descriptors.
+<li>Fixed matching of primitive type wildcards in configuration.
+<li>Fixed the boilerplate specification for enumerations in the GUI.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Jan 2006</div> Version 3.5</h3>
+<ul>
+<li>Fixed obfuscation of class members with complex visibility.
+<li>Fixed optimization bugs causing stack verification errors.
+<li>Fixed optimization bug causing overridden methods to be finalized.
+<li>Fixed optimization bug causing abstract method errors for retro-fitted
+ library methods.
+<li>Fixed optimization bug evaluating code with constant long values.
+<li>Fixed bug in updating of optional local variable table attributes and local
+ variable type table attributes after optimization.
+<li>Fixed interpretation of comma-separated class names without wildcards.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Oct 2005</div> Version 3.4</h3>
+<ul>
+<li>Extended optimizations: removing duplicate code within methods.
+<li>Extended regular expressions for class names to comma-separated lists.
+<li>Now automatically keeping classes in descriptors of kept class members.
+<li>Added verbose statistics for optimizations.
+<li>Added boilerplate Number optimizations in GUI.
+<li>Fixed <code>Class.forName</code> detection.
+<li>Fixed incremental obfuscation bug.
+<li>Fixed optimization bug causing stack verification errors.
+<li>Fixed optimization bugs related to removal of unused parameters.
+<li>Fixed exception when optimizing code with many local variables.
+<li>Fixed exception when saving configuration with initializers in GUI.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Jun 2005</div> Version 3.3</h3>
+<ul>
+<li>Extended optimizations: making methods private and static when possible,
+ making classes static when possible, removing unused parameters.
+<li>Made file names relative to the configuration files in which they are
+ specified. Added <code>-basedirectory</code> option.
+<li>Added <code>-whyareyoukeeping</code> option to get details on why given
+ classes and class members are being kept.
+<li>Added warnings for misplaced class files.
+<li>Improved printing of notes for <code>Class.forName</code> constructs.
+<li>Implemented '<code>assumenosideeffects</code>' nested element in Ant task.
+<li>Improved processing of annotations.
+<li>Fixed reading and writing of parameter annotations.
+<li>Fixed various optimization bugs.
+<li>Fixed wildcards not matching '-' character.
+<li>Fixed wildcard bug and checkbox bugs in GUI.
+<li>Setting file chooser defaults in GUI.
+<li>Leaving room for growBox in GUI on Mac OS X.
+<li>Properly closing configuration files.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Dec 2004</div> Version 3.2</h3>
+<ul>
+<li>Fixed JDK5.0 processing bugs.
+<li>Fixed optimization bugs.
+<li>Fixed relative paths in Ant task.
+<li>Improved speed of shrinking step.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Nov 2004</div> Version 3.1</h3>
+<ul>
+<li>Improved obfuscation and shrinking of private class members.
+<li>Added inlining of interfaces with single implementations.
+<li>Added option to specify obfuscation dictionary.
+<li>Added option to read package visible library class members.
+<li>Extended support for JDK5.0 attributes.
+<li>Fixed various optimization bugs.
+<li>Modified Ant task to accept paths instead of filesets.
+<li>Fixed two Ant task bugs.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Aug 2004</div> Version 3.0</h3>
+<ul>
+<li>Added bytecode optimization step, between shrinking step and obfuscation
+ step.
+<li>Generalized filtered recursive reading and writing of jars, wars, ears,
+ zips, and directories.
+<li>Added support for grouping input and output jars, wars, ears, zips, and
+ directories.
+<li>Added support for applying mapping files to library classes.
+<li>Removed <code>-resourcejars</code> option. Resources should now be read
+ using regular <code>-injars</code> options, using filters if necessary.
+<li>Rewrote Ant task. Input and output modification dates are not checked at
+ the moment. Minor changes in XML schema:
+ <ul>
+ <li>Filters now specified using attributes.
+ <li>'<code>outjars</code>' now nested element instead of attribute.
+ <li>'<code>type</code>' attribute of <code><method></code> element no
+ longer defaults to '<code>void</code>'.
+ <li><code><</code> and <code>></code> characters now have to be
+ encoded in embedded configurations.
+ <li><code><proguardconfiguration></code> task no longer accepts
+ attributes.
+ </ul>
+<li>Updated J2ME WTK plugin, now customizable through configuration file.
+<li>Updated GUI.
+<li>Fixed various processing bugs.
+<li>Fixed ReTrace parsing bugs.
+<li>Improved jar compression.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Mar 2004</div> Version 2.1</h3>
+<ul>
+<li>Added support for JDK1.5 classes.
+<li>Added additional wildcard for matching primitive types.
+<li>Added possibility to switch off notes about duplicate class definitions.
+<li>Fixed use of multiple filters on output jars.
+<li>Fixed option to keep all attributes.
+<li>Fixed various Ant task bugs.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Dec 2003</div> Version 2.0</h3>
+<ul>
+<li>Added a graphical user interface for ProGuard and ReTrace.
+<li>Added <code>-applymapping</code> option for incremental obfuscation.
+<li>Added support for filtering input and output files.
+<li>Added support for the J++ <code>SourceDir</code> attribute.
+<li>Improved detection of <code>.class</code> constructs.
+<li>Improved handling of misplaced manifest files.
+<li>Improved implementation of ReTrace.
+<li>Worked around String UTF-8 encoding bug affecting foreign characters.
+<li>Fixed exception when ignoring warnings.
+<li>Fixed various Ant task bugs.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Aug 2003</div> Version 1.7</h3>
+<ul>
+<li>Fixed various Ant task bugs.
+<li>Fixed ClassCastException due to explicitly used abstract classes with
+ implicitly used interfaces targeted at JRE1.2 (the default in JDK1.4).
+<li>Fixed <code>-defaultpackage</code> bug for protected classes and class
+ members.
+<li>Fixed ReTrace bug when retracing without line number tables.
+<li>Worked around zip package problems with duplicate out entries and rogue
+ manifest files.
+<li>Added work-around for handling malformed legacy interface class files.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>May 2003</div> Version 1.6</h3>
+<ul>
+<li>Added support for Ant.
+<li>Added support for the J2ME Wireless Toolkit.
+<li>Added support for reading and writing directory hierarchies.
+<li>Added option for specifying resource jars and directories.
+<li>Added support for wildcards in class member specifications.
+<li>Improved handling of the <code>-defaultpackage</code> option.
+<li>Improved stack trace parsing in ReTrace tool.
+<li>Fixed processing of libraries containing public as well as non-public
+ extensions of non-public classes.
+<li>Fixed examples for processing libraries, midlets, and serializable code.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Jan 2003</div> Version 1.5</h3>
+<ul>
+<li>Fixed processing of retrofitted library interfaces.
+<li>Fixed processing of <code>.class</code> constructs in internal classes
+ targeted at JRE1.2 (the default in JDK1.4).
+<li>Fixed <code>-dump</code> option when <code>-outjar</code> option is not
+ present.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Nov 2002</div> Version 1.4</h3>
+<ul>
+<li>Now copying resource files over from the input jars to the output jar.
+<li>Added option to obfuscate using lower-case class names only.
+<li>Added better option for obfuscating native methods.
+<li>Added option not to ignore non-public library classes.
+<li>Added automatic <code>.class</code> detection for classes compiled with
+ Jikes.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Sep 2002</div> Version 1.3</h3>
+<ul>
+<li>Added support for wildcards in class names.
+<li>Added tool to de-obfuscate stack traces.
+<li>Added options to print processing information to files.
+<li>Added option to rename source file attributes.
+<li>Fixed processing of implicitly used interfaces targeted at JRE1.2 (the
+ default in JDK1.4)
+<li>Fixed processing of configurations with negated access modifiers.
+<li>Fixed duplicate class entry bug.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Aug 2002</div> Version 1.2</h3>
+<ul>
+<li>Improved speed.
+<li>Fixed processing of classes targeted at JRE1.2 (the default in JDK1.4)
+ with references to their own subclasses.
+<li>Fixed processing of static initializers in J2ME MIDP applications.
+<li>Fixed processing of retrofitted interfaces (again).
+<li>Added more flexible handling of white space in configuration.
+<li>Updated documentation.
+</ul>
+
+<h3><div>Jul 2002</div> Version 1.1</h3>
+<ul>
+<li>Added automatic detection of <code>Class.forName("MyClass")</code>,
+ <code>MyClass.class</code>, and
+ <code>(MyClass)Class.forName(variable).newInstance()</code> constructs.
+ This greatly simplifies configuration.
+<li>Added options to keep class names and class member names without affecting
+ any shrinking. They are mostly useful for native methods and serializable
+ classes.
+<li>Fixed processing of retrofitted interfaces.
+<li>Added handling of missing/invalid manifest file in input jar.
+<li>Updated documentation and examples.
+</ul>
+
+<h3><div>Jun 2002</div> Version 1.0</h3>
+<ul>
+<li>First public release, based on class parsing code from Mark Welsh's
+ <b>RetroGuard</b>.
+</ul>
+
+<hr />
+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/drop1.gif b/common/proguard/proguard4.7/docs/drop1.gif
new file mode 100644
index 0000000..426d856
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/drop1.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/drop2.gif b/common/proguard/proguard4.7/docs/drop2.gif
new file mode 100644
index 0000000..b607542
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/drop2.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/drop3.gif b/common/proguard/proguard4.7/docs/drop3.gif
new file mode 100644
index 0000000..11ce424
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/drop3.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/favicon.ico b/common/proguard/proguard4.7/docs/favicon.ico
new file mode 100644
index 0000000..3923ec1
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/favicon.ico
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/feedback.html b/common/proguard/proguard4.7/docs/feedback.html
new file mode 100644
index 0000000..197fc33
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/feedback.html
@@ -0,0 +1,120 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-script-type" content="text/javascript">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Feedback</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Feedback</h2>
+
+By now, I've invested a fair amount of time in <b>ProGuard</b>. You can help
+by providing feedback! If you have problems, bugs, bug fixes, ideas,
+encouragements, etc., please get in touch:
+<p>
+<ul class="spacious">
+<li>Through
+ <a href="http://www.saikoa.com/proguard/support" target="_top">Saikoa</a>,
+ we provide professional support for ProGuard. If you find ProGuard useful
+ and you would like to have some professional backing, this is the place to
+ go.</li>
+
+<li>The <a href="https://sourceforge.net/projects/proguard/forums/forum/182456"
+ target="other">help forum</a> (at SourceForge) is the right place to ask
+ questions about any problems you might have configuring and running
+ ProGuard. At this time, I can generally only assist other open source
+ projects though. If you're working on commercial software, please consider
+ our professional support above.</li>
+
+<li>The <a href="https://sourceforge.net/projects/proguard/forums/forum/182455"
+ target="other">open discussion forum</a> (at SourceForge) offers a place
+ to share your thoughts and discuss new ideas.</li>
+
+<li>The <a
+ href="http://sourceforge.net/tracker/?atid=474704&group_id=54750&func=browse"
+ target="other">bug tracking page</a> (at SourceForge) allows you to submit
+ and consult bug reports. Please make sure the reports are complete and
+ concise. If I can't reproduce the problem, I most likely can't fix it
+ either.</li>
+
+<li>The <a
+
+ href="http://sourceforge.net/tracker/?atid=474707&group_id=54750&func=browse"
+ target="other">feature request page</a> (at SourceForge) allows you to
+ submit and consult feature requests. I generally have my own road map in
+ mind, but this is the place express your interest in new and existing
+ ideas.</li>
+
+<li>The <a href="https://sourceforge.net/projects/proguard/files/"
+ target="other">download section</a> at SourceForge and the <a
+ href="http://software.freshmeat.net/projects/proguard/"
+ target="other">project page</a> at FreshMeat offer the possibility to
+ subscribe to the announcements of new releases. They are the most
+ efficient way to stay abreast of the latest developments.</li>
+
+<li>For anything that doesn't fall in the above categories, you can mail me
+ directly at
+
+<script type="text/javascript" language="JavaScript">
+<!--
+document.write("<a href=\"ma");
+document.write("ilto:");
+document.write("lafortune");
+document.write("@");
+document.write("users.sourceforge.net\">");
+document.write("lafortune");
+document.write("@");
+document.write("users.sourceforge.net");
+document.write("</a>");
+document.write(" <em>or</em> at ");
+document.write("<a href=\"ma");
+document.write("ilto:");
+document.write("eric");
+document.write("@");
+document.write("graphics.cornell.edu\">");
+document.write("eric");
+document.write("@");
+document.write("graphics.cornell.edu");
+document.write("</a>");
+//-->
+</script>
+<noscript>
+< lafortune @ users . sourceforge . net >
+<em>or</em> at
+< eric @ graphics . cornell . edu > (please remove the spaces)
+</noscript>
+.</li>
+</ul>
+<p>
+I can't promise a swift answer, or any answer at all, for that matter, but I
+like seeing any constructive comments.
+<p>
+
+<b>ProGuard</b> isn't a typical open source project, in the sense that I am
+<em>not</em> looking for code contributions. Developing on my own allows me to
+do things my way, without the overhead and compromises associated with larger
+projects.
+
+<hr />
+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/index.html b/common/proguard/proguard4.7/docs/index.html
new file mode 100644
index 0000000..866fc3d
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/index.html
@@ -0,0 +1,92 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-script-type" content="text/javascript">
+<meta http-equiv="content-style-type" content="text/css">
+<meta name="author" content="Eric Lafortune">
+<meta name="description" content="ProGuard: java shrinker, optimizer, obfuscator, and preverifier">
+<meta name="keywords" content="java obfuscator, optimizer, shrinker, preverfier">
+<link rel="stylesheet" type="text/css" href="style.css">
+<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
+<title>ProGuard</title>
+</head>
+
+<script type="text/javascript" language="JavaScript">
+<!--
+var main="main.html";
+if (window.location.hash.length > 1)
+ main=window.location.hash.substr(1);
+var sections="sections.html";
+if (main.search(/manual\//) >= 0)
+ sections="manual/sections.html";
+
+document.write("<frameset rows=\"50,*\" framespacing=\"0\" frameborder=\"no\"><frame id=\"title\" name=\"title\" src=\"title.html\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" noresize /><frameset cols=\"120,*\" framespacing=\"0\" frameborder=\"no\"><frame id=\"sections\" name=\"sections\" src=\""+sections+"\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" noresize /><frame id=\"main\" name=\"main\" src=\""+main+"\" scrolling=\"auto\" marginwidth=\"10\" marginheight=\"10\" noresize /></frameset></frameset>");
+//-->
+</script>
+
+<noscript>
+<frameset
+ rows="50,*"
+ framespacing="0"
+ frameborder="no">
+
+<frame
+ id="title"
+ name="title"
+ src="title.html"
+ scrolling="no"
+ marginwidth="0"
+ marginheight="0"
+ noresize />
+
+<frameset
+ cols="120,*"
+ framespacing="0"
+ frameborder="no">
+
+<frame
+ id="sections"
+ name="sections"
+ src="sections.html"
+ scrolling="no"
+ marginwidth="0"
+ marginheight="0"
+ noresize />
+
+<frame
+ id="main"
+ name="main"
+ src="main.html"
+ scrolling="auto"
+ marginwidth="10"
+ marginheight="10"
+ noresize />
+
+</frameset>
+</frameset>
+</noscript>
+
+<noframes>
+<body>
+<p class="intro">
+<b>ProGuard</b> is a free Java class file shrinker, optimizer, obfuscator, and
+preverifier. It detects and removes unused classes, fields, methods, and
+attributes. It optimizes bytecode and removes unused instructions. It renames
+the remaining classes, fields, and methods using short meaningless names.
+Finally, it preverifies the processed code for Java 6 or for Java Micro
+Edition.
+</p>
+<p>
+Your browser doesn't support frames, but that's cool.
+<p>
+You can go straight to the <a href="main.html">main page</a>.
+
+<hr />
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</noframes>
+</html>
diff --git a/common/proguard/proguard4.7/docs/license.html b/common/proguard/proguard4.7/docs/license.html
new file mode 100644
index 0000000..0a10092
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/license.html
@@ -0,0 +1,60 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard License</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>License</h2>
+
+<b>ProGuard</b> is free. You can use it freely for processing your
+applications, commercial or not. Your code obviously remains yours after
+having been processed, and its license can remain the same.
+<p>
+
+<b>ProGuard</b> itself is copyrighted, but its distribution license provides
+you with some rights for modifying and redistributing its code and its
+documentation. More specifically, <b>ProGuard</b> is distributed under the
+terms of the <a href="GPL.html">GNU General Public License</a> (GPL), version
+2, as published by the <a href="http://www.fsf.org/" target="other">Free
+Software Foundation</a> (FSF). In short, this means that you may freely
+redistribute the program, modified or as is, on the condition that you make
+the complete source code available as well. If you develop a program that is
+linked with
+<b>ProGuard</b>, the program as a whole has to be distributed at no charge
+under the GPL. I am granting a <a href="GPL_exception.html">special
+exception</a> to the latter clause (in wording suggested by
+the <a href="http://www.gnu.org/copyleft/gpl-faq.html#GPLIncompatibleLibs"
+target="other">FSF</a>), for combinations with the following stand-alone
+applications: Apache Ant, Apache Maven, the Google Android SDK, the Eclipse
+ProGuardDT GUI, the EclipseME JME IDE, the Oracle NetBeans Java IDE, the Oracle
+JME Wireless Toolkit, the Simple Build Tool for Scala, the NeoMAD Tools by
+Neomades, the Javaground Tools, and the Sanaware Tools.
+
+<p>
+The <b>ProGuard user documentation</b> represents an important part of this
+work. It may only be redistributed without changes, along with the unmodified
+version of the code.
+
+<hr />
+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/main.html b/common/proguard/proguard4.7/docs/main.html
new file mode 100644
index 0000000..0a89673
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/main.html
@@ -0,0 +1,102 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<meta name="author" content="Eric Lafortune">
+<meta name="description" content="ProGuard: java shrinker, optimizer, obfuscator, and preverifier">
+<meta name="keywords" content="java obfuscator, optimizer, shrinker, preverfier">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Main</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
+else {
+ if (window.top.location.hash!="")
+ window.top.location.hash="";
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Main</h2>
+
+<p class="intro">
+<b>ProGuard</b> is a free Java class file shrinker, optimizer, obfuscator, and
+preverifier. It detects and removes unused classes, fields, methods, and
+attributes. It optimizes bytecode and removes unused instructions. It renames
+the remaining classes, fields, and methods using short meaningless names.
+Finally, it preverifies the processed code for Java 6 or for Java Micro
+Edition.
+</p>
+Some uses of <b>ProGuard</b> are:
+<ul>
+
+<li>Creating more compact code, for smaller code archives, faster transfer
+ across networks, faster loading, and smaller memory footprints.</li>
+
+<li>Making programs and libraries harder to reverse-engineer.</li>
+
+<li>Listing dead code, so it can be removed from the source code.</li>
+
+<li>Retargeting and preverifying existing class files for Java 6, to take full
+ advantage of Java 6's faster class loading.</li>
+
+</ul>
+<p>
+<b>ProGuard</b>'s main advantage compared to other Java obfuscators is
+probably its compact template-based configuration. A few intuitive command
+line options or a simple configuration file are usually sufficient.
+The user manual explains all available options and shows examples of this
+powerful configuration style.
+<p>
+<b>ProGuard</b> is fast. It only takes seconds to process programs and
+libraries of several megabytes. The results section presents actual figures
+for a number of applications.
+<p>
+<b>ProGuard</b> is a command-line tool with an optional graphical user
+interface. It also comes with plugins for Ant and for the JME Wireless
+Toolkit.
+<p>
+<p class="intro">
+<b>ProGuard</b> is being used in various development contexts, ranging from
+small Android apps to large Java applications and libraries. Its user base is
+continuing to grow at a fast pace. In order to better manage the many
+questions and requests, we are now providing professional support at
+<a target="_top" href="http://www.saikoa.com/proguard/support">Saikoa</a>.
+</p>
+The following sections provide more detailed information:
+<ul>
+<li><a href="main.html">Main</a>: this overview page.</li>
+<li><a href="results.html">Results</a>: some results obtained with
+ <b>ProGuard</b>, including timings and memory usage.</li>
+<li><a href="FAQ.html">FAQ</a>: answers to some Frequently Asked Questions.</li>
+<li><a href="manual/index.html">Manual</a>: the complete <b>ProGuard</b> user
+ manual, with examples and troubleshooting tips.</li>
+<li><a href="quality.html">Quality</a>: a discussion of the (excellent) quality
+ of <b>ProGuard</b>'s code.</li>
+<li><a href="screenshots.html">Screenshots</a>: some impressions of what <b>ProGuard</b> looks like.</li>
+<li><a href="testimonials.html">Testimonials</a>: what users think of
+ <b>ProGuard</b>.</li>
+<li><a href="license.html">License</a>: <b>ProGuard</b> is free, under a GPL
+ license.</li>
+<li><a href="downloads.html">Downloads</a>: download the <b>ProGuard</b>
+ package yourself.</li>
+<li><a href="feedback.html">Feedback</a>: tell me about your experiences, or
+ learn from others on our forums.</li>
+<li><a href="acknowledgements.html">Acknowledgements</a>: people who have been
+ helpful.</li>
+<li><a href="alternatives.html">Alternatives</a>: other Java obfuscators,
+ optimizers, and shrinkers.</li>
+</ul>
+
+<hr />
+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/ant.html b/common/proguard/proguard4.7/docs/manual/ant.html
new file mode 100644
index 0000000..26c6853
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/ant.html
@@ -0,0 +1,634 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Ant Task</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Ant Task</h2>
+
+<b>ProGuard</b> can be run as a task in the Java-based build tool Ant (version
+1.6.0 or higher).
+<p>
+
+Before you can use the <code>proguard</code> task, you have to tell Ant about
+this new task. The easiest way is to add the following line to your
+<code>build.xml</code> file:
+<p>
+
+<pre>
+<taskdef resource="proguard/ant/task.properties"
+ classpath="/usr/local/java/proguard/lib/proguard.jar" />
+</pre>
+<p>
+
+Please make sure the class path is set correctly for your system.
+<p>
+
+There are three ways to configure the ProGuard task: using an external
+configuration file, using embedded ProGuard configuration options, or using
+the equivalent XML configuration tags. These three ways can be combined,
+depending on practical circumstances and personal preference.
+<p>
+
+<h3>1. An external ProGuard configuration file</h3>
+
+The simplest way to use the ProGuard task in an Ant build file is to keep your
+ProGuard configuration file, and include it from Ant. You can include your
+ProGuard configuration file by setting
+the <a href="#configuration_attribute"><code>configuration</code></a>
+attribute of your
+<code>proguard</code> task. Your ant build file will then look like this:
+<p>
+
+<pre>
+<taskdef resource="proguard/ant/task.properties"
+ classpath="/usr/local/java/proguard/lib/proguard.jar" />
+<proguard configuration="myconfigfile.pro"/>
+</pre>
+<p>
+
+This is a convenient option if you prefer ProGuard's configuration style over
+XML, if you want to keep your build file small, or if you have to share your
+configuration with developers who don't use Ant.
+<p>
+
+<h3>2. Embedded ProGuard configuration options</h3>
+
+Instead of keeping an external ProGuard configuration file, you can also copy
+the contents of the file into the nested text of the <code>proguard</code> task
+(the PCDATA area). Your Ant build file will then look like this:
+<p>
+
+<pre>
+<taskdef resource="proguard/ant/task.properties"
+ classpath="/usr/local/java/proguard/lib/proguard.jar" />
+<proguard>
+ -libraryjars ${java.home}/lib/rt.jar
+ -injars in.jar
+ -outjars out.jar
+
+ -keepclasseswithmembers public class * {
+ public static void main(java.lang.String[]);
+ }
+</proguard>
+</pre>
+<p>
+
+Some minor syntactical changes are required in order to conform with the XML
+standard.
+<p>
+
+Firstly, the <code>#</code> character cannot be used for comments in an XML
+file. Comments must be enclosed by an opening <code><!--</code> and a
+closing <code>--></code>. All occurrences of the <code>#</code> character
+can be removed.
+<p>
+
+Secondly, the use of <code><</code> and <code>></code> characters would
+upset the structure of the XML build file. Environment variables are now
+enclosed by an opening <code>${</code> and a closing <code>}</code>. This
+syntax also allows you to use Ant properties within the ProGuard
+configuration. Other occurrences of <code><</code> and <code>></code>
+have to be encoded as <code>&lt;</code> and <code>&gt;</code>.
+<p>
+
+<h3>3. XML configuration tags</h3>
+
+If you really prefer a full-blown XML configuration, you can replace the
+ProGuard configuration options by XML configuration tags. The resulting
+configuration will be equivalent, but much more verbose and difficult to read,
+as XML goes. The remainder of this page presents the supported tags. For a
+more extensive discussion of their meaning, please consult the traditional <a
+href="usage.html">Usage</a> section. You can find some sample configuration
+files in the <code>examples/ant</code> directory of the ProGuard distribution.
+<p>
+
+<h2><a name="proguard">Task Attributes and Nested Elements</a></h2>
+
+The <code><b><proguard></b></code> task and the
+<code><b><proguardconfiguration></b></code> task can have the following
+attributes (only for <code><proguard></code>) and nested
+elements:
+
+<dl>
+
+<dt><a name="configuration_attribute"><code><b>configuration</b></code></a>
+ = "<i>filename</i>"</dt>
+<dd>Read and merge options from the given ProGuard-style configuration
+ file. Note: for reading XML-style configurations, use the <a
+ href="#configuration_element"><code>configuration</code></a>
+ <i>element</i>.</dd>
+
+<dt><a href="usage.html#skipnonpubliclibraryclasses"><code><b>skipnonpubliclibraryclasses</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Ignore non-public library classes.</dd>
+
+<dt><a href="usage.html#dontskipnonpubliclibraryclassmembers"><code><b>skipnonpubliclibraryclassmembers</b></code></a>
+ = "<i>boolean</i>"
+ (default = true)</dt>
+<dd>Ignore package visible library class members.</dd>
+
+<dt><a href="usage.html#target"><code><b>target</b></code></a>
+ = "<i>version</i>"
+ (default = none)</dt>
+<dd>Set the given version number in the processed classes.</dd>
+
+<dt><a href="usage.html#forceprocessing"><code><b>forceprocessing</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Process the input, even if the output seems up to date.</dd>
+
+<dt><a href="usage.html#printseeds"><code><b>printseeds</b></code></a>
+ = "<i>boolean or filename</i>"
+ (default = false)</dt>
+<dd>List classes and class members matched by the various <code>keep</code>
+ commands, to the standard output or to the given file.</dd>
+
+<dt><a href="usage.html#dontshrink"><code><b>shrink</b></code></a>
+ = "<i>boolean</i>"
+ (default = true)</dt>
+<dd>Shrink the input class files.</dd>
+
+<dt><a href="usage.html#printusage"><code><b>printusage</b></code></a>
+ = "<i>boolean or filename</i>"
+ (default = false)</dt>
+<dd>List dead code of the input class files, to the standard output or to the
+ given file.</dd>
+
+<dt><a href="usage.html#dontoptimize"><code><b>optimize</b></code></a>
+ = "<i>boolean</i>"
+ (default = true)</dt>
+<dd>Optimize the input class files.</dd>
+
+<dt><a href="usage.html#optimizationpasses"><code><b>optimizationpasses</b></code></a>
+ = "<i>n</i>"
+ (default = 1)</dt>
+<dd>The number of optimization passes to be performed.</dd>
+
+<dt><a href="usage.html#allowaccessmodification"><code><b>allowaccessmodification</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Allow the access modifiers of classes and class members to be modified,
+ while optimizing.</dd>
+
+<dt><a href="usage.html#mergeinterfacesaggressively"><code><b>mergeinterfacesaggressively</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Allow any interfaces to be merged, while optimizing.</dd>
+
+<dt><a href="usage.html#dontobfuscate"><code><b>obfuscate</b></code></a>
+ = "<i>boolean</i>"
+ (default = true)</dt>
+<dd>Obfuscate the input class files.</dd>
+
+<dt><a href="usage.html#printmapping"><code><b>printmapping</b></code></a>
+ = "<i>boolean or filename</i>"
+ (default = false)</dt>
+<dd>Print the mapping from old names to new names for classes and class members
+ that have been renamed, to the standard output or to the given file.</dd>
+
+<dt><a href="usage.html#applymapping"><code><b>applymapping</b></code></a>
+ = "<i>filename</i>"
+ (default = none)</dt>
+<dd>Reuse the given mapping, for incremental obfuscation.</dd>
+
+<dt><a href="usage.html#obfuscationdictionary"><code><b>obfuscationdictionary</b></code></a>
+ = "<i>filename</i>"
+ (default = none)</dt>
+<dd>Use the words in the given text file as obfuscated field names and method
+ names.</dd>
+
+<dt><a href="usage.html#classobfuscationdictionary"><code><b>classobfuscationdictionary</b></code></a>
+ = "<i>filename</i>"
+ (default = none)</dt>
+<dd>Use the words in the given text file as obfuscated class names.</dd>
+
+<dt><a href="usage.html#packageobfuscationdictionary"><code><b>packageobfuscationdictionary</b></code></a>
+ = "<i>filename</i>"
+ (default = none)</dt>
+<dd>Use the words in the given text file as obfuscated package names.</dd>
+
+<dt><a href="usage.html#overloadaggressively"><code><b>overloadaggressively</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Apply aggressive overloading while obfuscating.</dd>
+
+<dt><a href="usage.html#useuniqueclassmembernames"><code><b>useuniqueclassmembernames</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Ensure uniform obfuscated class member names for subsequent incremental
+ obfuscation.</dd>
+
+<dt><a href="usage.html#dontusemixedcaseclassnames"><code><b>usemixedcaseclassnames</b></code></a>
+ = "<i>boolean</i>"
+ (default = true)</dt>
+<dd>Generate mixed-case class names while obfuscating.</dd>
+
+<dt><a href="usage.html#flattenpackagehierarchy"><code><b>flattenpackagehierarchy</b></code></a>
+ = "<i>package_name</i>"
+ (default = none)</dt>
+<dd>Repackage all packages that are renamed into the single given parent
+ package.</dd>
+
+<dt><a href="usage.html#repackageclasses"><code><b>repackageclasses</b></code></a>
+ = "<i>package_name</i>"
+ (default = none)</dt>
+<dd>Repackage all class files that are renamed into the single given
+ package.</dd>
+
+<dt><a href="usage.html#keepparameternames"><code><b>keepparameternames</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Keep the parameter names and types of methods that are kept.</dd>
+
+<dt><a href="usage.html#renamesourcefileattribute"><code><b>renamesourcefileattribute</b></code></a>
+ = "<i>string</i>"
+ (default = none)</dt>
+<dd>Put the given constant string in the <code>SourceFile</code>
+ attributes.</dd>
+
+<dt><a href="usage.html#dontpreverify"><code><b>preverify</b></code></a>
+ = "<i>boolean</i>"
+ (default = true)</dt>
+<dd>Preverify the processed class files if they are targeted at Java Micro
+ Edition or at Java 6 or higher.</dd>
+
+<dt><a href="usage.html#microedition"><code><b>microedition</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Targets the processed class files at Java Micro Edition.</dd>
+
+<dt><a href="usage.html#verbose"><code><b>verbose</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Write out some more information during processing.</dd>
+
+<dt><a href="usage.html#dontnote"><code><b>note</b></code></a>
+ = "<i>boolean</i>"
+ (default = true)</dt>
+<dd>Print notes about potential mistakes or omissions in the configuration.
+ Use the nested element <a href="#dontnote">dontnote</a> for more
+ fine-grained control.</dd>
+
+<dt><a href="usage.html#dontwarn"><code><b>warn</b></code></a>
+ = "<i>boolean</i>"
+ (default = true)</dt>
+<dd>Print warnings about unresolved references. Use the nested
+ element <a href="#dontwarn">dontwarn</a> for more fine-grained
+ control. <i>Only use this option if you know what you're doing!</i></dd>
+
+<dt><a href="usage.html#ignorewarnings"><code><b>ignorewarnings</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Print warnings about unresolved references, but continue processing
+ anyhow. <i>Only use this option if you know what you're doing!</i></dd>
+
+<dt><a href="usage.html#printconfiguration"><code><b>printconfiguration</b></code></a>
+ = "<i>boolean or filename</i>"
+ (default = false)</dt>
+<dd>Write out the entire configuration in traditional ProGuard style, to the
+ standard output or to the given file. Useful to replace unreadable
+ XML configurations.</dd>
+
+<dt><a href="usage.html#dump"><code><b>dump</b></code></a>
+ = "<i>boolean or filename</i>"
+ (default = false)</dt>
+<dd>Write out the internal structure of the processed class files, to the
+ standard output or to the given file.</dd>
+
+<dt><a href="usage.html#injars"><code><b><injar</b></code></a>
+ <a href="#classpath"><i>class_path</i></a>
+ <code><b>/></b></code></dt>
+<dd>Specifies the program jars (or wars, ears, zips, or directories).</dd>
+
+<dt><a href="usage.html#outjars"><code><b><outjar</b></code></a>
+ <a href="#classpath"><i>class_path</i></a>
+ <code><b>/></b></code></dt>
+<dd>Specifies the name of the output jars (or wars, ears, zips, or
+ directories).</dd>
+
+<dt><a href="usage.html#libraryjars"><code><b><libraryjar</b></code></a>
+ <a href="#classpath"><i>class_path</i></a>
+ <code><b>/></b></code></dt>
+<dd>Specifies the library jars (or wars, ears, zips, or directories).</dd>
+
+<dt><a href="usage.html#keepdirectories"><code><b><keepdirectory name = </b></code></a>"<i>directory_name</i>"
+ <code><b>/></b></code><br/>
+ <a href="usage.html#keepdirectories"><code><b><keepdirectories filter = </b></code></a>"<a href="usage.html#filefilters"><i>directory_filter</i></a>"
+ <code><b>/></b></code></dt>
+<dd>Keep the specified directories in the output jars (or wars, ears, zips, or
+ directories).</dd>
+
+<dt><a href="usage.html#keep"><code><b><keep</b></code></a>
+ <a href="#keepmodifier"><i>modifiers</i></a>
+ <a href="#classspecification"><i>class_specification</i></a>
+ <code><b>></b></code>
+ <a href="#classmemberspecification"><i>class_member_specifications</i></a>
+ <code><b></keep></b></code></dt>
+<dd>Preserve the specified classes <i>and</i> class members.</dd>
+
+<dt><a href="usage.html#keepclassmembers"><code><b><keepclassmembers</b></code></a>
+ <a href="#keepmodifier"><i>modifiers</i></a>
+ <a href="#classspecification"><i>class_specification</i></a>
+ <code><b>></b></code>
+ <a href="#classmemberspecification"><i>class_member_specifications</i></a>
+ <code><b></keepclassmembers></b></code></dt>
+<dd>Preserve the specified class members, if their classes are preserved as
+ well.</dd>
+
+<dt><a href="usage.html#keepclasseswithmembers"><code><b><keepclasseswithmembers</b></code></a>
+ <a href="#keepmodifier"><i>modifiers</i></a>
+ <a href="#classspecification"><i>class_specification</i></a>
+ <code><b>></b></code>
+ <a href="#classmemberspecification"><i>class_member_specifications</i></a>
+ <code><b></keepclasseswithmembers></b></code></dt>
+<dd>Preserve the specified classes <i>and</i> class members, if all of the
+ specified class members are present.</dd>
+
+<dt><a href="usage.html#keepnames"><code><b><keepnames</b></code></a>
+ <a href="#classspecification"><i>class_specification</i></a>
+ <code><b>></b></code>
+ <a href="#classmemberspecification"><i>class_member_specifications</i></a>
+ <code><b></keepnames></b></code></dt>
+<dd>Preserve the names of the specified classes <i>and</i> class members (if
+ they aren't removed in the shrinking step).</dd>
+
+<dt><a href="usage.html#keepclassmembernames"><code><b><keepclassmembernames</b></code></a>
+ <a href="#classspecification"><i>class_specification</i></a>
+ <code><b>></b></code>
+ <a href="#classmemberspecification"><i>class_member_specifications</i></a>
+ <code><b></keepclassmembernames></b></code></dt>
+<dd>Preserve the names of the specified class members (if they aren't removed
+ in the shrinking step).</dd>
+
+<dt><a href="usage.html#keepclasseswithmembernames"><code><b><keepclasseswithmembernames</b></code></a>
+ <a href="#classspecification"><i>class_specification</i></a>
+ <code><b>></b></code>
+ <a href="#classmemberspecification"><i>class_member_specifications</i></a>
+ <code><b></keepclasseswithmembernames></b></code></dt>
+<dd>Preserve the names of the specified classes <i>and</i> class members, if
+ all of the specified class members are present (after the shrinking
+ step).</dd>
+
+<dt><a href="usage.html#whyareyoukeeping"><code><b><whyareyoukeeping</b></code></a>
+ <a href="#classspecification"><i>class_specification</i></a>
+ <code><b>></b></code>
+ <a href="#classmemberspecification"><i>class_member_specifications</i></a>
+ <code><b></whyareyoukeeping></b></code></dt>
+<dd>Print details on why the given classes and class members are being kept in
+ the shrinking step.</dd>
+
+<dt><a href="usage.html#assumenosideeffects"><code><b><assumenosideeffects</b></code></a>
+ <a href="#classspecification"><i>class_specification</i></a>
+ <code><b>></b></code>
+ <a href="#classmemberspecification"><i>class_member_specifications</i></a>
+ <code><b></assumenosideeffects></b></code></dt>
+<dd>Assume that the specified methods don't have any side effects, while
+ optimizing. <i>Only use this option if you know what you're
+ doing!</i></dd>
+
+<dt><a href="usage.html#optimizations"><code><b><optimization name = </b></code></a>"<a href="optimizations.html"><i>optimization_name</i></a>"
+ <code><b>/></b></code><br/>
+ <a href="usage.html#optimizations"><code><b><optimizations filter = </b></code></a>""<a href="optimizations.html"><i>optimization_filter</i></a>"
+ <code><b>/></b></code></dt>
+<dd>Perform only the specified optimizations.</dd>
+
+<dt><a href="usage.html#keeppackagenames"><code><b><keeppackagename name = </b></code></a>"<i>package_name</i>"
+ <code><b>/></b></code><br/>
+ <a href="usage.html#keeppackagenames"><code><b><keeppackagenames filter = </b></code></a>"<a href="usage.html#filters"><i>package_filter</i></a>"
+ <code><b>/></b></code></dt>
+<dd>Keep the specified package names from being obfuscated. If no name is
+ given, all package names are preserved.</dd>
+
+<dt><a href="usage.html#keepattributes"><code><b><keepattribute name = </b></code></a>"<i>attribute_name</i>"
+ <code><b>/></b></code><br/>
+ <a href="usage.html#keepattributes"><code><b><keepattributes filter = </b></code></a>"<a href="usage.html#filters"><i>attribute_filter</i></a>"
+ <code><b>/></b></code></dt>
+<dd>Preserve the specified optional Java bytecode attributes, with optional
+ wildcards. If no name is given, all attributes are preserved.</dd>
+
+<dt><a href="usage.html#adaptclassstrings"><code><b><adaptclassstrings filter = </b></code></a>"<a href="usage.html#filters"><i>class_filter</i></a>"
+ <code><b>/></b></code></dt>
+<dd>Adapt string constants in the specified classes, based on the obfuscated
+ names of any corresponding classes.</dd>
+
+<dt><a href="usage.html#adaptresourcefilenames"><code><b><adaptresourcefilenames filter = </b></code></a>"<a href="usage.html#filefilters"><i>file_filter</i></a>"
+ <code><b>/></b></code></dt>
+<dd>Rename the specified resource files, based on the obfuscated names of the
+ corresponding class files.</dd>
+
+<dt><a href="usage.html#adaptresourcefilecontents"><code><b><adaptresourcefilecontents filter = </b></code></a>"<a href="usage.html#filefilters"><i>file_filter</i></a>"
+ <code><b>/></b></code></dt>
+<dd>Update the contents of the specified resource files, based on the
+ obfuscated names of the processed classes.</dd>
+
+<dt><a name="dontnote" />
+ <a href="usage.html#dontnote"><code><b><dontnote filter = </b></code></a>"<a href="usage.html#filters"><i>class_filter</i></a>"
+ <code><b>/></b></code></dt>
+<dd>Don't print notes about classes matching the specified class name
+ filter.</dd>
+
+<dt><a name="dontwarn" />
+ <a href="usage.html#dontwarn"><code><b><dontwarn filter = </b></code></a>"<a href="usage.html#filters"><i>class_filter</i></a>"
+ <code><b>/></b></code></dt>
+<dd>Don't print warnings about classes matching the specified class name
+ filter. <i>Only use this option if you know what you're doing!</i></dd>
+
+<dt><a name="configuration_element"><code><b><configuration refid = </b></code></a>"<i>ref_id</i>"
+ <code><b>/></b></code></dt>
+<dd>Includes the configuration specified in the
+ <code><proguardconfiguration></code> task (or
+ <code><proguard></code> task) with the attribute <code>id</code> =
+ "<i>ref_id</i>". Note that only the nested elements of this configuration
+ are considered, not the attributes. Also note: for reading ProGuard-style
+ configuration files, use the <a
+ href="#configuration_attribute"><code>configuration</code></a>
+ <i>attribute</i>.</dd>
+
+</dl>
+
+<h2><a name="classpath">Class Path Attributes and Nested Elements</a></h2>
+
+The jar tags are path tags, so they can have any of the path attributes (or
+nested elements). The most common attributes are:
+
+<dl>
+
+<dt><code><b>path</b></code> = "<i>path</i>"</dt>
+<dd>The names of the jars (or wars, ears, zips, or directories), separated by
+ the path separator.</dd>
+
+<dt><code><b>location</b></code> = "<i>name</i>" (or <code><b>file</b></code>
+ = "<i>name</i>", or <code><b>dir</b></code> = "<i>name</i>", or
+ <code><b>name</b></code> = "<i>name</i>")</dt>
+<dd>Alternatively, the name of a single jar (or war, ear, zip, or
+ directory).</dd>
+
+<dt><code><b>refid</b></code> = "<i>ref_id</i>"</dt>
+<dd>Alternatively, a reference to the path or file set with the attribute
+ <code>id</code> = "<i>ref_id</i>".</dd>
+
+</dl>
+
+In addition, the jar tags can have ProGuard-style filter attributes:
+
+<dl>
+
+<dt><code><b>filter</b></code> =
+ "<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
+<dd>An optional filter for all class file names and resource file names that
+ are encountered.</dd>
+
+<dt><code><b>jarfilter</b></code> =
+ "<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
+<dd>An optional filter for all jar names that are encountered.</dd>
+
+<dt><code><b>warfilter</b></code> =
+ "<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
+<dd>An optional filter for all war names that are encountered.</dd>
+
+<dt><code><b>earfilter</b></code> =
+ "<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
+<dd>An optional filter for all ear names that are encountered.</dd>
+
+<dt><code><b>zipfilter</b></code> =
+ "<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
+<dd>An optional filter for all zip names that are encountered.</dd>
+
+</dl>
+
+<h2><a name="keepmodifier">Keep Modifier Attributes</a></h2>
+
+The keep tags can have the following <i>modifier</i> attributes:
+
+<dl>
+
+<dt><a href="usage.html#allowshrinking"><code><b>allowshrinking</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Specifies whether the entry points specified in the keep tag may be
+ shrunk.</dd>
+
+<dt><a href="usage.html#allowoptimization"><code><b>allowoptimization</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Specifies whether the entry points specified in the keep tag may be
+ optimized.</dd>
+
+<dt><a href="usage.html#allowobfuscation"><code><b>allowobfuscation</b></code></a>
+ = "<i>boolean</i>"
+ (default = false)</dt>
+<dd>Specifies whether the entry points specified in the keep tag may be
+ obfuscated.</dd>
+
+</dl>
+
+<h2><a name="classspecification">Class Specification Attributes and Nested Elements</a></h2>
+
+The keep tags can have the following <i>class_specification</i> attributes and
+<i>class_member_specifications</i> nested elements:
+
+<dl>
+
+<dt><code><b>access</b></code> = "<i>access_modifiers</i>"</dt>
+<dd>The optional access modifiers of the class. Any space-separated list of
+ "public", "final", and "abstract", with optional negators "!".</dd>
+
+<dt><code><b>annotation</b></code> = "<i>annotation_name</i>"</dt>
+<dd>The optional fully qualified name of an annotation of the class, with
+ optional wildcards.</dd>
+
+<dt><code><b>type</b></code> = "<i>type</i>"</dt>
+<dd>The optional type of the class: one of "class", "interface", or
+ "!interface".</dd>
+
+<dt><code><b>name</b></code> = "<i>class_name</i>"</dt>
+<dd>The optional fully qualified name of the class, with optional
+ wildcards.</dd>
+
+<dt><code><b>extendsannotation</b></code> = "<i>annotation_name</i>"</dt>
+<dd>The optional fully qualified name of an annotation of the the class that
+ the specified classes must extend, with optional wildcards.</dd>
+
+<dt><code><b>extends</b></code> = "<i>class_name</i>"</dt>
+<dd>The optional fully qualified name of the class the specified classes
+ must extend, with optional wildcards.</dd>
+
+<dt><code><b>implements</b></code> = "<i>class_name</i>"</dt>
+<dd>The optional fully qualified name of the class the specified classes
+ must implement, with optional wildcards.</dd>
+
+<dt><code><b><field</b></code>
+ <a href="#classmemberspecification"><i>class_member_specification</i></a>
+ <code><b>/></b></code></dt>
+<dd>Specifies a field.</dd>
+
+<dt><code><b><method</b></code>
+ <a href="#classmemberspecification"><i>class_member_specification</i></a>
+ <code><b>/></b></code></dt>
+<dd>Specifies a method.</dd>
+
+<dt><code><b><constructor</b></code>
+ <a href="#classmemberspecification"><i>class_member_specification</i></a>
+ <code><b>/></b></code></dt>
+<dd>Specifies a constructor.</dd>
+
+</dl>
+
+<h2><a name="classmemberspecification">Class Member Specification Attributes</a></h2>
+
+The class member tags can have the following <i>class_member_specification</i>
+attributes:
+
+<dl>
+
+<dt><code><b>access</b></code> = "<i>access_modifiers</i>"</dt>
+<dd>The optional access modifiers of the class. Any space-separated list of
+ "public", "protected", "private", "static", etc., with optional negators
+ "!".</dd>
+
+<dt><code><b>annotation</b></code> = "<i>annotation_name</i>"</dt>
+<dd>The optional fully qualified name of an annotation of the class member,
+ with optional wildcards.</dd>
+
+<dt><code><b>type</b></code> = "<i>type</i>"</dt>
+<dd>The optional fully qualified type of the class member, with optional
+ wildcards. Not applicable for constructors, but required for methods for
+ which the <code>parameters</code> attribute is specified.</dd>
+
+<dt><code><b>name</b></code> = "<i>name</i>"</dt>
+<dd>The optional name of the class member, with optional wildcards. Not
+ applicable for constructors.</dd>
+
+<dt><code><b>parameters</b></code> = "<i>parameters</i>"</dt>
+<dd>The optional comma-separated list of fully qualified method parameters,
+ with optional wildcards. Not applicable for fields, but required for
+ constructors, and for methods for which the <code>type</code> attribute is
+ specified.</dd>
+
+</dl>
+
+<hr />
+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/attention.gif b/common/proguard/proguard4.7/docs/manual/attention.gif
new file mode 100644
index 0000000..1a0c712
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/attention.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/manual/examples.html b/common/proguard/proguard4.7/docs/manual/examples.html
new file mode 100644
index 0000000..14e0758
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/examples.html
@@ -0,0 +1,1504 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Examples</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Examples</h2>
+
+Some typical useful configurations:
+<ol>
+<li><a href="#application">A typical application</a></li>
+<li><a href="#applet">A typical applet</a></li>
+<li><a href="#midlet">A typical midlet</a></li>
+<li><a href="#jcapplet">A typical Java Card applet</a></li>
+<li><a href="#xlet">A typical xlet</a></li>
+<li><a href="#androidactivity">A simple Android activity</a></li>
+<li><a href="#androidapplication">A complete Android application</a></li>
+<li><a href="#library">A typical library</a></li>
+<li><a href="#applications">All possible applications in the input jars</a></li>
+<li><a href="#applets">All possible applets in the input jars</a></li>
+<li><a href="#midlets">All possible midlets in the input jars</a></li>
+<li><a href="#jcapplets">All possible Java Card applets in the input jars</a></li>
+<li><a href="#xlets">All possible xlets in the input jars</a></li>
+<li><a href="#servlets">All possible servlets in the input jars</a></li>
+<li><a href="#scala">Scala applications with the Scala runtime</a></li>
+<li><a href="#native">Processing native methods</a></li>
+<li><a href="#callback">Processing callback methods</a></li>
+<li><a href="#enumerations">Processing enumeration classes</a></li>
+<li><a href="#serializable">Processing serializable classes</a></li>
+<li><a href="#beans">Processing bean classes</a></li>
+<li><a href="#annotations">Processing annotations</a></li>
+<li><a href="#database">Processing database drivers</a></li>
+<li><a href="#componentui">Processing ComponentUI classes</a></li>
+<li><a href="#rmi">Processing RMI code</a></li>
+<li><a href="#resourcefiles">Processing resource files</a></li>
+<li><a href="#manifestfiles">Processing manifest files</a></li>
+<li><a href="#stacktrace">Producing useful obfuscated stack traces</a></li>
+<li><a href="#repackaging">Obfuscating package names</a></li>
+<li><a href="#restructuring">Restructuring the output archives</a></li>
+<li><a href="#filtering">Filtering the input and the output</a></li>
+<li><a href="#multiple">Processing multiple applications at once</a></li>
+<li><a href="#incremental">Incremental obfuscation</a></li>
+<li><a href="#microedition">Preverifying class files for Java Micro Edition</a></li>
+<li><a href="#upgrade">Upgrading class files to Java 6</a></li>
+<li><a href="#deadcode">Finding dead code</a></li>
+<li><a href="#structure">Printing out the internal structure of class files</a></li>
+<li><a href="#annotated">Using annotations to configure ProGuard</a></li>
+</ol>
+
+You can find some sample configuration files in the <code>examples</code>
+directory of the ProGuard distribution.
+
+<h3><a name="application">A typical application</a></h3>
+
+To shrink, optimize, and obfuscate a simple Java application, you typically
+create a configuration file like <code>myconfig.pro</code>, which can be used
+with
+<pre>
+bin/proguard @myconfig.pro
+</pre>
+<p>
+The configuration file specifies the input, the output, and the entry points
+of the application:
+<pre>
+-injars myapplication.jar
+-outjars myapplication_out.jar
+-libraryjars <java.home>/lib/rt.jar
+-printmapping myapplication.map
+
+-keep public class mypackage.MyMain {
+ public static void main(java.lang.String[]);
+}
+</pre>
+<p>
+Note the use of the <code><java.home></code> system property. ProGuard
+automatically replaces it when parsing the file.
+<p>
+The <a href="usage.html#keep"><code>-keep</code></a> option specifies the
+entry point of the application that has to be preserved.
+The access modifiers <code>public</code> and <code>static</code> are not
+really required in this case, since we know a priori that the specified class
+and method have the proper access flags. It just looks more familiar this way.
+<p>
+Note that all type names are fully specified:
+<code>mypackage.MyMain</code> and <code>java.lang.String[]</code>.
+<p>
+We're writing out an obfuscation mapping file with <a
+href="usage.html#printmapping"><code>-printmapping</code></a>, for
+de-obfuscating any stack traces later on, or for incremental obfuscation of
+extensions.
+<p>
+We can further improve the results with a few additional options:
+<pre>
+-optimizationpasses 3
+-overloadaggressively
+-repackageclasses ''
+-allowaccessmodification
+</pre>
+These options are not required; they just shave off some extra bytes from the
+output jar, by performing up to 3 optimization passes, and by aggressively
+obfuscating class members and <a href="#repackaging">package names</a>.
+<p>
+In general, you might need a few additional options for processing <a
+href="#native">native methods</a>, <a href="#callback">callback methods</a>,
+<a href="#enumerations">enumerations</a>, <a href="#serializable">serializable
+classes</a>, <a href="#beans">bean classes</a>, <a
+href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
+files</a>.
+
+<h3><a name="applet">A typical applet</a></h3>
+
+These options shrink, optimize, and obfuscate the applet
+<code>mypackage.MyApplet</code>:
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars <java.home>/lib/rt.jar
+
+-keep public class mypackage.MyApplet
+</pre>
+<p>
+The typical applet methods will be preserved automatically, since
+<code>mypackage.MyApplet</code> is an extension of the <code>Applet</code>
+class in the library <code>rt.jar</code>.
+<p>
+If applicable, you should add options for processing <a href="#native">native
+methods</a>, <a href="#callback">callback methods</a>, <a
+href="#enumerations">enumerations</a>, <a href="#serializable">serializable
+classes</a>, <a href="#beans">bean classes</a>, <a
+href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
+files</a>.
+
+<h3><a name="midlet">A typical midlet</a></h3>
+
+These options shrink, optimize, obfuscate, and preverify the midlet
+<code>mypackage.MyMIDlet</code>:
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
+-libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
+-overloadaggressively
+-repackageclasses ''
+-allowaccessmodification
+-microedition
+
+-keep public class mypackage.MyMIDlet
+</pre>
+<p>
+Note how we're now targeting the Java Micro Edition run-time environment of
+<code>midpapi20.jar</code> and <code>cldcapi11.jar</code>, instead of the Java
+Standard Edition run-time environment <code>rt.jar</code>. You can target
+other JME environments by picking the appropriate jars.
+<p>
+The typical midlet methods will be preserved automatically, since
+<code>mypackage.MyMIDlet</code> is an extension of the <code>MIDlet</code>
+class in the library <code>midpapi20.jar</code>.
+<p>
+The <a href="usage.html#microedition"><code>-microedition</code></a> option
+makes sure the class files are preverified for Java Micro Edition, producing
+compact <code>StackMap</code> attributes. It is no longer necessary to run an
+external preverifier.
+<p>
+Be careful if you do use the external <code>preverify</code> tool on a platform
+with a case-insensitive filing system, such as Windows. Because this tool
+unpacks your processed jars, you should then use ProGuard's <a
+href="usage.html#dontusemixedcaseclassnames"><code>-dontusemixedcaseclassnames</code></a>
+option.
+<p>
+If applicable, you should add options for processing <a href="#native">native
+methods</a> and <a href="#resourcefiles">resource files</a>.
+<p>
+Note that you will still have to adapt the midlet jar size in the
+corresponding jad file; ProGuard doesn't do that for you.
+
+<h3><a name="jcapplet">A typical Java Card applet</a></h3>
+
+These options shrink, optimize, and obfuscate the Java Card applet
+<code>mypackage.MyApplet</code>:
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars /usr/local/java/javacard2.2.2/lib/api.jar
+-dontwarn java.lang.Class
+-overloadaggressively
+-repackageclasses ''
+-allowaccessmodification
+
+-keep public class mypackage.MyApplet
+</pre>
+<p>
+The configuration is very similar to the configuration for midlets, except that
+it now targets the Java Card run-time environment. This environment doesn't
+have java.lang.Class, so we're telling ProGuard not to worry about it.
+
+<h3><a name="xlet">A typical xlet</a></h3>
+
+These options shrink, optimize, and obfuscate the xlet
+<code>mypackage.MyXlet</code>:
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars /usr/local/java/jtv1.1/javatv.jar
+-libraryjars /usr/local/java/cdc1.1/lib/cdc.jar
+-libraryjars /usr/local/java/cdc1.1/lib/btclasses.zip
+-overloadaggressively
+-repackageclasses ''
+-allowaccessmodification
+
+-keep public class mypackage.MyXlet
+</pre>
+<p>
+The configuration is very similar to the configuration for midlets, except that
+it now targets the CDC run-time environment with the Java TV API.
+
+<h3><a name="androidactivity">A simple Android activity</a></h3>
+
+These options shrink, optimize, and obfuscate the single Android
+activity <code>mypackage.MyActivity</code>:
+<pre>
+-injars bin/classes
+-outjars bin/classes-processed.jar
+-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
+
+-dontpreverify
+-repackageclasses ''
+-allowaccessmodification
+-optimizations !code/simplification/arithmetic
+
+-keep public class mypackage.MyActivity
+</pre>
+<p>
+We're targeting the Android run-time and keeping the activity as an entry
+point.
+<p>
+Preverification is irrelevant for the dex compiler and the Dalvik VM, so we
+can switch it off with the
+<a href="usage.html#dontpreverify"><code>-dontpreverify</code></a> option.
+<p>
+The <a href="usage.html#optimizations"><code>-optimizations</code></a> option
+disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle.
+Note that the Dalvik VM also can't
+handle <a href="usage.html#overloadaggressively">aggressive overloading</a>
+(of static fields).
+<p>
+If applicable, you should add options for processing <a href="#native">native
+methods</a>, <a href="#callback">callback methods</a>,
+<a href="#enumerations">enumerations</a>,
+<a href="#annotations">annotations</a>, and
+<a href="#resourcefiles">resource files</a>.
+
+<h3><a name="androidapplication">A complete Android application</a></h3>
+
+These options shrink, optimize, and obfuscate all public activities, services,
+broadcast receivers, and content providers from the compiled classes and
+external libraries:
+<pre>
+-injars bin/classes
+-injars libs
+-outjars bin/classes-processed.jar
+-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar
+
+-dontpreverify
+-repackageclasses ''
+-allowaccessmodification
+-optimizations !code/simplification/arithmetic
+-keepattributes *Annotation*
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+
+-keep public class * extends android.view.View {
+ public <init>(android.content.Context);
+ public <init>(android.content.Context, android.util.AttributeSet);
+ public <init>(android.content.Context, android.util.AttributeSet, int);
+ public void set*(...);
+}
+
+-keepclasseswithmembers class * {
+ public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+-keepclasseswithmembers class * {
+ public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+-keepclassmembers class * implements android.os.Parcelable {
+ static android.os.Parcelable$Creator CREATOR;
+}
+
+-keepclassmembers class **.R$* {
+ public static <fields>;
+}
+</pre>
+<p>
+Most importantly, we're keeping all fundamental classes that may be referenced
+by the <code>AndroidManifest.xml</code> file of the application. If your
+manifest file contains other classes and methods, you may have to specify
+those as well.
+<p>
+We're keeping annotations, since they might be used by custom
+<code>RemoteViews</code>.
+<p>
+We're keeping any custom <code>View</code> extensions and other classes with
+typical constructors, since they might be referenced from XML layout files.
+<p>
+We're also keeping the required static fields in <code>Parcelable</code>
+implementations, since they are accessed by introspection.
+<p>
+Finally, we're keeping the static fields of referenced inner classes of
+auto-generated <code>R</code> classes, just in case your code is accessing
+those fields by introspection. Note that the compiler already inlines
+primitive fields, so ProGuard can generally remove all these classes entirely
+anyway (because the classes are not referenced and therefore not required).
+<p>
+If you're using additional Google APIs, you'll have to specify
+those as well, for instance:
+<pre>
+-libraryjars /usr/local/android-sdk/add-ons/google_apis-7_r01/libs/maps.jar
+</pre>
+<p>
+If you're using Google's optional License Verification Library, you can
+obfuscate its code along with your own code. You do have to preserve
+its <code>ILicensingService</code> interface for the library to work:
+<pre>
+-keep public interface com.android.vending.licensing.ILicensingService
+</pre>
+<p>
+If you're using the Android Compatibility library, you should add the
+following line, to let ProGuard know it's ok that the library references some
+classes that are not available in all versions of the API:
+<pre>
+-dontwarn android.support.**
+</pre>
+<p>
+If applicable, you should add options for processing <a href="#native">native
+methods</a>, <a href="#callback">callback methods</a>,
+<a href="#enumerations">enumerations</a>,
+and <a href="#resourcefiles">resource files</a>. You may also want to add
+options for producing <a href="#stacktrace">useful stack traces</a>. You can
+find a complete sample configuration in <code>examples/android.pro</code> in
+the ProGuard distribution.
+<p>
+The build process of the Android SDK (version 2.3 and higher) already
+integrates ProGuard by default. You only need to enable it (for release
+builds) by adding <code>proguard.config=proguard.cfg</code> to the file
+<code>build.properties</code>. In case of problems, you may want to check if
+the automatically generated file <code>proguard.cfg</code> contains the
+settings discussed above. The generated Ant build file already sets the input
+and output files for you.
+<p>
+For more information, you can consult the official <a target="other"
+href="http://developer.android.com/guide/developing/tools/proguard.html">Developer
+Guide</a> in the Android SDK.
+
+<h3><a name="library">A typical library</a></h3>
+
+These options shrink, optimize, and obfuscate an entire library, keeping all
+public and protected classes and class members, native method names, and
+serialization code. The processed version of the library can then still be
+used as such, for developing code based on its public API.
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars <java.home>/lib/rt.jar
+-printmapping out.map
+
+-keepparameternames
+-renamesourcefileattribute SourceFile
+-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
+ SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
+
+-keep public class * {
+ public protected *;
+}
+
+-keepclassmembernames class * {
+ java.lang.Class class$(java.lang.String);
+ java.lang.Class class$(java.lang.String, boolean);
+}
+
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+
+-keepclassmembers enum * {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ private static final java.io.ObjectStreamField[] serialPersistentFields;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+</pre>
+<p>
+This configuration should preserve everything we'll ever want to access in the
+library. Only if there are any other non-public classes or methods that are
+invoked dynamically, they should be specified using additional <a
+href="usage.html#keep"><code>-keep</code></a> options.
+<p>
+The <a
+href="usage.html#keepclassmembernames"><code>-keepclassmembernames</code></a>
+option for the <code>class$</code> methods is not strictly necessary. These
+methods are inserted by the <code>javac</code> compiler and the
+<code>jikes</code> compiler respectively, in JDK 1.2 and older, to implement
+the <code>.class</code> construct. ProGuard will automatically detect them and
+deal with them, even when their names have been obfuscated. However, other
+obfuscators may rely on the original method names. It may therefore be helpful
+to preserve them, in case these other obfuscators are ever used for further
+obfuscation of the library.
+<p>
+The "Exceptions" attribute has to be preserved, so the compiler knows which
+exceptions methods may throw.
+<p>
+The "InnerClasses" attribute (or more precisely, its source name part) has to
+be preserved too, for any inner classes that can be referenced from outside the
+library. The <code>javac</code> compiler would be unable to find the inner
+classes otherwise.
+<p>
+The "Signature" attribute is required to be able to access generic types when
+compiling in JDK 5.0 and higher.
+<p>
+The <a href="usage.html#keepparameternames"><code>-keepparameternames</code></a>
+option keeps the parameter names in the "LocalVariableTable" and
+"LocalVariableTypeTable" attributes of public library methods. Some IDEs can
+present these names to the developers who use the library.
+<p>
+Finally, we're keeping the "Deprecated" attribute and the attributes for
+producing <a href="#stacktrace">useful stack traces</a>.
+<p>
+We've also added some options for for processing <a href="#native">native
+methods</a>, <a href="#enumerations">enumerations</a>, <a
+href="#serializable">serializable classes</a>, and <a
+href="#annotations">annotations</a>, which are all discussed in their
+respective examples.
+
+<h3><a name="applications">All possible applications in the input jars</a></h3>
+
+These options shrink, optimize, and obfuscate all public applications in
+<code>in.jar</code>:
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars <java.home>/lib/rt.jar
+-printseeds
+
+-keepclasseswithmembers public class * {
+ public static void main(java.lang.String[]);
+}
+</pre>
+<p>
+Note the use of <a
+href="usage.html#keepclasseswithmembers"><code>-keepclasseswithmembers</code></a>.
+We don't want to preserve all classes, just all classes that have main
+methods, and those methods.
+<p>
+The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
+out which classes exactly will be preserved, so we know for sure we're getting
+what we want.
+<p>
+If applicable, you should add options for processing <a href="#native">native
+methods</a>, <a href="#callback">callback methods</a>, <a
+href="#enumerations">enumerations</a>, <a href="#serializable">serializable
+classes</a>, <a href="#beans">bean classes</a>, <a
+href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
+files</a>.
+
+<h3><a name="applets">All possible applets in the input jars</a></h3>
+
+These options shrink, optimize, and obfuscate all public applets in
+<code>in.jar</code>:
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars <java.home>/lib/rt.jar
+-printseeds
+
+-keep public class * extends java.applet.Applet
+</pre>
+<p>
+We're simply keeping all classes that extend the <code>Applet</code> class.
+<p>
+Again, the <a href="usage.html#printseeds"><code>-printseeds</code></a> option
+prints out which applets exactly will be preserved.
+<p>
+If applicable, you should add options for processing <a href="#native">native
+methods</a>, <a href="#callback">callback methods</a>, <a
+href="#enumerations">enumerations</a>, <a href="#serializable">serializable
+classes</a>, <a href="#beans">bean classes</a>, <a
+href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
+files</a>.
+
+<h3><a name="midlets">All possible midlets in the input jars</a></h3>
+
+These options shrink, optimize, obfuscate, and preverify all public midlets in
+<code>in.jar</code>:
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
+-libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
+-overloadaggressively
+-repackageclasses ''
+-allowaccessmodification
+-microedition
+-printseeds
+
+-keep public class * extends javax.microedition.midlet.MIDlet
+</pre>
+<p>
+We're simply keeping all classes that extend the <code>MIDlet</code> class.
+<p>
+The <a href="usage.html#microedition"><code>-microedition</code></a> option
+makes sure the class files are preverified for Java Micro Edition, producing
+compact <code>StackMap</code> attributes. It is no longer necessary to run an
+external preverifier.
+<p>
+Be careful if you do use the external <code>preverify</code> tool on a platform
+with a case-insensitive filing system, such as Windows. Because this tool
+unpacks your processed jars, you should then use ProGuard's <a
+href="usage.html#dontusemixedcaseclassnames"><code>-dontusemixedcaseclassnames</code></a>
+option.
+<p>
+The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
+out which midlets exactly will be preserved.
+<p>
+If applicable, you should add options for processing <a href="#native">native
+methods</a> and <a href="#resourcefiles">resource files</a>.
+<p>
+Note that you will still have to adapt the midlet jar size in the
+corresponding jad file; ProGuard doesn't do that for you.
+
+<h3><a name="jcapplets">All possible Java Card applets in the input jars</a></h3>
+
+These options shrink, optimize, and obfuscate all public Java Card applets in
+<code>in.jar</code>:
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars /usr/local/java/javacard2.2.2/lib/api.jar
+-dontwarn java.lang.Class
+-overloadaggressively
+-repackageclasses ''
+-allowaccessmodification
+-printseeds
+
+-keep public class * implements javacard.framework.Applet
+</pre>
+<p>
+We're simply keeping all classes that implement the <code>Applet</code>
+interface.
+<p>
+The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
+out which applets exactly will be preserved.
+
+<h3><a name="xlets">All possible xlets in the input jars</a></h3>
+
+These options shrink, optimize, and obfuscate all public xlets in
+<code>in.jar</code>:
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars /usr/local/java/jtv1.1/javatv.jar
+-libraryjars /usr/local/java/cdc1.1/lib/cdc.jar
+-libraryjars /usr/local/java/cdc1.1/lib/btclasses.zip
+-overloadaggressively
+-repackageclasses ''
+-allowaccessmodification
+-printseeds
+
+-keep public class * implements javax.tv.xlet.Xlet
+</pre>
+<p>
+We're simply keeping all classes that implement the <code>Xlet</code> interface.
+<p>
+The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
+out which xlets exactly will be preserved.
+
+<h3><a name="servlets">All possible servlets in the input jars</a></h3>
+
+These options shrink, optimize, and obfuscate all public servlets in
+<code>in.jar</code>:
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars <java.home>/lib/rt.jar
+-libraryjars /usr/local/java/servlet/servlet.jar
+-printseeds
+
+-keep public class * implements javax.servlet.Servlet
+</pre>
+<p>
+Keeping all servlets is very similar to keeping all applets. The servlet API
+is not part of the standard run-time jar, so we're specifying it as a library.
+Don't forget to use the right path name.
+<p>
+We're then keeping all classes that implement the <code>Servlet</code>
+interface. We're using the <code>implements</code> keyword because it looks
+more familiar in this context, but it is equivalent to <code>extends</code>,
+as far as ProGuard is concerned.
+<p>
+The <a href="usage.html#printseeds"><code>-printseeds</code></a> option prints
+out which servlets exactly will be preserved.
+<p>
+If applicable, you should add options for processing <a href="#native">native
+methods</a>, <a href="#callback">callback methods</a>, <a
+href="#enumerations">enumerations</a>, <a href="#serializable">serializable
+classes</a>, <a href="#beans">bean classes</a>, <a
+href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
+files</a>.
+
+<h3><a name="scala">Scala applications with the Scala runtime</a></h3>
+
+These options shrink, optimize, and obfuscate all public Scala applications in
+<code>in.jar</code>:
+<pre>
+-injars in.jar
+-injars /usr/local/java/scala-2.9.1/lib/scala-library.jar
+-outjars out.jar
+-libraryjars <java.home>/lib/rt.jar
+
+-dontwarn scala.**
+
+-keepclasseswithmembers public class * {
+ public static void main(java.lang.String[]);
+}
+
+-keep class * implements org.xml.sax.EntityResolver
+
+-keepclassmembers class * {
+ ** MODULE$;
+}
+
+-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinPool {
+ long eventCount;
+ int workerCounts;
+ int runControl;
+ scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode syncStack;
+ scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode spareStack;
+}
+
+-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinWorkerThread {
+ int base;
+ int sp;
+ int runState;
+}
+
+-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinTask {
+ int status;
+}
+
+-keepclassmembernames class scala.concurrent.forkjoin.LinkedTransferQueue {
+ scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference head;
+ scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference tail;
+ scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference cleanMe;
+}
+</pre>
+<p>
+The configuration is essentially the same as
+for <a href="#applications">processing applications</a>, because Scala is
+compiled to ordinary Java bytecode. However, the example processes the Scala
+runtime library as well. The processed jar can be an order of magnitude
+smaller and a few times faster than the original code (for the Scala code
+examples, for instance).
+<p>
+The <a href="usage.html#dontwarn"><code>-dontwarn</code></a> option tells
+ProGuard not to complain about some artefacts in the Scala runtime, the way it
+is compiled by the <code>scalac</code> compiler (at least in Scala 2.9.1 and
+older). Note that this option should always be used with care.
+<p>
+The additional <a href="usage.html#keepoverview"><code>-keep</code></a>
+options make sure that some classes and some fields that are accessed by means
+of introspection are not removed or renamed.
+<p>
+If applicable, you should add options for processing <a href="#native">native
+methods</a>, <a href="#callback">callback methods</a>, <a
+href="#enumerations">enumerations</a>, <a href="#serializable">serializable
+classes</a>, <a href="#beans">bean classes</a>, <a
+href="#annotations">annotations</a>, and <a href="#resourcefiles">resource
+files</a>.
+<h3><a name="native">Processing native methods</a></h3>
+
+If your application, applet, servlet, library, etc., contains native methods,
+you'll want to preserve their names and their classes' names, so they can
+still be linked to the native library. The following additional option will
+ensure that:
+<pre>
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+</pre>
+<p>
+Note the use of <a
+href="usage.html#keepclasseswithmembernames"><code>-keepclasseswithmembernames</code></a>.
+We don't want to preserve all classes or all native methods; we just want to
+keep the relevant names from being obfuscated.
+<p>
+ProGuard doesn't look at your native code, so it won't automatically preserve
+the classes or class members that are invoked by the native code. These are
+entry points, which you'll have to specify explicitly. <a
+href="callback">Callback methods</a> are discussed below as a typical example.
+
+<h3><a name="callback">Processing callback methods</a></h3>
+
+If your application, applet, servlet, library, etc., contains callback
+methods, which are called from external code (native code, scripts,...),
+you'll want to preserve them, and probably their classes too. They are just
+entry points to your code, much like, say, the main method of an application.
+If they aren't preserved by other <code>-keep</code> options, something like
+the following option will keep the callback class and method:
+<pre>
+-keep class mypackage.MyCallbackClass {
+ void myCallbackMethod(java.lang.String);
+}
+</pre>
+<p>
+This will preserve the given class and method from being removed or renamed.
+
+<h3><a name="enumerations">Processing enumeration classes</a></h3>
+
+If your application, applet, servlet, library, etc., contains enumeration
+classes, you'll have to preserve some special methods. Enumerations were
+introduced in Java 5. The java compiler translates enumerations into classes
+with a special structure. Notably, the classes contain implementations of some
+static methods that the run-time environment accesses by introspection (Isn't
+that just grand? Introspection is the self-modifying code of a new
+generation). You have to specify these explicitly, to make sure they aren't
+removed or obfuscated:
+<pre>
+-keepclassmembers enum * {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+</pre>
+
+<h3><a name="serializable">Processing serializable classes</a></h3>
+
+More complex applications, applets, servlets, libraries, etc., may contain
+classes that are serialized. Depending on the way in which they are used, they
+may require special attention:
+<ul>
+
+<li>Often, serialization is simply a means of transporting data, without
+ long-term storage. Classes that are shrunk and obfuscated should then
+ continue to function fine with the following additional options:
+
+<pre>
+-keepclassmembers class * implements java.io.Serializable {
+ private static final java.io.ObjectStreamField[] serialPersistentFields;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+</pre>
+<p>
+
+ The <a
+ href="usage.html#keepclassmembers"><code>-keepclassmembers</code></a>
+ option makes sure that any serialization methods are kept. By using this
+ option instead of the basic <code>-keep</code> option, we're not
+ forcing preservation of <i>all</i> serializable classes, just preservation
+ of the listed members of classes that are actually used.</li>
+
+<li>Sometimes, the serialized data are stored, and read back later into newer
+ versions of the serializable classes. One then has to take care the classes
+ remain compatible with their unprocessed versions and with future
+ processed versions. In such cases, the relevant classes will most likely
+ have <code>serialVersionUID</code> fields. The following options should
+ then be sufficient to ensure compatibility over time:
+
+<pre>
+-keepnames class * implements java.io.Serializable
+
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ private static final java.io.ObjectStreamField[] serialPersistentFields;
+ !static !transient <fields>;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+</pre>
+<p>
+
+ The <code>serialVersionUID</code> and <code>serialPersistentFields</code>
+ lines makes sure those fields are preserved, if they are present.
+ The <code><fields></code> line preserves all non-static,
+ non-transient fields, with their original names. The introspection of the
+ serialization process and the de-serialization process will then find
+ consistent names.</li>
+
+<li>Occasionally, the serialized data have to remain compatible, but the
+ classes involved lack <code>serialVersionUID</code> fields. I imagine the
+ original code will then be hard to maintain, since the serial version UID
+ is then computed from a list of features the serializable class. Changing
+ the class ever so slightly may change the computed serial version UID. The
+ list of features is specified in the section on <a
+ href="http://java.sun.com/javase/6/docs/platform/serialization/spec/class.html#4100">Stream
+ Unique Identifiers</a> of Sun's <a
+ href="http://java.sun.com/javase/6/docs/platform/serialization/spec/serialTOC.html">Java
+ Object Serialization Specification</a>. The following directives should at
+ least partially ensure compatibility with the original classes:
+
+<pre>
+-keepnames class * implements java.io.Serializable
+
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ private static final java.io.ObjectStreamField[] serialPersistentFields;
+ !static !transient <fields>;
+ !private <fields>;
+ !private <methods>;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+</pre>
+<p>
+
+ The new options force preservation of the elements involved in the UID
+ computation. In addition, the user will have to manually specify all
+ interfaces of the serializable classes (using something like "<code>-keep
+ interface MyInterface</code>"), since these names are also used when
+ computing the UID. A fast but sub-optimal alternative would be simply
+ keeping all interfaces with "<code>-keep interface *</code>".</li>
+
+</ul>
+<p>
+
+Note that the above options may preserve more classes and class members
+than strictly necessary. For instance, a large number of classes may implement
+the <code>Serialization</code> interface, yet only a small number may actually
+ever be serialized. Knowing your application and tuning the configuration
+often produces more compact results.
+
+<h3><a name="beans">Processing bean classes</a></h3>
+
+If your application, applet, servlet, library, etc., makes extensive use of
+introspection on bean classes to find bean editor classes, or getter and
+setter methods, then configuration may become painful. There's not much else
+you can do than making sure the bean class names, or the getter and setter
+names don't change. For instance:
+<pre>
+-keep public class mypackage.MyBean {
+ public void setMyProperty(int);
+ public int getMyProperty();
+}
+
+-keep public class mypackage.MyBeanEditor
+</pre>
+<p>
+If there are too many elements to list explicitly, wildcards in class names
+and method signatures might be helpful. This example should encompasses all
+possible setters and getters in classes in the package <code>mybeans</code>:
+<pre>
+-keep class mybeans.** {
+ void set*(***);
+ void set*(int, ***);
+
+ boolean is*();
+ boolean is*(int);
+
+ *** get*();
+ *** get*(int);
+}
+</pre>
+<p>
+The '<code>***</code>' wildcard matches any type (primitive or non-primitive,
+array or non-array). The methods with the '<code>int</code>' arguments matches
+properties that are lists.
+
+<h3><a name="annotations">Processing annotations</a></h3>
+
+If your application, applet, servlet, library, etc., uses annotations, you may
+want to preserve them in the processed output. Annotations are represented by
+attributes that have no direct effect on the execution of the code. However,
+their values can be retrieved through introspection, allowing developers to
+adapt the execution behavior accordingly. By default, ProGuard treats
+annotation attributes as optional, and removes them in the obfuscation step.
+If they are required, you'll have to specify this explicitly:
+<pre>
+-keepattributes *Annotation*
+</pre>
+<p>
+For brevity, we're specifying a wildcarded attribute name, which will match
+<code>RuntimeVisibleAnnotations</code>,
+<code>RuntimeInvisibleAnnotations</code>,
+<code>RuntimeVisibleParameterAnnotations</code>,
+<code>RuntimeInvisibleParameterAnnotations</code>, and
+<code>AnnotationDefault</code>. Depending on the purpose of the processed
+code, you could refine this selection, for instance not keeping the run-time
+invisible annotations (which are only used at compile-time).
+<p>
+Some code may make further use of introspection to figure out the enclosing
+methods of anonymous inner classes. In that case, the corresponding attribute
+has to be preserved as well:
+<pre>
+-keepattributes EnclosingMethod
+</pre>
+
+<h3><a name="database">Processing database drivers</a></h3>
+
+Database drivers are implementations of the <code>Driver</code> interface.
+Since they are often created dynamically, you may want to preserve any
+implementations that you are processing as entry points:
+<pre>
+-keep class * implements java.sql.Driver
+</pre>
+<p>
+This option also gets rid of the note that ProGuard prints out about
+<code>(java.sql.Driver)Class.forName</code> constructs, if you are
+instantiating a driver in your code (without necessarily implementing any
+drivers yourself).
+
+<h3><a name="componentui">Processing ComponentUI classes</a></h3>
+
+Swing UI look and feels are implemented as extensions of the
+<code>ComponentUI</code> class. For some reason, these have to contain a
+static method <code>createUI</code>, which the Swing API invokes using
+introspection. You should therefore always preserve the method as an entry
+point, for instance like this:
+<pre>
+-keep class * extends javax.swing.plaf.ComponentUI {
+ public static javax.swing.plaf.ComponentUI createUI(javax.swing.JComponent);
+}
+</pre>
+<p>
+This option also keeps the classes themselves.
+
+<h3><a name="rmi">Processing RMI code</a></h3>
+
+Reportedly, the easiest way to handle RMI code is to process the code with
+ProGuard first and then invoke the <code>rmic</code> tool. If that is not
+possible, you may want to try something like this:
+<pre>
+-keepattributes Exceptions
+
+-keep interface * extends java.rmi.Remote {
+ <methods>;
+}
+
+-keep class * implements java.rmi.Remote {
+ <init>(java.rmi.activation.ActivationID, java.rmi.MarshalledObject);
+}
+</pre>
+<p>
+The first <code>-keep</code> option keeps all your Remote interfaces and their
+methods. The second one keeps all the implementations, along with their
+particular RMI constructors, if any.
+<p>
+The <code>Exceptions</code> attribute has to be kept too, because the RMI
+handling code performs introspection to check whether the method signatures
+are compatible.
+
+<h3><a name="resourcefiles">Processing resource files</a></h3>
+
+If your application, applet, servlet, library, etc., contains resource files,
+it may be necessary to adapt their names and/or their contents when the
+application is obfuscated. The following two options can achieve this
+automatically:
+<pre>
+-adaptresourcefilenames **.properties,**.gif,**.jpg
+-adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF
+</pre>
+<p>
+The <a href="usage.html#adaptresourcefilenames">-adaptresourcefilenames</a>
+option in this case renames properties files and image files in the processed
+output, based on the obfuscated names of their corresponding class files (if
+any). The <a
+href="usage.html#adaptresourcefilecontents">-adaptresourcefilecontents</a>
+option looks for class names in properties files and in the manifest file, and
+replaces these names by the obfuscated names (if any). You'll probably want to
+adapt the filters to suit your application.
+
+<h3><a name="manifestfiles">Processing manifest files</a></h3>
+
+As illustrated in the previous section, manifest files can be treated like
+ordinary resource files. ProGuard can adapt obfuscated class names in the
+files, but it won't make any other changes. If you want anything else, you
+should apply an external tool. For instance, if a manifest file contains
+signing information, you should sign the jar again after it has been
+processed.
+<p>
+If you're merging several input jars into a single output jar, you'll have to
+pick one, typically by specifying <a href="usage.html#filters">filters</a>:
+<pre>
+-injars in1.jar
+-injars in2.jar(!META-INF/MANIFEST.MF)
+-injars in3.jar(!META-INF/MANIFEST.MF)
+-outjars out.jar
+</pre>
+<p>
+The filters will let ProGuard copy the manifest file from the first jar and
+ignore any manifest files in the second and third input jars. Note that
+ProGuard will leave the order of the files in the jars unchanged; manifest
+files are not necessarily put first.
+
+<h3><a name="stacktrace">Producing useful obfuscated stack traces</a></h3>
+
+These options let obfuscated applications or libraries produce stack traces
+that can still be deciphered later on:
+<pre>
+-printmapping out.map
+
+-renamesourcefileattribute SourceFile
+-keepattributes SourceFile,LineNumberTable
+</pre>
+<p>
+We're keeping all source file attributes, but we're replacing their values by
+the string "SourceFile". We could use any string. This string is already
+present in all class files, so it doesn't take up any extra space. If you're
+working with J++, you'll want to keep the "SourceDir" attribute as well.
+<p>
+We're also keeping the line number tables of all methods.
+<p>
+Whenever both of these attributes are present, the Java run-time environment
+will include line number information when printing out exception stack traces.
+<p>
+The information will only be useful if we can map the obfuscated names back to
+their original names, so we're saving the mapping to a file
+<code>out.map</code>. The information can then be used by the <a
+href="retrace/index.html">ReTrace</a> tool to restore the original stack trace.
+
+<h3><a name="repackaging">Obfuscating package names</a></h3>
+
+Package names can be obfuscated in various ways, with increasing levels of
+obfuscation and compactness. For example, consider the following classes:
+<pre>
+mycompany.myapplication.MyMain
+mycompany.myapplication.Foo
+mycompany.myapplication.Bar
+mycompany.myapplication.extra.FirstExtra
+mycompany.myapplication.extra.SecondExtra
+mycompany.util.FirstUtil
+mycompany.util.SecondUtil
+</pre>
+<p>
+Let's assume the class name <code>mycompany.myapplication.MyMain</code> is the
+main application class that is kept by the configuration. All other class names
+can be obfuscated.
+<p>
+By default, packages that contain classes that can't be renamed aren't renamed
+either, and the package hierarchy is preserved. This results in obfuscated
+class names like these:
+<pre>
+mycompany.myapplication.MyMain
+mycompany.myapplication.a
+mycompany.myapplication.b
+mycompany.myapplication.a.a
+mycompany.myapplication.a.b
+mycompany.a.a
+mycompany.a.b
+</pre>
+<p>
+The <a
+href="usage.html#flattenpackagehierarchy"><code>-flattenpackagehierarchy</code></a>
+option obfuscates the package names further, by flattening the package
+hierarchy of obfuscated packages:
+<pre>
+-flattenpackagehierarchy 'myobfuscated'
+</pre>
+<p>
+The obfuscated class names then look as follows:
+<pre>
+mycompany.myapplication.MyMain
+mycompany.myapplication.a
+mycompany.myapplication.b
+myobfuscated.a.a
+myobfuscated.a.b
+myobfuscated.b.a
+myobfuscated.b.b
+</pre>
+<p>
+Alternatively, the <a
+href="usage.html#repackageclasses"><code>-repackageclasses</code></a> option
+obfuscates the entire packaging, by combining obfuscated classes into a single
+package:
+<pre>
+-repackageclasses 'myobfuscated'
+</pre>
+The obfuscated class names then look as follows:
+<pre>
+mycompany.myapplication.MyMain
+mycompany.myapplication.a
+mycompany.myapplication.b
+myobfuscated.a
+myobfuscated.b
+myobfuscated.c
+myobfuscated.d
+</pre>
+<p>
+Additionally specifying the <a
+href="usage.html#allowaccessmodification"><code>-allowaccessmodification</code></a>
+option allows access permissions of classes and class members to
+be broadened, opening up the opportunity to repackage all obfuscated classes:
+<pre>
+-repackageclasses 'myobfuscated'
+-allowaccessmodification
+</pre>
+The obfuscated class names then look as follows:
+<pre>
+mycompany.myapplication.MyMain
+myobfuscated.a
+myobfuscated.b
+myobfuscated.c
+myobfuscated.d
+myobfuscated.e
+myobfuscated.f
+</pre>
+<p>
+The specified target package can always be the root package. For instance:
+<pre>
+-repackageclasses ''
+-allowaccessmodification
+</pre>
+The obfuscated class names are then the shortest possible names:
+<pre>
+mycompany.myapplication.MyMain
+a
+b
+c
+d
+e
+f
+</pre>
+<p>
+Note that not all levels of obfuscation of package names may be acceptable for
+all code. Notably, you may have to take into account that your application may
+contain <a href="#resourcefiles">resource files</a> that have to be adapted.
+
+<h3><a name="restructuring">Restructuring the output archives</a></h3>
+
+In simple applications, all output classes and resources files are merged into
+a single jar. For example:
+<pre>
+-injars classes
+-injars in1.jar
+-injars in2.jar
+-injars in3.jar
+-outjars out.jar
+</pre>
+<p>
+This configuration merges the processed versions of the files in the
+<code>classes</code> directory and the three jars into a single output jar
+<code>out.jar</code>.
+<p>
+If you want to preserve the structure of your input jars (and/or wars, ears,
+zips, or directories), you can specify an output directory (or a war, an ear,
+or a zip). For example:
+<pre>
+-injars in1.jar
+-injars in2.jar
+-injars in3.jar
+-outjars out
+</pre>
+<p>
+The input jars will then be reconstructed in the directory <code>out</code>,
+with their original names.
+<p>
+You can also combine archives into higher level archives. For example:
+<pre>
+-injars in1.jar
+-injars in2.jar
+-injars in3.jar
+-outjars out.war
+</pre>
+<p>
+The other way around, you can flatten the archives inside higher level
+archives into simple archives:
+<pre>
+-injars in.war
+-outjars out.jar
+</pre>
+<p>
+This configuration puts the processed contents of all jars inside
+<code>in.war</code> (plus any other contents of <code>in.war</code>) into
+<code>out.jar</code>.
+<p>
+If you want to combine input jars (and/or wars, ears, zips, or directories)
+into output jars (and/or wars, ears, zips, or directories), you can group the
+<a href="usage.html#injars"><code>-injars</code></a> and <a
+href="usage.html#outjars"><code>-outjars</code></a> options. For example:
+<pre>
+-injars base_in1.jar
+-injars base_in2.jar
+-injars base_in3.jar
+-outjars base_out.jar
+
+-injars extra_in.jar
+-outjars extra_out.jar
+</pre>
+<p>
+This configuration puts the processed results of all <code>base_in*.jar</code>
+jars into <code>base_out.jar</code>, and the processed results of the
+<code>extra_in.jar</code> into <code>extra_out.jar</code>. Note that only the
+order of the options matters; the additional whitespace is just for clarity.
+<p>
+This grouping, archiving, and flattening can be arbitrarily complex. ProGuard
+always tries to package output archives in a sensible way, reconstructing the
+input entries as much as required.
+
+<h3><a name="filtering">Filtering the input and the output</a></h3>
+
+If you want even greater control, you can add
+<a href="usage.html#filters">filters</a> to the input and the output,
+filtering out zips, ears, wars, jars, and/or ordinary files. For example, if
+you want to disregard certain files from an input jar:
+<pre>
+-injars in.jar(!images/**)
+-outjars out.jar
+</pre>
+<p>
+This configuration removes any files in the <code>images</code> directory and
+its subdirectories.
+<p>
+Such filters can be convenient for avoiding warnings about duplicate files in
+the output. For example, only keeping the manifest file from a first input jar:
+<pre>
+-injars in1.jar
+-injars in2.jar(!META-INF/MANIFEST.MF)
+-injars in3.jar(!META-INF/MANIFEST.MF)
+-outjars out.jar
+</pre>
+<p>
+Another useful application is speeding up the processing by ProGuard, by
+disregarding a large number of irrelevant classes in the runtime library jar:
+<pre>
+-libraryjars <java.home>/lib/rt.jar(java/**,javax/**)
+</pre>
+<p>
+The filter makes ProGuard disregard <code>com.sun.**</code> classes, for
+instance , which don't affect the processing of ordinary applications.
+<p>
+It is also possible to filter the jars (and/or wars, ears, zips) themselves,
+based on their names. For example:
+<pre>
+-injars in(**/acme_*.jar;)
+-outjars out.jar
+</pre>
+<p>
+Note the semi-colon in the filter; the filter in front of it applies to jar
+names. In this case, only <code>acme_*.jar</code> jars are read from the
+directory <code>in</code> and its subdirectories. Filters for war names, ear
+names, and zip names can be prefixed with additional semi-colons. All types of
+filters can be combined. They are orthogonal.
+<p>
+On the other hand, you can also filter the output, in order to control what
+content goes where. For example:
+<pre>
+-injars in.jar
+-outjars code_out.jar(**.class)
+-outjars resources_out.jar
+</pre>
+<p>
+This configuration splits the processed output, sending <code>**.class</code>
+files to <code>code_out.jar</code>, and all remaining files to
+<code>resources_out.jar</code>.
+<p>
+Again, the filtering can be arbitrarily complex, especially when combined with
+grouping input and output.
+
+<h3><a name="multiple">Processing multiple applications at once</a></h3>
+
+You can process several dependent or independent applications (or applets,
+midlets,...) in one go, in order to save time and effort. ProGuard's input and
+output handling offers various ways to keep the output nicely structured.
+<p>
+The easiest way is to specify your input jars (and/or wars, ears, zips, and
+directories) and a single output directory. ProGuard will then reconstruct the
+input in this directory, using the original jar names. For example, showing
+just the input and output options:
+<pre>
+-injars application1.jar
+-injars application2.jar
+-injars application3.jar
+-outjars processed_applications
+</pre>
+<p>
+After processing, the directory <code>processed_applications</code> will
+contain processed versions of application jars, with their original names.
+
+<h3><a name="incremental">Incremental obfuscation</a></h3>
+
+After having <a href="#application">processed an application</a>, e.g.
+ProGuard itself, you can still incrementally add other pieces of code that
+depend on it, e.g. the ProGuard GUI:
+<pre>
+-injars proguardgui.jar
+-outjars proguardgui_out.jar
+-injars proguard.jar
+-outjars proguard_out.jar
+-libraryjars <java.home>/lib/rt.jar
+-applymapping proguard.map
+
+-keep public class proguard.gui.ProGuardGUI {
+ public static void main(java.lang.String[]);
+}
+</pre>
+<p>
+We're reading both unprocessed jars as input. Their processed contents will go
+to the respective output jars. The <a
+href="usage.html#applymapping"><code>-applymapping</code></a> option then
+makes sure the ProGuard part of the code gets the previously produced
+obfuscation mapping. The final application will consist of the obfuscated
+ProGuard jar and the additional obfuscated GUI jar.
+<p>
+The added code in this example is straightforward; it doesn't affect the
+original code. The <code>proguard_out.jar</code> will be identical to the one
+produced in the initial processing step. If you foresee adding more complex
+extensions to your code, you should specify the options <a
+href="usage.html#useuniqueclassmembernames"><code>-useuniqueclassmembernames</code></a>,
+<a href="usage.html#dontshrink"><code>-dontshrink</code></a>, and <a
+href="usage.html#dontoptimize"><code>-dontoptimize</code></a> <i>in the
+original processing step</i>. These options ensure that the obfuscated base
+jar will always remain usable without changes. You can then specify the base
+jar as a library jar:
+<pre>
+-injars proguardgui.jar
+-outjars proguardgui_out.jar
+-libraryjars proguard.jar
+-libraryjars <java.home>/lib/rt.jar
+-applymapping proguard.map
+
+-keep public class proguard.gui.ProGuardGUI {
+ public static void main(java.lang.String[]);
+}
+</pre>
+
+<h3><a name="microedition">Preverifying class files for Java Micro Edition</a></h3>
+
+Even if you're not interested in shrinking, optimizing, and obfuscating your
+midlets, as shown in the <a href="#midlets">midlets example</a>, you can still
+use ProGuard to preverify the class files for Java Micro Edition. ProGuard
+produces slightly more compact results than the traditional external
+preverifier.
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
+-libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
+
+-dontshrink
+-dontoptimize
+-dontobfuscate
+
+-microedition
+</pre>
+<p>
+We're not processing the input, just making sure the class files are
+preverified by targeting them at Java Micro Edition with the <a
+href="usage.html#microedition"><code>-microedition</code></a> option. Note
+that we don't need any <code>-keep</code> options to specify entry points; all
+class files are simply preverified.
+
+<h3><a name="upgrade">Upgrading class files to Java 6</a></h3>
+
+The following options upgrade class files to Java 6, by updating their
+internal version numbers and preverifying them. The class files can then be
+loaded more efficiently by the Java 6 Virtual Machine.
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars <java.home>/lib/rt.jar
+
+-dontshrink
+-dontoptimize
+-dontobfuscate
+
+-target 1.6
+</pre>
+<p>
+We're not processing the input, just retargeting the class files with the <a
+href="usage.html#target"><code>-target</code></a> option. They will
+automatically be preverified for Java 6 as a result. Note that we don't need
+any <code>-keep</code> options to specify entry points; all class files are
+simply updated and preverified.
+
+<h3><a name="deadcode">Finding dead code</a></h3>
+
+These options list unused classes, fields, and methods in the application
+<code>mypackage.MyApplication</code>:
+<pre>
+-injars in.jar
+-libraryjars <java.home>/lib/rt.jar
+
+-dontoptimize
+-dontobfuscate
+-dontpreverify
+-printusage
+
+-keep public class mypackage.MyApplication {
+ public static void main(java.lang.String[]);
+}
+</pre>
+<p>
+We're not specifying an output jar, just printing out some results. We're
+saving some processing time by skipping the other processing steps.
+<p>
+The java compiler inlines primitive constants and String constants
+(<code>static final</code> fields). ProGuard would therefore list such fields
+as not being used in the class files that it analyzes, even if they <i>are</i>
+used in the source files. We can add a <a
+href="usage.html#keepclassmembers"><code>-keepclassmembers</code></a> option
+that keeps those fields a priori, in order to avoid having them listed:
+<pre>
+-keepclassmembers class * {
+ static final % *;
+ static final java.lang.String *;
+}
+</pre>
+
+<h3><a name="structure">Printing out the internal structure of class files</a></h3>
+
+These options print out the internal structure of all class files in the input
+jar:
+<pre>
+-injars in.jar
+
+-dontshrink
+-dontoptimize
+-dontobfuscate
+-dontpreverify
+
+-dump
+</pre>
+<p>
+Note how we don't need to specify the Java run-time jar, because we're not
+processing the input jar at all.
+
+<h3><a name="annotated">Using annotations to configure ProGuard</a></h3>
+
+The traditional ProGuard configuration allows to keep a clean separation
+between the code and the configuration for shrinking, optimization, and
+obfuscation. However, it is also possible to define specific annotations,
+and then annotate the code to configure the processing.
+<p>
+You can find a set of such predefined annotations in the directory
+<code>examples/annotations/lib</code> in the ProGuard distribution.
+The annotation classes are defined in <code>annotations.jar</code>. The
+corresponding ProGuard configuration (or meta-configuration, if you prefer)
+is specified in <code>annotations.pro</code>. With these files, you can start
+annotating your code. For instance, a java source file
+<code>Application.java</code> can be annotated as follows:
+<pre>
+@KeepApplication
+public class Application {
+ ....
+}
+</pre>
+<p>
+The ProGuard configuration file for the application can then be simplified by
+leveraging off these annotations:
+<pre>
+-injars in.jar
+-outjars out.jar
+-libraryjars <java.home>/lib/rt.jar
+
+-include lib/annotations.pro
+</pre>
+<p>
+The annotations are effectively replacing the application-dependent
+<code>-keep</code> options. You may still wish to add traditional
+<code>-keep</code> options for processing <a href="#native">native
+methods</a>, <a href="#enumerations">enumerations</a>, <a
+href="#serializable">serializable classes</a>, and <a
+href="#annotations">annotations</a>.
+<p>
+The directory <code>examples/annotations</code> contains more examples that
+illustrate some of the possibilities.
+
+<hr />
+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/gui.html b/common/proguard/proguard4.7/docs/manual/gui.html
new file mode 100644
index 0000000..aa41b1b
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/gui.html
@@ -0,0 +1,479 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard GUI</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Graphical User Interface</h2>
+
+You can find the ProGuard GUI jar in the <code>lib</code> directory of the
+ProGuard distribution. To run the ProGuard graphical user interface, just type:
+<p class="code">
+<code><b>java -jar proguardgui.jar</b> [-nosplash] </code>[<i>configuration_file</i>]
+</p>
+The GUI will pop up in a window. With the <code>-nosplash</code> option, you
+can switch off the short opening animation. If you have specified a ProGuard
+configuration file, it will be loaded. The GUI works like a wizard. You can
+edit the configuration and execute ProGuard through a few tabs:
+<p>
+
+<table cellspacing="5" cellpadding="5">
+<tr><td class="button"><a href="#proguard">ProGuard</a></td>
+ <td>Optionally load an existing configuration file.</td></tr>
+<tr><td class="button"><a href="#inputoutput">Input/Output</a></td>
+ <td>Specify the program jars and library jars.</td></tr>
+<tr><td class="button"><a href="#shrinking">Shrinking</a></td>
+ <td>Specify the shrinking options.</td></tr>
+<tr><td class="button"><a href="#obfuscation">Obfuscation</a></td>
+ <td>Specify the obfuscation options.</td></tr>
+<tr><td class="button"><a href="#optimization">Optimization</a></td>
+ <td>Specify the optimization options.</td></tr>
+<tr><td class="button"><a href="#information">Information</a></td>
+ <td>Specify some options to get information.</td></tr>
+<tr><td class="button"><a href="#process">Process</a></td>
+ <td>View and save the resulting configuration, and run ProGuard.</td></tr>
+</table>
+<p>
+
+In addition, there is a tab to execute ReTrace interactively:
+<p>
+
+<table cellspacing="5" cellpadding="5">
+<tr><td class="button"><a href="#retrace">ReTrace</a></td>
+ <td>Set up and run ReTrace, to de-obfuscate stack traces.</td></tr>
+</table>
+<p>
+
+You can freely toggle between the tabs by means of the buttons on the
+left-hand side of the window, or by means of the <b>Previous</b> and
+<b>Next</b> buttons at the bottom of the tabs. Tool tips briefly explain the
+purpose of the numerous options and text fields, although a basic
+understanding of the shrinking/optimization/obfuscation/preverification
+process is assumed. Please refer to the <a
+href="introduction.html">Introduction</a> of this manual.
+<p>
+
+<h2><a name="proguard">The ProGuard Tab</a></h2>
+
+The <i>ProGuard</i> tab presents a welcome message and one important button at
+the bottom:
+<p>
+
+<table cellspacing="5" cellpadding="5">
+<tr><td class="button">Load configuration...</td>
+ <td>opens a file chooser to load an existing ProGuard configuration
+ file.</td></tr>
+</table>
+<p>
+
+If you don't want to load an existing configuration, you can just continue
+creating a new configuration from scratch.
+<p>
+
+<h2><a name="inputoutput">The Input/Output Tab</a></h2>
+
+The <i>Input/Output</i> tab contains two lists, respectively to specify the
+program jars (or wars, ears, zips, or directories), and the library jars (or
+wars, ears, zips, or directories).
+
+<ul>
+<li>The list of program jars contains input entries and output entries. Input
+ entries contain the class files and resource files to be processed. Output
+ entries specify the destinations to which the processed results will be
+ written. They are preceded by arrows, to distinguish them from input
+ entries. The results of each consecutive list of input entries will be
+ written to the subsequent consecutive list of output entries.</li>
+
+<li>The library jars are not copied to the output jars; they contain class
+ files that are used by class files in the program jars and that are
+ necessary for correct processing. This list typically at least contains the
+ targeted Java runtime jar.</li>
+</ul>
+<p>
+
+Each of these lists can be edited by means of a couple of buttons on the
+right-hand side:
+<p>
+
+<table cellspacing="5" cellpadding="5">
+<tr><td class="button">Add input...</td> <td>opens a file chooser to add an
+ input entry to the list of program jars.</td></tr>
+<tr><td class="button">Add output...</td> <td>opens a file chooser to add an
+ output entry to the list of program jars.</td></tr>
+<tr><td class="button">Add...</td>
+ <td>opens a file chooser to add an entry to the list of library
+ jars.</td></tr>
+<tr><td class="button">Edit...</td>
+ <td>opens a file chooser to edit the selected entry in the list.</td></tr>
+<tr><td class="button">Filter...</td>
+ <td>opens a text entry field to add or edit the filters of the selected
+ entries in the list.</td></tr>
+<tr><td class="button">Remove</td>
+ <td>removes the selected entries from the list.</td></tr>
+<tr><td class="button">Move up</td>
+ <td>moves the selected entries one position up the list.</td></tr>
+<tr><td class="button">Move down</td>
+ <td>moves the selected entries one position down the list.</td></tr>
+<tr><td class="button">Move to libraries</td>
+ <td>moves the selected entries in the list of program jars to the list of
+ library jars.</td></tr>
+<tr><td class="button">Move to program</td>
+ <td>moves the selected entries in the list of library jars to the list of
+ program jars.</td></tr>
+</table>
+<p>
+
+Filters allow to filter files based on their names. One can specify filters
+for class file names and resource file names, for jar file names, for war file
+names, for ear file names, and for zip file names. Multiple entries in the
+program list only make sense when combined with filters; each output file is
+written to the first entry with a matching filter.
+<p>
+
+Input entries that are currently not readable are colored red.
+<p>
+
+The order of the entries in each list may matter, as the first occurrence of
+any duplicate entries gets precedence, just as in conventional class paths.
+<p>
+
+Corresponding configuration options:
+<ul type="none">
+<li>-<a href="usage.html#injars">injars</a></li>
+<li>-<a href="usage.html#outjars">outjars</a></li>
+<li>-<a href="usage.html#libraryjars">libraryjars</a></li>
+<li><a href="usage.html#classpath"><i>class_path</i></a></li>
+<li><a href="usage.html#filters"><i>filters</i></a></li>
+</ul>
+<p>
+
+<h2><a name="shrinking">The Shrinking Tab</a></h2>
+
+The <i>Shrinking</i> tab presents a number of options that affect the
+shrinking step. The basic options are followed by a few lists of classes and
+class members (fields and methods) that must be protected from shrinking (and
+implicitly from obfuscation as well).
+<p>
+
+The fixed lists contain predefined entries that are typically useful for many
+applications. Each of these entries can be toggled by means of a check box.
+The text field following each entry allows to constrain the applicable classes
+by means of a comma-separated list of wildcarded, fully-qualified class
+names. The default is "*", which means that all input classes of the
+corresponding type are considered.
+<p>
+
+For example, checking the <b>Applications</b> entry and filling in
+"myapplications.**" after it would mean: keep all classes that have main
+methods in the "myapplications" package and all of its subpackages.
+<p>
+
+The variable list at the bottom allows to define additional entries
+yourself. The list can be edited by means of a couple of buttons on the
+right-hand side:
+<p>
+
+<table cellspacing="5" cellpadding="5">
+<tr><td class="button">Add...</td>
+ <td>opens a window to add a new entry to the list.</td></tr>
+<tr><td class="button">Edit...</td>
+ <td>opens a window to edit the selected entry in the list.</td></tr>
+<tr><td class="button">Remove</td>
+ <td>removes the selected entries from the list.</td></tr>
+<tr><td class="button">Move up</td>
+ <td>moves the selected entries one position up the list.</td></tr>
+<tr><td class="button">Move down</td>
+ <td>moves the selected entries one position down the list.</td></tr>
+</table>
+<p>
+
+The interface windows allow to specify classes, fields, and methods. They
+contain text fields and check boxes to constrain these items. They have
+<b>Ok</b> and <b>Cancel</b> buttons to apply or to cancel the operation.
+<p>
+
+For example, your application may be creating some classes dynamically using
+<code>Class.forName</code>. You should then specify them here, so they are kept
+by their original names. Press the <b>Add...</b> button to open the class
+window. Fill out the fully-qualified class name in the <b>Code</b> text field,
+and press the <b>Ok</b> button. Repeat this for all required classes. Wildcards
+can be helpful to specify a large number of related classes in one go. If you
+want to specify all implementations of a certain interface, fill out the
+fully qualified interface name in the <b>Extends/implements class</b> instead.
+<p>
+
+For more advanced settings, it is advisable to become familiar with ProGuard's
+configuration options through the <a href="usage.html">Usage section</a> and
+the <a href="examples.html">Examples section</a>. We'll suffice with a brief
+overview of the three dialogs provided by the GUI.
+<p>
+
+The <i>keep class</i> dialog appears when adding or editing new special keep
+entries. It has text fields and selections for specifying and constraining
+classes and class members to keep. The <b>Advanced options</b> / <b>Basic
+options</b> button at the bottom of the dialog allows to toggle showing the
+advanced options.
+
+<ul>
+<li>The <b>Comments</b> text field allows to add optional comments to this
+ entry. The comments will identify the entry in the list and they will
+ appear as comments in the configuration file.</li>
+
+<li>The <b>Keep</b> selection allows to specify whether you want to protect
+ the specified classes and their specified class members, or just the
+ specified class members from the specified classes, or the specified
+ classes and the specified class members, if the class members are present.
+ Note that class members will only be protected if they are explicitly
+ specified, even if only by means of a wildcard.</li>
+
+<li>The <b>Allow</b> selection allows to specify whether you want to allow the
+ the specified classes and their specified class members to be shrunk,
+ optimized and/or obfuscated.</li>
+
+<li>The <b>Access</b> selections allows to specify constraints on the class or
+ classes, based on their access modifiers.</li>
+
+<li>The <b>Annotation</b> text field takes the fully-qualified name of an
+ annotation that is required for matching classes. The annotation name can
+ contain wildcards. This is an advanced option for defining <i>keep</i>
+ annotations.</li>
+
+<li>The <b>Class</b> text field takes the fully-qualified name of the class or
+ classes. The class name can contain wildcards.</li>
+
+<li>The <b>Annotation</b> text field takes the fully-qualified name of an
+ annotation that is required for the class or interface that the above
+ class must extend. The annotation name can contain wildcards. This is an
+ advanced option for defining <i>keep</i> annotations.</li>
+
+<li>The <b>Extends/implements class</b> text field takes the fully-qualified
+ name of the class or interface that the above classes must extend.</li>
+
+<li>The <b>Class members</b> list allows to specify a list of fields and
+ methods to keep. It can be edited by means of a list of buttons on the
+ right-hand side.</li>
+</ul>
+<p>
+
+The <i>keep field</i> dialog appears when adding or editing fields within the
+above dialog. It has text fields and selections for specifying and
+constraining fields to keep. Again, the <b>Advanced options</b> / <b>Basic
+options</b> button at the bottom of the dialog allows to toggle showing the
+advanced options.
+
+<ul>
+<li>The <b>Access</b> selections allows to specify constraints on the field or
+ fields, based on their access modifiers.</li>
+
+<li>The <b>Annotation</b> text field takes the fully-qualified name of an
+ annotation that is required for matching fields. The annotation name can
+ contain wildcards. This is an advanced option for defining <i>keep</i>
+ annotations.</li>
+
+<li>The <b>Return type</b> text field takes the fully-qualified type of the
+ field or fields. The type can contain wildcards.</li>
+
+<li>The <b>Name</b> text field takes the name of the field or fields. The field
+ name can contain wildcards.</li>
+</ul>
+<p>
+
+Similarly, the <i>keep method</i> dialog appears when adding or editing
+methods within the keep class dialog. It has text fields and selections for
+specifying and constraining methods to keep. Again, the <b>Advanced
+options</b> / <b>Basic options</b> button at the bottom of the dialog allows
+to toggle showing the advanced options.
+
+<ul>
+<li>The <b>Access</b> selections allows to specify constraints on the method or
+ methods, based on their access modifiers.</li>
+
+<li>The <b>Annotation</b> text field takes the fully-qualified name of an
+ annotation that is required for matching methods. The annotation name can
+ contain wildcards. This is an advanced option for defining <i>keep</i>
+ annotations.</li>
+
+<li>The <b>Return type</b> text field takes the fully-qualified type of the method or methods. The type can contain wildcards.</li>
+
+<li>The <b>Name</b> text field takes the name of the method or methods. The
+ method name can contain wildcards.</li>
+
+<li>The <b>Arguments</b> text field takes the comma-separated list of
+ fully-qualified method arguments. Each of these arguments can contain
+ wildcards.</li>
+</ul>
+<p>
+
+Corresponding configuration options:
+<ul type="none">
+<li>-<a href="usage.html#dontshrink">dontshrink</a></li>
+<li>-<a href="usage.html#printusage">printusage</a></li>
+<li>-<a href="usage.html#keep">keep</a></li>
+<li>-<a href="usage.html#keepclassmembers">keepclassmembers</a></li>
+<li>-<a href="usage.html#keepclasseswithmembers">keepclasseswithmembers</a></li>
+</ul>
+<p>
+
+<h2><a name="obfuscation">The Obfuscation Tab</a></h2>
+
+The <i>Obfuscation</i> tab presents a number of options that affect the
+obfuscation step. The basic options are followed by a few lists of classes and
+class members (fields and methods) that must be protected from obfuscation
+(but not necessarily from shrinking).
+<p>
+
+The lists are manipulated in the same way as in the <a
+href="#shrinking">Shrinking Tab</a>.
+<p>
+
+Corresponding configuration options:
+<ul type="none">
+<li>-<a href="usage.html#dontobfuscate">dontobfuscate</a></li>
+<li>-<a href="usage.html#printmapping">printmapping</a></li>
+<li>-<a href="usage.html#applymapping">applymapping</a></li>
+<li>-<a href="usage.html#obfuscationdictionary">obfuscationdictionary</a></li>
+<li>-<a href="usage.html#classobfuscationdictionary">classobfuscationdictionary</a></li>
+<li>-<a href="usage.html#packageobfuscationdictionary">packageobfuscationdictionary</a></li>
+<li>-<a href="usage.html#overloadaggressively">overloadaggressively</a></li>
+<li>-<a href="usage.html#useuniqueclassmembernames">useuniqueclassmembernames</a></li>
+<li>-<a href="usage.html#dontusemixedcaseclassnames">dontusemixedcaseclassnames</a></li>
+<li>-<a href="usage.html#keeppackagenames">keeppackagenames</a></li>
+<li>-<a href="usage.html#flattenpackagehierarchy">flattenpackagehierarchy</a></li>
+<li>-<a href="usage.html#repackageclasses">repackageclasses</a></li>
+<li>-<a href="usage.html#keepattributes">keepattributes</a></li>
+<li>-<a href="usage.html#keepparameternames">keepparameternames</a></li>
+<li>-<a href="usage.html#renamesourcefileattribute">renamesourcefileattribute</a></li>
+<li>-<a href="usage.html#adaptclassstrings">adaptclassstrings</a></li>
+<li>-<a href="usage.html#adaptresourcefilenames">adaptresourcefilenames</a></li>
+<li>-<a href="usage.html#adaptresourcefilecontents">adaptresourcefilecontents</a></li>
+<li>-<a href="usage.html#keepnames">keepnames</a></li>
+<li>-<a href="usage.html#keepclassmembernames">keepclassmembernames</a></li>
+<li>-<a href="usage.html#keepclasseswithmembernames">keepclasseswithmembernames</a></li>
+<li><a href="usage.html#classspecification"><i>class_specification</i></a></li>
+</ul>
+<p>
+
+<h2><a name="optimization">The Optimization Tab</a></h2>
+
+The <i>Optimization</i> tab presents a number of options that affect the
+optimization step. The basic options are followed by a few lists of class
+method calls that can be removed if ProGuard can determine that their results
+are not being used.
+<p>
+
+The lists are manipulated in much the same way as in the <a
+href="#shrinking">Shrinking Tab</a>.
+<p>
+
+Corresponding configuration options:
+<ul type="none">
+<li>-<a href="usage.html#dontoptimize">dontoptimize</a></li>
+<li>-<a href="usage.html#optimizations">optimizations</a></li>
+<li>-<a href="usage.html#optimizationpasses">optimizationpasses</a></li>
+<li>-<a href="usage.html#allowaccessmodification">allowaccessmodification</a></li>
+<li>-<a href="usage.html#mergeinterfacesaggressively">mergeinterfacesaggressively</a></li>
+<li>-<a href="usage.html#assumenosideeffects">assumenosideeffects</a></li>
+<li><a href="usage.html#classspecification"><i>class_specification</i></a></li>
+</ul>
+<p>
+
+<h2><a name="information">The Information Tab</a></h2>
+
+The <i>Information</i> tab presents a number of options for preverification
+and targeting, and for the information that ProGuard returns when processing
+your code. The bottom list allows you to query ProGuard about why given
+classes and class members are being kept in the shrinking step.
+<p>
+
+Corresponding configuration options:
+<ul type="none">
+<li>-<a href="usage.html#dontpreverify">dontpreverify</a></li>
+<li>-<a href="usage.html#microedition">microedition</a></li>
+<li>-<a href="usage.html#target">target</a></li>
+<li>-<a href="usage.html#verbose">verbose</a></li>
+<li>-<a href="usage.html#dontnote">dontnote</a></li>
+<li>-<a href="usage.html#dontwarn">dontwarn</a></li>
+<li>-<a href="usage.html#ignorewarnings">ignorewarnings</a></li>
+<li>-<a href="usage.html#skipnonpubliclibraryclasses">skipnonpubliclibraryclasses</a></li>
+<li>-<a href="usage.html#dontskipnonpubliclibraryclasses">dontskipnonpubliclibraryclasses</a></li>
+<li>-<a href="usage.html#dontskipnonpubliclibraryclassmembers">dontskipnonpubliclibraryclassmembers</a></li>
+<li>-<a href="usage.html#keepdirectories">keepdirectories</a></li>
+<li>-<a href="usage.html#forceprocessing">forceprocessing</a></li>
+<li>-<a href="usage.html#printseeds">printseeds</a></li>
+<li>-<a href="usage.html#printconfiguration">printconfiguration</a></li>
+<li>-<a href="usage.html#dump">dump</a></li>
+<li>-<a href="usage.html#whyareyoukeeping">whyareyoukeeping</a></li>
+</ul>
+<p>
+
+<h2><a name="process">The Process Tab</a></h2>
+
+The <i>Process</i> tab has an output console for displaying the configuration
+and the messages while processing. There are three important buttons at the
+bottom:
+<p>
+
+<table cellspacing="5" cellpadding="5">
+<tr><td class="button">View configuration</td>
+ <td>displays the current ProGuard configuration in the console.</td></tr>
+<tr><td class="button">Save configuration...</td>
+ <td>opens a file chooser to save the current ProGuard
+ configuration.</td></tr>
+<tr><td class="button">Process!</td>
+ <td>executes ProGuard with the current configuration.</td></tr>
+</table>
+<p>
+
+<h2><a name="retrace">The ReTrace Tab</a></h2>
+
+The <i>ReTrace</i> tab has a panel with a few settings, an input text area for
+the obfuscated stack trace, and an output console to view the de-obfuscated
+stack trace:
+
+<ul>
+<li>The <b>Verbose</b> check box in the settings panel allows to toggle between
+ normal mode and verbose mode.</li>
+
+<li>The <b>Mapping file</b> text field takes the name of the required mapping
+ file that ProGuard wrote while processing the original code. The file name
+ can be entered manually or by means of the <b>Browse...</b> button that
+ opens a file chooser.</li>
+
+<li>The <b>Obfuscated stack trace</b> text area allows to enter the stack
+ trace, typically by copying and pasting it from elsewhere. Alternatively,
+ it can be loaded from a file by means of the load button below.</li>
+</ul>
+
+There are two buttons at the bottom:
+<p>
+
+<table cellspacing="5" cellpadding="5">
+<tr><td class="button">Load stack trace...</td>
+ <td>opens a file chooser to load an obfuscated stack trace.</td></tr>
+<tr><td class="button">ReTrace!</td>
+ <td>executes ReTrace with the current settings.</td></tr>
+</table>
+
+<hr />
+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/index.html b/common/proguard/proguard4.7/docs/manual/index.html
new file mode 100644
index 0000000..5b62d50
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/index.html
@@ -0,0 +1,51 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Manual</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>ProGuard</h2>
+
+<ol>
+<li><a href="introduction.html">Introduction</a></li>
+<li><a href="usage.html">Usage</a></li>
+<li><a href="limitations.html">Limitations</a></li>
+<li><a href="examples.html">Examples</a></li>
+<li><a href="troubleshooting.html">Troubleshooting</a></li>
+<li><a href="refcard.html">Reference Card</a></li>
+<li><a href="gui.html">Graphical User Interface</a></li>
+<li><a href="ant.html">Ant Task</a></li>
+<li><a href="wtk.html">JME Wireless Toolkit Integration</a></li>
+</ol>
+
+<h2>ReTrace</h2>
+
+<ol>
+<li><a href="retrace/introduction.html">Introduction</a></li>
+<li><a href="retrace/usage.html">Usage</a></li>
+<li><a href="retrace/examples.html">Examples</a></li>
+</ol>
+
+<hr />
+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/introduction.html b/common/proguard/proguard4.7/docs/manual/introduction.html
new file mode 100644
index 0000000..bc71f4a
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/introduction.html
@@ -0,0 +1,173 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Introduction</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Introduction</h2>
+
+<b>ProGuard</b> is a Java class file shrinker, optimizer, obfuscator, and
+preverifier. The shrinking step detects and removes unused classes, fields,
+methods, and attributes. The optimization step analyzes and optimizes the
+bytecode of the methods. The obfuscation step renames the remaining classes,
+fields, and methods using short meaningless names. These first steps make the
+code base smaller, more efficient, and harder to reverse-engineer. The final
+preverification step adds preverification information to the classes, which is
+required for Java Micro Edition or which improves the start-up time for Java
+6.
+<p>
+Each of these steps is optional. For instance, ProGuard can also be used to
+just list dead code in an application, or to preverify class files for
+efficient use in Java 6.
+<p>
+
+<table class="diagram" align="center">
+
+<tr>
+<td rowspan="4" class="lightblock">Input jars</td>
+<td colspan="8" class="transparentblock"></td>
+</tr>
+
+<tr>
+<td rowspan="2" class="transparentblock"></td>
+<td rowspan="3" class="lightblock">Shrunk code</td>
+<td colspan="6" class="transparentblock"></td>
+</tr>
+
+<tr>
+<td class="transparentblock"></td>
+<td rowspan="2" class="lightblock">Optim. code</td>
+<td colspan="3" class="transparentblock"></td>
+<td rowspan="2" class="lightblock">Output jars</td>
+</tr>
+
+<tr>
+<td class="transparentblock">- shrink →</td>
+<td class="transparentblock">- optimize →</td>
+<td class="transparentblock">- obfuscate →</td>
+<td class="lightblock">Obfusc. code</td>
+<td class="transparentblock">- preverify →</td>
+</tr>
+
+<tr>
+<td class="darkblock">Library jars</td>
+<td colspan="7" class="transparentblock">------------------------------- (unchanged) -------------------------------→</td>
+<td class="darkblock">Library jars</td>
+</tr>
+
+</table>
+<p>
+
+ProGuard typically reads the <b>input jars</b> (or wars, ears, zips, or
+directories). It then shrinks, optimizes, obfuscates, and preverifies them.
+Optionally, multiple optimization passes can be performed, each typically
+followed by another shrinking step. ProGuard writes the processed results to
+one or more <b>output jars</b> (or wars, ears, zips, or directories). The
+input may contain resource files, whose names and contents can optionally be
+updated to reflect the obfuscated class names.
+<p>
+ProGuard requires the <b>library jars</b> (or wars, ears, zips, or
+directories) of the input jars to be specified. These are essentially the
+libraries that you would need for compiling the code. ProGuard uses them to
+reconstruct the class dependencies that are necessary for proper processing.
+The library jars themselves always remain unchanged. You should still put them
+in the class path of your final application.
+
+<h3>Entry points</h3>
+
+In order to determine which code has to be preserved and which code can be
+discarded or obfuscated, you have to specify one or more <i>entry points</i> to
+your code. These entry points are typically classes with main methods, applets,
+midlets, etc.
+<ul>
+<li>In the <b>shrinking step</b>, ProGuard starts from these seeds and
+ recursively determines which classes and class members are used. All other
+ classes and class members are discarded.</li>
+
+<li>In the <b>optimization step</b>, ProGuard further optimizes the code.
+ Among other optimizations, classes and methods that are not entry points
+ can be made private, static, or final, unused parameters can be removed,
+ and some methods may be inlined.</li>
+
+<li>In the <b>obfuscation step</b>, ProGuard renames classes and class members
+ that are not entry points. In this entire process, keeping the entry
+ points ensures that they can still be accessed by their original names.</li>
+
+<li>The <b>preverification step</b> is the only step that doesn't have to know
+ the entry points.</li>
+</ul>
+<p>
+The <a href="usage.html">Usage section</a> of this manual describes the
+necessary <a href="usage.html#keepoptions"><code>-keep</code> options</a> and
+the <a href="examples.html">Examples section</a> provides plenty of examples.
+
+<h3>Reflection</h3>
+
+Reflection and introspection present particular problems for any automatic
+processing of code. In ProGuard, classes or class members in your code that
+are created or invoked dynamically (that is, by name) have to be specified as
+entry points too. For example, <code>Class.forName()</code> constructs may
+refer to any class at run-time. It is generally impossible to foresee which
+classes have to be preserved (with their original names), since the class
+names might be read from a configuration file, for instance. You therefore
+have to specify them in your ProGuard configuration, with the same
+simple <code>-keep</code> options.
+<p>
+However, ProGuard will already detect and handle the following cases for you:
+
+<ul>
+<li><code>Class.forName("SomeClass")</code></li>
+<li><code>SomeClass.class</code></li>
+<li><code>SomeClass.class.getField("someField")</code></li>
+<li><code>SomeClass.class.getDeclaredField("someField")</code></li>
+<li><code>SomeClass.class.getMethod("someMethod", new Class[] {})</code></li>
+<li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class })</code></li>
+<li><code>SomeClass.class.getMethod("someMethod", new Class[] { A.class, B.class })</code></li>
+<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] {})</code></li>
+<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class })</code></li>
+<li><code>SomeClass.class.getDeclaredMethod("someMethod", new Class[] { A.class, B.class })</code></li>
+<li><code>AtomicIntegerFieldUpdater.newUpdater(SomeClass.class, "someField")</code></li>
+<li><code>AtomicLongFieldUpdater.newUpdater(SomeClass.class, "someField")</code></li>
+<li><code>AtomicReferenceFieldUpdater.newUpdater(SomeClass.class, SomeType.class, "someField")</code></li>
+</ul>
+
+The names of the classes and class members may of course be different, but the
+constructs should be literally the same for ProGuard to recognize them. The
+referenced classes and class members are preserved in the shrinking phase, and
+the string arguments are properly updated in the obfuscation phase.
+<p>
+Furthermore, ProGuard will offer some suggestions if keeping some classes or
+class members appears necessary. For example, ProGuard will note constructs
+like "<code>(SomeClass)Class.forName(variable).newInstance()</code>". These
+might be an indication that the class or interface <code>SomeClass</code>
+and/or its implementations may need to be preserved. You can then adapt your
+configuration accordingly.
+<p>
+For proper results, you should at least be somewhat familiar with the code
+that you are processing. Obfuscating code that performs a lot of reflection
+may require trial and error, especially without the necessary information
+about the internals of the code.
+
+<hr />
+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/limitations.html b/common/proguard/proguard4.7/docs/manual/limitations.html
new file mode 100644
index 0000000..3b28a30
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/limitations.html
@@ -0,0 +1,69 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Limitations</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Limitations</h2>
+
+When using ProGuard, you should be aware of a few technical issues, all of
+which are easily avoided or resolved:
+<p>
+<ul class="spacious">
+
+<li>For best results, ProGuard's optimization algorithms assume that the
+ processed code never <b>intentionally throws NullPointerExceptions</b> or
+ ArrayIndexOutOfBoundsExceptions, or even OutOfMemoryErrors or
+ StackOverflowErrors, in order to achieve something useful. For instance,
+ it may remove a method call <code>myObject.myMethod()</code> if that call
+ wouldn't have any effect. It ignores the possibility that
+ <code>myObject</code> might be null, causing a NullPointerException. In
+ some way this is a good thing: optimized code may throw fewer exceptions.
+ Should this entire assumption be false, you'll have to switch off
+ optimization using the <code>-dontoptimize</code> option.</li>
+
+<li>ProGuard's optimization algorithms currently also assume that the
+ processed code never creates <b>busy-waiting loops</b> without at least
+ testing on a volatile field. Again, it may remove such loops. Should this
+ assumption be false, you'll have to switch off optimization using
+ the <code>-dontoptimize</code> option.</li>
+
+<li>If an input jar and a library jar contain classes in the <b>same
+ package</b>, the obfuscated output jar may contain class names that
+ overlap with class names in the library jar. This is most likely if the
+ library jar has been obfuscated before, as it will then probably contain
+ classes named 'a', 'b', etc. Packages should therefore never be split
+ across input jars and library jars.</li>
+
+<li>When obfuscating, ProGuard writes out class files named
+ "<code>a.class</code>", "<code>b.class</code>", etc. If a package contains
+ a large number of classes, ProGuard may also write out
+ <b>"<code>aux.class</code>"</b>. Inconveniently, Windows refuses to create
+ files with this reserved name (among a few other names). It's generally
+ better to write the output to a jar, in order to avoid such problems.</li>
+
+</ul>
+
+<hr />
+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/optimizations.html b/common/proguard/proguard4.7/docs/manual/optimizations.html
new file mode 100644
index 0000000..4711f83
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/optimizations.html
@@ -0,0 +1,172 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Optimizations</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Optimizations</h2>
+
+The optimization step of ProGuard can be switched off with the
+<a href="usage.html#dontoptimize"><code>-dontoptimize</code></a> option. For
+more fine-grained control over individual optimizations, experts can use the
+<a href="usage.html#optimizations"><code>-optimizations</code></a> option,
+with a filter based on the optimization names listed below. The filter works
+like any <a href="usage.html#filters">filter</a> in ProGuard.
+<p>
+
+The following wildcards are supported:
+
+<table cellspacing="10">
+<tr><td valign="top"><code><b>?</b></code></td>
+ <td>matches any single character in an optimization name.</td></tr>
+<tr><td valign="top"><code><b>*</b></code></td>
+ <td>matches any part of an optimization name.</td></tr>
+</table>
+
+An optimization that is preceded by an exclamation mark '<b>!</b>' is
+<i>excluded</i> from further attempts to match with <i>subsequent</i>
+optimization names in the filter. Make sure to specify filters correctly,
+since they are not checked for potential typos.
+<p>
+
+For example,
+"<code>code/simplification/variable,code/simplification/arithmetic</code>"
+only performs the two specified peephole optimizations.
+<p>
+
+For example, "<code>!method/propagation/*</code>" performs all optimizations,
+except the ones that propagate values between methods.
+<p>
+
+For example,
+"<code>!code/simplification/advanced,code/simplification/*</code>" only
+performs all peephole optimizations.
+<p>
+Some optimizations necessarily imply other optimizations. These are then
+indicated. Note that the list is likely to change over time, as optimizations
+are added and reorganized.
+<p>
+
+<dl>
+<dt><code><b>class/marking/final</b></code></dt>
+<dd>Marks classes as final, whenever possible.</dd>
+
+<dt><code><b>class/merging/vertical</b></code></dt>
+<dd>Merges classes vertically in the class hierarchy, whenever possible.</dd>
+
+<dt><code><b>class/merging/horizontal</b></code></dt>
+<dd>Merges classes horizontally in the class hierarchy, whenever possible.</dd>
+
+<dt><div>(⇒ <code>code/removal/advanced</code>)</div>
+ <code><b>field/removal/writeonly</b></code></dt>
+<dd>Removes write-only fields.</dd>
+
+<dt><code><b>field/marking/private</b></code></dt>
+<dd>Marks fields as private, whenever possible.</dd>
+
+<dt><div>(⇒ <code>code/simplification/advanced</code>)</div>
+ <code><b>field/propagation/value</b></code></dt>
+<dd>Propagates the values of fields across methods.</dd>
+
+<dt><code><b>method/marking/private</b></code></dt>
+<dd>Marks methods as private, whenever possible (<i>devirtualization</i>).</dd>
+
+<dt><div>(⇒ <code>code/removal/advanced</code>)</div>
+ <code><b>method/marking/static</b></code></dt>
+<dd>Marks methods as static, whenever possible (<i>devirtualization</i>).</dd>
+
+<dt><code><b>method/marking/final</b></code></dt>
+<dd>Marks methods as final, whenever possible.</dd>
+
+<dt><div>(⇒ <code>code/removal/advanced</code>)</div>
+ <code><b>method/removal/parameter</b></code></dt>
+<dd>Removes unused method parameters.</dd>
+
+<dt><div>(⇒ <code>code/simplification/advanced</code>)</div>
+ <code><b>method/propagation/parameter</b></code></dt>
+<dd>Propagates the values of method parameters from method invocations to
+ the invoked methods.</dd>
+
+<dt><div>(⇒ <code>code/simplification/advanced</code>)</div>
+ <code><b>method/propagation/returnvalue</b></code></dt>
+<dd>Propagates the values of method return values from methods to their
+ invocations.</dd>
+
+<dt><code><b>method/inlining/short</b></code></dt>
+<dd>Inlines short methods.</dd>
+
+<dt><code><b>method/inlining/unique</b></code></dt>
+<dd>Inlines methods that are only called once.</dd>
+
+<dt><code><b>method/inlining/tailrecursion</b></code></dt>
+<dd>Simplifies tail recursion calls, whenever possible.</dd>
+
+<dt><code><b>code/merging</b></code></dt>
+<dd>Merges identical blocks of code by modifying branch targets.</dd>
+
+<dt><code><b>code/simplification/variable</b></code></dt>
+<dd>Performs peephole optimizations for variable loading and storing.</dd>
+
+<dt><code><b>code/simplification/arithmetic</b></code></dt>
+<dd>Performs peephole optimizations for arithmetic instructions.</dd>
+
+<dt><code><b>code/simplification/cast</b></code></dt>
+<dd>Performs peephole optimizations for casting operations.</dd>
+
+<dt><code><b>code/simplification/field</b></code></dt>
+<dd>Performs peephole optimizations for field loading and storing.</dd>
+
+<dt><div>(⇒ <code>code/removal/simple</code>)</div>
+ <code><b>code/simplification/branch</b></code></dt>
+<dd>Performs peephole optimizations for branch instructions.</dd>
+
+<dt><code><b>code/simplification/string</b></code></dt>
+<dd>Performs peephole optimizations for constant strings.</dd>
+
+<dt><div>(<i>best used with</i> <code>code/removal/advanced</code>)</div>
+ <code><b>code/simplification/advanced</b></code></dt>
+<dd>Simplifies code based on control flow analysis and data flow
+ analysis.</dd>
+
+<dt><div>(⇒ <code>code/removal/exception</code>)</div>
+ <code><b>code/removal/advanced</b></code></dt>
+<dd>Removes dead code based on control flow analysis and data flow
+ analysis.</dd>
+
+<dt><div>(⇒ <code>code/removal/exception</code>)</div>
+ <code><b>code/removal/simple</b></code></dt>
+<dd>Removes dead code based on a simple control flow analysis.</dd>
+
+<dt><code><b>code/removal/variable</b></code></dt>
+<dd>Removes unused variables from the local variable frame.</dd>
+
+<dt><code><b>code/removal/exception</b></code></dt>
+<dd>Removes exceptions with empty try blocks.</dd>
+
+<dt><code><b>code/allocation/variable</b></code></dt>
+<dd>Optimizes variable allocation on the local variable frame.</dd>
+</dl>
+
+<hr />
+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/refcard.html b/common/proguard/proguard4.7/docs/manual/refcard.html
new file mode 100644
index 0000000..02a8e50
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/refcard.html
@@ -0,0 +1,486 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Reference Card</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h1>ProGuard Reference Card</h1>
+
+<h2>Usage</h2>
+
+<code><b>java -jar proguard.jar </b></code><i>options</i> ...
+<p>
+ Typically:
+<p>
+<code><b>java -jar proguard.jar @myconfig.pro</b></code>
+<p>
+
+<h2>Options</h2>
+
+<table cellspacing="10">
+
+<tr>
+<td valign="top"><a href="usage.html#at"><code><b>@</b></code></a><a href="usage.html#filename"><i>filename</i></a></td>
+
+<td>Short for '<code>-include</code> <i>filename</i>'.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#include"><code><b>-include</b></code></a>
+ <a href="usage.html#filename"><i>filename</i></a></td>
+
+<td>Read configuration options from the given file.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#basedirectory"><code><b>-basedirectory</b></code></a>
+ <a href="usage.html#filename"><i>directoryname</i></a></td>
+
+<td>Specifies the base directory for subsequent relative file names.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#injars"><code><b>-injars</b></code></a>
+ <a href="usage.html#classpath"><i>class_path</i></a></td>
+<td>Specifies the program jars (or wars, ears, zips, or directories).</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#outjars"><code><b>-outjars</b></code></a>
+ <a href="usage.html#classpath"><i>class_path</i></a></td>
+<td>Specifies the name of the output jars (or wars, ears, zips, or
+ directories).</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#libraryjars"><code><b>-libraryjars</b></code></a>
+ <a href="usage.html#classpath"><i>class_path</i></a></td>
+<td>Specifies the library jars (or wars, ears, zips, or directories).</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#skipnonpubliclibraryclasses"><code><b>-skipnonpubliclibraryclasses</b></code></a></td>
+<td>Ignore non-public library classes.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#dontskipnonpubliclibraryclasses"><code><b>-dontskipnonpubliclibraryclasses</b></code></a></td>
+<td>Don't ignore non-public library classes (the default).</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#dontskipnonpubliclibraryclassmembers"><code><b>-dontskipnonpubliclibraryclassmembers</b></code></a></td>
+<td>Don't ignore package visible library class members.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#keepdirectories"><code><b>-keepdirectories</b></code></a>
+ [<a href="usage.html#filters"><i>directory_filter</i></a>]</td>
+<td>Keep the specified directories in the output jars (or wars, ears, zips, or
+ directories).</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#target"><code><b>-target</b></code></a>
+ <i>version</i></td>
+<td>Set the given version number in the processed classes.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#forceprocessing"><code><b>-forceprocessing</b></code></a></td>
+<td>Process the input, even if the output seems up to date.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#keep"><code><b>-keep</b></code></a>
+ [<a href="usage.html#keepoptionmodifiers">,<i>modifier</i></a>,...]
+ <a href="usage.html#classspecification"><i>class_specification</i></a></td>
+<td>Preserve the specified classes <i>and</i> class members.</td>
+
+</tr>
+<tr>
+<td valign="top"><a href="usage.html#keepclassmembers"><code><b>-keepclassmembers</b></code></a>
+ [<a href="usage.html#keepoptionmodifiers">,<i>modifier</i></a>,...]
+ <a href="usage.html#classspecification"><i>class_specification</i></a></td>
+<td>Preserve the specified class members, if their classes are preserved as
+ well.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#keepclasseswithmembers"><code><b>-keepclasseswithmembers</b></code></a>
+ [<a href="usage.html#keepoptionmodifiers">,<i>modifier</i></a>,...]
+ <a href="usage.html#classspecification"><i>class_specification</i></a></td>
+<td>Preserve the specified classes <i>and</i> class members, if all of the
+ specified class members are present.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#keepnames"><code><b>-keepnames</b></code></a>
+ <a href="usage.html#classspecification"><i>class_specification</i></a></td>
+<td>Preserve the names of the specified classes <i>and</i> class members (if
+ they aren't removed in the shrinking step).</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#keepclassmembernames"><code><b>-keepclassmembernames</b></code></a>
+ <a href="usage.html#classspecification"><i>class_specification</i></a></td>
+<td>Preserve the names of the specified class members (if they aren't removed
+ in the shrinking step).</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#keepclasseswithmembernames"><code><b>-keepclasseswithmembernames</b></code></a>
+ <a href="usage.html#classspecification"><i>class_specification</i></a></td>
+<td>Preserve the names of the specified classes <i>and</i> class members, if
+ all of the specified class members are present (after the shrinking
+ step).</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#printseeds"><code><b>-printseeds</b></code></a>
+ [<a href="usage.html#filename"><i>filename</i></a>]</td>
+<td>List classes and class members matched by the various <code>-keep</code>
+ options, to the standard output or to the given file.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#dontshrink"><code><b>-dontshrink</b></code></a></td>
+<td>Don't shrink the input class files.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#printusage"><code><b>-printusage</b></code></a>
+ [<a href="usage.html#filename"><i>filename</i></a>]</td>
+<td>List dead code of the input class files, to the standard output or to the
+ given file.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#whyareyoukeeping"><code><b>-whyareyoukeeping</b></code></a>
+ <a href="usage.html#classspecification"><i>class_specification</i></a></td>
+<td>Print details on why the given classes and class members are being kept in
+ the shrinking step.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#dontoptimize"><code><b>-dontoptimize</b></code></a></td>
+<td>Don't optimize the input class files.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#optimizations"><code><b>-optimizations</b></code></a>
+ <a href="optimizations.html"><i>optimization_filter</i></a></td>
+<td>The optimizations to be enabled and disabled.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#optimizationpasses"><code><b>-optimizationpasses</b></code></a>
+ <i>n</i></td>
+<td>The number of optimization passes to be performed.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#assumenosideeffects"><code><b>-assumenosideeffects</b></code></a>
+ <a href="usage.html#classspecification"><i>class_specification</i></a></td>
+<td>Assume that the specified methods don't have any side effects, while
+ optimizing.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#allowaccessmodification"><code><b>-allowaccessmodification</b></code></a></td>
+<td>Allow the access modifiers of classes and class members to be modified,
+ while optimizing.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#mergeinterfacesaggressively"><code><b>-mergeinterfacesaggressively</b></code></a></td>
+<td>Allow any interfaces to be merged, while optimizing.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#dontobfuscate"><code><b>-dontobfuscate</b></code></a></td>
+<td>Don't obfuscate the input class files.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#printmapping"><code><b>-printmapping</b></code></a>
+ [<a href="usage.html#filename"><i>filename</i></a>]</td>
+<td>Print the mapping from old names to new names for classes and class members
+ that have been renamed, to the standard output or to the given file.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#applymapping"><code><b>-applymapping</b></code></a>
+ <a href="usage.html#filename"><i>filename</i></a></td>
+<td>Reuse the given mapping, for incremental obfuscation.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#obfuscationdictionary"><code><b>-obfuscationdictionary</b></code></a>
+ <a href="usage.html#filename"><i>filename</i></a></td>
+<td>Use the words in the given text file as obfuscated field names and method names.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#classobfuscationdictionary"><code><b>-classobfuscationdictionary</b></code></a>
+ <a href="usage.html#filename"><i>filename</i></a></td>
+<td>Use the words in the given text file as obfuscated class names.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#packageobfuscationdictionary"><code><b>-packageobfuscationdictionary</b></code></a>
+ <a href="usage.html#filename"><i>filename</i></a></td>
+<td>Use the words in the given text file as obfuscated package names.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#overloadaggressively"><code><b>-overloadaggressively</b></code></a></td>
+<td>Apply aggressive overloading while obfuscating.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#useuniqueclassmembernames"><code><b>-useuniqueclassmembernames</b></code></a></td>
+<td>Ensure uniform obfuscated class member names for subsequent incremental
+ obfuscation.</td> </tr>
+
+<tr>
+<td valign="top"><a href="usage.html#dontusemixedcaseclassnames"><code><b>-dontusemixedcaseclassnames</b></code></a></td>
+<td>Don't generate mixed-case class names while obfuscating.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#keeppackagenames"><code><b>-keeppackagenames</b></code></a>
+ [<i><a href="usage.html#filters">package_filter</a></i>]</td>
+<td>Keep the specified package names from being obfuscated.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#flattenpackagehierarchy"><code><b>-flattenpackagehierarchy</b></code></a>
+ [<i>package_name</i>]</td>
+<td>Repackage all packages that are renamed into the single given parent
+ package.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#repackageclasses"><code><b>-repackageclasses</b></code></a>
+ [<i>package_name</i>]</td>
+<td>Repackage all class files that are renamed into the single given
+ package.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#keepattributes"><code><b>-keepattributes</b></code></a>
+ [<i><a href="usage.html#filters">attribute_filter</a></i>]</td>
+<td>Preserve the given optional attributes; typically
+ <code>Exceptions</code>, <code>InnerClasses</code>,
+ <code>Signature</code>, <code>Deprecated</code>,
+ <code>SourceFile</code>, <code>SourceDir</code>,
+ <code>LineNumberTable</code>,
+ <code>LocalVariableTable</code>, <code>LocalVariableTypeTable</code>,
+ <code>Synthetic</code>, <code>EnclosingMethod</code>, and
+ <code>*Annotation*</code>.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#keepparameternames"><code><b>-keepparameternames</b></code></a></td>
+<td>Keep the parameter names and types of methods that are kept.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#renamesourcefileattribute"><code><b>-renamesourcefileattribute</b></code></a>
+ [<i>string</i>]</td>
+<td>Put the given constant string in the <code>SourceFile</code>
+ attributes.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#adaptclassstrings"><code><b>-adaptclassstrings</b></code></a>
+ [<a href="usage.html#filters"><i>class_filter</i></a>]</td>
+<td>Adapt string constants in the specified classes, based on the obfuscated
+ names of any corresponding classes.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#adaptresourcefilenames"><code><b>-adaptresourcefilenames</b></code></a>
+ [<a href="usage.html#filefilters"><i>file_filter</i></a>]</td>
+<td>Rename the specified resource files, based on the obfuscated names of the
+ corresponding class files.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#adaptresourcefilecontents"><code><b>-adaptresourcefilecontents</b></code></a>
+ [<a href="usage.html#filefilters"><i>file_filter</i></a>]</td>
+<td>Update the contents of the specified resource files, based on the
+ obfuscated names of the processed classes.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#dontpreverify"><code><b>-dontpreverify</b></code></a></td>
+<td>Don't preverify the processed class files.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#microedition"><code><b>-microedition</b></code></a></td>
+<td>Target the processed class files at Java Micro Edition.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#verbose"><code><b>-verbose</b></code></a></td>
+<td>Write out some more information during processing.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#dontnote"><code><b>-dontnote</b></code></a>
+ [<a href="usage.html#filters"><i>class_filter</i></a>]</td>
+<td>Don't print notes about potential mistakes or omissions in the
+ configuration.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#dontwarn"><code><b>-dontwarn</b></code></a>
+ [<a href="usage.html#filters"><i>class_filter</i></a>]</td>
+<td>Don't warn about unresolved references at all.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#ignorewarnings"><code><b>-ignorewarnings</b></code></a></td>
+<td>Print warnings about unresolved references, but continue processing
+ anyhow.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#printconfiguration"><code><b>-printconfiguration</b></code></a>
+ [<a href="usage.html#filename"><i>filename</i></a>]</td>
+<td>Write out the internal structure of the processed class files, to the
+ standard output or to the given file.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#dump"><code><b>-dump</b></code></a>
+ [<a href="usage.html#filename"><i>filename</i></a>]</td>
+<td>Write out the entire configuration in traditional ProGuard style, to the
+ standard output or to the given file.</td>
+</tr>
+
+</table>
+<p>
+Notes:
+<ul>
+
+<li><i>class_path</i> is a list of jars, wars, ears, zips, and directories,
+ with optional filters, separated by path separators.</li>
+<li><i>filename</i> can contain Java system properties delimited by
+ '<b><</b>' and '<b>></b>'.</li>
+<li>If <i>filename</i> contains special characters, the entire name
+ should be quoted with single or double quotes.</li>
+</ul>
+<p>
+
+<h2>Overview of <code>Keep</code> Options</h2>
+
+<table cellpadding="5">
+
+<tr>
+<th>Keep</th>
+<td>From being removed or renamed</td>
+<td>From being renamed</td>
+</tr>
+
+<tr>
+<td>Classes and class members</td>
+<td bgcolor="#E0E0E0"><a href="usage.html#keep"><code>-keep</code></a></td>
+<td bgcolor="#E0E0E0"><a href="usage.html#keepnames"><code>-keepnames</code></a></td>
+</tr>
+
+<tr>
+<td>Class members only</td>
+<td bgcolor="#E0E0E0"><a href="usage.html#keepclassmembers"><code>-keepclassmembers</code></a></td>
+<td bgcolor="#E0E0E0"><a href="usage.html#keepclassmembernames"><code>-keepclassmembernames</code></a></td>
+</tr>
+
+<tr>
+<td>Classes and class members, if class members present</td>
+<td bgcolor="#E0E0E0"><a href="usage.html#keepclasseswithmembers"><code>-keepclasseswithmembers</code></a></td>
+<td bgcolor="#E0E0E0"><a href="usage.html#keepclasseswithmembernames"><code>-keepclasseswithmembernames</code></a></td>
+</tr>
+
+</table>
+<p>
+
+<h2>Keep Option Modifiers</h2>
+
+<table cellspacing="10">
+
+<tr>
+<td valign="top"><a href="usage.html#allowshrinking"><code><b>allowshrinking</b></code></a></td>
+<td>The entry points specified in the keep tag may be shrunk.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#allowoptimization"><code><b>allowoptimization</b></code></a></td>
+<td>The entry points specified in the keep tag may be optimized.</td>
+</tr>
+
+<tr>
+<td valign="top"><a href="usage.html#allowobfuscation"><code><b>allowobfuscation</b></code></a></td>
+<td>The entry points specified in the keep tag may be obfuscated.</td>
+</tr>
+
+</table>
+<p>
+
+<h2>Class Specifications</h2>
+
+<pre>
+[<b>@</b><i>annotationtype</i>] [[<b>!</b>]<b>public</b>|<b>final</b>|<b>abstract</b> ...] [<b>!</b>]<b>interface</b>|<b>class</b> <i>classname</i>
+ [<b>extends</b>|<b>implements</b> [<b>@</b><i>annotationtype</i>] <i>classname</i>]
+[<b>{</b>
+ [<b>@</b><i>annotationtype</i>] [[<b>!</b>]<b>public</b>|<b>private</b>|<b>protected</b>|<b>static</b>|<b>volatile</b>|<b>transient</b> ...] <b><fields></b> |
+ (<i>fieldtype fieldname</i>)<b>;</b>
+ [<b>@</b><i>annotationtype</i>] [[<b>!</b>]<b>public</b>|<b>private</b>|<b>protected</b>|<b>static</b>|<b>synchronized</b>|<b>native</b>|<b>abstract</b>|<b>strictfp</b> ...] <b><methods></b> |
+ <b><init>(</b><i>argumenttype,...</i><b>)</b> |
+ <i>classname</i><b>(</b><i>argumenttype,...</i><b>)</b> |
+ (<i>returntype methodname</i><b>(</b><i>argumenttype,...</i><b>)</b>)<b>;</b>
+ [<b>@</b><i>annotationtype</i>] [[<b>!</b>]<b>public</b>|<b>private</b>|<b>protected</b>|<b>static</b> ... ] <b>*;</b>
+ ...
+<b>}</b>]
+</pre>
+<p>
+Notes:
+<ul>
+<li>Class names must always be fully qualified, i.e. including their package
+ names.</li>
+<li>Types in <i>classname</i>, <i>annotationtype</i>, <i>returntype</i>, and
+ <i>argumenttype</i> can contain wildcards: '<code><b>?</b></code>' for a
+ single character, '<code><b>*</b></code>' for any number of characters
+ (but not the package separator), '<code><b>**</b></code>' for any number
+ of (any) characters, '<code><b>%</b></code>' for any primitive type,
+ '<code><b>***</b></code>' for any type, and '<code><b>...</b></code>' for any number of arguments.</li>
+<li><i>fieldname</i> and <i>methodname</i> can contain wildcards as well:
+ '<code><b>?</b></code>' for a single character and '<code><b>*</b></code>'
+ for any number of characters.</li>
+</ul>
+
+<hr />
+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/retrace/examples.html b/common/proguard/proguard4.7/docs/manual/retrace/examples.html
new file mode 100644
index 0000000..c372491
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/retrace/examples.html
@@ -0,0 +1,345 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="../style.css">
+<title>ReTrace Examples</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Examples</h2>
+
+Some typical example uses:
+<ol>
+<li><a href="#with">Restoring a stack trace with line numbers</a></li>
+<li><a href="#withverbose">Restoring a stack trace with line numbers
+ (verbose)</a></li>
+<li><a href="#without">Restoring a stack trace without line numbers</a></li>
+</ol>
+
+<h3><a name="with">Restoring a stack trace with line numbers</a></h3>
+
+Assume for instance ProGuard itself has been obfuscated using the following
+extra options:
+<pre>
+-printmapping proguard.map
+
+-renamesourcefileattribute ProGuard
+-keepattributes SourceFile,LineNumberTable
+</pre>
+<p>
+
+Now assume the processed application throws an exception, and we have saved the
+stack trace in <code>proguard.trace</code>, shown below. Of course, in real
+life ProGuard rarely throws exceptions, so this is a purposely generated
+exception. :)
+
+<pre>
+Exception in thread "main" java.lang.Error: Random exception
+ at pro.bY.a(ProGuard:576)
+ at pro.bO.a(ProGuard:431)
+ at pro.bj.a(ProGuard:145)
+ at pro.bY.a(ProGuard:522)
+ at pro.bj.a(ProGuard:129)
+ at pro.bN.a(ProGuard:125)
+ at pro.bY.a(ProGuard:251)
+ at pro.bY.a(ProGuard:229)
+ at pro.l.a(ProGuard:55)
+ at pro.bo.b(ProGuard:405)
+ at pro.ci.a(ProGuard:51)
+ at pro.bo.a(ProGuard:356)
+ at pro.be.a(ProGuard:109)
+ at pro.bo.a(ProGuard:356)
+ at pro.be.a(ProGuard:186)
+ at pro.bg.a(ProGuard:369)
+ at pro.bY.a(ProGuard:286)
+ at pro.bh.a(ProGuard:55)
+ at pro.bg.b(ProGuard:408)
+ at pro.bY.a(ProGuard:190)
+ at pro.bg.a(ProGuard:369)
+ at pro.M.a(ProGuard:110)
+ at pro.bY.a(ProGuard:449)
+ at pro.M.a(ProGuard:99)
+ at pro.bo.a(ProGuard:372)
+ at pro.bY.a(ProGuard:649)
+ at pro.bY.a(ProGuard:112)
+ at pro.P.a(ProGuard:66)
+ at pro.p.a(ProGuard:83)
+ at pro.bU.a(ProGuard:69)
+ at pro.bo.a(ProGuard:356)
+ at pro.J.a(ProGuard:149)
+ at pro.I.a(ProGuard:49)
+ at pro.J.a(ProGuard:105)
+ at pro.cf.c(ProGuard:370)
+ at pro.cf.a(ProGuard:317)
+ at pro.bc.a(ProGuard:55)
+ at proguard.ProGuard.a(ProGuard:363)
+ at proguard.ProGuard.c(ProGuard:187)
+ at proguard.ProGuard.b(ProGuard:385)
+ at proguard.ProGuard.main(ProGuard:429)
+</pre>
+<p>
+
+We can then use the following command to recover the stack trace:
+<pre>
+<b>java -jar retrace.jar proguard.map proguard.trace</b>
+</pre>
+<p>
+
+The output will look as follows:
+<pre>
+Exception in thread "main" java.lang.Error: Random exception
+ at proguard.shrink.UsageMarker.visitInstruction(ProGuard:576)
+ at proguard.classfile.instruction.GenericInstruction.accept(ProGuard:431)
+ at proguard.classfile.CodeAttrInfo.instructionsAccept(ProGuard:145)
+ at proguard.shrink.UsageMarker.visitCodeAttrInfo(ProGuard:522)
+ at proguard.classfile.CodeAttrInfo.accept(ProGuard:129)
+ at proguard.classfile.ProgramMemberInfo.attributesAccept(ProGuard:125)
+ at proguard.shrink.UsageMarker.visitMemberInfo(ProGuard:251)
+ at proguard.shrink.UsageMarker.visitProgramMethodInfo(ProGuard:229)
+ at proguard.classfile.ProgramMethodInfo.accept(ProGuard:55)
+ at proguard.classfile.ProgramClassFile.methodAccept(ProGuard:405)
+ at proguard.classfile.visitor.NamedMethodVisitor.visitProgramClassFile(ProGuard:51)
+ at proguard.classfile.ProgramClassFile.accept(ProGuard:356)
+ at proguard.classfile.visitor.ClassFileUpDownTraveler.visitProgramClassFile(ProGuard:109)
+ at proguard.classfile.ProgramClassFile.accept(ProGuard:356)
+ at proguard.classfile.visitor.ClassFileUpDownTraveler.visitLibraryClassFile(ProGuard:186)
+ at proguard.classfile.LibraryClassFile.accept(ProGuard:369)
+ at proguard.shrink.UsageMarker.visitLibraryMethodInfo(ProGuard:286)
+ at proguard.classfile.LibraryMethodInfo.accept(ProGuard:55)
+ at proguard.classfile.LibraryClassFile.methodsAccept(ProGuard:408)
+ at proguard.shrink.UsageMarker.visitLibraryClassFile(ProGuard:190)
+ at proguard.classfile.LibraryClassFile.accept(ProGuard:369)
+ at proguard.classfile.ClassCpInfo.referencedClassAccept(ProGuard:110)
+ at proguard.shrink.UsageMarker.visitClassCpInfo(ProGuard:449)
+ at proguard.classfile.ClassCpInfo.accept(ProGuard:99)
+ at proguard.classfile.ProgramClassFile.constantPoolEntryAccept(ProGuard:372)
+ at proguard.shrink.UsageMarker.markCpEntry(ProGuard:649)
+ at proguard.shrink.UsageMarker.visitProgramClassFile(ProGuard:112)
+ at proguard.classfile.visitor.VariableClassFileVisitor.visitProgramClassFile(ProGuard:66)
+ at proguard.classfile.visitor.MultiClassFileVisitor.visitProgramClassFile(ProGuard:83)
+ at proguard.classfile.visitor.FilteredClassFileVisitor.visitProgramClassFile(ProGuard:69)
+ at proguard.classfile.ProgramClassFile.accept(ProGuard:356)
+ at proguard.classfile.ClassPool.classFileAccept(ProGuard:149)
+ at proguard.classfile.visitor.NamedClassFileVisitor.visitClassPool(ProGuard:49)
+ at proguard.classfile.ClassPool.accept(ProGuard:105)
+ at proguard.KeepCommand.executeShrinkingPhase(ProGuard:370)
+ at proguard.KeepCommand.execute(ProGuard:317)
+ at proguard.CompoundCommand.execute(ProGuard:55)
+ at proguard.ProGuard.executeCommands(ProGuard:363)
+ at proguard.ProGuard.shrink(ProGuard:187)
+ at proguard.ProGuard.execute(ProGuard:385)
+ at proguard.ProGuard.main(ProGuard:429)
+</pre>
+
+<h3><a name="withverbose">Restoring a stack trace with line numbers (verbose)</a></h3>
+
+In the previous example, we could also use the verbose flag:
+<pre>
+<b>java -jar retrace.jar -verbose proguard.map proguard.trace</b>
+</pre>
+<p>
+
+The output will then look as follows:
+<pre>
+Exception in thread "main" java.lang.Error: Random exception
+ at proguard.shrink.UsageMarker.void visitInstruction(proguard.classfile.ClassFile,proguard.classfile.instruction.Instruction)(ProGuard:576)
+ at proguard.classfile.instruction.GenericInstruction.void accept(proguard.classfile.ClassFile,proguard.classfile.instruction.InstructionVisitor)(ProGuard:431)
+ at proguard.classfile.CodeAttrInfo.void instructionsAccept(proguard.classfile.ClassFile,proguard.classfile.instruction.InstructionVisitor)(ProGuard:145)
+ at proguard.shrink.UsageMarker.void visitCodeAttrInfo(proguard.classfile.ClassFile,proguard.classfile.CodeAttrInfo)(ProGuard:522)
+ at proguard.classfile.CodeAttrInfo.void accept(proguard.classfile.ClassFile,proguard.classfile.visitor.AttrInfoVisitor)(ProGuard:129)
+ at proguard.classfile.ProgramMemberInfo.void attributesAccept(proguard.classfile.ProgramClassFile,proguard.classfile.visitor.AttrInfoVisitor)(ProGuard:125)
+ at proguard.shrink.UsageMarker.void visitMemberInfo(proguard.classfile.ProgramClassFile,proguard.classfile.ProgramMemberInfo)(ProGuard:251)
+ at proguard.shrink.UsageMarker.void visitProgramMethodInfo(proguard.classfile.ProgramClassFile,proguard.classfile.ProgramMethodInfo)(ProGuard:229)
+ at proguard.classfile.ProgramMethodInfo.void accept(proguard.classfile.ProgramClassFile,proguard.classfile.visitor.MemberInfoVisitor)(ProGuard:55)
+ at proguard.classfile.ProgramClassFile.void methodAccept(proguard.classfile.visitor.MemberInfoVisitor,java.lang.String,java.lang.String)(ProGuard:405)
+ at proguard.classfile.visitor.NamedMethodVisitor.void visitProgramClassFile(proguard.classfile.ProgramClassFile)(ProGuard:51)
+ at proguard.classfile.ProgramClassFile.void accept(proguard.classfile.visitor.ClassFileVisitor)(ProGuard:356)
+ at proguard.classfile.visitor.ClassFileUpDownTraveler.void visitProgramClassFile(proguard.classfile.ProgramClassFile)(ProGuard:109)
+ at proguard.classfile.ProgramClassFile.void accept(proguard.classfile.visitor.ClassFileVisitor)(ProGuard:356)
+ at proguard.classfile.visitor.ClassFileUpDownTraveler.void visitLibraryClassFile(proguard.classfile.LibraryClassFile)(ProGuard:186)
+ at proguard.classfile.LibraryClassFile.void accept(proguard.classfile.visitor.ClassFileVisitor)(ProGuard:369)
+ at proguard.shrink.UsageMarker.void visitLibraryMethodInfo(proguard.classfile.LibraryClassFile,proguard.classfile.LibraryMethodInfo)(ProGuard:286)
+ at proguard.classfile.LibraryMethodInfo.void accept(proguard.classfile.LibraryClassFile,proguard.classfile.visitor.MemberInfoVisitor)(ProGuard:55)
+ at proguard.classfile.LibraryClassFile.void methodsAccept(proguard.classfile.visitor.MemberInfoVisitor)(ProGuard:408)
+ at proguard.shrink.UsageMarker.void visitLibraryClassFile(proguard.classfile.LibraryClassFile)(ProGuard:190)
+ at proguard.classfile.LibraryClassFile.void accept(proguard.classfile.visitor.ClassFileVisitor)(ProGuard:369)
+ at proguard.classfile.ClassCpInfo.void referencedClassAccept(proguard.classfile.visitor.ClassFileVisitor)(ProGuard:110)
+ at proguard.shrink.UsageMarker.void visitClassCpInfo(proguard.classfile.ClassFile,proguard.classfile.ClassCpInfo)(ProGuard:449)
+ at proguard.classfile.ClassCpInfo.void accept(proguard.classfile.ClassFile,proguard.classfile.visitor.CpInfoVisitor)(ProGuard:99)
+ at proguard.classfile.ProgramClassFile.void constantPoolEntryAccept(proguard.classfile.visitor.CpInfoVisitor,int)(ProGuard:372)
+ at proguard.shrink.UsageMarker.void markCpEntry(proguard.classfile.ClassFile,int)(ProGuard:649)
+ at proguard.shrink.UsageMarker.void visitProgramClassFile(proguard.classfile.ProgramClassFile)(ProGuard:112)
+ at proguard.classfile.visitor.VariableClassFileVisitor.void visitProgramClassFile(proguard.classfile.ProgramClassFile)(ProGuard:66)
+ at proguard.classfile.visitor.MultiClassFileVisitor.void visitProgramClassFile(proguard.classfile.ProgramClassFile)(ProGuard:83)
+ at proguard.classfile.visitor.FilteredClassFileVisitor.void visitProgramClassFile(proguard.classfile.ProgramClassFile)(ProGuard:69)
+ at proguard.classfile.ProgramClassFile.void accept(proguard.classfile.visitor.ClassFileVisitor)(ProGuard:356)
+ at proguard.classfile.ClassPool.void classFileAccept(proguard.classfile.visitor.ClassFileVisitor,java.lang.String)(ProGuard:149)
+ at proguard.classfile.visitor.NamedClassFileVisitor.void visitClassPool(proguard.classfile.ClassPool)(ProGuard:49)
+ at proguard.classfile.ClassPool.void accept(proguard.classfile.visitor.ClassPoolVisitor)(ProGuard:105)
+ at proguard.KeepCommand.void executeShrinkingPhase(proguard.classfile.ClassPool,proguard.classfile.ClassPool)(ProGuard:370)
+ at proguard.KeepCommand.void execute(int,proguard.classfile.ClassPool,proguard.classfile.ClassPool)(ProGuard:317)
+ at proguard.CompoundCommand.void execute(int,proguard.classfile.ClassPool,proguard.classfile.ClassPool)(ProGuard:55)
+ at proguard.ProGuard.void executeCommands(int)(ProGuard:363)
+ at proguard.ProGuard.void shrink()(ProGuard:187)
+ at proguard.ProGuard.void execute(java.lang.String[])(ProGuard:385)
+ at proguard.ProGuard.void main(java.lang.String[])(ProGuard:429)
+</pre>
+
+
+<h3><a name="without">Restoring a stack trace without line numbers</a></h3>
+
+Assume for instance ProGuard itself has been obfuscated using the following
+extra options, this time without preserving the line number tables:
+<pre>
+-printmapping proguard.map
+</pre>
+<p>
+
+A stack trace <code>proguard.trace</code> will then lack line number
+information:
+<pre>
+Exception in thread "main" java.lang.Error: Random exception
+ at pro.bY.a(Unknown Source)
+ at pro.bO.a(Unknown Source)
+ at pro.bj.a(Unknown Source)
+ at pro.bY.a(Unknown Source)
+ at pro.bj.a(Unknown Source)
+ at pro.bN.a(Unknown Source)
+ at pro.bY.a(Unknown Source)
+ at pro.bY.a(Unknown Source)
+ at pro.l.a(Unknown Source)
+ at pro.bo.b(Unknown Source)
+ at pro.ci.a(Unknown Source)
+ at pro.bo.a(Unknown Source)
+ at pro.be.a(Unknown Source)
+ at pro.bo.a(Unknown Source)
+ at pro.be.a(Unknown Source)
+ at pro.bg.a(Unknown Source)
+ at pro.bY.a(Unknown Source)
+ at pro.bh.a(Unknown Source)
+ at pro.bg.b(Unknown Source)
+ at pro.bY.a(Unknown Source)
+ at pro.bg.a(Unknown Source)
+ at pro.M.a(Unknown Source)
+ at pro.bY.a(Unknown Source)
+ at pro.M.a(Unknown Source)
+ at pro.bo.a(Unknown Source)
+ at pro.bY.a(Unknown Source)
+ at pro.bY.a(Unknown Source)
+ at pro.P.a(Unknown Source)
+ at pro.p.a(Unknown Source)
+ at pro.bU.a(Unknown Source)
+ at pro.bo.a(Unknown Source)
+ at pro.J.a(Unknown Source)
+ at pro.I.a(Unknown Source)
+ at pro.J.a(Unknown Source)
+ at pro.cf.c(Unknown Source)
+ at pro.cf.a(Unknown Source)
+ at pro.bc.a(Unknown Source)
+ at proguard.ProGuard.a(Unknown Source)
+ at proguard.ProGuard.c(Unknown Source)
+ at proguard.ProGuard.b(Unknown Source)
+ at proguard.ProGuard.main(Unknown Source)
+</pre>
+<p>
+
+We can still use the same command to recover the stack trace:
+<pre>
+<b>java -jar retrace.jar proguard.map proguard.trace</b>
+</pre>
+<p>
+
+The output will now give a list of alternative original method names for each
+ambiguous obfuscated method name:
+<pre>
+Exception in thread "main" java.lang.Error: Random exception
+ at proguard.shrink.UsageMarker.visitProgramClassFile(Unknown Source)
+ visitLibraryClassFile
+ visitProgramFieldInfo
+ visitProgramMethodInfo
+ visitMemberInfo
+ visitLibraryFieldInfo
+ visitLibraryMethodInfo
+ visitIntegerCpInfo
+ visitLongCpInfo
+ visitFloatCpInfo
+ visitDoubleCpInfo
+ visitStringCpInfo
+ visitUtf8CpInfo
+ visitFieldrefCpInfo
+ visitInterfaceMethodrefCpInfo
+ visitMethodrefCpInfo
+ visitClassCpInfo
+ visitNameAndTypeCpInfo
+ visitUnknownAttrInfo
+ visitInnerClassesAttrInfo
+ visitConstantValueAttrInfo
+ visitExceptionsAttrInfo
+ visitCodeAttrInfo
+ visitLineNumberTableAttrInfo
+ visitLocalVariableTableAttrInfo
+ visitSourceFileAttrInfo
+ visitDeprecatedAttrInfo
+ visitSyntheticAttrInfo
+ visitInstruction
+ visitCpInstruction
+ visitExceptionInfo
+ visitInnerClassesInfo
+ visitLocalVariableInfo
+ markCpEntry
+ markAsUnused
+ isUsed
+ at proguard.classfile.instruction.GenericInstruction.create(Unknown Source)
+ isWide
+ getLength
+ accept
+ at proguard.classfile.CodeAttrInfo.getAttribute(Unknown Source)
+ getAttrInfoLength
+ readInfo
+ accept
+ instructionsAccept
+ exceptionsAccept
+ [...]
+ at proguard.KeepCommand.executeShrinkingPhase(Unknown Source)
+ access$100
+ at proguard.KeepCommand.keepField(Unknown Source)
+ ensureMultiClassFileVisitorForMembers
+ execute
+ executeObfuscationPhase
+ access$002
+ access$000
+ access$102
+ access$108
+ at proguard.CompoundCommand.addCommand(Unknown Source)
+ execute
+ at proguard.ProGuard.readCommands(Unknown Source)
+ obfuscate
+ executeCommands
+ at proguard.ProGuard.shrink(Unknown Source)
+ at proguard.ProGuard.check(Unknown Source)
+ execute
+ at proguard.ProGuard.main(Unknown Source)
+</pre>
+
+<hr />
+<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
+
diff --git a/common/proguard/proguard4.7/docs/manual/retrace/index.html b/common/proguard/proguard4.7/docs/manual/retrace/index.html
new file mode 100644
index 0000000..7c45c28
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/retrace/index.html
@@ -0,0 +1,37 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="../style.css">
+<title>ReTrace Manual</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>ReTrace</h2>
+
+<ol>
+<li><a href="introduction.html">Introduction</a></li>
+<li><a href="usage.html">Usage</a></li>
+<li><a href="examples.html">Examples</a></li>
+</ol>
+
+<hr />
+<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/retrace/introduction.html b/common/proguard/proguard4.7/docs/manual/retrace/introduction.html
new file mode 100644
index 0000000..f6b6a07
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/retrace/introduction.html
@@ -0,0 +1,79 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="../style.css">
+<title>ReTrace Introduction</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Introduction</h2>
+
+<b>ReTrace</b> is a companion tool for <b>ProGuard</b> that 'de-obfuscates'
+stack traces.
+<p>
+When an obfuscated program throws an exception, the resulting stack trace
+typically isn't very informative. Class names and method names have been
+replaced by short meaningless strings. Source file names and line numbers are
+missing altogether. While this may be intentional, it can also be inconvenient
+when debugging problems.
+<p>
+
+<table class="diagram" align="center">
+
+<tr>
+<td rowspan="1" class="lightblock">Original code</td>
+<td class="transparentblock">- <b>ProGuard</b> →</td>
+<td rowspan="1" class="lightblock">Obfuscated code</td>
+</tr>
+
+<tr>
+<td rowspan="3" class="transparentblock"></td>
+<td class="transparentblock">↓</td>
+<td class="transparentblock">↓</td>
+</tr>
+
+<tr>
+<td class="whiteblock">Mapping file</td>
+<td class="transparentblock">↓</td>
+</tr>
+
+<tr>
+<td class="transparentblock">↓</td>
+<td class="transparentblock">↓</td>
+</tr>
+
+<tr>
+<td class="whiteblock">Readable stack trace</td>
+<td class="transparentblock">← <b>ReTrace</b> -</td>
+<td class="whiteblock">Obfuscated stack trace</td>
+</tr>
+
+</table>
+<p>
+ReTrace can read an obfuscated stack trace and restore it to what it would
+look like without obfuscation. The restoration is based on the mapping file
+that ProGuard can write out during obfuscation. The mapping file links the
+original class names and class member names to their obfuscated names.
+
+<hr />
+<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
+
diff --git a/common/proguard/proguard4.7/docs/manual/retrace/usage.html b/common/proguard/proguard4.7/docs/manual/retrace/usage.html
new file mode 100644
index 0000000..a227635
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/retrace/usage.html
@@ -0,0 +1,127 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="../style.css">
+<title>ReTrace Usage</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Usage</h2>
+
+You can find the ReTrace jar in the <code>lib</code> directory of the
+ProGuard distribution. To run ReTrace, just type:
+<p>
+<p class="code">
+<code><b>java -jar retrace.jar </b></code>[<i>options...</i>]
+ <i>mapping_file</i> [<i>stacktrace_file</i>]
+</p>
+These are the arguments:
+
+<dl>
+<dt><i>mapping_file</i></dt>
+
+<dd>Specifies the name of the mapping file, produced by ProGuard with the
+ option
+ "<a href="../usage.html#printmapping"><code>-printmapping</code></a> <i>mapping_file</i>",
+ while obfuscating the application that produced the stack trace.</dd>
+
+<dt><i>stacktrace_file</i></dt>
+
+<dd>Optionally specifies the name of the file containing the stack trace. If
+ no file is specified, a stack trace is read from the standard input. Blank
+ lines and unrecognized lines are ignored, as far as possible.</dd>
+</dl>
+
+The following options are supported:
+<dl>
+<dt><code><b>-verbose</b></code></dt>
+
+<dd>Specifies to print out more informative stack traces that include not only
+ method names, but also method return types and arguments.</dd>
+
+<dt><code><b>-regex</b></code> <i>regular_expression</i></dt>
+
+<dd>Specifies the regular expression that is used to parse the lines in the
+ stack trace. Specifying a different regular expression allows to
+ de-obfuscate more general types of input than just stack traces. The
+ default is suitable for stack traces produced by most JVMs:
+ <pre>
+ (?:\s*%c:.*)|(?:\s*at\s+%c.%m\s*\(.*?(?::%l)?\)\s*)
+ </pre>
+ The regular expression is a Java regular expression (cfr. the documentation
+ of <code>java.util.regex.Pattern</code>), with a few additional wildcards:
+ <table cellspacing="10">
+ <tr><td valign="top"><code><b>%c</b></code></td>
+ <td>matches a class name (e.g.
+ "<code>myapplication.MyClass</code>").</td></tr>
+ <tr><td valign="top"><code><b>%C</b></code></td>
+ <td>matches a class name with slashes (e.g.
+ "<code>myapplication/MyClass</code>").</td></tr>
+ <tr><td valign="top"><code><b>%t</b></code></td>
+ <td>matches a field type or method return type (e.g.
+ "<code>myapplication.MyClass[]</code>").</td></tr>
+ <tr><td valign="top"><code><b>%f</b></code></td>
+ <td>matches a field name (e.g.
+ "<code>myField</code>").</td></tr>
+ <tr><td valign="top"><code><b>%m</b></code></td>
+ <td>matches a method name (e.g.
+ "<code>myMethod</code>").</td></tr>
+ <tr><td valign="top"><code><b>%a</b></code></td>
+ <td>matches a list of method arguments (e.g.
+ "<code>boolean,int</code>").</td></tr>
+ <tr><td valign="top"><code><b>%l</b></code></td>
+ <td>matches a line number inside a method (e.g.
+ "<code>123</code>").</td></tr>
+ </table>
+ Elements that match these wildcards are de-obfuscated, when possible. Note
+ that regular expressions must not contain any capturing groups. Use
+ non-capturing groups instead: <code>(?:</code>...<code>)</code>
+ </dd>
+</dl>
+
+The restored stack trace is printed to the standard output. The completeness
+of the restored stack trace depends on the presence of line number tables in
+the obfuscated class files:
+
+<ul>
+<li>If all line numbers have been preserved while obfuscating the application,
+ ReTrace will be able to restore the stack trace completely.</li>
+
+<li>If the line numbers have been removed, mapping obfuscated method names
+ back to their original names has become ambiguous. Retrace will list all
+ possible original method names for each line in the stack trace. The user
+ can then try to deduce the actual stack trace manually, based on the logic
+ of the program.</li>
+
+</ul>
+<p>
+
+Preserving line number tables is explained in detail in this <a
+href="../examples.html#stacktrace">example</a> in the ProGuard User Manual.
+<p>
+
+Unobfuscated elements and obfuscated elements for which no mapping is available
+will be left unchanged.
+
+<hr />
+<noscript><div><a target="_top" href="../../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
+
diff --git a/common/proguard/proguard4.7/docs/manual/sections.html b/common/proguard/proguard4.7/docs/manual/sections.html
new file mode 100644
index 0000000..fb72573
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/sections.html
@@ -0,0 +1,60 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-script-type" content="text/javascript">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="../style.css">
+<title>Sections</title>
+</head>
+<body class="navigation">
+
+<ul class="navigation">
+<li><a href="../sections.html"><< Main menu</a></li>
+
+<li class="title">ProGuard Manual</li>
+<li><a target="main" href="introduction.html">Introduction</a></li>
+<li><a target="main" href="usage.html">Usage</a></li>
+<li><a target="main" href="limitations.html">Limitations</a></li>
+<li><a target="main" href="examples.html">Examples</a></li>
+<li><a target="main" href="troubleshooting.html">Troubleshooting</a></li>
+<li><a target="main" href="refcard.html">Ref Card</a></li>
+<li><a target="main" href="gui.html">GUI</a></li>
+<li><a target="main" href="ant.html">Ant Task</a></li>
+<li><a target="main" href="wtk.html">JME WTK</a></li>
+
+<li class="title">ReTrace Manual</li>
+<li><a target="main" href="retrace/introduction.html">Introduction</a></li>
+<li><a target="main" href="retrace/usage.html">Usage</a></li>
+<li><a target="main" href="retrace/examples.html">Examples</a></li>
+</ul>
+
+<p>
+<center>
+<small>With support of</small>
+<p>
+
+<a href="http://sourceforge.net/projects/proguard/" target="other">
+
+<script type="text/javascript" language="JavaScript">
+<!--
+document.write("<img src=\"");
+document.write(document.location.hostname == "proguard.sourceforge.net" ?
+ "http://sourceforge.net/sflogo.php?group_id=54750&type=1" :
+ "../sflogo.png");
+document.write("\" width=\"88\" height=\"31\" alt=\"SourceForge\" />");
+//-->
+</script>
+<noscript>
+<img src="../sflogo.png" width="88" height="31" alt="SourceForge" />
+</noscript>
+
+</a>
+
+<p>
+<a href="http://www.saikoa.com/" target="_top">
+<img src="../saikoalogo.png" width="88" height="19" alt="Saikoa" /></a>
+</center>
+
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/style.css b/common/proguard/proguard4.7/docs/manual/style.css
new file mode 100644
index 0000000..9a876aa
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/style.css
@@ -0,0 +1,105 @@
+@charset "iso-8859-1";
+
+/* Global settings. */
+
+body {
+ background: #FFFFFF;
+}
+
+h1 {
+ text-align: center;
+}
+
+h2 {
+ background: #EEEEFF;
+ padding: 10px;
+}
+
+dt {
+ padding: 6px;
+}
+
+dt div
+{
+ color: grey;
+ float: right;
+}
+
+dd {
+ padding: 6px;
+}
+
+pre {
+ padding: 10px;
+ background: #E0E0E0;
+}
+
+ul.spacious li
+{
+ padding: 8px;
+}
+
+a
+{
+ text-decoration: none;
+}
+
+a.button {
+ color: #000000;
+ text-decoration: none;
+ background: #E0E0E0;
+ border: 1px outset #FFFFFF;
+ float: right;
+}
+
+/* Settings for variable width code. */
+
+p.code {
+ padding: 10px;
+ background: #E0E0E0;
+}
+
+
+/* Settings for diagrams. */
+
+table.diagram {
+ padding: 8px;
+ border: none;
+ border-spacing: 2px;
+}
+
+td.transparentblock {
+ text-align: center;
+ padding: 10px 0px;
+}
+
+td.whiteblock {
+ width: 100px;
+ text-align: center;
+ border: 1px solid #C0C0C0;
+ background: #E0E0E0;
+ padding: 10px 0px;
+}
+
+td.lightblock {
+ width: 100px;
+ text-align: center;
+ border: 1px solid #8888FF;
+ background: #BBBBFF;
+ padding: 20px 0px;
+}
+
+td.darkblock {
+ width: 100px;
+ text-align: center;
+ background: #8888FF;
+ padding: 20px 0px;
+}
+
+/* Settings for buttons. */
+
+td.button {
+ background: #E0E0E0;
+ border: 1px outset #FFFFFF;
+ font-weight: bold;
+}
diff --git a/common/proguard/proguard4.7/docs/manual/troubleshooting.html b/common/proguard/proguard4.7/docs/manual/troubleshooting.html
new file mode 100644
index 0000000..6b0c1a9
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/troubleshooting.html
@@ -0,0 +1,729 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Troubleshooting</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Troubleshooting</h2>
+
+While preparing a configuration for processing your code, you may bump into a
+few problems. The following sections discuss some common issues and solutions:
+
+<h3><a href="#processing">Problems while processing</a></h3>
+<ul>
+<li><a href="#dynamicalclass">Note: can't find dynamically referenced class</a></li>
+<li><a href="#dynamicalclasscast">Note: ... calls '(...)Class.forName(variable).newInstance()'</a></li>
+<li><a href="#dynamicalclassmember">Note: ... accesses a field/method '...' dynamically</a></li>
+<li><a href="#descriptorclass">Note: the configuration keeps the entry point '...', but not the descriptor class '...'</a></li>
+<li><a href="#classmembers">Note: the configuration doesn't specify which class members to keep for class '...'</a></li>
+<li><a href="#duplicateclass">Note: duplicate definition of program/library class</a></li>
+<li><a href="#duplicatezipentry">Warning: can't write resource ... Duplicate zip entry</a></li>
+<li><a href="#unresolvedclass">Warning: can't find superclass or interface</a></li>
+<li><a href="#unresolvedclass">Warning: can't find referenced class</a></li>
+<li><a href="#superclass">Error: Can't find any super classes of ... (not even immediate super class ...)</a></li>
+<li><a href="#superclass">Error: Can't find common super class of ... and ...</a></li>
+<li><a href="#unresolvedclassmember">Warning: can't find referenced field/method</a></li>
+<li><a href="#unresolvedenclosingmethod">Warning: can't find enclosing class/method</a></li>
+<li><a href="#dependency">Warning: library class ... depends on program class ...</a></li>
+<li><a href="#unexpectedclass">Warning: class file ... unexpectedly contains class ...</a></li>
+<li><a href="#mappingconflict1">Warning: ... is not being kept as ..., but remapped to ...</a></li>
+<li><a href="#mappingconflict2">Warning: field/method ... can't be mapped to ...</a></li>
+<li><a href="#unsupportedclassversion">Error: Unsupported class version number</a></li>
+<li><a href="#keep">Error: You have to specify '-keep' options</a></li>
+<li><a href="#filename">Error: Expecting class path separator ';' before 'Files\Java\...' (in Windows)</a></li>
+<li><a href="#macosx">Error: Can't read [.../lib/rt.jar] (No such file or directory) (in MacOS X)</a></li>
+<li><a href="#startinggui">Internal problem starting the ProGuard GUI (Cannot write XdndAware property) (in Linux)</a></li>
+<li><a href="#outofmemoryerror">OutOfMemoryError</a></li>
+<li><a href="#stackoverflowerror">StackOverflowError</a></li>
+<li><a href="#unexpectederror">Unexpected error</a></li>
+<li><a href="#otherwise">Otherwise...</a></li>
+</ul>
+
+<h3><a href="#afterprocessing">Unexpected observations after processing</a></h3>
+<ul>
+<li><a href="#disappearingclasses">Disappearing classes</a></li>
+<li><a href="#notkept">Classes or class members not being kept</a></li>
+<li><a href="#notobfuscated">Variable names not being obfuscated</a></li>
+</ul>
+
+<h3><a href="#dalvik">Problems while converting to Android Dalvik bytecode</a></h3>
+
+<ul>
+<li><a href="#simexception">SimException: local variable type mismatch</a></li>
+<li><a href="#conversionerror">Conversion to Dalvik format failed with error 1</a></li>
+</ul>
+
+<h3><a href="#preverifying">Problems while preverifying for Java Micro Edition</a></h3>
+
+<ul>
+<li><a href="#invalidclassexception1">InvalidClassException, class loading error, or verification error</a></li>
+</ul>
+
+<h3><a href="#runtime">Problems at run-time</a></h3>
+<ul>
+<li><a href="#stacktraces">Stack traces without class names or line numbers</a></li>
+<li><a href="#noclassdeffounderror">NoClassDefFoundError</a></li>
+<li><a href="#classnotfoundexception">ClassNotFoundException</a></li>
+<li><a href="#nosuchmethodexception">NoSuchMethodException</a></li>
+<li><a href="#missingresourceexception">MissingResourceException or NullPointerException</a></li>
+<li><a href="#disappearingannotations">Disappearing annotations</a></li>
+<li><a href="#invalidjarfile">Invalid or corrupt jarfile</a></li>
+<li><a href="#invalidjarindexexception">InvalidJarIndexException: Invalid index</a></li>
+<li><a href="#invalidclassexception2">InvalidClassException, class loading error, or verification error (in Java Micro Edition)</a></li>
+<li><a href="#nosuchfieldormethod">Error: No Such Field or Method, Error verifying method (in a Java Micro Edition emulator)</a></li>
+<li><a href="#failingmidlets">Failing midlets (on a Java Micro Edition device)</a></li>
+<li><a href="#disappearingloops">Disappearing loops</a></li>
+<li><a href="#securityexception">SecurityException: SHA1 digest error</a></li>
+<li><a href="#classcastexception">ClassCastException: class not an enum</a></li><li><a href="#classcastexception">IllegalArgumentException: class not an enum type</a></li>
+<li><a href="#arraystoreexception">ArrayStoreException: sun.reflect.annotation.EnumConstantNotPresentExceptionProxy</a></li>
+<li><a href="#compilererror">CompilerError: duplicate addition</a></li>
+<li><a href="#classformaterror1">ClassFormatError: repetitive field name/signature</a></li>
+<li><a href="#classformaterror2">ClassFormatError: Invalid index in LocalVariableTable in class file</a></li>
+<li><a href="#nosuchmethoderror">NoSuchMethodError or AbstractMethodError</a></li>
+<li><a href="#verifyerror">VerifyError</a></li>
+</ul>
+
+
+<h2><a name="processing">Problems while processing</a></h2>
+
+ProGuard may print out some notes and non-fatal warnings:
+
+<dl>
+<dt><a name="dynamicalclass"><b>Note: can't find dynamically referenced class</b></a></dt>
+
+<dd>ProGuard can't find a class or interface that your code is accessing by
+ means of introspection. You should check if you want to add the jar that
+ contains this class.</dd>
+
+<dt><a name="dynamicalclasscast"><b>Note: ... calls '(...)Class.forName(variable).newInstance()'</b></a></dt>
+
+<dd>ProGuard lists all class casts of dynamically created class instances,
+ like "<code>(MyClass)Class.forName(variable).newInstance()</code>".
+ Depending on your application, you may need to keep the mentioned classes
+ with an option like "<code>-keep class MyClass</code>", or their
+ implementations with an option like "<code>-keep class * implements
+ MyClass</code>". You can switch off these notes by specifying the
+ <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
+
+<dt><a name="dynamicalclassmember"><b>Note: ... accesses a field/method '...' dynamically</b></a></dt>
+
+<dd>ProGuard lists a number of constructs like
+ "<code>.getField("myField")</code>". Depending on your application, you
+ may need to figure out where the mentioned class members are defined and
+ keep them with an option like "<code>-keep class MyClass { MyFieldType
+ myField; }</code>". Otherwise, ProGuard might remove or obfuscate the
+ class members, since it can't know which ones they are exactly. It does
+ list possible candidates, for your information. You can switch off these
+ notes by specifying the <a
+ href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
+
+<dt><a name="descriptorclass"><b>Note: the configuration keeps the entry point '...', but not the descriptor class '...'</b></a></dt>
+
+<dd>Your configuration contains a <code>-keep</code> option to preserve the
+ given method (or field), but no <code>-keep</code> option for the given
+ class that is an argument type or return type in the method's descriptor.
+ You may then want to keep the class too. Otherwise, ProGuard will
+ obfuscate its name, thus changing the method's signature. The method might
+ then become unfindable as an entry point, e.g. if it is part of a public
+ API. You can switch off these notes by specifying the <a
+ href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
+
+<dt><a name="classmembers"><b>Note: the configuration doesn't specify which class members to keep for class '...'</b></a></dt>
+
+<dd>Your configuration contains
+ a <code>-keepclassmembers/-keepclasseswithmembers</code> option to
+ preserve fields or methods in the given class, but it doesn't specify
+ which fields or methods. This way, the option simply won't have any
+ effect. You probably want to specify one or more fields or methods, as
+ usual between curly braces. You can specify all fields or methods with a
+ wildcard "<code>*;</code>". You can switch off these notes by specifying
+ the <a href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
+
+<dt><a name="duplicateclass"><b>Note: duplicate definition of program/library class</b></a></dt>
+
+<dd>Your program jars or library jars contain multiple definitions of the
+ listed classes. ProGuard continues processing as usual, only considering
+ the first definitions. The warning may be an indication of some problem
+ though, so it's advisable to remove the duplicates. A convenient way to do
+ so is by specifying filters on the input jars or library jars. You can
+ switch off these notes by specifying the <a
+ href="usage.html#dontnote"><code>-dontnote</code></a> option.</dd>
+
+<dt><a name="duplicatezipentry"><b>Warning: can't write resource ... Duplicate zip entry</b></a></dt>
+
+<dd>Your input jars contain multiple resource files with the same name.
+ ProGuard continues copying the resource files as usual, skipping any files
+ with previously used names. Once more, the warning may be an indication of
+ some problem though, so it's advisable to remove the duplicates. A
+ convenient way to do so is by specifying filters on the input jars. There
+ is no option to switch off these warnings.</dd>
+
+</dl>
+<p>
+
+ProGuard may terminate when it encounters parsing errors or I/O errors, or
+some more serious warnings:
+
+<dl>
+<dt><a name="unresolvedclass"><b>Warning: can't find superclass or interface</b><br/><b>Warning: can't find referenced class</b></a></dt>
+
+<dd>If there are unresolved references to classes or interfaces, you most
+ likely forgot to specify an essential library. For proper processing, all
+ libraries that are referenced by your code must be specified, including
+ the Java run-time library. For specifying libraries, use
+ the <a href="usage.html#libraryjars"><code>-libraryjars</code></a> option.
+ <p>
+ For example, if ProGuard complains that it can't find a
+ <code>javax.crypto</code> class, you probably still have to specify
+ <code>jce.jar</code>, next to the more common <code>rt.jar</code>.
+ <p>
+ If you're missing a library and you're absolutely sure it isn't used
+ anyway, you can try your luck with the <a
+ href="usage.html#ignorewarnings"><code>-ignorewarnings</code></a> option,
+ or even the <a href="usage.html#dontwarn"><code>-dontwarn</code></a>
+ option. Only use these options if you really know what you're doing
+ though.
+ <p>
+ For example, if you're developing for Android, and ProGuard complains that
+ it can't find a <code>java.awt</code> class, then some library that you
+ are using is referring to <code>java.awt</code>. This is a bit shady, since
+ Android doesn't have this package at all, but if your application works
+ anyway, you can let ProGuard accept it with "<code>-dontwarn
+ java.awt.**</code>".</dd>
+
+<dt><a name="superclass"><b>Error: Can't find any super classes of ... (not even immediate super class ...)</b><br/><b>Error: Can't find common super class of ... and ...</b></a></dt>
+
+<dd>It seems like you tried to avoid the warnings from the previous paragraph
+ by specifying
+ <a href="usage.html#ignorewarnings"><code>-ignorewarnings</code></a>
+ or <a href="usage.html#dontwarn"><code>-dontwarn</code></a>, but it didn't
+ work out. ProGuard's optimization step and preverification step really
+ need the missing classes to make sense of the code. Preferably, you would
+ solve the problem by adding the missing library, as discussed. If you're
+ sure the class that references the missing class isn't used either, you
+ could also try filtering it out from the input, by adding a filter to the
+ corresponding <a href="usage.html#injars"><code>-injars</code></a> option:
+ "<code>-injars
+ myapplication.jar(!somepackage/SomeUnusedClass.class)</code>". Hopefully,
+ you can access the configuration of your build process for such a
+ modification. As a final solution, you could switch off optimization
+ (<a href="usage.html#dontoptimize"><code>-dontoptimize</code></a>) and
+ preverification
+ (<a href="usage.html#dontpreverify"><code>-dontpreverify</code></a>).</dd>
+
+<dt><a name="unresolvedclassmember"><b>Warning: can't find referenced field/method</b></a></dt>
+
+<dd>If there are unresolved references to class members in input classes, your
+ class files are most likely inconsistent. Possibly, some class file didn't
+ get recompiled properly, or some class file was left behind after its
+ source file was removed. Try removing all class files, recompiling them,
+ zipping them up, and running ProGuard again.
+ <p>
+ If your program classes reside in the same packages as library classes,
+ and refer to their package visible class members, then you should also
+ specify the
+ <a href="usage.html#dontskipnonpubliclibraryclassmembers"><code>-dontskipnonpubliclibraryclassmembers</code></a>
+ option.</dd>
+
+<dt><a name="unresolvedenclosingmethod"><b>Warning: can't find enclosing class/method</b></a></dt>
+
+<dd>If there are unresolved references to classes that are defined inside
+ methods in your input, once more, your class files are most likely
+ inconsistent. Possibly, some class file didn't get recompiled properly, or
+ some class file was left behind after its source file was removed. Try
+ removing all class files, recompiling them, zipping them up, and running
+ ProGuard again.</dd>
+
+<dt><a name="dependency"><b>Warning: library class ... depends on program class ...</b></a></dt>
+
+<dd>If any of your library classes depend on your program classes, by
+ extending, implementing or just referencing them, your processed code will
+ generally be unusable. Program classes can depend on library classes, but
+ not the other way around. Program classes are processed, while library
+ classes always remain unchanged. It is therefore impossible to adapt
+ references from library classes to program classes, for instance if the
+ program classes are renamed. You should define a clean separation between
+ program code (specified with <a
+ href="usage.html#injars"><code>-injars</code></a>) and library code
+ (specified with <a
+ href="usage.html#libraryjars"><code>-libraryjars</code></a>), and try
+ again.</dd>
+
+<dt><a name="unexpectedclass"><b>Warning: class file ... unexpectedly contains class ...</b></a></dt>
+
+<dd>The given class file contains a definition for the given class, but the
+ directory name of the file doesn't correspond to the package name of the
+ class. ProGuard will accept the class definition, but the current
+ implementation will not write out the processed version. Please make sure
+ your input classes are packaged correctly. Notably, class files that are
+ in the <code>WEB-INF/classes</code> directory in a war should be packaged
+ in a jar and put in the <code>WEB-INF/lib</code> directory. If you don't
+ mind these classes not being written to the output, you can specify the <a
+ href="usage.html#ignorewarnings"><code>-ignorewarnings</code></a> option,
+ or even the <a href="usage.html#dontwarn"><code>-dontwarn</code></a>
+ option.</dd>
+
+<dt><a name="mappingconflict1"><b>Warning: ... is not being kept as ..., but remapped to ...</b></a></dt>
+
+<dd>There is a conflict between a <code>-keep</code> option in the
+ configuration, and the mapping file, in the obfuscation step. The given
+ class name or class member name can't be kept by its original name, as
+ specified in the configuration, but it has to be mapped to the other given
+ name, as specified in the mapping file. You should adapt your
+ configuration or your mapping file to remove the conflict. Alternatively,
+ if you're sure the renaming won't hurt, you can specify the <a
+ href="usage.html#ignorewarnings"><code>-ignorewarnings</code></a> option,
+ or even the <a href="usage.html#dontwarn"><code>-dontwarn</code></a>
+ option.</dd>
+
+<dt><a name="mappingconflict2"><b>Warning: field/method ... can't be mapped to ...</b></a></dt>
+
+<dd>There is a conflict between some new program code and the mapping file, in
+ the obfuscation step. The given class member can't be mapped to the given
+ name, because it would conflict with another class member that is already
+ being mapped to the same name. This can happen if you are performing
+ incremental obfuscation, applying an obfuscation mapping file from an
+ initial obfuscation step. For instance, some new class may have been added
+ that extends two existing classes, introducing a conflict in the name
+ space of its class members. If you're sure the class member receiving
+ another name than the one specified won't hurt, you can specify the <a
+ href="usage.html#ignorewarnings"><code>-ignorewarnings</code></a> option,
+ or even the <a href="usage.html#dontwarn"><code>-dontwarn</code></a>
+ option. Note that you should always use the <a
+ href="usage.html#useuniqueclassmembernames"><code>-useuniqueclassmembernames</code></a>
+ option in the initial obfuscation step, in order to reduce the risk of
+ conflicts.</dd>
+
+<dt><a name="unsupportedclassversion"><b>Error: Unsupported class version number</b></a></dt>
+
+<dd>You are trying to process class files compiled for a recent version of
+ Java that your copy of ProGuard doesn't support yet. You should check if
+ there is a more recent release
+ <a href="http://proguard.sourceforge.net/downloads.html">on-line</a>.</dd>
+
+<dt><a name="keep"><b>Error: You have to specify '-keep' options</b></a></dt>
+
+<dd>You either forgot to specify <a
+ href="usage.html#keep"><code>-keep</code></a> options, or you mistyped the
+ class names. ProGuard has to know exactly what you want to keep: an
+ application, an applet, a servlet, a midlet,..., or any combination of
+ these. Without the proper seed specifications, ProGuard would shrink,
+ optimize, or obfuscate all class files away.</dd>
+
+<dt><a name="filename"><b>Error: Expecting class path separator ';' before 'Files\Java\</b>...<b>'</b> (in Windows)</a></dt>
+
+<dd>If the path of your run-time jar contains spaces, like in "Program Files",
+ you have to enclose it with single or double quotes, as explained in the
+ section on <a href="usage.html#filename">file names</a>. This is actually
+ true for all file names containing special characters, on all
+ platforms.</dd>
+
+<dt><a name="macosx"><b>Error: Can't read [</b>...<b>/lib/rt.jar] (No such file or directory)</b> (in MacOS X)</a></dt>
+
+<dd>In MacOS X, the run-time classes may be in a different place than on most
+ other platforms. You'll then have to adapt your configuration, replacing
+ the path <code><java.home>/lib/rt.jar</code> by
+ <code><java.home>/../Classes/classes.jar</code>.</dd>
+
+<dt><a name="startinggui"><b>Internal problem starting the ProGuard GUI (Cannot write XdndAware property)</b> (in Linux)</a></dt>
+
+<dd>In Linux, at least with Java 6, the GUI may not start properly, due to
+ <a href="http://bugs.sun.com/view_bug.do?bug_id=7027598">Sun
+ Bug #7027598</a>. The work-around at this time is to specify the JVM
+ option <code>-DsuppressSwingDropSupport=true</code> when running the
+ GUI.</dd>
+
+<dd>
+
+</dl>
+<p>
+
+Should ProGuard crash while processing your application:
+
+<dl>
+<dt><a name="outofmemoryerror"><b>OutOfMemoryError</b></a></dt>
+
+<dd>You can try increasing the heap size of the Java virtual machine (with the
+ usual <code>-Xms</code> and <code>-Xmx</code> options). You can also
+ reduce the amount of memory that ProGuard needs by removing unnecessary
+ library jars from your configuration, or by filtering out unused library
+ packages and classes. Remember that only classes or interfaces that are
+ extended or implemented by classes in your input jars are required.</dd>
+
+<dt><a name="stackoverflowerror"><b>StackOverflowError</b></a></dt>
+
+<dd>This error might occur when processing a large code base on Windows
+ (surprisingly, not so easily on Linux). In theory, increasing the stack
+ size of the Java virtual machine (with the usual <code>-Xss</code> option)
+ should help too. In practice however, the <code>-Xss</code> setting
+ doesn't have any effect on the main thread, due to <a
+ href="http://bugs.sun.com/view_bug.do?bug_id=4362291">Sun Bug
+ #4362291</a>. As a result, this solution will only work when running
+ ProGuard in a different thread, e.g. from its GUI.</dd>
+
+<dt><a name="unexpectederror"><b>Unexpected error</b></a></dt>
+
+<dd>ProGuard has encountered an unexpected condition, typically in the
+ optimization step. It may or may not recover. You should be able to avoid
+ it using the <a
+ href="usage.html#dontoptimize"><code>-dontoptimize</code></a> option. In
+ any case, please report the problem, preferably with the simplest example
+ that causes ProGuard to crash.</dd>
+
+<dt><a name="otherwise"><b>Otherwise...</b></a></dt>
+
+<dd>Maybe your class files are corrupt. See if recompiling them and trying
+ again helps. If not, please report the problem, preferably with the
+ simplest example that causes ProGuard to crash.</dd>
+
+</dl>
+<p>
+
+<h2><a name="afterprocessing">Unexpected observations after processing</a></h2>
+
+If ProGuard seems to run fine, but your processed code doesn't look right,
+there might be a couple of reasons:
+
+<dl>
+<dt><a name="disappearingclasses"><b>Disappearing classes</b></a></dt>
+
+<dd>If you are working on Windows and it looks like some classes have
+ disappeared from your output, you should make sure you're not writing your
+ output class files to a directory (or unpacking the output jar). On
+ platforms with case-insensitive file systems, such as Windows, unpacking
+ tools often let class files with similar lower-case and upper-case names
+ overwrite each other. If you really can't switch to a different operating
+ system, you could consider using ProGuard's <a
+ href="usage.html#dontusemixedcaseclassnames"><code>-dontusemixedcaseclassnames</code></a>
+ option.
+ <p>
+ Also, you should make sure your class files are in directories that
+ correspond to their package names. ProGuard will read misplaced class
+ files, but it will currently not write their processed versions. Notably,
+ class files that are in the <code>WEB-INF/classes</code> directory in a
+ war should be packaged in a jar and put in the <code>WEB-INF/lib</code>
+ directory.</dd>
+
+<dt><a name="notkept"><b>Classes or class members not being kept</b></a></dt>
+
+<dd>If ProGuard is not keeping the right classes or class members, make sure
+ you are using fully qualified class names. If the package name of some
+ class is missing, ProGuard won't match the elements that you might be
+ expecting. It may help to double-check for typos too. You can use the <a
+ href="usage.html#printseeds"><code>-printseeds</code></a> option to see
+ which elements are being kept exactly.
+ <p>
+ If you are using marker interfaces to keep other classes, the marker
+ interfaces themselves are probably being removed in the shrinking step.
+ You should therefore always explicitly keep any marker interfaces, with
+ an option like "<code>-keep interface MyMarkerInterface</code>".
+ <p>
+ Similarly, if you are keeping classes based on annotations, you may have to
+ avoid that the annotation classes themselves are removed in the shrinking
+ step. You can explicitly keep all annotation classes in your program code
+ with an option like "<code>-keep @interface *</code>".<dd>
+
+<dt><a name="notobfuscated"><b>Variable names not being obfuscated</b></a></dt>
+
+<dd>If the names of the local variables and parameters in your obfuscated code
+ don't look obfuscated, because they suspiciously resemble the names of
+ their types, it's probably because the decompiler that you are using is
+ coming up with those names. ProGuard's obfuscation step does remove the
+ original names entirely, unless you explicitly keep the
+ <code>LocalVariableTable</code> or <code>LocalVariableTypeTable</code>
+ attributes.</dd>
+
+</dl>
+
+<h2><a name="dalvik">Problems while converting to Android Dalvik bytecode</a></h2>
+
+If ProGuard seems to run fine, but the dx tool in the Android SDK subsequently
+fails with an error:
+
+<dl>
+<dt><a name="simexception"><b>SimException: local variable type mismatch</b></a></dt>
+
+<dd>This error indicates that ProGuard's optimization step has not been able
+ to maintain the correct debug information about local variables. This can
+ happen if some code is optimized radically. Possible work-arounds: let the
+ java compiler not produce debug information (<code>-g:none</code>), or let
+ ProGuard's obfuscation step remove the debug information again
+ (by <i>not</i> keeping the attributes <code>LocalVariableTable</code>
+ and <code>LocalVariableTypeTable</code>
+ with <a href="usage.html#keepattributes"><code>-keepattributes</code></a>),
+ or otherwise just disable optimization
+ (<a href="usage.html#dontoptimize"><code>-dontoptimize</code></a>).</dd>
+
+<dt><a name="conversionerror"><b>Conversion to Dalvik format failed with error 1</b></a></dt>
+
+<dd>This error may have various causes, but if dx is tripping over some code
+ processed by ProGuard, you should make sure that you are using the latest
+ version of ProGuard. You can just copy the ProGuard jars
+ to <code>android-sdk/tools/proguard/lib</code>. If that doesn't help,
+ please report the problem, preferably with the simplest example that still
+ brings out the error.</dd>
+
+</dl>
+
+<h2><a name="preverifying">Problems while preverifying for Java Micro Edition</a></h2>
+
+If ProGuard seems to run fine, but the external preverifier subsequently
+produces errors, it's usually for a single reason:
+
+<dl>
+<dt><a name="invalidclassexception1"><b>InvalidClassException</b>, <b>class loading error</b>, or <b>verification error</b></a></dt>
+
+<dd>If you get any such message from the preverifier, you are probably working
+ on a platform with a case-insensitive file system, such as Windows. The
+ <code>preverify</code> tool always unpacks the jars, so class files with
+ similar lower-case and upper-case names overwrite each other. You can use
+ ProGuard's <a
+ href="usage.html#dontusemixedcaseclassnames"><code>-dontusemixedcaseclassnames</code></a>
+ option to work around this problem.
+ <p>
+ If the above doesn't help, there is probably a bug in the optimization
+ step of ProGuard. Make sure you are using the latest version. You should
+ be able to work around the problem by using the <a
+ href="usage.html#dontoptimize"><code>-dontoptimize</code></a> option. You
+ can check the bug database to see if it is a known problem (often with a
+ fix). Otherwise, please report it, preferably with the simplest example on
+ which you can find ProGuard to fail.</dd>
+
+</dl>
+
+Note that it is no longer necessary to use an external preverifier. With the
+<a href="usage.html#microedition"><code>-microedition</code></a> option,
+ProGuard will preverify the class files for Java Micro Edition.
+<p>
+
+<h2><a name="runtime">Problems at run-time</a></h2>
+
+If ProGuard runs fine, but your processed application doesn't work, there
+might be several reasons:
+
+<dl>
+<dt><a name="stacktraces"><b>Stack traces without class names or line numbers</b></a></dt>
+
+<dd>If your stack traces don't contain any class names or lines numbers,
+ even though you are keeping the proper attributes, make sure this debugging
+ information is present in your compiled code to start with. Notably the Ant
+ javac task has debugging information switched off by default.</dd>
+
+<dt><a name="noclassdeffounderror"><b>NoClassDefFoundError</b></a></dt>
+
+<dd>Your class path is probably incorrect. It should at least contain all
+ library jars and, of course, your processed program jar.</dd>
+
+<dt><a name="classnotfoundexception"><b>ClassNotFoundException</b></a></dt>
+
+<dd>Your code is probably calling <code>Class.forName</code>, trying to create
+ the missing class dynamically. ProGuard can only detect constant name
+ arguments, like <code>Class.forName("mypackage.MyClass")</code>. For
+ variable name arguments like <code>Class.forName(someClass)</code>, you
+ have to keep all possible classes using the appropriate <a
+ href="usage.html#keep"><code>-keep</code></a> option, e.g. "<code>-keep
+ class mypackage.MyClass</code>" or "<code>-keep class * implements
+ mypackage.MyInterface</code>".</dd>
+
+<dt><a name="nosuchmethodexception"><b>NoSuchMethodException</b></a></dt>
+
+<dd>Your code is probably calling something like
+ <code>myClass.getMethod</code>, trying to find some method dynamically.
+ Since ProGuard can't always detect this automatically, you have to keep
+ the missing method in using the appropriate <a
+ href="usage.html#keep"><code>-keep</code></a> option, e.g. "<code>-keep
+ class mypackage.MyClass { void myMethod(); }</code>".
+ <p>
+ More specifically, if the method reported as missing is
+ <code>values</code> or <code>valueOf</code>, you probably have to keep
+ some methods related to <a
+ href="examples.html#enumerations">enumerations</a>.</dd>
+
+<dt><a name="missingresourceexception"><b>MissingResourceException</b> or <b>NullPointerException</b></a></dt>
+
+<dd>Your processed code may be unable to find some resource files. ProGuard
+ simply copies resource files over from the input jars to the output jars.
+ Their names and contents remain unchanged, unless you specify the options
+ <a
+ href="usage.html#adaptresourcefilenames"><code>-adaptresourcefilenames</code></a>
+ and/or <a
+ href="usage.html#adaptresourcefilecontents"><code>-adaptresourcefilecontents</code></a>.
+ <p>
+ Furthermore, directory entries in jar files aren't copied, unless you
+ specify the option <a
+ href="usage.html#keepdirectories"><code>-keepdirectories</code></a>.
+ Note that Sun advises against calling <code>Class.getResource()</code> for
+ directories (<a href="http://bugs.sun.com/view_bug.do?bug_id=4761949">Sun
+ Bug #4761949</a>).</dd>
+
+<dt><a name="disappearingannotations"><b>Disappearing annotations</b></a></dt>
+
+<dd>By default, the obfuscation step removes all annotations. If your
+ application relies on annotations to function properly, you should
+ explicitly keep them with
+ <code><a href="usage.html#keepattributes">-keepattributes</a>
+ *Annotation*</code>.</dd>
+
+<dt><a name="invalidjarfile"><b>Invalid or corrupt jarfile</b></a></dt>
+
+<dd>You are probably starting your application with the java option
+ <code>-jar</code> instead of the option <code>-classpath</code>. The java
+ virtual machine returns with this error message if your jar doesn't
+ contain a manifest file (<code>META-INF/MANIFEST.MF</code>), if the
+ manifest file doesn't specify a main class (<code>Main-Class:</code> ...),
+ or if the jar doesn't contain this main class. You should then make sure
+ that the input jar contains a valid manifest file to start with, that this
+ manifest file is the one that is copied (the first manifest file that is
+ encountered), and that the main class is kept in your configuration,</dd>
+
+<dt><a name="invalidjarindexexception"><b>InvalidJarIndexException: Invalid index</b></a></dt>
+
+<dd>At least one of your processed jar files contains an index file
+ <code>META-INF/INDEX.LIST</code>, listing all class files in the jar.
+ ProGuard by default copies files like these unchanged. ProGuard may however
+ remove or rename classes, thus invalidating the file. You should filter the
+ index file out of the input
+ (<code>-injars in.jar(!META-INF/INDEX.LIST)</code>) or update the file
+ after having applied ProGuard (<code>jar -i out.jar</code>).
+ </dd>
+
+<dt><a name="invalidclassexception2"><b>InvalidClassException</b>, <b>class loading error</b>, or <b>verification error</b> (in Java Micro Edition)</a></dt>
+
+<dd>If you get such an error in Java Micro Edition, you may have forgotten to
+ specify the <a
+ href="usage.html#microedition"><code>-microedition</code></a> option, so
+ the processed class files are preverified properly.</dd>
+
+<dt><a name="nosuchfieldormethod"><b>Error: No Such Field or Method</b>, <b>Error verifying method</b> (in a Java Micro Edition emulator)</a></dt>
+
+<dd>If you get such a message in a Motorola or Sony Ericsson phone emulator,
+ it's because these emulators don't like packageless classes and/or
+ overloaded fields and methods. You can work around it by not using the
+ options <code><a href="usage.html#repackageclasses">-repackageclasses</a>
+ ''</code> and <a
+ href="usage.html#overloadaggressively"><code>-overloadaggressively</code></a>.
+ If you're using the JME WTK plugin, you can adapt the configuration
+ <code>proguard/wtk/default.pro</code> that's inside the
+ <code>proguard.jar</code>.</dd>
+
+<dt><a name="failingmidlets"><b>Failing midlets</b> (on a Java Micro Edition device)</a></dt>
+
+<dd>If your midlet runs in an emulator and on some devices, but not on some
+ other devices, this is probably due to a bug in the latter devices. For
+ some older Motorola and Nokia phones, you might try specifying the <a
+ href="usage.html#useuniqueclassmembernames"><code>-useuniqueclassmembernames</code></a>
+ option. It avoids overloading class member names, which triggers a bug in
+ their java virtual machine.
+ <p>
+ You might also try using the <a
+ href="usage.html#dontusemixedcaseclassnames"><code>-dontusemixedcaseclassnames</code></a>
+ option. Even if the midlet has been properly processed and then
+ preverified on a case-sensitive file system, the device itself might not
+ like the mixed-case class names. Notably, the Nokia N-Gage emulator works
+ fine, but the actual device seems to exhibit this problem.</dd>
+
+<dt><a name="disappearingloops"><b>Disappearing loops</b></a></dt>
+
+<dd>If your code contains empty busy-waiting loops, ProGuard's optimization
+ step may remove them. More specifically, this happens if a loop
+ continuously checks the value of a non-volatile field that is changed in a
+ different thread. The specifications of the Java Virtual Machine require
+ that you always mark fields that are accessed across different threads
+ without further synchronization as <code>volatile</code>. If this is not
+ possible for some reason, you'll have to switch off optimization using the
+ <a href="usage.html#dontoptimize"><code>-dontoptimize</code></a>
+ option.</dd>
+
+<dt><a name="securityexception"><b>SecurityException: SHA1 digest error</b></a></dt>
+
+<dd>You may have forgotten to sign your program jar <i>after</i> having
+ processed it with ProGuard.</dd>
+
+<dt><a name="classcastexception"><b>ClassCastException: class not an enum</b>, or <br /><b>IllegalArgumentException: class not an enum type</b></a></dt>
+
+<dd>You should make sure you're preserving the special methods of enumeration
+ types, which the run-time environment calls by introspection. The required
+ options are shown in the <a
+ href="examples.html#enumerations">examples</a>.</dd>
+
+<dt><a name="arraystoreexception"><b>ArrayStoreException: sun.reflect.annotation.EnumConstantNotPresentExceptionProxy</b></a></dt>
+
+<dd>You are probably processing annotations involving enumerations. Again, you
+ should make sure you're preserving the special methods of the enumeration
+ type, as shown in the examples.</dd>
+
+<dt><a name="compilererror"><b>CompilerError: duplicate addition</b></a></dt>
+
+<dd>You are probably compiling or running some code that has been obfuscated
+ with the <a
+ href="usage.html#overloadaggressively"><code>-overloadaggressively</code></a>
+ option. This option triggers a bug in
+ <code>sun.tools.java.MethodSet.add</code> in Sun's JDK 1.2.2, which is
+ used for (dynamic) compilation. You should then avoid this option.</dd>
+
+<dt><a name="classformaterror1"><b>ClassFormatError: repetitive field name/signature</b></a></dt>
+
+<dd>You are probably processing some code that has been obfuscated before with
+ the <a
+ href="usage.html#overloadaggressively"><code>-overloadaggressively</code></a>
+ option. You should then use the same option again in the second processing
+ round.</dd>
+
+<dt><a name="classformaterror2"><b>ClassFormatError: Invalid index in LocalVariableTable in class file</b></a></dt>
+
+<dd>If you are keeping the <code>LocalVariableTable</code> or
+ <code>LocalVariableTypeTable</code> attributes, ProGuard's optimizing step
+ is sometimes unable to update them consistently. You should then let the
+ obfuscation step remove these attributes or disable the optimization
+ step.</dd>
+
+<dt><a name="nosuchmethoderror"><b>NoSuchMethodError</b> or <b>AbstractMethodError</b></a></dt>
+
+<dd>You should make sure you're not writing your output class files to a
+ directory on a platform with a case-insensitive file system, such as
+ Windows. Please refer to the section about <a
+ href="#disappearingclasses">disappearing classes</a> for details.
+ <p>
+ Furthermore, you should check whether you have specified your program jars
+ and library jars properly. Program classes can refer to library classes,
+ but not the other way around.
+ <p>
+ If all of this seems ok, perhaps there's a bug in ProGuard (gasp!). If so,
+ please report it, preferably with the simplest example on which you can
+ find ProGuard to fail.</dd>
+
+<dt><a name="verifyerror"><b>VerifyError</b></a></dt>
+
+<dd>Verification errors when executing a program are almost certainly the
+ result of a bug in the optimization step of ProGuard. Make sure you are
+ using the latest version. You should be able to work around the problem by
+ using the <a href="usage.html#dontoptimize"><code>-dontoptimize</code></a>
+ option. You can check the bug database to see if it is a known problem
+ (often with a fix). Otherwise, please report it, preferably with the
+ simplest example on which ProGuard fails.</dd>
+
+</dl>
+
+<hr />
+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/usage.html b/common/proguard/proguard4.7/docs/manual/usage.html
new file mode 100644
index 0000000..d84810e
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/usage.html
@@ -0,0 +1,1243 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Usage</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Usage</h2>
+
+To run ProGuard, just type:
+<p class="code">
+<code><b>java -jar proguard.jar </b></code><i>options</i> ...
+</p>
+You can find the ProGuard jar in the <code>lib</code> directory of the
+ProGuard distribution. Alternatively, the <code>bin</code> directory contains
+some short Linux and Windows scripts containing this command. Typically, you'll
+put most options in a configuration file (say, <code>myconfig.pro</code>), and
+just call:
+<p class="code">
+<code><b>java -jar proguard.jar @myconfig.pro</b></code>
+</p>
+You can combine command line options and options from configuration files. For
+instance:
+<p class="code">
+<code><b>java -jar proguard.jar @myconfig.pro -verbose</b></code>
+</p>
+<p>
+You can add comments in a configuration file, starting with a
+<code><b>#</b></code> character and continuing until the end of the line.
+<p>
+Extra whitespace between words and delimiters is ignored. File names with
+spaces or special characters should be quoted with single or double quotes.
+<p>
+Options can be grouped arbitrarily in arguments on the command line and in
+lines in configuration files. This means that you can quote arbitrary sections
+of command line options, to avoid shell expansion of special characters, for
+instance.
+<p>
+The order of the options is generally irrelevant. For quick experiments, you
+can abbreviate them to their first unique characters.
+<p>
+
+The sections below provide more details:
+<ul>
+<li><a href="#iooptions">Input/Output Options</a></li>
+<li><a href="#keepoptions">Keep Options</a></li>
+<li><a href="#shrinkingoptions">Shrinking Options</a></li>
+<li><a href="#optimizationoptions">Optimization Options</a></li>
+<li><a href="#obfuscationoptions">Obfuscation Options</a></li>
+<li><a href="#preverificationoptions">Preverification Options</a></li>
+<li><a href="#generaloptions">General Options</a></li>
+<li><a href="#classpath">Class Paths</a></li>
+<li><a href="#filename">File Names</a></li>
+<li><a href="#filefilters">File Filters</a></li>
+<li><a href="#filters">Filters</a></li>
+<li><a href="#keepoverview">Overview of <code>Keep</code> Options</a></li>
+<li><a href="#keepoptionmodifiers">Keep Option Modifiers</a></li>
+<li><a href="#classspecification">Class Specifications</a></li>
+</ul>
+
+<h2><a name="iooptions">Input/Output Options</a></h2>
+
+<dl>
+<dt><a name="at"><code><b>@</b></code></a><a href="#filename"><i>filename</i></a></dt>
+
+<dd>Short for '<a href="#include"><code>-include</code></a>
+ <a href="#filename"><i>filename</i></a>'.</dd>
+
+<dt><a name="include"><code><b>-include</b></code></a>
+ <a href="#filename"><i>filename</i></a></dt>
+
+<dd>Recursively reads configuration options from the given file
+ <i>filename</i>.</dd>
+
+<dt><a name="basedirectory"><code><b>-basedirectory</b></code></a>
+ <a href="#filename"><i>directoryname</i></a></dt>
+
+<dd>Specifies the base directory for all subsequent relative file names in
+ these configuration arguments or this configuration file.</dd>
+
+<dt><a name="injars"><code><b>-injars</b></code></a>
+ <a href="#classpath"><i>class_path</i></a></dt>
+
+<dd>Specifies the input jars (or wars, ears, zips, or directories) of the
+ application to be processed. The class files in these jars will be
+ processed and written to the output jars. By default, any non-class files
+ will be copied without changes. Please be aware of any temporary files
+ (e.g. created by IDEs), especially if you are reading your input files
+ straight from directories. The entries in the class path can be filtered,
+ as explained in the <a href="#filefilters">filters</a> section. For better
+ readability, class path entries can be specified using multiple
+ <code>-injars</code> options.</dd>
+
+<dt><a name="outjars"><code><b>-outjars</b></code></a>
+ <a href="#classpath"><i>class_path</i></a></dt>
+
+<dd>Specifies the names of the output jars (or wars, ears, zips, or
+ directories). The processed input of the preceding <code>-injars</code>
+ options will be written to the named jars. This allows you to collect the
+ contents of groups of input jars into corresponding groups of output jars.
+ In addition, the output entries can be filtered, as explained in
+ the <a href="#filefilters">filters</a> section. Each processed class file
+ or resource file is then written to the first output entry with a matching
+ filter, within the group of output jars.
+ <p>
+ You must avoid letting the output files overwrite any input files. For
+ better readability, class path entries can be specified using multiple
+ <code>-outjars</code> options. Without any <code>-outjars</code> options,
+ no jars will be written.</dd>
+
+<dt><a name="libraryjars"><code><b>-libraryjars</b></code></a>
+ <a href="#classpath"><i>class_path</i></a></dt>
+
+<dd>Specifies the library jars (or wars, ears, zips, or directories) of the
+ application to be processed. The files in these jars will not be included
+ in the output jars. The specified library jars should at least contain the
+ class files that are <i>extended</i> by application class files. Library
+ class files that are only <i>called</i> needn't be present, although their
+ presence can improve the results of the optimization step. The entries in
+ the class path can be filtered, as explained in the <a
+ href="#filefilters">filters</a> section. For better readability, class path
+ entries can be specified using multiple <code>-libraryjars</code> options.
+ <p>
+ Please note that the boot path and the class path set for running ProGuard
+ are not considered when looking for library classes. This means that you
+ explicitly have to specify the run-time jar that your code will use.
+ Although this may seem cumbersome, it allows you to process applications
+ targeted at different run-time environments. For example, you can process
+ <a href="examples.html#application">J2SE applications</a> as well as <a
+ href="examples.html#midlet">JME midlets</a>, just by specifying the
+ appropriate run-time jar.</dd>
+
+<dt><a name="skipnonpubliclibraryclasses"><code><b>-skipnonpubliclibraryclasses</b></code></a></dt>
+
+<dd>Specifies to skip non-public classes while reading library jars, to speed
+ up processing and reduce memory usage of ProGuard. By default, ProGuard
+ reads non-public and public library classes alike. However, non-public
+ classes are often not relevant, if they don't affect the actual program
+ code in the input jars. Ignoring them then speeds up ProGuard, without
+ affecting the output. Unfortunately, some libraries, including recent JSE
+ run-time libraries, contain non-public library classes that are extended
+ by public library classes. You then can't use this option. ProGuard will
+ print out warnings if it can't find classes due to this option being
+ set.</dd>
+
+<dt><a name="dontskipnonpubliclibraryclasses"><code><b>-dontskipnonpubliclibraryclasses</b></code></a></dt>
+
+<dd>Specifies not to ignore non-public library classes. As of version 4.5, this
+ is the default setting.</dd>
+
+<dt><a name="dontskipnonpubliclibraryclassmembers"><code><b>-dontskipnonpubliclibraryclassmembers</b></code></a></dt>
+
+<dd>Specifies not to ignore package visible library class members (fields and
+ methods). By default, ProGuard skips these class members while parsing
+ library classes, as program classes will generally not refer to them.
+ Sometimes however, program classes reside in the same packages as library
+ classes, and they do refer to their package visible class members. In
+ those cases, it can be useful to actually read the class members, in order
+ to make sure the processed code remains consistent.</dd>
+
+<dt><a name="keepdirectories"><code><b>-keepdirectories</b></code></a>
+ [<i><a href="#filefilters">directory_filter</a></i>]</dt>
+
+<dd>Specifies the directories to be kept in the output jars (or wars, ears, or
+ directories). By default, directory entries are removed. This reduces the
+ jar size, but it may be undesirable if the program code tries to find them
+ with constructs like "<code>MyClass.class.getResource("")</code>". If the
+ option is specified without a filter, all directories are kept. With a
+ filter, only matching directories are kept.</dd>
+
+<dt><a name="target"><code><b>-target</b></code></a> <i>version</i></dt>
+
+<dd>Specifies the version number to be set in the processed class files. The
+ version number can be one of <code>1.0</code>, <code>1.1</code>,
+ <code>1.2</code>, <code>1.3</code>, <code>1.4</code>, <code>1.5</code> (or
+ just <code>5</code>), <code>1.6</code> (or just <code>6</code>), or
+ <code>1.7</code> (or just <code>7</code>). By default, the version numbers
+ of the class files are left unchanged. For example, you may want to
+ <a href="examples.html#upgrade">upgrade class files to Java 6</a>, by
+ changing their version numbers and having them preverified.</dd>
+
+<dt><a name="forceprocessing"><code><b>-forceprocessing</b></code></a></dt>
+
+<dd>Specifies to process the input, even if the output seems up to date. The
+ up-to-dateness test is based on a comparison of the date stamps of the
+ specified input, output, and configuration files or directories.</dd>
+
+</dl>
+<p>
+
+<h2><a name="keepoptions">Keep Options</a></h2>
+
+<dl>
+<dt><a name="keep"><code><b>-keep</b></code></a>
+ [<a href="#keepoptionmodifiers">,<i>modifier</i></a>,...]
+ <a href="#classspecification"><i>class_specification</i></a></dt>
+
+<dd>Specifies classes and class members (fields and methods) to be preserved
+ as entry points to your code. For example, in order to <a
+ href="examples.html#application">keep an application</a>, you can specify
+ the main class along with its main method. In order to <a
+ href="examples.html#library">process a library</a>, you should specify all
+ publicly accessible elements.</dd>
+
+<dt><a name="keepclassmembers"><code><b>-keepclassmembers</b></code></a>
+ [<a href="#keepoptionmodifiers">,<i>modifier</i></a>,...]
+ <a href="#classspecification"><i>class_specification</i></a></dt>
+
+<dd>Specifies class members to be preserved, if their classes are preserved as
+ well. For example, you may want to <a
+ href="examples.html#serializable">keep all serialization fields and
+ methods</a> of classes that implement the <code>Serializable</code>
+ interface.</dd>
+
+<dt><a name="keepclasseswithmembers"><code><b>-keepclasseswithmembers</b></code></a>
+ [<a href="#keepoptionmodifiers">,<i>modifier</i></a>,...]
+ <a href="#classspecification"><i>class_specification</i></a></dt>
+
+<dd>Specifies classes and class members to be preserved, on the condition that
+ all of the specified class members are present. For example, you may want
+ to <a href="examples.html#applications">keep all applications</a> that
+ have a main method, without having to list them explicitly.</dd>
+
+<dt><a name="keepnames"><code><b>-keepnames</b></code></a>
+ <a href="#classspecification"><i>class_specification</i></a></dt>
+
+<dd>Short for <a href="#keep"><code>-keep</code></a>,<a href="#allowshrinking"><code>allowshrinking</code></a>
+ <a href="#classspecification"><i>class_specification</i></a>
+ <p>
+ Specifies classes and class members whose names are to be preserved, if
+ they aren't removed in the shrinking phase. For example, you may want to
+ <a href="examples.html#serializable">keep all class names</a> of classes
+ that implement the <code>Serializable</code> interface, so that the
+ processed code remains compatible with any originally serialized classes.
+ Classes that aren't used at all can still be removed. Only applicable when
+ obfuscating.</dd>
+
+<dt><a name="keepclassmembernames"><code><b>-keepclassmembernames</b></code></a>
+ <a href="#classspecification"><i>class_specification</i></a></dt>
+
+<dd>Short for <a href="#keepclassmembers"><code>-keepclassmembers</code></a>,<a href="#allowshrinking"><code>allowshrinking</code></a>
+ <a href="#classspecification"><i>class_specification</i></a>
+ <p>
+ Specifies class members whose names are to be preserved, if they aren't
+ removed in the shrinking phase. For example, you may want to preserve the
+ name of the synthetic <code>class$</code> methods
+ when <a href="examples.html#library">processing a library</a> compiled by
+ JDK 1.2 or older, so obfuscators can detect it again when processing an
+ application that uses the processed library (although ProGuard itself
+ doesn't need this). Only applicable when obfuscating.</dd>
+
+<dt><a name="keepclasseswithmembernames"><code><b>-keepclasseswithmembernames</b></code></a>
+ <a href="#classspecification"><i>class_specification</i></a></dt>
+
+<dd>Short for <a href="#keepclasseswithmembers"><code>-keepclasseswithmembers</code></a>,<a href="#allowshrinking"><code>allowshrinking</code></a>
+ <a href="#classspecification"><i>class_specification</i></a>
+ <p>
+ Specifies classes and class members whose names are to be preserved, on
+ the condition that all of the specified class members are present after
+ the shrinking phase. For example, you may want to <a
+ href="examples.html#native">keep all native method names</a> and the names
+ of their classes, so that the processed code can still link with the
+ native library code. Native methods that aren't used at all can still be
+ removed. If a class file is used, but none of its native methods are, its
+ name will still be obfuscated. Only applicable when obfuscating.</dd>
+
+<dt><a name="printseeds"><code><b>-printseeds</b></code></a>
+ [<a href="#filename"><i>filename</i></a>]</dt>
+
+<dd>Specifies to exhaustively list classes and class members matched by the
+ various <code>-keep</code> options. The list is printed to the standard
+ output or to the given file. The list can be useful to verify if the
+ intended class members are really found, especially if you're using
+ wildcards. For example, you may want to list all the <a
+ href="examples.html#applications">applications</a> or all the <a
+ href="examples.html#applets">applets</a> that you are keeping.</dd>
+
+</dl>
+<p>
+
+<h2><a name="shrinkingoptions">Shrinking Options</a></h2>
+
+<dl>
+<dt><a name="dontshrink"><code><b>-dontshrink</b></code></a></dt>
+
+<dd>Specifies not to shrink the input class files. By default, shrinking is
+ applied; all classes and class members are removed, except for the ones
+ listed by the various <code>-keep</code> options, and the ones on which
+ they depend, directly or indirectly. A shrinking step is also applied
+ after each optimization step, since some optimizations may open the
+ possibility to remove more classes and class members.</dd>
+
+<dt><a name="printusage"><code><b>-printusage</b></code></a>
+ [<a href="#filename"><i>filename</i></a>]</dt>
+
+<dd>Specifies to list dead code of the input class files. The list is printed
+ to the standard output or to the given file. For example, you can <a
+ href="examples.html#deadcode">list the unused code of an application</a>.
+ Only applicable when shrinking.</dd>
+
+<dt><a name="whyareyoukeeping"><code><b>-whyareyoukeeping</b></code></a>
+ <a href="#classspecification"><i>class_specification</i></a></dt>
+
+<dd>Specifies to print details on why the given classes and class members are
+ being kept in the shrinking step. This can be useful if you are wondering
+ why some given element is present in the output. In general, there can be
+ many different reasons. This option prints the shortest chain of methods
+ to a specified seed or entry point, for each specified class and class
+ member. <i>In the current implementation, the shortest chain that is
+ printed out may sometimes contain circular deductions -- these do not
+ reflect the actual shrinking process.</i> If the <a
+ href="#verbose"><code>-verbose</code></a> option if specified, the traces
+ include full field and method signatures. Only applicable when
+ shrinking.</dd>
+
+</dl>
+<p>
+
+<h2><a name="optimizationoptions">Optimization Options</a></h2>
+
+<dl>
+<dt><a name="dontoptimize"><code><b>-dontoptimize</b></code></a></dt>
+
+<dd>Specifies not to optimize the input class files. By default, optimization
+ is enabled; all methods are optimized at a bytecode level.</dd>
+
+<dt><a name="optimizations"><code><b>-optimizations</b></code></a>
+ <a href="optimizations.html"><i>optimization_filter</i></a></dt>
+
+<dd>Specifies the optimizations to be enabled and disabled, at a more
+ fine-grained level. Only applicable when optimizing. <i>This is an expert
+ option.</i></dd>
+
+<dt><a name="optimizationpasses"><code><b>-optimizationpasses</b></code></a> <i>n</i></dt>
+
+<dd>Specifies the number of optimization passes to be performed. By default, a
+ single pass is performed. Multiple passes may result in further
+ improvements. If no improvements are found after an optimization pass, the
+ optimization is ended. Only applicable when optimizing.</dd>
+
+<dt><a name="assumenosideeffects"><code><b>-assumenosideeffects</b></code></a>
+ <a href="#classspecification"><i>class_specification</i></a></dt>
+
+<dd>Specifies methods that don't have any side effects (other than maybe
+ returning a value). In the optimization step, ProGuard will then remove
+ calls to such methods, if it can determine that the return values aren't
+ used. Note that ProGuard will analyze your program code to find such
+ methods automatically. It will not analyze library code, for which this
+ option can thus be useful. For example, you could specify the method
+ <code>System.currentTimeMillis()</code>, so that any idle calls to it will
+ be removed. Note that ProGuard applies the option to the entire hierarchy
+ of the specified methods. Only applicable when optimizing. In general,
+ making assumptions can be dangerous; you can easily break the processed
+ code. <i>Only use this option if you know what you're doing!</i></dd>
+
+<dt><a name="allowaccessmodification"><code><b>-allowaccessmodification</b></code></a></dt>
+
+<dd>Specifies that the access modifiers of classes and class members may be
+ broadened during processing. This can improve the results of the
+ optimization step. For instance, when inlining a public getter, it may be
+ necessary to make the accessed field public too. Although Java's binary
+ compatibility specifications formally do not require this (cfr. <a href=
+ "http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html"
+ >The Java Language Specification, Second Edition</a>, <a href=
+ "http://java.sun.com/docs/books/jls/second_edition/html/binaryComp.doc.html#47259"
+ >Section 13.4.6</a>), some virtual machines would have problems with the
+ processed code otherwise. Only applicable when optimizing (and when
+ obfuscating with the <a
+ href="#repackageclasses"><code>-repackageclasses</code></a> option).
+ <p>
+ <i>Counter-indication:</i> you probably shouldn't use this option when
+ processing code that is to be used as a library, since classes and class
+ members that weren't designed to be public in the API may become
+ public.</dd>
+
+<dt><a name="mergeinterfacesaggressively"><code><b>-mergeinterfacesaggressively</b></code></a></dt>
+
+<dd>Specifies that interfaces may be merged, even if their implementing
+ classes don't implement all interface methods. This can reduce the size of
+ the output by reducing the total number of classes. Note that Java's
+ binary compatibility specifications allow such constructs (cfr. <a href=
+ "http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html"
+ >The Java Language Specification, Second Edition</a>, <a href=
+ "http://java.sun.com/docs/books/jls/second_edition/html/binaryComp.doc.html#45347"
+ >Section 13.5.3</a>), even if they are not allowed in the Java language
+ (cfr. <a href=
+ "http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html"
+ >The Java Language Specification, Second Edition</a>, <a href=
+ "http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#34031"
+ >Section 8.1.4</a>). Only applicable when optimizing.
+ <p>
+ <i>Counter-indication:</i> setting this option can reduce the performance
+ of the processed code on some JVMs, since advanced just-in-time
+ compilation tends to favor more interfaces with fewer implementing
+ classes. Worse, some JVMs may not be able to handle the resulting code.
+ Notably:
+ <ul>
+ <li>Sun's JRE 1.3 may throw an <code>InternalError</code> when
+ encountering more than 256 <i>Miranda</i> methods (interface methods
+ without implementations) in a class.</li>
+ </ul></dd>
+
+</dl>
+<p>
+
+<h2><a name="obfuscationoptions">Obfuscation Options</a></h2>
+
+<dl>
+<dt><a name="dontobfuscate"><code><b>-dontobfuscate</b></code></a></dt>
+
+<dd>Specifies not to obfuscate the input class files. By default, obfuscation
+ is applied; classes and class members receive new short random names,
+ except for the ones listed by the various <code>-keep</code> options.
+ Internal attributes that are useful for debugging, such as source files
+ names, variable names, and line numbers are removed.</dd>
+
+<dt><a name="printmapping"><code><b>-printmapping</b></code></a>
+ [<a href="#filename"><i>filename</i></a>]</dt>
+
+<dd>Specifies to print the mapping from old names to new names for classes and
+ class members that have been renamed. The mapping is printed to the
+ standard output or to the given file. For example, it is required for
+ subsequent <a href="examples.html#incremental">incremental
+ obfuscation</a>, or if you ever want to make sense again of <a
+ href="examples.html#stacktrace">obfuscated stack traces</a>. Only
+ applicable when obfuscating.</dd>
+
+<dt><a name="applymapping"><code><b>-applymapping</b></code></a>
+ <a href="#filename"><i>filename</i></a></dt>
+
+<dd>Specifies to reuse the given name mapping that was printed out in a
+ previous obfuscation run of ProGuard. Classes and class members that are
+ listed in the mapping file receive the names specified along with them.
+ Classes and class members that are not mentioned receive new names. The
+ mapping may refer to input classes as well as library classes. This option
+ can be useful for <a href="examples.html#incremental">incremental
+ obfuscation</a>, i.e. processing add-ons or small patches to an existing
+ piece of code. In such cases, you should consider whether you also need
+ the option <a
+ href="#useuniqueclassmembernames"><code>-useuniqueclassmembernames</code></a>.
+ Only a single mapping file is allowed. Only applicable when
+ obfuscating.</dd>
+
+<dt><a name="obfuscationdictionary"><code><b>-obfuscationdictionary</b></code></a>
+ <a href="#filename"><i>filename</i></a></dt>
+
+<dd>Specifies a text file from which all valid words are used as obfuscated
+ field and method names. By default, short names like 'a', 'b', etc. are
+ used as obfuscated names. With an obfuscation dictionary, you can specify
+ a list of reserved key words, or identifiers with foreign characters, for
+ instance. White space, punctuation characters, duplicate words, and
+ comments after a <code><b>#</b></code> sign are ignored. Note that an
+ obfuscation dictionary hardly improves the obfuscation. Decent compilers
+ can automatically replace them, and the effect can fairly simply be undone
+ by obfuscating again with simpler names. The most useful application is
+ specifying strings that are typically already present in class files (such
+ as 'Code'), thus reducing the class file sizes just a little bit more.
+ Only applicable when obfuscating.</dd>
+
+<dt><a name="classobfuscationdictionary"><code><b>-classobfuscationdictionary</b></code></a>
+ <a href="#filename"><i>filename</i></a></dt>
+
+<dd>Specifies a text file from which all valid words are used as obfuscated
+ class names. The obfuscation dictionary is similar to the one of the
+ option <a
+ href="#obfuscationdictionary"><code>-obfuscationdictionary</code></a>.
+ Only applicable when obfuscating.</dd>
+
+<dt><a name="packageobfuscationdictionary"><code><b>-packageobfuscationdictionary</b></code></a>
+ <a href="#filename"><i>filename</i></a></dt>
+
+<dd>Specifies a text file from which all valid words are used as obfuscated
+ package names. The obfuscation dictionary is similar to the one of the
+ option <a
+ href="#obfuscationdictionary"><code>-obfuscationdictionary</code></a>.
+ Only applicable when obfuscating.</dd>
+
+<dt><a name="overloadaggressively"><code><b>-overloadaggressively</b></code></a></dt>
+
+<dd>Specifies to apply aggressive overloading while obfuscating. Multiple
+ fields and methods can then get the same names, as long as their arguments
+ and return types are different (not just their arguments). This option can
+ make the processed code even smaller (and less comprehensible). Only
+ applicable when obfuscating.
+ <p>
+ <i>Counter-indication:</i> the resulting class files fall within the Java
+ bytecode specification (cfr. <a href=
+ "http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html"
+ >The Java Virtual Machine Specification, Second Edition</a>, first
+ paragraphs of <a href=
+ "http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html#2877"
+ >Section 4.5</a> and <a href=
+ "http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html#1513"
+ >Section 4.6</a>), even though this kind of overloading is not allowed in
+ the Java language (cfr. <a href=
+ "http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html"
+ >The Java Language Specification, Second Edition</a>, <a href=
+ "http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#40898"
+ >Section 8.3</a> and <a href=
+ "http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#227768"
+ >Section 8.4.7</a>). Still, some tools have problems with it. Notably:
+ <ul>
+ <li>Sun's JDK 1.2.2 <code>javac</code> compiler produces an exception when
+ compiling with such a library (cfr. <a href=
+ "http://bugs.sun.com/view_bug.do?bug_id=4216736">Bug #4216736</a>).
+ You probably shouldn't use this option for processing libraries.</li>
+ <li>Sun's JRE 1.4 and later fail to serialize objects with overloaded
+ primitive fields.</li>
+ <li>Sun's JRE 1.5 <code>pack200</code> tool reportedly has problems with
+ overloaded class members.</li>
+ <li>Google's Dalvik VM can't handle overloaded static fields.</li>
+ </ul></dd>
+
+<dt><a name="useuniqueclassmembernames"><code><b>-useuniqueclassmembernames</b></code></a></dt>
+
+<dd>Specifies to assign the same obfuscated names to class members that have
+ the same names, and different obfuscated names to class members that have
+ different names (for each given class member signature). Without the
+ option, more class members can be mapped to the same short names like 'a',
+ 'b', etc. The option therefore increases the size of the resulting code
+ slightly, but it ensures that the saved obfuscation name mapping can
+ always be respected in subsequent incremental obfuscation steps.
+ <p>
+ For instance, consider two distinct interfaces containing methods with the
+ same name and signature. Without this option, these methods may get
+ different obfuscated names in a first obfuscation step. If a patch is then
+ added containing a class that implements both interfaces, ProGuard will
+ have to enforce the same method name for both methods in an incremental
+ obfuscation step. The original obfuscated code is changed, in order to
+ keep the resulting code consistent. With this option <i>in the initial
+ obfuscation step</i>, such renaming will never be necessary.
+ <p>
+ This option is only applicable when obfuscating. In fact, if you are
+ planning on performing incremental obfuscation, you probably want to avoid
+ shrinking and optimization altogether, since these steps could remove or
+ modify parts of your code that are essential for later additions.</dd>
+
+<dt><a name="dontusemixedcaseclassnames"><code><b>-dontusemixedcaseclassnames</b></code></a></dt>
+
+<dd>Specifies not to generate mixed-case class names while obfuscating. By
+ default, obfuscated class names can contain a mix of upper-case characters
+ and lower-case characters. This creates perfectly acceptable and usable
+ jars. Only if a jar is unpacked on a platform with a case-insensitive
+ filing system (say, Windows), the unpacking tool may let similarly named
+ class files overwrite each other. Code that self-destructs when it's
+ unpacked! Developers who really want to unpack their jars on Windows can
+ use this option to switch off this behavior. Note that the obfuscated jars
+ will become larger as a result. Only applicable when obfuscating.</dd>
+
+<dt><a name="keeppackagenames"><code><b>-keeppackagenames</b></code></a>
+ [<i><a href="#filters">package_filter</a></i>]</dt>
+
+<dd>Specifies not obfuscate the given package names. The optional filter is a
+ comma-separated list of package names. Package names can contain <b>?</b>,
+ <b>*</b>, and <b>**</b> wildcards, and they can be preceded by the
+ <b>!</b> negator. Only applicable when obfuscating.</dd>
+
+<dt><a name="flattenpackagehierarchy"><code><b>-flattenpackagehierarchy</b></code></a>
+ [<i>package_name</i>]</dt>
+
+<dd>Specifies to repackage all packages that are renamed, by moving them into
+ the single given parent package. Without argument or with an empty string
+ (''), the packages are moved into the root package. This option is one
+ example of further <a href="examples.html#repackaging">obfuscating package
+ names</a>. It can make the processed code smaller and less comprehensible.
+ Only applicable when obfuscating.</dd>
+
+<dt><a name="repackageclasses"><code><b>-repackageclasses</b></code></a>
+ [<i>package_name</i>]</dt>
+
+<dd>Specifies to repackage all class files that are renamed, by moving them
+ into the single given package. Without argument or with an empty string
+ (''), the package is removed completely. This option option overrides the
+ <a
+ href="#flattenpackagehierarchy"><code>-flattenpackagehierarchy</code></a>
+ option. It is another example of further <a
+ href="examples.html#repackaging">obfuscating package names</a>. It can
+ make the processed code even smaller and less comprehensible. Its
+ deprecated name is <code>-defaultpackage</code>. Only applicable when
+ obfuscating.
+ <p>
+ <i>Counter-indication:</i> classes that look for resource files in their
+ package directories will no longer work properly if they are moved
+ elsewhere. When in doubt, just leave the packaging untouched by not using
+ this option.</dd>
+
+<dt><a name="keepattributes"><code><b>-keepattributes</b></code></a>
+ [<i><a href="#filters">attribute_filter</a></i>]</dt>
+
+<dd>Specifies any optional attributes to be preserved. The attributes can be
+ specified with one or more <code>-keepattributes</code> directives. The
+ optional filter is a comma-separated list of attribute names. Attribute
+ names can contain <b>?</b>, <b>*</b>, and <b>**</b> wildcards, and they
+ can be preceded by the <b>!</b> negator. Typical optional attributes are
+ <code>Exceptions</code>, <code>Signature</code>, <code>Deprecated</code>,
+ <code>SourceFile</code>, <code>SourceDir</code>,
+ <code>LineNumberTable</code>, <code>LocalVariableTable</code>,
+ <code>LocalVariableTypeTable</code>, <code>Synthetic</code>,
+ <code>EnclosingMethod</code>, <code>RuntimeVisibleAnnotations</code>,
+ <code>RuntimeInvisibleAnnotations</code>,
+ <code>RuntimeVisibleParameterAnnotations</code>,
+ <code>RuntimeInvisibleParameterAnnotations</code>, and
+ <code>AnnotationDefault</code>. The <code>InnerClasses</code> attribute
+ name can be specified as well, referring to the source name part of this
+ attribute. For example, you should at least keep the
+ <code>Exceptions</code>, <code>InnerClasses</code>, and
+ <code>Signature</code> attributes
+ when <a href="examples.html#library">processing a library</a>. You should
+ also keep the <code>SourceFile</code> and
+ <code>LineNumberTable</code> attributes
+ for <a href="examples.html#stacktrace">producing useful obfuscated stack
+ traces</a>. Finally, you may want
+ to <a href="examples.html#annotations">keep annotations</a> if your code
+ depends on them. Only applicable when obfuscating.</dd>
+
+<dt><a name="keepparameternames"><code><b>-keepparameternames</b></code></a></dt>
+
+<dd>Specifies to keep the parameter names and types of methods that are kept.
+ This option actually keeps trimmed versions of the debugging attributes
+ <code>LocalVariableTable</code> and
+ <code>LocalVariableTypeTable</code>. It can be useful when
+ <a href="examples.html#library">processing a library</a>. Some IDEs can
+ use the information to assist developers who use the library, for example
+ with tool tips or autocompletion. Only applicable when obfuscating.</dd>
+
+<dt><a name="renamesourcefileattribute"><code><b>-renamesourcefileattribute</b></code></a>
+ [<i>string</i>]</dt>
+
+<dd>Specifies a constant string to be put in the <code>SourceFile</code>
+ attributes (and <code>SourceDir</code> attributes) of the class files.
+ Note that the attribute has to be present to start with, so it also has to
+ be preserved explicitly using the <code>-keepattributes</code> directive.
+ For example, you may want to have your processed libraries and
+ applications produce <a href="examples.html#stacktrace">useful obfuscated
+ stack traces</a>. Only applicable when obfuscating.</dd>
+
+<dt><a name="adaptclassstrings"><code><b>-adaptclassstrings</b></code></a>
+ [<i><a href="#filters">class_filter</a></i>]</dt>
+
+<dd>Specifies that string constants that correspond to class names should be
+ obfuscated as well. Without a filter, all string constants that correspond
+ to class names are adapted. With a filter, only string constants in
+ classes that match the filter are adapted. For example, if your code
+ contains a large number of hard-coded strings that refer to classes, and
+ you prefer not to keep their names, you may want to use this option.
+ Primarily applicable when obfuscating, although corresponding classes are
+ automatically kept in the shrinking step too.</dd>
+
+<dt><a name="adaptresourcefilenames"><code><b>-adaptresourcefilenames</b></code></a>
+ [<i><a href="#filefilters">file_filter</a></i>]</dt>
+
+<dd>Specifies the resource files to be renamed, based on the obfuscated names
+ of the corresponding class files (if any). Without a filter, all resource
+ files that correspond to class files are renamed. With a filter, only
+ matching files are renamed. For example, see <a
+ href="examples.html#resourcefiles">processing resource files</a>. Only
+ applicable when obfuscating.</dd>
+
+<dt><a name="adaptresourcefilecontents"><code><b>-adaptresourcefilecontents</b></code></a>
+ [<i><a href="#filefilters">file_filter</a></i>]</dt>
+
+<dd>Specifies the resource files whose contents are to be updated. Any class
+ names mentioned in the resource files are renamed, based on the obfuscated
+ names of the corresponding classes (if any). Without a filter, the
+ contents of all resource files updated. With a filter, only matching files
+ are updated. The resource files are parsed and written using the
+ platform's default character set. You can change this default character set
+ by setting the environment variable <code>LANG</code> or the Java system
+ property <code>file.encoding</code>. For an example,
+ see <a href="examples.html#resourcefiles">processing resource files</a>.
+ Only applicable when obfuscating.</dd>
+
+</dl>
+<p>
+
+<h2><a name="preverificationoptions">Preverification Options</a></h2>
+
+<dl>
+<dt><a name="dontpreverify"><code><b>-dontpreverify</b></code></a></dt>
+
+<dd>Specifies not to preverify the processed class files. By default, class
+ files are preverified if they are targeted at Java Micro Edition or at
+ Java 6 or higher. For Java Micro Edition, preverification is required, so
+ you will need to run an external preverifier on the processed code if you
+ specify this option. For Java 6, preverification is not required (yet),
+ but it improves the efficiency of the class loading in the Java Virtual
+ Machine.</dd>
+
+<dt><a name="microedition"><code><b>-microedition</b></code></a></dt>
+
+<dd>Specifies that the processed class files are targeted at Java Micro
+ Edition. The preverifier will then add the appropriate StackMap
+ attributes, which are different from the default StackMapTable attributes
+ for Java Standard Edition. For example, you will need this option if you
+ are <a href="examples.html#midlets">processing midlets</a>.</dd>
+
+</dl>
+<p>
+
+<h2><a name="generaloptions">General Options</a></h2>
+
+<dl>
+<dt><a name="verbose"><code><b>-verbose</b></code></a></dt>
+
+<dd>Specifies to write out some more information during processing. If the
+ program terminates with an exception, this option will print out the entire
+ stack trace, instead of just the exception message.</dd>
+
+<dt><a name="dontnote"><code><b>-dontnote</b></code></a>
+ [<i><a href="#filters">class_filter</a></i>]</dt>
+
+<dd>Specifies not to print notes about potential mistakes or omissions in the
+ configuration, like typos in class names, or like missing options that
+ might be useful. The optional filter is a regular expression; ProGuard
+ doesn't print notes about classes with matching names.</dd>
+
+<dt><a name="dontwarn"><code><b>-dontwarn</b></code></a>
+ [<i><a href="#filters">class_filter</a></i>]</dt>
+
+<dd>Specifies not to warn about unresolved references and other important
+ problems at all. The optional filter is a regular expression; ProGuard
+ doesn't print warnings about classes with matching names. Ignoring
+ warnings can be dangerous. For instance, if the unresolved classes or
+ class members are indeed required for processing, the processed code will
+ not function properly. <i>Only use this option if you know what you're
+ doing!</i></dd>
+
+<dt><a name="ignorewarnings"><code><b>-ignorewarnings</b></code></a></dt>
+
+<dd>Specifies to print any warnings about unresolved references and other
+ important problems, but to continue processing in any case. Ignoring
+ warnings can be dangerous. For instance, if the unresolved classes or
+ class members are indeed required for processing, the processed code will
+ not function properly. <i>Only use this option if you know what you're
+ doing!</i></dd>
+
+<dt><a name="printconfiguration"><code><b>-printconfiguration</b></code></a>
+ [<a href="#filename"><i>filename</i></a>]</dt>
+
+<dd>Specifies to write out the entire configuration that has been parsed, with
+ included files and replaced variables. The structure is printed to the
+ standard output or to the given file. This can sometimes be useful for
+ debugging configurations, or for converting XML configurations into a more
+ readable format.</dd>
+
+<dt><a name="dump"><code><b>-dump</b></code></a>
+ [<a href="#filename"><i>filename</i></a>]</dt>
+
+<dd>Specifies to write out the internal structure of the class files, after
+ any processing. The structure is printed to the standard output or to the
+ given file. For example, you may want to <a
+ href="examples.html#structure">write out the contents of a given jar
+ file</a>, without processing it at all.</dd>
+
+</dl>
+<p>
+
+<h2><a name="classpath">Class Paths</a></h2>
+
+ProGuard accepts a generalization of class paths to specify input files and
+output files. A class path consists of entries, separated by the traditional
+path separator (e.g. '<b>:</b>' on Unix, or '<b>;</b>' on Windows platforms).
+The order of the entries determines their priorities, in case of duplicates.
+<p>
+Each input entry can be:
+<ul>
+<li>A class file or resource file,</li>
+<li>A jar file, containing any of the above,</li>
+<li>A war file, containing any of the above,</li>
+<li>An ear file, containing any of the above,</li>
+<li>A zip file, containing any of the above,</li>
+<li>A directory (structure), containing any of the above.</li>
+</ul>
+<p>
+The paths of directly specified class files and resource files is ignored, so
+class files should generally be part of a jar file, a war file, an ear file, a
+zip file, or a directory. In addition, the paths of class files should not have
+any additional directory prefixes inside the archives or directories.
+
+<p>
+Each output entry can be:
+<ul>
+<li>A jar file, in which all processed class files and resource files will be
+ collected.</li>
+<li>A war file, in which any and all of the above will be collected,</li>
+<li>An ear file, in which any and all of the above will be collected,</li>
+<li>A zip file, in which any and all of the above will be collected,</li>
+<li>A directory, in which any and all of the above will be collected.</li>
+</ul>
+<p>
+When writing output entries, ProGuard will generally package the results in a
+sensible way, reconstructing the input entries as much as required. Writing
+everything to an output directory is the most straightforward option: the
+output directory will contain a complete reconstruction of the input entries.
+The packaging can be almost arbitrarily complex though: you could process an
+entire application, packaged in a zip file along with its documentation,
+writing it out as a zip file again. The Examples section shows a few ways
+to <a href="examples.html#restructuring">restructure output archives</a>.
+<p>
+Files and directories can be specified as discussed in the section on <a
+href="#filename">file names</a> below.
+<p>
+In addition, ProGuard provides the possibility to filter the class path
+entries and their contents, based on their full relative file names. Each
+class path entry can be followed by up to 5 types of <a
+href="#filefilters">file filters</a> between parentheses, separated by
+semi-colons:
+<ul>
+<li>A filter for all zip names that are encountered,</li>
+<li>A filter for all ear names that are encountered,</li>
+<li>A filter for all war names that are encountered,</li>
+<li>A filter for all jar names that are encountered,</li>
+<li>A filter for all class file names and resource file names that are
+ encountered.</li>
+</ul>
+<p>
+If fewer than 5 filters are specified, they are assumed to be the latter
+filters. Any empty filters are ignored. More formally, a filtered class path
+entry looks like this:
+<pre>
+<i>classpathentry</i><b>(</b>[[[[<i>zipfilter</i><b>;</b>]<i>earfilter</i><b>;</b>]<i>warfilter</i><b>;</b>]<i>jarfilter</i><b>;</b>]<i>filefilter</i><b>)</b>
+</pre>
+<p>
+Square brackets "[]" mean that their contents are optional.
+<p>
+For example, "<code>rt.jar(java/**.class,javax/**.class)</code>" matches all
+class files in the <code>java</code> and <code>javax</code> directories inside
+the <code>rt</code> jar.
+<p>
+For example, "<code>input.jar(!**.gif,images/**)</code>" matches all files in
+the <code>images</code> directory inside the <code>input</code> jar, except
+gif files.
+<p>
+Note that the different filters are applied to all corresponding file types,
+irrespective of their nesting levels in the input; they are orthogonal.
+<p>
+For example,
+"<code>input.war(lib/**.jar,support/**.jar;**.class,**.gif)</code>" only
+considers jar files in the <code>lib</code> and <code>support</code>
+directories in the <code>input</code> war, not any other jar files. It then
+matches all class files and gif files that are encountered.
+<p>
+The filters allow for an almost infinite number of packaging and repackaging
+possibilities. The Examples section provides a few more examples
+for <a href="examples.html#filtering">filtering input and output</a>.
+<p>
+
+<h2><a name="filename">File Names</a></h2>
+
+ProGuard accepts absolute paths and relative paths for the various file names
+and directory names. A relative path is interpreted as follows:
+<ul>
+<li>relative to the base directory, if set, or otherwise</li>
+<li>relative to the configuration file in which it is specified, if any, or
+ otherwise</li>
+<li>relative to the working directory.</li>
+</ul>
+<p>
+The names can contain Java system properties delimited by '<b><</b>' and
+'<b>></b>'. The system properties
+are automatically replaced by their respective values.
+<p>
+For example, <code><java.home>/lib/rt.jar</code> will automatically be
+expanded to something like <code>/usr/local/java/jdk/jre/lib/rt.jar</code>.
+Similarly, <code><user.home></code> will be expanded to the user's home
+directory, and <code><user.dir></code> will be expanded to the current
+working directory.
+<p>
+Names with special characters like spaces and parentheses must be quoted with
+single or double quotes. Note that each file name in a list of names has to be
+quoted individually. Also note that the quotes themselves may need to be
+escaped when used on the command line, to avoid them being gobbled by the
+shell.
+<p>
+For example, on the command line, you could use an option like <code>'-injars
+"my program.jar":"/your directory/your program.jar"'</code>.
+<p>
+
+<h2><a name="filefilters">File Filters</a></h2>
+
+Like general <a href="#filters">filters</a>, a file filter is a
+comma-separated list of file names that can contain wildcards. Only files with
+matching file names are read (in the case of input jars), or written (in the
+case of output jars). The following wildcards are supported:
+
+<table cellspacing="10">
+<tr><td valign="top"><code><b>?</b></code></td>
+ <td>matches any single character in a file name.</td></tr>
+<tr><td valign="top"><code><b>*</b></code></td>
+ <td>matches any part of a filename not containing the directory
+ separator.</td></tr>
+<tr><td valign="top"><code><b>**</b></code></td>
+ <td>matches any part of a filename, possibly containing any number of
+ directory separators.</td></tr>
+</table>
+
+For example, "<code>java/**.class,javax/**.class</code>" matches all
+class files in the <code>java</code> and <code>javax</code>.
+<p>
+
+Furthermore, a file name can be preceded by an exclamation mark '<b>!</b>' to
+<i>exclude</i> the file name from further attempts to match with
+<i>subsequent</i> file names.
+<p>
+For example, "<code>!**.gif,images/**</code>" matches all files in the
+<code>images</code> directory, except gif files.
+<p>
+The Examples section provides a few more examples for <a
+href="examples.html#filtering">filtering input and output</a>.
+
+<h2><a name="filters">Filters</a></h2>
+
+ProGuard offers options with filters for many different aspects of the
+configuration: names of files, directories, classes, packages, attributes,
+optimizations, etc.
+<p>
+A filter is a list of comma-separated names that can contain wildcards. Only
+names that match an item on the list pass the filter. The supported wildcards
+depend on the type of names for which the filter is being used, but the
+following wildcards are typical:
+
+<table cellspacing="10">
+<tr><td valign="top"><code><b>?</b></code></td>
+ <td>matches any single character in a name.</td></tr>
+<tr><td valign="top"><code><b>*</b></code></td>
+ <td>matches any part of a name not containing the package separator or
+ directory separator.</td></tr>
+<tr><td valign="top"><code><b>**</b></code></td>
+ <td>matches any part of a name, possibly containing any number of
+ package separators or directory separators.</td></tr>
+</table>
+
+For example, "<code>foo,*bar</code>" matches the name <code>foo</code> and
+all names ending with <code>bar</code>.
+<p>
+
+Furthermore, a name can be preceded by a negating exclamation mark '<b>!</b>'
+to <i>exclude</i> the name from further attempts to match
+with <i>subsequent</i> names. So, if a name matches an item in the filter, it
+is accepted or rejected right away, depending on whether the item has a
+negator. If the name doesn't match the item, it is tested against the next
+item, and so on. It if doesn't match any items, it is accepted or rejected,
+depending on the whether the last item has a negator or not.
+<p>
+For example, "<code>!foobar,*bar</code>" matches all names ending with
+<code>bar</code>, except <code>foobar</code>.
+<p>
+
+<h2><a name="keepoverview">Overview of <code>Keep</code> Options</a></h2>
+
+The various <code>-keep</code> options for shrinking and obfuscation may seem
+a bit confusing at first, but there's actually a pattern behind them. The
+following table summarizes how they are related:
+<p>
+
+<table cellpadding="5">
+
+<tr>
+<th>Keep</th>
+<td>From being removed or renamed</td>
+<td>From being renamed</td>
+</tr>
+
+<tr>
+<td>Classes and class members</td>
+<td bgcolor="#E0E0E0"><a href="#keep"><code>-keep</code></a></td>
+<td bgcolor="#E0E0E0"><a href="#keepnames"><code>-keepnames</code></a></td>
+</tr>
+
+<tr>
+<td>Class members only</td>
+<td bgcolor="#E0E0E0"><a href="#keepclassmembers"><code>-keepclassmembers</code></a></td>
+<td bgcolor="#E0E0E0"><a href="#keepclassmembernames"><code>-keepclassmembernames</code></a></td>
+</tr>
+
+<tr>
+<td>Classes and class members, if class members present</td>
+<td bgcolor="#E0E0E0"><a href="#keepclasseswithmembers"><code>-keepclasseswithmembers</code></a></td>
+<td bgcolor="#E0E0E0"><a href="#keepclasseswithmembernames"><code>-keepclasseswithmembernames</code></a></td>
+</tr>
+
+</table>
+<p>
+
+Each of these <code>-keep</code> options is of course followed by a
+<a href="#classspecification">specification</a> of the classes and class
+members (fields and methods) to which it should be applied.
+<p>
+If you're not sure which option you need, you should probably simply use
+<code>-keep</code>. It will make sure the specified classes and class members
+are not removed in the shrinking step, and not renamed in the obfuscation step.
+<p>
+<table>
+<tr><td valign="top">
+<img src="attention.gif" width="64" height="64"alt="attention" />
+</td><td>
+Always remember:
+<ul>
+<li>Specifying a class without class members only preserves the class as an
+ entry point — any class members may then still be removed, optimized,
+ or obfuscated.</li>
+<li>Specifying a class member only preserves the class member as an entry
+ point — any associated code may still be optimized and adapted.</li>
+</ul>
+</td></tr>
+</table>
+<p>
+
+<h2><a name="keepoptionmodifiers">Keep Option Modifiers</a></h2>
+
+<dl>
+<dt><a name="allowshrinking"><code><b>allowshrinking</b></code></a></dt>
+
+<dd>Specifies that the entry points specified in the <a href="#keep">-keep</a>
+ option may be shrunk, even if they have to be preserved otherwise. That
+ is, the entry points may be removed in the shrinking step, but if they are
+ necessary after all, they may not be optimized or obfuscated.</dd>
+
+<dt><a name="allowoptimization"><code><b>allowoptimization</b></code></a></dt>
+
+<dd>Specifies that the entry points specified in the <a href="#keep">-keep</a>
+ option may be optimized, even if they have to be preserved otherwise. That
+ is, the entry points may be altered in the optimization step, but they may
+ not be removed or obfuscated. This modifier is only useful for achieving
+ unusual requirements.</dd>
+
+<dt><a name="allowobfuscation"><code><b>allowobfuscation</b></code></a></dt>
+
+<dd>Specifies that the entry points specified in the <a href="#keep">-keep</a>
+ option may be obfuscated, even if they have to be preserved otherwise. That
+ is, the entry points may be renamed in the obfuscation step, but they may
+ not be removed or optimized. This modifier is only useful for achieving
+ unusual requirements.</dd>
+
+</dl>
+<p>
+
+<h2><a name="classspecification">Class Specifications</a></h2>
+
+A class specification is a template of classes and class members (fields and
+methods). It is used in the various <code>-keep</code> options and in the
+<code>-assumenosideeffects</code> option. The corresponding option is only
+applied to classes and class members that match the template.
+<p>
+The template was designed to look very Java-like, with some extensions for
+wildcards. To get a feel for the syntax, you should probably look at the <a
+href="examples.html">examples</a>, but this is an attempt at a complete formal
+definition:
+<p>
+
+<pre>
+[<b>@</b><i>annotationtype</i>] [[<b>!</b>]<b>public</b>|<b>final</b>|<b>abstract</b>|<b>@</b> ...] [<b>!</b>]<b>interface</b>|<b>class</b>|<b>enum</b> <i>classname</i>
+ [<b>extends</b>|<b>implements</b> [<b>@</b><i>annotationtype</i>] <i>classname</i>]
+[<b>{</b>
+ [<b>@</b><i>annotationtype</i>] [[<b>!</b>]<b>public</b>|<b>private</b>|<b>protected</b>|<b>static</b>|<b>volatile</b>|<b>transient</b> ...] <b><fields></b> |
+ (<i>fieldtype fieldname</i>)<b>;</b>
+ [<b>@</b><i>annotationtype</i>] [[<b>!</b>]<b>public</b>|<b>private</b>|<b>protected</b>|<b>static</b>|<b>synchronized</b>|<b>native</b>|<b>abstract</b>|<b>strictfp</b> ...] <b><methods></b> |
+ <b><init>(</b><i>argumenttype,...</i><b>)</b> |
+ <i>classname</i><b>(</b><i>argumenttype,...</i><b>)</b> |
+ (<i>returntype methodname</i><b>(</b><i>argumenttype,...</i><b>)</b>)<b>;</b>
+ [<b>@</b><i>annotationtype</i>] [[<b>!</b>]<b>public</b>|<b>private</b>|<b>protected</b>|<b>static</b> ... ] <b>*;</b>
+ ...
+<b>}</b>]
+</pre>
+<p>
+Square brackets "[]" mean that their contents are optional. Ellipsis dots
+"..." mean that any number of the preceding items may be specified. A vertical
+bar "|" delimits two alternatives. Non-bold parentheses "()" just group parts
+of the specification that belong together. The indentation tries to clarify
+the intended meaning, but white-space is irrelevant in actual configuration
+files.
+<p>
+<ul class="spacious">
+
+<li>The <code><b>class</b></code> keyword refers to any interface or class.
+ The <code><b>interface</b></code> keyword restricts matches to interface
+ classes. The <code><b>enum</b></code> keyword restricts matches to
+ enumeration classes. Preceding the <code><b>interface</b></code> or
+ <code><b>enum</b></code> keywords by a <code><b>!</b></code> restricts
+ matches to classes that are not interfaces or enumerations,
+ respectively.</li>
+
+<li>Every <i>classname</i> must be fully qualified, e.g.
+ <code>java.lang.String</code>. Class names may be specified as regular
+ expressions containing the following wildcards:
+
+<table cellspacing="10">
+
+<tr><td valign="top"><code><b>?</b></code></td>
+
+<td>matches any single character in a class name, but not the package
+ separator. For example, "<code>mypackage.Test?</code>" matches
+ "<code>mypackage.Test1</code>" and "<code>mypackage.Test2</code>", but not
+ "<code>mypackage.Test12</code>".</td></tr>
+
+<tr><td valign="top"><code><b>*</b></code></td>
+
+<td>matches any part of a class name not containing the package separator. For
+ example, "<code>mypackage.*Test*</code>" matches
+ "<code>mypackage.Test</code>" and
+ "<code>mypackage.YourTestApplication</code>", but not
+ "<code>mypackage.mysubpackage.MyTest</code>". Or, more generally,
+ "<code>mypackage.*</code>" matches all classes in
+ "<code>mypackage</code>", but not in its subpackages.</td></tr>
+
+<tr><td valign="top"><code><b>**</b></code></td>
+
+<td>matches any part of a class name, possibly containing any number of
+ package separators. For example, "<code>**.Test</code>" matches all
+ <code>Test</code> classes in all packages except the root package. Or,
+ "<code>mypackage.**</code>" matches all classes in
+ "<code>mypackage</code>" and in its subpackages.</td></tr>
+
+</table>
+
+ For additional flexibility, class names can actually be comma-separated
+ lists of class names, with optional <code><b>!</b></code> negators, just
+ like file name filters. This notation doesn't look very Java-like, so it
+ should be used with moderation.
+ <p>
+ For convenience and for backward compatibility, the class name
+ <code><b>*</b></code> refers to any class, irrespective of its package.</li>
+
+<li>The <code><b>extends</b></code> and <code><b>implements</b></code>
+ specifications are typically used to restrict classes with wildcards. They
+ are currently equivalent, specifying that only classes extending or
+ implementing the given class qualify. Note that the given class itself is
+ not included in this set. If required, it should be specified in a
+ separate option.</li>
+
+<li>The <code><b>@</b></code> specifications can be used to restrict classes
+ and class members to the ones that are annotated with the specified
+ annotation types. An <i>annotationtype</i> is specified just like a
+ <i>classname</i>.</li>
+
+<li>Fields and methods are specified much like in Java, except that method
+ argument lists don't contain argument names (just like in other tools
+ like <code>javadoc</code> and <code>javap</code>). The specifications can
+ also contain the following catch-all wildcards:
+
+<table cellspacing="10">
+
+<tr><td valign="top"><code><b><init></b></code></td>
+<td>matches any constructor.</td></tr>
+
+<tr><td valign="top"><code><b><fields></b></code></td>
+<td>matches any field.</td></tr>
+
+<tr><td valign="top"><code><b><methods></b></code></td>
+<td>matches any method.</td></tr>
+
+<tr><td valign="top"><code><b>*</b></code></td>
+<td>matches any field or method.</td></tr>
+
+</table>
+
+ Note that the above wildcards don't have return types. Only the
+ <code><b><init></b></code> wildcard has an argument list.
+ <p>
+
+ Fields and methods may also be specified using regular expressions. Names
+ can contain the following wildcards:
+
+<table cellspacing="10">
+<tr><td valign="top"><code><b>?</b></code></td>
+ <td>matches any single character in a method name.</td></tr>
+<tr><td valign="top"><code><b>*</b></code></td>
+ <td>matches any part of a method name.</td></tr>
+</table>
+
+ Types in descriptors can contain the following wildcards:
+
+<table cellspacing="10">
+<tr><td valign="top"><code><b>%</b></code></td>
+ <td>matches any primitive type ("<code>boolean</code>", "<code>int</code>",
+ etc, but not "<code>void</code>").</td></tr>
+<tr><td valign="top"><code><b>?</b></code></td>
+ <td>matches any single character in a class name.</td></tr>
+<tr><td valign="top"><code><b>*</b></code></td>
+ <td>matches any part of a class name not containing the package separator.</td></tr>
+<tr><td valign="top"><code><b>**</b></code></td>
+ <td>matches any part of a class name, possibly containing any number of
+ package separators.</td></tr>
+<tr><td valign="top"><code><b>***</b></code></td>
+ <td>matches any type (primitive or non-primitive, array or
+ non-array).</td></tr>
+<tr><td valign="top"><code><b>...</b></code></td>
+ <td>matches any number of arguments of any type.</td></tr>
+
+</table>
+
+ Note that the <code>?</code>, <code>*</code>, and <code>**</code>
+ wildcards will never match primitive types. Furthermore, only the
+ <code>***</code> wildcards will match array types of any dimension. For
+ example, "<code>** get*()</code>" matches "<code>java.lang.Object
+ getObject()</code>", but not "<code>float getFloat()</code>", nor
+ "<code>java.lang.Object[] getObjects()</code>".</li>
+
+<li>Constructors can also be specified using their short class names (without
+ package) or using their full class names. As in the Java language, the
+ constructor specification has an argument list, but no return type.</li>
+
+<li>The class access modifiers and class member access modifiers are typically
+ used to restrict wildcarded classes and class members. They specify that
+ the corresponding access flags have to be set for the member to match. A
+ preceding <code><b>!</b></code> specifies that the corresponding access
+ flag should be unset.
+ <p>
+ Combining multiple flags is allowed (e.g. <code>public static</code>). It
+ means that both access flags have to be set (e.g. <code>public</code>
+ <i>and</i> <code>static</code>), except when they are conflicting, in
+ which case at least one of them has to be set (e.g. at least
+ <code>public</code>
+ <i>or</i> <code>protected</code>).
+ <p>
+ ProGuard supports the additional modifiers <code><b>synthetic</b></code>,
+ <code><b>bridge</b></code>, and <code><b>varargs</b></code>, which may be
+ set by compilers.</li>
+
+</ul>
+
+<hr />
+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/manual/wtk.html b/common/proguard/proguard4.7/docs/manual/wtk.html
new file mode 100644
index 0000000..196b9ca
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/manual/wtk.html
@@ -0,0 +1,70 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard JME Wireless Toolkit Integration</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("../index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>JME Wireless Toolkit Integration</h2>
+
+<b>ProGuard</b> can be seamlessly integrated in Oracle's Wireless Toolkit (WTK)
+for Java Micro Edition (JME).
+<p>
+
+The WTK already comes with a plug-in for ProGuard. Alternatively, ProGuard
+offers its own plug-in. This latter implementation is recommended, as it more
+up to date and it solves some problems. It is also somewhat more efficient,
+invoking the ProGuard engine directly, instead of writing out a configuration
+file and running ProGuard in a separate virtual machine.
+<p>
+
+In order to integrate this plug-in in the toolkit, you'll have to put the
+following lines in the file
+{j2mewtk.dir}<code>/wtklib/Linux/ktools.properties</code> or
+{j2mewtk.dir}<code>\wtklib\Windows\ktools.properties</code> (whichever is
+applicable).
+<p>
+
+<pre>
+obfuscator.runner.class.name: proguard.wtk.ProGuardObfuscator
+obfuscator.runner.classpath: /usr/local/java/proguard/lib/proguard.jar
+</pre>
+<p>
+
+Please make sure the class path is set correctly for your system.
+<p>
+
+Once ProGuard has been set up, you can apply it to your projects as part of
+the build process. The build process is started from the WTK menu bar:
+<p>
+<center><b>Project -> Package -> Create Obfuscated Package</b></center>
+<p>
+This option will compile, shrink, obfuscate, verify, and install your midlets
+for testing.
+<p>
+Should you ever need to customize your ProGuard configuration for the JME WTK,
+you can adapt the configuration file <code>proguard/wtk/default.pro</code>
+that's inside the <code>proguard.jar</code>.
+
+<hr />
+<noscript><div><a target="_top" href="../index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/quality.html b/common/proguard/proguard4.7/docs/quality.html
new file mode 100644
index 0000000..a8bbf05
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/quality.html
@@ -0,0 +1,56 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Quality</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Quality</h2>
+
+In order to get a feel for the quality of the <b>ProGuard</b> code, it is run
+through a regular automatic build process. This process produces numerous
+statistics on the source code, Java lint comments, Java documentation
+comments, the Java documentation itself, html lint comments on the Java
+documentation, spell checks, compilation results, an output jar, dead code
+analysis, a shrunk and obfuscated jar (using ProGuard itself!), test runs with
+memory and performance analyses, etc. Most analyses are produced using freely
+available tools. The results are poured into a convenient set of web pages
+using bash/sed/awk scripts. You're welcome to have a look at an uploaded
+snapshot of one of these runs:
+<p>
+<center><a href="http://proguard.sourceforge.net/quality/"
+target="other">Automated Code Analysis and Testing Pages</a> (at <a
+href="http://sourceforge.net/projects/proguard/"
+target="other">SourceForge</a>)</center>
+<p>
+The pages will appear in a new window, which you probably want to view at
+full-screen size.
+<p>
+
+In addition, <b>ProGuard</b> is tested against a constantly growing test suite
+(more than 900 tests at this time of writing). These small programs contain a
+wide range of common and uncommon constructs, in order to detect any regression
+problems as soon as possible.
+
+<hr />
+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/results.html b/common/proguard/proguard4.7/docs/results.html
new file mode 100644
index 0000000..ca833ac
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/results.html
@@ -0,0 +1,170 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Results</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+<title>ProGuard Results</title>
+</head>
+<body>
+
+<h2>Results</h2>
+
+<b>ProGuard</b> successfully processes any Java bytecode, ranging from small
+midlets to entire run-time libraries. It primarily reduces the size of the
+processed code, with some potential increase in efficiency as an added bonus.
+The improvements obviously depend on the original code. The table below
+presents some typical results:
+<p>
+
+<table>
+
+<tr>
+<th width="28%">Input Program</th>
+<th width="12%">Original size</th>
+<th width="12%">After shrinking</th>
+<th width="12%">After optim.</th>
+<th width="12%">After obfusc.</th>
+<th width="12%">Total reduction</th>
+<th width="12%">Time</th>
+<th width="12%">Memory usage</th>
+</tr>
+
+<tr>
+<td><a target="other" href="http://www.oracle.com/technetwork/java/javame/">Worm</a>, a sample midlet from Oracle's JME</td>
+<td align="center">10.3 K</td>
+<td align="center">9.8 K</td>
+<td align="center">9.6 K</td>
+<td align="center">8.5 K</td>
+<td align="center">18 %</td>
+<td align="center">2 s</td>
+<td align="center">19 M</td>
+</tr>
+
+<tr>
+<td><a target="other" href="http://www.javadocking.com/">Javadocking</a>, a docking library</td>
+<td align="center">290 K</td>
+<td align="center">281 K</td>
+<td align="center">270 K</td>
+<td align="center">201 K</td>
+<td align="center">30 %</td>
+<td align="center">12 s</td>
+<td align="center">32 M</td>
+</tr>
+
+<tr>
+<td><b>ProGuard</b> itself</td>
+<td align="center">648 K</td>
+<td align="center">579 K</td>
+<td align="center">557 K</td>
+<td align="center">348 K</td>
+<td align="center">46 %</td>
+<td align="center">28 s</td>
+<td align="center">66 M</td>
+</tr>
+
+<tr>
+<td><a target="other" href="http://www.clarkware.com/software/JDepend.html">JDepend</a>, a Java quality metrics tool</td>
+<td align="center">57 K</td>
+<td align="center">36 K</td>
+<td align="center">33 K</td>
+<td align="center">28 K</td>
+<td align="center">51 %</td>
+<td align="center">6 s</td>
+<td align="center">24 M</td>
+</tr>
+
+<tr>
+<td><a target="other" href="http://java.sun.com/javase/6/">the run-time classes</a> from Oracle's Java 6</td>
+<td align="center">53 M</td>
+<td align="center">23 M</td>
+<td align="center">22 M</td>
+<td align="center">18 M</td>
+<td align="center">66 %</td>
+<td align="center">16 min</td>
+<td align="center">270 M</td>
+</tr>
+
+<tr>
+<td><a target="other" href="http://tomcat.apache.org/">Tomcat</a>, the Apache servlet container</td>
+<td align="center">1.1 M</td>
+<td align="center">466 K</td>
+<td align="center">426 K</td>
+<td align="center">295 K</td>
+<td align="center">74 %</td>
+<td align="center">17 s</td>
+<td align="center">44 M</td>
+</tr>
+
+<tr>
+<td><a target="other" href="http://javancss.codehaus.org/">JavaNCSS</a>, a Java source metrics tool</td>
+<td align="center">632 K</td>
+<td align="center">242 K</td>
+<td align="center">212 K</td>
+<td align="center">152 K</td>
+<td align="center">75 %</td>
+<td align="center">20 s</td>
+<td align="center">36 M</td>
+</tr>
+
+<tr>
+<td><a target="other" href="http://ant.apache.org/">Ant</a>, the Apache build tool</td>
+<td align="center">2.4 M</td>
+<td align="center">401 K</td>
+<td align="center">325 K</td>
+<td align="center">242 K</td>
+<td align="center">90 %</td>
+<td align="center">23 s</td>
+<td align="center">61 M</td>
+</tr>
+
+</table>
+<p>
+Results were measured with ProGuard 4.0 on a 2.6 GHz Pentium 4 with 512 MB
+of memory, using Sun JDK 1.5.0 in Fedora Core 3 Linux. All of this technology
+and software has evolved since, but the gist of the results remains the same.
+<p>
+The program sizes include companion libraries. The shrinking step produces the
+best results for programs that use only small parts of their libraries. The
+obfuscation step can significantly shrink large programs even further, since
+the identifiers of their many internal references can be replaced by short
+identifiers.
+<p>
+The Java 6 run-time classes are the most complex example. The classes perform
+a lot of introspection, interacting with the native code of the virtual
+machine. The 1500+ lines of configuration were largely composed by automated
+analysis, complemented by a great deal of trial and error. The configuration
+is probably not complete, but the resulting library successfully serves as a
+run-time environment for running applications like ProGuard and the ProGuard
+GUI.
+<p>
+For small inputs, timings are governed by the reading and parsing of the jars.
+For large inputs, the optimization step becomes more important. For instance,
+processing the Java 6 run-time classes without optimization only takes 2
+minutes.
+<p>
+Memory usage (the amount of physical memory used by ProGuard while processing)
+is governed by the basic java virtual machine and by the total size of the
+library jars and program jars.
+
+<hr />
+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/saikoalogo.png b/common/proguard/proguard4.7/docs/saikoalogo.png
new file mode 100644
index 0000000..5b34172
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/saikoalogo.png
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/screenshot_console.gif b/common/proguard/proguard4.7/docs/screenshot_console.gif
new file mode 100644
index 0000000..8aea61e
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/screenshot_console.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/screenshot_console_small.gif b/common/proguard/proguard4.7/docs/screenshot_console_small.gif
new file mode 100644
index 0000000..3f55f5b
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/screenshot_console_small.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/screenshot_gui1.gif b/common/proguard/proguard4.7/docs/screenshot_gui1.gif
new file mode 100644
index 0000000..233e180
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/screenshot_gui1.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/screenshot_gui2.gif b/common/proguard/proguard4.7/docs/screenshot_gui2.gif
new file mode 100644
index 0000000..aecdb35
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/screenshot_gui2.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/screenshot_gui3.gif b/common/proguard/proguard4.7/docs/screenshot_gui3.gif
new file mode 100644
index 0000000..17950ee
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/screenshot_gui3.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/screenshot_gui4.gif b/common/proguard/proguard4.7/docs/screenshot_gui4.gif
new file mode 100644
index 0000000..31e60fa
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/screenshot_gui4.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/screenshot_gui5.gif b/common/proguard/proguard4.7/docs/screenshot_gui5.gif
new file mode 100644
index 0000000..1313db2
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/screenshot_gui5.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/screenshot_gui6.gif b/common/proguard/proguard4.7/docs/screenshot_gui6.gif
new file mode 100644
index 0000000..c200b97
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/screenshot_gui6.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/screenshot_gui7.gif b/common/proguard/proguard4.7/docs/screenshot_gui7.gif
new file mode 100644
index 0000000..bc5d6ed
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/screenshot_gui7.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/screenshot_gui8.gif b/common/proguard/proguard4.7/docs/screenshot_gui8.gif
new file mode 100644
index 0000000..95a1a30
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/screenshot_gui8.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/screenshots.html b/common/proguard/proguard4.7/docs/screenshots.html
new file mode 100644
index 0000000..64805a9
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/screenshots.html
@@ -0,0 +1,67 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Screenshots</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Screenshots</h2>
+
+<table><tr><td>
+<a href="screenshot_gui1.gif" target="other">
+<img src="screenshots_gui_small.gif" width="320" height="223" align="right"
+ alt="GUI screenshot" usemap="#guimap" /></a>
+
+<map id="guimap" name="guimap">
+<area shape="rect" coords="2,7,46,16" alt="ProGuard" href="screenshot_gui1.gif" target="other">
+<area shape="rect" coords="2,17,46,27" alt="Input/Output" href="screenshot_gui2.gif" target="other">
+<area shape="rect" coords="2,28,46,37" alt="Shrinking" href="screenshot_gui3.gif" target="other">
+<area shape="rect" coords="2,38,46,48" alt="Optimization" href="screenshot_gui4.gif" target="other">
+<area shape="rect" coords="2,49,46,58" alt="Obfuscation" href="screenshot_gui5.gif" target="other">
+<area shape="rect" coords="2,59,46,69" alt="Information" href="screenshot_gui6.gif" target="other">
+<area shape="rect" coords="2,70,46,79" alt="Process" href="screenshot_gui7.gif" target="other">
+<area shape="rect" coords="2,80,46,90" alt="ReTrace" href="screenshot_gui8.gif" target="other">
+</map>
+
+The graphical user interface to <b>ProGuard</b> works like a wizard. It allows
+you to browse through the presented tabs and fill them out.
+<p>
+You can click on the small tab buttons to see the full-size versions of the
+tabs.
+
+</td></tr>
+<tr><td>
+<a href="screenshot_console.gif" target="other">
+<img src="screenshot_console_small.gif" width="320" height="268" align="left"
+ alt="Console screenshot" /></a>
+
+Of course, real developers don't need all this point-and-click fluff. They
+write short configuration files using their favorite text editors and invoke
+<b>ProGuard</b> from the command-line.
+<p>
+You can click on the image to see the full-size version.
+
+</td></tr></table>
+
+<hr />
+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/screenshots_gui_small.gif b/common/proguard/proguard4.7/docs/screenshots_gui_small.gif
new file mode 100644
index 0000000..bc32ccb
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/screenshots_gui_small.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/sections.html b/common/proguard/proguard4.7/docs/sections.html
new file mode 100644
index 0000000..622277a
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/sections.html
@@ -0,0 +1,64 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-script-type" content="text/javascript">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>Sections</title>
+</head>
+<body class="navigation">
+
+<ul class="navigation">
+<li><a target="main" href="main.html">Main</a></li>
+<li><a target="main" href="results.html">Results</a></li>
+<li><a target="main" href="FAQ.html">FAQ</a></li>
+<li><a href="manual/sections.html">Manual</a></li>
+<li><a target="main" href="quality.html">Quality</a></li>
+<li><a target="main" href="screenshots.html">Screenshots</a></li>
+<li><a target="main" href="testimonials.html">Testimonials</a></li>
+<li><a target="main" href="license.html">License</a></li>
+<li><a target="main" href="downloads.html">Downloads</a></li>
+<li><a target="main" href="feedback.html">Feedback</a></li>
+<li><a target="main" href="acknowledgements.html">Ack'ments</a></li>
+<li><a target="main" href="alternatives.html">Alternatives</a></li>
+</ul>
+
+<p>
+<center>
+<small>With support of</small>
+<p>
+
+<a href="http://sourceforge.net/projects/proguard/" target="other">
+
+<script type="text/javascript" language="JavaScript">
+<!--
+document.write("<img src=\"");
+document.write(document.location.hostname == "proguard.sourceforge.net" ?
+ "http://sourceforge.net/sflogo.php?group_id=54750&type=1" :
+ "sflogo.png");
+document.write("\" width=\"88\" height=\"31\" alt=\"SourceForge\" />");
+//-->
+</script>
+<noscript>
+<img src="sflogo.png" width="88" height="31" alt="SourceForge" />
+</noscript>
+
+</a>
+
+<p>
+<a href="http://www.saikoa.com/" target="_top">
+<img src="saikoalogo.png" width="88" height="19" alt="Saikoa" /></a>
+</center>
+
+<script type="text/javascript">
+base = "http://sourceforge.net/apps/piwik/proguard/";
+if (document.location.hostname == "proguard.sourceforge.net")
+ document.write(unescape("%3Cscript src='"+base+"piwik.js' type='text/javascript'%3E%3C/script%3E"));
+</script><script type="text/javascript">
+if (document.location.hostname == "proguard.sourceforge.net")
+ piwik_log('', 1, base+"piwik.php");
+</script>
+
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/sflogo.png b/common/proguard/proguard4.7/docs/sflogo.png
new file mode 100644
index 0000000..142a6f9
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/sflogo.png
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/steel.gif b/common/proguard/proguard4.7/docs/steel.gif
new file mode 100644
index 0000000..307b57a
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/steel.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/style.css b/common/proguard/proguard4.7/docs/style.css
new file mode 100644
index 0000000..dd8418d
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/style.css
@@ -0,0 +1,223 @@
+
+@charset "iso-8859-1";
+
+/* Global settings. */
+
+body
+{
+ background: #FFFFFF;
+}
+
+h1
+{
+ text-align: center;
+}
+
+h2
+{
+ text-align: center;
+}
+
+h3
+{
+ background: #EEEEFF;
+ padding: 10px;
+}
+
+h3 div
+{
+ font-weight: normal;
+ font-size: 80%;
+ float: right;
+}
+
+table
+{
+ width: 100%;
+}
+
+th
+{
+ padding: 4px;
+}
+
+tr.disappeared td
+{
+ background: #EEEEEE;
+}
+
+td
+{
+ background: #EEEEFF;
+ padding: 8px;
+}
+
+ul.spacious li
+{
+ padding: 8px;
+}
+
+a
+{
+ text-decoration: none;
+}
+
+img
+{
+ border: none;
+}
+
+a.button {
+ color: #000000;
+ text-decoration: none;
+ background: #E0E0E0;
+ border: 1px outset #FFFFFF;
+ float: right;
+}
+
+/* Settings for the introductory paragraph. */
+
+p.intro
+{
+ background: #EEEEFF;
+ padding: 10px;
+ border: 1px solid #000000;
+}
+
+/* Settings for the title frame. */
+
+body.title
+{
+ margin: 0px;
+ padding: 0px;
+ background: #C0C0C0;
+}
+
+div.title
+{
+ height: 48px;
+ margin: 0px;
+ padding: 0px;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #FFFFFF #808080 #808080 #FFFFFF;
+ background: url("steel.gif");
+}
+
+div.title h1
+{
+ margin: 0px;
+ padding: 0px;
+ padding-top: 8px;
+ padding-left: 40%;
+ float: left;
+}
+
+div.title div
+{
+ margin: 0px;
+ padding: 0px;
+ padding-top: 12px;
+ padding-right: 20px;
+ float: right;
+}
+
+/* Settings for the section frames. */
+
+body.navigation
+{
+ margin: 0px;
+ padding: 0px;
+}
+
+ul.navigation
+{
+ margin: 0px;
+ padding: 0px;
+ list-style: none;
+ text-align: center;
+ background: url("steel.gif");
+}
+
+ul.navigation li
+{
+ margin: 0px;
+ padding: 0px;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #FFFFFF #808080 #808080 #FFFFFF;
+ color: #000000;
+ font-weight: bold;
+}
+
+ul.navigation li.title
+{
+ margin: 0px;
+ padding: 4px 10px;
+ background: #E0E0E0;
+}
+
+ul.navigation li a
+{
+ margin: 0px;
+ padding: 6px 0px;
+ background: transparent;
+ color: #000000;
+ text-decoration: none;
+ display: block;
+}
+
+ul.navigation li a:hover,
+ul.navigation li a:focus
+{
+ background: #FFFFFF;
+}
+
+/* Settings for the yellow note tables. */
+
+table.note
+{
+ width: 408px;
+ border: none;
+ border-spacing: 0px;
+}
+
+td.shadow8
+{
+ width: 8px;
+ padding: 0px;
+ margin: 0px;
+ vertical-align: bottom;
+ background: transparent;
+}
+
+td.shadow400
+{
+ width: 400px;
+ padding: 0px;
+ margin: 0px;
+ text-align: right;
+ background: transparent;
+}
+
+td.note
+{
+ width: 380px;
+ background: #FFFFC0;
+ padding: 0px;
+ margin: 0px;
+}
+
+p.note
+{
+ padding: 0px;
+ margin: 0px 10px;
+ text-align: center;
+}
+
+p.author
+{
+ padding: 0px;
+ margin: 0px 10px;
+ text-align: right;
+}
diff --git a/common/proguard/proguard4.7/docs/testimonials.html b/common/proguard/proguard4.7/docs/testimonials.html
new file mode 100644
index 0000000..d37ddcd
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/testimonials.html
@@ -0,0 +1,133 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard Testimonials</title>
+<script type="text/javascript" language="JavaScript">
+<!--
+if (window.self==window.top)
+ window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
+else {
+ var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
+ if (window.top.location.hash!=hash)
+ window.top.location.hash=hash;
+}
+//-->
+</script>
+</head>
+<body>
+
+<h2>Testimonials</h2>
+
+And now for some shameless self-glorification and name-dropping...
+<p>
+<b>ProGuard</b> is probably the most popular java shrinker, optimizer, and
+obfuscator world-wide. It is being used by developers at companies and
+organizations like IBM, HP, Siemens, Nokia, Google, and NATO. It is the
+default tool in many development environments like Oracle's Wireless Toolkit,
+Netbeans, EclipseME, Google's Android SDK, and more. Although the quotes below
+probably don't represent official views of any kind, encouragements like these
+do keep me happy.
+<p>
+
+<center><table class="note">
+<tr><td class="note"><p class="note"><cite>
+ProGuard is <b>the</b> ultimate java obfuscator!
+</cite></p>
+<p class="author">P.S, IBM</p></td>
+<td class="shadow8"><img src="drop2.gif" width="8" height="100" /></td></tr><tr>
+<td class="shadow400"><img src="drop1.gif" width="400" height="8" /></td>
+<td class="shadow8"><img src="drop3.gif" width="8" height="8" /></td>
+</tr></table></center>
+<p>
+
+Also:
+<center><table class="note">
+<tr><td class="note"><p class="note"><cite>
+ProGuard is pure quality - powerful and trouble-free.
+</cite></p>
+<p class="author">M.B., Statestep</p></td>
+<td class="shadow8"><img src="drop2.gif" width="8" height="100" /></td></tr><tr>
+<td class="shadow400"><img src="drop1.gif" width="400" height="8" /></td>
+<td class="shadow8"><img src="drop3.gif" width="8" height="8" /></td>
+</tr></table></center>
+<p>
+
+And:
+<center><table class="note">
+<tr><td class="note"><p class="note"><cite>
+It is the simplest and most robust obfuscator we have ever used.
+</cite></p>
+<p class="author">I.I., Hewlett-Packard</p></td>
+<td class="shadow8"><img src="drop2.gif" width="8" height="100" /></td></tr><tr>
+<td class="shadow400"><img src="drop1.gif" width="400" height="8" /></td>
+<td class="shadow8"><img src="drop3.gif" width="8" height="8" /></td>
+</tr></table></center>
+<p>
+
+And indeed:
+<center><table class="note">
+<tr><td class="note"><p class="note"><cite>
+ProGuard rules. Much easier to use than the commercial alternatives.
+</cite></p>
+<p class="author">B.G., Quiotix Corp.</p></td>
+<td class="shadow8"><img src="drop2.gif" width="8" height="100" /></td></tr><tr>
+<td class="shadow400"><img src="drop1.gif" width="400" height="8" /></td>
+<td class="shadow8"><img src="drop3.gif" width="8" height="8" /></td>
+</tr></table></center>
+<p>
+
+Straight from <b>ProGuard</b>'s open discussion forum:
+<p>
+<center><table class="note">
+<tr><td class="note"><p class="note"><cite>
+After searching for, trying to trial, and futzing with numerous other
+obfuscators and shrinkers, ProGuard stands out as the simplest, most robust,
+and accurate shrinker of them all.
+</cite></p>
+<p class="author">D.J., Joot</p></td>
+<td class="shadow8"><img src="drop2.gif" width="8" height="100" /></td></tr><tr>
+<td class="shadow400"><img src="drop1.gif" width="400" height="8" /></td>
+<td class="shadow8"><img src="drop3.gif" width="8" height="8" /></td>
+</tr></table></center>
+<p>
+
+From the article "Obfuscating MIDlet Suites with ProGuard" at <a
+target="other" href="http://developers.sun.com/">developers.sun.com</a>:
+<p>
+<center><table class="note">
+<tr><td class="note"><p class="note"><cite>
+Its friendly license, attractive price tag, compelling performance, and
+powerful configuration options make it an excellent addition to your MIDlet
+development toolbox.
+</cite></p>
+<p class="author">J.K., Sun</p></td>
+<td class="shadow8"><img src="drop2.gif" width="8" height="100" /></td></tr><tr>
+<td class="shadow400"><img src="drop1.gif" width="400" height="8" /></td>
+<td class="shadow8"><img src="drop3.gif" width="8" height="8" /></td>
+</tr></table></center>
+<p>
+
+And, of course, the price is stunning:
+<p>
+<center><table class="note">
+<tr><td class="note"><p class="note"><cite>
+You could've been rich.
+</cite></p>
+<p class="author">My mother</p></td>
+<td class="shadow8"><img src="drop2.gif" width="8" height="100" /></td></tr><tr>
+<td class="shadow400"><img src="drop1.gif" width="400" height="8" /></td>
+<td class="shadow8"><img src="drop3.gif" width="8" height="8" /></td>
+</tr></table></center>
+
+<hr />
+<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
+<address>
+Copyright © 2002-2011
+<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
+</address>
+
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/docs/title.gif b/common/proguard/proguard4.7/docs/title.gif
new file mode 100644
index 0000000..5e6ca26
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/title.gif
Binary files differ
diff --git a/common/proguard/proguard4.7/docs/title.html b/common/proguard/proguard4.7/docs/title.html
new file mode 100644
index 0000000..50838b1
--- /dev/null
+++ b/common/proguard/proguard4.7/docs/title.html
@@ -0,0 +1,17 @@
+<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="content-style-type" content="text/css">
+<link rel="stylesheet" type="text/css" href="style.css">
+<title>ProGuard</title>
+</head>
+<body class="title">
+
+<div class="title">
+<h1><img src="title.gif" width="154" height="29" alt="ProGuard" /></h1>
+<div>Version 4.7</div>
+</div>
+
+</body>
+</html>
diff --git a/common/proguard/proguard4.7/examples/android.pro b/common/proguard/proguard4.7/examples/android.pro
new file mode 100644
index 0000000..a502a2b
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/android.pro
@@ -0,0 +1,149 @@
+#
+# This ProGuard configuration file illustrates how to process Android
+# applications.
+# Usage:
+# java -jar proguard.jar @android.pro
+#
+# If you're using the Android SDK (version 2.3 or higher), the android tool
+# already creates a file like this in your project, called proguard.cfg.
+# It should contain the settings of this file, minus the input and output paths
+# (-injars, -outjars, -libraryjars, -printmapping, and -printseeds).
+# The generated Ant build file automatically sets these paths.
+
+# Specify the input jars, output jars, and library jars.
+# Note that ProGuard works with Java bytecode (.class),
+# before the dex compiler converts it into Dalvik code (.dex).
+
+-injars bin/classes
+-injars libs
+-outjars bin/classes-processed.jar
+
+-libraryjars /usr/local/android-sdk/platforms/android-9/android.jar
+#-libraryjars /usr/local/android-sdk/add-ons/google_apis-7_r01/libs/maps.jar
+# ...
+
+# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
+# traces later on.
+
+-printmapping bin/classes-processed.map
+
+# You can print out the seeds that are matching the keep options below.
+
+#-printseeds bin/classes-processed.seeds
+
+# Preverification is irrelevant for the dex compiler and the Dalvik VM.
+
+-dontpreverify
+
+# Reduce the size of the output some more.
+
+-repackageclasses ''
+-allowaccessmodification
+
+# Switch off some optimizations that trip older versions of the Dalvik VM.
+
+-optimizations !code/simplification/arithmetic
+
+# Keep a fixed source file attribute and all line number tables to get line
+# numbers in the stack traces.
+# You can comment this out if you're not interested in stack traces.
+
+-renamesourcefileattribute SourceFile
+-keepattributes SourceFile,LineNumberTable
+
+# RemoteViews might need annotations.
+
+-keepattributes *Annotation*
+
+# Preserve all fundamental application classes.
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+
+# Preserve all View implementations, their special context constructors, and
+# their setters.
+
+-keep public class * extends android.view.View {
+ public <init>(android.content.Context);
+ public <init>(android.content.Context, android.util.AttributeSet);
+ public <init>(android.content.Context, android.util.AttributeSet, int);
+ public void set*(...);
+}
+
+# Preserve all classes that have special context constructors, and the
+# constructors themselves.
+
+-keepclasseswithmembers class * {
+ public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+# Preserve all classes that have special context constructors, and the
+# constructors themselves.
+
+-keepclasseswithmembers class * {
+ public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+# Preserve the special fields of all Parcelable implementations.
+
+-keepclassmembers class * implements android.os.Parcelable {
+ static android.os.Parcelable$Creator CREATOR;
+}
+
+# Preserve static fields of inner classes of R classes that might be accessed
+# through introspection.
+
+-keepclassmembers class **.R$* {
+ public static <fields>;
+}
+
+# Preserve the required interface from the License Verification Library
+# (but don't nag the developer if the library is not used at all).
+
+-keep public interface com.android.vending.licensing.ILicensingService
+
+-dontnote com.android.vending.licensing.ILicensingService
+
+# The Android Compatibility library references some classes that may not be
+# present in all versions of the API, but we know that's ok.
+
+-dontwarn android.support.**
+
+# Preserve all native method names and the names of their classes.
+
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+
+# Preserve the special static methods that are required in all enumeration
+# classes.
+
+-keepclassmembers class * extends java.lang.Enum {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+# Explicitly preserve all serialization members. The Serializable interface
+# is only a marker interface, so it wouldn't save them.
+# You can comment this out if your application doesn't use serialization.
+# If your code contains serializable classes that have to be backward
+# compatible, please refer to the manual.
+
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ static final java.io.ObjectStreamField[] serialPersistentFields;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+
+# Your application may contain more items that need to be preserved;
+# typically classes that are dynamically created using Class.forName:
+
+# -keep public class mypackage.MyClass
+# -keep public interface mypackage.MyInterface
+# -keep public class * implements mypackage.MyInterface
diff --git a/common/proguard/proguard4.7/examples/annotations/examples.pro b/common/proguard/proguard4.7/examples/annotations/examples.pro
new file mode 100644
index 0000000..3a47183
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/examples.pro
@@ -0,0 +1,60 @@
+#
+# This ProGuard configuration file illustrates how to use annotations for
+# specifying which classes and class members should be kept.
+# Usage:
+# java -jar proguard.jar @examples.pro
+#
+
+# Specify the input, output, and library jars.
+# This is assuming the code has been compiled in the examples directory.
+
+-injars examples(*.class)
+-outjars out
+
+-libraryjars <java.home>/lib/rt.jar
+
+# Some important configuration is based on the annotations in the code.
+# We have to specify what the annotations mean to ProGuard.
+
+-include lib/annotations.pro
+
+#
+# We can then still add any other options that might be useful.
+#
+
+# Print out a list of what we're preserving.
+
+-printseeds
+
+# Preserve all annotations themselves.
+
+-keepattributes *Annotation*
+
+# Preserve all native method names and the names of their classes.
+
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+
+# Preserve the special static methods that are required in all enumeration
+# classes.
+
+-keepclassmembers class * extends java.lang.Enum {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+# Explicitly preserve all serialization members. The Serializable interface
+# is only a marker interface, so it wouldn't save them.
+# You can comment this out if your application doesn't use serialization.
+# If your code contains serializable classes that have to be backward
+# compatible, please refer to the manual.
+
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ static final java.io.ObjectStreamField[] serialPersistentFields;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
diff --git a/common/proguard/proguard4.7/examples/annotations/examples/Applet.java b/common/proguard/proguard4.7/examples/annotations/examples/Applet.java
new file mode 100644
index 0000000..8a5874b
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/examples/Applet.java
@@ -0,0 +1,22 @@
+import proguard.annotation.*;
+
+/**
+ * This applet illustrates the use of annotations for configuring ProGuard.
+ *
+ * You can compile it with:
+ * javac -classpath ../lib/annotations.jar Applet.java
+ * You can then process it with:
+ * java -jar ../../../lib/proguard.jar @ ../examples.pro
+ *
+ * The annotation will preserve the class and its essential methods.
+ */
+@Keep
+public class Applet extends java.applet.Applet
+{
+ // Implementations for Applet.
+
+ public void init()
+ {
+ // ...
+ }
+}
diff --git a/common/proguard/proguard4.7/examples/annotations/examples/Application.java b/common/proguard/proguard4.7/examples/annotations/examples/Application.java
new file mode 100644
index 0000000..f8d5060
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/examples/Application.java
@@ -0,0 +1,20 @@
+import proguard.annotation.KeepApplication;
+
+/**
+ * This application illustrates the use of annotations for configuring ProGuard.
+ *
+ * You can compile it with:
+ * javac -classpath ../lib/annotations.jar Application.java
+ * You can then process it with:
+ * java -jar ../../../lib/proguard.jar @ ../examples.pro
+ *
+ * The annotation will preserve the class and its main method.
+ */
+@KeepApplication
+public class Application
+{
+ public static void main(String[] args)
+ {
+ System.out.println("The answer is 42");
+ }
+}
diff --git a/common/proguard/proguard4.7/examples/annotations/examples/Bean.java b/common/proguard/proguard4.7/examples/annotations/examples/Bean.java
new file mode 100644
index 0000000..0544bf3
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/examples/Bean.java
@@ -0,0 +1,56 @@
+import proguard.annotation.*;
+
+/**
+ * This bean illustrates the use of annotations for configuring ProGuard.
+ *
+ * You can compile it with:
+ * javac -classpath ../lib/annotations.jar Bean.java
+ * You can then process it with:
+ * java -jar ../../../lib/proguard.jar @ ../examples.pro
+ *
+ * The annotations will preserve the class and its public getters and setters.
+ */
+@Keep
+@KeepPublicGettersSetters
+public class Bean
+{
+ public boolean booleanProperty;
+ public int intProperty;
+ public String stringProperty;
+
+
+ public boolean isBooleanProperty()
+ {
+ return booleanProperty;
+ }
+
+
+ public void setBooleanProperty(boolean booleanProperty)
+ {
+ this.booleanProperty = booleanProperty;
+ }
+
+
+ public int getIntProperty()
+ {
+ return intProperty;
+ }
+
+
+ public void setIntProperty(int intProperty)
+ {
+ this.intProperty = intProperty;
+ }
+
+
+ public String getStringProperty()
+ {
+ return stringProperty;
+ }
+
+
+ public void setStringProperty(String stringProperty)
+ {
+ this.stringProperty = stringProperty;
+ }
+}
diff --git a/common/proguard/proguard4.7/examples/annotations/examples/NativeCallBack.java b/common/proguard/proguard4.7/examples/annotations/examples/NativeCallBack.java
new file mode 100644
index 0000000..2c72f7b
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/examples/NativeCallBack.java
@@ -0,0 +1,44 @@
+import proguard.annotation.*;
+
+/**
+ * This application illustrates the use of annotations for configuring ProGuard.
+ *
+ * You can compile it with:
+ * javac -classpath ../lib/annotations.jar NativeCallBack.java
+ * You can then process it with:
+ * java -jar ../../../lib/proguard.jar @ ../examples.pro
+ *
+ * The annotation will preserve the class and its main method.
+ */
+@KeepApplication
+public class NativeCallBack
+{
+ /**
+ * Suppose this is a native method that computes an answer.
+ *
+ * The -keep option regular ProGuard configuration will make sure it is
+ * not renamed when processing this code.
+ */
+ public native int computeAnswer();
+
+
+ /**
+ * Suppose this method is called back from the above native method.
+ *
+ * ProGuard would remove it, because it is not referenced from java.
+ * The annotation will make sure it is preserved anyhow.
+ */
+ @Keep
+ public int getAnswer()
+ {
+ return 42;
+ }
+
+
+ public static void main(String[] args)
+ {
+ int answer = new NativeCallBack().computeAnswer();
+
+ System.out.println("The answer is " + answer);
+ }
+}
diff --git a/common/proguard/proguard4.7/examples/annotations/lib/annotations.jar b/common/proguard/proguard4.7/examples/annotations/lib/annotations.jar
new file mode 100644
index 0000000..36f6356
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/lib/annotations.jar
Binary files differ
diff --git a/common/proguard/proguard4.7/examples/annotations/lib/annotations.pro b/common/proguard/proguard4.7/examples/annotations/lib/annotations.pro
new file mode 100644
index 0000000..f704af2
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/lib/annotations.pro
@@ -0,0 +1,118 @@
+#
+# This ProGuard configuration file specifies how annotations can be used
+# to configure the processing of other code.
+# Usage:
+# java -jar proguard.jar @annotations.pro -libraryjars annotations.jar ...
+#
+# Note that the other input/output options still have to be specified.
+# If you specify them in a separate file, you can simply include this file:
+# -include annotations.pro
+#
+# You can add any other options that are required. For instance, if you are
+# processing a library, you can still include the options from library.pro.
+
+
+# The annotations are defined in the accompanying jar. For now, we'll start
+# with these. You can always define your own annotations, if necessary.
+-libraryjars annotations.jar
+
+
+# The following annotations can be specified with classes and with class
+# members.
+
+# @Keep specifies not to shrink, optimize, or obfuscate the annotated class
+# or class member as an entry point.
+
+-keep @proguard.annotation.Keep class *
+
+-keepclassmembers class * {
+ @proguard.annotation.Keep *;
+}
+
+
+# @KeepName specifies not to optimize or obfuscate the annotated class or
+# class member as an entry point.
+
+-keepnames @proguard.annotation.KeepName class *
+
+-keepclassmembernames class * {
+ @proguard.annotation.KeepName *;
+}
+
+
+# The following annotations can only be specified with classes.
+
+# @KeepImplementations and @KeepPublicImplementations specify to keep all,
+# resp. all public, implementations or extensions of the annotated class as
+# entry points. Note the extension of the java-like syntax, adding annotations
+# before the (wild-carded) interface name.
+
+-keep class * implements @proguard.annotation.KeepImplementations *
+-keep public class * implements @proguard.annotation.KeepPublicImplementations *
+
+# @KeepApplication specifies to keep the annotated class as an application,
+# together with its main method.
+
+-keepclasseswithmembers @proguard.annotation.KeepApplication public class * {
+ public static void main(java.lang.String[]);
+}
+
+# @KeepClassMembers, @KeepPublicClassMembers, and
+# @KeepPublicProtectedClassMembers specify to keep all, all public, resp.
+# all public or protected, class members of the annotated class from being
+# shrunk, optimized, or obfuscated as entry points.
+
+-keepclassmembers @proguard.annotation.KeepClassMembers class * {
+ *;
+}
+
+-keepclassmembers @proguard.annotation.KeepPublicClassMembers class * {
+ public *;
+}
+
+-keepclassmembers @proguard.annotation.KeepPublicProtectedClassMembers class * {
+ public protected *;
+}
+
+# @KeepClassMemberNames, @KeepPublicClassMemberNames, and
+# @KeepPublicProtectedClassMemberNames specify to keep all, all public, resp.
+# all public or protected, class members of the annotated class from being
+# optimized or obfuscated as entry points.
+
+-keepclassmembernames @proguard.annotation.KeepClassMemberNames class * {
+ *;
+}
+
+-keepclassmembernames @proguard.annotation.KeepPublicClassMemberNames class * {
+ public *;
+}
+
+-keepclassmembernames @proguard.annotation.KeepPublicProtectedClassMemberNames class * {
+ public protected *;
+}
+
+# @KeepGettersSetters and @KeepPublicGettersSetters specify to keep all, resp.
+# all public, getters and setters of the annotated class from being shrunk,
+# optimized, or obfuscated as entry points.
+
+-keepclassmembers @proguard.annotation.KeepGettersSetters class * {
+ void set*(***);
+ void set*(int, ***);
+
+ boolean is*();
+ boolean is*(int);
+
+ *** get*();
+ *** get*(int);
+}
+
+-keepclassmembers @proguard.annotation.KeepPublicGettersSetters class * {
+ public void set*(***);
+ public void set*(int, ***);
+
+ public boolean is*();
+ public boolean is*(int);
+
+ public *** get*();
+ public *** get*(int);
+}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/Keep.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/Keep.java
new file mode 100644
index 0000000..93a469f
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/Keep.java
@@ -0,0 +1,18 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies not to optimize or obfuscate the annotated class or
+ * class member as an entry point.
+ */
+@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface Keep {}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepApplication.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepApplication.java
new file mode 100644
index 0000000..181f9b1
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepApplication.java
@@ -0,0 +1,18 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies to keep the annotated class as an application,
+ * together with its a main method.
+ */
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface KeepApplication {}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMemberNames.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMemberNames.java
new file mode 100644
index 0000000..b2f1df9
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMemberNames.java
@@ -0,0 +1,18 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies to keep all class members of the annotated class
+ * from being optimized or obfuscated as entry points.
+ */
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface KeepClassMemberNames {}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMembers.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMembers.java
new file mode 100644
index 0000000..7ed755b
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepClassMembers.java
@@ -0,0 +1,18 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies to keep all class members of the annotated class
+ * from being shrunk, optimized, or obfuscated as entry points.
+ */
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface KeepClassMembers {}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepGettersSetters.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepGettersSetters.java
new file mode 100644
index 0000000..497dcb7
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepGettersSetters.java
@@ -0,0 +1,18 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies to keep all getters and setters of the annotated
+ * class from being shrunk, optimized, or obfuscated as entry points.
+ */
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface KeepGettersSetters {}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepImplementations.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepImplementations.java
new file mode 100644
index 0000000..47406a3
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepImplementations.java
@@ -0,0 +1,18 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies to keep all implementations or extensions of the
+ * annotated class as entry points.
+ */
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface KeepImplementations {}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepName.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepName.java
new file mode 100644
index 0000000..5dd3680
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepName.java
@@ -0,0 +1,18 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies not to optimize or obfuscate the annotated class or
+ * class member as an entry point.
+ */
+@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface KeepName {}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMemberNames.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMemberNames.java
new file mode 100644
index 0000000..f24b126
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMemberNames.java
@@ -0,0 +1,18 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies to keep all public class members of the annotated
+ * class from being optimized or obfuscated as entry points.
+ */
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface KeepPublicClassMemberNames {}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMembers.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMembers.java
new file mode 100644
index 0000000..2be7fa4
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicClassMembers.java
@@ -0,0 +1,18 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies to keep all public class members of the annotated
+ * class from being shrunk, optimized, or obfuscated as entry points.
+ */
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface KeepPublicClassMembers {}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicGettersSetters.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicGettersSetters.java
new file mode 100644
index 0000000..6028ba9
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicGettersSetters.java
@@ -0,0 +1,18 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies to keep all public getters and setters of the
+ * annotated class from being shrunk, optimized, or obfuscated as entry points.
+ */
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface KeepPublicGettersSetters {}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicImplementations.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicImplementations.java
new file mode 100644
index 0000000..52ee5b9
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicImplementations.java
@@ -0,0 +1,18 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies to keep all public implementations or extensions
+ * of the annotated class as entry points.
+ */
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface KeepPublicImplementations {}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMemberNames.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMemberNames.java
new file mode 100644
index 0000000..59f0004
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMemberNames.java
@@ -0,0 +1,18 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies to keep all public or protected class members of
+ * the annotated class from being optimized or obfuscated as entry points.
+ */
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface KeepPublicProtectedClassMemberNames {}
diff --git a/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMembers.java b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMembers.java
new file mode 100644
index 0000000..e918a9b
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/annotations/src/proguard/annotation/KeepPublicProtectedClassMembers.java
@@ -0,0 +1,19 @@
+/*
+ * ProGuard -- shrinking, optimization, obfuscation, and preverification
+ * of Java bytecode.
+ *
+ * Copyright (c) 2002-2007 Eric Lafortune (eric@graphics.cornell.edu)
+ */
+package proguard.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation specifies to keep all public or protected class members of
+ * the annotated class from being shrunk, optimized, or obfuscated as entry
+ * points.
+ */
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.CLASS)
+@Documented
+public @interface KeepPublicProtectedClassMembers {}
diff --git a/common/proguard/proguard4.7/examples/ant/android-8.xml b/common/proguard/proguard4.7/examples/ant/android-8.xml
new file mode 100644
index 0000000..3a4316b
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/ant/android-8.xml
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="MyAndroidApp" default="help">
+
+<!-- The local.properties file is created and updated by the 'android'
+ tool.
+ It contains the path to the SDK. It should *NOT* be checked into
+ Version Control Systems. -->
+ <property file="local.properties" />
+
+ <!-- The build.properties file can be created by you and is never touched
+ by the 'android' tool. This is the place to change some of the
+ default property values used by the Ant rules.
+ Here are some properties you may want to change/update:
+
+ source.dir
+ The name of the source directory. Default is 'src'.
+ out.dir
+ The name of the output directory. Default is 'bin'.
+
+ Properties related to the SDK location or the project target should
+ be updated using the 'android' tool with the 'update' action.
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems.
+
+ -->
+ <property file="build.properties" />
+
+ <!-- The default.properties file is created and updated by the 'android'
+ tool, as well as ADT.
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems. -->
+ <property file="default.properties" />
+
+ <!-- Custom Android task to deal with the project target, and import the
+ proper rules.
+ This requires ant 1.6.0 or above. -->
+ <path id="android.antlibs">
+ <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
+ <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
+ <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
+ </path>
+
+ <taskdef name="setup"
+ classname="com.android.ant.SetupTask"
+ classpathref="android.antlibs" />
+
+<!-- extension targets. Uncomment the ones where you want to do custom work
+ in between standard targets -->
+<!--
+ <target name="-pre-build">
+ </target>
+ <target name="-pre-compile">
+ </target>
+
+ [This is typically used for code obfuscation.
+ Compiled code location: ${out.classes.absolute.dir}
+ If this is not done in place, override ${out.dex.input.absolute.dir}]
+ <target name="-post-compile">
+ </target>
+-->
+
+
+ <!-- Execute the Android Setup task that will setup some properties
+ specific to the target, and import the build rules files.
+
+ The rules file is imported from
+ <SDK>/platforms/<target_platform>/ant/ant_rules_r#.xml
+
+ To customize existing targets, there are two options:
+ - Customize only one target:
+ - copy/paste the target into this file, *before* the
+ <setup> task.
+ - customize it to your needs.
+ - Customize the whole script.
+ - copy/paste the content of the rules files (minus the top node)
+ into this file, *after* the <setup> task
+ - disable the import of the rules by changing the setup task
+ below to <setup import="false" />.
+ - customize to your needs.
+ -->
+
+ <setup />
+
+ <!-- Define a place for the optimized classes. -->
+ <property name="out.proguard.absolute.jar"
+ location="${out.absolute.dir}/classes-processed.jar" />
+
+ <!-- Define a obfuscation mapping file. -->
+ <property name="out.proguard.absolute.map"
+ location="${out.absolute.dir}/classes-processed.map" />
+
+ <!-- Redefine the dex help macro, so it converts the optimized classes.. -->
+ <macrodef name="dex-helper">
+ <element name="external-libs" optional="yes" />
+ <element name="extra-parameters" optional="yes" />
+ <sequential>
+ <echo>Converting optimized files into ${intermediate.dex.file}...</echo>
+ <apply executable="${dx}" failonerror="true" parallel="true">
+ <arg value="--dex" />
+ <arg value="--output=${intermediate.dex.file}" />
+ <extra-parameters />
+ <arg line="${verbose.option}" />
+ <fileset file="${out.proguard.absolute.jar}" />
+ <external-libs />
+ </apply>
+ </sequential>
+ </macrodef>
+
+ <!-- Define the optimization target. -->
+ <taskdef resource="proguard/ant/task.properties"
+ classpath="/home/eric/ProGuard/releases/proguard4.5.1/lib/proguard.jar" />
+
+ <target name="-post-compile">
+ <echo>Optimizing compiled files and libraries into ${out.proguard.absolute.jar}...</echo>
+ <proguard printmapping="${out.proguard.absolute.map}">
+ <injar path="${out.classes.absolute.dir}" />
+ <injar path="${external.libs.absolute.dir}" />
+ <outjar path="${out.proguard.absolute.jar}" />
+ <libraryjar refid="android.target.classpath" />
+
+ -dontpreverify
+ -repackageclasses ''
+ -allowaccessmodification
+ -optimizations !code/simplification/arithmetic
+
+ <!--
+ -renamesourcefileattribute SourceFile
+ -keepattributes SourceFile,LineNumberTable
+ -->
+
+ -keepattributes *Annotation*
+
+ -keep public class * extends android.app.Activity
+ -keep public class * extends android.app.Application
+ -keep public class * extends android.app.Service
+ -keep public class * extends android.content.BroadcastReceiver
+ -keep public class * extends android.content.ContentProvider
+
+ -keep public class * extends android.view.View {
+ public <init>(android.content.Context);
+ public <init>(android.content.Context, android.util.AttributeSet);
+ public <init>(android.content.Context, android.util.AttributeSet, int);
+ public void set*(...);
+ }
+
+ -keepclasseswithmembers class * {
+ public <init>(android.content.Context, android.util.AttributeSet);
+ }
+
+ -keepclasseswithmembers class * {
+ public <init>(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ -keepclassmembers class * implements android.os.Parcelable {
+ static android.os.Parcelable$Creator CREATOR;
+ }
+
+ -keepclassmembers class **.R$* {
+ public static <fields>;
+ }
+
+ -keep public interface com.android.vending.licensing.ILicensingService
+ -dontnote com.android.vending.licensing.ILicensingService
+
+ -keepclasseswithmembernames class * {
+ native <methods>;
+ }
+
+ -keepclassmembers class * extends java.lang.Enum {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+ }
+ </proguard>
+ </target>
+
+</project>
diff --git a/common/proguard/proguard4.7/examples/ant/applets.xml b/common/proguard/proguard4.7/examples/ant/applets.xml
new file mode 100644
index 0000000..4d0cb38
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/ant/applets.xml
@@ -0,0 +1,88 @@
+<!-- This Ant build file illustrates how to process applets.
+ Usage: ant -f applets.xml -->
+
+<project name="Applets" default="obfuscate" basedir="../..">
+
+<target name="obfuscate">
+ <taskdef resource="proguard/ant/task.properties"
+ classpath="lib/proguard.jar" />
+
+ <proguard printseeds="on"
+ printmapping="out.map"
+ renamesourcefileattribute="SourceFile">
+
+ <!-- Specify the input jars, output jars, and library jars. -->
+
+ <injar file="in.jar" />
+ <outjar file="out.jar" />
+
+ <libraryjar file="${java.home}/lib/rt.jar" />
+
+ <!-- Optionally preserve line numbers in the obfuscated stack traces.
+ <keepattribute name="LineNumberTable">
+ <keepattribute name="SourceFile">
+ -->
+
+ <!-- Preserve all annotations. -->
+
+ <keepattribute name="*Annotation*" />
+
+ <!-- Preserve all public applets. -->
+
+ <keep access="public" extends="java.applet.Applet" />
+
+ <!-- Preserve all native method names and the names of their classes. -->
+
+ <keepclasseswithmembernames>
+ <method access="native" />
+ </keepclasseswithmembernames>
+
+ <!-- Preserve the methods that are required in all enumeration classes. -->
+
+ <keepclassmembers extends="java.lang.Enum">
+ <method access="public static"
+ type="**[]"
+ name="values"
+ parameters="" />
+ <method access="public static"
+ type="**"
+ name="valueOf"
+ parameters="java.lang.String" />
+ </keepclassmembers>
+
+ <!-- Explicitly preserve all serialization members. The Serializable
+ interface is only a marker interface, so it wouldn't save them.
+ You can comment this out if your library doesn't use serialization.
+ If your code contains serializable classes that have to be backward
+ compatible, please refer to the manual. -->
+
+ <keepclassmembers implements="java.io.Serializable">
+ <field access ="static final"
+ type ="long"
+ name ="serialVersionUID" />
+ <field access ="static final"
+ type ="java.io.ObjectStreamField[]"
+ name ="serialPersistentFields" />
+ <method access ="private"
+ type ="void"
+ name ="writeObject"
+ parameters="java.io.ObjectOutputStream" />
+ <method access ="private"
+ type ="void"
+ name ="readObject"
+ parameters="java.io.ObjectInputStream" />
+ <method type ="java.lang.Object"
+ name ="writeReplace"
+ parameters="" />
+ <method type ="java.lang.Object"
+ name ="readResolve"
+ parameters="" />
+ </keepclassmembers>
+
+ <!-- Your application may contain more items that need to be preserved;
+ typically classes that are dynamically created using Class.forName -->
+
+ </proguard>
+</target>
+
+</project>
diff --git a/common/proguard/proguard4.7/examples/ant/applications1.xml b/common/proguard/proguard4.7/examples/ant/applications1.xml
new file mode 100644
index 0000000..6df5789
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/ant/applications1.xml
@@ -0,0 +1,15 @@
+<!-- This Ant build file illustrates how to process applications,
+ by including a ProGuard-style configuration file.
+ Usage: ant -f applications1.xml -->
+
+<project name="Applications" default="obfuscate" basedir="../..">
+
+<target name="obfuscate">
+ <taskdef resource="proguard/ant/task.properties"
+ classpath="lib/proguard.jar" />
+
+ <proguard configuration="examples/applications.pro" />
+
+</target>
+
+</project>
diff --git a/common/proguard/proguard4.7/examples/ant/applications2.xml b/common/proguard/proguard4.7/examples/ant/applications2.xml
new file mode 100644
index 0000000..681a894
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/ant/applications2.xml
@@ -0,0 +1,74 @@
+<!-- This Ant build file illustrates how to process applications,
+ by including ProGuard-style configuration options.
+ Usage: ant -f applications2.xml -->
+
+<project name="Applications" default="obfuscate" basedir="../..">
+
+<target name="obfuscate">
+ <taskdef resource="proguard/ant/task.properties"
+ classpath="lib/proguard.jar" />
+
+ <proguard>
+
+ <!-- Specify the input jars, output jars, and library jars. -->
+
+ -injars in.jar
+ -outjars out.jar
+
+ -libraryjars ${java.home}/lib/rt.jar
+ <!-- -libraryjars junit.jar -->
+ <!-- -libraryjars servlet.jar -->
+ <!-- -libraryjars jai_core.jar -->
+ <!-- ... -->
+
+ <!-- Save the obfuscation mapping to a file, and preserve line numbers. -->
+
+ -printmapping out.map
+ -renamesourcefileattribute SourceFile
+ -keepattributes SourceFile,LineNumberTable
+
+ <!-- Preserve all annotations. -->
+
+ -keepattributes *Annotation*
+
+ <!-- Preserve all public applications. -->
+
+ -keepclasseswithmembers public class * {
+ public static void main(java.lang.String[]);
+ }
+
+ <!-- Preserve all native method names and the names of their classes. -->
+
+ -keepclasseswithmembernames class * {
+ native <methods>;
+ }
+
+ <!-- Preserve the methods that are required in all enumeration classes. -->
+
+ -keepclassmembers class * extends java.lang.Enum {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+ }
+
+ <!-- Explicitly preserve all serialization members. The Serializable
+ interface is only a marker interface, so it wouldn't save them.
+ You can comment this out if your library doesn't use serialization.
+ If your code contains serializable classes that have to be backward
+ compatible, please refer to the manual. -->
+
+ -keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ static final java.io.ObjectStreamField[] serialPersistentFields;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+ }
+
+ <!-- Your application may contain more items that need to be preserved;
+ typically classes that are dynamically created using Class.forName -->
+
+ </proguard>
+</target>
+
+</project>
diff --git a/common/proguard/proguard4.7/examples/ant/applications3.xml b/common/proguard/proguard4.7/examples/ant/applications3.xml
new file mode 100644
index 0000000..e42eb39
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/ant/applications3.xml
@@ -0,0 +1,98 @@
+<!-- This Ant build file illustrates how to process applications,
+ using a full-blown XML configuration.
+ Usage: ant -f applications3.xml -->
+
+<project name="Applications" default="obfuscate" basedir="../..">
+
+<target name="obfuscate">
+ <taskdef resource="proguard/ant/task.properties"
+ classpath="lib/proguard.jar" />
+
+ <proguard printseeds="on"
+ printmapping="out.map"
+ renamesourcefileattribute="SourceFile">
+
+ <!-- Specify the input jars, output jars, and library jars. -->
+
+ <injar file="in.jar" />
+ <outjar file="out.jar" />
+
+ <libraryjar file="${java.home}/lib/rt.jar" />
+ <!-- libraryjar file="junit.jar" / -->
+ <!-- libraryjar file="servlet.jar" / -->
+ <!-- libraryjar file="jai_core.jar" / -->
+ <!-- ... / -->
+
+ <!-- Preserve line numbers in the obfuscated stack traces. -->
+
+ <keepattribute name="LineNumberTable" />
+ <keepattribute name="SourceFile" />
+
+ <!-- Preserve all annotations. -->
+
+ <keepattribute name="*Annotation*" />
+
+ <!-- Preserve all public applications. -->
+
+ <keepclasseswithmembers access="public">
+ <method access ="public static"
+ type ="void"
+ name ="main"
+ parameters="java.lang.String[]" />
+ </keepclasseswithmembers>
+
+ <!-- Preserve all native method names and the names of their classes. -->
+
+ <keepclasseswithmembernames>
+ <method access="native" />
+ </keepclasseswithmembernames>
+
+ <!-- Preserve the methods that are required in all enumeration classes. -->
+
+ <keepclassmembers extends="java.lang.Enum">
+ <method access="public static"
+ type="**[]"
+ name="values"
+ parameters="" />
+ <method access="public static"
+ type="**"
+ name="valueOf"
+ parameters="java.lang.String" />
+ </keepclassmembers>
+
+ <!-- Explicitly preserve all serialization members. The Serializable
+ interface is only a marker interface, so it wouldn't save them.
+ You can comment this out if your library doesn't use serialization.
+ If your code contains serializable classes that have to be backward
+ compatible, please refer to the manual. -->
+
+ <keepclassmembers implements="java.io.Serializable">
+ <field access ="static final"
+ type ="long"
+ name ="serialVersionUID" />
+ <field access ="static final"
+ type ="java.io.ObjectStreamField[]"
+ name ="serialPersistentFields" />
+ <method access ="private"
+ type ="void"
+ name ="writeObject"
+ parameters="java.io.ObjectOutputStream" />
+ <method access ="private"
+ type ="void"
+ name ="readObject"
+ parameters="java.io.ObjectInputStream" />
+ <method type ="java.lang.Object"
+ name ="writeReplace"
+ parameters="" />
+ <method type ="java.lang.Object"
+ name ="readResolve"
+ parameters="" />
+ </keepclassmembers>
+
+ <!-- Your application may contain more items that need to be preserved;
+ typically classes that are dynamically created using Class.forName -->
+
+ </proguard>
+</target>
+
+</project>
diff --git a/common/proguard/proguard4.7/examples/ant/library.xml b/common/proguard/proguard4.7/examples/ant/library.xml
new file mode 100644
index 0000000..d87bd16
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/ant/library.xml
@@ -0,0 +1,102 @@
+<!-- This Ant build file illustrates how to process a program library,
+ such that it remains usable as a library.
+ Usage: ant -f library.xml -->
+
+<project name="Library" default="obfuscate" basedir="../..">
+
+<target name="obfuscate">
+ <taskdef resource="proguard/ant/task.properties"
+ classpath="lib/proguard.jar" />
+
+ <proguard printmapping="out.map"
+ renamesourcefileattribute="SourceFile">
+
+ <!-- Specify the input jars, output jars, and library jars. -->
+
+ <injar file="library.jar" />
+ <outjar file="library_out.jar" />
+
+ <libraryjar file="${java.home}/lib/rt.jar" />
+
+ <!-- Keep some useful attributes. -->
+
+ <keepattribute name="InnerClasses" />
+ <keepattribute name="SourceFile" />
+ <keepattribute name="LineNumberTable" />
+ <keepattribute name="Deprecated" />
+ <keepattribute name="*Annotation*" />
+
+ <!-- Preserve all public classes, and their public and protected fields
+ and methods. -->
+
+ <keep access="public">
+ <field access="public protected" />
+ <method access="public protected" />
+ </keep>
+
+ <!-- Preserve all .class method names. -->
+
+ <keepclassmembernames access="public">
+ <method type ="java.lang.Class"
+ name ="class$"
+ parameters="java.lang.String" />
+ <method type ="java.lang.Class"
+ name ="class$"
+ parameters="java.lang.String,boolean" />
+ </keepclassmembernames>
+
+ <!-- Preserve all native method names and the names of their classes. -->
+
+ <keepclasseswithmembernames>
+ <method access="native" />
+ </keepclasseswithmembernames>
+
+ <!-- Preserve the methods that are required in all enumeration classes. -->
+
+ <keepclassmembers extends="java.lang.Enum">
+ <method access="public static"
+ type="**[]"
+ name="values"
+ parameters="" />
+ <method access="public static"
+ type="**"
+ name="valueOf"
+ parameters="java.lang.String" />
+ </keepclassmembers>
+
+ <!-- Explicitly preserve all serialization members. The Serializable
+ interface is only a marker interface, so it wouldn't save them.
+ You can comment this out if your library doesn't use serialization.
+ If your code contains serializable classes that have to be backward
+ compatible, please refer to the manual. -->
+
+ <keepclassmembers implements="java.io.Serializable">
+ <field access ="final"
+ type ="long"
+ name ="serialVersionUID" />
+ <field access ="static final"
+ type ="java.io.ObjectStreamField[]"
+ name ="serialPersistentFields" />
+ <method access ="private"
+ type ="void"
+ name ="writeObject"
+ parameters="java.io.ObjectOutputStream" />
+ <method access ="private"
+ type ="void"
+ name ="readObject"
+ parameters="java.io.ObjectInputStream" />
+ <method type ="java.lang.Object"
+ name ="writeReplace"
+ parameters="" />
+ <method type ="java.lang.Object"
+ name ="readResolve"
+ parameters="" />
+ </keepclassmembers>
+
+ <!-- Your application may contain more items that need to be preserved;
+ typically classes that are dynamically created using Class.forName -->
+
+ </proguard>
+</target>
+
+</project>
diff --git a/common/proguard/proguard4.7/examples/ant/midlets.xml b/common/proguard/proguard4.7/examples/ant/midlets.xml
new file mode 100644
index 0000000..223d0da
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/ant/midlets.xml
@@ -0,0 +1,52 @@
+<!-- This Ant build file illustrates how to process J2ME midlets.
+ Usage: ant -f midlets.xml -->
+
+<project name="Midlets" default="obfuscate" basedir="../..">
+
+<target name="obfuscate">
+ <taskdef resource="proguard/ant/task.properties"
+ classpath="lib/proguard.jar" />
+
+ <proguard microedition="on"
+ printseeds="on"
+ printmapping="out.map"
+ overloadaggressively="on"
+ repackageclasses=""
+ allowaccessmodification="on"
+ renamesourcefileattribute="SourceFile">
+
+ <!-- On Windows, you can't use mixed case class names,
+ should you still want to use the preverify tool.
+ usemixedcaseclassnames="false">
+ -->
+
+ <!-- Specify the input jars, output jars, and library jars. -->
+
+ <injar file="in.jar" />
+ <outjar file="out.jar" />
+
+ <libraryjar file="/usr/local/java/wtk2.5.2/lib/midpapi20.jar" />
+ <libraryjar file="/usr/local/java/wtk2.5.2/lib/cldcapi11.jar" />
+
+ <!-- Optionally preserve line numbers in the obfuscated stack traces.
+ <keepattribute name="LineNumberTable">
+ <keepattribute name="SourceFile">
+ -->
+
+ <!-- Preserve all public midlets. -->
+
+ <keep access="public" extends="javax.microedition.midlet.MIDlet" />
+
+ <!-- Preserve all native method names and the names of their classes. -->
+
+ <keepclasseswithmembernames>
+ <method access="native" />
+ </keepclasseswithmembernames>
+
+ <!-- Your application may contain more items that need to be preserved;
+ typically classes that are dynamically created using Class.forName -->
+
+ </proguard>
+</target>
+
+</project>
diff --git a/common/proguard/proguard4.7/examples/ant/proguard.xml b/common/proguard/proguard4.7/examples/ant/proguard.xml
new file mode 100644
index 0000000..f10764d
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/ant/proguard.xml
@@ -0,0 +1,78 @@
+<!-- This Ant build file illustrates how to process ProGuard (including its
+ main application, its GUI, its Ant task, and its WTK plugin), and the
+ ReTrace tool, all in one go.
+ Usage: ant -f proguard.xml -->
+
+<project name="ProGuard" default="obfuscate" basedir="../..">
+
+<target name="obfuscate">
+ <taskdef resource="proguard/ant/task.properties"
+ classpath="lib/proguard.jar" />
+
+ <proguard printmapping="proguard.map"
+ overloadaggressively="on"
+ repackageclasses=""
+ renamesourcefileattribute="SourceFile">
+
+ <!-- Specify the input jars, output jars, and library jars. -->
+
+ <injar file="lib/proguard.jar" />
+ <injar file="lib/proguardgui.jar" filter="!META-INF/**" />
+ <injar file="lib/retrace.jar" filter="!META-INF/**" />
+
+ <outjar file="examples/ant/proguard_out.jar" />
+
+ <libraryjar file="${java.home}/lib/rt.jar" />
+ <libraryjar file="/usr/local/java/ant/lib/ant.jar" />
+ <libraryjar file="/usr/local/java/wtk2.5.2/wtklib/kenv.zip" />
+
+ <!-- Adapt the resource file names, based on the corresponding obfuscated
+ class names. -->
+
+ <adaptresourcefilenames filter="**.properties,**.gif,**.jpg" />
+ <adaptresourcefilecontents filter="proguard/ant/task.properties" />
+
+ <!-- Optionally preserve line numbers in the obfuscated stack traces.
+ <keepattribute name="LineNumberTable">
+ <keepattribute name="SourceFile">
+ -->
+
+ <!-- The main seeds: ProGuard and its companion tool ReTrace. -->
+
+ <keep access="public" name="proguard.ProGuard">
+ <method access ="public static"
+ type ="void"
+ name ="main"
+ parameters="java.lang.String[]" />
+ </keep>
+ <keep access="public" name="proguard.gui.ProGuardGUI">
+ <method access ="public static"
+ type ="void"
+ name ="main"
+ parameters="java.lang.String[]" />
+ </keep>
+ <keep access="public" name="proguard.retrace.ReTrace">
+ <method access ="public static"
+ type ="void"
+ name ="main"
+ parameters="java.lang.String[]" />
+ </keep>
+
+ <!-- If we have ant.jar, we can properly process the Ant task. -->
+
+ <keeppackagename name="proguard.ant" />
+ <keep name="proguard.ant.*" allowobfuscation="true" />
+ <keepclassmembers access="public" name="proguard.ant.*">
+ <constructor parameters="org.apache.tools.ant.Project" />
+ <method access="public" type="void" name="set*" parameters="***" />
+ <method access="public" type="void" name="add*" parameters="***" />
+ </keepclassmembers>
+
+ <!-- If we have kenv.zip, we can process the J2ME WTK plugin. -->
+
+ <keep access="public" name="proguard.wtk.ProGuardObfuscator" />
+
+ </proguard>
+</target>
+
+</project>
diff --git a/common/proguard/proguard4.7/examples/ant/servlets.xml b/common/proguard/proguard4.7/examples/ant/servlets.xml
new file mode 100644
index 0000000..51bcaad
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/ant/servlets.xml
@@ -0,0 +1,88 @@
+<!-- This Ant build file illustrates how to process servlets.
+ Usage: ant -f servlets.xml -->
+
+<project name="Servlets" default="obfuscate" basedir="../..">
+
+<target name="obfuscate">
+ <taskdef resource="proguard/ant/task.properties"
+ classpath="lib/proguard.jar" />
+
+ <proguard printseeds="on"
+ printmapping="proguard.map"
+ renamesourcefileattribute="SourceFile">
+
+ <!-- Specify the input jars, output jars, and library jars. -->
+
+ <injar file="in.jar" />
+ <outjar file="out.jar" />
+
+ <libraryjar file="${java.home}/lib/rt.jar" />
+
+ <!-- Optionally preserve line numbers in the obfuscated stack traces.
+ <keepattribute name="LineNumberTable">
+ <keepattribute name="SourceFile">
+ -->
+
+ <!-- Preserve all annotations. -->
+
+ <keepattribute name="*Annotation*" />
+
+ <!-- Keep all public servlets. -->
+
+ <keep access="public" implements="javax.servlet.Servlet" />
+
+ <!-- Preserve all native method names and the names of their classes. -->
+
+ <keepclasseswithmembernames>
+ <method access="native" />
+ </keepclasseswithmembernames>
+
+ <!-- Preserve the methods that are required in all enumeration classes. -->
+
+ <keepclassmembers extends="java.lang.Enum">
+ <method access="public static"
+ type="**[]"
+ name="values"
+ parameters="" />
+ <method access="public static"
+ type="**"
+ name="valueOf"
+ parameters="java.lang.String" />
+ </keepclassmembers>
+
+ <!-- Explicitly preserve all serialization members. The Serializable
+ interface is only a marker interface, so it wouldn't save them.
+ You can comment this out if your library doesn't use serialization.
+ If your code contains serializable classes that have to be backward
+ compatible, please refer to the manual. -->
+
+ <keepclassmembers implements="java.io.Serializable">
+ <field access ="static final"
+ type ="long"
+ name ="serialVersionUID" />
+ <field access ="static final"
+ type ="java.io.ObjectStreamField[]"
+ name ="serialPersistentFields" />
+ <method access ="private"
+ type ="void"
+ name ="writeObject"
+ parameters="java.io.ObjectOutputStream" />
+ <method access ="private"
+ type ="void"
+ name ="readObject"
+ parameters="java.io.ObjectInputStream" />
+ <method type ="java.lang.Object"
+ name ="writeReplace"
+ parameters="" />
+ <method type ="java.lang.Object"
+ name ="readResolve"
+ parameters="" />
+ </keepclassmembers>
+
+ <!-- Your application may contain more items that need to be preserved;
+ typically classes that are dynamically created using Class.forName -->
+
+ </proguard>
+</target>
+
+</project>
diff --git a/common/proguard/proguard4.7/examples/applets.pro b/common/proguard/proguard4.7/examples/applets.pro
new file mode 100644
index 0000000..c5affc1
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/applets.pro
@@ -0,0 +1,69 @@
+#
+# This ProGuard configuration file illustrates how to process applets.
+# Usage:
+# java -jar proguard.jar @applets.pro
+#
+
+# Specify the input jars, output jars, and library jars.
+
+-injars in.jar
+-outjars out.jar
+
+-libraryjars <java.home>/lib/rt.jar
+
+# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
+# traces later on. Keep a fixed source file attribute and all line number
+# tables to get line numbers in the stack traces.
+# You can comment this out if you're not interested in stack traces.
+
+-printmapping out.map
+-renamesourcefileattribute SourceFile
+-keepattributes SourceFile,LineNumberTable
+
+# Preserve all annotations.
+
+-keepattributes *Annotation*
+
+# You can print out the seeds that are matching the keep options below.
+
+#-printseeds out.seeds
+
+# Preserve all public applets.
+
+-keep public class * extends java.applet.Applet
+
+# Preserve all native method names and the names of their classes.
+
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+
+# Preserve the special static methods that are required in all enumeration
+# classes.
+
+-keepclassmembers class * extends java.lang.Enum {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+# Explicitly preserve all serialization members. The Serializable interface
+# is only a marker interface, so it wouldn't save them.
+# You can comment this out if your library doesn't use serialization.
+# If your code contains serializable classes that have to be backward
+# compatible, please refer to the manual.
+
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ static final java.io.ObjectStreamField[] serialPersistentFields;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+
+# Your application may contain more items that need to be preserved;
+# typically classes that are dynamically created using Class.forName:
+
+# -keep public class mypackage.MyClass
+# -keep public interface mypackage.MyInterface
+# -keep public class * implements mypackage.MyInterface
diff --git a/common/proguard/proguard4.7/examples/applications.pro b/common/proguard/proguard4.7/examples/applications.pro
new file mode 100644
index 0000000..f718088
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/applications.pro
@@ -0,0 +1,75 @@
+#
+# This ProGuard configuration file illustrates how to process applications.
+# Usage:
+# java -jar proguard.jar @applications.pro
+#
+
+# Specify the input jars, output jars, and library jars.
+
+-injars in.jar
+-outjars out.jar
+
+-libraryjars <java.home>/lib/rt.jar
+#-libraryjars junit.jar
+#-libraryjars servlet.jar
+#-libraryjars jai_core.jar
+#...
+
+# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
+# traces later on. Keep a fixed source file attribute and all line number
+# tables to get line numbers in the stack traces.
+# You can comment this out if you're not interested in stack traces.
+
+-printmapping out.map
+-renamesourcefileattribute SourceFile
+-keepattributes SourceFile,LineNumberTable
+
+# Preserve all annotations.
+
+-keepattributes *Annotation*
+
+# You can print out the seeds that are matching the keep options below.
+
+#-printseeds out.seeds
+
+# Preserve all public applications.
+
+-keepclasseswithmembers public class * {
+ public static void main(java.lang.String[]);
+}
+
+# Preserve all native method names and the names of their classes.
+
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+
+# Preserve the special static methods that are required in all enumeration
+# classes.
+
+-keepclassmembers class * extends java.lang.Enum {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+# Explicitly preserve all serialization members. The Serializable interface
+# is only a marker interface, so it wouldn't save them.
+# You can comment this out if your application doesn't use serialization.
+# If your code contains serializable classes that have to be backward
+# compatible, please refer to the manual.
+
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ static final java.io.ObjectStreamField[] serialPersistentFields;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+
+# Your application may contain more items that need to be preserved;
+# typically classes that are dynamically created using Class.forName:
+
+# -keep public class mypackage.MyClass
+# -keep public interface mypackage.MyInterface
+# -keep public class * implements mypackage.MyInterface
diff --git a/common/proguard/proguard4.7/examples/dictionaries/compact.txt b/common/proguard/proguard4.7/examples/dictionaries/compact.txt
new file mode 100644
index 0000000..5636a3e
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/dictionaries/compact.txt
@@ -0,0 +1,18 @@
+#
+# This obfuscation dictionary contains strings that are already present
+# in many class files. Since these strings can be shared, the resulting
+# obfuscated class files will generally be a little bit more compact.
+# Usage:
+# java -jar proguard.jar ..... -obfuscationdictionary compact.txt
+#
+
+Code
+V
+I
+Z
+B
+C
+S
+F
+D
+L
diff --git a/common/proguard/proguard4.7/examples/dictionaries/keywords.txt b/common/proguard/proguard4.7/examples/dictionaries/keywords.txt
new file mode 100644
index 0000000..76f5a7b
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/dictionaries/keywords.txt
@@ -0,0 +1,58 @@
+#
+# This obfuscation dictionary contains reserved Java keywords. They can't
+# be used in Java source files, but they can be used in compiled class files.
+# Note that this hardly improves the obfuscation. Decent decompilers can
+# automatically replace reserved keywords, and the effect can fairly simply be
+# undone by obfuscating again with simpler names.
+# Usage:
+# java -jar proguard.jar ..... -obfuscationdictionary keywords.txt
+#
+
+do
+if
+for
+int
+new
+try
+byte
+case
+char
+else
+goto
+long
+this
+void
+break
+catch
+class
+const
+final
+float
+short
+super
+throw
+while
+double
+import
+native
+public
+return
+static
+switch
+throws
+boolean
+default
+extends
+finally
+package
+private
+abstract
+continue
+strictfp
+volatile
+interface
+protected
+transient
+implements
+instanceof
+synchronized
diff --git a/common/proguard/proguard4.7/examples/dictionaries/shakespeare.txt b/common/proguard/proguard4.7/examples/dictionaries/shakespeare.txt
new file mode 100644
index 0000000..28b1cd8
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/dictionaries/shakespeare.txt
@@ -0,0 +1,23 @@
+#
+# This obfuscation dictionary contains quotes from plays by Shakespeare.
+# It illustrates that any text can be used, for whatever flippant reasons
+# one may have.
+# Usage:
+# java -jar proguard.jar ..... -obfuscationdictionary shakespeare.txt
+#
+
+
+"This thing of darkness I acknowledge mine."
+
+ --From The Tempest (V, i, 275-276)
+
+
+"Though this be madness, yet there is method in 't."
+
+ --From Hamlet (II, ii, 206)
+
+
+"What's in a name? That which we call a rose
+ By any other word would smell as sweet."
+
+ --From Romeo and Juliet (II, ii, 1-2)
diff --git a/common/proguard/proguard4.7/examples/dictionaries/windows.txt b/common/proguard/proguard4.7/examples/dictionaries/windows.txt
new file mode 100644
index 0000000..fd65dc9
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/dictionaries/windows.txt
@@ -0,0 +1,209 @@
+#
+# This obfuscation dictionary contains names that are not allowed as file names
+# in Windows, not even with extensions like .class or .java. They can however
+# be used without problems in jar archives, which just begs to apply them as
+# obfuscated class names. Trying to unpack the obfuscated archives in Windows
+# will probably generate some sparks.
+# Usage:
+# java -jar proguard.jar ..... -classobfuscationdictionary windows.txt
+# -packageobfuscationdictionary windows.txt
+#
+
+aux
+Aux
+aUx
+AUx
+auX
+AuX
+aUX
+AUX
+AUX
+con
+Con
+cOn
+COn
+coN
+CoN
+cON
+CON
+CON
+nul
+Nul
+nUl
+NUl
+nuL
+NuL
+nUL
+NUL
+NUL
+prn
+Prn
+pRn
+PRn
+prN
+PrN
+pRN
+PRN
+PRN
+com1
+Com1
+cOm1
+COm1
+coM1
+CoM1
+cOM1
+COM1
+COM1
+com2
+Com2
+cOm2
+COm2
+coM2
+CoM2
+cOM2
+COM2
+COM2
+com3
+Com3
+cOm3
+COm3
+coM3
+CoM3
+cOM3
+COM3
+COM3
+com4
+Com4
+cOm4
+COm4
+coM4
+CoM4
+cOM4
+COM4
+COM4
+com5
+Com5
+cOm5
+COm5
+coM5
+CoM5
+cOM5
+COM5
+COM5
+com6
+Com6
+cOm6
+COm6
+coM6
+CoM6
+cOM6
+COM6
+COM6
+com7
+Com7
+cOm7
+COm7
+coM7
+CoM7
+cOM7
+COM7
+COM7
+com8
+Com8
+cOm8
+COm8
+coM8
+CoM8
+cOM8
+COM8
+COM8
+com9
+Com9
+cOm9
+COm9
+coM9
+CoM9
+cOM9
+COM9
+COM9
+lpt1
+Lpt1
+lPt1
+LPt1
+lpT1
+LpT1
+lPT1
+LPT1
+LPT1
+lpt2
+Lpt2
+lPt2
+LPt2
+lpT2
+LpT2
+lPT2
+LPT2
+LPT2
+lpt3
+Lpt3
+lPt3
+LPt3
+lpT3
+LpT3
+lPT3
+LPT3
+LPT3
+lpt4
+Lpt4
+lPt4
+LPt4
+lpT4
+LpT4
+lPT4
+LPT4
+LPT4
+lpt5
+Lpt5
+lPt5
+LPt5
+lpT5
+LpT5
+lPT5
+LPT5
+LPT5
+lpt6
+Lpt6
+lPt6
+LPt6
+lpT6
+LpT6
+lPT6
+LPT6
+LPT6
+lpt7
+Lpt7
+lPt7
+LPt7
+lpT7
+LpT7
+lPT7
+LPT7
+LPT7
+lpt8
+Lpt8
+lPt8
+LPt8
+lpT8
+LpT8
+lPT8
+LPT8
+LPT8
+lpt9
+Lpt9
+lPt9
+LPt9
+lpT9
+LpT9
+lPT9
+LPT9
+LPT9
diff --git a/common/proguard/proguard4.7/examples/library.pro b/common/proguard/proguard4.7/examples/library.pro
new file mode 100644
index 0000000..b812082
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/library.pro
@@ -0,0 +1,79 @@
+#
+# This ProGuard configuration file illustrates how to process a program
+# library, such that it remains usable as a library.
+# Usage:
+# java -jar proguard.jar @library.pro
+#
+
+# Specify the input jars, output jars, and library jars.
+# In this case, the input jar is the program library that we want to process.
+
+-injars in.jar
+-outjars out.jar
+
+-libraryjars <java.home>/lib/rt.jar
+
+# Save the obfuscation mapping to a file, so we can de-obfuscate any stack
+# traces later on. Keep a fixed source file attribute and all line number
+# tables to get line numbers in the stack traces.
+# You can comment this out if you're not interested in stack traces.
+
+-printmapping out.map
+-keepparameternames
+-renamesourcefileattribute SourceFile
+-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
+ SourceFile,LineNumberTable,EnclosingMethod
+
+# Preserve all annotations.
+
+-keepattributes *Annotation*
+
+# Preserve all public classes, and their public and protected fields and
+# methods.
+
+-keep public class * {
+ public protected *;
+}
+
+# Preserve all .class method names.
+
+-keepclassmembernames class * {
+ java.lang.Class class$(java.lang.String);
+ java.lang.Class class$(java.lang.String, boolean);
+}
+
+# Preserve all native method names and the names of their classes.
+
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+
+# Preserve the special static methods that are required in all enumeration
+# classes.
+
+-keepclassmembers class * extends java.lang.Enum {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+# Explicitly preserve all serialization members. The Serializable interface
+# is only a marker interface, so it wouldn't save them.
+# You can comment this out if your library doesn't use serialization.
+# If your code contains serializable classes that have to be backward
+# compatible, please refer to the manual.
+
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ static final java.io.ObjectStreamField[] serialPersistentFields;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+
+# Your library may contain more items that need to be preserved;
+# typically classes that are dynamically created using Class.forName:
+
+# -keep public class mypackage.MyClass
+# -keep public interface mypackage.MyInterface
+# -keep public class * implements mypackage.MyInterface
diff --git a/common/proguard/proguard4.7/examples/midlets.pro b/common/proguard/proguard4.7/examples/midlets.pro
new file mode 100644
index 0000000..1383980
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/midlets.pro
@@ -0,0 +1,67 @@
+#
+# This ProGuard configuration file illustrates how to process J2ME midlets.
+# Usage:
+# java -jar proguard.jar @midlets.pro
+#
+
+# Specify the input jars, output jars, and library jars.
+
+-injars in.jar
+-outjars out.jar
+
+-libraryjars /usr/local/java/wtk2.5.2/lib/midpapi20.jar
+-libraryjars /usr/local/java/wtk2.5.2/lib/cldcapi11.jar
+
+# Preverify the code suitably for Java Micro Edition.
+
+-microedition
+
+# Allow methods with the same signature, except for the return type,
+# to get the same obfuscation name.
+
+-overloadaggressively
+
+# Put all obfuscated classes into the nameless root package.
+
+-repackageclasses ''
+
+# Allow classes and class members to be made public.
+
+-allowaccessmodification
+
+# On Windows, you can't use mixed case class names,
+# should you still want to use the preverify tool.
+#
+# -dontusemixedcaseclassnames
+
+# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
+# traces later on.
+
+-printmapping out.map
+
+# You can keep a fixed source file attribute and all line number tables to
+# get stack traces with line numbers.
+
+#-renamesourcefileattribute SourceFile
+#-keepattributes SourceFile,LineNumberTable
+
+# You can print out the seeds that are matching the keep options below.
+
+#-printseeds out.seeds
+
+# Preserve all public midlets.
+
+-keep public class * extends javax.microedition.midlet.MIDlet
+
+# Preserve all native method names and the names of their classes.
+
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+
+# Your midlet may contain more items that need to be preserved;
+# typically classes that are dynamically created using Class.forName:
+
+# -keep public class mypackage.MyClass
+# -keep public interface mypackage.MyInterface
+# -keep public class * implements mypackage.MyInterface
diff --git a/common/proguard/proguard4.7/examples/proguard.pro b/common/proguard/proguard4.7/examples/proguard.pro
new file mode 100644
index 0000000..3b0a926
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/proguard.pro
@@ -0,0 +1,57 @@
+#
+# This ProGuard configuration file illustrates how to process ProGuard itself.
+# Configuration files for typical applications will be very similar.
+# Usage:
+# java -jar proguard.jar @proguard.pro
+#
+
+# Specify the input jars, output jars, and library jars.
+# We'll filter out the Ant and WTK classes, keeping everything else.
+
+-injars ../lib/proguard.jar(!proguard/ant/**,!proguard/wtk/**)
+-outjars proguard_out.jar
+
+-libraryjars <java.home>/lib/rt.jar
+
+# Write out an obfuscation mapping file, for de-obfuscating any stack traces
+# later on, or for incremental obfuscation of extensions.
+
+-printmapping proguard.map
+
+# Allow methods with the same signature, except for the return type,
+# to get the same obfuscation name.
+
+-overloadaggressively
+
+# Put all obfuscated classes into the nameless root package.
+
+-repackageclasses ''
+
+# Allow classes and class members to be made public.
+
+-allowaccessmodification
+
+# The entry point: ProGuard and its main method.
+
+-keep public class proguard.ProGuard {
+ public static void main(java.lang.String[]);
+}
+
+# If you want to preserve the Ant task as well, you'll have to specify the
+# main ant.jar.
+
+#-libraryjars /usr/local/java/ant/lib/ant.jar
+#-adaptresourcefilecontents proguard/ant/task.properties
+#
+#-keep,allowobfuscation class proguard.ant.*
+#-keepclassmembers public class proguard.ant.* {
+# <init>(org.apache.tools.ant.Project);
+# public void set*(***);
+# public void add*(***);
+#}
+
+# If you want to preserve the WTK obfuscation plug-in, you'll have to specify
+# the kenv.zip file.
+
+#-libraryjars /usr/local/java/wtk2.5.2/wtklib/kenv.zip
+#-keep public class proguard.wtk.ProGuardObfuscator
diff --git a/common/proguard/proguard4.7/examples/proguardall.pro b/common/proguard/proguard4.7/examples/proguardall.pro
new file mode 100644
index 0000000..da9c2b3
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/proguardall.pro
@@ -0,0 +1,62 @@
+#
+# This ProGuard configuration file illustrates how to process ProGuard
+# (including its main application, its GUI, its Ant task, and its WTK plugin),
+# and the ReTrace tool, all in one go.
+# Configuration files for typical applications will be very similar.
+# Usage:
+# java -jar proguard.jar @proguardall.pro
+#
+
+# Specify the input jars, output jars, and library jars.
+# We'll read all jars from the lib directory, process them, and write the
+# processed jars to a new out directory.
+
+-injars ../lib
+-outjars out
+
+# You may have to adapt the paths below.
+
+-libraryjars <java.home>/lib/rt.jar
+-libraryjars /usr/local/java/ant/lib/ant.jar
+-libraryjars /usr/local/java/wtk2.5.2/wtklib/kenv.zip
+
+# Allow methods with the same signature, except for the return type,
+# to get the same obfuscation name.
+
+-overloadaggressively
+
+# Put all obfuscated classes into the nameless root package.
+
+-repackageclasses ''
+
+# Adapt the names and contents of the resource files.
+
+-adaptresourcefilenames **.properties,**.gif,**.jpg
+-adaptresourcefilecontents proguard/ant/task.properties
+
+# The main entry points.
+
+-keep public class proguard.ProGuard {
+ public static void main(java.lang.String[]);
+}
+
+-keep public class proguard.gui.ProGuardGUI {
+ public static void main(java.lang.String[]);
+}
+
+-keep public class proguard.retrace.ReTrace {
+ public static void main(java.lang.String[]);
+}
+
+# If we have ant.jar, we can properly process the Ant task.
+
+-keep,allowobfuscation class proguard.ant.*
+-keepclassmembers public class proguard.ant.* {
+ <init>(org.apache.tools.ant.Project);
+ public void set*(***);
+ public void add*(***);
+}
+
+# If we have kenv.zip, we can process the J2ME WTK plugin.
+
+-keep public class proguard.wtk.ProGuardObfuscator
diff --git a/common/proguard/proguard4.7/examples/proguardgui.pro b/common/proguard/proguard4.7/examples/proguardgui.pro
new file mode 100644
index 0000000..f14ce14
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/proguardgui.pro
@@ -0,0 +1,50 @@
+#
+# This ProGuard configuration file illustrates how to process the ProGuard GUI.
+# Configuration files for typical applications will be very similar.
+# Usage:
+# java -jar proguard.jar @proguardgui.pro
+#
+
+# Specify the input jars, output jars, and library jars.
+# The input jars will be merged in a single output jar.
+# We'll filter out the Ant and WTK classes.
+
+-injars ../lib/proguardgui.jar
+-injars ../lib/proguard.jar(!META-INF/**,!proguard/ant/**,!proguard/wtk/**)
+-injars ../lib/retrace.jar (!META-INF/**)
+-outjars proguardgui_out.jar
+
+-libraryjars <java.home>/lib/rt.jar
+
+# If we wanted to reuse the previously obfuscated proguard_out.jar, we could
+# perform incremental obfuscation based on its mapping file, and only keep the
+# additional GUI files instead of all files.
+
+#-applymapping proguard.map
+#-injars ../lib/proguardgui.jar
+#-outjars proguardgui_out.jar
+#-libraryjars ../lib/proguard.jar(!proguard/ant/**,!proguard/wtk/**)
+#-libraryjars ../lib/retrace.jar
+#-libraryjars <java.home>/lib/rt.jar
+
+
+# Allow methods with the same signature, except for the return type,
+# to get the same obfuscation name.
+
+-overloadaggressively
+
+# Put all obfuscated classes into the nameless root package.
+
+-repackageclasses ''
+
+# Adapt the names of resource files, based on the corresponding obfuscated
+# class names. Notably, in this case, the GUI resource properties file will
+# have to be renamed.
+
+-adaptresourcefilenames **.properties,**.gif,**.jpg
+
+# The entry point: ProGuardGUI and its main method.
+
+-keep public class proguard.gui.ProGuardGUI {
+ public static void main(java.lang.String[]);
+}
diff --git a/common/proguard/proguard4.7/examples/retrace.pro b/common/proguard/proguard4.7/examples/retrace.pro
new file mode 100644
index 0000000..39f5a95
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/retrace.pro
@@ -0,0 +1,43 @@
+#
+# This ProGuard configuration file illustrates how to process the ReTrace tool.
+# Configuration files for typical applications will be very similar.
+# Usage:
+# java -jar proguard.jar @retrace.pro
+#
+
+# Specify the input jars, output jars, and library jars.
+# The input jars will be merged in a single output jar.
+# We'll filter out the Ant and WTK classes.
+
+-injars ../lib/retrace.jar
+-injars ../lib/proguard.jar(!META-INF/MANIFEST.MF,
+ !proguard/ant/**,!proguard/wtk/**)
+-outjars retrace_out.jar
+
+-libraryjars <java.home>/lib/rt.jar
+
+# If we wanted to reuse the previously obfuscated proguard_out.jar, we could
+# perform incremental obfuscation based on its mapping file, and only keep the
+# additional ReTrace files instead of all files.
+
+#-applymapping proguard.map
+#-outjars retrace_out.jar(proguard/retrace/**)
+
+# Allow methods with the same signature, except for the return type,
+# to get the same obfuscation name.
+
+-overloadaggressively
+
+# Put all obfuscated classes into the nameless root package.
+
+-repackageclasses ''
+
+# Allow classes and class members to be made public.
+
+-allowaccessmodification
+
+# The entry point: ReTrace and its main method.
+
+-keep public class proguard.retrace.ReTrace {
+ public static void main(java.lang.String[]);
+}
diff --git a/common/proguard/proguard4.7/examples/scala.pro b/common/proguard/proguard4.7/examples/scala.pro
new file mode 100644
index 0000000..658fc77
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/scala.pro
@@ -0,0 +1,132 @@
+#
+# This ProGuard configuration file illustrates how to process Scala
+# applications, including the Scala runtime.
+# Usage:
+# java -jar proguard.jar @scala.pro
+#
+
+# Specify the input jars, output jars, and library jars.
+
+-injars in.jar
+-injars /usr/local/java/scala-2.9.1/lib/scala-library.jar
+#-injars /usr/local/java/scala-2.9.1/lib/scala-compiler.jar(!META-INF/MANIFEST.MF)
+#-injars /usr/local/java/scala-2.9.1/lib/jline.jar(!META-INF/MANIFEST.MF)
+-outjars out.jar
+
+-libraryjars <java.home>/lib/rt.jar
+#-libraryjars /usr/local/java/ant/lib/ant.jar
+#...
+
+# Ignore some compiler artefacts.
+
+-dontwarn scala.**
+
+# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
+# traces later on. Keep a fixed source file attribute and all line number
+# tables to get line numbers in the stack traces.
+# You can comment this out if you're not interested in stack traces.
+
+-printmapping out.map
+-renamesourcefileattribute SourceFile
+-keepattributes SourceFile,LineNumberTable
+
+# Preserve all annotations.
+
+-keepattributes *Annotation*
+
+# You can print out the seeds that are matching the keep options below.
+
+#-printseeds out.seeds
+
+# Preserve all public applications.
+
+-keepclasseswithmembers public class * {
+ public static void main(java.lang.String[]);
+}
+
+# Preserve some classes and class members that are accessed by means of
+# introspection.
+
+-keep class * implements org.xml.sax.EntityResolver
+
+-keepclassmembers class * {
+ ** MODULE$;
+}
+
+-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinPool {
+ long eventCount;
+ int workerCounts;
+ int runControl;
+ scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode syncStack;
+ scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode spareStack;
+}
+
+-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinWorkerThread {
+ int base;
+ int sp;
+ int runState;
+}
+
+-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinTask {
+ int status;
+}
+
+-keepclassmembernames class scala.concurrent.forkjoin.LinkedTransferQueue {
+ scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference head;
+ scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference tail;
+ scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference cleanMe;
+}
+
+# Preserve some classes and class members that are accessed by means of
+# introspection in the Scala compiler library, if it is processed as well.
+
+#-keep class * implements jline.Completor
+#-keep class * implements jline.Terminal
+
+#-keep class scala.tools.nsc.Global
+
+#-keepclasseswithmembers class * {
+# <init>(scala.tools.nsc.Global);
+#}
+
+#-keepclassmembers class * {
+# *** scala_repl_value();
+# *** scala_repl_result();
+#}
+
+# Preserve all native method names and the names of their classes.
+
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+
+# Preserve the special static methods that are required in all enumeration
+# classes.
+
+-keepclassmembers class * extends java.lang.Enum {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+# Explicitly preserve all serialization members. The Serializable interface
+# is only a marker interface, so it wouldn't save them.
+# You can comment this out if your application doesn't use serialization.
+# If your code contains serializable classes that have to be backward
+# compatible, please refer to the manual.
+
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ static final java.io.ObjectStreamField[] serialPersistentFields;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+
+# Your application may contain more items that need to be preserved;
+# typically classes that are dynamically created using Class.forName:
+
+# -keep public class mypackage.MyClass
+# -keep public interface mypackage.MyInterface
+# -keep public class * implements mypackage.MyInterface
+
diff --git a/common/proguard/proguard4.7/examples/servlets.pro b/common/proguard/proguard4.7/examples/servlets.pro
new file mode 100644
index 0000000..b42b2e4
--- /dev/null
+++ b/common/proguard/proguard4.7/examples/servlets.pro
@@ -0,0 +1,70 @@
+#
+# This ProGuard configuration file illustrates how to process servlets.
+# Usage:
+# java -jar proguard.jar @servlets.pro
+#
+
+# Specify the input jars, output jars, and library jars.
+
+-injars in.jar
+-outjars out.jar
+
+-libraryjars <java.home>/lib/rt.jar
+-libraryjars /usr/local/java/servlet/servlet.jar
+
+# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
+# traces later on. Keep a fixed source file attribute and all line number
+# tables to get line numbers in the stack traces.
+# You can comment this out if you're not interested in stack traces.
+
+-printmapping out.map
+-renamesourcefileattribute SourceFile
+-keepattributes SourceFile,LineNumberTable
+
+# Preserve all annotations.
+
+-keepattributes *Annotation*
+
+# You can print out the seeds that are matching the keep options below.
+
+#-printseeds out.seeds
+
+# Preserve all public servlets.
+
+-keep public class * implements javax.servlet.Servlet
+
+# Preserve all native method names and the names of their classes.
+
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+
+# Preserve the special static methods that are required in all enumeration
+# classes.
+
+-keepclassmembers class * extends java.lang.Enum {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+# Explicitly preserve all serialization members. The Serializable interface
+# is only a marker interface, so it wouldn't save them.
+# You can comment this out if your library doesn't use serialization.
+# If your code contains serializable classes that have to be backward
+# compatible, please refer to the manual.
+
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ static final java.io.ObjectStreamField[] serialPersistentFields;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+
+# Your application may contain more items that need to be preserved;
+# typically classes that are dynamically created using Class.forName:
+
+# -keep public class mypackage.MyClass
+# -keep public interface mypackage.MyInterface
+# -keep public class * implements mypackage.MyInterface
diff --git a/common/proguard/proguard4.7/lib/proguard.jar b/common/proguard/proguard4.7/lib/proguard.jar
new file mode 100644
index 0000000..56d68ba
--- /dev/null
+++ b/common/proguard/proguard4.7/lib/proguard.jar
Binary files differ
diff --git a/common/proguard/proguard4.7/lib/proguardgui.jar b/common/proguard/proguard4.7/lib/proguardgui.jar
new file mode 100644
index 0000000..5cf8f81
--- /dev/null
+++ b/common/proguard/proguard4.7/lib/proguardgui.jar
Binary files differ
diff --git a/common/proguard/proguard4.7/lib/retrace.jar b/common/proguard/proguard4.7/lib/retrace.jar
new file mode 100644
index 0000000..a872adb
--- /dev/null
+++ b/common/proguard/proguard4.7/lib/retrace.jar
Binary files differ
diff --git a/common/proguard/proguard4.7/src/proguard/ant/task.properties b/common/proguard/proguard4.7/src/proguard/ant/task.properties
new file mode 100644
index 0000000..b676db7
--- /dev/null
+++ b/common/proguard/proguard4.7/src/proguard/ant/task.properties
@@ -0,0 +1,2 @@
+proguard = proguard.ant.ProGuardTask
+proguardconfiguration = proguard.ant.ConfigurationTask